summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarco Barisione <marco.barisione@collabora.co.uk>2013-05-16 15:55:43 +0100
committerMarco Barisione <marco.barisione@collabora.co.uk>2013-08-20 11:11:30 +0100
commit3e805b92dda8086dfe59fb40d14237743e922b0e (patch)
treef67bd2b27926a595e9408290b7eb2f3caeebd338
parent6aa746ded5895c0bff9a8e1bf0542f060107505e (diff)
downloadtelepathy-account-widgets-3e805b92dda8086dfe59fb40d14237743e922b0e.tar.gz
Remove Empathy files we don't need any more
https://bugzilla.gnome.org/show_bug.cgi?id=699492
-rw-r--r--.gitmodules3
-rw-r--r--COPYING-DOCS451
-rw-r--r--COPYING.SHARE-ALIKE61
-rw-r--r--ChangeLog.old2353
-rw-r--r--HACKING35
-rw-r--r--Makefile.am2
-rw-r--r--PASTEBIN-API-KEY.txt110
-rw-r--r--TODO7
-rw-r--r--data/.gitignore6
-rw-r--r--data/Empathy.Auth.client17
-rw-r--r--data/Empathy.Call.client23
-rw-r--r--data/Empathy.Chat.client14
-rw-r--r--data/Empathy.FileTransfer.client7
-rw-r--r--data/Makefile.am62
-rw-r--r--data/Template.html343
-rw-r--r--data/empathy-log-window.html296
-rw-r--r--data/empathy.convert61
-rw-r--r--data/empathy.css16
-rw-r--r--data/empathy.desktop.in.in18
-rw-r--r--data/icons/Makefile.am84
-rw-r--r--data/icons/empathy.svg1081
-rw-r--r--data/icons/hicolor_actions_16x16_im-message-new.pngbin693 -> 0 bytes
-rw-r--r--data/icons/hicolor_actions_22x22_im-message-new.pngbin955 -> 0 bytes
-rw-r--r--data/icons/hicolor_actions_24x24_im-message-new.pngbin994 -> 0 bytes
-rw-r--r--data/icons/hicolor_apps_16x16_empathy.pngbin905 -> 0 bytes
-rw-r--r--data/icons/hicolor_apps_22x22_empathy.pngbin1138 -> 0 bytes
-rw-r--r--data/icons/hicolor_apps_24x24_empathy.pngbin1118 -> 0 bytes
-rw-r--r--data/icons/hicolor_apps_256x256_empathy.pngbin17105 -> 0 bytes
-rw-r--r--data/icons/hicolor_apps_32x32_empathy.pngbin1640 -> 0 bytes
-rw-r--r--data/icons/hicolor_apps_48x48_empathy.pngbin2317 -> 0 bytes
-rw-r--r--data/icons/hicolor_status_16x16_empathy-pending.pngbin606 -> 0 bytes
-rw-r--r--data/icons/hicolor_status_16x16_im-message.pngbin510 -> 0 bytes
-rw-r--r--data/icons/hicolor_status_16x16_user-available.pngbin685 -> 0 bytes
-rw-r--r--data/icons/hicolor_status_16x16_user-away.pngbin536 -> 0 bytes
-rw-r--r--data/icons/hicolor_status_16x16_user-busy.pngbin618 -> 0 bytes
-rw-r--r--data/icons/hicolor_status_16x16_user-idle.pngbin752 -> 0 bytes
-rw-r--r--data/icons/hicolor_status_16x16_user-offline.pngbin405 -> 0 bytes
-rw-r--r--data/icons/hicolor_status_16x16_user-typing.pngbin587 -> 0 bytes
-rw-r--r--data/icons/hicolor_status_22x22_empathy-pending.pngbin806 -> 0 bytes
-rw-r--r--data/icons/hicolor_status_22x22_im-message.pngbin654 -> 0 bytes
-rw-r--r--data/icons/hicolor_status_22x22_user-available.pngbin967 -> 0 bytes
-rw-r--r--data/icons/hicolor_status_22x22_user-away.pngbin740 -> 0 bytes
-rw-r--r--data/icons/hicolor_status_22x22_user-busy.pngbin1041 -> 0 bytes
-rw-r--r--data/icons/hicolor_status_22x22_user-idle.pngbin1115 -> 0 bytes
-rw-r--r--data/icons/hicolor_status_22x22_user-offline.pngbin571 -> 0 bytes
-rw-r--r--data/icons/hicolor_status_24x24_empathy-pending.pngbin950 -> 0 bytes
-rw-r--r--data/icons/hicolor_status_24x24_user-available.pngbin1075 -> 0 bytes
-rw-r--r--data/icons/hicolor_status_24x24_user-away.pngbin825 -> 0 bytes
-rw-r--r--data/icons/hicolor_status_24x24_user-busy.pngbin1081 -> 0 bytes
-rw-r--r--data/icons/hicolor_status_24x24_user-idle.pngbin1199 -> 0 bytes
-rw-r--r--data/icons/hicolor_status_24x24_user-offline.pngbin570 -> 0 bytes
-rw-r--r--data/icons/hicolor_status_32x32_empathy-pending.pngbin1298 -> 0 bytes
-rw-r--r--data/icons/hicolor_status_32x32_user-available.pngbin1433 -> 0 bytes
-rw-r--r--data/icons/hicolor_status_32x32_user-away.pngbin1057 -> 0 bytes
-rw-r--r--data/icons/hicolor_status_32x32_user-busy.pngbin1218 -> 0 bytes
-rw-r--r--data/icons/hicolor_status_32x32_user-idle.pngbin1612 -> 0 bytes
-rw-r--r--data/icons/hicolor_status_32x32_user-offline.pngbin724 -> 0 bytes
-rw-r--r--data/icons/hicolor_status_48x48_empathy-pending.pngbin2018 -> 0 bytes
-rw-r--r--data/icons/hicolor_status_48x48_user-available.pngbin2211 -> 0 bytes
-rw-r--r--data/icons/hicolor_status_48x48_user-away.pngbin1606 -> 0 bytes
-rw-r--r--data/icons/hicolor_status_48x48_user-busy.pngbin1848 -> 0 bytes
-rw-r--r--data/icons/hicolor_status_48x48_user-idle.pngbin2622 -> 0 bytes
-rw-r--r--data/icons/hicolor_status_48x48_user-offline.pngbin1062 -> 0 bytes
-rw-r--r--data/icons/hicolor_status_scalable_empathy-pending.svg103
-rw-r--r--data/icons/hicolor_status_scalable_user-available.svg104
-rw-r--r--data/icons/hicolor_status_scalable_user-away.svg93
-rw-r--r--data/icons/hicolor_status_scalable_user-busy.svg140
-rw-r--r--data/icons/hicolor_status_scalable_user-idle.svg120
-rw-r--r--data/icons/hicolor_status_scalable_user-offline.svg101
-rw-r--r--data/org.freedesktop.Telepathy.Client.Empathy.Auth.service.in3
-rw-r--r--data/org.freedesktop.Telepathy.Client.Empathy.Call.service.in3
-rw-r--r--data/org.freedesktop.Telepathy.Client.Empathy.Chat.service.in3
-rw-r--r--data/org.freedesktop.Telepathy.Client.Empathy.FileTransfer.service.in3
-rw-r--r--data/themes/Boxes.AdiumMessageStyle/Contents/Info.plist35
-rw-r--r--data/themes/Boxes.AdiumMessageStyle/Contents/Resources/Incoming/Content.html12
-rw-r--r--data/themes/Boxes.AdiumMessageStyle/Contents/Resources/Incoming/NextContent.html5
-rw-r--r--data/themes/Boxes.AdiumMessageStyle/Contents/Resources/Status.html5
-rw-r--r--data/themes/Boxes.AdiumMessageStyle/Contents/Resources/Variants/Blue.css9
-rw-r--r--data/themes/Boxes.AdiumMessageStyle/Contents/Resources/Variants/Clean.css5
-rw-r--r--data/themes/Boxes.AdiumMessageStyle/Contents/Resources/Variants/Simple.css6
-rw-r--r--data/themes/Boxes.AdiumMessageStyle/Contents/Resources/main.css84
-rw-r--r--data/themes/Classic.AdiumMessageStyle/Contents/Info.plist35
-rw-r--r--data/themes/Classic.AdiumMessageStyle/Contents/Resources/Content.html6
-rw-r--r--data/themes/Classic.AdiumMessageStyle/Contents/Resources/Status.html5
-rw-r--r--data/themes/Classic.AdiumMessageStyle/Contents/Resources/main.css67
-rw-r--r--data/themes/Makefile.am56
-rw-r--r--data/themes/PlanetGNOME.AdiumMessageStyle/Contents/Info.plist35
-rw-r--r--data/themes/PlanetGNOME.AdiumMessageStyle/Contents/Resources/Images/corners.pngbin806 -> 0 bytes
-rw-r--r--data/themes/PlanetGNOME.AdiumMessageStyle/Contents/Resources/Images/horizontal.pngbin280 -> 0 bytes
-rw-r--r--data/themes/PlanetGNOME.AdiumMessageStyle/Contents/Resources/Images/nipple.pngbin528 -> 0 bytes
-rw-r--r--data/themes/PlanetGNOME.AdiumMessageStyle/Contents/Resources/Images/vertical.pngbin151 -> 0 bytes
-rw-r--r--data/themes/PlanetGNOME.AdiumMessageStyle/Contents/Resources/Incoming/Content.html22
-rw-r--r--data/themes/PlanetGNOME.AdiumMessageStyle/Contents/Resources/Incoming/NextContent.html7
-rw-r--r--data/themes/PlanetGNOME.AdiumMessageStyle/Contents/Resources/Status.html5
-rw-r--r--data/themes/PlanetGNOME.AdiumMessageStyle/Contents/Resources/main.css118
-rw-r--r--extensions/.gitignore2
-rw-r--r--extensions/Channel_Interface_Credentials_Storage.xml59
-rw-r--r--extensions/Channel_Type_Server_TLS_Connection.xml69
-rw-r--r--extensions/Chat_Manager.xml36
-rw-r--r--extensions/Connection_Interface_Renaming.xml98
-rw-r--r--extensions/Logger.xml159
-rw-r--r--extensions/Makefile.am131
-rw-r--r--extensions/all.xml22
-rw-r--r--extensions/extensions-cli.c30
-rw-r--r--extensions/extensions.c5
-rw-r--r--extensions/extensions.h19
-rw-r--r--extensions/generic-types.xml108
-rw-r--r--extensions/misc.xml13
-rw-r--r--goa-mc-plugin/Makefile.am19
-rw-r--r--goa-mc-plugin/mcp-account-manager-goa.c625
-rw-r--r--goa-mc-plugin/mcp-account-manager-goa.h60
-rw-r--r--goa-mc-plugin/mission-control-plugin.c48
-rw-r--r--help/.gitignore6
-rw-r--r--help/C/account-irc.page162
-rw-r--r--help/C/account-jabber.page78
-rw-r--r--help/C/accounts-window.page48
-rw-r--r--help/C/add-account.page86
-rw-r--r--help/C/add-contact.page67
-rw-r--r--help/C/audio-call.page95
-rw-r--r--help/C/audio-video.page224
-rw-r--r--help/C/change-status.page67
-rw-r--r--help/C/create-account.page147
-rw-r--r--help/C/disable-account.page65
-rw-r--r--help/C/favorite-rooms.page141
-rw-r--r--help/C/figures/available.pngbin859 -> 0 bytes
-rw-r--r--help/C/figures/away.pngbin770 -> 0 bytes
-rw-r--r--help/C/figures/busy.pngbin893 -> 0 bytes
-rw-r--r--help/C/figures/conf_overview.pngbin605142 -> 0 bytes
-rw-r--r--help/C/figures/croom_overview.pngbin397448 -> 0 bytes
-rw-r--r--help/C/figures/empathy-logo.pngbin1640 -> 0 bytes
-rw-r--r--help/C/figures/empathy-main-window.pngbin27421 -> 0 bytes
-rw-r--r--help/C/figures/gtk-add.pngbin400 -> 0 bytes
-rw-r--r--help/C/figures/gtk-edit.pngbin744 -> 0 bytes
-rw-r--r--help/C/figures/gtk-remove.pngbin215 -> 0 bytes
-rw-r--r--help/C/figures/offline.pngbin863 -> 0 bytes
-rw-r--r--help/C/figures/video_overview.pngbin221887 -> 0 bytes
-rw-r--r--help/C/geolocation-not-showing.page55
-rw-r--r--help/C/geolocation-privacy.page99
-rw-r--r--help/C/geolocation-supported.page57
-rw-r--r--help/C/geolocation-turn.page69
-rw-r--r--help/C/geolocation-what-is.page66
-rw-r--r--help/C/geolocation.page42
-rw-r--r--help/C/group-conversations.page150
-rw-r--r--help/C/hide-contacts.page42
-rw-r--r--help/C/import-account.page70
-rw-r--r--help/C/index.page63
-rw-r--r--help/C/introduction.page46
-rw-r--r--help/C/irc-commands.page28
-rw-r--r--help/C/irc-join-pwd.page45
-rw-r--r--help/C/irc-join-room.page68
-rw-r--r--help/C/irc-manage.page67
-rw-r--r--help/C/irc-nick-password.page73
-rw-r--r--help/C/irc-send-file.page35
-rw-r--r--help/C/irc-start-conversation.page60
-rw-r--r--help/C/license.page59
-rw-r--r--help/C/link-contacts.page129
-rw-r--r--help/C/overview.page60
-rw-r--r--help/C/prev-conv.page118
-rw-r--r--help/C/prob-conn-acctdisabled.page72
-rw-r--r--help/C/prob-conn-auth.page73
-rw-r--r--help/C/prob-conn-name.page71
-rw-r--r--help/C/prob-conn-neterror.page93
-rw-r--r--help/C/prob-conn.page31
-rw-r--r--help/C/remove-account.page63
-rw-r--r--help/C/salut-protocol.page58
-rw-r--r--help/C/send-file.page99
-rw-r--r--help/C/send-message.page74
-rw-r--r--help/C/set-custom-status.page148
-rw-r--r--help/C/share-desktop.page104
-rw-r--r--help/C/status-icons.page77
-rw-r--r--help/C/video-call.page88
-rw-r--r--help/Makefile.am66
-rw-r--r--help/ca/ca.po3533
-rw-r--r--help/ca/figures/empathy-main-window.pngbin9515 -> 0 bytes
-rw-r--r--help/ca/figures/empathy-new-account.pngbin22569 -> 0 bytes
-rw-r--r--help/cs/cs.po1371
-rw-r--r--help/de/de.po3753
-rw-r--r--help/de/figures/empathy-main-window.pngbin49766 -> 0 bytes
-rw-r--r--help/el/el.po3920
-rw-r--r--help/el/figures/empathy-main-window.pngbin10969 -> 0 bytes
-rw-r--r--help/el/figures/empathy-new-account.pngbin24577 -> 0 bytes
-rw-r--r--help/en_GB/en_GB.po1361
-rw-r--r--help/es/es.po3990
-rw-r--r--help/es/figures/empathy-main-window.pngbin10432 -> 0 bytes
-rw-r--r--help/es/figures/empathy-new-account.pngbin19056 -> 0 bytes
-rw-r--r--help/eu/eu.po3527
-rw-r--r--help/eu/figures/empathy-main-window.pngbin10261 -> 0 bytes
-rw-r--r--help/fi/fi.po672
-rw-r--r--help/fi/figures/empathy-main-window.pngbin7821 -> 0 bytes
-rw-r--r--help/fi/figures/empathy-new-account.pngbin18664 -> 0 bytes
-rw-r--r--help/fr/figures/empathy-main-window.pngbin48810 -> 0 bytes
-rw-r--r--help/fr/fr.po3634
-rw-r--r--help/gl/gl.po4269
-rw-r--r--help/hu/hu.po3747
-rw-r--r--help/it/figures/empathy-main-window.pngbin10232 -> 0 bytes
-rw-r--r--help/it/it.po3613
-rw-r--r--help/ja/ja.po3419
-rw-r--r--help/lv/lv.po3581
-rw-r--r--help/pl/pl.po3448
-rw-r--r--help/ru/ru.po775
-rw-r--r--help/sl/sl.po2496
-rw-r--r--help/sv/figures/empathy-main-window.pngbin9240 -> 0 bytes
-rw-r--r--help/sv/figures/empathy-new-account.pngbin20700 -> 0 bytes
-rw-r--r--help/sv/sv.po859
-rw-r--r--help/te/te.po2757
-rw-r--r--help/zh_CN/zh_CN.po3528
-rw-r--r--libempathy-gtk/.gitignore2
-rw-r--r--libempathy-gtk/Makefile.am269
m---------libempathy-gtk/egg-list-box0
-rw-r--r--libempathy-gtk/empathy-account-chooser.c1103
-rw-r--r--libempathy-gtk/empathy-account-chooser.h126
-rw-r--r--libempathy-gtk/empathy-account-selector-dialog.c197
-rw-r--r--libempathy-gtk/empathy-account-selector-dialog.h68
-rw-r--r--libempathy-gtk/empathy-avatar-image.c328
-rw-r--r--libempathy-gtk/empathy-avatar-image.h61
-rw-r--r--libempathy-gtk/empathy-bad-password-dialog.c190
-rw-r--r--libempathy-gtk/empathy-bad-password-dialog.h63
-rw-r--r--libempathy-gtk/empathy-base-password-dialog.c305
-rw-r--r--libempathy-gtk/empathy-base-password-dialog.h67
-rw-r--r--libempathy-gtk/empathy-call-utils.c232
-rw-r--r--libempathy-gtk/empathy-call-utils.h46
-rw-r--r--libempathy-gtk/empathy-cell-renderer-activatable.c196
-rw-r--r--libempathy-gtk/empathy-cell-renderer-activatable.h55
-rw-r--r--libempathy-gtk/empathy-cell-renderer-expander.c350
-rw-r--r--libempathy-gtk/empathy-cell-renderer-expander.h60
-rw-r--r--libempathy-gtk/empathy-cell-renderer-text.c403
-rw-r--r--libempathy-gtk/empathy-cell-renderer-text.h54
-rw-r--r--libempathy-gtk/empathy-chat.c4588
-rw-r--r--libempathy-gtk/empathy-chat.h104
-rw-r--r--libempathy-gtk/empathy-chat.ui124
-rw-r--r--libempathy-gtk/empathy-contact-blocking-dialog.c724
-rw-r--r--libempathy-gtk/empathy-contact-blocking-dialog.h60
-rw-r--r--libempathy-gtk/empathy-contact-blocking-dialog.ui146
-rw-r--r--libempathy-gtk/empathy-contact-chooser.c494
-rw-r--r--libempathy-gtk/empathy-contact-chooser.h69
-rw-r--r--libempathy-gtk/empathy-contact-search-dialog.c712
-rw-r--r--libempathy-gtk/empathy-contact-search-dialog.h58
-rw-r--r--libempathy-gtk/empathy-contact-widget.c781
-rw-r--r--libempathy-gtk/empathy-contact-widget.h83
-rw-r--r--libempathy-gtk/empathy-contact-widget.ui483
-rw-r--r--libempathy-gtk/empathy-dialpad-button.c226
-rw-r--r--libempathy-gtk/empathy-dialpad-button.h84
-rw-r--r--libempathy-gtk/empathy-dialpad-widget.c211
-rw-r--r--libempathy-gtk/empathy-dialpad-widget.h60
-rw-r--r--libempathy-gtk/empathy-geometry.c357
-rw-r--r--libempathy-gtk/empathy-geometry.h46
-rw-r--r--libempathy-gtk/empathy-groups-widget.c587
-rw-r--r--libempathy-gtk/empathy-groups-widget.h65
-rw-r--r--libempathy-gtk/empathy-images.h60
-rw-r--r--libempathy-gtk/empathy-individual-dialogs.c295
-rw-r--r--libempathy-gtk/empathy-individual-dialogs.h41
-rw-r--r--libempathy-gtk/empathy-individual-edit-dialog.c260
-rw-r--r--libempathy-gtk/empathy-individual-edit-dialog.h58
-rw-r--r--libempathy-gtk/empathy-individual-information-dialog.c420
-rw-r--r--libempathy-gtk/empathy-individual-information-dialog.h61
-rw-r--r--libempathy-gtk/empathy-individual-menu.c1989
-rw-r--r--libempathy-gtk/empathy-individual-menu.h87
-rw-r--r--libempathy-gtk/empathy-individual-store-channel.c376
-rw-r--r--libempathy-gtk/empathy-individual-store-channel.h66
-rw-r--r--libempathy-gtk/empathy-individual-store-manager.c316
-rw-r--r--libempathy-gtk/empathy-individual-store-manager.h66
-rw-r--r--libempathy-gtk/empathy-individual-store.c1709
-rw-r--r--libempathy-gtk/empathy-individual-store.h167
-rw-r--r--libempathy-gtk/empathy-individual-view.c2713
-rw-r--r--libempathy-gtk/empathy-individual-view.h141
-rw-r--r--libempathy-gtk/empathy-individual-widget.c2284
-rw-r--r--libempathy-gtk/empathy-individual-widget.h102
-rw-r--r--libempathy-gtk/empathy-individual-widget.ui210
-rw-r--r--libempathy-gtk/empathy-input-text-view.c107
-rw-r--r--libempathy-gtk/empathy-input-text-view.h62
-rw-r--r--libempathy-gtk/empathy-local-xmpp-assistant-widget.c250
-rw-r--r--libempathy-gtk/empathy-local-xmpp-assistant-widget.h65
-rw-r--r--libempathy-gtk/empathy-location-manager.c724
-rw-r--r--libempathy-gtk/empathy-location-manager.h57
-rw-r--r--libempathy-gtk/empathy-log-window.c3831
-rw-r--r--libempathy-gtk/empathy-log-window.h65
-rw-r--r--libempathy-gtk/empathy-log-window.ui395
-rw-r--r--libempathy-gtk/empathy-new-account-dialog.c198
-rw-r--r--libempathy-gtk/empathy-new-account-dialog.h58
-rw-r--r--libempathy-gtk/empathy-new-call-dialog.c280
-rw-r--r--libempathy-gtk/empathy-new-call-dialog.h65
-rw-r--r--libempathy-gtk/empathy-new-message-dialog.c369
-rw-r--r--libempathy-gtk/empathy-new-message-dialog.h64
-rw-r--r--libempathy-gtk/empathy-notify-manager.c229
-rw-r--r--libempathy-gtk/empathy-notify-manager.h115
-rw-r--r--libempathy-gtk/empathy-password-dialog.c184
-rw-r--r--libempathy-gtk/empathy-password-dialog.h65
-rw-r--r--libempathy-gtk/empathy-plist.c302
-rw-r--r--libempathy-gtk/empathy-plist.h33
-rw-r--r--libempathy-gtk/empathy-presence-chooser.c1175
-rw-r--r--libempathy-gtk/empathy-presence-chooser.h62
-rw-r--r--libempathy-gtk/empathy-protocol-chooser.c319
-rw-r--r--libempathy-gtk/empathy-protocol-chooser.h80
-rw-r--r--libempathy-gtk/empathy-roster-contact.c512
-rw-r--r--libempathy-gtk/empathy-roster-contact.h67
-rw-r--r--libempathy-gtk/empathy-roster-group.c236
-rw-r--r--libempathy-gtk/empathy-roster-group.h63
-rw-r--r--libempathy-gtk/empathy-roster-model-aggregator.c422
-rw-r--r--libempathy-gtk/empathy-roster-model-aggregator.h92
-rw-r--r--libempathy-gtk/empathy-roster-model-manager.c421
-rw-r--r--libempathy-gtk/empathy-roster-model-manager.h76
-rw-r--r--libempathy-gtk/empathy-roster-model.c136
-rw-r--r--libempathy-gtk/empathy-roster-model.h84
-rw-r--r--libempathy-gtk/empathy-roster-view.c1593
-rw-r--r--libempathy-gtk/empathy-roster-view.h89
-rw-r--r--libempathy-gtk/empathy-search-bar.c312
-rw-r--r--libempathy-gtk/empathy-search-bar.h65
-rw-r--r--libempathy-gtk/empathy-search-bar.ui134
-rw-r--r--libempathy-gtk/empathy-share-my-desktop.c77
-rw-r--r--libempathy-gtk/empathy-share-my-desktop.h28
-rw-r--r--libempathy-gtk/empathy-smiley-manager.c500
-rw-r--r--libempathy-gtk/empathy-smiley-manager.h84
-rw-r--r--libempathy-gtk/empathy-sound-manager.c486
-rw-r--r--libempathy-gtk/empathy-sound-manager.h89
-rw-r--r--libempathy-gtk/empathy-spell.c500
-rw-r--r--libempathy-gtk/empathy-spell.h45
-rw-r--r--libempathy-gtk/empathy-status-preset-dialog.c357
-rw-r--r--libempathy-gtk/empathy-status-preset-dialog.h63
-rw-r--r--libempathy-gtk/empathy-status-preset-dialog.ui62
-rw-r--r--libempathy-gtk/empathy-string-parser.c63
-rw-r--r--libempathy-gtk/empathy-string-parser.h38
-rw-r--r--libempathy-gtk/empathy-subscription-dialog.c358
-rw-r--r--libempathy-gtk/empathy-subscription-dialog.h75
-rw-r--r--libempathy-gtk/empathy-theme-adium.c2233
-rw-r--r--libempathy-gtk/empathy-theme-adium.h157
-rw-r--r--libempathy-gtk/empathy-theme-manager.c450
-rw-r--r--libempathy-gtk/empathy-theme-manager.h78
-rw-r--r--libempathy-gtk/empathy-tls-dialog.c379
-rw-r--r--libempathy-gtk/empathy-tls-dialog.h65
-rw-r--r--libempathy-gtk/empathy-ui-utils.c1355
-rw-r--r--libempathy-gtk/empathy-ui-utils.h121
-rw-r--r--libempathy-gtk/empathy-webkit-utils.c348
-rw-r--r--libempathy-gtk/empathy-webkit-utils.h52
-rw-r--r--libempathy/.gitignore5
-rw-r--r--libempathy/Makefile.am203
-rw-r--r--libempathy/action-chain-internal.h51
-rw-r--r--libempathy/action-chain.c192
-rw-r--r--libempathy/empathy-auth-factory.c786
-rw-r--r--libempathy/empathy-auth-factory.h72
-rw-r--r--libempathy/empathy-chatroom-manager.c906
-rw-r--r--libempathy/empathy-chatroom-manager.dtd18
-rw-r--r--libempathy/empathy-chatroom-manager.h82
-rw-r--r--libempathy/empathy-chatroom.c705
-rw-r--r--libempathy/empathy-chatroom.h97
-rw-r--r--libempathy/empathy-client-factory.c281
-rw-r--r--libempathy/empathy-client-factory.h70
-rw-r--r--libempathy/empathy-connection-aggregator.c325
-rw-r--r--libempathy/empathy-connection-aggregator.h76
-rw-r--r--libempathy/empathy-contact-groups.c278
-rw-r--r--libempathy/empathy-contact-groups.dtd17
-rw-r--r--libempathy/empathy-contact-groups.h38
-rw-r--r--libempathy/empathy-contact.c2057
-rw-r--r--libempathy/empathy-contact.h146
-rw-r--r--libempathy/empathy-debug.c167
-rw-r--r--libempathy/empathy-debug.h99
-rw-r--r--libempathy/empathy-dtd.gresource.xml9
-rw-r--r--libempathy/empathy-ft-factory.c302
-rw-r--r--libempathy/empathy-ft-factory.h78
-rw-r--r--libempathy/empathy-ft-handler.c1730
-rw-r--r--libempathy/empathy-ft-handler.h113
-rw-r--r--libempathy/empathy-goa-auth-handler.c409
-rw-r--r--libempathy/empathy-goa-auth-handler.h72
-rw-r--r--libempathy/empathy-gsettings.h101
-rw-r--r--libempathy/empathy-individual-manager.c953
-rw-r--r--libempathy/empathy-individual-manager.h103
-rw-r--r--libempathy/empathy-location.h57
-rw-r--r--libempathy/empathy-message.c740
-rw-r--r--libempathy/empathy-message.h88
-rw-r--r--libempathy/empathy-pkg-kit.c160
-rw-r--r--libempathy/empathy-pkg-kit.h38
-rw-r--r--libempathy/empathy-presence-manager.c615
-rw-r--r--libempathy/empathy-presence-manager.h83
-rw-r--r--libempathy/empathy-request-util.c118
-rw-r--r--libempathy/empathy-request-util.h65
-rw-r--r--libempathy/empathy-sasl-mechanisms.c378
-rw-r--r--libempathy/empathy-sasl-mechanisms.h70
-rw-r--r--libempathy/empathy-server-sasl-handler.c524
-rw-r--r--libempathy/empathy-server-sasl-handler.h86
-rw-r--r--libempathy/empathy-server-tls-handler.c328
-rw-r--r--libempathy/empathy-server-tls-handler.h70
-rw-r--r--libempathy/empathy-status-presets.c429
-rw-r--r--libempathy/empathy-status-presets.dtd14
-rw-r--r--libempathy/empathy-status-presets.h47
-rw-r--r--libempathy/empathy-tls-verifier.c598
-rw-r--r--libempathy/empathy-tls-verifier.h79
-rw-r--r--libempathy/empathy-tp-chat.c1473
-rw-r--r--libempathy/empathy-tp-chat.h110
-rw-r--r--libempathy/empathy-types.h27
-rw-r--r--libempathy/empathy-uoa-auth-handler.c398
-rw-r--r--libempathy/empathy-uoa-auth-handler.h72
-rw-r--r--libempathy/empathy-utils.c1062
-rw-r--r--libempathy/empathy-utils.h122
-rw-r--r--nautilus-sendto-plugin/Makefile.am21
-rw-r--r--nautilus-sendto-plugin/empathy-nautilus-sendto.c307
-rw-r--r--src/.gitignore10
-rw-r--r--src/Makefile.am218
-rw-r--r--src/empathy-about-dialog.c119
-rw-r--r--src/empathy-about-dialog.h36
-rw-r--r--src/empathy-accounts-common.c89
-rw-r--r--src/empathy-accounts-common.h39
-rw-r--r--src/empathy-accounts-dialog.c2746
-rw-r--r--src/empathy-accounts-dialog.h69
-rw-r--r--src/empathy-accounts-dialog.ui246
-rw-r--r--src/empathy-accounts.136
-rw-r--r--src/empathy-accounts.c255
-rw-r--r--src/empathy-accounts.h25
-rw-r--r--src/empathy-audio-sink.c423
-rw-r--r--src/empathy-audio-sink.h70
-rw-r--r--src/empathy-audio-src.c639
-rw-r--r--src/empathy-audio-src.h84
-rw-r--r--src/empathy-audio-utils.c64
-rw-r--r--src/empathy-audio-utils.h33
-rw-r--r--src/empathy-auth-client.c364
-rw-r--r--src/empathy-call-factory.c303
-rw-r--r--src/empathy-call-factory.h68
-rw-r--r--src/empathy-call-handler.c1056
-rw-r--r--src/empathy-call-handler.h107
-rw-r--r--src/empathy-call-observer.c357
-rw-r--r--src/empathy-call-observer.h53
-rw-r--r--src/empathy-call-window-fullscreen.c310
-rw-r--r--src/empathy-call-window-fullscreen.h75
-rw-r--r--src/empathy-call-window-fullscreen.ui23
-rw-r--r--src/empathy-call-window.c4289
-rw-r--r--src/empathy-call-window.h87
-rw-r--r--src/empathy-call-window.ui960
-rw-r--r--src/empathy-call.c293
-rw-r--r--src/empathy-camera-menu.c418
-rw-r--r--src/empathy-camera-menu.h58
-rw-r--r--src/empathy-chat-manager.c558
-rw-r--r--src/empathy-chat-manager.h72
-rw-r--r--src/empathy-chat-window.c2894
-rw-r--r--src/empathy-chat-window.h89
-rw-r--r--src/empathy-chat-window.ui236
-rw-r--r--src/empathy-chat.c175
-rw-r--r--src/empathy-chat.gresource.xml6
-rw-r--r--src/empathy-chat.js92
-rw-r--r--src/empathy-chatrooms-window.c487
-rw-r--r--src/empathy-chatrooms-window.h37
-rw-r--r--src/empathy-chatrooms-window.ui126
-rw-r--r--src/empathy-debug-window.c2214
-rw-r--r--src/empathy-debug-window.h66
-rw-r--r--src/empathy-debugger.c153
-rw-r--r--src/empathy-event-manager.c1525
-rw-r--r--src/empathy-event-manager.h86
-rw-r--r--src/empathy-ft-manager.c1181
-rw-r--r--src/empathy-ft-manager.h69
-rw-r--r--src/empathy-ft-manager.ui103
-rw-r--r--src/empathy-import-dialog.c264
-rw-r--r--src/empathy-import-dialog.h66
-rw-r--r--src/empathy-import-dialog.ui28
-rw-r--r--src/empathy-import-pidgin.c409
-rw-r--r--src/empathy-import-pidgin.h34
-rw-r--r--src/empathy-import-utils.c126
-rw-r--r--src/empathy-import-utils.h61
-rw-r--r--src/empathy-import-widget.c515
-rw-r--r--src/empathy-import-widget.h72
-rw-r--r--src/empathy-invite-participant-dialog.c301
-rw-r--r--src/empathy-invite-participant-dialog.h55
-rw-r--r--src/empathy-mic-menu.c431
-rw-r--r--src/empathy-mic-menu.h56
-rw-r--r--src/empathy-mic-monitor.c683
-rw-r--r--src/empathy-mic-monitor.h89
-rw-r--r--src/empathy-new-chatroom-dialog.c830
-rw-r--r--src/empathy-new-chatroom-dialog.h76
-rw-r--r--src/empathy-new-chatroom-dialog.ui235
-rw-r--r--src/empathy-notifications-approver.c448
-rw-r--r--src/empathy-notifications-approver.h58
-rw-r--r--src/empathy-preferences.c1164
-rw-r--r--src/empathy-preferences.h78
-rw-r--r--src/empathy-preferences.ui1181
-rw-r--r--src/empathy-roster-window-menubar.ui99
-rw-r--r--src/empathy-roster-window.c2448
-rw-r--r--src/empathy-roster-window.h67
-rw-r--r--src/empathy-roster-window.ui259
-rw-r--r--src/empathy-rounded-actor.c82
-rw-r--r--src/empathy-rounded-actor.h65
-rw-r--r--src/empathy-rounded-rectangle.c161
-rw-r--r--src/empathy-rounded-rectangle.h75
-rw-r--r--src/empathy-rounded-texture.c71
-rw-r--r--src/empathy-rounded-texture.h62
-rw-r--r--src/empathy-sanity-cleaning.c653
-rw-r--r--src/empathy-sanity-cleaning.h37
-rw-r--r--src/empathy-status-icon.c523
-rw-r--r--src/empathy-status-icon.h54
-rw-r--r--src/empathy-status-icon.ui62
-rw-r--r--src/empathy-video-src.c512
-rw-r--r--src/empathy-video-src.h95
-rw-r--r--src/empathy.146
-rw-r--r--src/empathy.c851
-rw-r--r--tests/.gitignore11
-rw-r--r--tests/Makefile.am88
-rw-r--r--tests/certificates/Makefile.am23
-rw-r--r--tests/certificates/cert-openssl.conf16
-rw-r--r--tests/certificates/certificate-authority.cerbin466 -> 0 bytes
-rw-r--r--tests/certificates/server-cert.cerbin448 -> 0 bytes
-rw-r--r--tests/dlopen.supp127
-rw-r--r--tests/empathy-chatroom-manager-test.c399
-rw-r--r--tests/empathy-chatroom-test.c163
-rw-r--r--tests/empathy-irc-network-manager-test.c848
-rw-r--r--tests/empathy-irc-network-test.c246
-rw-r--r--tests/empathy-irc-server-test.c97
-rw-r--r--tests/empathy-live-search-test.c85
-rw-r--r--tests/empathy-parser-test.c139
-rw-r--r--tests/empathy-tls-test.c745
-rw-r--r--tests/interactive/.gitignore15
-rw-r--r--tests/interactive/Makefile.am38
-rw-r--r--tests/interactive/empathy-logs.c76
-rw-r--r--tests/interactive/test-empathy-account-chooser.c47
-rw-r--r--tests/interactive/test-empathy-calendar-button.c72
-rw-r--r--tests/interactive/test-empathy-contact-blocking-dialog.c75
-rw-r--r--tests/interactive/test-empathy-dual-roster-view.c153
-rw-r--r--tests/interactive/test-empathy-presence-chooser.c55
-rw-r--r--tests/interactive/test-empathy-protocol-chooser.c31
-rw-r--r--tests/interactive/test-empathy-roster-model-aggregator.c163
-rw-r--r--tests/interactive/test-empathy-roster-view.c155
-rw-r--r--tests/interactive/test-empathy-status-preset-dialog.c47
-rw-r--r--tests/mock-pkcs11.c1346
-rw-r--r--tests/mock-pkcs11.h348
-rw-r--r--tests/test-helper.c75
-rw-r--r--tests/test-helper.h37
-rw-r--r--tests/test-irc-helper.c81
-rw-r--r--tests/test-irc-helper.h21
-rw-r--r--tests/test.manager5
-rw-r--r--tests/test.profile4
-rw-r--r--tests/tp-glib.supp333
-rw-r--r--tests/xml/.gitignore1
-rw-r--r--tests/xml/Makefile.am4
-rw-r--r--tests/xml/chatrooms-sample.xml15
-rw-r--r--tests/xml/default-irc-networks-sample.xml30
-rw-r--r--tests/xml/user-irc-networks-sample.xml26
-rw-r--r--ubuntu-online-accounts/.gitignore1
-rw-r--r--ubuntu-online-accounts/Makefile.am12
-rw-r--r--ubuntu-online-accounts/cc-plugins/Makefile.am1
-rw-r--r--ubuntu-online-accounts/cc-plugins/account-plugins/Makefile.am28
-rw-r--r--ubuntu-online-accounts/cc-plugins/account-plugins/empathy-accounts-plugin-widget.c435
-rw-r--r--ubuntu-online-accounts/cc-plugins/account-plugins/empathy-accounts-plugin-widget.h74
-rw-r--r--ubuntu-online-accounts/cc-plugins/account-plugins/empathy-accounts-plugin.c131
-rw-r--r--ubuntu-online-accounts/cc-plugins/account-plugins/empathy-accounts-plugin.h71
-rw-r--r--ubuntu-online-accounts/cc-plugins/app-plugin/Makefile.am28
-rw-r--r--ubuntu-online-accounts/cc-plugins/app-plugin/empathy-app-plugin-widget.c312
-rw-r--r--ubuntu-online-accounts/cc-plugins/app-plugin/empathy-app-plugin-widget.h74
-rw-r--r--ubuntu-online-accounts/cc-plugins/app-plugin/empathy-app-plugin.c84
-rw-r--r--ubuntu-online-accounts/cc-plugins/app-plugin/empathy-app-plugin.h72
-rwxr-xr-xubuntu-online-accounts/cc-plugins/generate-plugins.py130
-rw-r--r--ubuntu-online-accounts/cc-plugins/providers/Makefile.am22
-rw-r--r--ubuntu-online-accounts/cc-plugins/providers/aim.provider8
-rw-r--r--ubuntu-online-accounts/cc-plugins/providers/gadugadu.provider8
-rw-r--r--ubuntu-online-accounts/cc-plugins/providers/groupwise.provider8
-rw-r--r--ubuntu-online-accounts/cc-plugins/providers/icq.provider8
-rw-r--r--ubuntu-online-accounts/cc-plugins/providers/irc.provider8
-rw-r--r--ubuntu-online-accounts/cc-plugins/providers/jabber.provider8
-rw-r--r--ubuntu-online-accounts/cc-plugins/providers/local-xmpp.provider8
-rw-r--r--ubuntu-online-accounts/cc-plugins/providers/mxit.provider8
-rw-r--r--ubuntu-online-accounts/cc-plugins/providers/myspace.provider8
-rw-r--r--ubuntu-online-accounts/cc-plugins/providers/sametime.provider8
-rw-r--r--ubuntu-online-accounts/cc-plugins/providers/sip.provider8
-rw-r--r--ubuntu-online-accounts/cc-plugins/providers/yahoo.provider8
-rw-r--r--ubuntu-online-accounts/cc-plugins/providers/yahoojp.provider8
-rw-r--r--ubuntu-online-accounts/cc-plugins/providers/zephyr.provider8
-rw-r--r--ubuntu-online-accounts/cc-plugins/services/Makefile.am22
-rw-r--r--ubuntu-online-accounts/cc-plugins/services/aim-im.service22
-rw-r--r--ubuntu-online-accounts/cc-plugins/services/gadugadu-im.service22
-rw-r--r--ubuntu-online-accounts/cc-plugins/services/groupwise-im.service22
-rw-r--r--ubuntu-online-accounts/cc-plugins/services/icq-im.service22
-rw-r--r--ubuntu-online-accounts/cc-plugins/services/irc-im.service22
-rw-r--r--ubuntu-online-accounts/cc-plugins/services/jabber-im.service22
-rw-r--r--ubuntu-online-accounts/cc-plugins/services/local-xmpp-im.service22
-rw-r--r--ubuntu-online-accounts/cc-plugins/services/mxit-im.service22
-rw-r--r--ubuntu-online-accounts/cc-plugins/services/myspace-im.service22
-rw-r--r--ubuntu-online-accounts/cc-plugins/services/sametime-im.service22
-rw-r--r--ubuntu-online-accounts/cc-plugins/services/sip-im.service22
-rw-r--r--ubuntu-online-accounts/cc-plugins/services/yahoo-im.service22
-rw-r--r--ubuntu-online-accounts/cc-plugins/services/yahoojp-im.service22
-rw-r--r--ubuntu-online-accounts/cc-plugins/services/zephyr-im.service22
-rw-r--r--ubuntu-online-accounts/empathy.application.in11
-rw-r--r--ubuntu-online-accounts/mc-plugin/Makefile.am20
-rw-r--r--ubuntu-online-accounts/mc-plugin/empathy-webcredentials-monitor.c280
-rw-r--r--ubuntu-online-accounts/mc-plugin/empathy-webcredentials-monitor.h58
-rw-r--r--ubuntu-online-accounts/mc-plugin/mcp-account-manager-uoa.c827
-rw-r--r--ubuntu-online-accounts/mc-plugin/mcp-account-manager-uoa.h68
-rw-r--r--ubuntu-online-accounts/mc-plugin/mission-control-plugin.c49
581 files changed, 4 insertions, 182836 deletions
diff --git a/.gitmodules b/.gitmodules
deleted file mode 100644
index f9047a05..00000000
--- a/.gitmodules
+++ /dev/null
@@ -1,3 +0,0 @@
-[submodule "libempathy-gtk/egg-list-box"]
- path = libempathy-gtk/egg-list-box
- url = git://git.gnome.org/egg-list-box
diff --git a/COPYING-DOCS b/COPYING-DOCS
deleted file mode 100644
index 2f7e03ca..00000000
--- a/COPYING-DOCS
+++ /dev/null
@@ -1,451 +0,0 @@
-
- GNU Free Documentation License
- Version 1.3, 3 November 2008
-
-
- Copyright (C) 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc.
- <http://fsf.org/>
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-0. PREAMBLE
-
-The purpose of this License is to make a manual, textbook, or other
-functional and useful document "free" in the sense of freedom: to
-assure everyone the effective freedom to copy and redistribute it,
-with or without modifying it, either commercially or noncommercially.
-Secondarily, this License preserves for the author and publisher a way
-to get credit for their work, while not being considered responsible
-for modifications made by others.
-
-This License is a kind of "copyleft", which means that derivative
-works of the document must themselves be free in the same sense. It
-complements the GNU General Public License, which is a copyleft
-license designed for free software.
-
-We have designed this License in order to use it for manuals for free
-software, because free software needs free documentation: a free
-program should come with manuals providing the same freedoms that the
-software does. But this License is not limited to software manuals;
-it can be used for any textual work, regardless of subject matter or
-whether it is published as a printed book. We recommend this License
-principally for works whose purpose is instruction or reference.
-
-
-1. APPLICABILITY AND DEFINITIONS
-
-This License applies to any manual or other work, in any medium, that
-contains a notice placed by the copyright holder saying it can be
-distributed under the terms of this License. Such a notice grants a
-world-wide, royalty-free license, unlimited in duration, to use that
-work under the conditions stated herein. The "Document", below,
-refers to any such manual or work. Any member of the public is a
-licensee, and is addressed as "you". You accept the license if you
-copy, modify or distribute the work in a way requiring permission
-under copyright law.
-
-A "Modified Version" of the Document means any work containing the
-Document or a portion of it, either copied verbatim, or with
-modifications and/or translated into another language.
-
-A "Secondary Section" is a named appendix or a front-matter section of
-the Document that deals exclusively with the relationship of the
-publishers or authors of the Document to the Document's overall
-subject (or to related matters) and contains nothing that could fall
-directly within that overall subject. (Thus, if the Document is in
-part a textbook of mathematics, a Secondary Section may not explain
-any mathematics.) The relationship could be a matter of historical
-connection with the subject or with related matters, or of legal,
-commercial, philosophical, ethical or political position regarding
-them.
-
-The "Invariant Sections" are certain Secondary Sections whose titles
-are designated, as being those of Invariant Sections, in the notice
-that says that the Document is released under this License. If a
-section does not fit the above definition of Secondary then it is not
-allowed to be designated as Invariant. The Document may contain zero
-Invariant Sections. If the Document does not identify any Invariant
-Sections then there are none.
-
-The "Cover Texts" are certain short passages of text that are listed,
-as Front-Cover Texts or Back-Cover Texts, in the notice that says that
-the Document is released under this License. A Front-Cover Text may
-be at most 5 words, and a Back-Cover Text may be at most 25 words.
-
-A "Transparent" copy of the Document means a machine-readable copy,
-represented in a format whose specification is available to the
-general public, that is suitable for revising the document
-straightforwardly with generic text editors or (for images composed of
-pixels) generic paint programs or (for drawings) some widely available
-drawing editor, and that is suitable for input to text formatters or
-for automatic translation to a variety of formats suitable for input
-to text formatters. A copy made in an otherwise Transparent file
-format whose markup, or absence of markup, has been arranged to thwart
-or discourage subsequent modification by readers is not Transparent.
-An image format is not Transparent if used for any substantial amount
-of text. A copy that is not "Transparent" is called "Opaque".
-
-Examples of suitable formats for Transparent copies include plain
-ASCII without markup, Texinfo input format, LaTeX input format, SGML
-or XML using a publicly available DTD, and standard-conforming simple
-HTML, PostScript or PDF designed for human modification. Examples of
-transparent image formats include PNG, XCF and JPG. Opaque formats
-include proprietary formats that can be read and edited only by
-proprietary word processors, SGML or XML for which the DTD and/or
-processing tools are not generally available, and the
-machine-generated HTML, PostScript or PDF produced by some word
-processors for output purposes only.
-
-The "Title Page" means, for a printed book, the title page itself,
-plus such following pages as are needed to hold, legibly, the material
-this License requires to appear in the title page. For works in
-formats which do not have any title page as such, "Title Page" means
-the text near the most prominent appearance of the work's title,
-preceding the beginning of the body of the text.
-
-The "publisher" means any person or entity that distributes copies of
-the Document to the public.
-
-A section "Entitled XYZ" means a named subunit of the Document whose
-title either is precisely XYZ or contains XYZ in parentheses following
-text that translates XYZ in another language. (Here XYZ stands for a
-specific section name mentioned below, such as "Acknowledgements",
-"Dedications", "Endorsements", or "History".) To "Preserve the Title"
-of such a section when you modify the Document means that it remains a
-section "Entitled XYZ" according to this definition.
-
-The Document may include Warranty Disclaimers next to the notice which
-states that this License applies to the Document. These Warranty
-Disclaimers are considered to be included by reference in this
-License, but only as regards disclaiming warranties: any other
-implication that these Warranty Disclaimers may have is void and has
-no effect on the meaning of this License.
-
-2. VERBATIM COPYING
-
-You may copy and distribute the Document in any medium, either
-commercially or noncommercially, provided that this License, the
-copyright notices, and the license notice saying this License applies
-to the Document are reproduced in all copies, and that you add no
-other conditions whatsoever to those of this License. You may not use
-technical measures to obstruct or control the reading or further
-copying of the copies you make or distribute. However, you may accept
-compensation in exchange for copies. If you distribute a large enough
-number of copies you must also follow the conditions in section 3.
-
-You may also lend copies, under the same conditions stated above, and
-you may publicly display copies.
-
-
-3. COPYING IN QUANTITY
-
-If you publish printed copies (or copies in media that commonly have
-printed covers) of the Document, numbering more than 100, and the
-Document's license notice requires Cover Texts, you must enclose the
-copies in covers that carry, clearly and legibly, all these Cover
-Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on
-the back cover. Both covers must also clearly and legibly identify
-you as the publisher of these copies. The front cover must present
-the full title with all words of the title equally prominent and
-visible. You may add other material on the covers in addition.
-Copying with changes limited to the covers, as long as they preserve
-the title of the Document and satisfy these conditions, can be treated
-as verbatim copying in other respects.
-
-If the required texts for either cover are too voluminous to fit
-legibly, you should put the first ones listed (as many as fit
-reasonably) on the actual cover, and continue the rest onto adjacent
-pages.
-
-If you publish or distribute Opaque copies of the Document numbering
-more than 100, you must either include a machine-readable Transparent
-copy along with each Opaque copy, or state in or with each Opaque copy
-a computer-network location from which the general network-using
-public has access to download using public-standard network protocols
-a complete Transparent copy of the Document, free of added material.
-If you use the latter option, you must take reasonably prudent steps,
-when you begin distribution of Opaque copies in quantity, to ensure
-that this Transparent copy will remain thus accessible at the stated
-location until at least one year after the last time you distribute an
-Opaque copy (directly or through your agents or retailers) of that
-edition to the public.
-
-It is requested, but not required, that you contact the authors of the
-Document well before redistributing any large number of copies, to
-give them a chance to provide you with an updated version of the
-Document.
-
-
-4. MODIFICATIONS
-
-You may copy and distribute a Modified Version of the Document under
-the conditions of sections 2 and 3 above, provided that you release
-the Modified Version under precisely this License, with the Modified
-Version filling the role of the Document, thus licensing distribution
-and modification of the Modified Version to whoever possesses a copy
-of it. In addition, you must do these things in the Modified Version:
-
-A. Use in the Title Page (and on the covers, if any) a title distinct
- from that of the Document, and from those of previous versions
- (which should, if there were any, be listed in the History section
- of the Document). You may use the same title as a previous version
- if the original publisher of that version gives permission.
-B. List on the Title Page, as authors, one or more persons or entities
- responsible for authorship of the modifications in the Modified
- Version, together with at least five of the principal authors of the
- Document (all of its principal authors, if it has fewer than five),
- unless they release you from this requirement.
-C. State on the Title page the name of the publisher of the
- Modified Version, as the publisher.
-D. Preserve all the copyright notices of the Document.
-E. Add an appropriate copyright notice for your modifications
- adjacent to the other copyright notices.
-F. Include, immediately after the copyright notices, a license notice
- giving the public permission to use the Modified Version under the
- terms of this License, in the form shown in the Addendum below.
-G. Preserve in that license notice the full lists of Invariant Sections
- and required Cover Texts given in the Document's license notice.
-H. Include an unaltered copy of this License.
-I. Preserve the section Entitled "History", Preserve its Title, and add
- to it an item stating at least the title, year, new authors, and
- publisher of the Modified Version as given on the Title Page. If
- there is no section Entitled "History" in the Document, create one
- stating the title, year, authors, and publisher of the Document as
- given on its Title Page, then add an item describing the Modified
- Version as stated in the previous sentence.
-J. Preserve the network location, if any, given in the Document for
- public access to a Transparent copy of the Document, and likewise
- the network locations given in the Document for previous versions
- it was based on. These may be placed in the "History" section.
- You may omit a network location for a work that was published at
- least four years before the Document itself, or if the original
- publisher of the version it refers to gives permission.
-K. For any section Entitled "Acknowledgements" or "Dedications",
- Preserve the Title of the section, and preserve in the section all
- the substance and tone of each of the contributor acknowledgements
- and/or dedications given therein.
-L. Preserve all the Invariant Sections of the Document,
- unaltered in their text and in their titles. Section numbers
- or the equivalent are not considered part of the section titles.
-M. Delete any section Entitled "Endorsements". Such a section
- may not be included in the Modified Version.
-N. Do not retitle any existing section to be Entitled "Endorsements"
- or to conflict in title with any Invariant Section.
-O. Preserve any Warranty Disclaimers.
-
-If the Modified Version includes new front-matter sections or
-appendices that qualify as Secondary Sections and contain no material
-copied from the Document, you may at your option designate some or all
-of these sections as invariant. To do this, add their titles to the
-list of Invariant Sections in the Modified Version's license notice.
-These titles must be distinct from any other section titles.
-
-You may add a section Entitled "Endorsements", provided it contains
-nothing but endorsements of your Modified Version by various
-parties--for example, statements of peer review or that the text has
-been approved by an organization as the authoritative definition of a
-standard.
-
-You may add a passage of up to five words as a Front-Cover Text, and a
-passage of up to 25 words as a Back-Cover Text, to the end of the list
-of Cover Texts in the Modified Version. Only one passage of
-Front-Cover Text and one of Back-Cover Text may be added by (or
-through arrangements made by) any one entity. If the Document already
-includes a cover text for the same cover, previously added by you or
-by arrangement made by the same entity you are acting on behalf of,
-you may not add another; but you may replace the old one, on explicit
-permission from the previous publisher that added the old one.
-
-The author(s) and publisher(s) of the Document do not by this License
-give permission to use their names for publicity for or to assert or
-imply endorsement of any Modified Version.
-
-
-5. COMBINING DOCUMENTS
-
-You may combine the Document with other documents released under this
-License, under the terms defined in section 4 above for modified
-versions, provided that you include in the combination all of the
-Invariant Sections of all of the original documents, unmodified, and
-list them all as Invariant Sections of your combined work in its
-license notice, and that you preserve all their Warranty Disclaimers.
-
-The combined work need only contain one copy of this License, and
-multiple identical Invariant Sections may be replaced with a single
-copy. If there are multiple Invariant Sections with the same name but
-different contents, make the title of each such section unique by
-adding at the end of it, in parentheses, the name of the original
-author or publisher of that section if known, or else a unique number.
-Make the same adjustment to the section titles in the list of
-Invariant Sections in the license notice of the combined work.
-
-In the combination, you must combine any sections Entitled "History"
-in the various original documents, forming one section Entitled
-"History"; likewise combine any sections Entitled "Acknowledgements",
-and any sections Entitled "Dedications". You must delete all sections
-Entitled "Endorsements".
-
-
-6. COLLECTIONS OF DOCUMENTS
-
-You may make a collection consisting of the Document and other
-documents released under this License, and replace the individual
-copies of this License in the various documents with a single copy
-that is included in the collection, provided that you follow the rules
-of this License for verbatim copying of each of the documents in all
-other respects.
-
-You may extract a single document from such a collection, and
-distribute it individually under this License, provided you insert a
-copy of this License into the extracted document, and follow this
-License in all other respects regarding verbatim copying of that
-document.
-
-
-7. AGGREGATION WITH INDEPENDENT WORKS
-
-A compilation of the Document or its derivatives with other separate
-and independent documents or works, in or on a volume of a storage or
-distribution medium, is called an "aggregate" if the copyright
-resulting from the compilation is not used to limit the legal rights
-of the compilation's users beyond what the individual works permit.
-When the Document is included in an aggregate, this License does not
-apply to the other works in the aggregate which are not themselves
-derivative works of the Document.
-
-If the Cover Text requirement of section 3 is applicable to these
-copies of the Document, then if the Document is less than one half of
-the entire aggregate, the Document's Cover Texts may be placed on
-covers that bracket the Document within the aggregate, or the
-electronic equivalent of covers if the Document is in electronic form.
-Otherwise they must appear on printed covers that bracket the whole
-aggregate.
-
-
-8. TRANSLATION
-
-Translation is considered a kind of modification, so you may
-distribute translations of the Document under the terms of section 4.
-Replacing Invariant Sections with translations requires special
-permission from their copyright holders, but you may include
-translations of some or all Invariant Sections in addition to the
-original versions of these Invariant Sections. You may include a
-translation of this License, and all the license notices in the
-Document, and any Warranty Disclaimers, provided that you also include
-the original English version of this License and the original versions
-of those notices and disclaimers. In case of a disagreement between
-the translation and the original version of this License or a notice
-or disclaimer, the original version will prevail.
-
-If a section in the Document is Entitled "Acknowledgements",
-"Dedications", or "History", the requirement (section 4) to Preserve
-its Title (section 1) will typically require changing the actual
-title.
-
-
-9. TERMINATION
-
-You may not copy, modify, sublicense, or distribute the Document
-except as expressly provided under this License. Any attempt
-otherwise to copy, modify, sublicense, or distribute it is void, and
-will automatically terminate your rights under this License.
-
-However, if you cease all violation of this License, then your license
-from a particular copyright holder is reinstated (a) provisionally,
-unless and until the copyright holder explicitly and finally
-terminates your license, and (b) permanently, if the copyright holder
-fails to notify you of the violation by some reasonable means prior to
-60 days after the cessation.
-
-Moreover, your license from a particular copyright holder is
-reinstated permanently if the copyright holder notifies you of the
-violation by some reasonable means, this is the first time you have
-received notice of violation of this License (for any work) from that
-copyright holder, and you cure the violation prior to 30 days after
-your receipt of the notice.
-
-Termination of your rights under this section does not terminate the
-licenses of parties who have received copies or rights from you under
-this License. If your rights have been terminated and not permanently
-reinstated, receipt of a copy of some or all of the same material does
-not give you any rights to use it.
-
-
-10. FUTURE REVISIONS OF THIS LICENSE
-
-The Free Software Foundation may publish new, revised versions of the
-GNU Free Documentation 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. See
-http://www.gnu.org/copyleft/.
-
-Each version of the License is given a distinguishing version number.
-If the Document specifies that a particular numbered version of this
-License "or any later version" applies to it, you have the option of
-following the terms and conditions either of that specified version or
-of any later version that has been published (not as a draft) by the
-Free Software Foundation. If the Document does not specify a version
-number of this License, you may choose any version ever published (not
-as a draft) by the Free Software Foundation. If the Document
-specifies that a proxy can decide which future versions of this
-License can be used, that proxy's public statement of acceptance of a
-version permanently authorizes you to choose that version for the
-Document.
-
-11. RELICENSING
-
-"Massive Multiauthor Collaboration Site" (or "MMC Site") means any
-World Wide Web server that publishes copyrightable works and also
-provides prominent facilities for anybody to edit those works. A
-public wiki that anybody can edit is an example of such a server. A
-"Massive Multiauthor Collaboration" (or "MMC") contained in the site
-means any set of copyrightable works thus published on the MMC site.
-
-"CC-BY-SA" means the Creative Commons Attribution-Share Alike 3.0
-license published by Creative Commons Corporation, a not-for-profit
-corporation with a principal place of business in San Francisco,
-California, as well as future copyleft versions of that license
-published by that same organization.
-
-"Incorporate" means to publish or republish a Document, in whole or in
-part, as part of another Document.
-
-An MMC is "eligible for relicensing" if it is licensed under this
-License, and if all works that were first published under this License
-somewhere other than this MMC, and subsequently incorporated in whole or
-in part into the MMC, (1) had no cover texts or invariant sections, and
-(2) were thus incorporated prior to November 1, 2008.
-
-The operator of an MMC Site may republish an MMC contained in the site
-under CC-BY-SA on the same site at any time before August 1, 2009,
-provided the MMC is eligible for relicensing.
-
-
-ADDENDUM: How to use this License for your documents
-
-To use this License in a document you have written, include a copy of
-the License in the document and put the following copyright and
-license notices just after the title page:
-
- Copyright (c) YEAR YOUR NAME.
- Permission is granted to copy, distribute and/or modify this document
- under the terms of the GNU Free Documentation License, Version 1.3
- or any later version published by the Free Software Foundation;
- with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.
- A copy of the license is included in the section entitled "GNU
- Free Documentation License".
-
-If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts,
-replace the "with...Texts." line with this:
-
- with the Invariant Sections being LIST THEIR TITLES, with the
- Front-Cover Texts being LIST, and with the Back-Cover Texts being LIST.
-
-If you have Invariant Sections without Cover Texts, or some other
-combination of the three, merge those two alternatives to suit the
-situation.
-
-If your document contains nontrivial examples of program code, we
-recommend releasing these examples in parallel under your choice of
-free software license, such as the GNU General Public License,
-to permit their use in free software.
diff --git a/COPYING.SHARE-ALIKE b/COPYING.SHARE-ALIKE
deleted file mode 100644
index 23fba304..00000000
--- a/COPYING.SHARE-ALIKE
+++ /dev/null
@@ -1,61 +0,0 @@
-Attribution-ShareAlike 3.0 Unported
-
-CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE LEGAL SERVICES. DISTRIBUTION OF THIS LICENSE DOES NOT CREATE AN ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS INFORMATION ON AN "AS-IS" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES REGARDING THE INFORMATION PROVIDED, AND DISCLAIMS LIABILITY FOR DAMAGES RESULTING FROM ITS USE.
-License
-
-THE WORK (AS DEFINED BELOW) IS PROVIDED UNDER THE TERMS OF THIS CREATIVE COMMONS PUBLIC LICENSE ("CCPL" OR "LICENSE"). THE WORK IS PROTECTED BY COPYRIGHT AND/OR OTHER APPLICABLE LAW. ANY USE OF THE WORK OTHER THAN AS AUTHORIZED UNDER THIS LICENSE OR COPYRIGHT LAW IS PROHIBITED.
-
-BY EXERCISING ANY RIGHTS TO THE WORK PROVIDED HERE, YOU ACCEPT AND AGREE TO BE BOUND BY THE TERMS OF THIS LICENSE. TO THE EXTENT THIS LICENSE MAY BE CONSIDERED TO BE A CONTRACT, THE LICENSOR GRANTS YOU THE RIGHTS CONTAINED HERE IN CONSIDERATION OF YOUR ACCEPTANCE OF SUCH TERMS AND CONDITIONS.
-
-1. Definitions
-
-"Adaptation" means a work based upon the Work, or upon the Work and other pre-existing works, such as a translation, adaptation, derivative work, arrangement of music or other alterations of a literary or artistic work, or phonogram or performance and includes cinematographic adaptations or any other form in which the Work may be recast, transformed, or adapted including in any form recognizably derived from the original, except that a work that constitutes a Collection will not be considered an Adaptation for the purpose of this License. For the avoidance of doubt, where the Work is a musical work, performance or phonogram, the synchronization of the Work in timed-relation with a moving image ("synching") will be considered an Adaptation for the purpose of this License.
-"Collection" means a collection of literary or artistic works, such as encyclopedias and anthologies, or performances, phonograms or broadcasts, or other works or subject matter other than works listed in Section 1(f) below, which, by reason of the selection and arrangement of their contents, constitute intellectual creations, in which the Work is included in its entirety in unmodified form along with one or more other contributions, each constituting separate and independent works in themselves, which together are assembled into a collective whole. A work that constitutes a Collection will not be considered an Adaptation (as defined below) for the purposes of this License.
-"Creative Commons Compatible License" means a license that is listed at http://creativecommons.org/compatiblelicenses that has been approved by Creative Commons as being essentially equivalent to this License, including, at a minimum, because that license: (i) contains terms that have the same purpose, meaning and effect as the License Elements of this License; and, (ii) explicitly permits the relicensing of adaptations of works made available under that license under this License or a Creative Commons jurisdiction license with the same License Elements as this License.
-"Distribute" means to make available to the public the original and copies of the Work or Adaptation, as appropriate, through sale or other transfer of ownership.
-"License Elements" means the following high-level license attributes as selected by Licensor and indicated in the title of this License: Attribution, ShareAlike.
-"Licensor" means the individual, individuals, entity or entities that offer(s) the Work under the terms of this License.
-"Original Author" means, in the case of a literary or artistic work, the individual, individuals, entity or entities who created the Work or if no individual or entity can be identified, the publisher; and in addition (i) in the case of a performance the actors, singers, musicians, dancers, and other persons who act, sing, deliver, declaim, play in, interpret or otherwise perform literary or artistic works or expressions of folklore; (ii) in the case of a phonogram the producer being the person or legal entity who first fixes the sounds of a performance or other sounds; and, (iii) in the case of broadcasts, the organization that transmits the broadcast.
-"Work" means the literary and/or artistic work offered under the terms of this License including without limitation any production in the literary, scientific and artistic domain, whatever may be the mode or form of its expression including digital form, such as a book, pamphlet and other writing; a lecture, address, sermon or other work of the same nature; a dramatic or dramatico-musical work; a choreographic work or entertainment in dumb show; a musical composition with or without words; a cinematographic work to which are assimilated works expressed by a process analogous to cinematography; a work of drawing, painting, architecture, sculpture, engraving or lithography; a photographic work to which are assimilated works expressed by a process analogous to photography; a work of applied art; an illustration, map, plan, sketch or three-dimensional work relative to geography, topography, architecture or science; a performance; a broadcast; a phonogram; a compilation of data to the extent it is protected as a copyrightable work; or a work performed by a variety or circus performer to the extent it is not otherwise considered a literary or artistic work.
-"You" means an individual or entity exercising rights under this License who has not previously violated the terms of this License with respect to the Work, or who has received express permission from the Licensor to exercise rights under this License despite a previous violation.
-"Publicly Perform" means to perform public recitations of the Work and to communicate to the public those public recitations, by any means or process, including by wire or wireless means or public digital performances; to make available to the public Works in such a way that members of the public may access these Works from a place and at a place individually chosen by them; to perform the Work to the public by any means or process and the communication to the public of the performances of the Work, including by public digital performance; to broadcast and rebroadcast the Work by any means including signs, sounds or images.
-"Reproduce" means to make copies of the Work by any means including without limitation by sound or visual recordings and the right of fixation and reproducing fixations of the Work, including storage of a protected performance or phonogram in digital form or other electronic medium.
-2. Fair Dealing Rights. Nothing in this License is intended to reduce, limit, or restrict any uses free from copyright or rights arising from limitations or exceptions that are provided for in connection with the copyright protection under copyright law or other applicable laws.
-
-3. License Grant. Subject to the terms and conditions of this License, Licensor hereby grants You a worldwide, royalty-free, non-exclusive, perpetual (for the duration of the applicable copyright) license to exercise the rights in the Work as stated below:
-
-to Reproduce the Work, to incorporate the Work into one or more Collections, and to Reproduce the Work as incorporated in the Collections;
-to create and Reproduce Adaptations provided that any such Adaptation, including any translation in any medium, takes reasonable steps to clearly label, demarcate or otherwise identify that changes were made to the original Work. For example, a translation could be marked "The original work was translated from English to Spanish," or a modification could indicate "The original work has been modified.";
-to Distribute and Publicly Perform the Work including as incorporated in Collections; and,
-to Distribute and Publicly Perform Adaptations.
-For the avoidance of doubt:
-
-Non-waivable Compulsory License Schemes. In those jurisdictions in which the right to collect royalties through any statutory or compulsory licensing scheme cannot be waived, the Licensor reserves the exclusive right to collect such royalties for any exercise by You of the rights granted under this License;
-Waivable Compulsory License Schemes. In those jurisdictions in which the right to collect royalties through any statutory or compulsory licensing scheme can be waived, the Licensor waives the exclusive right to collect such royalties for any exercise by You of the rights granted under this License; and,
-Voluntary License Schemes. The Licensor waives the right to collect royalties, whether individually or, in the event that the Licensor is a member of a collecting society that administers voluntary licensing schemes, via that society, from any exercise by You of the rights granted under this License.
-The above rights may be exercised in all media and formats whether now known or hereafter devised. The above rights include the right to make such modifications as are technically necessary to exercise the rights in other media and formats. Subject to Section 8(f), all rights not expressly granted by Licensor are hereby reserved.
-
-4. Restrictions. The license granted in Section 3 above is expressly made subject to and limited by the following restrictions:
-
-You may Distribute or Publicly Perform the Work only under the terms of this License. You must include a copy of, or the Uniform Resource Identifier (URI) for, this License with every copy of the Work You Distribute or Publicly Perform. You may not offer or impose any terms on the Work that restrict the terms of this License or the ability of the recipient of the Work to exercise the rights granted to that recipient under the terms of the License. You may not sublicense the Work. You must keep intact all notices that refer to this License and to the disclaimer of warranties with every copy of the Work You Distribute or Publicly Perform. When You Distribute or Publicly Perform the Work, You may not impose any effective technological measures on the Work that restrict the ability of a recipient of the Work from You to exercise the rights granted to that recipient under the terms of the License. This Section 4(a) applies to the Work as incorporated in a Collection, but this does not require the Collection apart from the Work itself to be made subject to the terms of this License. If You create a Collection, upon notice from any Licensor You must, to the extent practicable, remove from the Collection any credit as required by Section 4(c), as requested. If You create an Adaptation, upon notice from any Licensor You must, to the extent practicable, remove from the Adaptation any credit as required by Section 4(c), as requested.
-You may Distribute or Publicly Perform an Adaptation only under the terms of: (i) this License; (ii) a later version of this License with the same License Elements as this License; (iii) a Creative Commons jurisdiction license (either this or a later license version) that contains the same License Elements as this License (e.g., Attribution-ShareAlike 3.0 US)); (iv) a Creative Commons Compatible License. If you license the Adaptation under one of the licenses mentioned in (iv), you must comply with the terms of that license. If you license the Adaptation under the terms of any of the licenses mentioned in (i), (ii) or (iii) (the "Applicable License"), you must comply with the terms of the Applicable License generally and the following provisions: (I) You must include a copy of, or the URI for, the Applicable License with every copy of each Adaptation You Distribute or Publicly Perform; (II) You may not offer or impose any terms on the Adaptation that restrict the terms of the Applicable License or the ability of the recipient of the Adaptation to exercise the rights granted to that recipient under the terms of the Applicable License; (III) You must keep intact all notices that refer to the Applicable License and to the disclaimer of warranties with every copy of the Work as included in the Adaptation You Distribute or Publicly Perform; (IV) when You Distribute or Publicly Perform the Adaptation, You may not impose any effective technological measures on the Adaptation that restrict the ability of a recipient of the Adaptation from You to exercise the rights granted to that recipient under the terms of the Applicable License. This Section 4(b) applies to the Adaptation as incorporated in a Collection, but this does not require the Collection apart from the Adaptation itself to be made subject to the terms of the Applicable License.
-If You Distribute, or Publicly Perform the Work or any Adaptations or Collections, You must, unless a request has been made pursuant to Section 4(a), keep intact all copyright notices for the Work and provide, reasonable to the medium or means You are utilizing: (i) the name of the Original Author (or pseudonym, if applicable) if supplied, and/or if the Original Author and/or Licensor designate another party or parties (e.g., a sponsor institute, publishing entity, journal) for attribution ("Attribution Parties") in Licensor's copyright notice, terms of service or by other reasonable means, the name of such party or parties; (ii) the title of the Work if supplied; (iii) to the extent reasonably practicable, the URI, if any, that Licensor specifies to be associated with the Work, unless such URI does not refer to the copyright notice or licensing information for the Work; and (iv) , consistent with Ssection 3(b), in the case of an Adaptation, a credit identifying the use of the Work in the Adaptation (e.g., "French translation of the Work by Original Author," or "Screenplay based on original Work by Original Author"). The credit required by this Section 4(c) may be implemented in any reasonable manner; provided, however, that in the case of a Adaptation or Collection, at a minimum such credit will appear, if a credit for all contributing authors of the Adaptation or Collection appears, then as part of these credits and in a manner at least as prominent as the credits for the other contributing authors. For the avoidance of doubt, You may only use the credit required by this Section for the purpose of attribution in the manner set out above and, by exercising Your rights under this License, You may not implicitly or explicitly assert or imply any connection with, sponsorship or endorsement by the Original Author, Licensor and/or Attribution Parties, as appropriate, of You or Your use of the Work, without the separate, express prior written permission of the Original Author, Licensor and/or Attribution Parties.
-Except as otherwise agreed in writing by the Licensor or as may be otherwise permitted by applicable law, if You Reproduce, Distribute or Publicly Perform the Work either by itself or as part of any Adaptations or Collections, You must not distort, mutilate, modify or take other derogatory action in relation to the Work which would be prejudicial to the Original Author's honor or reputation. Licensor agrees that in those jurisdictions (e.g. Japan), in which any exercise of the right granted in Section 3(b) of this License (the right to make Adaptations) would be deemed to be a distortion, mutilation, modification or other derogatory action prejudicial to the Original Author's honor and reputation, the Licensor will waive or not assert, as appropriate, this Section, to the fullest extent permitted by the applicable national law, to enable You to reasonably exercise Your right under Section 3(b) of this License (right to make Adaptations) but not otherwise.
-5. Representations, Warranties and Disclaimer
-
-UNLESS OTHERWISE MUTUALLY AGREED TO BY THE PARTIES IN WRITING, LICENSOR OFFERS THE WORK AS-IS AND MAKES NO REPRESENTATIONS OR WARRANTIES OF ANY KIND CONCERNING THE WORK, EXPRESS, IMPLIED, STATUTORY OR OTHERWISE, INCLUDING, WITHOUT LIMITATION, WARRANTIES OF TITLE, MERCHANTIBILITY, FITNESS FOR A PARTICULAR PURPOSE, NONINFRINGEMENT, OR THE ABSENCE OF LATENT OR OTHER DEFECTS, ACCURACY, OR THE PRESENCE OF ABSENCE OF ERRORS, WHETHER OR NOT DISCOVERABLE. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OF IMPLIED WARRANTIES, SO SUCH EXCLUSION MAY NOT APPLY TO YOU.
-
-6. Limitation on Liability. EXCEPT TO THE EXTENT REQUIRED BY APPLICABLE LAW, IN NO EVENT WILL LICENSOR BE LIABLE TO YOU ON ANY LEGAL THEORY FOR ANY SPECIAL, INCIDENTAL, CONSEQUENTIAL, PUNITIVE OR EXEMPLARY DAMAGES ARISING OUT OF THIS LICENSE OR THE USE OF THE WORK, EVEN IF LICENSOR HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
-
-7. Termination
-
-This License and the rights granted hereunder will terminate automatically upon any breach by You of the terms of this License. Individuals or entities who have received Adaptations or Collections from You under this License, however, will not have their licenses terminated provided such individuals or entities remain in full compliance with those licenses. Sections 1, 2, 5, 6, 7, and 8 will survive any termination of this License.
-Subject to the above terms and conditions, the license granted here is perpetual (for the duration of the applicable copyright in the Work). Notwithstanding the above, Licensor reserves the right to release the Work under different license terms or to stop distributing the Work at any time; provided, however that any such election will not serve to withdraw this License (or any other license that has been, or is required to be, granted under the terms of this License), and this License will continue in full force and effect unless terminated as stated above.
-8. Miscellaneous
-
-Each time You Distribute or Publicly Perform the Work or a Collection, the Licensor offers to the recipient a license to the Work on the same terms and conditions as the license granted to You under this License.
-Each time You Distribute or Publicly Perform an Adaptation, Licensor offers to the recipient a license to the original Work on the same terms and conditions as the license granted to You under this License.
-If any provision of this License is invalid or unenforceable under applicable law, it shall not affect the validity or enforceability of the remainder of the terms of this License, and without further action by the parties to this agreement, such provision shall be reformed to the minimum extent necessary to make such provision valid and enforceable.
-No term or provision of this License shall be deemed waived and no breach consented to unless such waiver or consent shall be in writing and signed by the party to be charged with such waiver or consent.
-This License constitutes the entire agreement between the parties with respect to the Work licensed here. There are no understandings, agreements or representations with respect to the Work not specified here. Licensor shall not be bound by any additional provisions that may appear in any communication from You. This License may not be modified without the mutual written agreement of the Licensor and You.
-The rights granted under, and the subject matter referenced, in this License were drafted utilizing the terminology of the Berne Convention for the Protection of Literary and Artistic Works (as amended on September 28, 1979), the Rome Convention of 1961, the WIPO Copyright Treaty of 1996, the WIPO Performances and Phonograms Treaty of 1996 and the Universal Copyright Convention (as revised on July 24, 1971). These rights and subject matter take effect in the relevant jurisdiction in which the License terms are sought to be enforced according to the corresponding provisions of the implementation of those treaty provisions in the applicable national law. If the standard suite of rights granted under applicable copyright law includes additional rights not granted under this License, such additional rights are deemed to be included in the License; this License is not intended to restrict the license of any rights under applicable law.
diff --git a/ChangeLog.old b/ChangeLog.old
deleted file mode 100644
index 6274dd05..00000000
--- a/ChangeLog.old
+++ /dev/null
@@ -1,2353 +0,0 @@
-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/HACKING b/HACKING
deleted file mode 100644
index 28174704..00000000
--- a/HACKING
+++ /dev/null
@@ -1,35 +0,0 @@
-Empathy is split in different processes:
-- src/empathy: contact list, considered as the main UI
-- src/empathy-chat: chat UI
-- src/empathy-call: call UI
-- src/empathy-accounts: UI to configure IM accounts
-- src/empathy-debugger: debug tool
-
-Each process can be run directly from source without having to be installed to
-its prefix. You just have to define an appropriate environment using the
-wrapper found in the tools/ directory.. For example:
- ./tools/empathy-env ./src/empathy
-
-The chat and call UI are automatically started by telepathy-mission-control
-when receiving or requesting a chat/call. In order to use your custom version
-you have to kill any existing instance of empathy-{chat,call} and then start
-it with EMPATHY_PERSIST=1 to prevent it from auto exiting if there is no
-channel to handle. For example:
- EMPATHY_PERSIST=1 ./tools/empathy-env ./src/empathy-chat
-
-Debugging can be turned on using EMPATHY_DEBUG=all and logged to a file
-with EMPATHY_LOGFILE=/tmp/empathy.log
-
-Sometimes you may want to load the locally compiled version of some GStreamer
-plugin (e.g. Farstream) instead of the system installed one. To do so, just
-set the GST_PLUGIN_PATH environment variable to tell GStreamer where your
-plugins are located and the GST_PLUGIN_LOADING_WHITELIST to avoid conflicts
-with system installed plugins. It's also a good idea to use GST_REGISTRY to
-avoid clobbering your default GStreamer registry. For example you can
-export these before launching the empathy processes as shown above:
- export GST_PLUGIN_LOADING_WHITELIST=gstreamer:gst-plugins-base:gst-plugins-good:libnice:farstream:gst-plugins-bad:gst-plugins-ugly:gst-ffmpeg
- export GST_PLUGIN_PATH=/path/to/your/custom/lib/gstreamer-0.10
- export GST_REGISTRY=/tmp/gstreamer.registry
-
-See http://live.gnome.org/Empathy/ about coding style conventions.
-See also http://live.gnome.org/Empathy/Git to read about our git workflow.
diff --git a/Makefile.am b/Makefile.am
index 9c7d44a7..b8fb2171 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -1,4 +1,4 @@
-SUBDIRS = tools extensions po data tp-account-widgets
+SUBDIRS = tools po data tp-account-widgets
ACLOCAL_AMFLAGS = -I m4 ${ACLOCAL_FLAGS}
diff --git a/PASTEBIN-API-KEY.txt b/PASTEBIN-API-KEY.txt
deleted file mode 100644
index 71c8e9c3..00000000
--- a/PASTEBIN-API-KEY.txt
+++ /dev/null
@@ -1,110 +0,0 @@
-MIME-Version: 1.0
-Received: by 10.231.11.1 with HTTP; Tue, 11 Oct 2011 22:59:10 -0700 (PDT)
-In-Reply-To:
-<CADttZZpfye8-Pi9=UDK3OUq8NmsagYV5AF_oewVNEUMRp7joFg@mail.gmail.com>
-References: <CADttZZoDLnv+aoZBPLcHT43-yKCH8LB+3objC-ST1qRp3P3Lnw@mail.gmail.com>
- <CACuygeBuekJwr3t+7GxLA8Ft+A-Q6QmZUhe_2VU2LozSYduYxQ@mail.gmail.com>
- <CADttZZqadJP3441etHxd2JFmNCqqHxDhg-uiCqqV=Qs3hUCynA@mail.gmail.com>
- <CADttZZrWAw7hjQb1+qN+4z42d10FEWwOvLG-P_s85Htf_fwbEg@mail.gmail.com>
- <CACuygeCOpAmYBogzay2VOb7SGnEhLsKfeaU-07QXQG=mj-ZRfg@mail.gmail.com>
- <CADttZZrmrz5Dr7d9THQsSPJtWvy_P_-vkAx=UDcUEo_c+RE2nQ@mail.gmail.com>
- <CADttZZqGfRUjcr8Cppz5oWniXwmreomd3wshCBzwx1E32A=Kdw@mail.gmail.com>
- <CACuygeDDcW1NZYGCzTuxAUrJ92BgEnG+0ewME-yhR03Pwvd02A@mail.gmail.com>
- <CADttZZpfye8-Pi9=UDK3OUq8NmsagYV5AF_oewVNEUMRp7joFg@mail.gmail.com>
-Date: Wed, 12 Oct 2011 11:29:10 +0530
-Delivered-To: chandniverma2112@gmail.com
-Message-ID: <CADttZZrP+XkPtNgAzxM56WkQAT72hjcQD0Z1UcFj8=q86Cpxeg@mail.gmail.com>
-Subject: Re: API issues
-From: Chandni Verma <chandniverma2112@gmail.com>
-To: Pastebin Support <admin@pastebin.com>
-Content-Type: multipart/alternative; boundary=001636ef068e08c10c04af13b9e5
-
---001636ef068e08c10c04af13b9e5
-Content-Type: text/plain; charset=ISO-8859-1
-
-Hi Admin,
-
-One thing which I want to ask you since it it not answered anywhere on the
-pastebin.com website is that who is allowed to use the API developer key in
-their codes. Are there any licences to keep in mind?
-It's crucial to the open source project I have used the pastebin API for.
-
-Can we publish a member's (my) key in the open source code?
-
-Regards,
-Chandni
-
-_______
-
-Delivered-To: chandniverma2112@gmail.com
-Received: by 10.231.11.1 with SMTP id r1cs44531ibr;
- Wed, 12 Oct 2011 02:27:32 -0700 (PDT)
-Return-Path: <godius@gmail.com>
-Received-SPF: pass (google.com: domain of godius@gmail.com designates
-10.182.187.100 as permitted sender) client-ip=10.182.187.100;
-Authentication-Results: mr.google.com; spf=pass (google.com: domain of
-godius@gmail.com designates 10.182.187.100 as permitted sender)
-smtp.mail=godius@gmail.com; dkim=pass header.i=godius@gmail.com
-Received: from mr.google.com ([10.182.187.100])
- by 10.182.187.100 with SMTP id fr4mr13834663obc.79.1318411651457
-(num_hops = 1);
- Wed, 12 Oct 2011 02:27:31 -0700 (PDT)
-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
- d=gmail.com; s=gamma;
- h=mime-version:sender:in-reply-to:references:date
- :x-google-sender-auth:message-id:subject:from:to:content-type;
- bh=pv3X2ILKj91U9H2lw/fwrkHPzZRFCaB8pPO2Y6pBzSA=;
- b=T2XQR8CcrP3jF/9wJPYJxBQPToZp2ckFMelfmdRFd7akc6f8iEQRXUjEsYXvRPbuzS
- 6TWaTHiT0QLBZaqh1D6AifP2E4m84H+h8LwEkYXXAN4dJyTIbAM8rQ5KfbTiaoKzuv48
- 7dS26KA2YOB1bWTlhEm0zW4bdPCGSBxsCW67Y=
-MIME-Version: 1.0
-Received: by 10.182.187.100 with SMTP id fr4mr13834663obc.79.1318411651452;
- Wed, 12 Oct 2011 02:27:31 -0700 (PDT)
-Sender: godius@gmail.com
-Received: by 10.182.118.36 with HTTP; Wed, 12 Oct 2011 02:27:31 -0700 (PDT)
-In-Reply-To:
-<CADttZZrP+XkPtNgAzxM56WkQAT72hjcQD0Z1UcFj8=q86Cpxeg@mail.gmail.com>
-References: <CADttZZoDLnv+aoZBPLcHT43-yKCH8LB+3objC-ST1qRp3P3Lnw@mail.gmail.com>
- <CACuygeBuekJwr3t+7GxLA8Ft+A-Q6QmZUhe_2VU2LozSYduYxQ@mail.gmail.com>
- <CADttZZqadJP3441etHxd2JFmNCqqHxDhg-uiCqqV=Qs3hUCynA@mail.gmail.com>
- <CADttZZrWAw7hjQb1+qN+4z42d10FEWwOvLG-P_s85Htf_fwbEg@mail.gmail.com>
- <CACuygeCOpAmYBogzay2VOb7SGnEhLsKfeaU-07QXQG=mj-ZRfg@mail.gmail.com>
- <CADttZZrmrz5Dr7d9THQsSPJtWvy_P_-vkAx=UDcUEo_c+RE2nQ@mail.gmail.com>
- <CADttZZqGfRUjcr8Cppz5oWniXwmreomd3wshCBzwx1E32A=Kdw@mail.gmail.com>
- <CACuygeDDcW1NZYGCzTuxAUrJ92BgEnG+0ewME-yhR03Pwvd02A@mail.gmail.com>
- <CADttZZpfye8-Pi9=UDK3OUq8NmsagYV5AF_oewVNEUMRp7joFg@mail.gmail.com>
- <CADttZZrP+XkPtNgAzxM56WkQAT72hjcQD0Z1UcFj8=q86Cpxeg@mail.gmail.com>
-Date: Wed, 12 Oct 2011 11:27:31 +0200
-X-Google-Sender-Auth: cXD_1Zj39UiHBWVSdEJRk04LVC8
-Message-ID: <CACuygeDAqGCP+=KsV+ZyxNuLoy9L0CTQ63NpRhrig-9bzeFp6A@mail.gmail.com>
-Subject: Re: API issues
-From: Pastebin Support <admin@pastebin.com>
-To: Chandni Verma <chandniverma2112@gmail.com>
-Content-Type: multipart/alternative; boundary=14dae9398ea5270f6904af16a25e
-
---14dae9398ea5270f6904af16a25e
-Content-Type: text/plain; charset=ISO-8859-1
-
-Hello,
-
-Yes you can use your api developer key in the open for your project.
-Regards,
-
-Pastebin
-
-
-On Wed, Oct 12, 2011 at 7:59 AM, Chandni Verma
-<chandniverma2112@gmail.com>wrote:
-
-> Hi Admin,
->
-> One thing which I want to ask you since it it not answered anywhere on the
-> pastebin.com website is that who is allowed to use the API developer key
-> in their codes. Are there any licences to keep in mind?
-> It's crucial to the open source project I have used the pastebin API for.
->
-> Can we publish a member's (my) key in the open source code?
->
-> Regards,
-> Chandni
->
diff --git a/TODO b/TODO
deleted file mode 100644
index 59fc91a7..00000000
--- a/TODO
+++ /dev/null
@@ -1,7 +0,0 @@
-Things you can do if you want to help:
-
-See http://live.gnome.org/Empathy/Roadmap
-
-If you want to contribute you can ask for information at
- - #empathy on irc.gimp.org
- - Telepathy's mailing list: telepathy@lists.freedesktop.org
diff --git a/data/.gitignore b/data/.gitignore
index 68ce9a3c..006b5766 100644
--- a/data/.gitignore
+++ b/data/.gitignore
@@ -1,9 +1,3 @@
-empathy.desktop
-empathy.desktop.in
org.gnome.Empathy.gschema.valid
gschemas.compiled
-org.freedesktop.Telepathy.Client.Empathy.Chat.service
-org.freedesktop.Telepathy.Client.Empathy.Call.service
-org.freedesktop.Telepathy.Client.Empathy.Auth.service
-org.freedesktop.Telepathy.Client.Empathy.FileTransfer.service
icons/local-copy/*
diff --git a/data/Empathy.Auth.client b/data/Empathy.Auth.client
deleted file mode 100644
index 3aef27df..00000000
--- a/data/Empathy.Auth.client
+++ /dev/null
@@ -1,17 +0,0 @@
-[org.freedesktop.Telepathy.Client]
-Interfaces=org.freedesktop.Telepathy.Client.Handler;org.freedesktop.Telepathy.Client.Observer
-
-[org.freedesktop.Telepathy.Client.Observer]
-DelayApprovers=true
-
-[org.freedesktop.Telepathy.Client.Handler.HandlerChannelFilter 0]
-org.freedesktop.Telepathy.Channel.ChannelType s=org.freedesktop.Telepathy.Channel.Type.ServerTLSConnection
-org.freedesktop.Telepathy.Channel.TargetHandleType u=0
-
-[org.freedesktop.Telepathy.Client.Handler.HandlerChannelFilter 1]
-org.freedesktop.Telepathy.Channel.ChannelType s=org.freedesktop.Telepathy.Channel.Type.ServerAuthentication
-org.freedesktop.Telepathy.Channel.Type.ServerAuthentication.AuthenticationMethod s=org.freedesktop.Telepathy.Channel.Interface.SASLAuthentication
-
-[org.freedesktop.Telepathy.Client.Observer.ObserverChannelFilter 0]
-org.freedesktop.Telepathy.Channel.ChannelType s=org.freedesktop.Telepathy.Channel.Type.ServerAuthentication
-org.freedesktop.Telepathy.Channel.Type.ServerAuthentication.AuthenticationMethod s=org.freedesktop.Telepathy.Channel.Interface.SASLAuthentication
diff --git a/data/Empathy.Call.client b/data/Empathy.Call.client
deleted file mode 100644
index b24cd8d7..00000000
--- a/data/Empathy.Call.client
+++ /dev/null
@@ -1,23 +0,0 @@
-[org.freedesktop.Telepathy.Client]
-Interfaces=org.freedesktop.Telepathy.Client.Handler
-
-[org.freedesktop.Telepathy.Client.Handler.HandlerChannelFilter 0]
-org.freedesktop.Telepathy.Channel.ChannelType s=org.freedesktop.Telepathy.Channel.Type.Call1
-org.freedesktop.Telepathy.Channel.TargetHandleType u=1
-
-[org.freedesktop.Telepathy.Client.Handler.HandlerChannelFilter 1]
-org.freedesktop.Telepathy.Channel.ChannelType s=org.freedesktop.Telepathy.Channel.Type.Call1
-org.freedesktop.Telepathy.Channel.TargetHandleType u=1
-org.freedesktop.Telepathy.Channel.Type.Call1.InitialAudio b=true
-
-[org.freedesktop.Telepathy.Client.Handler.HandlerChannelFilter 2]
-org.freedesktop.Telepathy.Channel.ChannelType s=org.freedesktop.Telepathy.Channel.Type.Call1
-org.freedesktop.Telepathy.Channel.TargetHandleType u=1
-org.freedesktop.Telepathy.Channel.Type.Call1.InitialVideo b=true
-
-[org.freedesktop.Telepathy.Client.Handler.Capabilities]
-org.freedesktop.Telepathy.Channel.Type.Call1/audio=true
-org.freedesktop.Telepathy.Channel.Type.Call1/video=true
-org.freedesktop.Telepathy.Channel.Type.Call1/ice=true
-org.freedesktop.Telepathy.Channel.Type.Call1/gtalk-p2p=true
-org.freedesktop.Telepathy.Channel.Type.Call1/video/h264=true
diff --git a/data/Empathy.Chat.client b/data/Empathy.Chat.client
deleted file mode 100644
index 3d0bd91f..00000000
--- a/data/Empathy.Chat.client
+++ /dev/null
@@ -1,14 +0,0 @@
-[org.freedesktop.Telepathy.Client]
-Interfaces=org.freedesktop.Telepathy.Client.Handler
-
-[org.freedesktop.Telepathy.Client.Handler.HandlerChannelFilter 0]
-org.freedesktop.Telepathy.Channel.ChannelType s=org.freedesktop.Telepathy.Channel.Type.Text
-org.freedesktop.Telepathy.Channel.TargetHandleType u=0
-
-[org.freedesktop.Telepathy.Client.Handler.HandlerChannelFilter 1]
-org.freedesktop.Telepathy.Channel.ChannelType s=org.freedesktop.Telepathy.Channel.Type.Text
-org.freedesktop.Telepathy.Channel.TargetHandleType u=1
-
-[org.freedesktop.Telepathy.Client.Handler.HandlerChannelFilter 2]
-org.freedesktop.Telepathy.Channel.ChannelType s=org.freedesktop.Telepathy.Channel.Type.Text
-org.freedesktop.Telepathy.Channel.TargetHandleType u=2
diff --git a/data/Empathy.FileTransfer.client b/data/Empathy.FileTransfer.client
deleted file mode 100644
index 70c9e12f..00000000
--- a/data/Empathy.FileTransfer.client
+++ /dev/null
@@ -1,7 +0,0 @@
-[org.freedesktop.Telepathy.Client]
-Interfaces=org.freedesktop.Telepathy.Client.Handler
-
-[org.freedesktop.Telepathy.Client.Handler.HandlerChannelFilter 0]
-org.freedesktop.Telepathy.Channel.ChannelType s=org.freedesktop.Telepathy.Channel.Type.FileTransfer
-org.freedesktop.Telepathy.Channel.TargetHandleType u=1
-org.freedesktop.Telepathy.Channel.Requested b=false
diff --git a/data/Makefile.am b/data/Makefile.am
index e6627ae1..273f2a7c 100644
--- a/data/Makefile.am
+++ b/data/Makefile.am
@@ -1,11 +1,4 @@
-SUBDIRS = icons themes
-
-desktopdir = $(datadir)/applications
-desktop_in_files = \
- empathy.desktop.in \
- $(NULL)
-desktop_DATA = $(desktop_in_files:.desktop.in=.desktop)
-@INTLTOOL_DESKTOP_RULE@
+SUBDIRS = icons
gsettings_SCHEMAS = org.gnome.Empathy.gschema.xml
@GSETTINGS_RULES@
@@ -17,65 +10,12 @@ gschemas.compiled: $(gsettings_SCHEMAS:.xml=.valid)
all-local: gschemas.compiled
-convertdir = $(datarootdir)/GConf/gsettings
-convert_DATA = \
- empathy.convert
-
-servicefiledir = $(datadir)/dbus-1/services
-servicefile_in_files = \
- org.freedesktop.Telepathy.Client.Empathy.Chat.service.in \
- org.freedesktop.Telepathy.Client.Empathy.Auth.service.in \
- org.freedesktop.Telepathy.Client.Empathy.Call.service.in \
- org.freedesktop.Telepathy.Client.Empathy.FileTransfer.service.in
-
-servicefile_DATA = $(servicefile_in_files:.service.in=.service)
-
-org.freedesktop.Telepathy.Client.Empathy.Chat.service: org.freedesktop.Telepathy.Client.Empathy.Chat.service.in
- $(AM_V_GEN)sed -e "s|[@]libexecdir[@]|$(libexecdir)|" $< > $@
-
-org.freedesktop.Telepathy.Client.Empathy.Auth.service: org.freedesktop.Telepathy.Client.Empathy.Auth.service.in
- $(AM_V_GEN)sed -e "s|[@]libexecdir[@]|$(libexecdir)|" $< > $@
-
-org.freedesktop.Telepathy.Client.Empathy.Call.service: org.freedesktop.Telepathy.Client.Empathy.Call.service.in
- $(AM_V_GEN)sed -e "s|[@]libexecdir[@]|$(libexecdir)|" $< > $@
-
-org.freedesktop.Telepathy.Client.Empathy.FileTransfer.service: org.freedesktop.Telepathy.Client.Empathy.FileTransfer.service.in
- $(AM_V_GEN)sed -e "s|[@]bindir[@]|$(bindir)|" $< > $@
-
-clientfiledir = $(datarootdir)/telepathy/clients
-clientfile_DATA = \
- Empathy.Chat.client \
- Empathy.Auth.client \
- Empathy.Call.client \
- Empathy.FileTransfer.client
-
-htmldir = $(datadir)/empathy
-html_DATA = \
- Template.html \
- empathy-log-window.html \
- $(NULL)
-
-cssdir = $(datadir)/empathy
-css_DATA = \
- empathy.css \
- $(NULL)
-
EXTRA_DIST = \
- $(convert_DATA) \
- $(desktop_in_files) \
- $(desktop_DATA) \
$(schemas_DATA) \
- $(html_DATA) \
- $(clientfile_DATA) \
- $(servicefile_in_files) \
$(gsettings_SCHEMAS) \
- $(css_DATA) \
$(NULL)
DISTCLEANFILES = \
- $(desktop_DATA) \
$(schemas_DATA) \
- $(servicefile_DATA) \
- $(css_DATA) \
gschemas.compiled \
$(NULL)
diff --git a/data/Template.html b/data/Template.html
deleted file mode 100644
index 79224b8d..00000000
--- a/data/Template.html
+++ /dev/null
@@ -1,343 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
-<html>
-<head>
- <meta http-equiv="content-type" content="text/html; charset=utf-8" />
- <base href="%@">
- <script type="text/javascript" defer="defer">
- // NOTE:
- // Any percent signs in this file must be escaped!
- // Use two escape signs (%%) to display it, this is passed through a format call!
-
- function appendHTML(html) {
- var node = document.getElementById("Chat");
- var range = document.createRange();
- range.selectNode(node);
- var documentFragment = range.createContextualFragment(html);
- node.appendChild(documentFragment);
- }
-
- // a coalesced HTML object buffers and outputs DOM objects en masse.
- // saves A LOT of CSS recalculation time when loading many messages.
- // (ex. a long twitter timeline)
- function CoalescedHTML() {
- var self = this;
- this.fragment = document.createDocumentFragment();
- this.timeoutID = 0;
- this.coalesceRounds = 0;
- this.isCoalescing = false;
- this.isConsecutive = undefined;
- this.shouldScroll = undefined;
-
- var appendElement = function (elem) {
- document.getElementById("Chat").appendChild(elem);
- };
-
- function outputHTML() {
- var insert = document.getElementById("insert");
- if(!!insert && self.isConsecutive) {
- insert.parentNode.replaceChild(self.fragment, insert);
- } else {
- if(insert)
- insert.parentNode.removeChild(insert);
- // insert the documentFragment into the live DOM
- appendElement(self.fragment);
- }
- alignChat(self.shouldScroll);
-
- // reset state to empty/non-coalescing
- self.shouldScroll = undefined;
- self.isConsecutive = undefined;
- self.isCoalescing = false;
- self.coalesceRounds = 0;
- }
-
- // creates and returns a new documentFragment, containing all content nodes
- // which can be inserted as a single node.
- function createHTMLNode(html) {
- var range = document.createRange();
- range.selectNode(document.getElementById("Chat"));
- return range.createContextualFragment(html);
- }
-
- // removes first insert node from the internal fragment.
- function rmInsertNode() {
- var insert = self.fragment.querySelector("#insert");
- if(insert)
- insert.parentNode.removeChild(insert);
- }
-
- function setShouldScroll(flag) {
- if(flag && undefined === self.shouldScroll)
- self.shouldScroll = flag;
- }
-
- // hook in a custom method to append new data
- // to the chat.
- this.setAppendElementMethod = function (func) {
- if(typeof func === 'function')
- appendElement = func;
- }
-
- // (re)start the coalescing timer.
- // we wait 25ms for a new message to come in.
- // If we get one, restart the timer and wait another 10ms.
- // If not, run outputHTML()
- // We do this a maximum of 400 times, for 10s max that can be spent
- // coalescing input, since this will block display.
- this.coalesce = function() {
- window.clearTimeout(self.timeoutID);
- self.timeoutID = window.setTimeout(outputHTML, 25);
- self.isCoalescing = true;
- self.coalesceRounds += 1;
- if(400 < self.coalesceRounds)
- self.cancel();
- }
-
- // if we need to append content into an insertion div,
- // we need to clear the buffer and cancel the timeout.
- this.cancel = function() {
- if(self.isCoalescing) {
- window.clearTimeout(self.timeoutID);
- outputHTML();
- }
- }
-
-
- // coalased analogs to the global functions
-
- this.append = function(html, shouldScroll) {
- // if we started this fragment with a consecuative message,
- // cancel and output before we continue
- if(self.isConsecutive) {
- self.cancel();
- }
- self.isConsecutive = false;
- rmInsertNode();
- var node = createHTMLNode(html);
- self.fragment.appendChild(node);
-
- node = null;
-
- setShouldScroll(shouldScroll);
- self.coalesce();
- }
-
- this.appendNext = function(html, shouldScroll) {
- if(undefined === self.isConsecutive)
- self.isConsecutive = true;
- var node = createHTMLNode(html);
- var insert = self.fragment.querySelector("#insert");
- if(insert) {
- insert.parentNode.replaceChild(node, insert);
- } else {
- self.fragment.appendChild(node);
- }
- node = null;
- setShouldScroll(shouldScroll);
- self.coalesce();
- }
-
- this.replaceLast = function (html, shouldScroll) {
- rmInsertNode();
- var node = createHTMLNode(html);
- var lastMessage = self.fragment.lastChild;
- lastMessage.parentNode.replaceChild(node, lastMessage);
- node = null;
- setShouldScroll(shouldScroll);
- }
- }
- var coalescedHTML;
-
- //Appending new content to the message view
- function appendMessage(html) {
- var shouldScroll;
-
- // Only call nearBottom() if should scroll is undefined.
- if(undefined === coalescedHTML.shouldScroll) {
- shouldScroll = nearBottom();
- } else {
- shouldScroll = coalescedHTML.shouldScroll;
- }
- appendMessageNoScroll(html, shouldScroll);
- }
-
- function appendMessageNoScroll(html, shouldScroll) {
- shouldScroll = shouldScroll || false;
- // always try to coalesce new, non-griuped, messages
- coalescedHTML.append(html, shouldScroll)
- }
-
- function appendNextMessage(html){
- var shouldScroll;
- if(undefined === coalescedHTML.shouldScroll) {
- shouldScroll = nearBottom();
- } else {
- shouldScroll = coalescedHTML.shouldScroll;
- }
- appendNextMessageNoScroll(html, shouldScroll);
- }
-
- function appendNextMessageNoScroll(html, shouldScroll){
- shouldScroll = shouldScroll || false;
- // only group next messages if we're already coalescing input
- coalescedHTML.appendNext(html, shouldScroll);
- }
-
- function replaceLastMessage(html){
- var shouldScroll;
- // only replace messages if we're already coalescing
- if(coalescedHTML.isCoalescing){
- if(undefined === coalescedHTML.shouldScroll) {
- shouldScroll = nearBottom();
- } else {
- shouldScroll = coalescedHTML.shouldScroll;
- }
- coalescedHTML.replaceLast(html, shouldScroll);
- } else {
- shouldScroll = nearBottom();
- //Retrieve the current insertion point, then remove it
- //This requires that there have been an insertion point... is there a better way to retrieve the last element? -evands
- var insert = document.getElementById("insert");
- if(insert){
- var parentNode = insert.parentNode;
- parentNode.removeChild(insert);
- var lastMessage = document.getElementById("Chat").lastChild;
- document.getElementById("Chat").removeChild(lastMessage);
- }
-
- //Now append the message itself
- appendHTML(html);
-
- alignChat(shouldScroll);
- }
- }
-
- //Auto-scroll to bottom. Use nearBottom to determine if a scrollToBottom is desired.
- function nearBottom() {
- return ( document.body.scrollTop >= ( document.body.offsetHeight - ( window.innerHeight * 1.2 ) ) );
- }
- function scrollToBottom() {
- document.body.scrollTop = document.body.offsetHeight;
- }
-
- //Dynamically exchange the active stylesheet
- function setStylesheet( id, url ) {
- var code = "<style id=\"" + id + "\" type=\"text/css\" media=\"screen,print\">";
- if( url.length )
- code += "@import url( \"" + url + "\" );";
- code += "</style>";
- var range = document.createRange();
- var head = document.getElementsByTagName( "head" ).item(0);
- range.selectNode( head );
- var documentFragment = range.createContextualFragment( code );
- head.removeChild( document.getElementById( id ) );
- head.appendChild( documentFragment );
- }
-
- /* Converts emoticon images to textual emoticons; all emoticons in message if alt is held */
- document.onclick = function imageCheck() {
- var node = event.target;
- if (node.tagName.toLowerCase() != 'img')
- return;
-
- imageSwap(node, false);
- }
-
- /* Converts textual emoticons to images if textToImagesFlag is true, otherwise vice versa */
- function imageSwap(node, textToImagesFlag) {
- var shouldScroll = nearBottom();
-
- var images = [node];
- if (event.altKey) {
- while (node.id != "Chat" && node.parentNode.id != "Chat")
- node = node.parentNode;
- images = node.querySelectorAll(textToImagesFlag ? "a" : "img");
- }
-
- for (var i = 0; i < images.length; i++) {
- textToImagesFlag ? textToImage(images[i]) : imageToText(images[i]);
- }
-
- alignChat(shouldScroll);
- }
-
- function textToImage(node) {
- if (!node.getAttribute("isEmoticon"))
- return;
- //Swap the image/text
- var img = document.createElement('img');
- img.setAttribute('src', node.getAttribute('src'));
- img.setAttribute('alt', node.firstChild.nodeValue);
- img.className = node.className;
- node.parentNode.replaceChild(img, node);
- }
-
- function imageToText(node)
- {
- if (client.zoomImage(node) || !node.alt)
- return;
- var a = document.createElement('a');
- a.setAttribute('onclick', 'imageSwap(this, true)');
- a.setAttribute('src', node.getAttribute('src'));
- a.setAttribute('isEmoticon', true);
- a.className = node.className;
- var text = document.createTextNode(node.alt);
- a.appendChild(text);
- node.parentNode.replaceChild(a, node);
- }
-
- //Align our chat to the bottom of the window. If true is passed, view will also be scrolled down
- function alignChat(shouldScroll) {
- var windowHeight = window.innerHeight;
-
- if (windowHeight > 0) {
- var contentElement = document.getElementById('Chat');
- var contentHeight = contentElement.offsetHeight;
- if (windowHeight - contentHeight > 0) {
- contentElement.style.position = 'relative';
- contentElement.style.top = (windowHeight - contentHeight) + 'px';
- } else {
- contentElement.style.position = 'static';
- }
- }
-
- if (shouldScroll) scrollToBottom();
- }
-
- window.onresize = function windowDidResize(){
- alignChat(true/*nearBottom()*/); //nearBottom buggy with inactive tabs
- }
-
- function initStyle() {
- alignChat(true);
- if(!coalescedHTML)
- coalescedHTML = new CoalescedHTML();
- }
- </script>
-
- <style type="text/css">
- .actionMessageUserName { display:none; }
- .actionMessageBody:before { content:"*"; }
- .actionMessageBody:after { content:"*"; }
- * { word-wrap:break-word; text-rendering: optimizelegibility; }
- img.scaledToFitImage { height: auto; max-width: 100%%; }
- </style>
-
- <!-- This style is shared by all variants. !-->
- <style id="baseStyle" type="text/css" media="screen,print">
- %@
- </style>
-
- <!-- Although we call this mainStyle for legacy reasons, it's actually the variant style !-->
- <style id="mainStyle" type="text/css" media="screen,print">
- @import url( "%@" );
- </style>
-
-</head>
-<body onload="initStyle();" style="==bodyBackground==">
-%@
-<div id="Chat">
-</div>
-%@
-</body>
-</html>
diff --git a/data/empathy-log-window.html b/data/empathy-log-window.html
deleted file mode 100644
index 88159252..00000000
--- a/data/empathy-log-window.html
+++ /dev/null
@@ -1,296 +0,0 @@
-<?xml version="1.0">
-<html
- xmlns="http://www.w3.org/TR/html4/"
- xmlns:empathy="http://live.gnome.org/Empathy">
- <head>
- <style type="text/css">
-html, body, div, p {
- padding: 0;
- margin: 1px;
-}
-
-body {
- margin-left: -1em;
-}
-
-div.row {
- margin-left: 1em;
- clear: both;
-}
-
-div.row p {
- display: inline;
- white-space: pre-wrap;
-}
-
-span.open:after {
- content: "\25BE";
- margin-right: 2px;
-}
-
-span.closed:after {
- content: "\25B8";
- margin-right: 2px;
-}
-
-span.date {
- float: right;
- color: gray;
-}
-
-img.icon {
- vertical-align: middle;
- padding-right: 1px;
-}
- </style>
- <script type="text/javascript">
-var EMPATHY_NS='http://live.gnome.org/Empathy';
-
-function filterNodes (node, tagName)
-{
- var out = new Array();
-
- for (var i = 0; i < node.childNodes.length; i++)
- {
- var elem = node.childNodes[i];
-
- if (elem.tagName == tagName)
- out.push(elem);
- }
-
- return out;
-}
-
-function getNodes(node)
-{
- return filterNodes(node, 'DIV');
-}
-
-function getContent(node)
-{
- return filterNodes(node, 'P')[0];
-}
-
-function getToggle(node)
-{
- return filterNodes(node, 'SPAN')[0];
-}
-
-function setExpander(node, open)
-{
- var toggle = getToggle(node);
- var display;
- var nodes;
-
- if (open)
- {
- toggle.setAttribute('class', 'open');
- display = 'block';
- }
- else
- {
- toggle.setAttribute('class', 'closed');
- display = 'none';
- }
-
- nodes = getNodes(node);
-
- for (var i = 0; i < nodes.length; i++)
- nodes[i].style.display = display;
-}
-
-function expandAll()
-{
- function expandAllRecurse(node)
- {
- var nodes = getNodes(node);
-
- for (var i = 0; i < nodes.length; i++)
- {
- setExpander(nodes[i], true);
-
- expandAllRecurse(nodes[i]);
- }
- }
-
- var treeview = document.getElementById('treeview');
-
- expandAllRecurse(treeview);
-}
-
-function setContent (contents, text, icon, date_)
-{
- contents.innerHTML = "";
-
- if (icon != "")
- {
- contents.innerHTML += '<img class="icon" src="' + icon + '"/>';
- }
-
- contents.innerHTML += text;
- contents.innerHTML += '<span class="date">' + date_ + '</span>';
-}
-
-function insertRow (path, text, icon, date_)
-{
- var treeview = document.getElementById('treeview');
- var parentnode = treeview;
- var i;
-
- // walk the tree
- for (i = 0; i < path.length - 1; i++)
- parentnode = getNodes(parentnode)[path[i]];
-
- // create a new node
- var newnode = document.createElement('div');
- newnode.setAttribute('class', 'row');
-
- // insert the new node into the tree
- var nodes = getNodes(parentnode);
-
- if (path[i] >= nodes.length)
- parentnode.appendChild(newnode);
- else
- parentnode.insertBefore(newnode, nodes[path[i]]);
-
- // set the path
- newnode.setAttributeNS(EMPATHY_NS, 'path', path.join(':'));
-
- // add an expander
- var toggle = document.createElement('span');
- newnode.appendChild(toggle);
- toggle.setAttribute('class', 'closed');
- toggle.style.display = 'none';
-
- var contents = document.createElement('p');
- newnode.appendChild(contents);
- setContent(contents, text, icon, date_);
-
- function toggleExpander (e)
- {
- if (toggle.getAttribute('class') == 'closed')
- setExpander(newnode, true);
- else
- setExpander(newnode, false);
- };
-
- toggle.onclick = toggleExpander;
- contents.ondblclick = toggleExpander;
-
- // if the node is not a top-level node, hide it
- if (parentnode != treeview)
- newnode.style.display = 'none';
-}
-
-function changeRow (path, text, icon, date_)
-{
- var treeview = document.getElementById('treeview');
- var node = treeview;
-
- // walk the tree
- for (var i = 0; i < path.length; i++)
- node = getNodes(node)[path[i]];
-
- // set the contents
- var contents = getContent(node);
- setContent(contents, text, icon, date_);
-}
-
-function deleteRow (path)
-{
- var treeview = document.getElementById('treeview');
- var node = treeview;
-
- // walk the tree
- for (var i = 0; i < path.length; i++)
- node = getNodes(node)[path[i]];
-
- node.parentNode.removeChild(node);
-}
-
-function reorderRows (path, new_order)
-{
- var treeview = document.getElementById('treeview');
- var node = treeview;
-
- // walk the tree
- for (var i = 0; i < path.length; i++)
- node = getNodes(node)[path[i]];
-
- var nodes = getNodes(node);
-
- // remove all the nodes from the DOM
- for (var i = 0; i < nodes.length; i++)
- node.removeChild(nodes[i]);
-
- // put them back in the new order
- // For reference: new_order[new_pos] = old_pos
- for (var i = 0; i < nodes.length; i++)
- node.appendChild(nodes[new_order[i]]);
-
- // recursively update the path
- function updatePaths(path, node)
- {
- var nodes = getNodes(node);
-
- for (var i = 0; i < nodes.length; i++)
- {
- var newpath = path.concat([i]);
-
- nodes[i].setAttributeNS(EMPATHY_NS, 'path', newpath.join(':'));
- updatePaths(newpath, nodes[i]);
- }
- }
-
- updatePaths(path, node);
-}
-
-function hasChildRows (path, has_children)
-{
- var treeview = document.getElementById('treeview');
- var node = treeview;
-
- // walk the tree
- for (var i = 0; i < path.length; i++)
- node = getNodes(node)[path[i]];
-
- var toggle = getToggle(node);
-
- if (has_children)
- toggle.style.display = 'inline';
- else
- toggle.style.display = 'none';
-}
-
-function getOffset (node)
-{
- var y = 0;
-
- while (node != null && !isNaN(node.offsetTop))
- {
- y += node.offsetTop - node.scrollTop;
- node = node.offsetParent;
- }
-
- return y;
-}
-
-function scrollToRow (path)
-{
- var treeview = document.getElementById('treeview');
- var node = treeview;
-
- // walk the tree
- for (var i = 0; i < path.length; i++)
- node = getNodes(node)[path[i]];
-
- window.scrollTo(0, getOffset(node));
-}
- </script>
- </head>
-
- <body>
- <div id="treeview">
- </div>
- </body>
-</html>
diff --git a/data/empathy.convert b/data/empathy.convert
deleted file mode 100644
index eabc9e48..00000000
--- a/data/empathy.convert
+++ /dev/null
@@ -1,61 +0,0 @@
-
-
-[org.gnome.Empathy]
-use-conn = /apps/empathy/use_conn
-autoconnect = /apps/empathy/autoconnect
-autoaway = /apps/empathy/autoaway
-file-transfer-default-folder = /apps/empathy/file_transfer_default_folder
-
-
-[org.gnome.Empathy.ui]
-show-offline = /apps/empathy/ui/show_offline
-main-window-hidden = /apps/empathy/ui/main_window_hidden
-avatar-directory = /apps/empathy/ui/avatar_directory
-separate-chat-windows = /apps/empathy/ui/separate_chat_windows
-chat-window-paned-pos = /apps/empathy/ui/chat_window_paned_pos
-
-
-[org.gnome.Empathy.sounds]
-sounds-enabled = /apps/empathy/sounds/sounds_enabled
-sounds-disabled-away = /apps/empathy/sounds/sounds_disabled_away
-sounds-incoming-message = /apps/empathy/sounds/sounds_incoming_message
-sounds-outgoing-message = /apps/empathy/sounds/sounds_outgoing_message
-sounds-new-conversation = /apps/empathy/sounds/sounds_new_conversation
-sounds-contact-login = /apps/empathy/sounds/sounds_contact_login
-sounds-contact-logout = /apps/empathy/sounds/sounds_contact_logout
-sounds-service-login = /apps/empathy/sounds/sounds_service_login
-sounds-service-logout = /apps/empathy/sounds/sounds_service_logout
-
-
-[org.gnome.Empathy.notifications]
-notifications-enabled = /apps/empathy/notifications/notifications_enabled
-notifications-disabled-away = /apps/empathy/notifications/notifications_disabled_away
-notifications-focus = /apps/empathy/notifications/notifications_focus
-notifications-contact-signin = /apps/empathy/notifications/notifications_contact_signin
-notifications-contact-signout = /apps/empathy/notifications/notifications_contact_signout
-
-
-[org.gnome.Empathy.conversation]
-graphical-smileys = /apps/empathy/conversation/graphical_smileys
-show-contacts-in-rooms = /apps/empathy/conversation/show_contacts_in_rooms
-theme = /apps/empathy/conversation/theme
-adium-path = /apps/empathy/conversation/adium_path
-enable-webkit-developer-tools = /apps/empathy/conversation/enable_webkit_developer_tools
-theme-chat-room = /apps/empathy/conversation/theme_chat_room
-spell-checker-languages = /apps/empathy/conversation/spell_checker_languages
-spell-checker-enabled = /apps/empathy/conversation/spell_checker_enabled
-nick-completion-char = /apps/empathy/conversation/nick_completion_char
-avatar-in-icon = /apps/empathy/conversation/avatar_in_icon
-
-
-[org.gnome.Empathy.hints]
-close-main-window = /apps/empathy/hints/close_main_window
-
-
-[org.gnome.Empathy.location]
-publish = /apps/empathy/location/publish
-resource-network = /apps/empathy/location/resource_network
-resource-cell = /apps/empathy/location/resource_cell
-resource-gps = /apps/empathy/location/resource_gps
-reduce-accuracy = /apps/empathy/location/reduce_accuracy
-
diff --git a/data/empathy.css b/data/empathy.css
deleted file mode 100644
index 72a48cae..00000000
--- a/data/empathy.css
+++ /dev/null
@@ -1,16 +0,0 @@
-.empathy-tab-close-button {
- -GtkButton-default-border : 0;
- -GtkButton-default-outside-border : 0;
- -GtkButton-inner-border: 0;
- -GtkWidget-focus-line-width : 0;
- -GtkWidget-focus-padding : 0;
- padding: 0;
-}
-
-.empathy-roster-window-error-button
-{
- -GtkButtonBox-child-min-width: 0;
- -GtkButtonBox-child-min-height: 0;
- -GtkButtonBox-child-internal-pad-x: 0;
- -GtkButtonBox-child-internal-pad-y: 0;
-}
diff --git a/data/empathy.desktop.in.in b/data/empathy.desktop.in.in
deleted file mode 100644
index 2e9b9fc9..00000000
--- a/data/empathy.desktop.in.in
+++ /dev/null
@@ -1,18 +0,0 @@
-[Desktop Entry]
-Version=1.0
-_Name=Empathy
-_GenericName=IM Client
-_X-GNOME-FullName=Empathy Internet Messaging
-_Comment=Chat on Google Talk, Facebook, MSN and many other chat services
-_Keywords=chat;talk;im;message;irc;voip;gtalk;facebook;jabber;
-Exec=empathy
-Icon=empathy
-StartupNotify=true
-Terminal=false
-Type=Application
-Categories=GNOME;GTK;Network;InstantMessaging;
-X-GNOME-UsesNotifications=true
-X-GNOME-Bugzilla-Bugzilla=GNOME
-X-GNOME-Bugzilla-Product=empathy
-X-GNOME-Bugzilla-Component=General
-X-GNOME-Bugzilla-Version=@VERSION@
diff --git a/data/icons/Makefile.am b/data/icons/Makefile.am
index c130a22c..a78e6bcf 100644
--- a/data/icons/Makefile.am
+++ b/data/icons/Makefile.am
@@ -1,29 +1,10 @@
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_256x256_empathy.png \
- $(NULL)
-
private_icons_themes = \
hicolor \
$(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_22x22_im-message.png \
- hicolor_status_16x16_user-typing.png \
hicolor_apps_16x16_im-aim.png \
hicolor_apps_16x16_im-ekiga.png \
hicolor_apps_16x16_im-facebook.png \
@@ -147,48 +128,10 @@ private_icons = \
hicolor_apps_scalable_im-sametime.svg \
hicolor_apps_scalable_im-yahoo.svg \
hicolor_apps_scalable_im-zephyr.svg \
- hicolor_status_16x16_user-available.png \
- hicolor_status_16x16_user-away.png \
- hicolor_status_16x16_user-busy.png \
- hicolor_status_16x16_user-idle.png \
- hicolor_status_16x16_user-offline.png \
- hicolor_status_16x16_empathy-pending.png \
- hicolor_status_22x22_user-available.png \
- hicolor_status_22x22_user-away.png \
- hicolor_status_22x22_user-busy.png \
- hicolor_status_22x22_user-idle.png \
- hicolor_status_22x22_user-offline.png \
- hicolor_status_22x22_empathy-pending.png \
- hicolor_status_24x24_user-available.png \
- hicolor_status_24x24_user-away.png \
- hicolor_status_24x24_user-busy.png \
- hicolor_status_24x24_user-idle.png \
- hicolor_status_24x24_user-offline.png \
- hicolor_status_24x24_empathy-pending.png \
- hicolor_status_32x32_user-available.png \
- hicolor_status_32x32_user-away.png \
- hicolor_status_32x32_user-busy.png \
- hicolor_status_32x32_user-idle.png \
- hicolor_status_32x32_user-offline.png \
- hicolor_status_32x32_empathy-pending.png \
- hicolor_status_48x48_user-available.png \
- hicolor_status_48x48_user-away.png \
- hicolor_status_48x48_user-busy.png \
- hicolor_status_48x48_user-idle.png \
- hicolor_status_48x48_user-offline.png \
- hicolor_status_48x48_empathy-pending.png \
- hicolor_status_scalable_user-available.svg \
- hicolor_status_scalable_user-away.svg \
- hicolor_status_scalable_user-busy.svg \
- hicolor_status_scalable_user-idle.svg \
- hicolor_status_scalable_user-offline.svg \
- hicolor_status_scalable_empathy-pending.svg \
$(NULL)
EXTRA_DIST = \
- $(public_icons) \
$(private_icons) \
- empathy.svg \
local-xmpp.svg \
$(NULL)
@@ -201,31 +144,17 @@ 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; \
for theme in $(private_icons_themes); do \
$(gtk_update_icon_cache) $(pkgdatadir)/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; \
for theme in $(private_icons_themes); do \
echo "*** $(gtk_update_icon_cache) $(pkgdatadir)/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`; \
@@ -236,13 +165,6 @@ install-icons:
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`; \
@@ -259,12 +181,11 @@ uninstall-local:
$(MAKE) uninstall-icons
$(MAKE) update-icon-cache
-# Local copy of the "installed" icon. This is used to be able to run empathy
+# Local copy of the "installed" icon. This is used to be able to run tp-account-widgets
# from source (see bgo #616159)
local_icons_dir = local-copy
# Generate the lists of destination paths
-public_icons_local_install_paths = $(foreach obj, $(public_icons), $(local_icons_dir)/$(subst _,/,$(call reorder,_,1 3 2 4,$(obj))))
private_icons_local_install_paths = $(foreach obj, $(private_icons), $(local_icons_dir)/$(subst _,/,$(call reorder,_,1 3 2 4,$(obj))))
# For each destination path we'll need to compute back the original icon
@@ -277,10 +198,9 @@ $(local_icons_dir)/$$(subst _,/,$$(call reorder,_,1 3 2 4,$1)): $1
endef
# Instantiate the template above for each icon
-$(foreach icon,$(public_icons),$(eval $(call icon_local_install_rule_template,$(icon))))
$(foreach icon,$(private_icons),$(eval $(call icon_local_install_rule_template,$(icon))))
-install-icons-src: $(public_icons_local_install_paths) $(private_icons_local_install_paths)
+install-icons-src: $(private_icons_local_install_paths)
all: install-icons-src
diff --git a/data/icons/empathy.svg b/data/icons/empathy.svg
deleted file mode 100644
index 73ded388..00000000
--- a/data/icons/empathy.svg
+++ /dev/null
@@ -1,1081 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-
-<svg
- xmlns:dc="http://purl.org/dc/elements/1.1/"
- xmlns:cc="http://creativecommons.org/ns#"
- xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
- xmlns:svg="http://www.w3.org/2000/svg"
- xmlns="http://www.w3.org/2000/svg"
- xmlns:xlink="http://www.w3.org/1999/xlink"
- xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
- xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
- inkscape:export-ydpi="90.000000"
- inkscape:export-xdpi="90.000000"
- inkscape:export-filename="/home/jimmac/Desktop/wi-fi.png"
- width="400"
- height="300"
- id="svg11300"
- sodipodi:version="0.32"
- inkscape:version="0.48.1 r9760"
- sodipodi:docname="empathy.svg"
- inkscape:output_extension="org.inkscape.output.svg.inkscape"
- version="1.0"
- style="enable-background:new">
- <title
- id="title14089">Empathy</title>
- <sodipodi:namedview
- stroke="#ef2929"
- fill="#f57900"
- id="base"
- pagecolor="#474747"
- bordercolor="#666666"
- borderopacity="0.25490196"
- inkscape:pageopacity="0"
- inkscape:pageshadow="2"
- inkscape:zoom="1"
- inkscape:cx="231.41611"
- inkscape:cy="127.34881"
- inkscape:current-layer="layer1"
- showgrid="true"
- inkscape:grid-bbox="true"
- inkscape:document-units="px"
- inkscape:showpageshadow="false"
- inkscape:window-width="1236"
- inkscape:window-height="836"
- inkscape:window-x="42"
- inkscape:window-y="56"
- width="400px"
- height="300px"
- inkscape:snap-nodes="true"
- inkscape:snap-bbox="false"
- gridtolerance="10000"
- inkscape:window-maximized="0"
- showguides="true"
- inkscape:guide-bbox="true">
- <inkscape:grid
- empspacing="4"
- visible="true"
- enabled="true"
- type="xygrid"
- id="grid5883"
- spacingx="1px"
- spacingy="1px"
- dotted="false"
- color="#0000ff"
- opacity="0.07058824"
- snapvisiblegridlinesonly="true" />
- </sodipodi:namedview>
- <defs
- id="defs3">
- <linearGradient
- inkscape:collect="always"
- id="linearGradient13812">
- <stop
- style="stop-color:#26589f;stop-opacity:1"
- offset="0"
- id="stop13814" />
- <stop
- id="stop13816"
- offset="0.30993444"
- style="stop-color:#3a75ca;stop-opacity:1;" />
- <stop
- id="stop13818"
- offset="0.77943546"
- style="stop-color:#7da3d5;stop-opacity:1" />
- <stop
- style="stop-color:#729fcf;stop-opacity:1"
- offset="1"
- id="stop13820" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- id="linearGradient13802">
- <stop
- style="stop-color:#26589f;stop-opacity:1"
- offset="0"
- id="stop13804" />
- <stop
- id="stop13806"
- offset="0.33558163"
- style="stop-color:#3a75ca;stop-opacity:1;" />
- <stop
- id="stop13808"
- offset="0.77943546"
- style="stop-color:#7da3d5;stop-opacity:1" />
- <stop
- style="stop-color:#729fcf;stop-opacity:1"
- offset="1"
- id="stop13810" />
- </linearGradient>
- <linearGradient
- id="linearGradient13451"
- inkscape:collect="always">
- <stop
- id="stop13453"
- offset="0"
- style="stop-color:#ffffff;stop-opacity:1;" />
- <stop
- id="stop13455"
- offset="1"
- style="stop-color:#dae5f2;stop-opacity:1" />
- </linearGradient>
- <linearGradient
- id="linearGradient13445"
- inkscape:collect="always">
- <stop
- id="stop13447"
- offset="0"
- style="stop-color:#132b4f;stop-opacity:1" />
- <stop
- id="stop13449"
- offset="1"
- style="stop-color:#729fcf;stop-opacity:1" />
- </linearGradient>
- <linearGradient
- id="linearGradient13427"
- inkscape:collect="always">
- <stop
- id="stop13429"
- offset="0"
- style="stop-color:#26589f;stop-opacity:1" />
- <stop
- style="stop-color:#3a75ca;stop-opacity:1;"
- offset="0.32747033"
- id="stop13741" />
- <stop
- style="stop-color:#7da3d5;stop-opacity:1"
- offset="0.77943546"
- id="stop13431" />
- <stop
- id="stop13433"
- offset="1"
- style="stop-color:#729fcf;stop-opacity:1" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- id="linearGradient21870">
- <stop
- style="stop-color:#204a87;stop-opacity:1"
- offset="0"
- id="stop21872" />
- <stop
- style="stop-color:#729fcf;stop-opacity:1"
- offset="1"
- id="stop21874" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- id="linearGradient4213">
- <stop
- style="stop-color:#ffffff;stop-opacity:1;"
- offset="0"
- id="stop4215" />
- <stop
- style="stop-color:#ffffff;stop-opacity:0;"
- offset="1"
- id="stop4217" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- id="linearGradient9498">
- <stop
- style="stop-color:#ffffff;stop-opacity:1;"
- offset="0"
- id="stop9500" />
- <stop
- style="stop-color:#ffffff;stop-opacity:0;"
- offset="1"
- id="stop9502" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- id="linearGradient9488">
- <stop
- style="stop-color:#ffffff;stop-opacity:1;"
- offset="0"
- id="stop9490" />
- <stop
- style="stop-color:#c7d9eb;stop-opacity:1"
- offset="1"
- id="stop9492" />
- </linearGradient>
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient13451"
- id="radialGradient9494"
- cx="192"
- cy="-20.64286"
- fx="192"
- fy="-20.64286"
- r="72"
- gradientTransform="matrix(2.0425238,0,0,0.5957361,-302.6122,35.216126)"
- gradientUnits="userSpaceOnUse" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient9498"
- id="linearGradient9506"
- x1="216.37468"
- y1="146.0831"
- x2="216.37468"
- y2="135.9375"
- gradientUnits="userSpaceOnUse" />
- <filter
- inkscape:collect="always"
- id="filter9544"
- x="-0.02418579"
- width="1.0483716"
- y="-0.16251157"
- height="1.3250231">
- <feGaussianBlur
- inkscape:collect="always"
- stdDeviation="1.364592"
- id="feGaussianBlur9546" />
- </filter>
- <filter
- inkscape:collect="always"
- id="filter9566">
- <feGaussianBlur
- inkscape:collect="always"
- stdDeviation="1.05375"
- id="feGaussianBlur9568" />
- </filter>
- <clipPath
- clipPathUnits="userSpaceOnUse"
- id="clipPath4195">
- <path
- style="color:#000000;fill:none;stroke:#000000;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="M 136.84375,36 C 127.50937,36 120,43.509373 120,52.84375 l 0,78.3125 C 120,140.49063 127.50937,148 136.84375,148 l 78.65625,0 -15,25 30.28125,-25 16.375,0 C 256.49063,148 264,140.49063 264,131.15625 l 0,-78.3125 C 264,43.509373 256.49063,36 247.15625,36 l -110.3125,0 z"
- id="path4197" />
- </clipPath>
- <filter
- inkscape:collect="always"
- id="filter4199">
- <feGaussianBlur
- inkscape:collect="always"
- stdDeviation="0.7025"
- id="feGaussianBlur4201" />
- </filter>
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient13445"
- id="linearGradient4209"
- x1="176.31876"
- y1="150.58842"
- x2="176.31876"
- y2="34.026363"
- gradientUnits="userSpaceOnUse" />
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient4213"
- id="radialGradient4219"
- cx="191.97949"
- cy="38.547268"
- fx="191.97949"
- fy="38.547268"
- r="56.568539"
- gradientTransform="matrix(0.99681528,0.07974522,-0.03125,0.39062503,1.8160034,8.1802921)"
- gradientUnits="userSpaceOnUse" />
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient4213"
- id="radialGradient4223"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.32333272,0.02586662,-0.01013643,0.12670538,-26.780908,-137.4502)"
- cx="191.97949"
- cy="38.547268"
- fx="191.97949"
- fy="38.547268"
- r="56.568539" />
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient9488"
- id="radialGradient8509"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(2.0425236,0,0,0.5957361,-303.01458,36.099502)"
- cx="192"
- cy="-20.64286"
- fx="192"
- fy="-20.64286"
- r="72" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient9498"
- id="linearGradient8511"
- gradientUnits="userSpaceOnUse"
- x1="216.37468"
- y1="146.0831"
- x2="216.37468"
- y2="135.9375" />
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient4213"
- id="radialGradient8515"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.5388879,0.1258304,-0.01689405,0.616369,-13.262928,-38.624523)"
- cx="191.97949"
- cy="38.547268"
- fx="191.97949"
- fy="38.547268"
- r="56.568539" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient21870"
- id="linearGradient21876"
- x1="105.74763"
- y1="60.77557"
- x2="105.74763"
- y2="11.279737"
- gradientUnits="userSpaceOnUse" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient9498-1"
- id="linearGradient9735-8"
- gradientUnits="userSpaceOnUse"
- x1="216.37468"
- y1="146.0831"
- x2="216.37468"
- y2="135.9375" />
- <linearGradient
- inkscape:collect="always"
- id="linearGradient9498-1">
- <stop
- style="stop-color:#ffffff;stop-opacity:1;"
- offset="0"
- id="stop9500-5" />
- <stop
- style="stop-color:#ffffff;stop-opacity:0;"
- offset="1"
- id="stop9502-3" />
- </linearGradient>
- <filter
- inkscape:collect="always"
- id="filter9544-5"
- x="-0.02418579"
- width="1.0483716"
- y="-0.16251157"
- height="1.3250231">
- <feGaussianBlur
- inkscape:collect="always"
- stdDeviation="1.364592"
- id="feGaussianBlur9546-4" />
- </filter>
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient4213-6"
- id="radialGradient9737-3"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.5388879,0.2560931,-0.01689405,1.2544499,-13.262928,-85.340952)"
- cx="191.97949"
- cy="38.547268"
- fx="191.97949"
- fy="38.547268"
- r="56.568539" />
- <linearGradient
- inkscape:collect="always"
- id="linearGradient4213-6">
- <stop
- style="stop-color:#ffffff;stop-opacity:1;"
- offset="0"
- id="stop4215-5" />
- <stop
- style="stop-color:#ffffff;stop-opacity:0;"
- offset="1"
- id="stop4217-9" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient9498"
- id="linearGradient1821"
- gradientUnits="userSpaceOnUse"
- x1="216.37468"
- y1="146.0831"
- x2="216.37468"
- y2="135.9375" />
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient4213"
- id="radialGradient1823"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.5388879,0.1258303,-0.01689405,0.616369,-13.262928,-38.624523)"
- cx="191.97949"
- cy="38.547268"
- fx="191.97949"
- fy="38.547268"
- r="56.568539" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient9498-9"
- id="linearGradient8511-0"
- gradientUnits="userSpaceOnUse"
- x1="216.37468"
- y1="146.0831"
- x2="216.37468"
- y2="135.9375" />
- <linearGradient
- inkscape:collect="always"
- id="linearGradient9498-9">
- <stop
- style="stop-color:#ffffff;stop-opacity:1;"
- offset="0"
- id="stop9500-2" />
- <stop
- style="stop-color:#ffffff;stop-opacity:0;"
- offset="1"
- id="stop9502-7" />
- </linearGradient>
- <filter
- color-interpolation-filters="sRGB"
- inkscape:collect="always"
- id="filter9544-4"
- x="-0.02418579"
- width="1.0483716"
- y="-0.16251157"
- height="1.3250231">
- <feGaussianBlur
- inkscape:collect="always"
- stdDeviation="1.364592"
- id="feGaussianBlur9546-5" />
- </filter>
- <linearGradient
- inkscape:collect="always"
- id="linearGradient4213-9">
- <stop
- style="stop-color:#ffffff;stop-opacity:1;"
- offset="0"
- id="stop4215-2" />
- <stop
- style="stop-color:#ffffff;stop-opacity:0;"
- offset="1"
- id="stop4217-1" />
- </linearGradient>
- <radialGradient
- r="56.568539"
- fy="38.547268"
- fx="191.97949"
- cy="38.547268"
- cx="191.97949"
- gradientTransform="matrix(0.5388879,0.1258304,-0.01689405,0.616369,-13.262928,-38.624523)"
- gradientUnits="userSpaceOnUse"
- id="radialGradient11483"
- xlink:href="#linearGradient4213-9"
- inkscape:collect="always" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient13427"
- id="linearGradient13425"
- gradientUnits="userSpaceOnUse"
- x1="207.60001"
- y1="306.39999"
- x2="207.60001"
- y2="320"
- gradientTransform="translate(145.1909,658.17812)" />
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient9488-5"
- id="radialGradient8509-6"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(2.0425236,0,0,0.5957361,-303.01458,36.099502)"
- cx="192"
- cy="-20.64286"
- fx="192"
- fy="-20.64286"
- r="72" />
- <linearGradient
- inkscape:collect="always"
- id="linearGradient9488-5">
- <stop
- style="stop-color:#ffffff;stop-opacity:1;"
- offset="0"
- id="stop9490-4" />
- <stop
- style="stop-color:#c7d9eb;stop-opacity:1"
- offset="1"
- id="stop9492-22" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient21870-79"
- id="linearGradient21876-84"
- x1="105.74763"
- y1="60.77557"
- x2="105.74763"
- y2="11.279737"
- gradientUnits="userSpaceOnUse" />
- <linearGradient
- inkscape:collect="always"
- id="linearGradient21870-79">
- <stop
- style="stop-color:#204a87;stop-opacity:1"
- offset="0"
- id="stop21872-3" />
- <stop
- style="stop-color:#729fcf;stop-opacity:1"
- offset="1"
- id="stop21874-8" />
- </linearGradient>
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient9488-68"
- id="radialGradient8509-3"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(2.0425236,0,0,0.5957361,-303.01458,36.099502)"
- cx="192"
- cy="-20.64286"
- fx="192"
- fy="-20.64286"
- r="72" />
- <linearGradient
- inkscape:collect="always"
- id="linearGradient9488-68">
- <stop
- style="stop-color:#ffffff;stop-opacity:1;"
- offset="0"
- id="stop9490-12" />
- <stop
- style="stop-color:#c7d9eb;stop-opacity:1"
- offset="1"
- id="stop9492-8" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient21870-54"
- id="linearGradient21876-1"
- x1="105.74763"
- y1="60.77557"
- x2="105.74763"
- y2="11.279737"
- gradientUnits="userSpaceOnUse" />
- <linearGradient
- inkscape:collect="always"
- id="linearGradient21870-54">
- <stop
- style="stop-color:#204a87;stop-opacity:1"
- offset="0"
- id="stop21872-77" />
- <stop
- style="stop-color:#729fcf;stop-opacity:1"
- offset="1"
- id="stop21874-1" />
- </linearGradient>
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient9488-2"
- id="radialGradient8509-9"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(2.0425236,0,0,0.5957361,-303.01458,36.099502)"
- cx="192"
- cy="-20.64286"
- fx="192"
- fy="-20.64286"
- r="72" />
- <linearGradient
- inkscape:collect="always"
- id="linearGradient9488-2">
- <stop
- style="stop-color:#ffffff;stop-opacity:1;"
- offset="0"
- id="stop9490-80" />
- <stop
- style="stop-color:#c7d9eb;stop-opacity:1"
- offset="1"
- id="stop9492-2" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient21870-28"
- id="linearGradient21876-2"
- x1="105.74763"
- y1="60.77557"
- x2="105.74763"
- y2="11.279737"
- gradientUnits="userSpaceOnUse" />
- <linearGradient
- inkscape:collect="always"
- id="linearGradient21870-28">
- <stop
- style="stop-color:#204a87;stop-opacity:1"
- offset="0"
- id="stop21872-81" />
- <stop
- style="stop-color:#729fcf;stop-opacity:1"
- offset="1"
- id="stop21874-4" />
- </linearGradient>
- <linearGradient
- id="linearGradient13427-5"
- inkscape:collect="always">
- <stop
- id="stop13429-9"
- offset="0"
- style="stop-color:#204a87;stop-opacity:1" />
- <stop
- style="stop-color:#3465a4;stop-opacity:1"
- offset="0.34901962"
- id="stop13431-64" />
- <stop
- id="stop13433-3"
- offset="1"
- style="stop-color:#729fcf;stop-opacity:1" />
- </linearGradient>
- <linearGradient
- id="linearGradient13427-9"
- inkscape:collect="always">
- <stop
- id="stop13429-2"
- offset="0"
- style="stop-color:#204a87;stop-opacity:1" />
- <stop
- style="stop-color:#3465a4;stop-opacity:1"
- offset="0.34901962"
- id="stop13431-5" />
- <stop
- id="stop13433-12"
- offset="1"
- style="stop-color:#729fcf;stop-opacity:1" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient13812"
- id="linearGradient13425-2"
- gradientUnits="userSpaceOnUse"
- x1="207.60001"
- y1="305.16257"
- x2="207.60001"
- y2="320"
- gradientTransform="translate(145.1909,658.17812)" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient13802"
- id="linearGradient13425-3"
- gradientUnits="userSpaceOnUse"
- x1="207.60001"
- y1="307.28387"
- x2="207.60001"
- y2="320"
- gradientTransform="translate(145.1909,658.17812)" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient13427-9"
- id="linearGradient4077"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.75,0,0,0.75,157.25,-57.75093)"
- x1="206.93333"
- y1="358.39999"
- x2="206.93333"
- y2="366.66666" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient13427-5"
- id="linearGradient4081"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.75,0,0,0.75,157.25108,-58.74989)"
- x1="207.60001"
- y1="306.39999"
- x2="207.60001"
- y2="320" />
- </defs>
- <metadata
- id="metadata4">
- <rdf:RDF>
- <cc:Work
- rdf:about="">
- <dc:format>image/svg+xml</dc:format>
- <dc:type
- rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
- <dc:creator>
- <cc:Agent>
- <dc:title>Jakub Steiner</dc:title>
- </cc:Agent>
- </dc:creator>
- <dc:source>http://jimmac.musichall.cz</dc:source>
- <cc:license
- rdf:resource="LGPL" />
- <dc:title>Empathy</dc:title>
- <dc:subject>
- <rdf:Bag>
- <rdf:li>empathy</rdf:li>
- <rdf:li>im</rdf:li>
- <rdf:li>instant</rdf:li>
- <rdf:li>messaging</rdf:li>
- </rdf:Bag>
- </dc:subject>
- <dc:date />
- <dc:rights>
- <cc:Agent>
- <dc:title />
- </cc:Agent>
- </dc:rights>
- <dc:publisher>
- <cc:Agent>
- <dc:title />
- </cc:Agent>
- </dc:publisher>
- <dc:identifier />
- <dc:relation />
- <dc:language />
- <dc:coverage />
- <dc:description />
- <dc:contributor>
- <cc:Agent>
- <dc:title>Hylke Bons, Lapo Calamandrei</dc:title>
- </cc:Agent>
- </dc:contributor>
- </cc:Work>
- <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="layer3"
- inkscape:label="baseplate"
- style="display:none">
- <rect
- style="fill:#d3d7cf;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- id="rect6282"
- width="256"
- height="256"
- x="20"
- y="20"
- inkscape:label="256x256" />
- <rect
- inkscape:label="48x48"
- y="39.99633"
- x="296.0625"
- height="48"
- width="48"
- id="rect6284"
- style="fill:#d3d7cf;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
- <rect
- style="fill:#d3d7cf;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- id="rect6592"
- width="32"
- height="32"
- x="303"
- y="115.99633"
- inkscape:label="32x32" />
- <rect
- inkscape:label="22x22"
- y="167.05884"
- x="303"
- height="22"
- width="22"
- id="rect6749"
- style="fill:#d3d7cf;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
- <rect
- style="fill:#d3d7cf;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- id="rect6833"
- width="16"
- height="16"
- x="303"
- y="209"
- inkscape:label="16x16" />
- <rect
- style="fill:#d3d7cf;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- id="rect5028"
- width="24"
- height="24"
- x="302"
- y="166"
- inkscape:label="24x24" />
- <text
- xml:space="preserve"
- style="font-size:20px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;display:inline;enable-background:new;font-family:Trebuchet MS;-inkscape-font-specification:Trebuchet MS"
- x="21"
- y="-18.999996"
- id="context"
- sodipodi:linespacing="125%"
- inkscape:label="context"><tspan
- sodipodi:role="line"
- id="tspan16843"
- x="21"
- y="-18.999996">apps</tspan></text>
- <text
- xml:space="preserve"
- style="font-size:20px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;display:inline;enable-background:new;font-family:Trebuchet MS;-inkscape-font-specification:Trebuchet MS"
- x="159"
- y="-18.999996"
- id="icon-name"
- sodipodi:linespacing="125%"
- inkscape:label="icon-name"><tspan
- sodipodi:role="line"
- id="tspan16847"
- x="159"
- y="-18.999996">empathy</tspan></text>
- </g>
- <g
- id="layer1"
- inkscape:label="artwork"
- inkscape:groupmode="layer"
- style="display:inline">
- <g
- inkscape:label="Layer 1"
- id="layer1-6"
- transform="matrix(2.8133316,0,0,2.8133316,-105.94049,29.728133)">
- <g
- id="g6143">
- <path
- style="opacity:0.5;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.54060954;marker:none;visibility:visible;display:inline;overflow:visible;filter:url(#filter9566);enable-background:accumulate"
- d="M 136.84375,36 C 127.50937,36 120,43.509373 120,52.84375 l 0,78.3125 C 120,140.49063 127.50937,148 136.84375,148 l 78.65625,0 -15,25 30.28125,-25 16.375,0 C 256.49063,148 264,140.49063 264,131.15625 l 0,-78.3125 C 264,43.509373 256.49063,36 247.15625,36 l -110.3125,0 0,0 z"
- transform="matrix(0.5406096,0,0,0.5406096,-14.244677,-13.03211)"
- id="path9548"
- inkscape:connector-curvature="0" />
- <path
- id="rect8711"
- d="m 59.734368,5.6189216 c -5.046255,0 -9.105893,4.0596391 -9.105893,9.1058934 l 0,42.336489 c 0,5.046255 4.059638,9.105893 9.105893,9.105893 l 42.522322,0 -8.109142,13.51524 16.370332,-13.51524 8.85248,0 c 5.04626,0 9.1059,-4.059638 9.1059,-9.105893 l 0,-42.336489 c 0,-5.0462543 -4.05964,-9.1058934 -9.1059,-9.1058934 l -59.635992,0 z"
- style="fill:url(#radialGradient9494);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.54060954;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- inkscape:connector-curvature="0" />
- <path
- sodipodi:nodetypes="cccccccc"
- transform="matrix(0.5406096,0,0,0.5406096,-14.244677,-13.843024)"
- id="path9496"
- d="m 127.63277,144.43651 92.27744,0 -3.88909,11.66726 16.26346,-12.02082 16.97056,0 c 6.36396,0.35355 10.6066,-8.13172 10.6066,-8.13172 l -135.41095,0 3.18198,8.48528 0,0 z"
- style="fill:url(#linearGradient9506);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;filter:url(#filter9544);enable-background:accumulate"
- inkscape:connector-curvature="0" />
- <path
- clip-path="url(#clipPath4195)"
- style="fill:none;stroke:url(#linearGradient4209);stroke-width:1.31499863;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker:none;visibility:visible;display:inline;overflow:visible;filter:url(#filter4199);enable-background:accumulate"
- d="M 136.84375,36 C 127.50937,36 120,43.509373 120,52.84375 l 0,78.3125 C 120,140.49063 127.50937,148 136.84375,148 l 78.65625,0 -15,25 30.28125,-25 16.375,0 C 256.49063,148 264,140.49063 264,131.15625 l 0,-78.3125 C 264,43.509373 256.49063,36 247.15625,36 l -110.3125,0 z"
- id="path3421"
- transform="matrix(0.5406096,0,0,0.5406096,-14.244677,-13.843024)"
- inkscape:connector-curvature="0" />
- <rect
- transform="matrix(0.5406096,0,0,0.5406096,-14.244677,-13.843024)"
- y="37.663383"
- x="135.41095"
- height="1.767767"
- width="113.13708"
- id="rect4211"
- style="fill:url(#radialGradient4219);fill-opacity:1;stroke:none" />
- <rect
- transform="matrix(0,1,-1,0,0,0)"
- style="fill:url(#radialGradient4223);fill-opacity:1;stroke:none"
- id="rect4221"
- width="36.697792"
- height="0.57340306"
- x="16.552715"
- y="-127.88689" />
- </g>
- <g
- style="display:inline"
- inkscape:label="face-smile"
- transform="matrix(1.8216837,0,0,1.8216837,-554.24918,-1733.893)"
- id="g35539-4">
- <g
- id="g35541-5"
- inkscape:label="emblem-important">
- <path
- sodipodi:type="inkscape:offset"
- inkscape:radius="0"
- inkscape:original="M 354.1875 964.1875 C 350.32151 964.1875 347.1875 967.32151 347.1875 971.1875 C 347.1875 975.05349 350.32151 978.1875 354.1875 978.1875 C 358.05349 978.1875 361.1875 975.05349 361.1875 971.1875 C 361.1875 967.32151 358.05349 964.1875 354.1875 964.1875 z M 351.1875 968.15625 L 352.1875 968.15625 L 352.1875 970.25 L 351.1875 970.25 L 351.1875 968.15625 z M 356.15625 968.15625 L 357.1875 968.15625 L 357.1875 970.25 L 356.15625 970.25 L 356.15625 968.15625 z M 358.75 971.5 C 358.28208 973.07338 356.48969 974.25 354.34375 974.25 C 352.26057 974.25 350.52891 973.12893 350 971.625 C 351.03363 972.56493 352.54442 973.1875 354.28125 973.1875 C 356.09966 973.1875 357.71971 972.51714 358.75 971.5 z "
- xlink:href="#path35543-5"
- style="fill:#ffffff;fill-opacity:1;stroke:none"
- id="path13423"
- inkscape:href="#path35543-5"
- d="m 354.1875,964.1875 c -3.86599,0 -7,3.13401 -7,7 0,3.86599 3.13401,7 7,7 3.86599,0 7,-3.13401 7,-7 0,-3.86599 -3.13401,-7 -7,-7 z m -3,3.96875 1,0 0,2.09375 -1,0 0,-2.09375 z m 4.96875,0 1.03125,0 0,2.09375 -1.03125,0 0,-2.09375 z M 358.75,971.5 c -0.46792,1.57338 -2.26031,2.75 -4.40625,2.75 -2.08318,0 -3.81484,-1.12107 -4.34375,-2.625 1.03363,0.93993 2.54442,1.5625 4.28125,1.5625 1.81841,0 3.43846,-0.67036 4.46875,-1.6875 z"
- transform="translate(0,0.26666666)" />
- <path
- style="fill:url(#linearGradient13425);fill-opacity:1;stroke:none"
- d="m 354.1909,964.17812 c -3.86599,0 -7,3.13401 -7,7 0,3.86599 3.13401,7 7,7 3.86599,0 7,-3.13401 7,-7 0,-3.86599 -3.13401,-7 -7,-7 z m -3,3.96875 1,0 0,2.09375 -1,0 z m 4.96875,0 1.03125,0 0,2.09375 -1.03125,0 z m 2.59375,3.34375 c -0.46792,1.57338 -2.26031,2.75 -4.40625,2.75 -2.08318,0 -3.81484,-1.12107 -4.34375,-2.625 1.03363,0.93993 2.54442,1.5625 4.28125,1.5625 1.81841,0 3.43846,-0.67036 4.46875,-1.6875 z"
- id="path35543-5"
- inkscape:connector-curvature="0"
- sodipodi:nodetypes="ssssscccccccccccscsc" />
- <rect
- y="963.1781"
- x="346.1907"
- height="16"
- width="16"
- id="rect35549-8"
- style="color:#bebebe;fill:none;stroke:none;stroke-width:2;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
- </g>
- </g>
- </g>
- <g
- id="g7233"
- transform="matrix(0.4882702,0,0,0.4882702,277.01635,43.630097)">
- <path
- inkscape:connector-curvature="0"
- sodipodi:nodetypes="ccccccccccccc"
- id="path7237"
- d="m 59.33196,5.9902884 c -5.046255,0 -9.105893,4.0596386 -9.105893,9.1058916 l 0,41.146366 c 0,5.046256 4.059638,9.105893 9.105893,9.105893 l 37.726681,0 -3.313504,13.515239 16.370333,-13.515239 8.85248,0 c 5.04626,0 9.10589,-4.059637 9.10589,-9.105893 l 0,-41.146366 c 0,-5.046253 -4.05963,-9.1058916 -9.10589,-9.1058916 l -59.63599,0 z"
- style="fill:url(#radialGradient8509);fill-opacity:1;fill-rule:nonzero;stroke:url(#linearGradient21876);stroke-width:2.04804635;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
- <path
- inkscape:connector-curvature="0"
- sodipodi:nodetypes="ccccccccc"
- transform="matrix(0.5406096,0,0,0.5406096,-14.142544,-16.13061)"
- id="path7239"
- d="m 127.63277,144.43651 92.27744,0 -14.30719,23.03247 26.68156,-23.38603 16.97056,0 c 6.36396,0.35355 10.6066,-8.13172 10.6066,-8.13172 l -135.41095,0 3.18198,8.48528 z"
- style="fill:url(#linearGradient8511);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;filter:url(#filter9544);enable-background:accumulate" />
- <rect
- y="7.8969836"
- x="58.959778"
- height="2.7893674"
- width="61.162987"
- id="rect7243"
- style="fill:url(#radialGradient8515);fill-opacity:1;stroke:none" />
- </g>
- <g
- transform="matrix(0.2443976,0,0,0.2443976,292.37099,166.91085)"
- id="g9115">
- <path
- inkscape:connector-curvature="0"
- style="color:#000000;fill:url(#radialGradient8509-3);fill-opacity:1;fill-rule:nonzero;stroke:url(#linearGradient21876-1);stroke-width:4.0916934;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 59.33196,6.5023 c -5.046255,0 -9.105893,4.059639 -9.105893,9.105892 l 0,43.213734 c 0,5.046256 4.059638,9.105893 9.105893,9.105893 l 39.94294,0 -0.371004,13.515239 16.370334,-13.515239 2.99025,0 c 5.04626,0 9.10589,-4.059637 9.10589,-9.105893 l 0,-43.213734 c 0,-5.046253 -4.05963,-9.105892 -9.10589,-9.105892 l -58.93252,0 0,0 z"
- id="path9117"
- sodipodi:nodetypes="cccccccccccc" />
- <path
- inkscape:connector-curvature="0"
- style="fill:url(#linearGradient1821);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;filter:url(#filter9544);enable-background:accumulate"
- d="m 127.63277,144.43651 92.27744,0 -3.88909,11.66726 16.26346,-12.02082 16.97056,0 c 6.36396,0.35355 10.6066,-8.13172 10.6066,-8.13172 l -135.41095,0 3.18198,8.48528 0,0 z"
- id="path9119"
- transform="matrix(0.5406096,0,0,0.816211,-14.142544,-53.464387)"
- sodipodi:nodetypes="cccccccc" />
- <rect
- style="fill:url(#radialGradient1823);fill-opacity:1;stroke:none"
- id="rect9121"
- width="61.162987"
- height="2.7893674"
- x="58.959778"
- y="7.8969836" />
- </g>
- <g
- id="g9499-1"
- transform="matrix(0.1761496,0,0,0.1761496,295.65162,208.35358)">
- <path
- inkscape:connector-curvature="0"
- sodipodi:nodetypes="cccccccccccccc"
- id="path9501-4"
- d="m 59.33196,6.5023 c -5.046255,0 -9.105893,4.059639 -9.105893,9.105892 l 0,44.515095 c 0,5.046256 4.059638,9.105893 9.105893,9.105893 l 36.93226,0 5.30599,19.192232 10.69334,-19.192232 2.99025,0 c 5.04626,0 9.10589,-4.059637 9.10589,-9.105893 l 0,-44.515095 c 0,-5.046253 -4.05963,-9.105892 -9.10589,-9.105892 l -55.92184,0 0,0 z"
- style="color:#000000;fill:url(#radialGradient8509-9);fill-opacity:1;fill-rule:nonzero;stroke:url(#linearGradient21876-2);stroke-width:5.67699289;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
- <path
- inkscape:connector-curvature="0"
- sodipodi:nodetypes="cccccccccc"
- transform="matrix(0.5406096,0,0,0.816211,-14.142544,-53.464387)"
- id="path9503-8"
- d="m 127.63277,144.43651 88.56474,0 1.97113,14.93396 10.40324,-15.28752 16.97056,0 c 6.36396,0.35355 10.6066,-8.13172 10.6066,-8.13172 l -131.69825,0 3.18198,8.48528 0,0 z"
- style="fill:url(#linearGradient9735-8);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;filter:url(#filter9544-5);enable-background:accumulate" />
- <rect
- y="9.3407955"
- x="58.959778"
- height="5.676991"
- width="61.162987"
- id="rect9505-8"
- style="fill:url(#radialGradient9737-3);fill-opacity:1;stroke:none" />
- </g>
- <g
- style="display:inline;enable-background:new"
- id="g7233-6"
- transform="matrix(0.3585042,0,0,0.3585042,287.58499,117.1689)">
- <path
- inkscape:connector-curvature="0"
- sodipodi:nodetypes="cccccccccccc"
- id="path7237-0"
- d="m 59.33196,6.5023 c -5.046255,0 -9.105893,4.059639 -9.105893,9.105892 l 0,40.634354 c 0,5.046256 4.059638,9.105893 9.105893,9.105893 l 37.726681,0 -3.313504,13.515239 16.370333,-13.515239 8.85248,0 c 5.04626,0 9.10589,-4.059637 9.10589,-9.105893 l 0,-40.634354 c 0,-5.046253 -4.05963,-9.105892 -9.10589,-9.105892 l -59.63599,0 0,0 z"
- style="color:#000000;fill:url(#radialGradient8509-6);fill-opacity:1;fill-rule:nonzero;stroke:url(#linearGradient21876-84);stroke-width:2.78936768;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
- <path
- inkscape:connector-curvature="0"
- sodipodi:nodetypes="cccccccc"
- transform="matrix(0.5406096,0,0,0.5406096,-14.142544,-16.898627)"
- id="path7239-8"
- d="m 127.63277,144.43651 92.27744,0 -3.88909,11.66726 16.26346,-12.02082 16.97056,0 c 6.36396,0.35355 10.6066,-8.13172 10.6066,-8.13172 l -135.41095,0 3.18198,8.48528 0,0 z"
- style="fill:url(#linearGradient8511-0);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;filter:url(#filter9544-4);enable-background:accumulate" />
- <rect
- y="7.8969836"
- x="58.959778"
- height="2.7893674"
- width="61.162987"
- id="rect7243-1"
- style="fill:url(#radialGradient11483);fill-opacity:1;stroke:none" />
- </g>
- <g
- id="g13371"
- transform="translate(-33.18977,-909.178)"
- inkscape:label="face-smile"
- style="display:inline;enable-background:new">
- <g
- inkscape:label="emblem-important"
- id="g13373">
- <path
- sodipodi:type="inkscape:offset"
- inkscape:radius="0"
- inkscape:original="M 354.1875 963.1875 C 350.32151 963.1875 347.1875 966.32151 347.1875 970.1875 C 347.1875 974.05349 350.32151 977.1875 354.1875 977.1875 C 358.05349 977.1875 361.1875 974.05349 361.1875 970.1875 C 361.1875 966.32151 358.05349 963.1875 354.1875 963.1875 z M 351.1875 967.15625 L 352.1875 967.15625 L 352.1875 969.25 L 351.1875 969.25 L 351.1875 967.15625 z M 356.15625 967.15625 L 357.1875 967.15625 L 357.1875 969.25 L 356.15625 969.25 L 356.15625 967.15625 z M 358.75 970.5 C 358.28208 972.07338 357.20093 974.23131 354.40625 974.25 C 351.61158 974.2687 350.52891 972.12893 350 970.625 C 351.03363 971.56493 352.54442 972.1875 354.28125 972.1875 C 356.09966 972.1875 357.71971 971.51714 358.75 970.5 z "
- xlink:href="#path13375"
- style="color:#000000;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- id="path13624"
- inkscape:href="#path13375"
- d="m 354.1875,963.1875 c -3.86599,0 -7,3.13401 -7,7 0,3.86599 3.13401,7 7,7 3.86599,0 7,-3.13401 7,-7 0,-3.86599 -3.13401,-7 -7,-7 z m -3,3.96875 1,0 0,2.09375 -1,0 0,-2.09375 z m 4.96875,0 1.03125,0 0,2.09375 -1.03125,0 0,-2.09375 z M 358.75,970.5 c -0.46792,1.57338 -1.54907,3.73131 -4.34375,3.75 -2.79467,0.0187 -3.87734,-2.12107 -4.40625,-3.625 1.03363,0.93993 2.54442,1.5625 4.28125,1.5625 1.81841,0 3.43846,-0.67036 4.46875,-1.6875 z"
- transform="translate(0,1)" />
- <path
- sodipodi:nodetypes="sssssccccccccccczcsc"
- inkscape:connector-curvature="0"
- id="path13375"
- d="m 354.1909,963.17812 c -3.86599,0 -7,3.13401 -7,7 0,3.86599 3.13401,7 7,7 3.86599,0 7,-3.13401 7,-7 0,-3.86599 -3.13401,-7 -7,-7 z m -3,3.96875 1,0 0,2.09375 -1,0 z m 4.96875,0 1.03125,0 0,2.09375 -1.03125,0 z m 2.59375,3.34375 c -0.46792,1.57338 -1.56738,3.74778 -4.36206,3.76647 -2.79467,0.0187 -3.85903,-2.13754 -4.38794,-3.64147 1.03363,0.93993 2.54442,1.5625 4.28125,1.5625 1.81841,0 3.43846,-0.67036 4.46875,-1.6875 z"
- style="color:#000000;fill:url(#linearGradient13425-2);fill-opacity:1;fill-rule:nonzero;stroke:none;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
- <rect
- style="color:#bebebe;fill:none;stroke:none;stroke-width:2;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- id="rect13377"
- width="16"
- height="16"
- x="346.1907"
- y="963.1781" />
- </g>
- </g>
- <g
- style="display:inline;enable-background:new"
- inkscape:label="face-smile"
- transform="translate(-34.18977,-841.178)"
- id="g13435">
- <g
- id="g13437"
- inkscape:label="emblem-important">
- <path
- sodipodi:type="inkscape:offset"
- inkscape:radius="0"
- inkscape:original="M 354.1875 965.1875 C 350.87442 965.1875 348.1875 967.87442 348.1875 971.1875 C 348.1875 974.50058 350.87442 977.1875 354.1875 977.1875 C 357.50058 977.1875 360.1875 974.50058 360.1875 971.1875 C 360.1875 967.87442 357.50058 965.1875 354.1875 965.1875 z M 352.1875 968.28125 L 353.15625 968.28125 L 353.15625 970.0625 L 352.1875 970.0625 L 352.1875 968.28125 z M 355.3125 968.34375 L 356.1875 968.34375 L 356.1875 970.125 L 355.3125 970.125 L 355.3125 968.34375 z M 358.09375 971.8125 C 357.69275 973.16085 356.76999 975.04648 354.375 975.0625 C 351.98002 975.0785 351.04702 973.22634 350.59375 971.9375 C 351.47955 972.743 352.79282 973.28125 354.28125 973.28125 C 355.8396 973.28125 357.21081 972.68417 358.09375 971.8125 z "
- xlink:href="#path13439"
- style="color:#000000;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- id="path13628"
- inkscape:href="#path13439"
- d="m 354.1875,965.1875 c -3.31308,0 -6,2.68692 -6,6 0,3.31308 2.68692,6 6,6 3.31308,0 6,-2.68692 6,-6 0,-3.31308 -2.68692,-6 -6,-6 z m -2,3.09375 0.96875,0 0,1.78125 -0.96875,0 0,-1.78125 z m 3.125,0.0625 0.875,0 0,1.78125 -0.875,0 0,-1.78125 z m 2.78125,3.46875 c -0.401,1.34835 -1.32376,3.23398 -3.71875,3.25 -2.39498,0.016 -3.32798,-1.83616 -3.78125,-3.125 0.8858,0.8055 2.19907,1.34375 3.6875,1.34375 1.55835,0 2.92956,-0.59708 3.8125,-1.46875 z"
- transform="translate(0,1)" />
- <path
- style="color:#000000;fill:url(#linearGradient13425-3);fill-opacity:1;fill-rule:nonzero;stroke:none;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 354.1909,965.17925 c -3.31308,0 -5.99887,2.68579 -5.99887,5.99887 0,3.31308 2.68579,5.99887 5.99887,5.99887 3.31308,0 5.99887,-2.68579 5.99887,-5.99887 0,-3.31308 -2.68579,-5.99887 -5.99887,-5.99887 z m -2.00844,3.08865 0.98198,0 0,1.7943 -0.98198,0 z m 3.13312,0.0625 0.88376,0 0,1.7943 -0.88376,0 z m 2.7853,3.49053 c -0.401,1.34835 -1.34322,3.21177 -3.73821,3.22779 -2.39498,0.016 -3.30711,-1.83183 -3.76038,-3.12067 0.8858,0.8055 2.18052,1.33903 3.66895,1.33903 1.55835,0 2.9467,-0.57448 3.82964,-1.44615 z"
- id="path13439"
- inkscape:connector-curvature="0"
- sodipodi:nodetypes="sssssccccccccccczcsc" />
- <rect
- y="963.1781"
- x="346.1907"
- height="16"
- width="16"
- id="rect13441"
- style="color:#bebebe;fill:none;stroke:none;stroke-width:2;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
- </g>
- </g>
- <path
- sodipodi:nodetypes="sssssccccccccccczcsc"
- inkscape:connector-curvature="0"
- id="path13562"
- d="m 314.00108,172.00119 c -2.20854,0 -3.99892,1.79038 -3.99892,3.99892 0,2.20854 1.79038,3.99892 3.99892,3.99892 2.20854,0 3.99892,-1.79038 3.99892,-3.99892 0,-2.20854 -1.79038,-3.99892 -3.99892,-3.99892 z M 312,174 l 1,0 0,1 -1,0 z m 3,0 1,0 0,1 -1,0 z m 1.60752,2.42865 c -0.26731,0.89883 -0.8954,2.141 -2.49194,2.15169 -1.59651,0.0106 -2.20455,-1.22112 -2.50671,-2.08028 0.59049,0.53696 1.45356,0.89261 2.44577,0.89261 1.03881,0 1.9643,-0.38295 2.55288,-0.96402 z"
- style="color:#000000;fill:url(#linearGradient4081);fill-opacity:1;fill-rule:nonzero;stroke:none;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
- <rect
- style="color:#bebebe;fill:none;stroke:none;stroke-width:2;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- id="rect13564"
- width="12"
- height="12"
- x="308.00095"
- y="170.00009" />
- <path
- style="color:#000000;fill:url(#linearGradient4077);fill-opacity:1;fill-rule:nonzero;stroke:none;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 311,211 c -2.20854,0 -3.99892,1.79041 -3.99892,3.99893 0,2.20852 1.79038,3.99893 3.99892,3.99893 2.20854,0 3.99892,-1.7904 3.99892,-3.99893 C 314.99892,212.79041 313.20854,211 311,211 z m -2.00108,1.99883 1,0 0,0.99998 -1,0 z m 3,0 1,0 0,0.99998 -1,0 z m 1.60752,2.42865 c -0.26731,0.8988 -0.8954,2.14103 -2.49194,2.15168 -1.59651,0.0105 -2.20455,-1.22108 -2.50671,-2.08028 0.59049,0.537 1.45356,0.89265 2.44577,0.89265 1.03881,0 1.9643,-0.38295 2.55288,-0.96405 z"
- id="path13568"
- inkscape:connector-curvature="0"
- sodipodi:nodetypes="sssssccccccccccczcsc" />
- </g>
-</svg>
diff --git a/data/icons/hicolor_actions_16x16_im-message-new.png b/data/icons/hicolor_actions_16x16_im-message-new.png
deleted file mode 100644
index da01aff7..00000000
--- a/data/icons/hicolor_actions_16x16_im-message-new.png
+++ /dev/null
Binary files differ
diff --git a/data/icons/hicolor_actions_22x22_im-message-new.png b/data/icons/hicolor_actions_22x22_im-message-new.png
deleted file mode 100644
index f75737ff..00000000
--- a/data/icons/hicolor_actions_22x22_im-message-new.png
+++ /dev/null
Binary files differ
diff --git a/data/icons/hicolor_actions_24x24_im-message-new.png b/data/icons/hicolor_actions_24x24_im-message-new.png
deleted file mode 100644
index 70f7a662..00000000
--- a/data/icons/hicolor_actions_24x24_im-message-new.png
+++ /dev/null
Binary files differ
diff --git a/data/icons/hicolor_apps_16x16_empathy.png b/data/icons/hicolor_apps_16x16_empathy.png
deleted file mode 100644
index bc187aab..00000000
--- a/data/icons/hicolor_apps_16x16_empathy.png
+++ /dev/null
Binary files differ
diff --git a/data/icons/hicolor_apps_22x22_empathy.png b/data/icons/hicolor_apps_22x22_empathy.png
deleted file mode 100644
index 2105e9c1..00000000
--- a/data/icons/hicolor_apps_22x22_empathy.png
+++ /dev/null
Binary files differ
diff --git a/data/icons/hicolor_apps_24x24_empathy.png b/data/icons/hicolor_apps_24x24_empathy.png
deleted file mode 100644
index 125d69fb..00000000
--- a/data/icons/hicolor_apps_24x24_empathy.png
+++ /dev/null
Binary files differ
diff --git a/data/icons/hicolor_apps_256x256_empathy.png b/data/icons/hicolor_apps_256x256_empathy.png
deleted file mode 100644
index 03d70222..00000000
--- a/data/icons/hicolor_apps_256x256_empathy.png
+++ /dev/null
Binary files differ
diff --git a/data/icons/hicolor_apps_32x32_empathy.png b/data/icons/hicolor_apps_32x32_empathy.png
deleted file mode 100644
index 9aa5822c..00000000
--- a/data/icons/hicolor_apps_32x32_empathy.png
+++ /dev/null
Binary files differ
diff --git a/data/icons/hicolor_apps_48x48_empathy.png b/data/icons/hicolor_apps_48x48_empathy.png
deleted file mode 100644
index c724831d..00000000
--- a/data/icons/hicolor_apps_48x48_empathy.png
+++ /dev/null
Binary files differ
diff --git a/data/icons/hicolor_status_16x16_empathy-pending.png b/data/icons/hicolor_status_16x16_empathy-pending.png
deleted file mode 100644
index 0aa2c5f4..00000000
--- a/data/icons/hicolor_status_16x16_empathy-pending.png
+++ /dev/null
Binary files differ
diff --git a/data/icons/hicolor_status_16x16_im-message.png b/data/icons/hicolor_status_16x16_im-message.png
deleted file mode 100644
index be0e2e15..00000000
--- a/data/icons/hicolor_status_16x16_im-message.png
+++ /dev/null
Binary files differ
diff --git a/data/icons/hicolor_status_16x16_user-available.png b/data/icons/hicolor_status_16x16_user-available.png
deleted file mode 100644
index 5435e02d..00000000
--- a/data/icons/hicolor_status_16x16_user-available.png
+++ /dev/null
Binary files differ
diff --git a/data/icons/hicolor_status_16x16_user-away.png b/data/icons/hicolor_status_16x16_user-away.png
deleted file mode 100644
index 7576a611..00000000
--- a/data/icons/hicolor_status_16x16_user-away.png
+++ /dev/null
Binary files differ
diff --git a/data/icons/hicolor_status_16x16_user-busy.png b/data/icons/hicolor_status_16x16_user-busy.png
deleted file mode 100644
index 90eab607..00000000
--- a/data/icons/hicolor_status_16x16_user-busy.png
+++ /dev/null
Binary files differ
diff --git a/data/icons/hicolor_status_16x16_user-idle.png b/data/icons/hicolor_status_16x16_user-idle.png
deleted file mode 100644
index 9dec477e..00000000
--- a/data/icons/hicolor_status_16x16_user-idle.png
+++ /dev/null
Binary files differ
diff --git a/data/icons/hicolor_status_16x16_user-offline.png b/data/icons/hicolor_status_16x16_user-offline.png
deleted file mode 100644
index 637be12c..00000000
--- a/data/icons/hicolor_status_16x16_user-offline.png
+++ /dev/null
Binary files differ
diff --git a/data/icons/hicolor_status_16x16_user-typing.png b/data/icons/hicolor_status_16x16_user-typing.png
deleted file mode 100644
index 5c272a33..00000000
--- a/data/icons/hicolor_status_16x16_user-typing.png
+++ /dev/null
Binary files differ
diff --git a/data/icons/hicolor_status_22x22_empathy-pending.png b/data/icons/hicolor_status_22x22_empathy-pending.png
deleted file mode 100644
index b79e7e56..00000000
--- a/data/icons/hicolor_status_22x22_empathy-pending.png
+++ /dev/null
Binary files differ
diff --git a/data/icons/hicolor_status_22x22_im-message.png b/data/icons/hicolor_status_22x22_im-message.png
deleted file mode 100644
index b746084d..00000000
--- a/data/icons/hicolor_status_22x22_im-message.png
+++ /dev/null
Binary files differ
diff --git a/data/icons/hicolor_status_22x22_user-available.png b/data/icons/hicolor_status_22x22_user-available.png
deleted file mode 100644
index ec8c4522..00000000
--- a/data/icons/hicolor_status_22x22_user-available.png
+++ /dev/null
Binary files differ
diff --git a/data/icons/hicolor_status_22x22_user-away.png b/data/icons/hicolor_status_22x22_user-away.png
deleted file mode 100644
index 6c068f2d..00000000
--- a/data/icons/hicolor_status_22x22_user-away.png
+++ /dev/null
Binary files differ
diff --git a/data/icons/hicolor_status_22x22_user-busy.png b/data/icons/hicolor_status_22x22_user-busy.png
deleted file mode 100644
index 0fe61fd2..00000000
--- a/data/icons/hicolor_status_22x22_user-busy.png
+++ /dev/null
Binary files differ
diff --git a/data/icons/hicolor_status_22x22_user-idle.png b/data/icons/hicolor_status_22x22_user-idle.png
deleted file mode 100644
index 72c5b198..00000000
--- a/data/icons/hicolor_status_22x22_user-idle.png
+++ /dev/null
Binary files differ
diff --git a/data/icons/hicolor_status_22x22_user-offline.png b/data/icons/hicolor_status_22x22_user-offline.png
deleted file mode 100644
index fe5de828..00000000
--- a/data/icons/hicolor_status_22x22_user-offline.png
+++ /dev/null
Binary files differ
diff --git a/data/icons/hicolor_status_24x24_empathy-pending.png b/data/icons/hicolor_status_24x24_empathy-pending.png
deleted file mode 100644
index dc5bb599..00000000
--- a/data/icons/hicolor_status_24x24_empathy-pending.png
+++ /dev/null
Binary files differ
diff --git a/data/icons/hicolor_status_24x24_user-available.png b/data/icons/hicolor_status_24x24_user-available.png
deleted file mode 100644
index 95f25345..00000000
--- a/data/icons/hicolor_status_24x24_user-available.png
+++ /dev/null
Binary files differ
diff --git a/data/icons/hicolor_status_24x24_user-away.png b/data/icons/hicolor_status_24x24_user-away.png
deleted file mode 100644
index 3a7e01f1..00000000
--- a/data/icons/hicolor_status_24x24_user-away.png
+++ /dev/null
Binary files differ
diff --git a/data/icons/hicolor_status_24x24_user-busy.png b/data/icons/hicolor_status_24x24_user-busy.png
deleted file mode 100644
index 7e5dced2..00000000
--- a/data/icons/hicolor_status_24x24_user-busy.png
+++ /dev/null
Binary files differ
diff --git a/data/icons/hicolor_status_24x24_user-idle.png b/data/icons/hicolor_status_24x24_user-idle.png
deleted file mode 100644
index 968472e7..00000000
--- a/data/icons/hicolor_status_24x24_user-idle.png
+++ /dev/null
Binary files differ
diff --git a/data/icons/hicolor_status_24x24_user-offline.png b/data/icons/hicolor_status_24x24_user-offline.png
deleted file mode 100644
index bdfc8855..00000000
--- a/data/icons/hicolor_status_24x24_user-offline.png
+++ /dev/null
Binary files differ
diff --git a/data/icons/hicolor_status_32x32_empathy-pending.png b/data/icons/hicolor_status_32x32_empathy-pending.png
deleted file mode 100644
index ed195498..00000000
--- a/data/icons/hicolor_status_32x32_empathy-pending.png
+++ /dev/null
Binary files differ
diff --git a/data/icons/hicolor_status_32x32_user-available.png b/data/icons/hicolor_status_32x32_user-available.png
deleted file mode 100644
index 5d04e0a2..00000000
--- a/data/icons/hicolor_status_32x32_user-available.png
+++ /dev/null
Binary files differ
diff --git a/data/icons/hicolor_status_32x32_user-away.png b/data/icons/hicolor_status_32x32_user-away.png
deleted file mode 100644
index 712f68ae..00000000
--- a/data/icons/hicolor_status_32x32_user-away.png
+++ /dev/null
Binary files differ
diff --git a/data/icons/hicolor_status_32x32_user-busy.png b/data/icons/hicolor_status_32x32_user-busy.png
deleted file mode 100644
index be1280e7..00000000
--- a/data/icons/hicolor_status_32x32_user-busy.png
+++ /dev/null
Binary files differ
diff --git a/data/icons/hicolor_status_32x32_user-idle.png b/data/icons/hicolor_status_32x32_user-idle.png
deleted file mode 100644
index cf7ff2db..00000000
--- a/data/icons/hicolor_status_32x32_user-idle.png
+++ /dev/null
Binary files differ
diff --git a/data/icons/hicolor_status_32x32_user-offline.png b/data/icons/hicolor_status_32x32_user-offline.png
deleted file mode 100644
index 3c4d664f..00000000
--- a/data/icons/hicolor_status_32x32_user-offline.png
+++ /dev/null
Binary files differ
diff --git a/data/icons/hicolor_status_48x48_empathy-pending.png b/data/icons/hicolor_status_48x48_empathy-pending.png
deleted file mode 100644
index 40501559..00000000
--- a/data/icons/hicolor_status_48x48_empathy-pending.png
+++ /dev/null
Binary files differ
diff --git a/data/icons/hicolor_status_48x48_user-available.png b/data/icons/hicolor_status_48x48_user-available.png
deleted file mode 100644
index 5bcae55c..00000000
--- a/data/icons/hicolor_status_48x48_user-available.png
+++ /dev/null
Binary files differ
diff --git a/data/icons/hicolor_status_48x48_user-away.png b/data/icons/hicolor_status_48x48_user-away.png
deleted file mode 100644
index f9d7aeef..00000000
--- a/data/icons/hicolor_status_48x48_user-away.png
+++ /dev/null
Binary files differ
diff --git a/data/icons/hicolor_status_48x48_user-busy.png b/data/icons/hicolor_status_48x48_user-busy.png
deleted file mode 100644
index b6c60c90..00000000
--- a/data/icons/hicolor_status_48x48_user-busy.png
+++ /dev/null
Binary files differ
diff --git a/data/icons/hicolor_status_48x48_user-idle.png b/data/icons/hicolor_status_48x48_user-idle.png
deleted file mode 100644
index 3ca50e5a..00000000
--- a/data/icons/hicolor_status_48x48_user-idle.png
+++ /dev/null
Binary files differ
diff --git a/data/icons/hicolor_status_48x48_user-offline.png b/data/icons/hicolor_status_48x48_user-offline.png
deleted file mode 100644
index b65080ba..00000000
--- a/data/icons/hicolor_status_48x48_user-offline.png
+++ /dev/null
Binary files differ
diff --git a/data/icons/hicolor_status_scalable_empathy-pending.svg b/data/icons/hicolor_status_scalable_empathy-pending.svg
deleted file mode 100644
index 89c626c8..00000000
--- a/data/icons/hicolor_status_scalable_empathy-pending.svg
+++ /dev/null
@@ -1,103 +0,0 @@
-<?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/data/icons/hicolor_status_scalable_user-available.svg b/data/icons/hicolor_status_scalable_user-available.svg
deleted file mode 100644
index 8d4cc585..00000000
--- a/data/icons/hicolor_status_scalable_user-available.svg
+++ /dev/null
@@ -1,104 +0,0 @@
-<?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/data/icons/hicolor_status_scalable_user-away.svg b/data/icons/hicolor_status_scalable_user-away.svg
deleted file mode 100644
index 7e7b0ed6..00000000
--- a/data/icons/hicolor_status_scalable_user-away.svg
+++ /dev/null
@@ -1,93 +0,0 @@
-<?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/data/icons/hicolor_status_scalable_user-busy.svg b/data/icons/hicolor_status_scalable_user-busy.svg
deleted file mode 100644
index 66fc7094..00000000
--- a/data/icons/hicolor_status_scalable_user-busy.svg
+++ /dev/null
@@ -1,140 +0,0 @@
-<?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/data/icons/hicolor_status_scalable_user-idle.svg b/data/icons/hicolor_status_scalable_user-idle.svg
deleted file mode 100644
index 3104dff5..00000000
--- a/data/icons/hicolor_status_scalable_user-idle.svg
+++ /dev/null
@@ -1,120 +0,0 @@
-<?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/data/icons/hicolor_status_scalable_user-offline.svg b/data/icons/hicolor_status_scalable_user-offline.svg
deleted file mode 100644
index 975f7dc8..00000000
--- a/data/icons/hicolor_status_scalable_user-offline.svg
+++ /dev/null
@@ -1,101 +0,0 @@
-<?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/data/org.freedesktop.Telepathy.Client.Empathy.Auth.service.in b/data/org.freedesktop.Telepathy.Client.Empathy.Auth.service.in
deleted file mode 100644
index 65c47d3e..00000000
--- a/data/org.freedesktop.Telepathy.Client.Empathy.Auth.service.in
+++ /dev/null
@@ -1,3 +0,0 @@
-[D-BUS Service]
-Name=org.freedesktop.Telepathy.Client.Empathy.Auth
-Exec=@libexecdir@/empathy-auth-client \ No newline at end of file
diff --git a/data/org.freedesktop.Telepathy.Client.Empathy.Call.service.in b/data/org.freedesktop.Telepathy.Client.Empathy.Call.service.in
deleted file mode 100644
index 0496d51a..00000000
--- a/data/org.freedesktop.Telepathy.Client.Empathy.Call.service.in
+++ /dev/null
@@ -1,3 +0,0 @@
-[D-BUS Service]
-Name=org.freedesktop.Telepathy.Client.Empathy.Call
-Exec=@libexecdir@/empathy-call
diff --git a/data/org.freedesktop.Telepathy.Client.Empathy.Chat.service.in b/data/org.freedesktop.Telepathy.Client.Empathy.Chat.service.in
deleted file mode 100644
index e1418123..00000000
--- a/data/org.freedesktop.Telepathy.Client.Empathy.Chat.service.in
+++ /dev/null
@@ -1,3 +0,0 @@
-[D-BUS Service]
-Name=org.freedesktop.Telepathy.Client.Empathy.Chat
-Exec=@libexecdir@/empathy-chat
diff --git a/data/org.freedesktop.Telepathy.Client.Empathy.FileTransfer.service.in b/data/org.freedesktop.Telepathy.Client.Empathy.FileTransfer.service.in
deleted file mode 100644
index 4e3870ed..00000000
--- a/data/org.freedesktop.Telepathy.Client.Empathy.FileTransfer.service.in
+++ /dev/null
@@ -1,3 +0,0 @@
-[D-BUS Service]
-Name=org.freedesktop.Telepathy.Client.Empathy.FileTransfer
-Exec=@bindir@/empathy -h
diff --git a/data/themes/Boxes.AdiumMessageStyle/Contents/Info.plist b/data/themes/Boxes.AdiumMessageStyle/Contents/Info.plist
deleted file mode 100644
index 35193c4e..00000000
--- a/data/themes/Boxes.AdiumMessageStyle/Contents/Info.plist
+++ /dev/null
@@ -1,35 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-<dict>
- <key>AllowTextColors</key>
- <true/>
-
- <key>CFBundleDevelopmentRegion</key>
- <string>English</string>
-
- <key>CFBundleGetInfoString</key>
- <string>Boxes Message Style</string>
-
- <key>CFBundleIdentifier</key>
- <string>org.gnome.empathy.boxes.style</string>
- <key>CFBundleInfoDictionaryVersion</key>
- <string>1.0</string>
-
- <key>CFBundleName</key>
- <string>Boxes</string>
-
- <key>CFBundlePackageType</key>
- <string>AdIM</string>
-
- <key>DefaultBackgroundColor</key>
- <string>ffffff</string>
-
- <key>MessageViewVersion</key>
- <integer>4</integer>
-
- <key>DisableCombineConsecutive</key>
- <false/>
-
-</dict>
-</plist>
diff --git a/data/themes/Boxes.AdiumMessageStyle/Contents/Resources/Incoming/Content.html b/data/themes/Boxes.AdiumMessageStyle/Contents/Resources/Incoming/Content.html
deleted file mode 100644
index 35cf7e0e..00000000
--- a/data/themes/Boxes.AdiumMessageStyle/Contents/Resources/Incoming/Content.html
+++ /dev/null
@@ -1,12 +0,0 @@
-<div class="content">
- <div class="header">
- <img src="%userIconPath%" class="avatar" title="%sender%" />
- <span class="sender">%sender%</span>
- <span class="timestamp">%time%</span>
- </div>
- <div id="prepend"></div>
- <div class="%messageClasses%" dir="%messageDirection%">
- %message%
- </div>
- <div id="insert"></div>
-</div>
diff --git a/data/themes/Boxes.AdiumMessageStyle/Contents/Resources/Incoming/NextContent.html b/data/themes/Boxes.AdiumMessageStyle/Contents/Resources/Incoming/NextContent.html
deleted file mode 100644
index 44317df4..00000000
--- a/data/themes/Boxes.AdiumMessageStyle/Contents/Resources/Incoming/NextContent.html
+++ /dev/null
@@ -1,5 +0,0 @@
-<div id="prepend"></div>
-<div class="%messageClasses%" dir="%messageDirection%">
- %message%
-</div>
-<div id="insert"></div>
diff --git a/data/themes/Boxes.AdiumMessageStyle/Contents/Resources/Status.html b/data/themes/Boxes.AdiumMessageStyle/Contents/Resources/Status.html
deleted file mode 100644
index 5f9d2980..00000000
--- a/data/themes/Boxes.AdiumMessageStyle/Contents/Resources/Status.html
+++ /dev/null
@@ -1,5 +0,0 @@
-<div class="content">
- <div class="status">
- &ndash; %message%
- </div>
-</div>
diff --git a/data/themes/Boxes.AdiumMessageStyle/Contents/Resources/Variants/Blue.css b/data/themes/Boxes.AdiumMessageStyle/Contents/Resources/Variants/Blue.css
deleted file mode 100644
index e1ad904a..00000000
--- a/data/themes/Boxes.AdiumMessageStyle/Contents/Resources/Variants/Blue.css
+++ /dev/null
@@ -1,9 +0,0 @@
-.header {
- background-color: #88a2b4;
- border-top: 1px solid #7f96a4;
- border-bottom: 1px solid #7f96a4;
-}
-
-.message {
- background-color: #adbdc8;
-}
diff --git a/data/themes/Boxes.AdiumMessageStyle/Contents/Resources/Variants/Clean.css b/data/themes/Boxes.AdiumMessageStyle/Contents/Resources/Variants/Clean.css
deleted file mode 100644
index 3d7c8f66..00000000
--- a/data/themes/Boxes.AdiumMessageStyle/Contents/Resources/Variants/Clean.css
+++ /dev/null
@@ -1,5 +0,0 @@
-.header {
- background-color: #efefdf;
- border-top: 1px solid #e3e3d3;
- border-bottom: 1px solid #e3e3d3;
-}
diff --git a/data/themes/Boxes.AdiumMessageStyle/Contents/Resources/Variants/Simple.css b/data/themes/Boxes.AdiumMessageStyle/Contents/Resources/Variants/Simple.css
deleted file mode 100644
index aa52ca09..00000000
--- a/data/themes/Boxes.AdiumMessageStyle/Contents/Resources/Variants/Simple.css
+++ /dev/null
@@ -1,6 +0,0 @@
-.header {
- background-color: #4a90d9;
- color: white;
- border-top: 1px solid #376594;
- border-bottom: 1px solid #376594;
-}
diff --git a/data/themes/Boxes.AdiumMessageStyle/Contents/Resources/main.css b/data/themes/Boxes.AdiumMessageStyle/Contents/Resources/main.css
deleted file mode 100644
index 2890556e..00000000
--- a/data/themes/Boxes.AdiumMessageStyle/Contents/Resources/main.css
+++ /dev/null
@@ -1,84 +0,0 @@
-* {
- word-wrap: break-word;
- word-break: break-word;
-}
-
-html {
- padding: 0;
- margin: 0;
-}
-
-body {
- padding: 6px;
- margin: 0;
-}
-
-.content {
- width: 98%;
- margin: 0;
- padding: 0;
- margin-bottom: 6px;
-}
-
-.header {
- width: 100%;
- height: 24px;
- padding: 3px;
- margin: 0;
-}
-
-.header .avatar {
- height: 24px;
- width: auto;
- float: left;
-}
-
-.header .sender {
- font-weight: bold;
- padding-left: 3px;
-}
-
-.header .timestamp {
- float: right;
- font-style: italic;
- margin-right: 3px;
-}
-
-.message, .status {
- padding: 3px;
- width: 100%;
-}
-
-.status {
- font-style: italic;
- color: #939373;
-}
-
-div.action.message {
- font-style: italic;
-}
-
-.actionMessageUserName {
- display: inline;
-}
-
-.actionMessageUserName::before {
- content: " * ";
-}
-
-.actionMessageUserName::after {
- content: " ";
-}
-
-div.message.action span.message::before {
- content: " * ";
-}
-
-.actionMessageBody::before,
-.actionMessageBody::after {
- content: " ";
-}
-
-::selection {
- background: #4a90d9;
-}
diff --git a/data/themes/Classic.AdiumMessageStyle/Contents/Info.plist b/data/themes/Classic.AdiumMessageStyle/Contents/Info.plist
deleted file mode 100644
index 053bc9cd..00000000
--- a/data/themes/Classic.AdiumMessageStyle/Contents/Info.plist
+++ /dev/null
@@ -1,35 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-<dict>
- <key>AllowTextColors</key>
- <true/>
-
- <key>CFBundleDevelopmentRegion</key>
- <string>English</string>
-
- <key>CFBundleGetInfoString</key>
- <string>Classic Message Style</string>
-
- <key>CFBundleIdentifier</key>
- <string>org.gnome.empathy.classic.style</string>
- <key>CFBundleInfoDictionaryVersion</key>
- <string>1.0</string>
-
- <key>CFBundleName</key>
- <string>Classic</string>
-
- <key>CFBundlePackageType</key>
- <string>AdIM</string>
-
- <key>DefaultBackgroundColor</key>
- <string>ffffff</string>
-
- <key>MessageViewVersion</key>
- <integer>4</integer>
-
- <key>DisableCombineConsecutive</key>
- <false/>
-
-</dict>
-</plist>
diff --git a/data/themes/Classic.AdiumMessageStyle/Contents/Resources/Content.html b/data/themes/Classic.AdiumMessageStyle/Contents/Resources/Content.html
deleted file mode 100644
index 3eaa3ef9..00000000
--- a/data/themes/Classic.AdiumMessageStyle/Contents/Resources/Content.html
+++ /dev/null
@@ -1,6 +0,0 @@
-<div id="prepend"></div>
-<div class="%messageClasses%" dir="%messageDirection%">
- <span class="sender">%sender%:</span>
- <span class="message">%message%</span>
-</div>
-<div id="insert"></div>
diff --git a/data/themes/Classic.AdiumMessageStyle/Contents/Resources/Status.html b/data/themes/Classic.AdiumMessageStyle/Contents/Resources/Status.html
deleted file mode 100644
index 5f9d2980..00000000
--- a/data/themes/Classic.AdiumMessageStyle/Contents/Resources/Status.html
+++ /dev/null
@@ -1,5 +0,0 @@
-<div class="content">
- <div class="status">
- &ndash; %message%
- </div>
-</div>
diff --git a/data/themes/Classic.AdiumMessageStyle/Contents/Resources/main.css b/data/themes/Classic.AdiumMessageStyle/Contents/Resources/main.css
deleted file mode 100644
index 1950408f..00000000
--- a/data/themes/Classic.AdiumMessageStyle/Contents/Resources/main.css
+++ /dev/null
@@ -1,67 +0,0 @@
-* {
- word-wrap: break-word;
- word-break: break-word;
-}
-
-html {
- padding: 0;
- margin: 0;
-}
-
-body {
- padding: 6px;
- margin: 0;
- color: #2e3436;
-}
-
-.incoming .sender {
- color: #4a708b;
-}
-
-.outgoing .sender {
- color: #2e8b57;
-}
-
-.mention .sender {
- color: #8b2323;
- font-weight: bold;
-}
-
-.status {
- color: #939373;
-}
-
-a {
- color: #4682b4;
-}
-
-.message.action {
- color: #8b2323;
- font-style: italic;
-}
-
-.message.action .sender {
- display: none;
-}
-
-.message.action .actionMessageUserName {
- display: inline;
-}
-
-div.message.action span.message::before {
- content: " * ";
-}
-
-.message.action .actionMessageBody::before,
-.message.action .actionMessageBody::after {
- content: " ";
-}
-
-::selection {
- background: #4a90d9;
-}
-
-div.message {
- padding: 0.3ex 0;
- line-height: 130%;
-}
diff --git a/data/themes/Makefile.am b/data/themes/Makefile.am
deleted file mode 100644
index 58d0618a..00000000
--- a/data/themes/Makefile.am
+++ /dev/null
@@ -1,56 +0,0 @@
-themesdir = $(datadir)/adium/message-styles
-
-themes = \
- $(boxes_messageStyle) \
- $(classic_messageStyle) \
- $(pgo_messageStyle) \
- $(NULL)
-
-boxes_messageStyle = \
- Boxes.AdiumMessageStyle/Contents/Resources/Incoming/Content.html \
- Boxes.AdiumMessageStyle/Contents/Resources/Incoming/NextContent.html \
- Boxes.AdiumMessageStyle/Contents/Resources/main.css \
- Boxes.AdiumMessageStyle/Contents/Resources/Status.html \
- Boxes.AdiumMessageStyle/Contents/Resources/Variants/Clean.css \
- Boxes.AdiumMessageStyle/Contents/Resources/Variants/Simple.css \
- Boxes.AdiumMessageStyle/Contents/Resources/Variants/Blue.css \
- Boxes.AdiumMessageStyle/Contents/Info.plist \
- $(NULL)
-
-classic_messageStyle = \
- Classic.AdiumMessageStyle/Contents/Resources/Content.html \
- Classic.AdiumMessageStyle/Contents/Resources/main.css \
- Classic.AdiumMessageStyle/Contents/Resources/Status.html \
- Classic.AdiumMessageStyle/Contents/Info.plist \
- $(NULL)
-
-pgo_messageStyle = \
- PlanetGNOME.AdiumMessageStyle/Contents/Resources/Images/corners.png \
- PlanetGNOME.AdiumMessageStyle/Contents/Resources/Images/horizontal.png \
- PlanetGNOME.AdiumMessageStyle/Contents/Resources/Images/nipple.png \
- PlanetGNOME.AdiumMessageStyle/Contents/Resources/Images/vertical.png \
- PlanetGNOME.AdiumMessageStyle/Contents/Resources/Incoming/Content.html \
- PlanetGNOME.AdiumMessageStyle/Contents/Resources/Incoming/NextContent.html \
- PlanetGNOME.AdiumMessageStyle/Contents/Resources/Status.html \
- PlanetGNOME.AdiumMessageStyle/Contents/Resources/main.css \
- PlanetGNOME.AdiumMessageStyle/Contents/Info.plist \
- $(NULL)
-
-install-themes: $(themes)
- for f in $^; do \
- mkdir -p `dirname $(DESTDIR)$(themesdir)/$$f`; \
- $(INSTALL_DATA) $(srcdir)/$$f $(DESTDIR)$(themesdir)/$$f; \
- done
-
-uninstall-themes: $(themes)
- for f in $^; do \
- rm -f $(DESTDIR)$(themesdir)/$$f; \
- done
-
-install-data-local: install-themes
-
-uninstall-local: uninstall-themes
-
-EXTRA_DIST = \
- $(themes) \
- $(NULL)
diff --git a/data/themes/PlanetGNOME.AdiumMessageStyle/Contents/Info.plist b/data/themes/PlanetGNOME.AdiumMessageStyle/Contents/Info.plist
deleted file mode 100644
index 805d053c..00000000
--- a/data/themes/PlanetGNOME.AdiumMessageStyle/Contents/Info.plist
+++ /dev/null
@@ -1,35 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-<dict>
- <key>AllowTextColors</key>
- <true/>
-
- <key>CFBundleDevelopmentRegion</key>
- <string>English</string>
-
- <key>CFBundleGetInfoString</key>
- <string>Planet GNOME Message Style</string>
-
- <key>CFBundleIdentifier</key>
- <string>org.gnome.empathy.pgo.style</string>
- <key>CFBundleInfoDictionaryVersion</key>
- <string>1.0</string>
-
- <key>CFBundleName</key>
- <string>Planet GNOME</string>
-
- <key>CFBundlePackageType</key>
- <string>AdIM</string>
-
- <key>DefaultBackgroundColor</key>
- <string>ffffff</string>
-
- <key>MessageViewVersion</key>
- <integer>4</integer>
-
- <key>DisableCombineConsecutive</key>
- <false/>
-
-</dict>
-</plist>
diff --git a/data/themes/PlanetGNOME.AdiumMessageStyle/Contents/Resources/Images/corners.png b/data/themes/PlanetGNOME.AdiumMessageStyle/Contents/Resources/Images/corners.png
deleted file mode 100644
index 05cbcf9d..00000000
--- a/data/themes/PlanetGNOME.AdiumMessageStyle/Contents/Resources/Images/corners.png
+++ /dev/null
Binary files differ
diff --git a/data/themes/PlanetGNOME.AdiumMessageStyle/Contents/Resources/Images/horizontal.png b/data/themes/PlanetGNOME.AdiumMessageStyle/Contents/Resources/Images/horizontal.png
deleted file mode 100644
index 4a2c73dd..00000000
--- a/data/themes/PlanetGNOME.AdiumMessageStyle/Contents/Resources/Images/horizontal.png
+++ /dev/null
Binary files differ
diff --git a/data/themes/PlanetGNOME.AdiumMessageStyle/Contents/Resources/Images/nipple.png b/data/themes/PlanetGNOME.AdiumMessageStyle/Contents/Resources/Images/nipple.png
deleted file mode 100644
index 26eee338..00000000
--- a/data/themes/PlanetGNOME.AdiumMessageStyle/Contents/Resources/Images/nipple.png
+++ /dev/null
Binary files differ
diff --git a/data/themes/PlanetGNOME.AdiumMessageStyle/Contents/Resources/Images/vertical.png b/data/themes/PlanetGNOME.AdiumMessageStyle/Contents/Resources/Images/vertical.png
deleted file mode 100644
index ae6a672f..00000000
--- a/data/themes/PlanetGNOME.AdiumMessageStyle/Contents/Resources/Images/vertical.png
+++ /dev/null
Binary files differ
diff --git a/data/themes/PlanetGNOME.AdiumMessageStyle/Contents/Resources/Incoming/Content.html b/data/themes/PlanetGNOME.AdiumMessageStyle/Contents/Resources/Incoming/Content.html
deleted file mode 100644
index ffef0e1f..00000000
--- a/data/themes/PlanetGNOME.AdiumMessageStyle/Contents/Resources/Incoming/Content.html
+++ /dev/null
@@ -1,22 +0,0 @@
-<div class="entry">
- <div class="person-info">
- <img src="%userIconPath%" class="face" title="%sender%" /><br/>
- %sender%
- </div>
- <div class="post">
- <div class="post-body">
- <div class="post-contents" dir="%messageDirection%">
- <div id="prepend"></div>
- <p>
- %message%
- </p>
- <div id="insert"></div>
- </div>
- <div class="post-footer">
- <p>%time%</p>
- </div>
- </div>
- <b class="vt lt"></b><b class="vt rt"></b><b class="hz to"></b><b class="hz bo"></b>
- <b class="cr tl"></b><b class="cr tr"></b><b class="cr bl"></b><b class="cr br"></b>
- </div> <!-- post -->
-</div> <!-- entry -->
diff --git a/data/themes/PlanetGNOME.AdiumMessageStyle/Contents/Resources/Incoming/NextContent.html b/data/themes/PlanetGNOME.AdiumMessageStyle/Contents/Resources/Incoming/NextContent.html
deleted file mode 100644
index 6b49c609..00000000
--- a/data/themes/PlanetGNOME.AdiumMessageStyle/Contents/Resources/Incoming/NextContent.html
+++ /dev/null
@@ -1,7 +0,0 @@
-<div id="prepend"></div>
-<div dir="%messageDirection%">
- <p>
- %message%
- </p>
-</dir>
-<div id="insert"></div>
diff --git a/data/themes/PlanetGNOME.AdiumMessageStyle/Contents/Resources/Status.html b/data/themes/PlanetGNOME.AdiumMessageStyle/Contents/Resources/Status.html
deleted file mode 100644
index 5f9d2980..00000000
--- a/data/themes/PlanetGNOME.AdiumMessageStyle/Contents/Resources/Status.html
+++ /dev/null
@@ -1,5 +0,0 @@
-<div class="content">
- <div class="status">
- &ndash; %message%
- </div>
-</div>
diff --git a/data/themes/PlanetGNOME.AdiumMessageStyle/Contents/Resources/main.css b/data/themes/PlanetGNOME.AdiumMessageStyle/Contents/Resources/main.css
deleted file mode 100644
index a4b8183e..00000000
--- a/data/themes/PlanetGNOME.AdiumMessageStyle/Contents/Resources/main.css
+++ /dev/null
@@ -1,118 +0,0 @@
-* {
- word-wrap: break-word;
- word-break: break-word;
-}
-
-html {
- padding: 0;
- margin: 0;
-}
-
-body {
- padding: 6px;
- margin: 0;
-}
-
-div.entry {
- clear: both;
- margin-bottom: 0.5em;
-}
-
-div.person-info {
- position: relative;
- z-index: 1;
- float: left;
- margin-top: 25px !important;
- margin-left: -12px;
- padding: 0 24px 0 6px;
- left: 3px;
- width: 72px;
- background: url(Images/nipple.png) top right no-repeat;
- text-align: center;
- color: #777;
- font-size: small;
-}
-
-div.person-info img {
- border: 0px;
- margin-bottom: 1ex;
- width: 50px;
- height: auto;
-}
-
-div.post {
- position: relative;
- margin-left: 89px;
- padding: 12px;
-}
-
-b.cr {
- position: absolute;
- background-image: url(Images/corners.png);
- width: 50px;
- height: 50px;
-}
-b.tl { top: 0px; left: 0px; background-position: top left; }
-b.tr { top: 0px; right: 0px; background-position: top right; }
-b.bl { bottom: 0px; left: 0px; background-position: bottom left; }
-b.br { bottom: 0px; right: 0px; background-position: bottom right; }
-
-b.vt {
- position: absolute;
- background: url(Images/vertical.png) repeat-y;
- width: 50px;
- height: 100%;
-}
-b.lt { top: 0px; left: 0px; background-position: top left; }
-b.rt { top: 0px; right: 0px; background-position: top right; }
-
-b.hz {
- position: absolute;
- background: url(Images/horizontal.png) repeat-x;
- width: 100%;
- height: 50px;
-}
-b.to { top: 0px; left: 0px; background-position: top left; }
-b.bo { bottom: 0px; left: 0px; background-position: bottom left; }
-
-.post-contents {
- position: relative;
- z-index: 1;
- line-height: 120%;
- padding: 0;
- margin: 0 0 2em 0;
-}
-
-.post-body {
- min-height: 40px;
-}
-
-.post-contents p {
- padding: 0;
- margin: 0;
- padding-top: 0.3em;
-}
-
-.post-contents:after {
- display: block;
- clear: both;
-}
-
-.post-footer {
- position: absolute;
- bottom: 1em;
- right: 1em;
-}
-
-.post-footer p {
- position: relative;
- z-index: 1;
- margin: 0;
- font-size: small;
- text-align: right;
- color: #777;
-}
-
-::selection {
- background: #4a90d9;
-}
diff --git a/extensions/.gitignore b/extensions/.gitignore
deleted file mode 100644
index 09d7dbf5..00000000
--- a/extensions/.gitignore
+++ /dev/null
@@ -1,2 +0,0 @@
-_gen
-extensions.html
diff --git a/extensions/Channel_Interface_Credentials_Storage.xml b/extensions/Channel_Interface_Credentials_Storage.xml
deleted file mode 100644
index e44b13e3..00000000
--- a/extensions/Channel_Interface_Credentials_Storage.xml
+++ /dev/null
@@ -1,59 +0,0 @@
-<?xml version="1.0" ?>
-<node name="/Channel_Interface_Credentials_Storage"
- xmlns:tp="http://telepathy.freedesktop.org/wiki/DbusSpec#extensions-v0">
- <tp:copyright> Copyright © 2011 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
-Lesser General Public License for more details.</p>
-
-<p>You should have received a copy of the GNU Lesser General Public
-License along with this library; if not, write to the Free Software
-Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</p>
- </tp:license>
- <interface name="org.freedesktop.Telepathy.Channel.Interface.CredentialsStorage.DRAFT"
- tp:causes-havoc="experimental">
- <tp:added version="0.21.10">(draft 1)</tp:added>
- <tp:requires interface="org.freedesktop.Telepathy.Channel.Interface.SASLAuthentication"/>
- <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
- <p>A channel interface for SASL authentication channels that can save the
- credentials in the connection manager.</p>
-
- <p>This interface is unlikely to be present for any SASL channels that are
- more complex than a simple password prompt (e.g.
- <code>X-TELEPATHY-PASSWORD</code> or <code>PLAIN</code>).</p>
-
- <p>In practice, this interface should only be implemented by connection
- managers that implement the <tp:dbus-ref
- namespace="ofdT">ConnectionManager.Interface.AccountStorage.DRAFT</tp:dbus-ref>
- interface. To clear a password that has been saved in this manner, a
- client should call <tp:dbus-ref
- namespace="ofdT.ConnectionManager.Interface">AccountStorage.DRAFT.ForgetCredentials</tp:dbus-ref>
- on the Account.</p>
- </tp:docstring>
-
- <method name="StoreCredentials" tp:name-for-bindings="Store_Credentials">
- <arg direction="in" name="Store" type="b">
- <tp:docstring>
- Whether to store the authentication credentials.
- </tp:docstring>
- </arg>
- <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
- <p>This method tells the connection manager whether to store the
- authentication response in order to allow the connection manager to
- sign-on automatically in the future.</p>
- <p>If credentials have been stored in this way, the client SHOULD NOT
- attempt to store the credentials locally in a keyring.</p>
- <p>This method MUST be called before <tp:dbus-ref
- namespace="org.freedesktop.Telepathy.Channel.Interface.SASLAuthentication">AcceptSASL</tp:dbus-ref>
- is called or it will have no effect.</p>
- </tp:docstring>
- </method>
- </interface>
-</node>
diff --git a/extensions/Channel_Type_Server_TLS_Connection.xml b/extensions/Channel_Type_Server_TLS_Connection.xml
deleted file mode 100644
index efab4945..00000000
--- a/extensions/Channel_Type_Server_TLS_Connection.xml
+++ /dev/null
@@ -1,69 +0,0 @@
-<?xml version="1.0" ?>
-<node name="/Channel_Type_Server_TLS_Connection"
- xmlns:tp="http://telepathy.freedesktop.org/wiki/DbusSpec#extensions-v0">
- <tp:copyright> Copyright © 2010 Collabora Limited </tp:copyright>
- <tp:license>
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- This library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with this library; if not, write to the Free Software
- Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- </tp:license>
-
- <interface name="org.freedesktop.Telepathy.Channel.Type.ServerTLSConnection">
- <tp:added version="0.19.13">(as stable API)</tp:added>
-
- <tp:requires interface="org.freedesktop.Telepathy.Channel"/>
-
- <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
- <p>A channel type that carries a TLS certificate between a server
- and a client connecting to it.</p>
- <p>Channels of this kind always have <tp:dbus-ref
- namespace="org.freedesktop.Telepathy.Channel">Requested</tp:dbus-ref> = False,
- <tp:dbus-ref namespace="org.freedesktop.Telepathy.Channel">TargetHandleType</tp:dbus-ref>
- = None and <tp:dbus-ref namespace="org.freedesktop.Telepathy.Channel">TargetHandle</tp:dbus-ref>
- = 0, and cannot be requested with methods such as <tp:dbus-ref
- namespace="org.freedesktop.Telepathy.Connection.Interface.Requests">CreateChannel</tp:dbus-ref>.
- Also, they SHOULD be dispatched while the
- <tp:dbus-ref namespace="org.freedesktop.Telepathy">Connection</tp:dbus-ref>
- owning them is in the CONNECTING state.</p>
- <p>In this case, handlers SHOULD accept or reject the certificate, using
- the relevant methods on the provided object, or MAY just <tp:dbus-ref
- namespace="org.freedesktop.Telepathy.Channel">Close</tp:dbus-ref> the channel before doing so, to fall
- back to a non-interactive verification process done inside the CM.</p>
- <p>For example, channels of this kind can pop up while a client is
- connecting to an XMPP server.</p>
- </tp:docstring>
-
- <property name="ServerCertificate" type="o" access="read"
- tp:name-for-bindings="ServerCertificate">
- <tp:docstring>
- <p>A <tp:dbus-ref
- namespace="org.freedesktop.Telepathy.Authentication">TLSCertificate</tp:dbus-ref>
- containing the certificate chain as sent by the server,
- and other relevant information.</p>
- <p>This property is immutable.</p>
- </tp:docstring>
- </property>
-
- <property name="Hostname" type="s" access="read"
- tp:name-for-bindings="Hostname">
- <tp:added version="0.19.12"/>
- <tp:docstring>
- The hostname of the server we expect <tp:member-ref>ServerCertificate</tp:member-ref>
- to certify; clients SHOULD verify <tp:member-ref>ServerCertificate</tp:member-ref> against
- this hostname when checking its validity.
- </tp:docstring>
- </property>
-
- </interface>
-</node>
-<!-- vim:set sw=2 sts=2 et ft=xml: -->
diff --git a/extensions/Chat_Manager.xml b/extensions/Chat_Manager.xml
deleted file mode 100644
index 15ea9512..00000000
--- a/extensions/Chat_Manager.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?xml version="1.0" ?>
-<node name="/Chat_Manager"
- xmlns:tp="http://telepathy.freedesktop.org/wiki/DbusSpec#extensions-v0">
- <tp:copyright>Copyright (C) 2011 Collabora Ltd.</tp:copyright>
- <tp:license xmlns="http://www.w3.org/1999/xhtml">
- <p>This library is free software; you can redistribute it and/or
-modify it under the terms of the GNU Lesser General Public
-License as published by the Free Software Foundation; either
-version 2.1 of the License, or (at your option) any later version.</p>
-
-<p>This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-Lesser General Public License for more details.</p>
-
-<p>You should have received a copy of the GNU Lesser General Public
-License along with this library; if not, write to the Free Software
-Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</p>
- </tp:license>
- <interface name="org.gnome.Empathy.ChatManager">
-
- <method name="UndoClosedChat" tp:name-for-bindings="Undo_Closed_Chat">
- <arg direction="in" type="x" name="User_Time">
- <tp:docstring>
- The user action time for the event.
- </tp:docstring>
- </arg>
- <tp:docstring>
- Ask the chat manager to undo closing a tab. If there is no tab
- to be opened then return successfully.
- </tp:docstring>
- </method>
-
- </interface>
-</node>
-<!-- vim:set sw=2 sts=2 et ft=xml: -->
diff --git a/extensions/Connection_Interface_Renaming.xml b/extensions/Connection_Interface_Renaming.xml
deleted file mode 100644
index d08b748d..00000000
--- a/extensions/Connection_Interface_Renaming.xml
+++ /dev/null
@@ -1,98 +0,0 @@
-<?xml version="1.0" ?>
-<node name="/Connection_Interface_Renaming" xmlns:tp="http://telepathy.freedesktop.org/wiki/DbusSpec#extensions-v0">
- <tp:copyright> Copyright (C) 2005, 2006 Collabora Limited </tp:copyright>
- <tp:copyright> Copyright (C) 2005, 2006 Nokia Corporation </tp:copyright>
- <tp:copyright> Copyright (C) 2006 INdT </tp:copyright>
- <tp:license xmlns="http://www.w3.org/1999/xhtml">
- <p>This library is free software; you can redistribute it and/or
-modify it under the terms of the GNU Lesser General Public
-License as published by the Free Software Foundation; either
-version 2.1 of the License, or (at your option) any later version.</p>
-
-<p>This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-Lesser General Public License for more details.</p>
-
-<p>You should have received a copy of the GNU Lesser General Public
-License along with this library; if not, write to the Free Software
-Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</p>
- </tp:license>
- <interface name="org.freedesktop.Telepathy.Connection.Interface.Renaming"
- tp:causes-havoc='not well-tested'>
- <tp:requires interface="org.freedesktop.Telepathy.Connection"/>
- <signal name="Renamed" tp:name-for-bindings="Renamed">
- <arg name="Original" type="u" tp:type="Contact_Handle">
- <tp:docstring>
- The handle of the original identifier
- </tp:docstring>
- </arg>
- <arg name="New" type="u" tp:type="Contact_Handle">
- <tp:docstring>
- The handle of the new identifier
- </tp:docstring>
- </arg>
- <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
- <p>Emitted when the unique identifier of a contact on the server
- changes.</p>
-
- <p>Any channels associated with the contact's original handle will
- continue to be to that handle, and so are no longer useful (unless
- the contact renames back, or another contact connects with that
- unique ID). Clients may open a similar channel associated with the
- new handle to continue communicating with the contact.</p>
-
- <p>For example, if a GUI client associates text
- channels with chat windows, it should detach the old channel
- from the chat window, closing it, and associate a channel to the
- new handle with the same window.</p>
-
- <p>If the contact's old handle is in any of the member lists of
- a channel which has the groups interface, it will be removed from
- the channel and the new handle will be added. The resulting
- <tp:dbus-ref
- namespace="org.freedesktop.Telepathy.Channel.Interface.Group">MembersChanged</tp:dbus-ref>
- signal must be emitted <em>after</em> the
- <tp:member-ref>Renamed</tp:member-ref> signal; the reason should be
- RENAMED.
- </p>
-
- <p>The handles may be either general-purpose or channel-specific.
- If the original handle is general-purpose, the new handle must be
- general-purpose; if the original handle is channel-specific, the
- new handle must be channel-specific in the same channel.
- </p>
- </tp:docstring>
- </signal>
- <method name="RequestRename" tp:name-for-bindings="Request_Rename">
- <arg direction="in" name="Identifier" type="s">
- <tp:docstring>
- The desired identifier
- </tp:docstring>
- </arg>
- <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
- <p>Request that the user's own identifier is changed on the server.
- If successful, a <tp:member-ref>Renamed</tp:member-ref> signal will
- be emitted for the current "self handle" as returned by <tp:dbus-ref
- namespace="org.freedesktop.Telepathy.Connection">GetSelfHandle</tp:dbus-ref>.</p>
- <p>It is protocol-dependent how the identifier that's actually
- used will be derived from the supplied identifier; some sort of
- normalization might take place.</p>
- </tp:docstring>
- <tp:possible-errors>
- <tp:error name="org.freedesktop.Telepathy.Error.Disconnected"/>
- <tp:error name="org.freedesktop.Telepathy.Error.NetworkError"/>
- <tp:error name="org.freedesktop.Telepathy.Error.NotAvailable"/>
- <tp:error name="org.freedesktop.Telepathy.Error.InvalidArgument"/>
- <tp:error name="org.freedesktop.Telepathy.Error.PermissionDenied"/>
- </tp:possible-errors>
- </method>
- <tp:docstring>
- An interface on connections to support protocols where the unique
- identifiers of contacts can change. Because handles are immutable,
- this is represented by a pair of handles, that representing the
- old name, and that representing the new one.
- </tp:docstring>
- </interface>
-</node>
-<!-- vim:set sw=2 sts=2 et ft=xml: -->
diff --git a/extensions/Logger.xml b/extensions/Logger.xml
deleted file mode 100644
index cf5e067d..00000000
--- a/extensions/Logger.xml
+++ /dev/null
@@ -1,159 +0,0 @@
-<?xml version="1.0" ?>
-<node name="/Logger"
- xmlns:tp="http://telepathy.freedesktop.org/wiki/DbusSpec#extensions-v0">
- <tp:copyright>Copyright © 2009-2011 Collabora Ltd.</tp:copyright>
- <tp:license xmlns="http://www.w3.org/1999/xhtml">
- <p>This library is free software; you can redistribute it and/or
-modify it under the terms of the GNU Lesser General Public
-License as published by the Free Software Foundation; either
-version 2.1 of the License, or (at your option) any later version.</p>
-
-<p>This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-Lesser General Public License for more details.</p>
-
-<p>You should have received a copy of the GNU Lesser General Public
-License along with this library; if not, write to the Free Software
-Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</p>
- </tp:license>
- <interface name="org.freedesktop.Telepathy.Logger.DRAFT"
- tp:causes-havoc="experimental">
- <tp:added version="0.3">(as a draft)</tp:added>
-
- <tp:docstring>
- An interface for requesting information from the Telepathy Logger
- service.
- </tp:docstring>
-
- <method name="GetFavouriteContacts"
- tp:name-for-bindings="Get_Favourite_Contacts">
- <arg direction="out" name="Favourite_Contacts" type="a(oas)">
- <tp:docstring>
- The favourite contacts, as an array of TpAccounts and their contact
- identifiers.
- </tp:docstring>
- </arg>
-
- <tp:docstring>
- Returns the favourite contacts.
- </tp:docstring>
- </method>
-
- <method name="AddFavouriteContact"
- tp:name-for-bindings="Add_Favourite_Contact">
- <arg direction="in" name="Account" type="o" tp:type="Account">
- <tp:docstring>
- The object path for the TpAccount to which the contact belongs
- </tp:docstring>
- </arg>
-
- <arg direction="in" name="Identifier" type="s">
- <tp:docstring>
- The favourite contact's identifier
- </tp:docstring>
- </arg>
-
- <tp:docstring>
- Add a contact's designation as a favourite. This method may not be
- called until the service is ready. See the <tp:dbus-ref
- namespace="org.freedesktop.Telepathy.Logger.DRAFT">FavouriteContactsReady</tp:dbus-ref> signal and <tp:dbus-ref
- namespace="org.freedesktop.Telepathy.Logger.DRAFT">FavouriteContactsIsReady</tp:dbus-ref> property.
- </tp:docstring>
- </method>
-
- <method name="RemoveFavouriteContact"
- tp:name-for-bindings="Remove_Favourite_Contact">
- <arg direction="in" name="Account" type="o" tp:type="Account">
- <tp:docstring>
- The object path for the TpAccount to which the contact belongs
- </tp:docstring>
- </arg>
-
- <arg direction="in" name="Identifier" type="s">
- <tp:docstring>
- The favourite contact's identifier
- </tp:docstring>
- </arg>
-
- <tp:docstring>
- Remove a contact's designation as a favourite. This method may not be
- called until the service is ready. See the <tp:dbus-ref
- namespace="org.freedesktop.Telepathy.Logger.DRAFT">FavouriteContactsReady</tp:dbus-ref> signal and <tp:dbus-ref
- namespace="org.freedesktop.Telepathy.Logger.DRAFT">FavouriteContactsIsReady</tp:dbus-ref> property.
- </tp:docstring>
- </method>
-
- <method name="Clear"
- tp:name-for-bindings="Clear">
- <tp:docstring>
- Clear all the logs. This will not erase the favourite contacts.
- </tp:docstring>
- </method>
-
- <method name="ClearAccount"
- tp:name-for-bindings="Clear_Account">
- <arg direction="in" name="Account" type="o" tp:type="Account">
- <tp:docstring>
- The object path for the TpAccount in which logs will be cleared.
- </tp:docstring>
- </arg>
-
- <tp:docstring>
- Clear all logs stored for specified account.
- </tp:docstring>
- </method>
-
- <method name="ClearEntity"
- tp:name-for-bindings="Clear_Entity">
- <arg direction="in" name="Account" type="o" tp:type="Account">
- <tp:docstring>
- The object path for the TpAccount in which logs will be cleared.
- </tp:docstring>
- </arg>
-
- <arg direction="in" name="Identifier" type="s">
- <tp:docstring>
- The entity identifier.
- </tp:docstring>
- </arg>
-
- <arg direction="in" name="Type" type="i">
- <tp:docstring>
- The entity type, should be one of TPL_ENTITY_CONTACT (1) or TPL_ENTITY_ROOM (2).
- </tp:docstring>
- </arg>
-
- <tp:docstring>
- Clear all logs stored for discussions with entity in account.
- </tp:docstring>
- </method>
-
- <signal name="FavouriteContactsChanged"
- tp:name-for-bindings="Favourite_Contacts_Changed">
- <tp:docstring>
- The set of favourite contacts has changed.
- </tp:docstring>
-
- <arg name="Account" type="o" tp:type="Account">
- <tp:docstring>
- An account associated with the contact.
- </tp:docstring>
- </arg>
-
- <arg name="Added" type="as">
- <tp:docstring>
- List of contact identifiers of contacts which are now favourites.
- </tp:docstring>
- </arg>
-
- <arg name="Removed" type="as">
- <tp:docstring>
- List of contact identifiers of contacts which are no longer favourites.
- </tp:docstring>
- </arg>
- </signal>
-
- </interface>
-</node>
-<!-- vim:set sw=2 sts=2 et ft=xml: -->
diff --git a/extensions/Makefile.am b/extensions/Makefile.am
deleted file mode 100644
index 789821dc..00000000
--- a/extensions/Makefile.am
+++ /dev/null
@@ -1,131 +0,0 @@
-tools_dir = $(top_srcdir)/tools
-
-AM_CPPFLAGS = $(DISABLE_DEPRECATED)
-
-AM_CFLAGS = \
- -I$(top_srcdir) \
- -I$(top_builddir) \
- $(WARN_CFLAGS) \
- $(EMPATHY_CFLAGS)
-
-EXTRA_DIST = \
- all.xml \
- generic-types.xml \
- misc.xml \
- Logger.xml \
- Connection_Interface_Renaming.xml \
- Channel_Interface_Credentials_Storage.xml \
- Channel_Type_Server_TLS_Connection.xml \
- Chat_Manager.xml \
- $(NULL)
-
-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/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)
-
-clean-local:
- rm -rf _gen
-
-XSLTPROCFLAGS = --nonet --novalid
-
-# Generated files which can be generated for all categories simultaneously
-
-_gen/all.xml: all.xml $(wildcard *.xml) $(tools_dir)/xincludator.py
- @$(mkdir_p) _gen
- $(AM_V_GEN)$(PYTHON) $(tools_dir)/xincludator.py $< > $@
-
-extensions.html: _gen/all.xml $(tools_dir)/doc-generator.xsl
- $(AM_V_GEN)$(XSLTPROC) $(XSLTPROCFLAGS) \
- --param "allow-undefined-interfaces" "true()" \
- $(tools_dir)/doc-generator.xsl \
- $< > $@
-
-_gen/gtypes.h _gen/gtypes-body.h: _gen/all.xml \
- $(top_srcdir)/tools/glib-gtypes-generator.py
- $(AM_V_GEN)$(PYTHON) $(top_srcdir)/tools/glib-gtypes-generator.py \
- $< _gen/gtypes Emp
-
-_gen/register-dbus-glib-marshallers-body.h: _gen/all.xml \
- $(tools_dir)/glib-client-marshaller-gen.py
- $(AM_V_GEN)$(PYTHON) $(tools_dir)/glib-client-marshaller-gen.py $< \
- _emp_ext > $@
-
-_gen/enums.h: _gen/all.xml \
- $(tools_dir)/c-constants-gen.py
- $(AM_V_GEN)$(PYTHON) $(tools_dir)/c-constants-gen.py \
- Emp \
- $< _gen/enums
-
-_gen/interfaces-body.h _gen/interfaces.h: _gen/all.xml \
- $(tools_dir)/glib-interfaces-gen.py
- $(AM_V_GEN)$(PYTHON) $(tools_dir)/glib-interfaces-gen.py \
- Emp _gen/interfaces-body.h _gen/interfaces.h $<
-
-# 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) $(tools_dir)/xincludator.py
- @$(mkdir_p) _gen
- $(AM_V_GEN)$(PYTHON) $(tools_dir)/xincludator.py $< > $@
-
-_gen/cli-misc-body.h: _gen/cli-misc.h
-
-_gen/cli-misc.h: _gen/misc.xml \
- $(tools_dir)/glib-client-gen.py
- $(AM_V_GEN)$(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.10.0 \
- $< Emp_Cli _gen/cli-misc
-
-# There is no need to execute glib-ginterface-gen.py twice because it
-# generates both the .c and .h files in one shot. Therefore, merely
-# having one of them (say the .c) depend on the other (say the .h) is
-# enough.
-#
-# Moreover, running it twice breaks parallel builds because one
-# glib-ginterface-gen.py process steps on the other.
-
-_gen/svc-misc.c: _gen/svc-misc.h
-
-_gen/svc-misc.h: _gen/misc.xml \
- $(tools_dir)/glib-ginterface-gen.py
- $(AM_V_GEN)$(PYTHON) $(tools_dir)/glib-ginterface-gen.py \
- --filename=_gen/svc-misc \
- --signal-marshal-prefix=_emp_ext \
- --include='<telepathy-glib/telepathy-glib.h>' \
- --not-implemented-func='tp_dbus_g_method_return_not_implemented' \
- --allow-unstable \
- $< Emp_Svc_
diff --git a/extensions/all.xml b/extensions/all.xml
deleted file mode 100644
index d0b9173c..00000000
--- a/extensions/all.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-<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"/>
-<xi:include href="generic-types.xml"/>
-
-<tp:generic-types>
- <tp:external-type name="Contact_Handle" type="u"
- 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:external-type name="Account" type="o"
- from="Telepathy specification"/>
-</tp:generic-types>
-
-
-</tp:spec>
diff --git a/extensions/extensions-cli.c b/extensions/extensions-cli.c
deleted file mode 100644
index e50a6231..00000000
--- a/extensions/extensions-cli.c
+++ /dev/null
@@ -1,30 +0,0 @@
-#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/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/extensions/extensions.c b/extensions/extensions.c
deleted file mode 100644
index 4707c7a8..00000000
--- a/extensions/extensions.c
+++ /dev/null
@@ -1,5 +0,0 @@
-#include "extensions.h"
-
-/* include auto-generated stubs for things common to service and client */
-#include "_gen/gtypes-body.h"
-#include "_gen/interfaces-body.h"
diff --git a/extensions/extensions.h b/extensions/extensions.h
deleted file mode 100644
index c1c42164..00000000
--- a/extensions/extensions.h
+++ /dev/null
@@ -1,19 +0,0 @@
-#ifndef __EMP_EXTENSIONS_H__
-#define __EMP_EXTENSIONS_H__
-
-#include <telepathy-glib/telepathy-glib.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/extensions/generic-types.xml b/extensions/generic-types.xml
deleted file mode 100644
index fdab14be..00000000
--- a/extensions/generic-types.xml
+++ /dev/null
@@ -1,108 +0,0 @@
-<tp:generic-types
- xmlns:tp="http://telepathy.freedesktop.org/wiki/DbusSpec#extensions-v0">
-
- <tp:simple-type name="Unix_Timestamp" type="u">
- <tp:docstring>An unsigned 32-bit integer representing time as the number
- of seconds elapsed since the Unix epoch
- (1970-01-01T00:00:00Z)</tp:docstring>
- </tp:simple-type>
-
- <tp:simple-type name="Unix_Timestamp64" type="x">
- <tp:docstring>An signed 64-bit integer representing time as the number
- of seconds elapsed since the Unix epoch
- (1970-01-01T00:00:00Z); negative for times before the epoch</tp:docstring>
-
- <tp:rationale>The Text interface is the only user of Unix_Timestamp so
- far, and we'd like to be Y2038 compatible in future
- interfaces.</tp:rationale>
- </tp:simple-type>
-
- <tp:simple-type name="DBus_Bus_Name" type="s">
- <tp:docstring>A string representing a D-Bus bus name - either a well-known
- name like "org.freedesktop.Telepathy.MissionControl" or a unique name
- like ":1.123"</tp:docstring>
- </tp:simple-type>
-
- <tp:simple-type name="DBus_Well_Known_Name" type="s">
- <tp:docstring>A string representing a D-Bus well-known
- name like "org.freedesktop.Telepathy.MissionControl".</tp:docstring>
- </tp:simple-type>
-
- <tp:simple-type name="DBus_Unique_Name" type="s">
- <tp:docstring>A string representing a D-Bus unique name, such as
- ":1.123"</tp:docstring>
- </tp:simple-type>
-
- <tp:simple-type name="DBus_Interface" type="s">
- <tp:docstring>An ASCII string representing a D-Bus interface - two or more
- elements separated by dots, where each element is a non-empty
- string of ASCII letters, digits and underscores, not starting with
- a digit. The maximum total length is 255 characters. For example,
- "org.freedesktop.DBus.Peer".</tp:docstring>
- </tp:simple-type>
-
- <tp:simple-type name="DBus_Error_Name" type="s">
- <tp:docstring>An ASCII string representing a D-Bus error. This is
- syntactically the same as a <tp:type>DBus_Interface</tp:type>, but the
- meaning is different.</tp:docstring>
- </tp:simple-type>
-
- <tp:simple-type name="DBus_Signature" type="s">
- <tp:docstring>A string representing a D-Bus signature
- (the 'g' type isn't used because of poor interoperability, particularly
- with dbus-glib)</tp:docstring>
- </tp:simple-type>
-
- <tp:struct name="DBus_Tube_Member" array-name="DBus_Tube_Member_List">
- <tp:docstring>A struct (handle, unique name) representing a participant
- in a D-Bus tube, as returned by GetDBusNames on the Tubes channel
- type, and as seen in the DBusNamesChanged signal.</tp:docstring>
- <tp:member type="u" tp:type="Contact_Handle" name="Handle"/>
- <tp:member type="s" tp:type="DBus_Unique_Name" name="Unique_Name"/>
- </tp:struct>
-
- <tp:simple-type name="DBus_Member" type="s">
- <tp:docstring>An ASCII string representing a D-Bus method, signal
- or property name - a non-empty string of ASCII letters, digits and
- underscores, not starting with a digit, with a maximum length of 255
- characters. For example, "Ping".</tp:docstring>
- </tp:simple-type>
-
- <tp:simple-type name="DBus_Qualified_Member" type="s">
- <tp:docstring>A string representing the full name of a D-Bus method,
- signal or property, consisting of a DBus_Interface, followed by
- a dot, followed by a DBus_Member. For example,
- "org.freedesktop.DBus.Peer.Ping".</tp:docstring>
- </tp:simple-type>
-
- <tp:mapping name="Qualified_Property_Value_Map"
- array-name="Qualified_Property_Value_Map_List">
- <tp:docstring>A mapping from strings representing D-Bus
- properties (by their namespaced names) to their values.</tp:docstring>
- <tp:member type="s" name="Key" tp:type="DBus_Qualified_Member">
- <tp:docstring>
- A D-Bus interface name, followed by a dot and a D-Bus property name.
- </tp:docstring>
- </tp:member>
- <tp:member type="v" name="Value">
- <tp:docstring>
- The value of the property.
- </tp:docstring>
- </tp:member>
- </tp:mapping>
-
- <tp:mapping name="String_Variant_Map" array-name="String_Variant_Map_List">
- <tp:docstring>A mapping from strings to variants representing extra
- key-value pairs.</tp:docstring>
- <tp:member type="s" name="Key"/>
- <tp:member type="v" name="Value"/>
- </tp:mapping>
-
- <tp:mapping name="String_String_Map">
- <tp:docstring>A mapping from strings to strings representing extra
- key-value pairs.</tp:docstring>
- <tp:member type="s" name="Key"/>
- <tp:member type="s" name="Value"/>
- </tp:mapping>
-
-</tp:generic-types>
diff --git a/extensions/misc.xml b/extensions/misc.xml
deleted file mode 100644
index 9d07e612..00000000
--- a/extensions/misc.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<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="Logger.xml" />
-<xi:include href="Chat_Manager.xml" />
-<xi:include href="Connection_Interface_Renaming.xml" />
-<xi:include href="Channel_Interface_Credentials_Storage.xml" />
-<xi:include href="Channel_Type_Server_TLS_Connection.xml" />
-
-</tp:spec>
diff --git a/goa-mc-plugin/Makefile.am b/goa-mc-plugin/Makefile.am
deleted file mode 100644
index a273b72d..00000000
--- a/goa-mc-plugin/Makefile.am
+++ /dev/null
@@ -1,19 +0,0 @@
-AM_CPPFLAGS = \
- $(GOA_CFLAGS) \
- $(ERROR_CFLAGS)
-
-pluginsdir = $(MISSION_CONTROL_PLUGINS_DIR)
-plugins_LTLIBRARIES = \
- mcp-account-manager-goa.la
-
-mcp_account_manager_goa_la_SOURCES = \
- mission-control-plugin.c \
- mcp-account-manager-goa.c mcp-account-manager-goa.h \
- $(NULL)
-
-mcp_account_manager_goa_la_LIBADD = \
- $(GOA_LIBS)
-
-mcp_account_manager_goa_la_LDFLAGS = \
- -module \
- -avoid-version
diff --git a/goa-mc-plugin/mcp-account-manager-goa.c b/goa-mc-plugin/mcp-account-manager-goa.c
deleted file mode 100644
index 74949852..00000000
--- a/goa-mc-plugin/mcp-account-manager-goa.c
+++ /dev/null
@@ -1,625 +0,0 @@
-/*
- * mcp-account-manager-goa.c
- *
- * McpAccountManagerGoa - a Mission Control plugin to expose GNOME Online
- * Accounts with chat capabilities (e.g. Facebook) to Mission Control
- *
- * Copyright (C) 2010-2011 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, see <http://www.gnu.org/licenses/>.
- *
- * Authors:
- * Danielle Madeley <danielle.madeley@collabora.co.uk>
- */
-
-#include "config.h"
-#include "mcp-account-manager-goa.h"
-
-#define GOA_API_IS_SUBJECT_TO_CHANGE /* awesome! */
-#include <goa/goa.h>
-
-#define DEBUG g_debug
-#define GET_PRIVATE(self) (((McpAccountManagerGoa *) self)->priv)
-#define DECLARE_GASYNC_CALLBACK(name) \
- static void name (GObject *, GAsyncResult *, gpointer);
-
-#define PLUGIN_NAME "goa"
-#define PLUGIN_PRIORITY (MCP_ACCOUNT_STORAGE_PLUGIN_PRIO_KEYRING + 10)
-#define PLUGIN_DESCRIPTION "Provide Telepathy Accounts from GOA"
-#define PLUGIN_PROVIDER EMPATHY_GOA_PROVIDER
-
-#define INITIAL_COMMENT "Parameters of GOA Telepathy accounts"
-
-static void account_storage_iface_init (McpAccountStorageIface *iface);
-
-G_DEFINE_TYPE_WITH_CODE (McpAccountManagerGoa,
- mcp_account_manager_goa,
- G_TYPE_OBJECT,
- G_IMPLEMENT_INTERFACE (MCP_TYPE_ACCOUNT_STORAGE,
- account_storage_iface_init))
-
-struct _McpAccountManagerGoaPrivate
-{
- gboolean ready;
-
- GoaClient *client;
- GHashTable *accounts; /* alloc'ed string -> ref'ed GoaObject */
-
- GKeyFile *store;
- gchar *filename;
-};
-
-
-static void
-mcp_account_manager_goa_dispose (GObject *self)
-{
- McpAccountManagerGoaPrivate *priv = GET_PRIVATE (self);
-
- tp_clear_object (&priv->client);
-
- G_OBJECT_CLASS (mcp_account_manager_goa_parent_class)->dispose (self);
-}
-
-
-static void
-mcp_account_manager_goa_finalize (GObject *self)
-{
- McpAccountManagerGoaPrivate *priv = GET_PRIVATE (self);
-
- g_hash_table_unref (priv->accounts);
- g_key_file_free (priv->store);
- g_free (priv->filename);
-
- G_OBJECT_CLASS (mcp_account_manager_goa_parent_class)->finalize (self);
-}
-
-
-static void
-mcp_account_manager_goa_class_init (McpAccountManagerGoaClass *klass)
-{
- GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
-
- gobject_class->dispose = mcp_account_manager_goa_dispose;
- gobject_class->finalize = mcp_account_manager_goa_finalize;
-
- g_type_class_add_private (gobject_class,
- sizeof (McpAccountManagerGoaPrivate));
-}
-
-static GHashTable *
-get_tp_parameters (GoaAccount *account)
-{
- GHashTable *params = g_hash_table_new_full (g_str_hash, g_str_equal,
- NULL, g_free);
- const char *type = goa_account_get_provider_type (account);
-
-#define PARAM(key, value) g_hash_table_insert (params, key, g_strdup (value));
-
- if (!tp_strdiff (type, "google"))
- {
- PARAM ("manager", "gabble");
- PARAM ("protocol", "jabber");
- PARAM ("Icon", "im-google-talk");
- PARAM ("Service", "google-talk");
-
- PARAM ("param-account", goa_account_get_identity (account));
- PARAM ("param-server", "talk.google.com");
- PARAM ("param-fallback-servers",
- "talkx.l.google.com;"
- "talkx.l.google.com:443,oldssl;"
- "talkx.l.google.com:80");
- PARAM ("param-extra-certificate-identities", "talk.google.com");
- PARAM ("param-require-encryption", "true");
- }
- else if (!tp_strdiff (type, "facebook"))
- {
- PARAM ("manager", "gabble");
- PARAM ("protocol", "jabber");
- PARAM ("Icon", "im-facebook");
- PARAM ("Service", "facebook");
-
- PARAM ("param-account", "chat.facebook.com");
- PARAM ("param-server", "chat.facebook.com");
- PARAM ("param-require-encryption", "true");
- PARAM ("param-fallback-servers",
- "chat.facebook.com:443");
- }
- else if (!tp_strdiff (type, "windows_live"))
- {
- PARAM ("manager", "gabble");
- PARAM ("protocol", "jabber");
- PARAM ("Icon", "im-msn");
- PARAM ("Service", "windows-live");
-
- PARAM ("param-account", "messenger.live.com");
- PARAM ("param-require-encryption", "true");
- PARAM ("param-fallback-servers", "xmpp.messenger.live.com");
- PARAM ("param-extra-certificate-identities",
- "*.gateway.messenger.live.com");
- }
- else
- {
- DEBUG ("Unknown account type %s", type);
- g_hash_table_unref (params);
- return NULL;
- }
-
- /* generic properties */
- PARAM ("DisplayName", goa_account_get_presentation_identity (account));
-
-#undef PARAM
-
- return params;
-}
-
-
-static char *
-get_tp_account_name (GoaAccount *account)
-{
- GHashTable *params = get_tp_parameters (account);
- const char *type = goa_account_get_provider_type (account);
- const char *id = goa_account_get_id (account);
- char *name;
-
- if (params == NULL)
- return NULL;
-
- name = g_strdup_printf ("%s/%s/goa_%s_%s",
- (char *) g_hash_table_lookup (params, "manager"),
- (char *) g_hash_table_lookup (params, "protocol"),
- type, id);
-
- g_hash_table_unref (params);
-
- return name;
-}
-
-static void
-object_chat_changed_cb (GoaObject *object,
- GParamSpec *spec,
- McpAccountManagerGoa *self)
-{
- GoaAccount *account = goa_object_peek_account (object);
- char *name = get_tp_account_name (account);
- gboolean enabled;
-
- if (name == NULL)
- return;
-
- enabled = (goa_object_peek_chat (object) != NULL);
-
- DEBUG ("%s %s", name, enabled ? "enabled" : "disabled");
-
- if (self->priv->ready)
- g_signal_emit_by_name (self, "toggled", name, enabled);
-}
-
-static void
-_new_account (McpAccountManagerGoa *self,
- GoaObject *object)
-{
- GoaAccount *account = goa_object_peek_account (object);
- char *account_name = get_tp_account_name (account);
-
- if (account_name == NULL)
- return;
-
- /* @account_name now is owned by the hash table */
- g_hash_table_insert (self->priv->accounts, account_name,
- g_object_ref (object));
-
- if (self->priv->ready)
- g_signal_emit_by_name (self, "created", account_name);
-
- tp_g_signal_connect_object (object, "notify::chat",
- G_CALLBACK (object_chat_changed_cb), self, 0);
-}
-
-
-DECLARE_GASYNC_CALLBACK (_goa_client_new_cb);
-
-static void
-load_store (McpAccountManagerGoa *self)
-{
- GError *error = NULL;
-
- if (!g_key_file_load_from_file (self->priv->store, self->priv->filename,
- G_KEY_FILE_KEEP_COMMENTS, &error))
- {
- gchar *dir;
-
- DEBUG ("Failed to load keyfile, creating a new one: %s", error->message);
-
- dir = g_path_get_dirname (self->priv->filename);
-
- g_mkdir_with_parents (dir, 0700);
- g_free (dir);
-
- g_key_file_set_comment (self->priv->store, NULL, NULL, INITIAL_COMMENT,
- NULL);
-
- g_error_free (error);
- }
-}
-
-static void
-mcp_account_manager_goa_init (McpAccountManagerGoa *self)
-{
- DEBUG ("GOA MC plugin initialised");
-
- self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self,
- MCP_TYPE_ACCOUNT_MANAGER_GOA, McpAccountManagerGoaPrivate);
-
- self->priv->accounts = g_hash_table_new_full (g_str_hash, g_str_equal,
- g_free, g_object_unref);
-
- goa_client_new (NULL, _goa_client_new_cb, self);
-
- /* key file store */
- self->priv->store = g_key_file_new ();
- self->priv->filename = g_build_filename (g_get_user_data_dir (), "telepathy",
- "mission-control", "accounts-goa.cfg", NULL);
-
- load_store (self);
-}
-
-
-static void
-_account_added_cb (GoaClient *client,
- GoaObject *object,
- McpAccountManagerGoa *self)
-{
- _new_account (self, object);
-}
-
-
-static void
-_account_removed_cb (GoaClient *client,
- GoaObject *object,
- McpAccountManagerGoa *self)
-{
- GoaAccount *account = goa_object_peek_account (object);
- char *name = get_tp_account_name (account);
-
- if (name == NULL)
- return;
-
- if (self->priv->ready)
- g_signal_emit_by_name (self, "deleted", name);
-
- g_hash_table_remove (self->priv->accounts, name);
-
- g_free (name);
-}
-
-static void
-_goa_client_new_cb (GObject *obj,
- GAsyncResult *result,
- gpointer user_data)
-{
- McpAccountManagerGoa *self = user_data;
- GList *accounts, *ptr;
- GError *error = NULL;
-
- self->priv->client = goa_client_new_finish (result, &error);
-
- if (error != NULL)
- {
- DEBUG ("Failed to connect to GOA");
- return;
- }
-
- accounts = goa_client_get_accounts (self->priv->client);
-
- for (ptr = accounts; ptr != NULL; ptr = ptr->next)
- {
- _new_account (self, ptr->data);
- }
-
- g_list_free_full (accounts, g_object_unref);
-
- g_signal_connect (self->priv->client, "account-added",
- G_CALLBACK (_account_added_cb), self);
- g_signal_connect (self->priv->client, "account-removed",
- G_CALLBACK (_account_removed_cb), self);
-}
-
-
-static GList *
-mcp_account_manager_goa_list (const McpAccountStorage *self,
- const McpAccountManager *am)
-{
- McpAccountManagerGoaPrivate *priv = GET_PRIVATE (self);
- GList *accounts = NULL;
- GHashTableIter iter;
- gpointer key;
-
- DEBUG (G_STRFUNC);
-
- g_hash_table_iter_init (&iter, priv->accounts);
- while (g_hash_table_iter_next (&iter, &key, NULL))
- accounts = g_list_prepend (accounts, g_strdup (key));
-
- return accounts;
-}
-
-
-static void
-get_enabled (const McpAccountStorage *self,
- const McpAccountManager *am,
- const gchar *acc,
- GoaAccount *account)
-{
- mcp_account_manager_set_value (am, acc, "Enabled",
- goa_account_get_chat_disabled (account) == FALSE ? "true" : "false");
-}
-
-
-static gboolean
-mcp_account_manager_goa_get (const McpAccountStorage *self,
- const McpAccountManager *am,
- const gchar *acc,
- const gchar *key)
-{
- McpAccountManagerGoaPrivate *priv = GET_PRIVATE (self);
- GoaObject *object;
- GoaAccount *account;
-
- DEBUG ("%s: %s, %s", G_STRFUNC, acc, key);
-
- object = g_hash_table_lookup (priv->accounts, acc);
-
- if (object == NULL)
- return FALSE;
-
- account = goa_object_peek_account (object);
-
- if (account == NULL)
- return FALSE;
-
- if (key == NULL)
- {
- /* load all keys */
- GHashTable *params = get_tp_parameters (account);
- GHashTableIter iter;
- gpointer k, value;
- GStrv keys;
- guint i;
- gsize nkeys = 0;
-
- /* Properties from GOA */
- g_hash_table_iter_init (&iter, params);
- while (g_hash_table_iter_next (&iter, &k, &value))
- mcp_account_manager_set_value (am, acc, k, value);
-
- g_hash_table_unref (params);
-
- /* Stored properties */
- keys = g_key_file_get_keys (priv->store, acc, &nkeys, NULL);
-
- for (i = 0; i < nkeys; i++)
- {
- gchar *v = g_key_file_get_value (priv->store, acc, keys[i], NULL);
-
- if (v != NULL)
- {
- mcp_account_manager_set_value (am, acc, keys[i], v);
- g_free (v);
- }
- }
-
- g_strfreev (keys);
-
- /* Enabled */
- get_enabled (self, am, acc, account);
- }
- else if (!tp_strdiff (key, "Enabled"))
- {
- get_enabled (self, am, acc, account);
- }
- else
- {
- /* get a specific key */
- GHashTable *params = get_tp_parameters (account);
- gchar *value;
-
- value = g_hash_table_lookup (params, key);
-
- if (value == NULL)
- value = g_key_file_get_value (priv->store, acc, key, NULL);
- else
- value = g_strdup (value);
-
- mcp_account_manager_set_value (am, acc, key, value);
-
- g_hash_table_unref (params);
- g_free (value);
- }
-
- return TRUE;
-}
-
-static gboolean
-account_is_in_goa (const McpAccountStorage *self,
- const gchar *account)
-{
- McpAccountManagerGoaPrivate *priv = GET_PRIVATE (self);
-
- return (g_hash_table_lookup (priv->accounts, account) != NULL);
-}
-
-static gboolean
-mcp_account_manager_goa_set (const McpAccountStorage *self,
- const McpAccountManager *am,
- const gchar *account,
- const gchar *key,
- const gchar *val)
-{
- McpAccountManagerGoaPrivate *priv = GET_PRIVATE (self);
-
- if (!account_is_in_goa (self, account))
- return FALSE;
-
- DEBUG ("%s: (%s, %s, %s)", G_STRFUNC, account, key, val);
-
- if (!tp_strdiff (key, "Enabled"))
- {
- GoaObject *object;
- GoaAccount *acc;
-
- object = g_hash_table_lookup (priv->accounts, account);
-
- if (object == NULL)
- return FALSE;
-
- acc = goa_object_peek_account (object);
-
- if (acc == NULL)
- return FALSE;
-
- goa_account_set_chat_disabled (acc, tp_strdiff (val, "true"));
- goto out;
- }
-
- if (val != NULL)
- g_key_file_set_value (priv->store, account, key, val);
- else
- g_key_file_remove_key (priv->store, account, key, NULL);
-
- out:
- /* Pretend we save everything so MC won't save this in accounts.cfg */
- return TRUE;
-}
-
-
-static gboolean
-mcp_account_manager_goa_delete (const McpAccountStorage *self,
- const McpAccountManager *am,
- const gchar *account,
- const gchar *key)
-{
- McpAccountManagerGoaPrivate *priv = GET_PRIVATE (self);
-
- if (!account_is_in_goa (self, account))
- return FALSE;
-
- DEBUG ("%s: (%s, %s)", G_STRFUNC, account, key);
-
- if (key == NULL)
- {
- g_key_file_remove_group (priv->store, account, NULL);
- }
- else
- {
- g_key_file_remove_key (priv->store, account, key, NULL);
- }
-
- /* Pretend we deleted everything */
- return TRUE;
-}
-
-
-static gboolean
-mcp_account_manager_goa_commit (const McpAccountStorage *self,
- const McpAccountManager *am)
-{
- McpAccountManagerGoaPrivate *priv = GET_PRIVATE (self);
- gchar *data;
- gsize len;
- GError *error = NULL;
-
- DEBUG ("Save config to %s", priv->filename);
-
- data = g_key_file_to_data (priv->store, &len, &error);
- if (data == NULL)
- {
- DEBUG ("Failed to get data from store: %s", error->message);
-
- g_error_free (error);
- return FALSE;
- }
-
- if (!g_file_set_contents (priv->filename, data, len, &error))
- {
- DEBUG ("Failed to write file: %s", error->message);
-
- g_free (data);
- g_error_free (error);
- return FALSE;
- }
-
- g_free (data);
-
- return TRUE;
-}
-
-
-static void
-mcp_account_manager_goa_ready (const McpAccountStorage *self,
- const McpAccountManager *am)
-{
- McpAccountManagerGoaPrivate *priv = GET_PRIVATE (self);
-
- priv->ready = TRUE;
-}
-
-
-static guint
-mcp_account_manager_goa_get_restrictions (const McpAccountStorage *self,
- const gchar *account)
-{
- return TP_STORAGE_RESTRICTION_FLAG_CANNOT_SET_PARAMETERS |
- TP_STORAGE_RESTRICTION_FLAG_CANNOT_SET_SERVICE;
-}
-
-
-static void
-mcp_account_manager_goa_get_identifier (const McpAccountStorage *self,
- const gchar *acc,
- GValue *identifier)
-{
- McpAccountManagerGoaPrivate *priv = GET_PRIVATE (self);
- GoaObject *object;
- GoaAccount *account;
-
- object = g_hash_table_lookup (priv->accounts, acc);
- g_return_if_fail (object != NULL);
-
- account = goa_object_peek_account (object);
- g_return_if_fail (account != NULL);
-
- g_value_init (identifier, G_TYPE_STRING);
- g_value_set_string (identifier, goa_account_get_id (account));
-}
-
-
-static void
-account_storage_iface_init (McpAccountStorageIface *iface)
-{
- iface->name = PLUGIN_NAME;
- iface->desc = PLUGIN_DESCRIPTION;
- iface->priority = PLUGIN_PRIORITY;
- iface->provider = PLUGIN_PROVIDER;
-
-#define IMPLEMENT(x) iface->x = mcp_account_manager_goa_##x
- IMPLEMENT (get);
- IMPLEMENT (list);
- IMPLEMENT (set);
- IMPLEMENT (delete);
- IMPLEMENT (commit);
- IMPLEMENT (ready);
- IMPLEMENT (get_restrictions);
- IMPLEMENT (get_identifier);
-#undef IMPLEMENT
-}
diff --git a/goa-mc-plugin/mcp-account-manager-goa.h b/goa-mc-plugin/mcp-account-manager-goa.h
deleted file mode 100644
index bc4cfde6..00000000
--- a/goa-mc-plugin/mcp-account-manager-goa.h
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * mcp-account-manager-goa.h
- *
- * McpAccountManagerGoa - a Mission Control plugin to expose GNOME Online
- * Accounts with chat capabilities (e.g. Facebook) to Mission Control
- *
- * Copyright (C) 2010-2011 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, see <http://www.gnu.org/licenses/>.
- *
- * Authors:
- * Danielle Madeley <danielle.madeley@collabora.co.uk>
- */
-
-#include <mission-control-plugins/mission-control-plugins.h>
-
-#ifndef __MCP_ACCOUNT_MANAGER_GOA_H__
-#define __MCP_ACCOUNT_MANAGER_GOA_H__
-
-G_BEGIN_DECLS
-
-#define MCP_TYPE_ACCOUNT_MANAGER_GOA (mcp_account_manager_goa_get_type ())
-#define MCP_ACCOUNT_MANAGER_GOA(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), MCP_TYPE_ACCOUNT_MANAGER_GOA, McpAccountManagerGoa))
-#define MCP_ACCOUNT_MANAGER_GOA_CLASS(obj) (G_TYPE_CHECK_CLASS_CAST ((obj), MCP_TYPE_ACCOUNT_MANAGER_GOA, McpAccountManagerGoaClass))
-#define MCP_IS_ACCOUNT_MANAGER_GOA(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), MCP_TYPE_ACCOUNT_MANAGER_GOA))
-#define MCP_IS_ACCOUNT_MANAGER_GOA_CLASS(obj) (G_TYPE_CHECK_CLASS_TYPE ((obj), MCP_TYPE_ACCOUNT_MANAGER_GOA))
-#define MCP_ACCOUNT_MANAGER_GOA_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), MCP_TYPE_ACCOUNT_MANAGER_GOA, McpAccountManagerGoaClass))
-
-typedef struct _McpAccountManagerGoa McpAccountManagerGoa;
-typedef struct _McpAccountManagerGoaClass McpAccountManagerGoaClass;
-typedef struct _McpAccountManagerGoaPrivate McpAccountManagerGoaPrivate;
-
-struct _McpAccountManagerGoa
-{
- GObject parent;
-
- McpAccountManagerGoaPrivate *priv;
-};
-
-struct _McpAccountManagerGoaClass
-{
- GObjectClass parent_class;
-};
-
-GType mcp_account_manager_goa_get_type (void);
-
-G_END_DECLS
-
-#endif
diff --git a/goa-mc-plugin/mission-control-plugin.c b/goa-mc-plugin/mission-control-plugin.c
deleted file mode 100644
index d4e8ae29..00000000
--- a/goa-mc-plugin/mission-control-plugin.c
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * mission-control-plugin.c
- *
- * A Mission Control plugin to expose GNOME Online Accounts with chat
- * capabilities (e.g. Facebook) to Mission Control
- *
- * Copyright (C) 2010-2011 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, see <http://www.gnu.org/licenses/>.
- *
- * Authors:
- * Danielle Madeley <danielle.madeley@collabora.co.uk>
- */
-
-#include "config.h"
-
-#include "mcp-account-manager-goa.h"
-
-GObject *
-mcp_plugin_ref_nth_object (guint n)
-{
- static void *plugin_0 = NULL;
-
- switch (n)
- {
- case 0:
- if (plugin_0 == NULL)
- plugin_0 = g_object_new (MCP_TYPE_ACCOUNT_MANAGER_GOA, NULL);
- else
- g_object_ref (plugin_0);
-
- return plugin_0;
-
- default:
- return NULL;
- }
-}
diff --git a/help/.gitignore b/help/.gitignore
deleted file mode 100644
index 89cbe39a..00000000
--- a/help/.gitignore
+++ /dev/null
@@ -1,6 +0,0 @@
-*.mo
-*.omf
-*/*.stamp
-*/*.page
-*/*.xml
-!/C
diff --git a/help/C/account-irc.page b/help/C/account-irc.page
deleted file mode 100644
index 4b4b9277..00000000
--- a/help/C/account-irc.page
+++ /dev/null
@@ -1,162 +0,0 @@
-<page xmlns="http://projectmallard.org/1.0/"
- xmlns:its="http://www.w3.org/2005/11/its"
- xmlns:e="http://projectmallard.org/experimental/"
- type="topic" style="screen"
- id="account-irc">
-
- <info>
- <link type="guide" xref="irc-manage#manage"/>
- <desc>Additional information necessary for connecting to IRC networks.</desc>
- <revision pkgversion="2.28" version="0.1" date="2009-08-31" status="review">
- <!--
- <e:review by="shaunm@gnome.org" date="2009-08-31" status="done"/>
- -->
- </revision>
- <revision pkgversion="2.30" version="0.2" date="2010-04-19" status="review"/>
- <credit type="author">
- <name>Shaun McCance</name>
- <email its:translate="no">shaunm@gnome.org</email>
- </credit>
- <license>
- <p>Creative Commons Share Alike 3.0</p>
- </license>
-<!--
- <copyright>
- <year>2009</year>
- <name>GNOME Documentation Project</name>
- </copyright>
- <include href="legal.xml" xmlns="http://www.w3.org/2001/XInclude"/>
--->
- </info>
-
- <title>IRC account details</title>
-
- <p>IRC accounts require different information than many other types of
- accounts. To create an IRC account, you must specify at least an IRC
- network and a nickname. This page details the information you can
- provide for an IRC account.</p>
-
- <note style="info package">
- <p>You must have the <sys>telepathy-idle</sys> package installed to use IRC
- in <app>Empathy</app>.</p>
- </note>
-
- <terms>
- <item>
- <title><gui>Network</gui></title>
- <p>IRC is an open system that allows people to run separate IRC
- networks. Each network is distinct and has its own users and
- chat rooms. <app>Empathy</app> lists the most popular networks
- in the <gui>Network</gui> drop-down list. You can add additional
- networks. See <link xref="#networks"/> below.</p>
- </item>
- <item>
- <title><gui>Nickname</gui></title>
- <p>Your nickname is your unique name on the IRC network. Only one
- person on a network may use a given nickname. If you get an error
- message that says <link xref="prob-conn-name" role="error-msg"/>
- you will need to change your nickname.</p>
- </item>
- <item>
- <title><gui>Password</gui></title>
- <p>Some servers, particularly those on private networks, require
- a password to connect. If you are authorized to use the network,
- the network administrators should provide you with a password.</p>
- <note>
- <title>NickServ Passwords</title>
- <p>On some networks, nicknames can be registered using a service
- known as NickServ. <app>Empathy</app> does not directly support
- nickname passwords. On some networks, including the popular
- freenode network, server passwords are automatically forwarded
- to NickServ, allowing you to set this field to identify yourself
- with NickServ. See <link xref="irc-nick-password"/> for more
- details.</p>
- </note>
- </item>
- <item>
- <title><gui>Real name</gui></title>
- <p>You can provide your real name in addition to your nickname. Other
- users will be able to see this when they view your information.</p>
- </item>
- <item>
- <title><gui>Quit message</gui></title>
- <p>When you go offline, a quit message is sent to all the chat rooms
- you’re in and to all the users you’re having a private conversation
- with. Use this field to provide a custom quit message.</p>
- </item>
- </terms>
-
-<!--
-telepathy-idle note
--->
-
- <section id="networks">
- <info>
- <title type="link">IRC Networks</title>
- </info>
-
- <title>Networks</title>
-
- <p><app>Empathy</app> includes a list of popular IRC networks. If you
- wish to another IRC network, you can add it to the list. You can also
- modify networks and remove them from the list.</p>
-
- <list>
- <item><p>To add a network to the list, click <media type="image"
- mime="image/png" src="figures/gtk-add.png" width="16"
- height="16" its:translate="no"><span
- its:translate="yes">Add</span></media>.</p></item>
- <item><p>To modify a network in the list, select the network and click
- <media type="image" mime="image/png" src="figures/gtk-edit.png" width="16"
- height="16" its:translate="no"><span
- its:translate="yes">Edit</span></media>.</p></item>
- <item><p>To remove a network from the list, select the network and
- click <media type="image" mime="image/png" src="figures/gtk-remove.png"
- width="16" height="16" its:translate="no"><span
- its:translate="yes">Remove</span></media>.</p></item>
- </list>
-
- <p>When adding or modifying a network, you can enter the following
- information:</p>
-
- <terms>
- <item>
- <title><gui>Network</gui></title>
- <p>This is the name of the network as you want it to appear in
- the list of networks.</p>
- </item>
- <item>
- <title><gui>Charset</gui></title>
- <p>This specifies the character encoding that is typically used on
- this network. A character encoding is a specific way of recording
- characters internally in a computer. There are many character
- encodings, and you need to use the same character encoding as other
- users to see their messages correctly.</p>
- <!--
- Translators: Recommend character encodings that are common
- for your language.
- -->
- <p>By default, <app>Empathy</app> uses UTF-8, a modern character
- encoding that can handle text from most of the world's languages.
- Another common encoding for English and some other Western languages
- is ISO-8859-1.</p>
- </item>
- <item>
- <title><gui>Servers</gui></title>
- <p>An IRC network may have many servers you can connect to. When
- you are connected to a server on a particular network, you can
- communicate with all users on all other servers on that network.
- You can add and remove servers for this network using the
- <gui>Add</gui> and <gui>Remove</gui> buttons.</p>
- <p>When a server is selected, click the field under <gui>Server</gui>
- or <gui>Port</gui> to edit it. Alternatively, use the left and right
- arrow keys to focus the field, and press the space bar to begin
- editing.</p>
- <p>Select the check box in the <gui>SSL</gui> column to encrypt
- all communication with a server. Note that this does not prevent
- other users on the network from seeing what you write on public
- chat rooms.</p>
- </item>
- </terms>
- </section>
-</page>
diff --git a/help/C/account-jabber.page b/help/C/account-jabber.page
deleted file mode 100644
index 116d7d1b..00000000
--- a/help/C/account-jabber.page
+++ /dev/null
@@ -1,78 +0,0 @@
-<page xmlns="http://projectmallard.org/1.0/"
- xmlns:e="http://projectmallard.org/experimental/"
- type="topic" style="screen"
- id="account-jabber">
-
- <info>
- <desc>Advanced options for Jabber and Google Talk accounts.</desc>
- <revision pkgversion="2.28" version="0.1" date="2009-08-27" status="review">
- <!--
- <e:review by="shaunm@gnome.org" date="2009-08-31" status="done"/>
- -->
- </revision>
- <credit type="author">
- <name>Shaun McCance</name>
- <email>shaunm@gnome.org</email>
- </credit>
- <license>
- <p>Creative Commons Share Alike 3.0</p>
- </license>
-<!--
- <copyright>
- <year>2009</year>
- <name>GNOME Documentation Project</name>
- </copyright>
- <include href="legal.xml" xmlns="http://www.w3.org/2001/XInclude"/>
--->
- </info>
-
- <title>Jabber account details</title>
-
- <p>Most Jabber accounts will require only a login ID and a password
- to connect. For some accounts or on certain types of networks, you
- may need to enter additional information in the <gui>Advanced</gui>
- section. Normally, you will not need to use the advanced options
- below. For general instructions on adding an account, see
- <link xref="add-account"/>.</p>
-
- <note>
- <p>Google Talk is a type of Jabber account. These instructions
- hold for Google Talk accounts as well.</p>
- </note>
-
- <terms>
- <item>
- <title><gui>Encryption required (TLS/SSL)</gui></title>
- <title><gui>Ignore SSL certificate errors</gui></title>
- <p>Whenever possible, communication between <app>Empathy</app> and
- the Jabber server is encrypted. If encrypted communication is not
- possible, messages may be sent unencrypted. Select <gui>Encryption
- required</gui> to prevent <app>Empathy</app> from communicating with
- the Jabber server when encryption is not possible.</p>
- <p>Some Jabber servers may encrypt data using invalid certificates,
- or using certificates from unknown authorities. If you trust the
- server you are connecting to, you can select <gui>Ignore SSL
- certificate errors</gui> to allow encrypted communication with
- invalid certificates.</p>
- </item>
- <item>
- <title><gui>Resource</gui></title>
- <title><gui>Priority</gui></title>
- <p>If you have multiple applications (for instance, on separate computers)
- connected to your account at the same time, you can set a resource to
- uniquely identify each one. By default, <app>Empathy</app> will use
- <input>Telepathy</input> as the resource.</p>
- <p>You can set the priority to specify which application should receive
- incoming messages from your contacts. New messages will be sent to the
- application with the highest priority.</p>
- </item>
- <item>
- <title><gui>Override server settings</gui></title>
- <p><app>Empathy</app> will use default settings to connect to the
- Jabber server based on your login ID. For some Jabber servers, you
- will need to enter custom server settings manually. These settings
- should be provided for you by your Jabber provider.</p>
- </item>
- </terms>
-
-</page>
diff --git a/help/C/accounts-window.page b/help/C/accounts-window.page
deleted file mode 100644
index c8839bab..00000000
--- a/help/C/accounts-window.page
+++ /dev/null
@@ -1,48 +0,0 @@
-<page xmlns="http://projectmallard.org/1.0/"
- xmlns:e="http://projectmallard.org/experimental/"
- type="guide"
- id="accounts-window">
-
- <info>
- <link type="topic" xref="add-account"/>
- <link type="topic" xref="disable-account"/>
- <link type="topic" xref="remove-account"/>
- <desc>Add, modify, and delete accounts.</desc>
- <revision pkgversion="2.28" version="0.1" date="2009-08-26" status="review">
- <!--
- <e:review by="shaunm@gnome.org" date="2009-08-31" status="done"/>
- -->
- </revision>
- <credit type="author">
- <name>Shaun McCance</name>
- <email>shaunm@gnome.org</email>
- </credit>
- <license>
- <p>Creative Commons Share Alike 3.0</p>
- </license>
-<!--
- <copyright>
- <year>2009</year>
- <name>GNOME Documentation Project</name>
- </copyright>
- <include href="legal.xml" xmlns="http://www.w3.org/2001/XInclude"/>
--->
- </info>
-
- <title>Accounts Window</title>
-
- <p>The <gui>Accounts</gui> window allows you to add, modify, and delete
- accounts.</p>
-
- <section id="details">
- <info>
- <link type="topic" xref="account-jabber"/>
- <link type="topic" xref="account-irc"/>
- </info>
- <title>Account Details</title>
- <p>For most types of accounts, you can simply enter a login ID and
- a password. Certain accounts or account types, however, may require
- additional information.</p>
- </section>
-
-</page>
diff --git a/help/C/add-account.page b/help/C/add-account.page
deleted file mode 100644
index cdeb4b8d..00000000
--- a/help/C/add-account.page
+++ /dev/null
@@ -1,86 +0,0 @@
-<page xmlns="http://projectmallard.org/1.0/"
- xmlns:e="http://projectmallard.org/experimental/"
- type="guide" style="task"
- id="add-account">
-
- <info>
- <link type="guide" xref="index#accounts"/>
- <link type="seealso" xref="remove-account"/>
- <desc>Add a new account to <app>Empathy</app>.</desc>
- <revision pkgversion="2.28" version="0.1" date="2009-06-24" status="draft"/>
- <revision pkgversion="2.28" version="0.1" date="2009-08-10" status="review"/>
- <revision pkgversion="2.28" version="0.2" date="2009-08-27" status="review">
- <!--
- <e:review by="shaunm@gnome.org" date="2009-08-31" status="done"/>
- -->
- </revision>
- <revision pkgversion="2.30" version="0.3" date="2010-02-03" status="review"/>
- <revision pkgversion="2.30" version="0.4" date="2010-04-19" status="review"/>
- <revision pkgversion="3.2" version="0.5" date="2011-12-19" status="review"/>
- <credit type="author">
- <name>Milo Casagrande</name>
- <email>milo@ubuntu.com</email>
- </credit>
- <credit type="author">
- <name>Shaun McCance</name>
- <email>shaunm@gnome.org</email>
- </credit>
- <license>
- <p>Creative Commons Share Alike 3.0</p>
- </license>
-<!--
- <copyright>
- <year>2009</year>
- <name>GNOME Documentation Project</name>
- </copyright>
- <include href="legal.xml" xmlns="http://www.w3.org/2001/XInclude"/>
--->
- </info>
-
- <title>Add a new account</title>
-
- <p>You can add instant messaging accounts from any supported service to communicate
- with all of your contacts in <app>Empathy</app>. For some account providers,
- these steps will also allow you to register for a new account. For more details,
- see <link xref="create-account"/>.</p>
-
- <steps>
- <item>
- <p>From the <gui>Contact List</gui> window, choose <guiseq><gui>Edit</gui>
- <gui>Accounts</gui></guiseq>, or press <key>F4</key>.</p>
- </item>
- <item>
- <p>
- Click <gui style="button">+</gui>.
- </p>
- </item>
- <item>
- <p>From the <gui>Protocol</gui> drop-down list, select the type of account you wish
- to add.</p>
- </item>
- <item>
- <p>If you do not already have a registered account, select
- <gui>Create a new account on the server</gui>.
- This feature is not available for all account types, and may not work with
- some account providers. See <link xref="create-account"/> for more
- information.</p>
- </item>
- <item>
- <p>Enter the required information. For most accounts, you will only need
- a login ID and a password. Some accounts may require additional information.
- See <link xref="accounts-window#details"/>for more information.</p>
- </item>
- <item>
- <p>
- Click <gui style="button">Apply</gui>.
- </p>
- </item>
- </steps>
-
- <note style="tip">
- <p>To change the name that identifies the account in the <gui>Accounts</gui>
- window, select the account from the list on the left and either click on the
- name or press the space bar. Edit the account name and press <key>Enter</key>
- when you’re finished.</p>
- </note>
-</page>
diff --git a/help/C/add-contact.page b/help/C/add-contact.page
deleted file mode 100644
index 3426cd6f..00000000
--- a/help/C/add-contact.page
+++ /dev/null
@@ -1,67 +0,0 @@
-<page xmlns="http://projectmallard.org/1.0/"
- xmlns:e="http://projectmallard.org/experimental/"
- type="topic" style="task"
- id="add-contact">
-
- <info>
- <link type="guide" xref="index#contacts"/>
- <link type="seealso" xref="hide-contacts"/>
- <desc>Add someone to the contact list.</desc>
- <revision pkgversion="2.28" version="0.1" date="2009-06-15" status="draft"/>
- <revision pkgversion="2.28" version="0.2" date="2009-08-10" status="review">
- <!--
- <e:review by="shaunm@gnome.org" date="2009-08-31" status="done"/>
- -->
- </revision>
- <revision pkgversion="2.28" version="0.3" date="2009-09-05" status="review"/>
- <credit type="author">
- <name>Phil Bull</name>
- <email>philbull@gmail.com</email>
- </credit>
- <license>
- <p>Creative Commons Share Alike 3.0</p>
- </license>
-<!--
- <copyright>
- <year>2009</year>
- <name>GNOME Documentation Project</name>
- </copyright>
- <include href="legal.xml" xmlns="http://www.w3.org/2001/XInclude"/>
--->
- </info>
-
- <title>Add someone to your list of contacts</title>
-
- <steps>
- <item>
- <p>Choose <guiseq><gui>Chat</gui><gui>Add Contact</gui></guiseq>.</p>
- </item>
- <item>
- <p>From the <gui>Account</gui> drop-down list, select the account you wish
- to use to connect to your contact. Your contact will need to be using the
- same service as the account you select.</p>
- </item>
- <item>
- <p>In the <gui>Identifier</gui> field, enter your contact’s login ID, username,
- screen name, or other appropriate identifier for the service type.</p>
- </item>
- <item>
- <p>In the <gui>Alias</gui> field, type your contact’s name as you would like
- it to appear in your contact list.</p>
- </item>
- <item>
- <p>
- Click <gui>Add</gui> to add the person to your list of
- contacts.
- </p>
- </item>
- </steps>
-
- <note>
- <p>
- To add a new person to your list of contacts, you need to be
- connected to the Internet and to your account.
- </p>
- </note>
-
-</page>
diff --git a/help/C/audio-call.page b/help/C/audio-call.page
deleted file mode 100644
index 4d9707f3..00000000
--- a/help/C/audio-call.page
+++ /dev/null
@@ -1,95 +0,0 @@
-<page xmlns="http://projectmallard.org/1.0/"
- xmlns:e="http://projectmallard.org/experimental/"
- xmlns:its="http://www.w3.org/2005/11/its"
- type="topic" style="task"
- id="audio-call">
-
- <info>
- <link type="guide" xref="index#audio-video"/>
- <link type="seealso" xref="audio-video"/>
- <desc>Call your contacts over the Internet.</desc>
- <revision pkgversion="2.28" version="0.1" date="2009-08-02" status="stub"/>
- <revision pkgversion="2.28" version="0.2" date="2009-08-07" status="review">
- <!--
- <e:review by="shaunm@gnome.org" date="2009-09-04" status="done"/>
- -->
- </revision>
- <revision pkgversion="2.30" version="0.3" date="2010-02-14" status="review"/>
- <revision pkgversion="2.32" version="0.4" date="2010-09-09" status="review"/>
- <revision pkgversion="3.8" version="0.4" date="2013-04-15" status="review"/>
-
- <credit type="author">
- <name>Milo Casagrande</name>
- <email its:translate="no">milo@ubuntu.com</email>
- </credit>
- <credit type="author">
- <name>Ekaterina Gerasimova</name>
- <email its:translate="no">kittykat3756@gmail.com</email>
- </credit>
-
- <license>
- <p>Creative Commons Share Alike 3.0</p>
- </license>
- </info>
-
- <title>Start an audio conversation</title>
-
- <p>You can call your contacts and have an audio conversation with them. This
- features only works with certain types of accounts and it requires the other
- person to have an application that supports audio calls.</p>
-
- <steps>
- <item>
- <p>
- Right-click on the contact that you want to call and select
- <gui style="menuitem">Audio Call</gui>.
- </p>
- </item>
- <item>
- <p>
- A new window will open. When the connection is established, you will
- see the total conversation time at the bottom of the window.
- </p>
- </item>
- <item>
- <p>
- To end the conversation, click the <gui style="button">hand up</gui>
- button.
- </p>
- </item>
- </steps>
-
- <note style="tip">
- <p>
- To turn an audio conversation into a video conversation, choose
- <guiseq><gui style="menu">Video</gui>
- <gui style="menuitem">Video On</gui></guiseq>.
- </p>
- </note>
-
- <section id="audio-meta-contact">
- <title>Start an audio conversation with a meta-contact</title>
- <steps>
- <item>
- <p>
- From the <gui>Contact List</gui> window, right-click on the meta-contact.
- </p>
- </item>
- <item>
- <p>
- Select the contact you want to have the conversation, and from the menu
- select <gui style="menuitem">Audio Call</gui>.
- </p>
- </item>
- </steps>
- <note style="tip">
- <p>
- To recognize if a contact is a <em>meta-contact</em>, move your mouse on
- a contact in the <gui>Contact List</gui> window, and stop over it for a
- second: a small pop-up message will appear showing the number of the
- contacts that form the meta-contact.
- </p>
- </note>
- </section>
-
-</page>
diff --git a/help/C/audio-video.page b/help/C/audio-video.page
deleted file mode 100644
index d442db64..00000000
--- a/help/C/audio-video.page
+++ /dev/null
@@ -1,224 +0,0 @@
-<page xmlns="http://projectmallard.org/1.0/"
- xmlns:e="http://projectmallard.org/experimental/"
- type="topic"
- id="audio-video">
-
- <info>
- <link type="guide" xref="index#audio-video"/>
- <desc>Information on when it is possible to have an audio or video conversation.</desc>
- <revision pkgversion="2.28" version="0.1" date="2009-08-02" status="draft"/>
- <revision pkgversion="2.28" version="0.1" date="2009-08-14" status="review">
- <!--
- <e:review by="shaunm@gnome.org" date="2009-09-04" status="done"/>
- -->
- </revision>
- <revision pkgversion="2.30" version="0.2" date="2010-02-14" status="review"/>
- <credit type="author">
- <name>Milo Casagrande</name>
- <email>milo@ubuntu.com</email>
- </credit>
- <license>
- <p>Creative Commons Share Alike 3.0</p>
- </license>
-<!--
- <copyright>
- <year>2009</year>
- <name>GNOME Documentation Project</name>
- </copyright>
- <include href="legal.xml" xmlns="http://www.w3.org/2001/XInclude"/>
--->
- </info>
-
- <title>Audio and video support</title>
-
- <p>You can only have audio and video conversation with contacts who are using
- an application which also supports this feature. When your contacts support
- audio or video conversations, you will see the following icons next to their
- names in the contact list:</p>
-
- <table frame="all" rules="cols rowgroups" shade="rows">
- <thead>
- <tr>
- <td>
- <p>
- Icon
- </p>
- </td>
- <td>
- <p>
- Description
- </p>
- </td>
- </tr>
- </thead>
- <tbody>
- <tr>
- <td>
- <p>
- <media type="image" mime="image/png" src="figures/audio-input-microphone.png">
- Icon for audio conversation
- </media>
- </p>
- </td>
- <td>
- <p>The contact is able to have an audio conversation.</p>
- </td>
- </tr>
- <tr>
- <td>
- <p>
- <media type="image" mime="image/png" src="figures/camera-web.png">
- Icon for video conversation
- </media>
- </p>
- </td>
- <td>
- <p>The contact is able to have a video conversation.</p>
- </td>
- </tr>
- </tbody>
- </table>
-
- <note>
- <p>
- In order to have an audio conversation, you need to have a sound card that is
- supported by your operating system, and a working microphone.
- </p>
- <p>
- In order to have a video conversation, you need to have a webcam that is
- supported by your operating system, and a working microphone.
- </p>
- </note>
-
- <section id="services">
-
- <title>Supported Account Types</title>
-
- <p>You can only have audio and video conversations using accounts on
- certain supported services. The following table lists whether audio
- and video is supported for each type of account.</p>
-
- <note>
- <p>Account types are provided by plugins. Your system may not have
- all of the following types available, or it may have types not listed
- here. Updated plugins may make audio or video conversations possible
- on account types that are listed as unsupported here.</p>
- </note>
-
- <comment>
- <cite date="2009-09-04">Shaun McCance</cite>
- <p>I'd like to do tables like this using nothing for No and ✔ for Yes, but
- we need to look at the accessibility impact. I've
- <link href="http://mail.gnome.org/archives/gnome-doc-list/2009-September/msg00006.html">asked
- the accessibility team</link> for input.</p>
- </comment>
-
- <comment>
- <cite date="2009-09-04">Shaun McCance</cite>
- <p>There's recent work on telepathy-butterfly and papyon to support
- audio and video for MSN. It might be released in time for 2.28, but
- since it doesn't follow the Gnome release schedule, I can't be sure.
- If it looks like it's going to ship, let's mark it Yes.</p>
- </comment>
-
- <table frame="all" rules="rowgroups colgroups" shade="rows">
- <colgroup><col/></colgroup><colgroup><col/><col/></colgroup>
- <thead>
- <tr>
- <td><p>Service</p></td>
- <td><p>Audio</p></td>
- <td><p>Video</p></td>
- </tr>
- </thead>
- <tbody>
- <tr>
- <td><p>AIM</p></td>
- <td><p>No</p></td>
- <td><p>No</p></td>
- </tr>
- <tr>
- <td><p>Facebook Chat</p></td>
- <td><p>No</p></td>
- <td><p>No</p></td>
- </tr>
- <tr>
- <td><p>gadugadu</p></td>
- <td><p>No</p></td>
- <td><p>No</p></td>
- </tr>
- <tr>
- <td><p>Google Talk</p></td>
- <td><p>Yes</p></td>
- <td><p>Yes</p></td>
- </tr>
- <tr>
- <td><p>Groupwise</p></td>
- <td><p>No</p></td>
- <td><p>No</p></td>
- </tr>
- <tr>
- <td><p>ICQ</p></td>
- <td><p>No</p></td>
- <td><p>No</p></td>
- </tr>
- <tr>
- <td><p>IRC</p></td>
- <td><p>No</p></td>
- <td><p>No</p></td>
- </tr>
- <tr>
- <td><p>Jabber</p></td>
- <td><p>Yes</p></td>
- <td><p>Yes</p></td>
- </tr>
- <tr>
- <td><p>MSN</p></td>
- <td><p>Yes</p></td>
- <td><p>Yes</p></td>
- </tr>
- <tr>
- <td><p>myspace</p></td>
- <td><p>No</p></td>
- <td><p>No</p></td>
- </tr>
- <tr>
- <td><p>qq</p></td>
- <td><p>No</p></td>
- <td><p>No</p></td>
- </tr>
- <tr>
- <td><p>People Nearby</p></td>
- <td><p>No</p></td>
- <td><p>No</p></td>
- </tr>
- <tr>
- <td><p>sametime</p></td>
- <td><p>No</p></td>
- <td><p>No</p></td>
- </tr>
- <tr>
- <td><p>silc</p></td>
- <td><p>No</p></td>
- <td><p>No</p></td>
- </tr>
- <tr>
- <td><p>SIP</p></td>
- <td><p>Yes</p></td>
- <td><p>Yes</p></td>
- </tr>
- <tr>
- <td><p>Yahoo!</p></td>
- <td><p>No</p></td>
- <td><p>No</p></td>
- </tr>
- <tr>
- <td><p>zephyr</p></td>
- <td><p>No</p></td>
- <td><p>No</p></td>
- </tr>
- </tbody>
- </table>
-
- </section>
-
-</page>
diff --git a/help/C/change-status.page b/help/C/change-status.page
deleted file mode 100644
index 2897a504..00000000
--- a/help/C/change-status.page
+++ /dev/null
@@ -1,67 +0,0 @@
-<page xmlns="http://projectmallard.org/1.0/"
- xmlns:e="http://projectmallard.org/experimental/"
- type="topic" style="task"
- id="change-status">
-
- <info>
- <link type="guide" xref="index#accounts"/>
- <link type="seealso" xref="status-icons"/>
- <desc>
- Change your status to advertise your availability to your contacts.
- </desc>
- <revision pkgversion="2.28" version="0.1" date="2009-06-14" status="draft"/>
- <revision pkgversion="2.28" version="0.2" date="2009-08-10" status="review">
- <!--
- <e:review by="shaunm@gnome.org" date="2009-09-01" status="done"/>
- -->
- </revision>
- <revision pkgversion="3.2" version="0.3" date="2011-12-18" status="review">
- <!--
- <e:review by="milo@ubuntu.com" date="2011-12-18" status="done"/>
- -->
- </revision>
- <credit type="author">
- <name>Phil Bull</name>
- <email>philbull@gmail.com</email>
- </credit>
- <license>
- <p>Creative Commons Share Alike 3.0</p>
- </license>
-<!--
- <copyright>
- <year>2009</year>
- <name>GNOME Documentation Project</name>
- </copyright>
- <include href="legal.xml" xmlns="http://www.w3.org/2001/XInclude" />
--->
- </info>
-
- <title>Change your status</title>
-
- <p>You can set your status to indicate your availability to your contacts.
- <app>Empathy</app> allows you to select from a list of defined statuses.</p>
-
- <steps>
- <item>
- <p>
- Click on the drop-down list at the top of the <gui>Contact List</gui> window.
- </p>
- </item>
- <item>
- <p>
- Select a status from the list.
- </p>
- </item>
- </steps>
-
- <p>See <link xref="status-icons"/> for a list of the built-in statuses
- and what they mean. You can also <link xref="set-custom-status">add
- custom status messages</link> to provide more information about your
- availability to your contacts.</p>
-
- <note>
- <p>If you do not use your computer for a while, or if the screensaver is on,
- the status will be automatically set to Away.</p>
- </note>
-
-</page>
diff --git a/help/C/create-account.page b/help/C/create-account.page
deleted file mode 100644
index 3535a37b..00000000
--- a/help/C/create-account.page
+++ /dev/null
@@ -1,147 +0,0 @@
-<page xmlns="http://projectmallard.org/1.0/"
- xmlns:its="http://www.w3.org/2005/11/its"
- xmlns:e="http://projectmallard.org/experimental/"
- type="topic" style="task"
- id="create-account">
-
- <info>
- <link type="guide" xref="add-account"/>
- <revision pkgversion="2.28" version="0.1" date="2009-06-21" status="draft"/>
- <revision pkgversion="2.28" version="0.2" date="2009-08-07" status="review">
- <!--
- <e:review by="shaunm@gnome.org" date="2009-09-02" status="done"/>
- -->
- </revision>
- <revision pkgversion="2.30" version="0.3" date="2010-04-19" status="review"/>
- <revision pkgversion="2.30" version="0.4" date="2010-10-01" status="review"/>
- <revision pkgversion="3.10" date="2013-06-23" status="review"/>
-
- <credit type="author">
- <name>Milo Casagrande</name>
- <email its:translate="no">milo@ubuntu.com</email>
- </credit>
- <credit type="editor">
- <name>Ekaterina Gerasimova</name>
- <email its:translate="no">kittykat3756@gmail.com</email>
- </credit>
-
- <license>
- <p>Creative Commons Share Alike 3.0</p>
- </license>
-
- <desc>Create an account for one of the supported messaging services.</desc>
-
- </info>
-
- <title>Register a new account</title>
-
- <p>Most account types require you to create an account with a service
- provider before you can use that account with instant messaging applications.
- You can use <app>Empathy</app> to register for a new account with some
- account providers using the same steps as you would to
- <link xref="add-account">add an account</link>.</p>
-
- <p>Once you create a new account, your account provider should give you a
- login or a username and a password, as well as any additional information you
- need to connect using <app>Empathy</app>.</p>
-
- <section id="irc">
- <title>IRC</title>
-
- <p>IRC networks require that you specify a nick (nickname) when you connect
- to the server. Some IRC networks use a service, such as NickServ, to allow
- users to <link xref="irc-nick-password">protect their nick</link>. If you
- did not register your nick or are unable to do so and another user is using
- it, then you will need to choose a different one.</p>
-
- <p>Some IRC servers are password protected. You will need to know the
- password to connect to these servers. Generally, these are private IRC
- networks.</p>
-
- <note>
- <p>Many GNOME projects use <code>irc.gnome.org</code> for project-related
- discussion.</p>
- </note>
- </section>
-
- <section id="facebook">
- <title>Facebook</title>
-
- <p>Facebook is one of the more popular social networks. It allows users to
- create their own profile and to communicate with their friends.</p>
-
- <p>To use Facebook to communicate with your friends, you will need to
- create a new account from the website:
- <link href="https://www.facebook.com">www.facebook.com</link>.</p>
- </section>
-
- <section id="jabber">
- <title>Jabber</title>
-
- <p>Jabber is an open instant messaging system. Like email, Jabber allows
- you to choose your account provider and communicate with all other Jabber
- users, regardless of their account provider.</p>
-
- <p>You will need to create a new account with a Jabber provider. There are
- many free providers; one popular provider is
- <link href="http://register.jabber.org/">jabber.org</link>.</p>
-
- <note>
- <p>If you use Gmail or Google+ Hangouts, you already have a Jabber
- account. Use your Gmail address and password in <app>Empathy</app> to
- connect.</p>
- </note>
- </section>
-
- <section id="salut">
- <title>People Nearby</title>
-
- <p>This service works whenever you are connected to a local network, such
- as a wireless hotspot, you do not need to create an account with service
- providor, just set up your account through <app>Empathy</app>. It
- automatically finds all other users on the network who are also using this
- service.</p>
-
- <p>For more information, see the <link xref="salut-protocol">salut
- protocol</link>.</p>
- </section>
-
- <section id ="sip-services">
- <title>SIP</title>
-
- <p>SIP is an open system which allows users to have audio and video
- conversations over the Internet. You need to create an account with
- a SIP provider. You can communicate with all other SIP users,
- regardless of which SIP provider they use.</p>
-
- <p>Some SIP providers allow you to call normal phones from your computer.
- Generally, you will need to subscribe to a paid service for this
- feature.</p>
- </section>
-
- <section id="proprietary-services">
- <title>Proprietary Services</title>
-
- <p>There are many proprietary instant messaging services that have been
- developed by different companies or organizations. <app>Empathy</app>
- allows you to connect to an existing account for some of these services.
- To create a new account with one of these services, you will need to
- visit the website for the service.</p>
-
- <list>
- <item>
- <p><link href="http://dashboard.aim.com/aim">AIM</link></p>
- </item>
- <item>
- <p><link href="https://www.icq.com/register/">ICQ</link></p>
- </item>
- <item>
- <p><link href="https://accountservices.passport.net">MSN</link></p>
- </item>
- <item>
- <p><link href="https://login.yahoo.com/config/login">Yahoo!</link></p>
- </item>
- </list>
- </section>
-
-</page>
diff --git a/help/C/disable-account.page b/help/C/disable-account.page
deleted file mode 100644
index eb23d07c..00000000
--- a/help/C/disable-account.page
+++ /dev/null
@@ -1,65 +0,0 @@
-<page xmlns="http://projectmallard.org/1.0/"
- xmlns:e="http://projectmallard.org/experimental/"
- type="topic" style="task"
- id="disable-account">
-
- <info>
- <link type="guide" xref="index#accounts"/>
- <link type="seealso" xref="remove-account"/>
- <desc>Prevent <app>Empathy</app> from automatically logging in to an account.</desc>
- <revision pkgversion="2.28" version="0.1" date="2009-06-14" status="draft"/>
- <revision pkgversion="2.28" version="0.2" date="2009-08-10" status="review"/>
- <revision pkgversion="2.28" version="0.3" date="2009-08-27" status="review"/>
- <revision pkgversion="2.28" version="0.4" date="2009-08-31" status="review">
- <!--
- <e:review by="shaunm@gnome.org" date="2009-08-31" status="done"/>
- -->
- </revision>
- <revision pkgversion="2.30" version="0.5" date="2010-02-03" status="review"/>
- <revision pkgversion="3.2" version="0.6" date="2011-12-18" status="review"/>
- <credit type="author">
- <name>Milo Casagrande</name>
- <email>milo@ubuntu.com</email>
- </credit>
- <credit type="author">
- <name>Shaun McCance</name>
- <email>shaunm@gnome.org</email>
- </credit>
- <license>
- <p>Creative Commons Share Alike 3.0</p>
- </license>
-<!--
- <copyright>
- <year>2009</year>
- <name>GNOME Documentation Project</name>
- </copyright>
- <include href="legal.xml" xmlns="http://www.w3.org/2001/XInclude"/>
--->
- </info>
-
- <title>Disable an account</title>
-
- <p>You can disable an account to prevent <app>Empathy</app> from logging in to
- it without removing the account entirely. You may wish to disable and re-enable
- an account if you only want to be logged in to the account at certain times,
- but you still want to use <app>Empathy</app> for other accounts.</p>
-
- <steps>
- <item>
- <p>From the <gui>Contact List</gui> window, choose <guiseq><gui>Edit</gui>
- <gui>Accounts</gui></guiseq>, or press <key>F4</key>.</p>
- </item>
- <item>
- <p>Select the account you wish to disable from the accounts list on the left
- side of the window.</p>
- </item>
- <item>
- <p>On the right side of the window, switch it off.
- </p>
- </item>
- </steps>
-
- <p>
- To re-enable the account, switch it on.
- </p>
-</page>
diff --git a/help/C/favorite-rooms.page b/help/C/favorite-rooms.page
deleted file mode 100644
index 6c14d176..00000000
--- a/help/C/favorite-rooms.page
+++ /dev/null
@@ -1,141 +0,0 @@
-<page xmlns="http://projectmallard.org/1.0/"
- type="topic"
- id="favorite-rooms">
-
- <info>
- <link type="guide" xref="index#text-conv"/>
- <link type="guide" xref="irc-manage#manage"/>
- <link type="seealso" xref="irc-join-room"/>
- <link type="seealso" xref="group-conversations"/>
- <desc>Set, join and manage favorite rooms.</desc>
- <revision pkgversion="2.28" version="0.1" date="2009-08-21" status="draft"/>
- <revision pkgversion="2.30" version="0.2" date="2010-02-03" status="review"/>
- <credit type="author">
- <name>Milo Casagrande</name>
- <email>milo@ubuntu.com</email>
- </credit>
- <license>
- <p>Creative Commons Share Alike 3.0</p>
- </license>
-<!--
- <copyright>
- <year>2009</year>
- <name>GNOME Documentation Project</name>
- </copyright>
- <include href="legal.xml" xmlns="http://www.w3.org/2001/XInclude"/>
--->
- </info>
-
- <title>Favorite rooms</title>
-
- <section id="set-favorite">
- <title>Set a room as a favorite</title>
- <steps>
- <item>
- <p>
- Join a room.
- </p>
- <list>
- <item>
- <p>
- See <link xref="irc-join-room"/> for more information on how to join
- an IRC room.
- </p>
- </item>
- <item>
- <p>
- See <link xref="group-conversations"/> for more information on how to
- start or join a group conversation.
- </p>
- </item>
- </list>
- </item>
- <item>
- <p>
- From the conversation window, choose
- <guiseq><gui>Conversation</gui><gui>Favorite Chat Room</gui></guiseq>.
- </p>
- </item>
- </steps>
- </section>
-
- <section id="join-favorite">
- <title>Join favorite rooms</title>
- <steps>
- <item>
- <p>
- From the <gui>Contact List</gui> window, perform one of the following:
- </p>
- <list>
- <item>
- <p>
- Press <key>F5</key>.
- </p>
- </item>
- <item>
- <p>
- Choose <guiseq><gui>Room</gui><gui>Join Favorites</gui></guiseq>, to
- join all your favorite rooms.
- </p>
- </item>
- <item>
- <p>
- Choose <gui>Room</gui>, and select the favorite room you want to join.
- </p>
- </item>
- </list>
- </item>
- </steps>
- <note>
- <p>
- To join a favorite room, you need to be connected to the Internet and to
- your account.
- </p>
- </note>
- </section>
-
- <section id="manage-favorite">
- <title>Manage favorite rooms</title>
- <steps>
- <item>
- <p>
- From the <gui>Contact List</gui> window, choose
- <guiseq><gui>Room</gui><gui>Manage Favorites</gui></guiseq>.
- </p>
- </item>
- <item>
- <p>
- From the <gui>Account</gui> drop-down list, select the account you want to
- manage the favorite rooms of.
- </p>
- <p>
- Select <gui>All</gui> to see all you favorite rooms.
- </p>
- </item>
- <item>
- <p>
- Select the favorite room you want to manage:
- </p>
- <list>
- <item>
- <p>
- Select the <gui>Auto-Connect</gui> check-box in order to automatically
- join that room when you connect to your account.
- </p>
- </item>
- <item>
- <p>
- Click on <gui>Remove</gui> to remove the room from your favorites.
- </p>
- </item>
- </list>
- </item>
- <item>
- <p>
- When done, click <gui>Close</gui>.
- </p>
- </item>
- </steps>
- </section>
-
-</page>
diff --git a/help/C/figures/available.png b/help/C/figures/available.png
deleted file mode 100644
index ac75b95f..00000000
--- a/help/C/figures/available.png
+++ /dev/null
Binary files differ
diff --git a/help/C/figures/away.png b/help/C/figures/away.png
deleted file mode 100644
index bfcbd5ce..00000000
--- a/help/C/figures/away.png
+++ /dev/null
Binary files differ
diff --git a/help/C/figures/busy.png b/help/C/figures/busy.png
deleted file mode 100644
index fc18acc4..00000000
--- a/help/C/figures/busy.png
+++ /dev/null
Binary files differ
diff --git a/help/C/figures/conf_overview.png b/help/C/figures/conf_overview.png
deleted file mode 100644
index 7b9c0d89..00000000
--- a/help/C/figures/conf_overview.png
+++ /dev/null
Binary files differ
diff --git a/help/C/figures/croom_overview.png b/help/C/figures/croom_overview.png
deleted file mode 100644
index 74079630..00000000
--- a/help/C/figures/croom_overview.png
+++ /dev/null
Binary files differ
diff --git a/help/C/figures/empathy-logo.png b/help/C/figures/empathy-logo.png
deleted file mode 100644
index 9aa5822c..00000000
--- a/help/C/figures/empathy-logo.png
+++ /dev/null
Binary files differ
diff --git a/help/C/figures/empathy-main-window.png b/help/C/figures/empathy-main-window.png
deleted file mode 100644
index ce95364c..00000000
--- a/help/C/figures/empathy-main-window.png
+++ /dev/null
Binary files differ
diff --git a/help/C/figures/gtk-add.png b/help/C/figures/gtk-add.png
deleted file mode 100644
index c541e6ef..00000000
--- a/help/C/figures/gtk-add.png
+++ /dev/null
Binary files differ
diff --git a/help/C/figures/gtk-edit.png b/help/C/figures/gtk-edit.png
deleted file mode 100644
index 5200e14f..00000000
--- a/help/C/figures/gtk-edit.png
+++ /dev/null
Binary files differ
diff --git a/help/C/figures/gtk-remove.png b/help/C/figures/gtk-remove.png
deleted file mode 100644
index 6b8361e3..00000000
--- a/help/C/figures/gtk-remove.png
+++ /dev/null
Binary files differ
diff --git a/help/C/figures/offline.png b/help/C/figures/offline.png
deleted file mode 100644
index e381c9a0..00000000
--- a/help/C/figures/offline.png
+++ /dev/null
Binary files differ
diff --git a/help/C/figures/video_overview.png b/help/C/figures/video_overview.png
deleted file mode 100644
index 71332bf4..00000000
--- a/help/C/figures/video_overview.png
+++ /dev/null
Binary files differ
diff --git a/help/C/geolocation-not-showing.page b/help/C/geolocation-not-showing.page
deleted file mode 100644
index 4bbd5a31..00000000
--- a/help/C/geolocation-not-showing.page
+++ /dev/null
@@ -1,55 +0,0 @@
-<page xmlns="http://projectmallard.org/1.0/"
- xmlns:e="http://projectmallard.org/experimental/"
- type="topic"
- id="geolocation-not-showing">
-
- <info>
- <link type="guide" xref="geolocation#problems"/>
- <desc>
- <app>Empathy</app> does not publish my geographical position.
- </desc>
- <revision pkgversion="2.28" version="0.1" date="2009-08-19" status="review">
- <!--
- <e:review by="shaunm@gnome.org" date="2009-09-09" status="deferred"/>
- -->
- </revision>
- <credit type="author">
- <name>Milo Casagrande</name>
- <email>milo@ubuntu.com</email>
- </credit>
- <license>
- <p>Creative Commons Share Alike 3.0</p>
- </license>
-<!--
- <copyright>
- <year>2009</year>
- <name>GNOME Documentation Project</name>
- </copyright>
- <include href="legal.xml" xmlns="http://www.w3.org/2001/XInclude"/>
--->
- </info>
-
- <title>Geographical position not published</title>
-
- <p>
- If your contacts cannot see your location, <app>Empathy</app> might not be able
- to discover with a good margin of precision your geographical position.
- </p>
- <p>
- In this case, your position will not be published, but you are still able to
- see the location of your contacts.
- </p>
- <p>
- If you want to publish your geographical position, you can try to use an
- external device such as a GPS.
- </p>
-
- <note>
- <p>In order to publish your geographical location, your Jabber server
- needs to support the Personal Eventing Protocal (PEP). A list of
- <link href="http://coccinella.im/servers/servers_by_pubsub_pep.html">servers
- which support PEP</link> is maintained online. Google Talk
- does not support this feature at this time.</p>
- </note>
-
-</page>
diff --git a/help/C/geolocation-privacy.page b/help/C/geolocation-privacy.page
deleted file mode 100644
index 86bae2ec..00000000
--- a/help/C/geolocation-privacy.page
+++ /dev/null
@@ -1,99 +0,0 @@
-<page xmlns="http://projectmallard.org/1.0/"
- xmlns:e="http://projectmallard.org/experimental/"
- type="topic"
- id="geolocation-privacy">
-
- <info>
- <link type="guide" xref="geolocation#geoloc"/>
- <desc>
- What information are sent and to who.
- </desc>
- <revision pkgversion="2.28" version="0.1" date="2009-08-19" status="review">
- <!--
- <e:review by="shaunm@gnome.org" date="2009-09-09" status="deferred"/>
- -->
- </revision>
- <credit type="author">
- <name>Milo Casagrande</name>
- <email>milo@ubuntu.com</email>
- </credit>
- <license>
- <p>Creative Commons Share Alike 3.0</p>
- </license>
-<!--
- <copyright>
- <year>2009</year>
- <name>GNOME Documentation Project</name>
- </copyright>
- <include href="legal.xml" xmlns="http://www.w3.org/2001/XInclude"/>
--->
- </info>
-
- <title>Geolocation Privacy</title>
-
- <section id="info-sent">
- <title>What information is sent</title>
- <p>
- What is possible to send is: your country, region, locality, area, street, building,
- floor, room, and postal code, longitude, latitude and altitude, speed and bearing.
- </p>
- <p>
- The accuracy and the quantity of information about your geographical position are based
- on the software or on the infrastructure used to discover your position.
- </p>
- <p>
- Different kind of networks may have different accuracy settings, and may send
- different information. The use of external devices such as GPS or mobile phone
- will increase the accuracy of the information sent.
- </p>
- <p>
- When the privacy mode is enabled, nothing more precise than your city will be
- sent, even if you are using an external device.
- </p>
- </section>
-
- <section id="see-info">
- <title>Who can see the information sent</title>
- <p>
- Only your contacts can see your geographical position.
- </p>
- </section>
-
- <section id="privacy-mode">
- <title>What is the privacy mode</title>
- <p>
- The privacy mode, enabled by default, is a reduced accuracy mode that will
- decrease the accuracy of the geographical position sent to your contacts.
- </p>
- </section>
-
- <section id="privacy-overview">
- <title>Privacy overview</title>
- <p>
- Overview of the various geolocation privacy settings in <app>Empathy</app>.
- </p>
- <list>
- <item>
- <p>
- Geolocation is not enabled by default.
- </p>
- </item>
- <item>
- <p>
- Privacy mode is enabled by default.
- </p>
- </item>
- <item>
- <p>
- Privacy mode prevails even when using external and more precise devices.
- </p>
- </item>
- <item>
- <p>
- Only your contacts can see your position.
- </p>
- </item>
- </list>
- </section>
-
-</page>
diff --git a/help/C/geolocation-supported.page b/help/C/geolocation-supported.page
deleted file mode 100644
index 8672b825..00000000
--- a/help/C/geolocation-supported.page
+++ /dev/null
@@ -1,57 +0,0 @@
-<page xmlns="http://projectmallard.org/1.0/"
- xmlns:e="http://projectmallard.org/experimental/"
- type="topic"
- id="geolocation-supported">
-
- <info>
- <desc>
- Services that supports geolocation and compatibility.
- </desc>
- <revision pkgversion="2.28" version="0.1" date="2009-08-19" status="draft">
- <!--
- <e:review by="shaunm@gnome.org" date="2009-09-09" status="deferred"/>
- -->
- </revision>
- <credit type="author">
- <name>Milo Casagrande</name>
- <email>milo@ubuntu.com</email>
- </credit>
- <license>
- <p>Creative Commons Share Alike 3.0</p>
- </license>
-<!--
- <copyright>
- <year>2009</year>
- <name>GNOME Documentation Project</name>
- </copyright>
- <include href="legal.xml" xmlns="http://www.w3.org/2001/XInclude"/>
--->
- </info>
-
- <title>Supported services</title>
-
- <p>
- The geolocation feature at the moment is compatible only with the Jabber service.
- In order to use it, you and your contacts need to have a Jabber account.
- </p>
-
- <note>
- <p>
- It is necessary that also the server you are using supports the geolocation
- feature. Most of the Jabber servers support it. See your service website
- documentation for more information.
- </p>
- </note>
-
- <section id="compatibility">
- <title>Compatibility</title>
-
- <p>
- <app>Empathy</app> geolocation feature is not compatible with other geographical
- position services such as <em>Google Latitude</em>, <em>Yahoo Fire Eagle</em>
- or <em>Brightkite</em>.
- </p>
-
- </section>
-
-</page>
diff --git a/help/C/geolocation-turn.page b/help/C/geolocation-turn.page
deleted file mode 100644
index 96e79dbd..00000000
--- a/help/C/geolocation-turn.page
+++ /dev/null
@@ -1,69 +0,0 @@
-<page xmlns="http://projectmallard.org/1.0/"
- xmlns:e="http://projectmallard.org/experimental/"
- type="topic" style="task"
- id="geolocation-turn">
-
- <info>
- <link type="guide" xref="geolocation#geoloc"/>
- <link type="seealso" xref="geolocation-privacy"/>
- <desc>
- How to activate and deactivate geolocation in <app>Empathy</app>.
- </desc>
- <revision pkgversion="2.28" version="0.1" date="2009-08-19" status="review">
- <!--
- <e:review by="shaunm@gnome.org" date="2009-09-09" status="deferred"/>
- -->
- </revision>
- <credit type="author">
- <name>Milo Casagrande</name>
- <email>milo@ubuntu.com</email>
- </credit>
- <license>
- <p>Creative Commons Share Alike 3.0</p>
- </license>
-<!--
- <copyright>
- <year>2009</year>
- <name>GNOME Documentation Project</name>
- </copyright>
- <include href="legal.xml" xmlns="http://www.w3.org/2001/XInclude"/>
--->
- </info>
-
- <title>Activate/Deactivate geolocation</title>
-
- <steps>
- <item>
- <p>
- Choose <guiseq><gui>Edit</gui><gui>Preferences</gui></guiseq>.
- </p>
- </item>
- <item>
- <p>
- Select the <gui>Location</gui> tab.
- </p>
- </item>
- <item>
- <p>
- Select <gui>Publish location to my contacts</gui> to activate geolocation.
- </p>
- <p>
- To deactivate geolocation, deselect it.
- </p>
- </item>
- <item>
- <p>
- To increase the accuracy of your position, deselect
- <gui>Reduce location accuracy</gui>.
- </p>
- </item>
- <item>
- <p>
- If you have an external device like a GPS or want to send a more accurate
- position, select the appropriate option in the <gui>Location sources</gui>
- section.
- </p>
- </item>
- </steps>
-
-</page>
diff --git a/help/C/geolocation-what-is.page b/help/C/geolocation-what-is.page
deleted file mode 100644
index dd70be3c..00000000
--- a/help/C/geolocation-what-is.page
+++ /dev/null
@@ -1,66 +0,0 @@
-<page xmlns="http://projectmallard.org/1.0/"
- xmlns:e="http://projectmallard.org/experimental/"
- type="topic"
- id="geolocation-what-is">
-
- <info>
- <link type="guide" xref="geolocation#geoloc"/>
- <link type="seealso" xref="geolocation-supported"/>
- <desc>
- Understanding geolocation.
- </desc>
- <revision pkgversion="2.28" version="0.1" date="2009-08-19" status="review">
- <!--
- <e:review by="shaunm@gnome.org" date="2009-09-09" status="deferred"/>
- -->
- </revision>
- <credit type="author">
- <name>Milo Casagrande</name>
- <email>milo@ubuntu.com</email>
- </credit>
- <license>
- <p>Creative Commons Share Alike 3.0</p>
- </license>
-<!--
- <copyright>
- <year>2009</year>
- <name>GNOME Documentation Project</name>
- </copyright>
- <include href="legal.xml" xmlns="http://www.w3.org/2001/XInclude"/>
--->
- </info>
-
- <title>What is geolocation</title>
-
- <p>Geolocation allows you to identify the real geographical location of a
- computer or a device connected to the Internet.</p>
- <p>
- With geolocation in <app>Empathy</app> you can:
- </p>
- <list>
- <item>
- <p>
- Publish your geographical location to your contacts.
- </p>
- </item>
- <item>
- <p>
- See your contacts’ geographical location and quickly contact them.
- </p>
- </item>
- <item>
- <p>
- Set the accuracy of your location and the device used to discover your
- location.
- </p>
- </item>
- </list>
-
- <note style="tip">
- <p>
- In order to see your contacts’ geographical locations, they need to use a
- service and an application that supports geolocation.
- </p>
- </note>
-
-</page>
diff --git a/help/C/geolocation.page b/help/C/geolocation.page
deleted file mode 100644
index 8e06875f..00000000
--- a/help/C/geolocation.page
+++ /dev/null
@@ -1,42 +0,0 @@
-<page xmlns="http://projectmallard.org/1.0/"
- xmlns:e="http://projectmallard.org/experimental/"
- type="guide" style="2column"
- id="geolocation">
-
- <info>
- <link type="guide" xref="index#advanced"/>
- <desc>
- Use and understand geolocation in <app>Empathy</app>.
- </desc>
- <revision pkgversion="2.28" version="0.1" date="2009-08-19" status="review">
- <!--
- <e:review by="shaunm@gnome.org" date="2009-09-01" status="done"/>
- -->
- </revision>
- <credit type="author">
- <name>Milo Casagrande</name>
- <email>milo@ubuntu.com</email>
- </credit>
- <license>
- <p>Creative Commons Share Alike 3.0</p>
- </license>
-<!--
- <copyright>
- <year>2009</year>
- <name>GNOME Documentation Project</name>
- </copyright>
- <include href="legal.xml" xmlns="http://www.w3.org/2001/XInclude"/>
--->
- </info>
-
- <title>Geographical position</title>
-
- <section id="geoloc" style="2column">
- <title>Geolocation</title>
- </section>
-
- <section id="problems" style="2column">
- <title>Fix common problems</title>
- </section>
-
-</page>
diff --git a/help/C/group-conversations.page b/help/C/group-conversations.page
deleted file mode 100644
index e0b2851e..00000000
--- a/help/C/group-conversations.page
+++ /dev/null
@@ -1,150 +0,0 @@
-<page xmlns="http://projectmallard.org/1.0/"
- xmlns:e="http://projectmallard.org/experimental/"
- type="topic"
- id="group-conversations">
-
- <info>
- <link type="guide" xref="index#text-conv"/>
- <desc>
- Start or join a group conversation with your contacts.
- </desc>
- <revision pkgversion="2.28" version="0.1" date="2009-08-02" status="stub"/>
- <revision pkgversion="2.28" version="0.2" date="2009-08-17" status="draft"/>
- <revision pkgversion="2.28" version="0.2" date="2009-08-17" status="review">
- <!--
- <e:review by="shaunm@gnome.org" date="2009-09-09" status="deferred"/>
- -->
- </revision>
- <credit type="author">
- <name>Milo Casagrande</name>
- <email>milo@ubuntu.com</email>
- </credit>
- <license>
- <p>Creative Commons Share Alike 3.0</p>
- </license>
-<!--
- <copyright>
- <year>2009</year>
- <name>GNOME Documentation Project</name>
- </copyright>
- <include href="legal.xml" xmlns="http://www.w3.org/2001/XInclude"/>
--->
- </info>
-
- <title>Group conversations</title>
-
- <p>
- Group conversations permits you to have text conversations with more than one
- contact at the same time.
- </p>
- <p>
- To have a group conversation you need to have a registered account with either
- Jabber or Google Talk, or a People Nearby account.
- </p>
-
- <note>
- <p>
- You can have a group conversation only with the contacts that are using the
- same service as yours.
- </p>
- </note>
-
- <section id="start-group-conv">
-
- <title>Start a group conversation</title>
-
- <steps>
- <item>
- <p>
- From the <gui>Contact List</gui> window, choose <guiseq><gui>Room</gui><gui>Join</gui></guiseq>.
- </p>
- </item>
- <item>
- <p>
- From the <gui>Account</gui> drop-down list, select the account you want to use
- for the group conversation.
- </p>
- </item>
- <item>
- <p>
- In the <gui>Server</gui> text box, type the name of server in which the conversation
- will be hosted.
- </p>
- <p>
- Leave it empty if it will be on the current server.
- </p>
- </item>
- <item>
- <p>
- In the <gui>Room</gui> text box, type the name you want to give to the conversation.
- </p>
- <note>
- <p>
- This will be the name of the room you are going to have a conversation. This
- name will be publicly available for other people to join. It is not possible
- to create a private room.
- </p>
- </note>
- </item>
- <item>
- <p>
- To invite other contacts to join the group conversation, from the
- <gui>Contact List</gui> window, select the contact you want to invite,
- and perform one of the following:
- </p>
- <list>
- <item>
- <p>
- Right-click on the contact and choose <gui>Invite to chatroom</gui>.
- </p>
- </item>
- <item>
- <p>
- Choose <guiseq><gui>Edit</gui><gui>Contact</gui><gui>Invite to chatroom</gui></guiseq>.
- </p>
- </item>
- </list>
- <p>
- If you have more than one group conversation open, select the one you want to invite
- your contacts.
- </p>
- </item>
- </steps>
-
- </section>
-
- <section id="join-group-conv">
-
- <title>Join a group conversation</title>
-
- <steps>
- <item>
- <p>
- From the <gui>Contact List</gui> window, choose
- <guiseq><gui>Room</gui><gui>Join</gui></guiseq>.
- </p>
- </item>
- <item>
- <p>
- Expand the <gui>Room List</gui> section to see all the existing rooms.
- </p>
- </item>
- <item>
- <p>
- Double-click on the name of a room to join it.
- </p>
- </item>
- </steps>
-
- <p>
- It is not possible to join all existing rooms. Some of the rooms might require a
- password, or might be invitation only. <app>Empathy</app> does not support these
- kind of rooms.
- </p>
-
- <!-- TODO: find out where the password protected or invitation only icons are
- and create a table. -->
-
- </section>
-
-</page>
diff --git a/help/C/hide-contacts.page b/help/C/hide-contacts.page
deleted file mode 100644
index f0609a62..00000000
--- a/help/C/hide-contacts.page
+++ /dev/null
@@ -1,42 +0,0 @@
-<page xmlns="http://projectmallard.org/1.0/"
- xmlns:e="http://projectmallard.org/experimental/"
- type="topic" style="task"
- id="hide-contacts">
-
- <info>
- <link type="guide" xref="index#contacts"/>
- <desc>Hide the offline contacts from your <gui>Contact List</gui>.</desc>
- <revision pkgversion="2.30" version="0.1" date="2010-03-11" status="review"/>
- <credit type="author">
- <name>Milo Casagrande</name>
- <email>milo@ubuntu.com</email>
- </credit>
- <license>
- <p>Creative Commons Share Alike 3.0</p>
- </license>
- </info>
-
- <title>Hide offline contacts</title>
-
- <p>
- Normally, <app>Empathy</app> shows all your contacts: those that are online,
- with which you can have a conversation, and also those that are offline.
- </p>
- <p>
- To hide the contacts that are offline:
- </p>
-
- <steps>
- <item>
- <p>From the <gui>Contact List</gui> window, choose <guiseq><gui>View</gui>
- <gui>Offline Contacts</gui></guiseq>, or press <keyseq><key>Ctrl</key>
- <key>H</key></keyseq>.</p>
- </item>
- <item>
- <p>
- To show the offline contacts again, repeat the same procedure above.
- </p>
- </item>
- </steps>
-
-</page>
diff --git a/help/C/import-account.page b/help/C/import-account.page
deleted file mode 100644
index 5c1d81a2..00000000
--- a/help/C/import-account.page
+++ /dev/null
@@ -1,70 +0,0 @@
-<page xmlns="http://projectmallard.org/1.0/"
- xmlns:e="http://projectmallard.org/experimental/"
- type="topic" style="task"
- id="import-account">
-
- <info>
- <link type="guide" xref="index#accounts"/>
- <link type="seealso" xref="add-account"/>
- <link type="seealso" xref="remove-account"/>
- <desc>Import an account from another instant messaging application.</desc>
- <revision pkgversion="2.28" version="0.1" date="2009-08-22" status="draft"/>
- <revision pkgversion="2.28" version="0.2" date="2009-08-22" status="review"/>
- <revision pkgversion="2.28" version="0.3" date="2009-09-02" status="review">
- <!--
- <e:review by="shaunm@gnome.org" date="2009-09-02" status="done"/>
- -->
- </revision>
- <credit type="author">
- <name>Peter Haslam</name>
- <email>peter.haslam@freenet.de</email>
- </credit>
- <credit type="author">
- <name>Milo Casagrande</name>
- <email>milo@ubuntu.com</email>
- </credit>
- <credit>
- <name>Shaun McCance</name>
- <email>shaunm@gnome.org</email>
- </credit>
- <license>
- <p>Creative Commons Share Alike 3.0</p>
- </license>
-<!--
- <copyright>
- <year>2009</year>
- <name>GNOME Documentation Project</name>
- </copyright>
- <include href="legal.xml" xmlns="http://www.w3.org/2001/XInclude"/>
--->
- </info>
-
- <title>Import an existing account</title>
-
- <p>The first time you run <app>Empathy</app>, it will offer to import your
- accounts from other instant messaging applications. Currently, the only
- supported application is <app>Pidgin</app>.</p>
-
- <steps>
- <item>
- <p>Run <app>Empathy</app> for the first time. An assistant will offer
- you a number of options to create new accounts.</p>
- </item>
- <item>
- <p>Select <gui>Yes, import my account details from</gui> and click
- <gui>Forward</gui>.</p>
- </item>
- <item>
- <p>Select the check box next to each account you wish to import.</p>
- </item>
- <item>
- <p>Click <gui style="button">Apply</gui>.</p>
- </item>
- </steps>
-
- <note>
- <p>It is not currently possible to import accounts after you have completed
- the first-run assistant.</p>
- </note>
-
-</page>
diff --git a/help/C/index.page b/help/C/index.page
deleted file mode 100644
index 778115e5..00000000
--- a/help/C/index.page
+++ /dev/null
@@ -1,63 +0,0 @@
-<page xmlns="http://projectmallard.org/1.0/"
- xmlns:e="http://projectmallard.org/experimental/"
- xmlns:its="http://www.w3.org/2005/11/its"
- type="guide"
- id="index">
-
- <info>
- <revision pkgversion="2.28" version="0.1" date="2009-06-14" status="incomplete"/>
- <revision pkgversion="2.28" version="0.1" date="2009-08-14" status="review"/>
- <revision pkgversion="2.28" version="0.2" date="2009-09-05" status="review">
- <!--
- <e:review by="shaunm@gnome.org" date="2009-08-31" status="done"/>
- -->
- </revision>
- <revision pkgversion="2.30" version="0.3" date="2010-02-03" status="review"/>
- <revision pkgversion="2.32" version="0.4" date="2010-09-11" status="review"/>
- <revision pkgversion="3.10" date="2013-06-23" status="review"/>
-
- <credit type="author">
- <name>Milo Casagrande</name>
- <email its:translate="no">milo@ubuntu.com</email>
- </credit>
-
- <license>
- <p>Creative Commons Share Alike 3.0</p>
- </license>
-
- <desc>Empathy is the instant messenging application for GNOME. It supports text, voice and video chat over many protocols.</desc>
-
- <title type="link">Empathy</title>
- <title type="text">Empathy</title>
- </info>
-
- <title>
- <media type="image" mime="image/png" src="figures/empathy-logo.png" its:translate="no" />
- Empathy
- </title>
-
- <section id="accounts" style="2column">
- <title>Account Management</title>
- </section>
-
- <section id="contacts" style="2column">
- <title>Contact Management</title>
- </section>
-
- <section id="text-conv" style="2column">
- <title>Text Conversations</title>
- </section>
-
- <section id="audio-video" style="2column">
- <title>Audio and Video Conversations</title>
- </section>
-
- <section id="advanced" style="2column">
- <title>Advanced Actions</title>
- </section>
-
- <section id="problems">
- <title>Common Problems</title>
- </section>
-
-</page>
diff --git a/help/C/introduction.page b/help/C/introduction.page
deleted file mode 100644
index e7f96b89..00000000
--- a/help/C/introduction.page
+++ /dev/null
@@ -1,46 +0,0 @@
-<page xmlns="http://projectmallard.org/1.0/"
- type="topic"
- id="introduction">
-
- <info>
- <link type="guide" xref="index"/>
- <revision pkgversion="2.28" version="0.1" date="2009-08-16" status="draft"/>
- <revision pkgversion="2.28" version="0.2" date="2009-08-17" status="review"/>
- <desc>
- Introduction to the <app>Empathy</app> instant messenger.
- </desc>
- <credit type="author">
- <name>Milo Casagrande</name>
- <email>milo@ubuntu.com</email>
- </credit>
- <license>
- <p>Creative Commons Share Alike 3.0</p>
- </license>
- </info>
-
- <title>Introduction</title>
-
- <p>
- <app>Empathy</app> is an instant messaging application for the GNOME Desktop.
- It supports text messaging, voice &amp; video calls, file transfers, and all the
- most used messaging systems such as MSN and Google Talk.
- </p>
- <p>
- <app>Empathy</app> includes features that help you better collaborate while at work,
- and that let you easily keep in touch with your friends.
- </p>
- <p>
- Using <app>Empathy</app>, you can group all the conversations in a single window,
- have multiple windows for different kind of conversations, easily search through
- your previous conversations, and share your desktop in just two clicks.
- </p>
-
- <figure>
- <title><gui>Contact List</gui> window</title>
- <desc><app>Empathy</app> main window</desc>
- <media type="image" src="figures/empathy-main-window.png" mime="image/png" style="right">
- <p><app>Empathy</app> main window.</p>
- </media>
- </figure>
-
-</page>
diff --git a/help/C/irc-commands.page b/help/C/irc-commands.page
deleted file mode 100644
index 8bf07dc8..00000000
--- a/help/C/irc-commands.page
+++ /dev/null
@@ -1,28 +0,0 @@
-<page xmlns="http://projectmallard.org/1.0/"
- type="topic"
- id="irc-commands">
-
- <info>
- <link type="guide" xref="irc-manage#manage"/>
- <desc>The supported IRC commands.</desc>
- <revision pkgversion="2.30" version="0.1" date="2010-02-14" status="draft"/>
- <credit type="author">
- <name>Milo Casagrande</name>
- <email>milo@ubuntu.com</email>
- </credit>
- <license>
- <p>Creative Commons Share Alike 3.0</p>
- </license>
- </info>
-
- <title>Supported IRC commands</title>
- <p>
- To see the list of the supported IRC commands, in a chat room type <input>/help</input>
- and press <key>Enter</key>.
- </p>
- <note>
- <p>
- All commands available have a small description on their usage.
- </p>
- </note>
-</page>
diff --git a/help/C/irc-join-pwd.page b/help/C/irc-join-pwd.page
deleted file mode 100644
index f883094b..00000000
--- a/help/C/irc-join-pwd.page
+++ /dev/null
@@ -1,45 +0,0 @@
-<page xmlns="http://projectmallard.org/1.0/"
- xmlns:e="http://projectmallrd.org/experimental/"
- type="topic" style="task nocando"
- id="irc-join-pwd">
-
- <info>
- <link type="guide" xref="irc-manage#manage"/>
- <link type="seealso" xref="irc-join-room"/>
- <desc>Enter password-protected IRC chat rooms.</desc>
- <revision pkgversion="2.28" version="0.1" date="2009-08-07" status="review">
- <!--
- <e:review by="shaunm@gnome.org" date="2009-08-31" status="done"/>
- -->
- </revision>
- <revision pkgversion="2.30" version="0.2" date="2010-03-12" status="review"/>
- <credit type="author">
- <name>Milo Casagrande</name>
- <email>milo@ubuntu.com</email>
- </credit>
- <license>
- <p>Creative Commons Share Alike 3.0</p>
- </license>
- </info>
-
- <title>Join a protected IRC chat room</title>
-
- <p>
- On some IRC networks, private IRC rooms may be protected with a password.
- If you know the password, use the following steps to join:
- </p>
- <steps>
- <item>
- <p>
- <link xref="irc-join-room">Join the room</link> as normal.
- </p>
- </item>
- <item>
- <p>
- Empathy will prompt you for a password. Enter the password for the
- IRC chat room and click <gui style="button">Join</gui>.
- </p>
- </item>
- </steps>
-
-</page>
diff --git a/help/C/irc-join-room.page b/help/C/irc-join-room.page
deleted file mode 100644
index 8a3a74d2..00000000
--- a/help/C/irc-join-room.page
+++ /dev/null
@@ -1,68 +0,0 @@
-<page xmlns="http://projectmallard.org/1.0/"
- xmlns:e="http://projectmallrd.org/experimental/"
- type="topic" style="task"
- id="irc-join-room">
-
- <info>
- <link type="guide" xref="irc-manage#manage" group="one"/>
- <desc>Join an IRC channel.</desc>
- <revision pkgversion="2.28" version="0.1" date="2009-07-26" status="draft"/>
- <revision pkgversion="2.28" version="0.2" date="2009-08-14" status="review">
- <!--
- <e:review by="shaunm@gnome.org" date="2009-08-31" status="done"/>
- -->
- </revision>
- <credit type="author">
- <name>Milo Casagrande</name>
- <email>milo@ubuntu.com</email>
- </credit>
- <license>
- <p>Creative Commons Share Alike 3.0</p>
- </license>
-<!--
- <copyright>
- <year>2009</year>
- <name>GNOME Documentation Project</name>
- </copyright>
- <include href="legal.xml" xmlns="http://www.w3.org/2001/XInclude"/>
--->
- </info>
-
- <title>Join an IRC chat room</title>
-
- <p>You can join IRC chat rooms (also known as IRC channels) on any IRC network you’re
- connected to. To connect to an IRC network, see <link xref="add-account"/> and
- <link xref="account-irc"/>.</p>
-
- <steps>
- <item>
- <p>
- From the <gui>Contact List</gui> window, choose
- <guiseq><gui>Room</gui><gui>Join</gui></guiseq>.
- </p>
- </item>
- <item>
- <p>
- From the <gui>Account</gui> drop-down list, select the IRC account that
- corresponds to the network you want to use.
- </p>
- </item>
- <item>
- <p>
- In the <gui>Room</gui> text box, type the name of the channel you want to
- join. IRC channel names start with the hash character (<sys>#</sys>).
- </p>
- </item>
- <item>
- <p>
- Click <gui>Join</gui> to enter the room.
- </p>
- </item>
- </steps>
-
- <note style="tip">
- <p>
- To join multiple rooms, you need to repeat the steps above for each room.
- </p>
- </note>
-</page>
diff --git a/help/C/irc-manage.page b/help/C/irc-manage.page
deleted file mode 100644
index 78fef029..00000000
--- a/help/C/irc-manage.page
+++ /dev/null
@@ -1,67 +0,0 @@
-<page xmlns="http://projectmallard.org/1.0/"
- xmlns:e="http://projectmallard.org/experimental/"
- xmlns:if="http://projectmallard.org/experimental/if/"
- type="guide" style="2column"
- id="irc-manage">
-
- <info>
- <link type="guide" xref="index#text-conv"/>
- <desc>How to use IRC with <app>Empathy</app>.</desc>
- <revision pkgversion="2.28" version="0.1" date="2009-07-25" status="draft"/>
- <revision pkgversion="2.28" version="0.2" date="2009-08-14" status="review"/>
- <revision pkgversion="2.28" version="0.2" date="2009-08-27" status="review">
- <!--
- <e:review by="shaunm@gnome.org" date="2009-08-31" status="done"/>
- -->
- </revision>
- <revision pkgversion="2.30" version="0.3" date="2010-04-19" status="review"/>
- <credit type="author">
- <name>Milo Casagrande</name>
- <email>milo@ubuntu.com</email>
- </credit>
- <credit type="editor">
- <name>Sindhu S</name>
- <email>sindhus@live.in</email>
- </credit>
-
- <license>
- <p>Creative Commons Share Alike 3.0</p>
- </license>
-<!--
- <copyright>
- <year>2009</year>
- <name>GNOME Documentation Project</name>
- </copyright>
- <include href="legal.xml" xmlns="http://www.w3.org/2001/XInclude"/>
--->
- </info>
-
- <title>Internet Relay Chat (IRC)</title>
-
- <note style="info package">
- <p>You must have the <sys>telepathy-idle</sys> package installed to use IRC
- in <app>Empathy</app>.</p>
-
- <if:choose xmlns:if="http://projectmallard.org/if/1.0/">
- <if:when test="action:install">
- <p><link action="install:telepathy-idle" xref="index">
- Install telepathy-idle</link></p>
- </if:when>
- </if:choose>
- </note>
-
- <section id="manage" style="2column">
- <info>
- <title type="link">IRC Chat Rooms and Conversations</title>
- </info>
- <title>Chat Rooms and Conversations</title>
- </section>
-
- <section id="problems">
- <info>
- <title type="link">Common IRC Problems</title>
- </info>
- <title>Common Problems</title>
- </section>
-
-</page> \ No newline at end of file
diff --git a/help/C/irc-nick-password.page b/help/C/irc-nick-password.page
deleted file mode 100644
index 0e371ae3..00000000
--- a/help/C/irc-nick-password.page
+++ /dev/null
@@ -1,73 +0,0 @@
-<page xmlns="http://projectmallard.org/1.0/"
- xmlns:e="http://projectmallard.org/experimental/"
- type="topic" style="task nocando"
- id="irc-nick-password">
-
- <info>
- <link type="guide" xref="irc-manage#manage"/>
- <link type="seealso" xref="prob-conn-name"/>
- <link type="seealso" xref="account-irc"/>
- <desc>Protect your nickname to prevent other IRC users from using it.</desc>
- <revision pkgversion="2.28" version="0.1" date="2009-07-26" status="draft"/>
- <revision pkgversion="2.28" version="0.2" date="2009-08-10" status="review">
- <!--
- <e:review by="shaunm@gnome.org" date="2009-08-31" status="done"/>
- -->
- </revision>
- <credit type="author">
- <name>Milo Casagrande</name>
- <email>milo@ubuntu.com</email>
- </credit>
- <license>
- <p>Creative Commons Share Alike 3.0</p>
- </license>
-<!--
- <copyright>
- <year>2009</year>
- <name>GNOME Documentation Project</name>
- </copyright>
- <include href="legal.xml" xmlns="http://www.w3.org/2001/XInclude"/>
--->
- </info>
-
- <title>Use a nickname password on IRC</title>
-
- <p>On some IRC networks, you can register your nickname with a service called
- NickServ. By sending special messages to NickServ, you can set your password
- and identify yourself. Some IRC chat rooms may not allow you to join without
- a registered nickname.</p>
-
- <p><app>Empathy</app> does not currently support nickname registration. Some
- IRC networks, however, will automatically forward a <em>server password</em> to
- NickServ. On these networks, you can use the IRC password in <app>Empathy</app>
- to identify yourself to NickServ. The popular freenode network is known to have
- this feature.</p>
-
- <p>To set an IRC server password:</p>
-
- <steps>
- <item>
- <p>From the <gui>Contact List</gui> window, choose <guiseq><gui>Edit</gui>
- <gui>Accounts</gui></guiseq>, or press <key>F4</key>.</p>
- </item>
- <item>
- <p>Select the IRC account from the list on the left of the dialog.</p>
- </item>
- <item>
- <p>
- In the <gui>Password</gui> field, type the password you used to register
- your nikcname.
- </p>
- </item>
- <item>
- <p>Click <gui style="button">Apply</gui>.</p>
- </item>
- </steps>
-
-
- <note>
- <p>These instructions only allow you to use a password-protected nickname
- on certain IRC networks. It is not currently possible to register an IRC
- nickname or change your nickname password using <app>Empathy</app>.</p>
- </note>
-</page>
diff --git a/help/C/irc-send-file.page b/help/C/irc-send-file.page
deleted file mode 100644
index 4decfba4..00000000
--- a/help/C/irc-send-file.page
+++ /dev/null
@@ -1,35 +0,0 @@
-<page xmlns="http://projectmallard.org/1.0/"
- xmlns:e="http://projectmallrd.org/experimental/"
- type="topic" style="task nocando"
- id="irc-send-file">
-
- <info>
- <link type="guide" xref="irc-manage#manage"/>
- <link type="seealso" xref="send-file"/>
- <desc><app>Empathy</app> does not currently support sending files using IRC.</desc>
- <revision pkgversion="2.28" version="0.1" date="2009-08-14" status="review">
- <!--
- <e:review by="shaunm@gnome.org" date="2009-08-31" status="done"/>
- -->
- </revision>
- <credit type="author">
- <name>Milo Casagrande</name>
- <email>milo@ubuntu.com</email>
- </credit>
- <license>
- <p>Creative Commons Share Alike 3.0</p>
- </license>
-<!--
- <copyright>
- <year>2009</year>
- <name>GNOME Documentation Project</name>
- </copyright>
- <include href="legal.xml" xmlns="http://www.w3.org/2001/XInclude"/>
--->
- </info>
-
- <title>Send files over IRC</title>
-
- <p>It is not currently possible to send files using IRC.</p>
-
-</page>
diff --git a/help/C/irc-start-conversation.page b/help/C/irc-start-conversation.page
deleted file mode 100644
index ad51ca53..00000000
--- a/help/C/irc-start-conversation.page
+++ /dev/null
@@ -1,60 +0,0 @@
-<page xmlns="http://projectmallard.org/1.0/"
- xmlns:e="http://projectmallrd.org/experimental/"
- type="topic" style="task"
- id="irc-start-conversation">
-
- <info>
- <link type="guide" xref="irc-manage#manage" group="two"/>
- <desc>Start a conversation with an IRC contact.</desc>
- <revision pkgversion="2.28" version="0.1" date="2009-08-14" status="review">
- <!--
- <e:review by="shaunm@gnome.org" date="2009-08-31" status="done"/>
- -->
- </revision>
- <credit type="author">
- <name>Milo Casagrande</name>
- <email>milo@ubuntu.com</email>
- </credit>
- <license>
- <p>Creative Commons Share Alike 3.0</p>
- </license>
-<!--
- <copyright>
- <year>2009</year>
- <name>GNOME Documentation Project</name>
- </copyright>
- <include href="legal.xml" xmlns="http://www.w3.org/2001/XInclude"/>
--->
- </info>
-
- <title>Chat with somebody on IRC</title>
-
- <p>You can hold private conversations with other IRC users, outside of the
- public IRC chat rooms. To start a conversation with another IRC user:</p>
-
- <steps>
- <item>
- <p>In the contact list for an IRC chat room, double click the name of
- the user you want to chat with. Alternatively, right click the name
- of the user and choose <gui>Chat</gui>.</p>
- </item>
- </steps>
-
- <list>
- <item>
- <p>
- The IRC room contact list is not the same as <app>Empathy</app> contact list. It contains
- a list of users in the IRC chat room you joined. Different rooms can have different
- contacts listed.
- </p>
- </item>
- <item>
- <p>
- The IRC room contact list is usually on the right side of the IRC room window. If you
- do not see it, choose
- <guiseq><gui>Conversation</gui><gui>Show Contact List</gui></guiseq>.
- </p>
- </item>
- </list>
-
-</page>
diff --git a/help/C/license.page b/help/C/license.page
deleted file mode 100644
index 312b6cfa..00000000
--- a/help/C/license.page
+++ /dev/null
@@ -1,59 +0,0 @@
-<page xmlns="http://projectmallard.org/1.0/"
- type="topic"
- id="license">
-
- <info>
- <link type="seealso" xref="index"/>
- <revision pkgversion="2.30" version="0.1" date="2009-12-28" status="draft"/>
- <desc>Legal information.</desc>
- </info>
-
- <title>License</title>
- <p>
- <!--
- Translators: try to use the same translation as the one provided by the CreativeCommons website.
- If there is no translation for your language, consider providing one to CreativeCommons.
- -->
- This work is distributed under a CreativeCommons Attribution-Share Alike
- 3.0 Unported license.
- </p>
- <p>
- You are free:
- </p>
- <terms>
- <item>
- <title><em>To share</em></title>
- <p>To copy, distribute and transmit the work.</p>
- </item>
- <item>
- <title><em>To remix</em></title>
- <p>To adapt the work.</p>
- </item>
- </terms>
- <p>
- Under the following conditions:
- </p>
- <terms>
- <item>
- <title><em>Attribution</em></title>
- <p>
- You must attribute the work in the manner specified by the author or
- licensor (but not in any way that suggests that they endorse you or
- your use of the work).
- </p>
- </item>
- <item>
- <title><em>Share Alike</em></title>
- <p>
- If you alter, transform, or build upon this work, you may distribute the
- resulting work only under the same, similar or a compatible license.
- </p>
- </item>
- </terms>
- <p>
- <!-- Translators: there are no official localized versions of the legal code, only the deed is localized. -->
- For the full text of the license, see the
- <link href="http://creativecommons.org/licenses/by-sa/3.0/legalcode">CreativeCommons website</link>,
- or read the full <link href="http://creativecommons.org/licenses/by-sa/3.0/">Commons Deed</link>.
- </p>
-</page>
diff --git a/help/C/link-contacts.page b/help/C/link-contacts.page
deleted file mode 100644
index 6a23cd14..00000000
--- a/help/C/link-contacts.page
+++ /dev/null
@@ -1,129 +0,0 @@
-<page xmlns="http://projectmallard.org/1.0/"
- type="topic"
- style="task"
- id="link-contacts">
-
- <info>
- <link type="guide" xref="index#contacts" />
- <link type="seealso" xref="send-message" />
- <link type="seealso" xref="audio-call" />
- <link type="seealso" xref="video-call" />
- <desc>Merge and separate different contacts into a single one.</desc>
- <revision pkgversion="2.32" version="0.1" date="2010-09-06" status="draft"/>
- <revision pkgversion="2.32" version="0.2" date="2010-09-09" status="review"/>
- <credit type="author">
- <name>Milo Casagrande</name>
- <email>milo@ubuntu.com</email>
- </credit>
- <credit type="editor">
- <name>Shobha Tyagi</name>
- <email>tyagishobha@gmail.com</email>
- </credit>
- <license>
- <p>
- Creative Commons Share Alike 3.0
- </p>
- </license>
- </info>
-
- <title>Link and unlink contacts</title>
- <p>
- If one or more of your contacts has multiple accounts with different
- messaging services, you can combine these accounts into a single contact.
- </p>
- <p>
- The resulting contact is called a <em>meta-contact</em>: a contact composed
- from different single contacts.
- </p>
- <p>
- Suppose you have a contact called Jane Smith who is using three different
- messaging services like:
- </p>
- <list>
- <item>
- <p>
- janes@facebook
- </p>
- </item>
- <item>
- <p>
- jane.smith@gmail
- </p>
- </item>
- <item>
- <p>
- jane_smith@hotmail
- </p>
- </item>
- </list>
- <p>
- You can combine these contacts into a single Jane Smith one.
- </p>
- <section id="linking">
- <title>Link contacts</title>
- <p>
- The way you can link your contacts is as follows:
- </p>
- <steps>
- <item>
- <p>
- Press the tick button to select entries you want to link. This will enable
- <em>selection mode</em> and you can see a checkbox for each entry.
- </p>
- </item>
- <item>
- <p>
- Tick the checkboxes that correspond to the <app>Contacts</app> entries which
- belong to the same contact.
- </p>
- </item>
- <item>
- <p>
- Press <gui style="button">Link</gui>.
- </p>
- </item>
- </steps>
- <p>
- Repeat steps 3 and 4 in order to link other contacts.
- </p>
- </section>
-
- <section id="unlinking">
- <title>Unlink contacts</title>
- <p>
- To unlink a linked contact:
- </p>
- <steps>
- <item>
- <p>
- Select the contact from your list.
- </p>
- </item>
- <item>
- <p>
- Press <gui style="button">Edit</gui> in the top-right corner of <app>Contacts</app>.
- </p>
- </item>
- <item>
- <p>
- Press <gui style="button">Linked Contacts</gui>.
- </p>
- </item>
- <item>
- <p>
- Press <gui style="button">Remove</gui> to unlink an entry from the linked contact.
- </p>
- </item>
- <item>
- <p>
- Press <gui style="button">Close</gui> if you do not want to unlink any more contacts.
- </p>
- </item>
- <item>
- <p>
- Finally, press <gui style="button">Done</gui> to finish editing.
- </p>
- </item>
- </steps>
- </section>
-</page>
diff --git a/help/C/overview.page b/help/C/overview.page
deleted file mode 100644
index 2ce72a9d..00000000
--- a/help/C/overview.page
+++ /dev/null
@@ -1,60 +0,0 @@
-<page xmlns="http://projectmallard.org/1.0/"
- xmlns:its="http://www.w3.org/2005/11/its"
- type="topic"
- id="overview">
-
- <info>
- <link type="guide" xref="index"/>
- <revision pkgversion="3.7" version="0.1" date="2012-11-30" status="draft"/>
- <desc>
- What instant messaging is and how you can use it.
- </desc>
- <credit type="author">
- <name>Aruna S</name>
- <email its:translate="no">aruna.evam@gmail.com</email>
- </credit>
- <credit type="editor">
- <name>Ekaterina Gerasimova</name>
- <email its:translate="no">kittykat3756@gmail.com</email>
- </credit>
- <license>
- <p>Creative Commons Share Alike 3.0</p>
- </license>
- </info>
-
- <title>Overview of instant messaging</title>
-
- <p>
- Instant messaging, sometimes abbreviated to IM, is a text-based means to
- communicate instantly over the internet and the local network. While some
- IM applications work with only one type of account, others, including
- <link xref="introduction">Empathy</link>, provide IM facilities by using
- <link xref="add-account">accounts</link> from different service providers.
- Some of these even support audio and video calling.
- </p>
-
- <table frame="all" shade="cols">
- <tr>
- <td><p><media type="image" src="figures/video_overview.png" mime="image/png" style="right" width="150" height="150" its:translate="no" /></p></td>
- <td><p><media type="image" src="figures/conf_overview.png" mime="image/png" style="right" width="150" height="150" its:translate="no" /></p></td>
- <td><p><media type="image" src="figures/croom_overview.png" mime="image/png" style="right" width="150" height="150" its:translate="no" /></p></td>
- </tr>
- <tr>
- <td><p>Video Conference</p></td>
- <td><p>Group chats</p></td>
- <td><p>Chat rooms</p></td>
- </tr>
- </table>
-
- <p>
- Some instant messaging applications can be used to connect to chat rooms,
- online places where like-minded people meet to talk. One popular means to
- connect to several chat rooms is the Internet Relay Chat, also known as
- <link xref="irc-manage">IRC</link>. IRC provides
- <link xref="irc-join-room">public</link> chat rooms, which are open to
- anyone who creates an account on the IRC Server, and private chat rooms,
- which are <link xref="irc-join-pwd">password protected</link>
- and open only to a select few.
- </p>
-
-</page>
diff --git a/help/C/prev-conv.page b/help/C/prev-conv.page
deleted file mode 100644
index 97718427..00000000
--- a/help/C/prev-conv.page
+++ /dev/null
@@ -1,118 +0,0 @@
-<page xmlns="http://projectmallard.org/1.0/"
- xmlns:e="http://projectmallard.org/experimental/"
- type="topic" style="tasks"
- id="prev-conv">
-
- <info>
- <link type="guide" xref="index#text-conv"/>
- <desc>Browse or search your previous conversations.</desc>
- <revision pkgversion="2.28" version="0.1" date="2009-08-17" status="stub"/>
- <revision pkgversion="2.28" version="0.2" date="2009-08-31" status="review">
- <!--
- <e:review by="shaunm@gnome.org" date="2009-08-31" status="done"/>
- -->
- </revision>
- <revision pkgversion="3.2" version="0.2" date="2011-12-19" status="review"/>
- <credit type="author">
- <name>Milo Casagrande</name>
- <email>milo@ubuntu.com</email>
- </credit>
- <credit type="author">
- <name>Shaun McCance</name>
- <email>shaunm@gnome.org</email>
- </credit>
- <license>
- <p>Creative Commons Share Alike 3.0</p>
- </license>
-<!--
- <copyright>
- <year>2009</year>
- <name>GNOME Documentation Project</name>
- </copyright>
- <include href="legal.xml" xmlns="http://www.w3.org/2001/XInclude"/>
--->
- </info>
-
- <title>View previous conversations</title>
-
- <p>
- <app>Empathy</app> automatically saves all your text conversations you have
- with your contacts. You can <link xref="#search">search through all of your
- previous conversations</link> or <link xref="#browse">browse previous
- conversations</link> by contact and date.
- </p>
-
- <note>
- <p>
- You do not need to be connected to the Internet to view and search your previous
- conversations.
- </p>
- </note>
-
- <section id="search" style="task">
- <title>Search previous conversations</title>
-
- <p>You can perform a full-text search through all of your previous conversations.</p>
-
- <steps>
- <item>
- <p>From the <gui>Contact List</gui> window, choose <guiseq><gui>View</gui>
- <gui>Previous Conversations</gui></guiseq>. Alternatively, press <key>F3</key>.</p>
- </item>
- <item>
- <p>Select an account from the drop-down list in the top. A list of
- contacts and chat room for that account will be shown below.</p>
- </item>
- <item>
- <p>Type the text you want to search for in the <gui>Search</gui> text field.
- </p>
- </item>
- <item>
- <p>
- Any conversations that matched your search terms will be shown. By
- default, conversations are ordered by date.
- </p>
- </item>
- </steps>
- </section>
-
- <section id="browse" style="task">
- <title>Browse previous conversations</title>
-
- <p>You can browse your previous conversations with your contacts or in
- chat rooms by date.</p>
-
- <steps>
- <item>
- <p>From the <gui>Contact List</gui> window, choose <guiseq><gui>View</gui>
- <gui>Previous Conversations</gui></guiseq>. Alternatively, press <key>F3</key>.</p>
- </item>
- <item>
- <p>Select an account from the drop-down list in the top left. A list of
- contacts and chat room for that account will be shown below.</p>
- </item>
- <item>
- <p>Select a contact or chat room to view your previous conversations from.
- By default the most recent conversation will be shown.</p>
- </item>
- <item>
- <p>You can browse your conversations by date. Days on which you had a conversation
- with the selected contact will be shown in bold text. Click a date to select it.
- Click the arrows next to the month and year to browse earlier dates.</p>
- </item>
- </steps>
-
- <p>
- You can search for text in the conversations by typing into the
- search field at the top. The matching conversations will be showed.
- </p>
-
- <note style="tip">
- <p>You can quickly view the previous conversations with one of your contacts
- from the <gui>Contact List</gui> window. Simply right click the contact and
- choose <gui>Previous Conversations</gui>. The <gui>Previous
- Conversations</gui> window will open with that contact already selected.</p>
- </note>
-
- </section>
-</page>
diff --git a/help/C/prob-conn-acctdisabled.page b/help/C/prob-conn-acctdisabled.page
deleted file mode 100644
index 926f6548..00000000
--- a/help/C/prob-conn-acctdisabled.page
+++ /dev/null
@@ -1,72 +0,0 @@
-<page xmlns="http://projectmallard.org/1.0/"
- type="topic"
- id="prob-conn-acctdisabled">
-
- <info>
- <link type="guide" xref="prob-conn"/>
- <desc>
- The instant messaging account that you want to use is not enabled in
- the list of accounts.
- </desc>
- <revision pkgversion="2.28" version="0.1" date="2009-06-17" status="draft"/>
- <revision pkgversion="2.28" version="0.2" date="2009-08-14" status="review"/>
- <revision pkgversion="3.2" version="0.3" date="2011-12-18" status="review"/>
- <credit type="author">
- <name>Phil Bull</name>
- <email>philbull@gmail.com</email>
- </credit>
- <credit type="author">
- <name>Milo Casagrande</name>
- <email>milo@ubuntu.com</email>
- </credit>
- <license>
- <p>Creative Commons Share Alike 3.0</p>
- </license>
-<!--
- <copyright>
- <year>2009</year>
- <name>GNOME Documentation Project</name>
- </copyright>
- <include href="legal.xml" xmlns="http://www.w3.org/2001/XInclude" />
--->
- </info>
-
- <title>My account is not enabled</title>
-
- <p>
- If the instant messaging account that you want to use is not enabled in the
- drop-down account list when you try to start a new conversation or join a
- room, your account details may not be correct.
- </p>
-
- <steps>
- <item>
- <p>
- Make sure that you are connected to the Internet, or to a local area network.
- </p>
- </item>
- <item>
- <p>
- Choose <guiseq><gui>Edit</gui><gui>Accounts</gui></guiseq> and select the account
- that is not working.
- </p>
- </item>
- <item>
- <p>
- Type your username and password again to make sure that they are correct.
- </p>
- </item>
- <item>
- <p>
- Check in the <gui>Advanced</gui> section that all the details are correct.
- You should be able to find these details from the website of the messaging service.
- </p>
- </item>
- <item>
- <p>
- Check that the account is switched on.
- </p>
- </item>
- </steps>
-
-</page>
diff --git a/help/C/prob-conn-auth.page b/help/C/prob-conn-auth.page
deleted file mode 100644
index 0ce4a506..00000000
--- a/help/C/prob-conn-auth.page
+++ /dev/null
@@ -1,73 +0,0 @@
-<page xmlns="http://projectmallard.org/1.0/"
- xmlns:its="http://www.w3.org/2005/11/its"
- type="topic"
- id="prob-conn-auth">
-
- <info>
- <link type="guide" xref="prob-conn"/>
- <link type="seealso" xref="create-account"/>
- <desc>
- An error message which says “<gui>Authentication failed</gui>” appears
- in the main window.
- </desc>
- <revision pkgversion="2.28" version="0.1" date="2009-06-17" status="draft"/>
- <revision pkgversion="2.28" version="0.2" date="2009-07-23" status="draft"/>
- <revision pkgversion="2.28" version="0.3" date="2009-08-14" status="review"/>
- <revision pkgversion="2.30" version="0.4" date="2010-02-16" status="review"/>
- <credit type="author">
- <name>Phil Bull</name>
- <email its:translate="no">philbull@gmail.com</email>
- </credit>
- <credit type="author">
- <name>Milo Casagrande</name>
- <email its:translate="no">milo@ubuntu.com</email>
- </credit>
- <license>
- <p>Creative Commons Share Alike 3.0</p>
- </license>
-<!--
- <copyright>
- <year>2009</year>
- <name>GNOME Documentation Project</name>
- </copyright>
- <include href="legal.xml" xmlns="http://www.w3.org/2001/XInclude" />
--->
- </info>
-
- <title>I get a message that says “Authentication failed”</title>
-
- <p>
- This kind of error happens when your instant messaging service is not allowing
- you to connect because it does not recognize your username or password for some reason.
- </p>
-
- <steps>
- <item>
- <p>
- Make sure that you are connected to the Internet, or to a local area network.
- </p>
- </item>
- <item>
- <p>
- Make sure that you have registered an account with the service you are trying
- to connect to. If you do not have an account, most services will not allow
- you to connect.
- </p>
- </item>
- <item>
- <p>Click the <media type="image" mime="image/png" src="figures/gtk-edit.png" its:translate="no"><span its:translate="yes">edit</span></media>
- icon in the error message.</p>
- </item>
- <item>
- <p>
- Type your username and password again to make sure that they are correct.
- </p>
- </item>
- <item>
- <p>
- Deselect the <gui>Enabled</gui>, and then select it again to try to
- reconnect to the service.
- </p>
- </item>
- </steps>
-</page>
diff --git a/help/C/prob-conn-name.page b/help/C/prob-conn-name.page
deleted file mode 100644
index f3bdefd3..00000000
--- a/help/C/prob-conn-name.page
+++ /dev/null
@@ -1,71 +0,0 @@
-<page xmlns="http://projectmallard.org/1.0/"
- xmlns:its="http://www.w3.org/2005/11/its"
- type="topic"
- id="prob-conn-name">
-
- <info>
- <link type="guide" xref="prob-conn"/>
- <link type="guide" xref="irc-manage#problems"/>
- <link type="seealso" xref="account-irc"/>
- <title type="link" role="error-msg">“Name in use”</title>
- <desc>
- An error message which says “<gui>Name in use</gui>” appears in the main window.
- </desc>
- <revision pkgversion="2.28" version="0.1" date="2009-07-26" status="draft"/>
- <revision pkgversion="2.28" version="0.2" date="2009-08-14" status="review"/>
- <revision pkgversion="2.30" version="0.3" date="2010-02-16" status="review"/>
- <revision pkgversion="3.2" version="0.4" date="2011-12-18" status="review"/>
- <credit type="author">
- <name>Milo Casagrande</name>
- <email its:translate="no">milo@ubuntu.com</email>
- </credit>
- <license>
- <p>Creative Commons Share Alike 3.0</p>
- </license>
-<!--
- <copyright>
- <year>2009</year>
- <name>GNOME Documentation Project</name>
- </copyright>
- <include href="legal.xml" xmlns="http://www.w3.org/2001/XInclude" />
--->
- </info>
-
- <title>I get a message that says “Name in use”</title>
-
- <p>
- This kind of error happens when you try to connect to your IRC account and
- you are using a nickname that is already being used by someone else on that particular
- network.
- </p>
-
- <steps>
- <item>
- <p>Click the <media type="image" mime="image/png" src="figures/gtk-edit.png" its:translate="no"><span its:translate="yes">edit</span></media>
- icon in the error message.</p>
- </item>
- <item>
- <list>
- <item>
- <p>
- In the <gui>Nickname</gui> text box, type a new nickname.
- </p>
- </item>
- <item>
- <p>
- If you have registered that nickname within the network you are using,
- set the password for that nickname. For more information,
- see <link xref="irc-nick-password"/>.
- </p>
- </item>
- </list>
- </item>
- <item>
- <p>
- Switch the account off, and then switch it on to try to reconnect to the
- service.
- </p>
- </item>
- </steps>
-
-</page>
diff --git a/help/C/prob-conn-neterror.page b/help/C/prob-conn-neterror.page
deleted file mode 100644
index 146c0eb7..00000000
--- a/help/C/prob-conn-neterror.page
+++ /dev/null
@@ -1,93 +0,0 @@
-<page xmlns="http://projectmallard.org/1.0/"
- xmlns:its="http://www.w3.org/2005/11/its"
- type="topic"
- id="prob-conn-neterror">
-
- <info>
- <link type="guide" xref="prob-conn"/>
- <desc>
- An error message which says “<gui>Network error</gui>” appears in the main window.
- </desc>
- <revision pkgversion="2.28" version="0.1" date="2009-06-17" status="draft"/>
- <revision pkgversion="2.28" version="0.2" date="2009-08-14" status="review"/>
- <revision pkgversion="2.28" version="0.3" date="2010-02-16" status="review"/>
- <revision pkgversion="3.2" version="0.4" date="2011-12-18" status="review"/>
- <credit type="author">
- <name>Phil Bull</name>
- <email its:translate="no">philbull@gmail.com</email>
- </credit>
- <credit type="author">
- <name>Milo Casagrande</name>
- <email its:translate="no">milo@ubuntu.com</email>
- </credit>
- <license>
- <p>Creative Commons Share Alike 3.0</p>
- </license>
-<!--
- <copyright>
- <year>2009</year>
- <name>GNOME Documentation Project</name>
- </copyright>
- <include href="legal.xml" xmlns="http://www.w3.org/2001/XInclude" />
--->
- </info>
-
- <title>I get a message that says “Network error”</title>
-
- <comment>
- <cite date="2009-08-27">shaunm</cite>
- <p>Empathy no longer allows you to create an IRC account without a valid
- nick. I've removed the guide link. Remove the text.</p>
- </comment>
-
- <p>
- This kind of error happens when <app>Empathy</app> cannot communicate
- with the instant messaging service for some reason.
- </p>
- <p>
- Also, this kind of error happens when you try to use an IRC account without
- setting a nickname.
- </p>
-
- <steps>
- <item>
- <p>
- Make sure that you are connected to the Internet, or to a local area network.
- </p>
- </item>
- <item>
- <p>Click the <media type="image" mime="image/png" src="figures/gtk-edit.png" its:translate="no"><span its:translate="yes">edit</span></media>
- icon in the error message.</p>
- </item>
- <item>
- <p>
- Check in the <gui>Advanced</gui> section that all the details are correct.
- You should be able to find these details from the website of the messaging
- service.
- </p>
-<!--
- <item>
- <p>
- In the case of an IRC account, type your nickname in the <gui>Nickname</gui>
- text box.
- </p>
- </item>
--->
- </item>
- <item>
- <p>
- Switch the account off, and then switch it on to try to reconnect to the
- service.
- </p>
- </item>
- </steps>
-
- <section id="prob-conn-neterror-proxy">
- <title>Proxy support</title>
- <p>
- At the moment <app>Empathy</app> can not be configured to work with a
- proxy.
- </p>
- </section>
-
-</page>
diff --git a/help/C/prob-conn.page b/help/C/prob-conn.page
deleted file mode 100644
index 332b2f56..00000000
--- a/help/C/prob-conn.page
+++ /dev/null
@@ -1,31 +0,0 @@
-<page xmlns="http://projectmallard.org/1.0/"
- type="guide"
- id="prob-conn">
-
- <info>
- <link type="guide" xref="index#problems"/>
- <desc>
- Diagnose common problems connecting to an instant messaging service.
- </desc>
- <revision pkgversion="2.28" version="0.1" date="2009-06-17" status="draft"/>
- <revision pkgversion="2.28" version="0.2" date="2009-07-26" status="draft"/>
- <revision pkgversion="2.28" version="0.3" date="2009-08-14" status="review"/>
- <credit type="author">
- <name>Phil Bull</name>
- <email>philbull@gmail.com</email>
- </credit>
- <license>
- <p>Creative Commons Share Alike 3.0</p>
- </license>
-<!--
- <copyright>
- <year>2009</year>
- <name>GNOME Documentation Project</name>
- </copyright>
- <include href="legal.xml" xmlns="http://www.w3.org/2001/XInclude" />
--->
- </info>
-
- <title>Problems connecting to an instant messaging service</title>
-
-</page>
diff --git a/help/C/remove-account.page b/help/C/remove-account.page
deleted file mode 100644
index 85b6ac07..00000000
--- a/help/C/remove-account.page
+++ /dev/null
@@ -1,63 +0,0 @@
-<page xmlns="http://projectmallard.org/1.0/"
- xmlns:e="http://projectmallard.org/experimental/"
- type="topic" style="task"
- id="remove-account">
-
- <info>
- <link type="guide" xref="index#accounts"/>
- <desc>Completely remove an account from <app>Empathy</app>.</desc>
- <revision pkgversion="2.28" version="0.1" date="2009-06-14" status="draft"/>
- <revision pkgversion="2.28" version="0.2" date="2009-08-10" status="review"/>
- <revision pkgversion="2.28" version="0.3" date="2009-08-27" status="review">
- <!--
- <e:review by="shaunm@gnome.org" date="2009-08-31" status="done"/>
- -->
- </revision>
- <revision pkgversion="2.30" version="0.4" date="2010-04-19" status="review"/>
- <revision pkgversion="3.2" version="0.5" date="2011-12-19" status="review"/>
- <credit type="author">
- <name>Milo Casagrande</name>
- <email>milo@ubuntu.com</email>
- </credit>
- <license>
- <p>Creative Commons Share Alike 3.0</p>
- </license>
-<!--
- <copyright>
- <year>2009</year>
- <name>GNOME Documentation Project</name>
- </copyright>
- <include href="legal.xml" xmlns="http://www.w3.org/2001/XInclude"/>
--->
- </info>
-
- <title>Remove an account</title>
-
- <p>You can completely remove an account from <app>Empathy</app> if you no
- longer wish to use the account. If you wish to use the account in
- <app>Empathy</app> again in the future, you will have to add your account
- details again.</p>
-
- <steps>
- <item>
- <p>From the <gui>Contact List</gui> window, choose <guiseq><gui>Edit</gui>
- <gui>Accounts</gui></guiseq>, or press <key>F4</key>.</p>
- </item>
- <item>
- <p>Select the account you wish to remove from the accounts list on the
- left side of the window.</p>
- </item>
- <item>
- <p>Click <gui style="button">-</gui>.</p>
- </item>
- <item>
- <p>A dialog will be shown asking for confirmation. Click the <gui>Remove</gui>
- button to permanently remove the account.</p>
- </item>
- </steps>
-
- <note>
- <p>Even after removing an account, <app>Empathy</app> does not delete
- your conversation history for that account.</p>
- </note>
-</page>
diff --git a/help/C/salut-protocol.page b/help/C/salut-protocol.page
deleted file mode 100644
index ba060ce2..00000000
--- a/help/C/salut-protocol.page
+++ /dev/null
@@ -1,58 +0,0 @@
-<page xmlns="http://projectmallard.org/1.0/"
- xmlns:e="http://projectmallard.org/experimental/"
- type="topic"
- id="salut-protocol">
-
- <info>
- <link type="seealso" xref="create-account"/>
- <desc>
- Understanding the People Nearby feature.
- </desc>
- <revision pkgversion="2.28" version="0.1" date="2009-08-12" status="draft"/>
- <revision pkgversion="2.28" version="0.1" date="2009-08-14" status="review">
- <!--
- <e:review by="shaunm@gnome.org" date="2009-09-09" status="deferred"/>
- -->
- </revision>
- <credit type="author">
- <name>Milo Casagrande</name>
- <email>milo@ubuntu.com</email>
- </credit>
- <license>
- <p>Creative Commons Share Alike 3.0</p>
- </license>
-<!--
- <copyright>
- <year>2009</year>
- <name>GNOME Documentation Project</name>
- </copyright>
- <include href="legal.xml" xmlns="http://www.w3.org/2001/XInclude"/>
--->
- </info>
-
- <title>What is People Nearby?</title>
-
- <comment>
- <cite date="2009-09-09">Shaun McCance</cite>
- <p>I'd like to see this played up a bit more.</p>
- </comment>
-
- <p>
- The People Nearby service is a serverless communication service:
- you do not need to connect and authenticate to a central server in
- order to use it.
- </p>
- <p>
- This kind of serverless messaging system is restricted to a local area
- network and an active Internet connection is not necessary.
- </p>
- <p>
- The people that use this service inside the same local area network
- will be auto-discovered, and it will be possible to send them messages
- and files as with other services.
- </p>
- <p>
- All the modern local area networks should be able to support this kind
- of service.
- </p>
-</page>
diff --git a/help/C/send-file.page b/help/C/send-file.page
deleted file mode 100644
index 53c9cafd..00000000
--- a/help/C/send-file.page
+++ /dev/null
@@ -1,99 +0,0 @@
-<page xmlns="http://projectmallard.org/1.0/"
- xmlns:e="http://projectmallard.org/experimental/"
- type="topic"
- id="send-file">
-
- <info>
- <link type="guide" xref="index#advanced"/>
- <desc>Send a file from your computer to one of your contacts.</desc>
- <revision pkgversion="2.28" version="0.1" date="2009-06-14" status="draft"/>
- <revision pkgversion="2.28" version="0.2" date="2009-07-21" status="draft"/>
- <revision pkgversion="2.28" version="0.2" date="2009-08-14" status="review">
- <!--
- <e:review by="shaunm@gnome.org" date="2009-09-09" status="deferred"/>
- -->
- </revision>
- <credit type="author">
- <name>Phil Bull</name>
- <email>philbull@gmail.com</email>
- </credit>
- <credit type="author">
- <name>Milo Casagrande</name>
- <email>milo@ubuntu.com</email>
- </credit>
- <license>
- <p>Creative Commons Share Alike 3.0</p>
- </license>
-<!--
- <copyright>
- <year>2009</year>
- <name>GNOME Documentation Project</name>
- </copyright>
- <include href="legal.xml" xmlns="http://www.w3.org/2001/XInclude" />
--->
- </info>
-
- <title>Send files</title>
-
- <steps>
- <item>
- <p>
- From the <gui>Contact List</gui> window, perform one of the following:
- </p>
- <list>
- <item>
- <p>
- Right click on the contact you want to send a file to, and choose <gui>Send file</gui>.
- </p>
- </item>
- <item>
- <p>
- Click on the contact you want to send a file, and choose <guiseq><gui>Edit</gui>
- <gui>Contact</gui><gui>Send file</gui></guiseq>.
- </p>
- </item>
- </list>
- </item>
- <item>
- <p>
- Select the file to send, and click on <gui>Send</gui>.
- </p>
- </item>
- <item>
- <p>
- The <gui>File Transfers</gui> window will appear.
- </p>
- <p>
- Wait for your contact to accept the file transfer, or click
- <gui>Stop</gui> to halt the transfer.
- </p>
- </item>
- <item>
- <p>
- Once the transfer is finished, it is possible to close the <gui>File Transfers</gui>
- window.
- </p>
- </item>
- </steps>
-
- <note style="tip">
- <p>
- If you have multiple finished transfers listed in the window, click on
- <gui>Clear</gui> to empty the list. This will only remove the files from the
- list and will not delete them from your computer.
- </p>
- </note>
- <note>
- <p>
- It is possible to send files only using the following services: <em>Jabber</em>,
- <em>Google Talk</em> and <em>People Nearby</em>.
- </p>
- </note>
- <note>
- <p>
- In order to send a file to someone, you need to be connected to the Internet, or to
- a local area network.
- </p>
- </note>
-
-</page>
diff --git a/help/C/send-message.page b/help/C/send-message.page
deleted file mode 100644
index 8751f23e..00000000
--- a/help/C/send-message.page
+++ /dev/null
@@ -1,74 +0,0 @@
-<page xmlns="http://projectmallard.org/1.0/"
- xmlns:e="http://projectmallard.org/experimental/"
- type="topic"
- id="send-message">
-
- <info>
- <link type="guide" xref="index#text-conv"/>
- <desc>Send a message to one of your contacts.</desc>
- <revision pkgversion="2.28" version="0.1" date="2009-06-14" status="draft"/>
- <revision pkgversion="2.28" version="0.2" date="2009-08-14" status="review">
- <!--
- <e:review by="shaunm@gnome.org" date="2009-09-09" status="deferred"/>
- -->
- </revision>
- <revision pkgversion="2.32" version="0.3" date="2010-09-09" status="review"/>
- <credit type="author">
- <name>Phil Bull</name>
- <email>philbull@gmail.com</email>
- </credit>
- <license>
- <p>Creative Commons Share Alike 3.0</p>
- </license>
-<!--
- <copyright>
- <year>2009</year>
- <name>GNOME Documentation Project</name>
- </copyright>
- <include href="legal.xml" xmlns="http://www.w3.org/2001/XInclude" />
--->
- </info>
-
- <title>Send a message to someone</title>
-
- <steps>
- <item>
- <p>
- From the <gui>Contact List</gui> window, double-click the name of the
- contact that you want to have a conversation with.
- </p>
- </item>
- <item>
- <p>
- A new window will open. Type a message into the box at the
- bottom of the window and press <key>Enter</key> to send it.
- </p>
- </item>
- </steps>
-
- <section id="send-meta-contact" style="2column">
- <title>Send a message to a meta-contact</title>
- <steps>
- <item>
- <p>
- From the <gui>Contact List</gui> window, right-click on the meta-contact.
- </p>
- </item>
- <item>
- <p>
- Select the contact you want to have the conversation, and from the menu
- select <gui style="menuitem">Chat</gui>.
- </p>
- </item>
- </steps>
- <note style="tip">
- <p>
- To recognize if a contact is a <em>meta-contact</em>, move your mouse on
- a contact in the <gui>Contact List</gui> window, and stop over it for a
- second: a small pop-up message will appear showing the number of the
- contacts that form the meta-contact.
- </p>
- </note>
- </section>
-
-</page>
diff --git a/help/C/set-custom-status.page b/help/C/set-custom-status.page
deleted file mode 100644
index ae93883f..00000000
--- a/help/C/set-custom-status.page
+++ /dev/null
@@ -1,148 +0,0 @@
-<page xmlns="http://projectmallard.org/1.0/"
- type="topic"
- id="set-custom-status">
-
- <info>
- <link type="guide" xref="index#accounts"/>
- <link type="seealso" xref="change-status"/>
- <link type="seealso" xref="status-icons"/>
- <desc>
- Add, edit or delete personal messages for your status.
- </desc>
- <revision pkgversion="2.28" version="0.1" date="2009-06-30" status="draft"/>
- <revision pkgversion="2.28" version="0.2" date="2009-08-10" status="review"/>
- <credit type="author">
- <name>Jim Campbell</name>
- <email>jwcampbell@gmail.com</email>
- </credit>
- <credit type="author">
- <name>Milo Casagrande</name>
- <email>milo@ubuntu.com</email>
- </credit>
- <license>
- <p>Creative Commons Share Alike 3.0</p>
- </license>
-<!--
- <copyright>
- <year>2009</year>
- <name>GNOME Documentation Project</name>
- </copyright>
- <include href="legal.xml" xmlns="http://www.w3.org/2001/XInclude" />
--->
- </info>
-
- <title>Set a custom message</title>
-
- <p>
- Sometimes you may want to set a custom message for your status, for example to let
- people know that you will be unavailable for a certain period of time.
- </p>
- <p>
- It is possible to set a custom message based on the different statuses available.
- </p>
-
- <steps>
- <item>
- <p>
- From the <gui>Contact List</gui> window, click on the drop-down list at
- the top.
- </p>
- </item>
- <item>
- <p>
- Select the status you want to add a custom message to. You have to select the one
- identified with the label <gui>Custom Message</gui>.
- </p>
- </item>
- <item>
- <p>
- Enter your custom message in the text box at the top of the window, and
- press <key>Enter</key> to set the message.
- </p>
- </item>
- <item>
- <p>
- If you want to set the custom message as a favorite, saving it in order to use it
- again, click on the little heart on the right of the text box where you wrote your
- custom message.
- </p>
- <p>
- If you do not do it, the custom message will not be available the next time you
- use <app>Empathy</app>. It will be saved only for the current session.
- </p>
- </item>
- </steps>
-
- <section id="edit-custom">
-
- <title>Edit and remove a custom message</title>
-
- <steps>
- <item>
- <p>
- From the <gui>Contact List</gui> window, click on the drop-down list at
- the top.
- </p>
- </item>
- <item>
- <p>
- Select <gui>Edit Custom Message</gui>.
- </p>
- </item>
- <item>
- <list>
- <item>
- <p>
- To edit a custom message:
- </p>
- <steps>
- <item>
- <p>
- From the <gui>Saved Presets</gui> box, select the status message
- you want to edit and double-click on it.
- </p>
- </item>
- <item>
- <p>
- Type the new custom message and press <key>Enter</key> to modify it.
- </p>
- </item>
- </steps>
- </item>
- <item>
- <p>
- To remove a custom message:
- </p>
- <steps>
- <item>
- <p>
- From the <gui>Saved Presets</gui> box, select the status message you want
- to remove.
- </p>
- </item>
- <item>
- <p>
- Click on the <gui>Remove</gui> button.
- </p>
- </item>
- </steps>
- </item>
- </list>
- </item>
- <item>
- <p>
- When finished, click on <gui>Close</gui>.
- </p>
- </item>
- </steps>
-
- <note style="tip">
- <p>
- When you edit a custom message, it will not be set as the current
- status message. You will need to select it from the <gui>Contact List</gui> window.
- </p>
- </note>
-
- </section>
-
-</page>
diff --git a/help/C/share-desktop.page b/help/C/share-desktop.page
deleted file mode 100644
index f7cf463d..00000000
--- a/help/C/share-desktop.page
+++ /dev/null
@@ -1,104 +0,0 @@
-<page xmlns="http://projectmallard.org/1.0/"
- type="topic"
- id="share-desktop">
-
- <info>
- <link type="guide" xref="index#advanced"/>
- <desc>
- Show your desktop to your contacts.
- </desc>
- <revision pkgversion="2.28" version="0.1" date="2009-08-02" status="stub"/>
- <revision pkgversion="2.28" version="0.2" date="2009-08-10" status="review"/>
- <revision pkgversion="2.28" version="0.3" date="2009-09-05" status="review"/>
- <credit type="author">
- <name>Milo Casagrande</name>
- <email>milo@ubuntu.com</email>
- </credit>
- <credit type="author">
- <name>Ekaterina Gerasimova</name>
- <email>kittykat3756@gmail.com</email>
- </credit>
- <license>
- <p>Creative Commons Share Alike 3.0</p>
- </license>
-<!--
- <copyright>
- <year>2009</year>
- <name>GNOME Documentation Project</name>
- </copyright>
- <include href="legal.xml" xmlns="http://www.w3.org/2001/XInclude"/>
--->
- </info>
-
- <title>Share your desktop</title>
-
- <p>
- It is possible to share your desktop with some of your contacts. You can
- use this functionality to show your desktop to your contacts to, for
- example, ask for help or help your contacts resolve a problem.
- </p>
-
- <note style="tip">
- <p>
- To be able to share your desktop, you need to have a VNC server, which
- has support for the feature, installed on your system. <app>Vino</app>,
- the GNOME VNC server, has the required support.
- </p>
- </note>
-
- <steps>
- <item>
- <p>
- From the <gui>Contact List</gui> window, do one of the following:
- </p>
- <list>
- <item>
- <p>
- Select the contact you want to share your desktop with and choose
- <guiseq><gui>Edit</gui><gui>Contact</gui>
- <gui>Share My Desktop</gui></guiseq>.
- </p>
- </item>
- <item>
- <p>
- Right-click on the name of the contact you want to share your
- desktop with and select <gui>Share My Desktop</gui>.
- </p>
- </item>
- </list>
- </item>
- <item>
- <p>
- An invitation to view your desktop will be sent to the contact you have
- selected. To view your desktop, they will need to accept it.
- </p>
- </item>
- <item>
- <p>
- You can disconnect the contact from your computer using your desktop
- sharing application.
- </p>
- <note>
- <p>
- For more information about how to use the remote desktop sharing
- application, refer to its help.
- </p>
- </note>
- </item>
- </steps>
-
- <p>
- When you share your desktop with someone else, it is possible to experience
- system performance slowdown and low Internet speed.
- </p>
-
- <note>
- <p>
- Some of your contacts may not be able to use this feature. It is
- necessary for them to have version 2.28, or newer, of <app>Empathy</app>
- and a compatible remote desktop viewer application installed in their
- system.
- </p>
- </note>
-
-</page>
diff --git a/help/C/status-icons.page b/help/C/status-icons.page
deleted file mode 100644
index 1212fdb7..00000000
--- a/help/C/status-icons.page
+++ /dev/null
@@ -1,77 +0,0 @@
-<page xmlns="http://projectmallard.org/1.0/"
- xmlns:its="http://www.w3.org/2005/11/its"
- xmlns:e="http://projectmallard.org/experimental/"
- type="topic" style="concept"
- id="status-icons">
-
- <info>
- <desc>Understanding the various statuses and status icons.</desc>
- <revision pkgversion="2.28" version="0.1" date="2009-07-18" status="stub"/>
- <revision pkgversion="2.28" version="0.2" date="2009-07-21" status="draft"/>
- <revision pkgversion="2.28" version="0.2" date="2009-08-14" status="review">
- <!--
- <e:review by="shaunm@gnome.org" date="2009-09-01" status="done"/>
- -->
- </revision>
- <credit type="author">
- <name>Milo Casagrande</name>
- <email its:translate="no">milo@ubuntu.com</email>
- </credit>
- <credit type="author">
- <name>Shaun McCance</name>
- <email its:translate="no">shaunm@gnome.org</email>
- </credit>
- <license>
- <p>Creative Commons Share Alike 3.0</p>
- </license>
-<!--
- <copyright>
- <year>2009</year>
- <name>GNOME Documentation Project</name>
- </copyright>
- <include href="legal.xml" xmlns="http://www.w3.org/2001/XInclude" />
--->
- </info>
-
- <title>Status Types and Icons</title>
-
- <terms>
- <item>
- <title><media type="image" mime="image/png" src="figures/available.png" its:translate="no"><span its:translate="yes">Available icon</span></media>
- <gui>Available</gui></title>
- <p>Use the <em>Available</em> status when you are at your computer and able
- to chat with your contacts. You can set a custom message for this status.</p>
- </item>
- <item>
- <title><media type="image" mime="image/png" src="figures/busy.png" its:translate="no"><span its:translate="yes">Busy icon</span></media>
- <gui>Busy</gui></title>
- <p>Use the <em>Busy</em> status to let your contacts know that you don’t want
- to chat right now. They can still contact you, for instance if they have something
- urgent they need to discuss. By default, <app>Empathy</app> will not use notification
- bubbles and sounds when you are busy. You can set a custom message for this status.</p>
- </item>
- <item>
- <title><media type="image" mime="image/png" src="figures/away.png" its:translate="no"><span its:translate="yes">Away icon</span></media>
- <gui>Away</gui></title>
- <p>Use the <em>Away</em> status when you are going away from your computer.
- <app>Empathy</app> automatically sets your status to Away if you do not use
- your computer for a while, or if your screensaver is on. By default,
- <app>Empathy</app> will not use notification bubbles and sounds when you are
- away. You can set a custom message for this status.</p>
- </item>
- <item>
- <title><media type="image" mime="image/png" src="figures/offline.png" its:translate="no"><span its:translate="yes">Offline icon</span></media>
- <gui>Invisible</gui></title>
- <p>When you set your status to <em>Invisible</em>, you will appear as offline
- to your contacts. You will still be connected to your accounts, and you
- still see your contacts’ statuses and start conversations with them.</p>
- </item>
- <item>
- <title><media type="image" mime="image/png" src="figures/offline.png" its:translate="no"><span its:translate="yes">Offline icon</span></media>
- <gui>Offline</gui></title>
- <p>Setting your status to <em>Offline</em> disconnects you from all of
- your accounts.</p>
- </item>
- </terms>
-
-</page>
diff --git a/help/C/video-call.page b/help/C/video-call.page
deleted file mode 100644
index 0cdd63c1..00000000
--- a/help/C/video-call.page
+++ /dev/null
@@ -1,88 +0,0 @@
-<page xmlns="http://projectmallard.org/1.0/"
- xmlns:e="http://projectmallard.org/experimental/"
- xmlns:its="http://www.w3.org/2005/11/its"
- type="topic" style="task"
- id="video-call">
-
- <info>
- <link type="guide" xref="index#audio-video"/>
- <link type="seealso" xref="audio-video"/>
- <link type="seealso" xref="audio-call"/>
- <desc>
- Start a video conversation with one of your contacts.
- </desc>
- <revision pkgversion="2.28" version="0.1" date="2009-08-02" status="stub"/>
- <revision pkgversion="2.28" version="0.2" date="2009-08-14" status="review">
- <!--
- <e:review by="shaunm@gnome.org" date="2009-09-04" status="done"/>
- -->
- </revision>
- <revision pkgversion="2.30" version="0.3" date="2010-02-14" status="review"/>
- <revision pkgversion="3.2" version="0.4" date="2011-12-18" status="review"/>
- <revision pkgversion="3.8" version="0.4" date="2013-04-15" status="review"/>
-
- <credit type="author">
- <name>Milo Casagrande</name>
- <email its:translate="no">milo@ubuntu.com</email>
- </credit>
- <credit type="author">
- <name>Ekaterina Gerasimova</name>
- <email its:translate="no">kittykat3756@gmail.com</email>
- </credit>
-
- <license>
- <p>Creative Commons Share Alike 3.0</p>
- </license>
- </info>
- <title>Start a video conversation</title>
-
- <p>If you have a webcam, you can call your contacts and have a video
- conversation with them. This feature only works with certain types of
- accounts, and it requires the other person to have an application that
- supports video calls.</p>
-
- <steps>
- <item>
- <p>Right-click on the contact that you want to call and select
- <gui style="menuitem">Video Call</gui>.</p>
- </item>
- <item>
- <p>A new window will open. When the connection is established, you will
- see the total conversation time at the bottom of the window.</p>
- </item>
- <item>
- <p>To end the conversation, click on the <gui style="button">hang
- up</gui> button.</p>
- </item>
- </steps>
-
- <note style="tip">
- <p>To turn a video conversation into an audio conversation, choose
- <guiseq><gui style="menu">Video</gui><gui style="menuitem">Video Off</gui></guiseq>.</p>
- </note>
-
- <section id="video-meta-contact">
- <title>Start a video conversation with a meta-contact</title>
- <steps>
- <item>
- <p>
- From the <gui>Contact List</gui> window, right-click on the meta-contact.
- </p>
- </item>
- <item>
- <p>
- Select the contact you want to have the conversation, and from the menu
- select <gui style="menuitem">Video Call</gui>.
- </p>
- </item>
- </steps>
- <note style="tip">
- <p>
- To recognize if a contact is a <em>meta-contact</em>, move your mouse on
- a contact in the <gui>Contact List</gui> window, and stop over it for a
- second: a small pop-up message will appear showing the number of the
- contacts that form the meta-contact.
- </p>
- </note>
- </section>
-</page>
diff --git a/help/Makefile.am b/help/Makefile.am
deleted file mode 100644
index 6253e2a0..00000000
--- a/help/Makefile.am
+++ /dev/null
@@ -1,66 +0,0 @@
-@YELP_HELP_RULES@
-
-HELP_ID = empathy
-HELP_MEDIA = \
- figures/available.png \
- figures/away.png \
- figures/busy.png \
- figures/empathy-main-window.png \
- figures/empathy-logo.png \
- figures/gtk-add.png \
- figures/gtk-edit.png \
- figures/gtk-remove.png \
- figures/offline.png \
- figures/croom_overview.png \
- figures/conf_overview.png \
- figures/video_overview.png
-
-HELP_FILES = \
- account-irc.page \
- account-jabber.page \
- accounts-window.page \
- add-account.page \
- add-contact.page \
- audio-call.page \
- audio-video.page \
- change-status.page \
- create-account.page \
- disable-account.page \
- favorite-rooms.page \
- geolocation.page \
- geolocation-not-showing.page \
- geolocation-privacy.page \
- geolocation-supported.page \
- geolocation-turn.page \
- geolocation-what-is.page \
- group-conversations.page \
- hide-contacts.page \
- import-account.page \
- index.page \
- introduction.page \
- irc-commands.page \
- irc-join-pwd.page \
- irc-join-room.page \
- irc-manage.page \
- irc-nick-password.page \
- irc-send-file.page \
- irc-start-conversation.page \
- license.page \
- link-contacts.page \
- overview.page \
- prev-conv.page \
- prob-conn-acctdisabled.page \
- prob-conn-auth.page \
- prob-conn-name.page \
- prob-conn-neterror.page \
- prob-conn.page \
- remove-account.page \
- salut-protocol.page \
- send-file.page \
- send-message.page \
- set-custom-status.page \
- share-desktop.page \
- status-icons.page \
- video-call.page
-
-HELP_LINGUAS = ca cs de el en_GB es eu fi fr gl hu lv it ja pl ru sl sv te zh_CN
diff --git a/help/ca/ca.po b/help/ca/ca.po
deleted file mode 100644
index d1fdd8f1..00000000
--- a/help/ca/ca.po
+++ /dev/null
@@ -1,3533 +0,0 @@
-# Traducció del emphaty de l'equip de Softcatalà.
-# Copyright © 2009 Free Software Foundation, Inc.
-# Joan Duran <jodufi@gmail.com>, 2008, 2009.
-# Carles Ferrando Garcia <carles.ferrando@gmail.com>, 2010.
-# Manel Vidal <verduler@gmail.com>, 2013.
-# Gil Forcada <gilforcada@guifi.net>, 2013.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: emphaty\n"
-"POT-Creation-Date: 2013-05-07 13:30+0000\n"
-"PO-Revision-Date: 2013-05-08 23:43+0200\n"
-"Last-Translator: Gil Forcada <gilforcada@guifi.net>\n"
-"Language-Team: Catalan <tradgnome@softcatala.org>\n"
-"Language: ca\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"
-
-#. Put one translator per line, in the form NAME <EMAIL>, YEAR1, YEAR2
-msgctxt "_"
-msgid "translator-credits"
-msgstr ""
-"Joan Duran <jodufi@gmail.com>, 2008, 2009\n"
-"Carles Ferrando <carles.ferrando@gmail.com>, 2010\n"
-"Gil Forcada <gilforcada@guifi.net>, 2011\n"
-"Manel Vidal <verduler@gmail.com>, 2013"
-
-#: C/index.page:8(info/title)
-msgctxt "link"
-msgid "Empathy Internet Messenger"
-msgstr "Missatgeria d'Internet Empathy"
-
-#: C/index.page:9(info/title)
-msgctxt "text"
-msgid "Empathy Internet Messenger"
-msgstr "Missatgeria d'Internet Empathy"
-
-#: C/index.page:20(credit/name) C/add-account.page:21(credit/name)
-#: C/audio-call.page:22(credit/name) C/audio-video.page:17(credit/name)
-#: C/create-account.page:19(credit/name)
-#: C/disable-account.page:21(credit/name)
-#: C/favorite-rooms.page:14(credit/name) C/geolocation.page:17(credit/name)
-#: C/geolocation-not-showing.page:17(credit/name)
-#: C/geolocation-privacy.page:17(credit/name)
-#: C/geolocation-supported.page:16(credit/name)
-#: C/geolocation-turn.page:18(credit/name)
-#: C/geolocation-what-is.page:18(credit/name)
-#: C/group-conversations.page:19(credit/name)
-#: C/hide-contacts.page:11(credit/name) C/import-account.page:23(credit/name)
-#: C/introduction.page:13(credit/name) C/irc-commands.page:10(credit/name)
-#: C/irc-join-pwd.page:17(credit/name) C/irc-join-room.page:16(credit/name)
-#: C/irc-manage.page:19(credit/name) C/irc-nick-password.page:18(credit/name)
-#: C/irc-send-file.page:16(credit/name)
-#: C/irc-start-conversation.page:15(credit/name)
-#: C/link-contacts.page:15(credit/name) C/prev-conv.page:17(credit/name)
-#: C/prob-conn-acctdisabled.page:19(credit/name)
-#: C/prob-conn-auth.page:21(credit/name) C/prob-conn-name.page:18(credit/name)
-#: C/prob-conn-neterror.page:19(credit/name)
-#: C/remove-account.page:19(credit/name) C/salut-protocol.page:18(credit/name)
-#: C/send-file.page:21(credit/name) C/set-custom-status.page:19(credit/name)
-#: C/share-desktop.page:14(credit/name) C/status-icons.page:16(credit/name)
-#: C/video-call.page:25(credit/name)
-msgid "Milo Casagrande"
-msgstr "Milo Casagrande"
-
-#: C/index.page:24(license/p) C/account-irc.page:20(license/p)
-#: C/account-jabber.page:18(license/p) C/accounts-window.page:22(license/p)
-#: C/add-account.page:29(license/p) C/add-contact.page:22(license/p)
-#: C/audio-call.page:31(license/p) C/audio-video.page:21(license/p)
-#: C/change-status.page:28(license/p) C/create-account.page:23(license/p)
-#: C/disable-account.page:29(license/p) C/favorite-rooms.page:18(license/p)
-#: C/geolocation.page:21(license/p)
-#: C/geolocation-not-showing.page:21(license/p)
-#: C/geolocation-privacy.page:21(license/p)
-#: C/geolocation-supported.page:20(license/p)
-#: C/geolocation-turn.page:22(license/p)
-#: C/geolocation-what-is.page:22(license/p)
-#: C/group-conversations.page:23(license/p) C/hide-contacts.page:15(license/p)
-#: C/import-account.page:31(license/p) C/introduction.page:17(license/p)
-#: C/irc-commands.page:14(license/p) C/irc-join-pwd.page:21(license/p)
-#: C/irc-join-room.page:20(license/p) C/irc-manage.page:28(license/p)
-#: C/irc-nick-password.page:22(license/p) C/irc-send-file.page:20(license/p)
-#: C/irc-start-conversation.page:19(license/p)
-#: C/link-contacts.page:23(license/p) C/overview.page:20(license/p)
-#: C/prev-conv.page:25(license/p) C/prob-conn-acctdisabled.page:23(license/p)
-#: C/prob-conn-auth.page:25(license/p) C/prob-conn-name.page:22(license/p)
-#: C/prob-conn-neterror.page:23(license/p) C/prob-conn.page:18(license/p)
-#: C/remove-account.page:23(license/p) C/salut-protocol.page:22(license/p)
-#: C/send-file.page:25(license/p) C/send-message.page:21(license/p)
-#: C/set-custom-status.page:23(license/p) C/share-desktop.page:22(license/p)
-#: C/status-icons.page:24(license/p) C/video-call.page:34(license/p)
-msgid "Creative Commons Share Alike 3.0"
-msgstr "Creative Commons Reconeixement-Compartir Igual 3.0"
-
-#: C/index.page:30(media/span)
-msgid "Empathy Internet Messenger logo"
-msgstr "Logotip del programa de missatgeria d'Internet Empathy"
-
-#: C/index.page:28(page/title)
-msgid "<_:media-1/> Empathy Internet Messenger"
-msgstr "<_:media-1/> Missatgeria d'Internet Empathy"
-
-#: C/index.page:36(section/title)
-msgid "Account Management"
-msgstr "Gestió de comptes"
-
-#: C/index.page:40(section/title)
-msgid "Contact Management"
-msgstr "Gestió de contactes"
-
-#: C/index.page:44(section/title)
-msgid "Text Conversations"
-msgstr "Converses de text"
-
-#: C/index.page:48(section/title)
-msgid "Audio and Video Conversations"
-msgstr "Converses de veu i de vídeo"
-
-#: C/index.page:52(section/title)
-msgid "Advanced Actions"
-msgstr "Opcions avançades"
-
-#: C/index.page:56(section/title) C/irc-manage.page:64(section/title)
-msgid "Common Problems"
-msgstr "Problemes comuns"
-
-#. This is a reference to an external file such as an image or video. When
-#. the file changes, the md5 hash will change to let you know you need to
-#. update your localized copy. The msgstr is not used at all. Set it to
-#. whatever you like once you have updated your copy of the file.
-#: C/account-irc.page:106(media)
-msgctxt "_"
-msgid ""
-"external ref='figures/gtk-add.png' md5='a856b499d8d4681b70b5ce6f25bc5c6d'"
-msgstr ""
-"external ref='figures/gtk-add.png' md5='a856b499d8d4681b70b5ce6f25bc5c6d'"
-
-#. This is a reference to an external file such as an image or video. When
-#. the file changes, the md5 hash will change to let you know you need to
-#. update your localized copy. The msgstr is not used at all. Set it to
-#. whatever you like once you have updated your copy of the file.
-#.
-#. This is a reference to an external file such as an image or video. When
-#. the file changes, the md5 hash will change to let you know you need to
-#. update your localized copy. The msgstr is not used at all. Set it to
-#. whatever you like once you have updated your copy of the file.
-#.
-#. This is a reference to an external file such as an image or video. When
-#. the file changes, the md5 hash will change to let you know you need to
-#. update your localized copy. The msgstr is not used at all. Set it to
-#. whatever you like once you have updated your copy of the file.
-#.
-#. This is a reference to an external file such as an image or video. When
-#. the file changes, the md5 hash will change to let you know you need to
-#. update your localized copy. The msgstr is not used at all. Set it to
-#. whatever you like once you have updated your copy of the file.
-#: C/account-irc.page:109(media) C/prob-conn-auth.page:58(media)
-#: C/prob-conn-name.page:44(media) C/prob-conn-neterror.page:59(media)
-msgctxt "_"
-msgid ""
-"external ref='figures/gtk-edit.png' md5='4f21b451732817be0604fe3e2c8da98b'"
-msgstr ""
-"external ref='figures/gtk-edit.png' md5='4f21b451732817be0604fe3e2c8da98b'"
-
-#. This is a reference to an external file such as an image or video. When
-#. the file changes, the md5 hash will change to let you know you need to
-#. update your localized copy. The msgstr is not used at all. Set it to
-#. whatever you like once you have updated your copy of the file.
-#: C/account-irc.page:112(media)
-msgctxt "_"
-msgid ""
-"external ref='figures/gtk-remove.png' md5='215e3a325a3dd619874e35c30a018bb6'"
-msgstr ""
-"external ref='figures/gtk-remove.png' md5='215e3a325a3dd619874e35c30a018bb6'"
-
-#: C/account-irc.page:8(info/desc)
-msgid "Additional information necessary for connecting to IRC networks."
-msgstr "Informació addicional per connectar-se a xarxes d'IRC."
-
-#: C/account-irc.page:16(credit/name) C/account-jabber.page:14(credit/name)
-#: C/accounts-window.page:18(credit/name) C/add-account.page:25(credit/name)
-#: C/disable-account.page:25(credit/name)
-#: C/import-account.page:27(credit/name) C/prev-conv.page:21(credit/name)
-#: C/status-icons.page:20(credit/name)
-msgid "Shaun McCance"
-msgstr "Shaun McCance"
-
-#: C/account-irc.page:31(page/title)
-msgid "IRC account details"
-msgstr "Dades del compte d'IRC"
-
-#: C/account-irc.page:33(page/p)
-msgid ""
-"IRC accounts require different information than many other types of "
-"accounts. To create an IRC account, you must specify at least an IRC network "
-"and a nickname. This page details the information you can provide for an IRC "
-"account."
-msgstr ""
-"Els comptes d'IRC requereixen una informació diferent que els altres tipus "
-"de comptes. Per crear un compte d'IRC heu d'especificar com a mínim una "
-"xarxa d'IRC i un sobrenom. Aquesta pàgina descriu la informació que podeu "
-"proporcionar pel compte d'IRC."
-
-#: C/account-irc.page:39(note/p) C/irc-manage.page:42(note/p)
-msgid ""
-"You must have the <sys>telepathy-idle</sys> package installed to use IRC in "
-"<app>Empathy</app>."
-msgstr ""
-"Heu de tenir instal·lat el paquet <sys>telepathy-idle</sys> per utilitzar "
-"l'IRC amb l'<app>Empathy</app>."
-
-#: C/account-irc.page:45(item/title) C/account-irc.page:120(item/title)
-msgid "<gui>Network</gui>"
-msgstr "<gui>Xarxa</gui>"
-
-#: C/account-irc.page:46(item/p)
-msgid ""
-"IRC is an open system that allows people to run separate IRC networks. Each "
-"network is distinct and has its own users and chat rooms. <app>Empathy</app> "
-"lists the most popular networks in the <gui>Network</gui> drop-down list. "
-"You can add additional networks. See <link xref=\"#networks\"/> below."
-msgstr ""
-"L'IRC és un sistema obert que permet que puguin haver-hi tantes xarxes d'IRC "
-"com es vulgui. Cada xarxa és diferent de les altres i té els seus propis "
-"usuaris i sales de xat. L'<app>Empathy</app> us mostra les xarxes més "
-"populars a la llista desplegable <gui>Xarxa</gui>. Podeu afegir més xarxes "
-"si voleu. Vegeu <link xref=\"#networks\"/> més avall."
-
-#: C/account-irc.page:53(item/title)
-msgid "<gui>Nickname</gui>"
-msgstr "<gui>Sobrenom</gui>"
-
-#: C/account-irc.page:54(item/p)
-msgid ""
-"Your nickname is your unique name on the IRC network. Only one person on a "
-"network may use a given nickname. If you get an error message that says "
-"<link xref=\"prob-conn-name\" role=\"error-msg\"/> you will need to change "
-"your nickname."
-msgstr ""
-"El vostre sobrenom és el nom únic que us identifica a la xarxa d'IRC. Només "
-"una persona pot utilitzar un sobrenom específic a cada xarxa. Si rebeu un "
-"error que diu <link xref=\"prob-conn-name\" role=\"error-msg\"/> haureu de "
-"canviar el sobrenom."
-
-#: C/account-irc.page:60(item/title)
-msgid "<gui>Password</gui>"
-msgstr "<gui>Contrasenya</gui>"
-
-#: C/account-irc.page:61(item/p)
-msgid ""
-"Some servers, particularly those on private networks, require a password to "
-"connect. If you are authorized to use the network, the network "
-"administrators should provide you with a password."
-msgstr ""
-"Per connectar-se a alguns servidors, en especial els de les xarxes privades, "
-"us farà falta una contrasenya. Si esteu autoritzat a utilitzar la xarxa, els "
-"seus administradors us en proporcionaran la contrasenya."
-
-#: C/account-irc.page:65(note/title)
-msgid "NickServ Passwords"
-msgstr "Contrasenyes de NickServ"
-
-#: C/account-irc.page:66(note/p)
-msgid ""
-"On some networks, nicknames can be registered using a service known as "
-"NickServ. <app>Empathy</app> does not directly support nickname passwords. "
-"On some networks, including the popular freenode network, server passwords "
-"are automatically forwarded to NickServ, allowing you to set this field to "
-"identify yourself with NickServ. See <link xref=\"irc-nick-password\"/> for "
-"more details."
-msgstr ""
-"En algunes xarxes es poden registrar els sobrenoms amb un servei conegut com "
-"a NickServ. L'<app>Empathy</app> encara no permet utilitzar sobrenoms amb "
-"contrasenyes. En algunes xarxes, entre elles la popular xarxa freenode, els "
-"servidors de contrasenyes es reenvien automàticament al NickServ, de manera "
-"que podeu establir aquest camp per identificar-vos amb el NickServ. Vegeu "
-"<link xref=\"irc-nick-password\"/> per més informació."
-
-#: C/account-irc.page:76(item/title)
-msgid "<gui>Real name</gui>"
-msgstr "<gui>Nom real</gui>"
-
-#: C/account-irc.page:77(item/p)
-msgid ""
-"You can provide your real name in addition to your nickname. Other users "
-"will be able to see this when they view your information."
-msgstr ""
-"Podeu proporcionar el vostre nom real conjuntament amb el sobrenom. Els "
-"altres usuaris el podran veure quan vegin la vostra informació."
-
-#: C/account-irc.page:81(item/title)
-msgid "<gui>Quit message</gui>"
-msgstr "<gui>Missatge de desconnexió</gui>"
-
-#: C/account-irc.page:82(item/p)
-msgid ""
-"When you go offline, a quit message is sent to all the chat rooms you’re in "
-"and to all the users you’re having a private conversation with. Use this "
-"field to provide a custom quit message."
-msgstr ""
-"Quan sortiu, s'enviarà un missatge a totes les sales de xat que estigueu i "
-"tots els usuaris amb els que tingueu xats privats. Utilitzeu aquest camp per "
-"proporcionar un missatge de sortida personalitzat."
-
-#: C/account-irc.page:94(info/title)
-msgctxt "link"
-msgid "IRC Networks"
-msgstr "Xarxes d'IRC"
-
-#: C/account-irc.page:97(section/title)
-msgid "Networks"
-msgstr "Xarxes"
-
-#: C/account-irc.page:99(section/p)
-msgid ""
-"<app>Empathy</app> includes a list of popular IRC networks. If you wish to "
-"another IRC network, you can add it to the list. You can also modify "
-"networks and remove them from the list."
-msgstr ""
-"L'<app>Empathy</app> inclou una llista de les xarxes d'IRC més populars. Si "
-"voleu una altra xarxa, podeu afegir-la a la llista. També podeu modificar "
-"xarxes existents i esborrar-ne de la llista."
-
-#: C/account-irc.page:104(item/p)
-msgid ""
-"To add a network to the list, click <media type=\"image\" mime=\"image/png\" "
-"src=\"figures/gtk-add.png\" width=\"16\" height=\"16\">Add</media>."
-msgstr ""
-"Feu clic a <media type=\"image\" mime=\"image/png\" src=\"figures/gtk-add.png"
-"\" width=\"16\" height=\"16\">Afegeix</media> per afegir una xarxa a la "
-"llista."
-
-#: C/account-irc.page:107(item/p)
-msgid ""
-"To modify a network in the list, select the network and click <media type="
-"\"image\" mime=\"image/png\" src=\"figures/gtk-edit.png\" width=\"16\" "
-"height=\"16\">Edit</media>."
-msgstr ""
-"Seleccioneu una xarxa de la llista i feu clic a <media type=\"image\" mime="
-"\"image/png\" src=\"figures/gtk-edit.png\" width=\"16\" height=\"16\">Edita</"
-"media> per modificar una xarxa de la llista."
-
-#: C/account-irc.page:110(item/p)
-msgid ""
-"To remove a network from the list, select the network and click <media type="
-"\"image\" mime=\"image/png\" src=\"figures/gtk-remove.png\" width=\"16\" "
-"height=\"16\">Remove</media>."
-msgstr ""
-"Seleccioneu una xarxa de la llista i feu clic a <media type=\"image\" mime="
-"\"image/png\" src=\"figures/gtk-remove.png\" width=\"16\" height="
-"\"16\">Suprimeix</media> per suprimir una xarxa de la llista."
-
-#: C/account-irc.page:115(section/p)
-msgid ""
-"When adding or modifying a network, you can enter the following information:"
-msgstr ""
-"Quan afegiu o modifiqueu una xarxa podeu introduir la informació següent:"
-
-#: C/account-irc.page:121(item/p)
-msgid ""
-"This is the name of the network as you want it to appear in the list of "
-"networks."
-msgstr ""
-"Aquest és el nom de la xarxa que voleu que aparegui a la llista de xarxes."
-
-#: C/account-irc.page:125(item/title)
-msgid "<gui>Charset</gui>"
-msgstr "<gui>Joc de caràcters</gui>"
-
-#: C/account-irc.page:126(item/p)
-msgid ""
-"This specifies the character encoding that is typically used on this "
-"network. A character encoding is a specific way of recording characters "
-"internally in a computer. There are many character encodings, and you need "
-"to use the same character encoding as other users to see their messages "
-"correctly."
-msgstr ""
-"Això especifica la codificació de caràcters que s'utilitza en aquesta xarxa. "
-"Una codificació de caràcters és un format específic per enregistrar "
-"caràcters internament a l'ordinador. Hi ha moltes codificacions de caràcters "
-"i heu d'utilitzar la mateixa que els altres usuaris per veure els missatges "
-"de forma correcta."
-
-#: C/account-irc.page:135(item/p)
-msgid ""
-"By default, <app>Empathy</app> uses UTF-8, a modern character encoding that "
-"can handle text from most of the world's languages. Another common encoding "
-"for English and some other Western languages is ISO-8859-1."
-msgstr ""
-"Per defecte l'<app>Empathy</app> utilitza l'UTF-8 , una codificació de "
-"caràcters moderna que pot gestionar text escrit en la immensa majoria de les "
-"llengües del món. Una altra codificació de caràcters per l'anglès i algunes "
-"llengües occidentals és l'ISO-8859-1."
-
-#: C/account-irc.page:141(item/title)
-msgid "<gui>Servers</gui>"
-msgstr "<gui>Servidors</gui>"
-
-#: C/account-irc.page:142(item/p)
-msgid ""
-"An IRC network may have many servers you can connect to. When you are "
-"connected to a server on a particular network, you can communicate with all "
-"users on all other servers on that network. You can add and remove servers "
-"for this network using the <gui>Add</gui> and <gui>Remove</gui> buttons."
-msgstr ""
-"Una xarxa d'IRC pot tenir molts servidors als que us podeu connectar. Quan "
-"esteu connectat a un servidor d'una xarxa en particular, us podeu comunicar "
-"amb tots els usuaris de tots els servidors d'aquella xarxa. Podeu afegir o "
-"suprimir servidors per a aquesta xarxa utilitzant els botons <gui>Afegeix</"
-"gui> i <gui>Suprimeix</gui>."
-
-#: C/account-irc.page:147(item/p)
-msgid ""
-"When a server is selected, click the field under <gui>Server</gui> or "
-"<gui>Port</gui> to edit it. Alternatively, use the left and right arrow keys "
-"to focus the field, and press the space bar to begin editing."
-msgstr ""
-"Quan seleccioneu un servidor feu clic al camp de <gui>Servidor</gui> o "
-"<gui>Port</gui> per editar-lo. També ho podeu fer amb les tecles de "
-"navegació de cap a la dreta i de cap a l'esquerra per donar el focus al camp "
-"i si feu clic a la barra espaiadora editareu el camp."
-
-#: C/account-irc.page:151(item/p)
-msgid ""
-"Select the check box in the <gui>SSL</gui> column to encrypt all "
-"communication with a server. Note that this does not prevent other users on "
-"the network from seeing what you write on public chat rooms."
-msgstr ""
-"Seleccioneu la casella de selecció de la columna <gui>SSL</gui> per xifrar "
-"totes les comunicacions amb el servidor. Adoneu-vos que això no impedirà que "
-"altres usuaris de la xarxa puguin veure el que escriviu en un xat públic."
-
-#: C/account-jabber.page:7(info/desc)
-msgid "Advanced options for Jabber and Google Talk accounts."
-msgstr "Opcions avançades per als comptes de Jabber i de Google Talk."
-
-#: C/account-jabber.page:29(page/title)
-msgid "Jabber account details"
-msgstr "Dades dels comptes de Jabber"
-
-#: C/account-jabber.page:31(page/p)
-msgid ""
-"Most Jabber accounts will require only a login ID and a password to connect. "
-"For some accounts or on certain types of networks, you may need to enter "
-"additional information in the <gui>Advanced</gui> section. Normally, you "
-"will not need to use the advanced options below. For general instructions on "
-"adding an account, see <link xref=\"add-account\"/>."
-msgstr ""
-"Per connectar-se a la majoria de comptes de Jabber només fa falta el nom "
-"d'usuari i la contrasenya. Tot i així, per alguns comptes o tipus de xarxes "
-"haureu d'introduir informació addicional al secció <gui>Avançada</gui>. "
-"Normalment, no us farà falta utilitzar les opcions avançades. Vegeu <link "
-"xref=\"add-account\"/> per les instruccions generals de com afegir comptes."
-
-#: C/account-jabber.page:39(note/p)
-msgid ""
-"Google Talk is a type of Jabber account. These instructions hold for Google "
-"Talk accounts as well."
-msgstr ""
-"Com que el Google Talk també és un tipus de compte de Jabber, les "
-"instruccions següents també serveixen."
-
-#: C/account-jabber.page:45(item/title)
-msgid "<gui>Encryption required (TLS/SSL)</gui>"
-msgstr "<gui>Es requereix encriptació (TLS/SSL)</gui>"
-
-#: C/account-jabber.page:46(item/title)
-msgid "<gui>Ignore SSL certificate errors</gui>"
-msgstr "<gui>Ignora els errors del certificat SSL</gui>"
-
-#: C/account-jabber.page:47(item/p)
-msgid ""
-"Whenever possible, communication between <app>Empathy</app> and the Jabber "
-"server is encrypted. If encrypted communication is not possible, messages "
-"may be sent unencrypted. Select <gui>Encryption required</gui> to prevent "
-"<app>Empathy</app> from communicating with the Jabber server when encryption "
-"is not possible."
-msgstr ""
-"Sempre que sigui possible, es xifren les comunicacions entre l'<app>Empathy</"
-"app> i el servidor de Jabber. Si no és possible, s'envien els missatges "
-"sense xifrar. Seleccioneu <gui>Es requereix encriptació</gui> per impedir "
-"que l'<app>Empathy</app> es comuniqui amb el servidor de Jabber si no es pot "
-"establir una comunicació xifrada."
-
-#: C/account-jabber.page:52(item/p)
-msgid ""
-"Some Jabber servers may encrypt data using invalid certificates, or using "
-"certificates from unknown authorities. If you trust the server you are "
-"connecting to, you can select <gui>Ignore SSL certificate errors</gui> to "
-"allow encrypted communication with invalid certificates."
-msgstr ""
-"Alguns servidors de Jabber xifren les dades amb certificats no vàlids o "
-"d'autoritats no reconegudes. Si confieu en el servidor al que us connecteu, "
-"podeu seleccionar <gui>Ignora els errors del certificat SSL</gui> per "
-"permetre la comunicació xifrada amb certificats no vàlids."
-
-#: C/account-jabber.page:59(item/title)
-msgid "<gui>Resource</gui>"
-msgstr "<gui>Recurs</gui>"
-
-#: C/account-jabber.page:60(item/title)
-msgid "<gui>Priority</gui>"
-msgstr "<gui>Prioritat</gui>"
-
-#: C/account-jabber.page:61(item/p)
-msgid ""
-"If you have multiple applications (for instance, on separate computers) "
-"connected to your account at the same time, you can set a resource to "
-"uniquely identify each one. By default, <app>Empathy</app> will use "
-"<input>Telepathy</input> as the resource."
-msgstr ""
-"Si teniu més d'una aplicació (en ordinadors diferents) connectats al mateix "
-"temps al mateix compte, podeu configurar un recurs per identificar de forma "
-"inequívoca cadascun d'ells. Per defecte l'<app>Empathy</app> utilitzarà "
-"<input>Telepathy</input> com a recurs."
-
-#: C/account-jabber.page:65(item/p)
-msgid ""
-"You can set the priority to specify which application should receive "
-"incoming messages from your contacts. New messages will be sent to the "
-"application with the highest priority."
-msgstr ""
-"Podeu establir la prioritat per especificar quina aplicació rebrà els "
-"missatges entrants dels contactes. Els missatges nous s'enviaran a "
-"l'aplicació que tingui la màxima prioritat."
-
-#: C/account-jabber.page:70(item/title)
-msgid "<gui>Override server settings</gui>"
-msgstr "<gui>Sobreescriu els paràmetres del servidor</gui>"
-
-#: C/account-jabber.page:71(item/p)
-msgid ""
-"<app>Empathy</app> will use default settings to connect to the Jabber server "
-"based on your login ID. For some Jabber servers, you will need to enter "
-"custom server settings manually. These settings should be provided for you "
-"by your Jabber provider."
-msgstr ""
-"L'<app>Empathy</app> utilitza els paràmetres per defecte, basant-se en el "
-"nom d'usuari, per connectar-se al servidor de Jabber. Per alguns servidors "
-"de Jabber us caldrà introduir els paràmetres del servidor manualment. "
-"Aquests paràmetres els hauria de proporcionar el proveïdor de Jabber."
-
-#: C/accounts-window.page:11(info/desc)
-msgid "Add, modify, and delete accounts."
-msgstr "Afegiu, modifiqueu i suprimiu comptes."
-
-#: C/accounts-window.page:33(page/title)
-msgid "Accounts Window"
-msgstr "Finestra dels comptes"
-
-#: C/accounts-window.page:35(page/p)
-msgid ""
-"The <gui>Accounts</gui> window allows you to add, modify, and delete "
-"accounts."
-msgstr ""
-"La finestra dels <gui>Comptes</gui> us permet afegir, modificar i suprimir "
-"comptes."
-
-#: C/accounts-window.page:43(section/title)
-msgid "Account Details"
-msgstr "Dades dels comptes"
-
-#: C/accounts-window.page:44(section/p)
-msgid ""
-"For most types of accounts, you can simply enter a login ID and a password. "
-"Certain accounts or account types, however, may require additional "
-"information."
-msgstr ""
-"Per a majoria de tipus de comptes només us caldrà entrar el nom d'usuari i "
-"la contrasenya. Tanmateix alguns comptes o tipus de comptes requereixen "
-"informació addicional."
-
-#: C/add-account.page:9(info/desc)
-msgid "Add a new account to <app>Empathy</app>."
-msgstr "Afegiu un compte nou a l'<app>Empathy</app>."
-
-#: C/add-account.page:40(page/title)
-msgid "Add a new account"
-msgstr "Afegiu un compte nou"
-
-#: C/add-account.page:42(page/p)
-msgid ""
-"You can add instant messaging accounts from any supported service to "
-"communicate with all of your contacts in <app>Empathy</app>. For some "
-"account providers, these steps will also allow you to register for a new "
-"account. For more details, see <link xref=\"create-account\"/>."
-msgstr ""
-"Podeu afegir comptes de missatgeria instantània per a qualsevol servei "
-"habilitat per comunicar-vos amb el contactes a través de l'<app>Empathy</"
-"app>. Per a alguns proveïdors de comptes aquests passos us permeten "
-"registrar-hi un compte nou. Vegeu <link xref=\"create-account\"/> per a més "
-"informació."
-
-#: C/add-account.page:49(item/p) C/disable-account.page:49(item/p)
-#: C/irc-nick-password.page:50(item/p) C/remove-account.page:43(item/p)
-msgid ""
-"From the <gui>Contact List</gui> window, choose <guiseq><gui>Edit</gui> "
-"<gui>Accounts</gui></guiseq>, or press <key>F4</key>."
-msgstr ""
-"Des de la finestra <gui>Llista de contactes</gui> seleccioneu "
-"<guiseq><gui>Edita</gui><gui>Comptes</gui></guiseq> o premeu la tecla "
-"<key>F4</key>."
-
-#: C/add-account.page:53(item/p)
-msgid "Click <gui style=\"button\">+</gui>."
-msgstr "Feu clic a <gui style=\"button\">+</gui>."
-
-#: C/add-account.page:58(item/p)
-msgid ""
-"From the <gui>Protocol</gui> drop-down list, select the type of account you "
-"wish to add."
-msgstr ""
-"Des de la llista desplegable de <gui>Protocol</gui>, seleccioneu el tipus de "
-"compte que vulgueu afegir."
-
-#: C/add-account.page:62(item/p)
-msgid ""
-"If you do not already have a registered account, select <gui>Create a new "
-"account on the server</gui>. This feature is not available for all account "
-"types, and may not work with some account providers. See <link xref=\"create-"
-"account\"/> for more information."
-msgstr ""
-"Si no teniu un compte registrat, seleccioneu <gui>Crea un compte nou al "
-"servidor</gui>. Aquesta característica no està disponible per tots els tipus "
-"de comptes i pot no funcionar amb alguns proveïdors. Vegeu <link xref="
-"\"create-account\"/> per a més informació."
-
-#: C/add-account.page:69(item/p)
-msgid ""
-"Enter the required information. For most accounts, you will only need a "
-"login ID and a password. Some accounts may require additional information. "
-"See <link xref=\"accounts-window#details\"/>for more information."
-msgstr ""
-"Introduïu la informació requerida. Per la majoria de comptes només us caldrà "
-"un nom d'usuari i una contrasenya. En alguns comptes cal més informació. "
-"Vegeu <link xref=\"accounts-window#details\"/> per a més informació."
-
-#: C/add-account.page:74(item/p) C/import-account.page:61(item/p)
-#: C/irc-nick-password.page:63(item/p)
-msgid "Click <gui style=\"button\">Apply</gui>."
-msgstr "Feu clic a <gui style=\"button\">Aplica</gui>."
-
-#: C/add-account.page:81(note/p)
-msgid ""
-"To change the name that identifies the account in the <gui>Accounts</gui> "
-"window, select the account from the list on the left and either click on the "
-"name or press the space bar. Edit the account name and press <key>Enter</"
-"key> when you’re finished."
-msgstr ""
-"Per canviar el nom que identifica el compte a la finestra <gui>Comptes</"
-"gui>, seleccioneu el compte des de la llista de l'esquerra i feu clic sobre "
-"el nom o premeu la barra espaiadora. Editeu el nom del compte i feu clic a "
-"<key>Retorn</key> quan hageu acabat."
-
-#: C/add-contact.page:9(info/desc)
-msgid "Add someone to the contact list."
-msgstr "Afegiu algú a la llista de contactes."
-
-#: C/add-contact.page:18(credit/name) C/change-status.page:24(credit/name)
-#: C/prob-conn-acctdisabled.page:15(credit/name)
-#: C/prob-conn-auth.page:17(credit/name)
-#: C/prob-conn-neterror.page:15(credit/name) C/prob-conn.page:14(credit/name)
-#: C/send-file.page:17(credit/name) C/send-message.page:17(credit/name)
-msgid "Phil Bull"
-msgstr "Phil Bull"
-
-#: C/add-contact.page:33(page/title)
-msgid "Add someone to your list of contacts"
-msgstr "Afegiu algú a la llista de contactes"
-
-#: C/add-contact.page:37(item/p)
-msgid "Choose <guiseq><gui>Chat</gui><gui>Add Contact</gui></guiseq>."
-msgstr ""
-"Seleccioneu <guiseq><gui>Xat</gui><gui>Afegeix contacte</gui></guiseq>."
-
-#: C/add-contact.page:40(item/p)
-msgid ""
-"From the <gui>Account</gui> drop-down list, select the account you wish to "
-"use to connect to your contact. Your contact will need to be using the same "
-"service as the account you select."
-msgstr ""
-"Des de la llista desplegable del <gui>Compte</gui>, seleccioneu el compte "
-"que voleu utilitzar per connectar-vos amb el contacte. Haurà d'utilitzar el "
-"mateix servei que el compte que seleccioneu."
-
-#: C/add-contact.page:45(item/p)
-msgid ""
-"In the <gui>Identifier</gui> field, enter your contact’s login ID, username, "
-"screen name, or other appropriate identifier for the service type."
-msgstr ""
-"Al camp <gui>Identificador</gui> introduïu l'identificador d'entrada del "
-"contacte, el seu nom d'usuari, el nom de pantalla o qualsevol identificador "
-"apropiat per al tipus de servei."
-
-#: C/add-contact.page:49(item/p)
-msgid ""
-"In the <gui>Alias</gui> field, type your contact’s name as you would like it "
-"to appear in your contact list."
-msgstr ""
-"Al camp <gui>Àlies</gui> introduïu el nom del contacte tal com voleu que "
-"aparegui a la llista de contactes."
-
-#: C/add-contact.page:53(item/p)
-msgid "Click <gui>Add</gui> to add the person to your list of contacts."
-msgstr ""
-"Feu clic a <gui>Afegeix</gui> per afegir el contacte a la llista de "
-"contactes."
-
-#: C/add-contact.page:61(note/p)
-msgid ""
-"To add a new person to your list of contacts, you need to be connected to "
-"the Internet and to your account."
-msgstr ""
-"Per afegir una persona nova a la llista de contactes heu d'estar connectat a "
-"Internet i al compte."
-
-#: C/audio-call.page:10(info/desc)
-msgid "Call your contacts over the Internet."
-msgstr "Truqueu els contactes per Internet."
-
-#: C/audio-call.page:26(credit/name) C/overview.page:16(credit/name)
-#: C/share-desktop.page:18(credit/name) C/video-call.page:29(credit/name)
-msgid "Ekaterina Gerasimova"
-msgstr "Ekaterina Gerasimova"
-
-#: C/audio-call.page:35(page/title)
-msgid "Start an audio conversation"
-msgstr "Inicieu una conversa de veu"
-
-#: C/audio-call.page:37(page/p)
-msgid ""
-"You can call your contacts and have an audio conversation with them. This "
-"features only works with certain types of accounts and it requires the other "
-"person to have an application that supports audio calls."
-msgstr ""
-"Podeu trucar als contactes i mantenir-hi converses de veu. Aquesta "
-"característica només funciona amb alguns tipus de comptes i requereix que "
-"l'altra persona també tingui una aplicació que permeti realitzar trucades de "
-"veu."
-
-#: C/audio-call.page:43(item/p)
-msgid ""
-"Right-click on the contact that you want to call and select <gui style="
-"\"menuitem\">Audio Call</gui>."
-msgstr ""
-"Amb el botó secundari feu clic al contacte amb el qual voleu conversar i "
-"escolliu <gui style=\"menuitem\">Trucada de veu</gui>."
-
-#: C/audio-call.page:49(item/p) C/video-call.page:50(item/p)
-msgid ""
-"A new window will open. When the connection is established, you will see the "
-"total conversation time at the bottom of the window."
-msgstr ""
-"S'obrirà una finestra nova. Quan s'estableixi la connexió veureu que a la "
-"part inferior de la finestra es mostrarà la durada de la conversa."
-
-#: C/audio-call.page:55(item/p)
-msgid ""
-"To end the conversation, click the <gui style=\"button\">hand up</gui> "
-"button."
-msgstr ""
-"Per acabar la conversa feu clic al botó <gui style=\"button\">Penja</gui>."
-
-#: C/audio-call.page:63(note/p)
-msgid ""
-"To turn an audio conversation into a video conversation, choose <guiseq><gui "
-"style=\"menu\">Video</gui> <gui style=\"menuitem\">Video On</gui></guiseq>."
-msgstr ""
-"Per convertir una conversa de veu en una conversa de vídeo, escolliu "
-"<guiseq><gui style=\"menu\">Vídeo</gui> <gui style=\"menuitem\">Activa el "
-"vídeo</gui></guiseq>."
-
-#: C/audio-call.page:71(section/title)
-msgid "Start an audio conversation with a meta-contact"
-msgstr "Inicieu una conversa de veu amb un metacontacte"
-
-#: C/audio-call.page:74(item/p) C/send-message.page:53(item/p)
-#: C/video-call.page:68(item/p)
-msgid ""
-"From the <gui>Contact List</gui> window, right-click on the meta-contact."
-msgstr ""
-"Des de la finestra <gui>Llista de contactes</gui>, feu clic amb el botó "
-"secundari al metacontacte."
-
-#: C/audio-call.page:79(item/p)
-msgid ""
-"Select the contact you want to have the conversation, and from the menu "
-"select <gui style=\"menuitem\">Audio Call</gui>."
-msgstr ""
-"Seleccioneu el contacte amb el que voleu mantenir la conversa i des del menú "
-"seleccioneu <gui style=\"menuitem\">Trucada de veu</gui>."
-
-#: C/audio-call.page:86(note/p) C/send-message.page:65(note/p)
-#: C/video-call.page:80(note/p)
-msgid ""
-"To recognize if a contact is a <em>meta-contact</em>, move your mouse on a "
-"contact in the <gui>Contact List</gui> window, and stop over it for a "
-"second: a small pop-up message will appear showing the number of the "
-"contacts that form the meta-contact."
-msgstr ""
-"Per reconèixer si un contacte és un <em>metacontacte</em> situeu el ratolí a "
-"sobre d'un contacte de la finestra <gui>Llista de contactes</gui> i "
-"mantingueu-lo a sobre durant un segon: apareixerà un petit missatge emergent "
-"que mostrarà el nombre de contactes que formen el metacontacte."
-
-#. This is a reference to an external file such as an image or video. When
-#. the file changes, the md5 hash will change to let you know you need to
-#. update your localized copy. The msgstr is not used at all. Set it to
-#. whatever you like once you have updated your copy of the file.
-#: C/audio-video.page:58(media)
-msgctxt "_"
-msgid "external ref='figures/audio-input-microphone.png' md5='__failed__'"
-msgstr "external ref='figures/audio-input-microphone.png' md5='__failed__'"
-
-#. This is a reference to an external file such as an image or video. When
-#. the file changes, the md5 hash will change to let you know you need to
-#. update your localized copy. The msgstr is not used at all. Set it to
-#. whatever you like once you have updated your copy of the file.
-#: C/audio-video.page:70(media)
-msgctxt "_"
-msgid "external ref='figures/camera-web.png' md5='__failed__'"
-msgstr "external ref='figures/camera-web.png' md5='__failed__'"
-
-#: C/audio-video.page:8(info/desc)
-msgid ""
-"Information on when it is possible to have an audio or video conversation."
-msgstr ""
-"Informació sobre quan és possible realitzar una conversa de veu o de vídeo."
-
-#: C/audio-video.page:32(page/title)
-msgid "Audio and video support"
-msgstr "Àudio i vídeo"
-
-#: C/audio-video.page:34(page/p)
-msgid ""
-"You can only have audio and video conversation with contacts who are using "
-"an application which also supports this feature. When your contacts support "
-"audio or video conversations, you will see the following icons next to their "
-"names in the contact list:"
-msgstr ""
-"Només podeu realitzar converses de veu i de vídeo amb els contactes que "
-"utilitzin una aplicació que permeti aquestes característiques. Si les "
-"aplicacions dels contactes permeten realitzar converses de veu o de vídeo, "
-"veureu les icones següents al costat del seu nom a la llista de contactes:"
-
-#: C/audio-video.page:43(td/p)
-msgid "Icon"
-msgstr "Icona"
-
-#: C/audio-video.page:48(td/p)
-msgid "Description"
-msgstr "Descripció"
-
-#: C/audio-video.page:57(td/p)
-msgid ""
-"<media type=\"image\" mime=\"image/png\" src=\"figures/audio-input-"
-"microphone.png\"> Icon for audio conversation </media>"
-msgstr ""
-"<media type=\"image\" mime=\"image/png\" src=\"figures/audio-input-"
-"microphone.png\"> Icona per a una conversa de veu </media>"
-
-#: C/audio-video.page:64(td/p)
-msgid "The contact is able to have an audio conversation."
-msgstr "El contacte pot realitzar converses de veu."
-
-#: C/audio-video.page:69(td/p)
-msgid ""
-"<media type=\"image\" mime=\"image/png\" src=\"figures/camera-web.png\"> "
-"Icon for video conversation </media>"
-msgstr ""
-"<media type=\"image\" mime=\"image/png\" src=\"figures/camera-web.png\"> "
-"Icona per a una conversa de vídeo </media>"
-
-#: C/audio-video.page:76(td/p)
-msgid "The contact is able to have a video conversation."
-msgstr "El contacte pot realitzar converses de vídeo."
-
-#: C/audio-video.page:83(note/p)
-msgid ""
-"In order to have an audio conversation, you need to have a sound card that "
-"is supported by your operating system, and a working microphone."
-msgstr ""
-"Per realitzar una conversa de veu heu de tenir una targeta de so reconeguda "
-"pel sistema operatiu i un micròfon que funcioni."
-
-#: C/audio-video.page:87(note/p)
-msgid ""
-"In order to have a video conversation, you need to have a webcam that is "
-"supported by your operating system, and a working microphone."
-msgstr ""
-"Per realitzar una conversa de vídeo heu de tenir una càmera web reconeguda "
-"pel sistema operatiu i un micròfon que funcioni."
-
-#: C/audio-video.page:95(section/title)
-msgid "Supported Account Types"
-msgstr "Tipus de comptes permesos"
-
-#: C/audio-video.page:97(section/p)
-msgid ""
-"You can only have audio and video conversations using accounts on certain "
-"supported services. The following table lists whether audio and video is "
-"supported for each type of account."
-msgstr ""
-"Només podeu realitzar converses de veu i de vídeo en comptes d'alguns "
-"proveïdors de serveis. La taula següent mostra si els tipus de compte "
-"permeten converses de veu i de vídeo."
-
-#: C/audio-video.page:102(note/p)
-msgid ""
-"Account types are provided by plugins. Your system may not have all of the "
-"following types available, or it may have types not listed here. Updated "
-"plugins may make audio or video conversations possible on account types that "
-"are listed as unsupported here."
-msgstr ""
-"Els tipus de comptes es proporcionen els connectors. El sistema pot no "
-"disposar de tots el tipus llistats aquí, o pot disposar de tipus de comptes "
-"que no estiguin llistats. Versions més noves dels connectors poden fer "
-"possible les converses de veu i de vídeo en tipus de comptes que estan "
-"classificats com que no ho permeten."
-
-#: C/audio-video.page:128(td/p)
-msgid "Service"
-msgstr "Servei"
-
-#: C/audio-video.page:129(td/p)
-msgid "Audio"
-msgstr "Àudio"
-
-#: C/audio-video.page:130(td/p)
-msgid "Video"
-msgstr "Vídeo"
-
-#: C/audio-video.page:135(td/p)
-msgid "AIM"
-msgstr "AIM"
-
-#: C/audio-video.page:136(td/p) C/audio-video.page:137(td/p)
-#: C/audio-video.page:141(td/p) C/audio-video.page:142(td/p)
-#: C/audio-video.page:146(td/p) C/audio-video.page:147(td/p)
-#: C/audio-video.page:156(td/p) C/audio-video.page:157(td/p)
-#: C/audio-video.page:161(td/p) C/audio-video.page:162(td/p)
-#: C/audio-video.page:166(td/p) C/audio-video.page:167(td/p)
-#: C/audio-video.page:181(td/p) C/audio-video.page:182(td/p)
-#: C/audio-video.page:186(td/p) C/audio-video.page:187(td/p)
-#: C/audio-video.page:191(td/p) C/audio-video.page:192(td/p)
-#: C/audio-video.page:196(td/p) C/audio-video.page:197(td/p)
-#: C/audio-video.page:201(td/p) C/audio-video.page:202(td/p)
-#: C/audio-video.page:211(td/p) C/audio-video.page:212(td/p)
-#: C/audio-video.page:216(td/p) C/audio-video.page:217(td/p)
-msgid "No"
-msgstr "No"
-
-#: C/audio-video.page:140(td/p)
-msgid "Facebook Chat"
-msgstr "Xat de Facebook"
-
-#: C/audio-video.page:145(td/p)
-msgid "gadugadu"
-msgstr "gadugadu"
-
-#: C/audio-video.page:150(td/p)
-msgid "Google Talk"
-msgstr "Google Talk"
-
-#: C/audio-video.page:151(td/p) C/audio-video.page:152(td/p)
-#: C/audio-video.page:171(td/p) C/audio-video.page:172(td/p)
-#: C/audio-video.page:176(td/p) C/audio-video.page:177(td/p)
-#: C/audio-video.page:206(td/p) C/audio-video.page:207(td/p)
-msgid "Yes"
-msgstr "Sí"
-
-#: C/audio-video.page:155(td/p)
-msgid "Groupwise"
-msgstr "Groupwise"
-
-#: C/audio-video.page:160(td/p)
-msgid "ICQ"
-msgstr "ICQ"
-
-#: C/audio-video.page:165(td/p) C/create-account.page:107(section/title)
-msgid "IRC"
-msgstr "IRC"
-
-#: C/audio-video.page:170(td/p) C/create-account.page:60(section/title)
-msgid "Jabber"
-msgstr "Jabber"
-
-#: C/audio-video.page:175(td/p)
-msgid "MSN"
-msgstr "MSN"
-
-#: C/audio-video.page:180(td/p)
-msgid "myspace"
-msgstr "myspace"
-
-#: C/audio-video.page:185(td/p)
-msgid "qq"
-msgstr "qq"
-
-#: C/audio-video.page:190(td/p) C/create-account.page:78(section/title)
-msgid "People Nearby"
-msgstr "Gent propera"
-
-#: C/audio-video.page:195(td/p)
-msgid "sametime"
-msgstr "sametime"
-
-#: C/audio-video.page:200(td/p)
-msgid "silc"
-msgstr "silc"
-
-#: C/audio-video.page:205(td/p) C/create-account.page:89(section/title)
-msgid "SIP"
-msgstr "SIP"
-
-#: C/audio-video.page:210(td/p)
-msgid "Yahoo!"
-msgstr "Yahoo!"
-
-#: C/audio-video.page:215(td/p)
-msgid "zephyr"
-msgstr "zephyr"
-
-#: C/change-status.page:9(info/desc)
-msgid "Change your status to advertise your availability to your contacts."
-msgstr "Canvieu l'estat per avisar la disponibilitat als contactes."
-
-#: C/change-status.page:39(page/title)
-msgid "Change your status"
-msgstr "Canvi de l'estat"
-
-#: C/change-status.page:41(page/p)
-msgid ""
-"You can set your status to indicate your availability to your contacts. "
-"<app>Empathy</app> allows you to select from a list of defined statuses."
-msgstr ""
-"Podeu canviar l'estat per indicar la disponibilitat als contactes. "
-"L'<app>Empathy</app> us permet seleccionar-ne un d'una llista d'estats per "
-"defecte."
-
-#: C/change-status.page:46(item/p)
-msgid ""
-"Click on the drop-down list at the top of the <gui>Contact List</gui> window."
-msgstr ""
-"Feu clic a la llista desplegable a la part de dalt de la finestra "
-"<gui>Llista de contactes</gui>."
-
-#: C/change-status.page:51(item/p)
-msgid "Select a status from the list."
-msgstr "Seleccioneu un estat de la llista."
-
-#: C/change-status.page:57(page/p)
-msgid ""
-"See <link xref=\"status-icons\"/> for a list of the built-in statuses and "
-"what they mean. You can also <link xref=\"set-custom-status\">add custom "
-"status messages</link> to provide more information about your availability "
-"to your contacts."
-msgstr ""
-"Vegeu <link xref=\"status-icons\"/> per veure la llista d'estats possibles i "
-"què signifiquen. També podeu <link xref=\"set-custom-status\">afegir "
-"missatges d'estat personalitzats</link> per proporcionar informació sobre la "
-"disponibilitat als contactes."
-
-#: C/change-status.page:63(note/p)
-msgid ""
-"If you do not use your computer for a while, or if the screensaver is on, "
-"the status will be automatically set to Away."
-msgstr ""
-"Si no utilitzeu l'ordinador durant una estona o s'activa l'estalvi de "
-"pantalla, l'estat es posarà a absent."
-
-#: C/create-account.page:9(info/desc)
-msgid "Register for an account with one of the supported messaging services."
-msgstr "Registreu un compte amb un dels serveis de missatgeria habilitats."
-
-#: C/create-account.page:34(page/title)
-msgid "Register for a new account"
-msgstr "Registreu un compte nou"
-
-#: C/create-account.page:36(page/p)
-msgid ""
-"Most account types require you to create an account with a account provider "
-"before you can connect using instant messaging applications like "
-"<app>Empathy</app>. With some account providers, you can use <app>Empathy</"
-"app> to register for a new account, using the same steps as you would to "
-"<link xref=\"add-account\">add an account</link>."
-msgstr ""
-"La majoria de comptes requereixen que creeu un compte amb un proveïdor abans "
-"de connectar-vos amb aplicacions de missatgeria com l'<app>Empathy</app>. "
-"Amb alguns proveïdors de comptes, podeu utilitzar l'<app>Empathy</app> per "
-"registrar el compte nou, utilitzant el mateixos passos que si <link xref="
-"\"add-account\">afegiu un compte</link>."
-
-#: C/create-account.page:42(page/p)
-msgid ""
-"This page provides information on creating a new account for various types "
-"of accounts. Your account provider should give you a login ID and a "
-"password, as well as any additional information you need to connect using "
-"<app>Empathy</app>."
-msgstr ""
-"Aquesta pàgina proporciona informació sobre la creació de comptes nous de "
-"tipologia variada. El vostre proveïdor de comptes hauria de donar-vos un nom "
-"d'usuari i una contrasenya, així com qualsevol informació addicional que us "
-"pugui fer falta per connectar-vos amb l'<app>Empathy</app>."
-
-#: C/create-account.page:47(section/title)
-msgid "Facebook"
-msgstr "Facebook"
-
-#: C/create-account.page:48(section/p)
-msgid ""
-"Facebook is one of the most-used social networks. It allows users to create "
-"their own profile and to communicate with their friends."
-msgstr ""
-"Facebook és una de les xarxes socials més utilitzades. Permet als usuaris "
-"crear el seu propi perfil i comunicar-se amb els seus amics."
-
-#: C/create-account.page:52(section/p)
-msgid ""
-"To use Facebook to communicate with your friends, you will need to create a "
-"new account from the website: <link href=\"http://www.facebook.com\">www."
-"facebook.com</link>."
-msgstr ""
-"Per utilitzar Facebook per comunicar-vos amb els vostres amics, us cal crear "
-"un compte nou al lloc web: <link href=\"http://www.facebook.com\">www."
-"facebook.com</link>."
-
-#: C/create-account.page:62(section/p)
-msgid ""
-"Jabber is an open instant messaging system. Like email, Jabber allows you to "
-"choose your account provider and communicate with all other Jabber users, "
-"regardless of their account provider."
-msgstr ""
-"Jabber és un sistema obert de missatgeria instantània. Semblant al correu "
-"electrònic, Jabber us permet escollir el vostre proveïdor de comptes i "
-"comunicar-vos amb altres usuaris de Jabber, sense que importi el seu "
-"proveïdor de comptes."
-
-#: C/create-account.page:66(section/p)
-msgid ""
-"You will need to create a new account with a Jabber provider. There are many "
-"free providers; one popular provider is <link href=\"http://register.jabber."
-"org/\">Jabber.org</link>."
-msgstr ""
-"Haureu de crear un compte nou amb algun proveïdor de comptes Jabber. Hi ha "
-"molt proveïdors gratuïts, un dels més populars és <link href=\"http://"
-"register.jabber.org/\">Jabber.org</link>."
-
-#: C/create-account.page:71(note/p)
-msgid ""
-"If you use Google Mail or Google Talk, you already have a Jabber account. "
-"Google Talk is a Jabber service. Simply use your Google Mail address and "
-"password in <app>Empathy</app> to connect."
-msgstr ""
-"Si sou usuaris del Google Mail o del Google Talk, ja teniu un compte de "
-"Jabber. El Google Talk és un servei de Jabber. Només us cal utilitzar "
-"l'adreça i la contrasenya de Google Mail per connectar-vos a l'<app>Empathy</"
-"app>."
-
-#: C/create-account.page:80(section/p)
-msgid ""
-"You do not need to create an account with a service provider to use this "
-"feature. This service works whenever you are connected to a local network, "
-"such as a wireless hotspot. It automatically finds all other users on the "
-"network who are also using this service."
-msgstr ""
-"No us cal crear cap compte a cap proveïdor de serveis per utilitzar aquesta "
-"característica. Aquest servei funciona sempre que estigueu connectats a una "
-"xarxa d'àrea local, com un punt d'accés Wi-Fi. Us mostra tots els usuaris "
-"que fan servir aquest mateix servei de forma automàtica."
-
-#: C/create-account.page:85(section/p)
-msgid "For more information, see <link xref=\"salut-protocol\"/>."
-msgstr "Vegeu <link xref=\"salut-protocol\"/> per a més informació."
-
-#: C/create-account.page:91(section/p)
-msgid ""
-"SIP is an open system which allows users to have audio and video "
-"conversations over the Internet. You need to create an account with a SIP "
-"provider. You can communicate with all other SIP users, regardless of which "
-"SIP provider they use."
-msgstr ""
-"El SIP és un sistema obert que permet realitzar converses de veu i de vídeo "
-"per Internet. Heu de crear un compte amb un proveïdor de SIP. Podeu "
-"comunicar-vos amb qualsevol usuari de SIP sense que importi el proveïdor SIP "
-"que estiguin utilitzant."
-
-#: C/create-account.page:97(note/p)
-msgid ""
-"Due to technical differences, the free <link href=\"https://www.ekiga.net/"
-"index.php?page=register\">Ekiga.net</link> service does not currently work "
-"with <app>Empathy</app>."
-msgstr ""
-"Per motius tècnics, el servei lliure <link href=\"https://www.ekiga.net/"
-"index.php?page=register\">Ekiga.net</link> no funciona amb l'<app>Empathy</"
-"app>."
-
-#: C/create-account.page:102(section/p)
-msgid ""
-"Some SIP providers allow you to call normal phones from your computer. "
-"Generally, you will need to subscribe to a paid service for this feature."
-msgstr ""
-"Alguns proveïdors de SIP us permeten fer trucades a telèfons fixes i mòbils "
-"des de l'ordinador. Normalment us cal una subscripció a un servei de "
-"pagament per poder-ho realitzar."
-
-#: C/create-account.page:109(section/p)
-msgid ""
-"You do not need to register for an account to use IRC. Although you specify "
-"a nickname when you add an IRC account to <app>Empathy</app>, this nickname "
-"is only established each time you connect. If another user is using the "
-"nickname, you will need to choose a new nickname."
-msgstr ""
-"No us cal registrar un compte per utilitzar l'IRC. Encara que especifiqueu "
-"un sobrenom quan afegiu el compte d'IRC a l'<app>Empathy</app>, aquest "
-"sobrenom només s'utilitza cada vegada que us connecteu. Si un altre usuari "
-"està utilitzant aquest sobrenom, us caldrà canviar el sobrenom."
-
-#: C/create-account.page:114(section/p)
-msgid ""
-"Some IRC networks use a service called NickServ to allow users to protect "
-"their nicknames. See <link xref=\"irc-nick-password\"/> for more information."
-msgstr ""
-"Algunes xarxes d'IRC utilitzen un servei anomenat NickServ per permetre als "
-"usuaris protegir el seu sobrenom. Vegeu <link xref=\"irc-nick-password\"/> "
-"per a més informació."
-
-#: C/create-account.page:117(section/p)
-msgid ""
-"Some IRC servers are password protected. You will need to know the password "
-"to connect to these servers. Generally, these are private IRC networks."
-msgstr ""
-"Alguns servidors d'IRC estan protegits amb contrasenya. Haureu de saber la "
-"contrasenya per connectar-vos-hi. Generalment són xarxes d'IRC privades."
-
-#: C/create-account.page:122(section/title)
-msgid "Proprietary Services"
-msgstr "Serveis propietaris"
-
-#: C/create-account.page:124(section/p)
-msgid ""
-"There are many proprietary instant messaging services that have been "
-"developed by different companies or organizations. <app>Empathy</app> allows "
-"you to connect to an existing account for most popular services. To create a "
-"new account with one of these services, you will need to visit the service’s "
-"web site and agree to its terms of use."
-msgstr ""
-"Hi ha molts serveis de missatgeria instantània propietaris desenvolupats per "
-"diverses organitzacions o empreses. L'<app>Empathy</app> us permet connectar-"
-"vos a comptes existent de molts serveis populars. Per crear-vos-hi un compte "
-"nou haureu de visitar el lloc web i acceptar la llicència d'ús."
-
-#: C/create-account.page:132(item/p)
-msgid "<link href=\"http://dashboard.aim.com/aim\">AIM</link>"
-msgstr "<link href=\"http://dashboard.aim.com/aim\">AIM</link>"
-
-#: C/create-account.page:137(item/p)
-msgid "<link href=\"https://www.icq.com/register/\">ICQ</link>"
-msgstr "<link href=\"https://www.icq.com/register/\">ICQ</link>"
-
-#: C/create-account.page:142(item/p)
-msgid "<link href=\"https://accountservices.passport.net\">MSN</link>"
-msgstr "<link href=\"https://accountservices.passport.net\">MSN</link>"
-
-#: C/create-account.page:147(item/p)
-msgid "<link href=\"https://login.yahoo.com/config/login\">Yahoo!</link>"
-msgstr "<link href=\"https://login.yahoo.com/config/login\">Yahoo!</link>"
-
-#: C/disable-account.page:9(info/desc)
-msgid "Prevent <app>Empathy</app> from automatically logging in to an account."
-msgstr ""
-"Impedeix que l'<app>Empathy</app> es connecti de forma automàtica a un "
-"compte."
-
-#: C/disable-account.page:40(page/title)
-msgid "Disable an account"
-msgstr "Inhabiliteu un compte"
-
-#: C/disable-account.page:42(page/p)
-msgid ""
-"You can disable an account to prevent <app>Empathy</app> from logging in to "
-"it without removing the account entirely. You may wish to disable and re-"
-"enable an account if you only want to be logged in to the account at certain "
-"times, but you still want to use <app>Empathy</app> for other accounts."
-msgstr ""
-"Podeu inhabilitar un compte per evitar que l'<app>Empathy</app> es connecti "
-"sense esborrar completament el compte. Podeu desactivar i reactivar el "
-"compte si només voleu connectar-vos al compte esporàdicament, però encara "
-"voleu utilitzar l'<app>Empathy</app> per altres comptes."
-
-#: C/disable-account.page:53(item/p)
-msgid ""
-"Select the account you wish to disable from the accounts list on the left "
-"side of the window."
-msgstr ""
-"Seleccioneu el compte que voleu inhabilitar del llistat de comptes al quadre "
-"de l'esquerra de la finestra."
-
-#: C/disable-account.page:57(item/p)
-msgid "On the right side of the window, switch it off."
-msgstr "A la part dreta de la finestra, inhabiliteu-lo."
-
-#: C/disable-account.page:62(page/p)
-msgid "To re-enable the account, switch it on."
-msgstr "Per tornar a activar el compte, habiliteu-lo."
-
-#: C/favorite-rooms.page:10(info/desc)
-msgid "Set, join and manage favorite rooms."
-msgstr "Com configurar, entrar i gestionar sales preferides."
-
-#: C/favorite-rooms.page:29(page/title)
-msgid "Favorite rooms"
-msgstr "Sales preferides"
-
-#: C/favorite-rooms.page:32(section/title)
-msgid "Set a room as a favorite"
-msgstr "Establiu un sala com a preferida"
-
-#: C/favorite-rooms.page:35(item/p)
-msgid "Join a room."
-msgstr "Com entrar en una sala."
-
-#: C/favorite-rooms.page:40(item/p)
-msgid ""
-"See <link xref=\"irc-join-room\"/> for more information on how to join an "
-"IRC room."
-msgstr ""
-"Per saber-ne més de com entrar en una sala d'IRC vegeu <link xref=\"irc-join-"
-"room\"/>."
-
-#: C/favorite-rooms.page:46(item/p)
-msgid ""
-"See <link xref=\"group-conversations\"/> for more information on how to "
-"start or join a group conversation."
-msgstr ""
-"Per saber-ne més de com iniciar o unir-se a una conversa de grup vegeu <link "
-"xref=\"group-conversations\"/>."
-
-#: C/favorite-rooms.page:54(item/p)
-msgid ""
-"From the conversation window, choose <guiseq><gui>Conversation</"
-"gui><gui>Favorite Chat Room</gui></guiseq>."
-msgstr ""
-"A la finestra de conversa escolliu <guiseq><gui>Conversa</gui><gui>Sala de "
-"xat preferida</gui></guiseq>."
-
-#: C/favorite-rooms.page:63(section/title)
-msgid "Join favorite rooms"
-msgstr "Com entrar a sales preferides"
-
-#: C/favorite-rooms.page:66(item/p) C/send-file.page:40(item/p)
-msgid "From the <gui>Contact List</gui> window, perform one of the following:"
-msgstr ""
-"Des de la finestra <gui>Llista de contactes</gui> executeu una de les "
-"següents accions:"
-
-#: C/favorite-rooms.page:71(item/p)
-msgid "Press <key>F5</key>."
-msgstr "Premeu <key>F5</key>."
-
-#: C/favorite-rooms.page:76(item/p)
-msgid ""
-"Choose <guiseq><gui>Room</gui><gui>Join Favorites</gui></guiseq>, to join "
-"all your favorite rooms."
-msgstr ""
-"Escolliu <guiseq><gui>Sala</gui><gui>Uneix-te als preferits</gui></guiseq>, "
-"per entrar a totes les sales preferides."
-
-#: C/favorite-rooms.page:82(item/p)
-msgid "Choose <gui>Room</gui>, and select the favorite room you want to join."
-msgstr ""
-"Escolliu <gui>Sala</gui> i seleccioneu la sala preferida a la qual voleu "
-"entrar."
-
-#: C/favorite-rooms.page:90(note/p)
-msgid ""
-"To join a favorite room, you need to be connected to the Internet and to "
-"your account."
-msgstr ""
-"Per entrar a una sala preferida us cal estar connectat a Internet i a un "
-"compte."
-
-#: C/favorite-rooms.page:98(section/title)
-msgid "Manage favorite rooms"
-msgstr "Com gestionar les sales preferides"
-
-#: C/favorite-rooms.page:101(item/p)
-msgid ""
-"From the <gui>Contact List</gui> window, choose <guiseq><gui>Room</"
-"gui><gui>Manage Favorites</gui></guiseq>."
-msgstr ""
-"A la finestra <gui>Llista de contactes</gui>, escolliu <guiseq><gui>Sala</"
-"gui><gui>Gestiona les preferides</gui></guiseq>."
-
-#: C/favorite-rooms.page:107(item/p)
-msgid ""
-"From the <gui>Account</gui> drop-down list, select the account you want to "
-"manage the favorite rooms of."
-msgstr ""
-"A la llista desplegable <gui>Compte</gui>, seleccioneu el compte del que "
-"vulgueu gestionar les sales preferides."
-
-#: C/favorite-rooms.page:111(item/p)
-msgid "Select <gui>All</gui> to see all you favorite rooms."
-msgstr "Seleccioneu <gui>Totes</gui> per veure totes les sales preferides."
-
-#: C/favorite-rooms.page:116(item/p)
-msgid "Select the favorite room you want to manage:"
-msgstr "Seleccioneu la sala preferida que voleu gestionar:"
-
-#: C/favorite-rooms.page:121(item/p)
-msgid ""
-"Select the <gui>Auto-Connect</gui> check-box in order to automatically join "
-"that room when you connect to your account."
-msgstr ""
-"Seleccioneu la caixa de verificació <gui>Connecta automàticament</gui> per "
-"entrar de forma automàtica a la sala quan us connecteu amb el compte."
-
-#: C/favorite-rooms.page:127(item/p)
-msgid "Click on <gui>Remove</gui> to remove the room from your favorites."
-msgstr ""
-"Feu clic a <gui>Suprimeix</gui> per esborrar la sala de la llista de "
-"preferides."
-
-#: C/favorite-rooms.page:134(item/p)
-msgid "When done, click <gui>Close</gui>."
-msgstr "Quan acabeu feu clic a <gui>Tanca</gui>."
-
-#: C/geolocation.page:8(info/desc)
-msgid "Use and understand geolocation in <app>Empathy</app>."
-msgstr "Com utilitzar i entendre la geolocalització a l'<app>Empathy</app>."
-
-#: C/geolocation.page:32(page/title)
-msgid "Geographical position"
-msgstr "Posició geogràfica"
-
-#: C/geolocation.page:35(section/title)
-msgid "Geolocation"
-msgstr "Geolocalització"
-
-#: C/geolocation.page:39(section/title)
-msgid "Fix common problems"
-msgstr "Arreglar problemes comuns"
-
-#: C/geolocation-not-showing.page:8(info/desc)
-msgid "<app>Empathy</app> does not publish my geographical position."
-msgstr "L'<app>Empathy</app> no publicarà la meva posició geogràfica."
-
-#: C/geolocation-not-showing.page:32(page/title)
-msgid "Geographical position not published"
-msgstr "Posició geogràfica no publicada"
-
-#: C/geolocation-not-showing.page:34(page/p)
-msgid ""
-"If your contacts cannot see your location, <app>Empathy</app> might not be "
-"able to discover with a good margin of precision your geographical position."
-msgstr ""
-"Si els contactes no poden veure la vostra localització, l'<app>Empathy</app> "
-"no podrà descobrir amb un bon marge de precisió la vostra posició geogràfica."
-
-#: C/geolocation-not-showing.page:38(page/p)
-msgid ""
-"In this case, your position will not be published, but you are still able to "
-"see the location of your contacts."
-msgstr ""
-"En aquest cas, no es publicarà la vostra posició, però podreu veure la "
-"localització dels contactes."
-
-#: C/geolocation-not-showing.page:42(page/p)
-msgid ""
-"If you want to publish your geographical position, you can try to use an "
-"external device such as a GPS."
-msgstr ""
-"Si voleu fer pública la posició geogràfica, podeu utilitzar un dispositiu "
-"extern com un GPS."
-
-#: C/geolocation-not-showing.page:48(note/p)
-msgid ""
-"In order to publish your geographical location, your Jabber server needs to "
-"support the Personal Eventing Protocal (PEP). A list of <link href=\"http://"
-"coccinella.im/servers/servers_by_pubsub_pep.html\">servers which support "
-"PEP</link> is maintained online. Google Talk does not support this feature "
-"at this time."
-msgstr ""
-"Per publicar la posició geogràfica, el servidor de Jabber ha d'implementar "
-"el Protocol personal d'esdeveniments (PEP). Hi ha una llista actualitzada de "
-"<link href=\"http://coccinella.im/servers/servers_by_pubsub_pep.html"
-"\">servidors que implementen el PEP</link> en línia. El Google Talk encara "
-"no l'implementa."
-
-#: C/geolocation-privacy.page:8(info/desc)
-msgid "What information are sent and to who."
-msgstr "Quina informació s'envia i a qui."
-
-#: C/geolocation-privacy.page:32(page/title)
-msgid "Geolocation Privacy"
-msgstr "Privacitat de la geolocalització"
-
-#: C/geolocation-privacy.page:35(section/title)
-msgid "What information is sent"
-msgstr "Quina informació s'envia"
-
-#: C/geolocation-privacy.page:36(section/p)
-msgid ""
-"What is possible to send is: your country, region, locality, area, street, "
-"building, floor, room, and postal code, longitude, latitude and altitude, "
-"speed and bearing."
-msgstr ""
-"Les dades que es poden enviar són: el país, la regió, la població, l'àrea, "
-"el carrer, l'edifici, la planta, la porta, el codi postal, la longitud, la "
-"latitud, l'alçada, la velocitat i la orientació."
-
-#: C/geolocation-privacy.page:40(section/p)
-msgid ""
-"The accuracy and the quantity of information about your geographical "
-"position are based on the software or on the infrastructure used to discover "
-"your position."
-msgstr ""
-"L'exactitud i la quantitat d'informació sobre la posició geogràfica estan "
-"basades en el programari o en la infraestructura utilitzada per descobrir la "
-"posició."
-
-#: C/geolocation-privacy.page:44(section/p)
-msgid ""
-"Different kind of networks may have different accuracy settings, and may "
-"send different information. The use of external devices such as GPS or "
-"mobile phone will increase the accuracy of the information sent."
-msgstr ""
-"Cada tipus de xarxa pot tenir uns paràmetres d'exactitud diferents i poden "
-"enviar informació diferent. L'ús de dispositius externs com un GPS o un "
-"telèfon mòbil incrementarà l'exactitud de la informació enviada."
-
-#: C/geolocation-privacy.page:49(section/p)
-msgid ""
-"When the privacy mode is enabled, nothing more precise than your city will "
-"be sent, even if you are using an external device."
-msgstr ""
-"Quan s'habilita el mode de privacitat, la màxima precisió que s'enviarà serà "
-"la ciutat, encara que feu servir un dispositiu extern."
-
-#: C/geolocation-privacy.page:56(section/title)
-msgid "Who can see the information sent"
-msgstr "Qui pot veure la informació enviada"
-
-#: C/geolocation-privacy.page:57(section/p)
-msgid "Only your contacts can see your geographical position."
-msgstr "Només els contactes poden veure la vostra posició geogràfica."
-
-#: C/geolocation-privacy.page:63(section/title)
-msgid "What is the privacy mode"
-msgstr "Què és el mode de privacitat"
-
-#: C/geolocation-privacy.page:64(section/p)
-msgid ""
-"The privacy mode, enabled by default, is a reduced accuracy mode that will "
-"decrease the accuracy of the geographical position sent to your contacts."
-msgstr ""
-"El mode de privacitat, habilitat per defecte, és un mode que redueix la "
-"precisió de la posició geogràfica que s'envia als contactes."
-
-#: C/geolocation-privacy.page:71(section/title)
-msgid "Privacy overview"
-msgstr "Descripció de la privacitat"
-
-#: C/geolocation-privacy.page:72(section/p)
-msgid ""
-"Overview of the various geolocation privacy settings in <app>Empathy</app>."
-msgstr ""
-"Descripció de varis paràmetres de geolocalització en l'<app>Empathy</app>."
-
-#: C/geolocation-privacy.page:77(item/p)
-msgid "Geolocation is not enabled by default."
-msgstr "La geolocalització no s'activa per defecte."
-
-#: C/geolocation-privacy.page:82(item/p)
-msgid "Privacy mode is enabled by default."
-msgstr "El mode de privacitat s'activa per defecte."
-
-#: C/geolocation-privacy.page:87(item/p)
-msgid ""
-"Privacy mode prevails even when using external and more precise devices."
-msgstr ""
-"El mode de privacitat preval inclús quan esteu utilitzant dispositius "
-"externs amb més precisió."
-
-#: C/geolocation-privacy.page:92(item/p)
-msgid "Only your contacts can see your position."
-msgstr "Només els contactes poden veure la vostra posició."
-
-#: C/geolocation-supported.page:7(info/desc)
-msgid "Services that supports geolocation and compatibility."
-msgstr "Serveis que utilitzen la geolocalització i la compatibilitat."
-
-#: C/geolocation-supported.page:31(page/title)
-msgid "Supported services"
-msgstr "Serveis que l'utilitzen"
-
-#: C/geolocation-supported.page:33(page/p)
-msgid ""
-"The geolocation feature at the moment is compatible only with the Jabber "
-"service. In order to use it, you and your contacts need to have a Jabber "
-"account."
-msgstr ""
-"La característica de la geolocalització, de moment, només és compatible amb "
-"el servei de Jabber. Per utilitzar-la fa falta que tant vós com els "
-"contactes tinguin un compte de Jabber."
-
-#: C/geolocation-supported.page:39(note/p)
-msgid ""
-"It is necessary that also the server you are using supports the geolocation "
-"feature. Most of the Jabber servers support it. See your service website "
-"documentation for more information."
-msgstr ""
-"És necessari que el servidor que esteu utilitzant també habiliti la "
-"característica de la geolocalització. Molt servidors de Jabber ja ho tenen "
-"habilitat. Per saber-ne més mireu la documentació del servei web."
-
-#: C/geolocation-supported.page:47(section/title)
-msgid "Compatibility"
-msgstr "Compatibilitat"
-
-#: C/geolocation-supported.page:49(section/p)
-msgid ""
-"<app>Empathy</app> geolocation feature is not compatible with other "
-"geographical position services such as <em>Google Latitude</em>, <em>Yahoo "
-"Fire Eagle</em> or <em>Brightkite</em>."
-msgstr ""
-"La característica de geolocalització de l'<app>Empathy</app> no és "
-"compatible amb altres serveis de posicionament geogràfic com el <em>Google "
-"Latitude</em>, el <em>Yahoo Fire Eagle</em> o el <em>Brightkite</em>."
-
-#: C/geolocation-turn.page:9(info/desc)
-msgid "How to activate and deactivate geolocation in <app>Empathy</app>."
-msgstr "Com activar i desactivar la geolocalització a l'<app>Empathy</app>."
-
-#: C/geolocation-turn.page:33(page/title)
-msgid "Activate/Deactivate geolocation"
-msgstr "Activeu/Desactiveu la geolocalització"
-
-#: C/geolocation-turn.page:37(item/p)
-msgid "Choose <guiseq><gui>Edit</gui><gui>Preferences</gui></guiseq>."
-msgstr "Seleccioneu <guiseq><gui>Edita</gui><gui>Preferències</gui></guiseq>."
-
-#: C/geolocation-turn.page:42(item/p)
-msgid "Select the <gui>Location</gui> tab."
-msgstr "Seleccioneu la pestanya <gui>Localització</gui>."
-
-#: C/geolocation-turn.page:47(item/p)
-msgid ""
-"Select <gui>Publish location to my contacts</gui> to activate geolocation."
-msgstr ""
-"Seleccioneu <gui>Publica la localització per als meus contactes</gui> per "
-"activar-la."
-
-#: C/geolocation-turn.page:50(item/p)
-msgid "To deactivate geolocation, deselect it."
-msgstr "Per desactivar la geolocalització, desseleccioneu-ho."
-
-#: C/geolocation-turn.page:55(item/p)
-msgid ""
-"To increase the accuracy of your position, deselect <gui>Reduce location "
-"accuracy</gui>."
-msgstr ""
-"Per augmentar l'exactitud de la vostra posició, desseleccioneu <gui>Redueix "
-"la precisió de la localització</gui>."
-
-#: C/geolocation-turn.page:61(item/p)
-msgid ""
-"If you have an external device like a GPS or want to send a more accurate "
-"position, select the appropriate option in the <gui>Location sources</gui> "
-"section."
-msgstr ""
-"Si teniu un dispositiu extern com un GPS o voleu enviar una posició més "
-"exacta, seleccioneu l'opció apropiada a la secció <gui>Fonts d'ubicació</"
-"gui>."
-
-#: C/geolocation-what-is.page:9(info/desc)
-msgid "Understanding geolocation."
-msgstr "Comprenent la geolocalització."
-
-#: C/geolocation-what-is.page:33(page/title)
-msgid "What is geolocation"
-msgstr "Què és la geolocalització?"
-
-#: C/geolocation-what-is.page:35(page/p)
-msgid ""
-"Geolocation allows you to identify the real geographical location of a "
-"computer or a device connected to the Internet."
-msgstr ""
-"La geolocalització us permet identificar la localització geogràfica real "
-"d'un ordinador o un dispositiu connectat a Internet."
-
-#: C/geolocation-what-is.page:37(page/p)
-msgid "With geolocation in <app>Empathy</app> you can:"
-msgstr "Gràcies a la geolocalització a l'<app>Empathy</app> podeu:"
-
-#: C/geolocation-what-is.page:42(item/p)
-msgid "Publish your geographical location to your contacts."
-msgstr "Fer pública la localització geogràfica als contactes."
-
-#: C/geolocation-what-is.page:47(item/p)
-msgid "See your contacts’ geographical location and quickly contact them."
-msgstr ""
-"Veure la localització geogràfica del contactes i contactar fàcilment amb "
-"ells."
-
-#: C/geolocation-what-is.page:52(item/p)
-msgid ""
-"Set the accuracy of your location and the device used to discover your "
-"location."
-msgstr ""
-"Fixar l'exactitud de la vostra localització i el dispositiu utilitzat per "
-"descobrir la localització."
-
-#: C/geolocation-what-is.page:60(note/p)
-msgid ""
-"In order to see your contacts’ geographical locations, they need to use a "
-"service and an application that supports geolocation."
-msgstr ""
-"Per veure les localitzacions geogràfiques dels contactes els caldrà un "
-"servei i una aplicació que faci ús de la geolocalització."
-
-#: C/group-conversations.page:8(info/desc)
-msgid "Start or join a group conversation with your contacts."
-msgstr "Inicieu o uniu-vos a una conversa de grup amb els contactes."
-
-#: C/group-conversations.page:34(page/title)
-msgid "Group conversations"
-msgstr "Converses de grup"
-
-#: C/group-conversations.page:36(page/p)
-msgid ""
-"Group conversations permits you to have text conversations with more than "
-"one contact at the same time."
-msgstr ""
-"Les converses de grup us permeten mantenir converses de text amb més d'un "
-"contacte al mateix temps."
-
-#: C/group-conversations.page:40(page/p)
-msgid ""
-"To have a group conversation you need to have a registered account with "
-"either Jabber or Google Talk, or a People Nearby account."
-msgstr ""
-"Per mantenir una conversa de grup us cal tindre un compte registrat a "
-"Jabber, a Google Talk o a Gent propera."
-
-#: C/group-conversations.page:46(note/p)
-msgid ""
-"You can have a group conversation only with the contacts that are using the "
-"same service as yours."
-msgstr ""
-"Sols podeu mantenir converses de grup amb els contactes que estan utilitzant "
-"el mateix servei que vós."
-
-#: C/group-conversations.page:54(section/title)
-msgid "Start a group conversation"
-msgstr "Com iniciar un conversa de grup"
-
-#: C/group-conversations.page:58(item/p)
-#: C/group-conversations.page:122(item/p) C/irc-join-room.page:39(item/p)
-msgid ""
-"From the <gui>Contact List</gui> window, choose <guiseq><gui>Room</"
-"gui><gui>Join</gui></guiseq>."
-msgstr ""
-"A la finestra <gui>Llista de contactes</gui> escolliu <guiseq><gui>Sala</"
-"gui><gui>Entra</gui></guiseq>."
-
-#: C/group-conversations.page:63(item/p)
-msgid ""
-"From the <gui>Account</gui> drop-down list, select the account you want to "
-"use for the group conversation."
-msgstr ""
-"Des de la llista desplegable <gui>Compte</gui> trieu el compte que vulgueu "
-"utilitzar per la conversa de grup."
-
-#: C/group-conversations.page:69(item/p)
-msgid ""
-"In the <gui>Server</gui> text box, type the name of server in which the "
-"conversation will be hosted."
-msgstr ""
-"Al quadre de text <gui>Servidor</gui> introduïu el nom del servidor en el "
-"qual s'hostatjarà la conversa."
-
-#: C/group-conversations.page:73(item/p)
-msgid "Leave it empty if it will be on the current server."
-msgstr "Deixeu el camp buit si serà en el servidor actual."
-
-#: C/group-conversations.page:78(item/p)
-msgid ""
-"In the <gui>Room</gui> text box, type the name you want to give to the "
-"conversation."
-msgstr ""
-"Al quadre de text <gui>Sala</gui> introduïu el nom que vulgueu donar a la "
-"conversa."
-
-#: C/group-conversations.page:82(note/p)
-msgid ""
-"This will be the name of the room you are going to have a conversation. This "
-"name will be publicly available for other people to join. It is not possible "
-"to create a private room."
-msgstr ""
-"Aquest serà el nom de la sala on mantindreu la conversa. El nom serà públic "
-"i altra gent podrà unir-s'hi. No es poden crear sales privades."
-
-#: C/group-conversations.page:90(item/p)
-msgid ""
-"To invite other contacts to join the group conversation, from the "
-"<gui>Contact List</gui> window, select the contact you want to invite, and "
-"perform one of the following:"
-msgstr ""
-"Per convidar altres contactes a unir-se a la conversa de grup, seleccioneu "
-"el contacte que voleu convidar des de la finestra <gui>Llista de contactes</"
-"gui> i feu el següent:"
-
-#: C/group-conversations.page:97(item/p)
-msgid "Right-click on the contact and choose <gui>Invite to chatroom</gui>."
-msgstr ""
-"Feu clic amb el botó secundari sobre el contacte i escolliu <gui>Convida a "
-"la sala de xat</gui>."
-
-#: C/group-conversations.page:102(item/p)
-msgid ""
-"Choose <guiseq><gui>Edit</gui><gui>Contact</gui><gui>Invite to chatroom</"
-"gui></guiseq>."
-msgstr ""
-"Escolliu <guiseq><gui>Edita</gui><gui>Contacte</gui><gui>Convida a la sala "
-"de xat</gui></guiseq>."
-
-#: C/group-conversations.page:107(item/p)
-msgid ""
-"If you have more than one group conversation open, select the one you want "
-"to invite your contacts."
-msgstr ""
-"Si teniu més d'una conversa de grup oberta, seleccioneu la que vulgueu per "
-"convidar els contactes."
-
-#: C/group-conversations.page:118(section/title)
-msgid "Join a group conversation"
-msgstr "Uniu-vos a una conversa de grup"
-
-#: C/group-conversations.page:128(item/p)
-msgid "Expand the <gui>Room List</gui> section to see all the existing rooms."
-msgstr ""
-"Expandiu la secció <gui>Llista de sales</gui> per veure totes les sales "
-"existents."
-
-#: C/group-conversations.page:133(item/p)
-msgid "Double-click on the name of a room to join it."
-msgstr "Feu doble clic sobre el nom de la sala a la qual voleu unir-vos."
-
-#: C/group-conversations.page:139(section/p)
-msgid ""
-"It is not possible to join all existing rooms. Some of the rooms might "
-"require a password, or might be invitation only. <app>Empathy</app> does not "
-"support these kind of rooms."
-msgstr ""
-"No és possible entrar a totes les sales existents. Algunes sales poden "
-"requerir una contrasenya o una invitació per entrar-hi. L'<app>Empathy</app> "
-"encara no permet utilitzar aquest tipus de sales."
-
-#: C/hide-contacts.page:8(info/desc)
-msgid "Hide the offline contacts from your <gui>Contact List</gui>."
-msgstr ""
-"Oculta el contactes fora de línia de la <gui>Llista de contactes</gui>."
-
-#: C/hide-contacts.page:19(page/title)
-msgid "Hide offline contacts"
-msgstr "Amagueu els contactes fora de línia"
-
-#: C/hide-contacts.page:21(page/p)
-msgid ""
-"Normally, <app>Empathy</app> shows all your contacts: those that are online, "
-"with which you can have a conversation, and also those that are offline."
-msgstr ""
-"Normalment, l'<app>Empathy</app> mostra tots els contactes: aquells que són "
-"en línia, amb els quals teniu una conversa i els que són fora de línia."
-
-#: C/hide-contacts.page:25(page/p)
-msgid "To hide the contacts that are offline:"
-msgstr "Per amagar els contactes que són fora de línia:"
-
-#: C/hide-contacts.page:31(item/p)
-msgid ""
-"From the <gui>Contact List</gui> window, choose <guiseq><gui>View</gui> "
-"<gui>Offline Contacts</gui></guiseq>, or press <keyseq><key>Ctrl</key> "
-"<key>H</key></keyseq>."
-msgstr ""
-"Des de la finestra <gui>Llista de contactes</gui> escolliu "
-"<guiseq><gui>Visualitza</gui><gui>Contactes fora de línia</gui></guiseq> o "
-"premeu <keyseq><key>Ctrl</key><key>H</key></keyseq>."
-
-#: C/hide-contacts.page:36(item/p)
-msgid "To show the offline contacts again, repeat the same procedure above."
-msgstr ""
-"Per tornar a mostrar els contactes fora de línia, repetiu els mateixos "
-"passos descrits aquí sobre."
-
-#: C/import-account.page:10(info/desc)
-msgid "Import an account from another instant messaging application."
-msgstr "Importeu un compte d'una altra aplicació de missatgeria instantània."
-
-#: C/import-account.page:19(credit/name)
-msgid "Peter Haslam"
-msgstr "Peter Haslam"
-
-#: C/import-account.page:42(page/title)
-msgid "Import an existing account"
-msgstr "Importeu un compte existent"
-
-#: C/import-account.page:44(page/p)
-msgid ""
-"The first time you run <app>Empathy</app>, it will offer to import your "
-"accounts from other instant messaging applications. Currently, the only "
-"supported application is <app>Pidgin</app>."
-msgstr ""
-"La primera vegada que executeu l'<app>Empathy</app> us oferirà la importació "
-"dels comptes d'una altra aplicació de missatgeria instantània. Ara mateix "
-"l'única aplicació des de la que es poden importar comptes és el <app>Pidgin</"
-"app>."
-
-#: C/import-account.page:50(item/p)
-msgid ""
-"Run <app>Empathy</app> for the first time. An assistant will offer you a "
-"number of options to create new accounts."
-msgstr ""
-"Executeu l'<app>Empathy</app> per primer cop. Un assistent us oferirà unes "
-"quantes opcions per crear comptes nous."
-
-#: C/import-account.page:54(item/p)
-msgid ""
-"Select <gui>Yes, import my account details from</gui> and click "
-"<gui>Forward</gui>."
-msgstr ""
-"Seleccioneu <gui>Sí, importa les dades dels comptes de</gui> i feu clic a "
-"<gui>Endavant</gui>."
-
-#: C/import-account.page:58(item/p)
-msgid "Select the check box next to each account you wish to import."
-msgstr "Seleccioneu la caixa de selecció de cada compte que vulgueu importar."
-
-#: C/import-account.page:66(note/p)
-msgid ""
-"It is not currently possible to import accounts after you have completed the "
-"first-run assistant."
-msgstr ""
-"No és possible importar comptes nous després d'haver completat l'auxiliar de "
-"la primera execució."
-
-#. This is a reference to an external file such as an image or video. When
-#. the file changes, the md5 hash will change to let you know you need to
-#. update your localized copy. The msgstr is not used at all. Set it to
-#. whatever you like once you have updated your copy of the file.
-#: C/introduction.page:41(media)
-msgctxt "_"
-msgid ""
-"external ref='figures/empathy-main-window.png' "
-"md5='54908dcb2588beddb15ef0968d2c2582'"
-msgstr ""
-"external ref='figures/empathy-main-window.png' "
-"md5='54908dcb2588beddb15ef0968d2c2582'"
-
-#: C/introduction.page:9(info/desc)
-msgid "Introduction to the <app>Empathy</app> instant messenger."
-msgstr "Introducció al client de missatgeria instantània <app>Empathy</app>."
-
-#: C/introduction.page:21(page/title)
-msgid "Introduction"
-msgstr "Introducció"
-
-#: C/introduction.page:23(page/p)
-msgid ""
-"<app>Empathy</app> is an instant messaging application for the GNOME "
-"Desktop. It supports text messaging, voice &amp; video calls, file "
-"transfers, and all the most used messaging systems such as MSN and Google "
-"Talk."
-msgstr ""
-"L'<app>Empathy</app> és una aplicació de missatgeria instantània per a "
-"l'escriptori GNOME. Permet utilitzar la missatgeria de text, trucades de veu "
-"i de vídeo, la transmissió de fitxers i tots els sistemes de missatgeria més "
-"utilitzats com el MSN i el Google Talk."
-
-#: C/introduction.page:28(page/p)
-msgid ""
-"<app>Empathy</app> includes features that help you better collaborate while "
-"at work, and that let you easily keep in touch with your friends."
-msgstr ""
-"L'<app>Empathy</app> inclou característiques que us ajuden a col·laborar "
-"mentre treballeu i que us permeten de forma fàcil estar al dia amb els amics."
-
-#: C/introduction.page:32(page/p)
-msgid ""
-"Using <app>Empathy</app>, you can group all the conversations in a single "
-"window, have multiple windows for different kind of conversations, easily "
-"search through your previous conversations, and share your desktop in just "
-"two clicks."
-msgstr ""
-"Amb l'<app>Empathy</app> podeu agrupar totes les converses en una única "
-"finestra, tenir una finestra per a cada tipus de conversa, fer cerques de "
-"forma fàcil a les converses anteriors i compartir el vostre escriptori en "
-"tan sols dos clics."
-
-#: C/introduction.page:39(figure/title)
-msgid "<gui>Contact List</gui> window"
-msgstr "Finestra de la <gui>Llista de contactes</gui>"
-
-#: C/introduction.page:40(figure/desc)
-msgid "<app>Empathy</app> main window"
-msgstr "Finestra principal de l'<app>Empathy</app>"
-
-#: C/introduction.page:42(media/p)
-msgid "<app>Empathy</app> main window."
-msgstr "Finestra principal de l'<app>Empathy</app>."
-
-#: C/irc-commands.page:7(info/desc)
-msgid "The supported IRC commands."
-msgstr "Ordres de l'IRC interpretades per l'Empathy."
-
-#: C/irc-commands.page:18(page/title)
-msgid "Supported IRC commands"
-msgstr "Ordres de l'IRC"
-
-#: C/irc-commands.page:19(page/p)
-msgid ""
-"To see the list of the supported IRC commands, in a chat room type <input>/"
-"help</input> and press <key>Enter</key>."
-msgstr ""
-"Per veure la llista d'ordres interpretades per l'IRC escriviu, en una sala "
-"de xat, <input>/help</input> i premeu <key>Retorn</key>."
-
-#: C/irc-commands.page:24(note/p)
-msgid "All commands available have a small description on their usage."
-msgstr "Totes les ordres disponibles tenen una petita descripció del seu ús."
-
-#: C/irc-join-pwd.page:9(info/desc)
-msgid "Enter password-protected IRC chat rooms."
-msgstr "Entreu la contrasenya per les sales de xat de l'IRC."
-
-#: C/irc-join-pwd.page:25(page/title)
-msgid "Join a protected IRC chat room"
-msgstr "Entreu en una sala de xat d'IRC protegida."
-
-#: C/irc-join-pwd.page:27(page/p)
-msgid ""
-"On some IRC networks, private IRC rooms may be protected with a password. If "
-"you know the password, use the following steps to join:"
-msgstr ""
-"En algunes xarxes d'IRC les sales privades poden estar protegides per "
-"contrasenya, si la sabeu seguiu els següents passos per unir-vos-hi:"
-
-#: C/irc-join-pwd.page:33(item/p)
-msgid "<link xref=\"irc-join-room\">Join the room</link> as normal."
-msgstr "<link xref=\"irc-join-room\">Entra a la sala</link> com sempre."
-
-#: C/irc-join-pwd.page:38(item/p)
-msgid ""
-"Empathy will prompt you for a password. Enter the password for the IRC chat "
-"room and click <gui style=\"button\">Join</gui>."
-msgstr ""
-"L'Empathy us demanarà una contrasenya. Introduïu la contrasenya de la sala "
-"de xat de l'IRC i feu clic a <gui style=\"button\">Uneix-m'hi</gui>."
-
-#: C/irc-join-room.page:8(info/desc)
-msgid "Join an IRC channel."
-msgstr "Uniu-vos a un canal d'IRC."
-
-#: C/irc-join-room.page:31(page/title)
-msgid "Join an IRC chat room"
-msgstr "Uniu-vos a la sala de xat de l'IRC"
-
-#: C/irc-join-room.page:33(page/p)
-msgid ""
-"You can join IRC chat rooms (also known as IRC channels) on any IRC network "
-"you’re connected to. To connect to an IRC network, see <link xref=\"add-"
-"account\"/> and <link xref=\"account-irc\"/>."
-msgstr ""
-"Podeu unir-vos a sales de xat de l'IRC (també conegudes com canals de l'IRC) "
-"a qualsevol xarxa d'IRC a la qual estigueu connectat. Per connectar-vos a "
-"una xarxa d'IRC, vegeu <link xref=\"add-account\"/> i <link xref=\"account-"
-"irc\"/>."
-
-#: C/irc-join-room.page:45(item/p)
-msgid ""
-"From the <gui>Account</gui> drop-down list, select the IRC account that "
-"corresponds to the network you want to use."
-msgstr ""
-"Des de la llista desplegable <gui>Compte</gui>, trieu el compte d'IRC que "
-"correspon a la xarxa que voleu utilitzar."
-
-#: C/irc-join-room.page:51(item/p)
-msgid ""
-"In the <gui>Room</gui> text box, type the name of the channel you want to "
-"join. IRC channel names start with the hash character (<sys>#</sys>)."
-msgstr ""
-"Al quadre de text <gui>Sala</gui> introduïu el nom del canal on voleu "
-"entrar. Els noms dels canals IRC comencen amb el caràcter coixinet (<sys>#</"
-"sys>)."
-
-#: C/irc-join-room.page:57(item/p)
-msgid "Click <gui>Join</gui> to enter the room."
-msgstr "Feu clic a <gui>Entra</gui> per entrar a la sala."
-
-#: C/irc-join-room.page:64(note/p)
-msgid ""
-"To join multiple rooms, you need to repeat the steps above for each room."
-msgstr ""
-"Per entrar en més d'una sala, haureu de repetir els passos de sobre per cada "
-"sala."
-
-#: C/irc-manage.page:9(info/desc)
-msgid "How to use IRC with <app>Empathy</app>."
-msgstr "Com utilitzar IRC amb l'<app>Empathy</app>."
-
-#: C/irc-manage.page:23(credit/name)
-msgid "Sindhu S"
-msgstr "Sindhu S"
-
-#: C/irc-manage.page:39(page/title)
-msgid "Internet Relay Chat (IRC)"
-msgstr "Internet Relay Chat (IRC)"
-
-#: C/irc-manage.page:47(when/p)
-msgid ""
-"<link action=\"install:telepathy-idle\" xref=\"index\"> Install telepathy-"
-"idle</link>"
-msgstr ""
-"<link action=\"install:telepathy-idle\" xref=\"index\"> Instal·la el paquet "
-"telepathy-idle</link>"
-
-#: C/irc-manage.page:55(info/title)
-msgctxt "link"
-msgid "IRC Chat Rooms and Conversations"
-msgstr "Sales de xat de l'IRC i converses"
-
-#: C/irc-manage.page:57(section/title)
-msgid "Chat Rooms and Conversations"
-msgstr "Sales de xat i converses"
-
-#: C/irc-manage.page:62(info/title)
-msgctxt "link"
-msgid "Common IRC Problems"
-msgstr "Problemes de l'IRC més habituals"
-
-#: C/irc-nick-password.page:10(info/desc)
-msgid "Protect your nickname to prevent other IRC users from using it."
-msgstr ""
-"Protegiu el vostre sobrenom per impedir que altres usuaris de l'IRC l'usin."
-
-#: C/irc-nick-password.page:33(page/title)
-msgid "Use a nickname password on IRC"
-msgstr "Utilitzeu un sobrenom amb contrasenya a l'IRC"
-
-#: C/irc-nick-password.page:35(page/p)
-msgid ""
-"On some IRC networks, you can register your nickname with a service called "
-"NickServ. By sending special messages to NickServ, you can set your password "
-"and identify yourself. Some IRC chat rooms may not allow you to join without "
-"a registered nickname."
-msgstr ""
-"En algunes xarxes d'IRC podeu registrar el vostre sobrenom amb un servei "
-"anomenat NickServ. Si envieu uns missatges especials a NickServ podreu "
-"establir la contrasenya i identificar-vos. Algunes sales d'IRC no permeten "
-"entrar si el sobrenom no està registrat."
-
-#: C/irc-nick-password.page:40(page/p)
-msgid ""
-"<app>Empathy</app> does not currently support nickname registration. Some "
-"IRC networks, however, will automatically forward a <em>server password</em> "
-"to NickServ. On these networks, you can use the IRC password in "
-"<app>Empathy</app> to identify yourself to NickServ. The popular freenode "
-"network is known to have this feature."
-msgstr ""
-"L'<app>Empathy</app> no suporta el registre de sobrenoms. Algunes xarxes "
-"d'IRC, tanmateix, us enviaran de forma automàtica una <em>contrasenya de "
-"servidor</em> al NickServ. En aquestes xarxes, podeu utilitzar la "
-"contrasenya d'IRC a l'<app>Empathy</app> per identificar-vos amb NickServ. "
-"La popular xarxa freenode és coneguda per aquesta característica."
-
-#: C/irc-nick-password.page:46(page/p)
-msgid "To set an IRC server password:"
-msgstr "Per establir una contrasenya de servidor d'IRC:"
-
-#: C/irc-nick-password.page:54(item/p)
-msgid "Select the IRC account from the list on the left of the dialog."
-msgstr "Seleccioneu el compte d'IRC al quadre de l'esquerra del diàleg."
-
-#: C/irc-nick-password.page:57(item/p)
-msgid ""
-"In the <gui>Password</gui> field, type the password you used to register "
-"your nikcname."
-msgstr ""
-"Al camp <gui>Contrasenya</gui> escriviu la contrasenya que heu utilitzat per "
-"registrar el sobrenom."
-
-#: C/irc-nick-password.page:69(note/p)
-msgid ""
-"These instructions only allow you to use a password-protected nickname on "
-"certain IRC networks. It is not currently possible to register an IRC "
-"nickname or change your nickname password using <app>Empathy</app>."
-msgstr ""
-"Aquestes instruccions sols us permeten utilitzar un sobrenom protegit per "
-"contrasenya en certes xarxes d'IRC. L'<app>Empathy</app> encara no permet "
-"registrar un sobrenom de l'IRC o canviar-ne la contrasenya."
-
-#: C/irc-send-file.page:9(info/desc)
-msgid "<app>Empathy</app> does not currently support sending files using IRC."
-msgstr ""
-"L'<app>Empathy</app> encara no permet l'enviament de fitxers utilitzant "
-"l'IRC."
-
-#: C/irc-send-file.page:31(page/title)
-msgid "Send files over IRC"
-msgstr "Enviament de fitxer a través de l'IRC."
-
-#: C/irc-send-file.page:33(page/p)
-msgid "It is not currently possible to send files using IRC."
-msgstr "Encara no és possible enviar fitxers a través de l'IRC."
-
-#: C/irc-start-conversation.page:8(info/desc)
-msgid "Start a conversation with an IRC contact."
-msgstr "Inicieu un conversa amb un contacte de l'IRC."
-
-#: C/irc-start-conversation.page:30(page/title)
-msgid "Chat with somebody on IRC"
-msgstr "Xategeu amb algú a l'IRC"
-
-#: C/irc-start-conversation.page:32(page/p)
-msgid ""
-"You can hold private conversations with other IRC users, outside of the "
-"public IRC chat rooms. To start a conversation with another IRC user:"
-msgstr ""
-"Podeu mantenir converses privades amb altres usuaris de l'IRC fora de la "
-"sala pública de l'IRC. Per iniciar una conversa amb un altre usuari de l'IRC:"
-
-#: C/irc-start-conversation.page:37(item/p)
-msgid ""
-"In the contact list for an IRC chat room, double click the name of the user "
-"you want to chat with. Alternatively, right click the name of the user and "
-"choose <gui>Chat</gui>."
-msgstr ""
-"Feu doble clic sobre el nom de l'usuari amb el qual voleu xatejar a la "
-"llista de contactes de la sala de xat de l'IRC. També podeu fer clic amb el "
-"botó secundari sobre l'usuari i escolliu <gui>Xat</gui>."
-
-#: C/irc-start-conversation.page:45(item/p)
-msgid ""
-"The IRC room contact list is not the same as <app>Empathy</app> contact "
-"list. It contains a list of users in the IRC chat room you joined. Different "
-"rooms can have different contacts listed."
-msgstr ""
-"La llista de contactes de la sala de l'IRC no és la mateixa que la llista de "
-"contactes de l'<app>Empathy</app>. Aquesta conté la llista d'usuaris de la "
-"sala de l'IRC a la qual us heu unit. Cada sala tindrà un llista de contactes "
-"diferent."
-
-#: C/irc-start-conversation.page:52(item/p)
-msgid ""
-"The IRC room contact list is usually on the right side of the IRC room "
-"window. If you do not see it, choose <guiseq><gui>Conversation</"
-"gui><gui>Show Contact List</gui></guiseq>."
-msgstr ""
-"La llista de contactes de la sala de l'IRC normalment està a la part dreta "
-"de la finestra de la sala de l'IRC. Si no la veieu, escolliu "
-"<guiseq><gui>Conversa</gui><gui>Mostra la llista de contacte</gui></guiseq>."
-
-#: C/license.page:8(info/desc)
-msgid "Legal information."
-msgstr "Informació legal."
-
-#: C/license.page:11(page/title)
-msgid "License"
-msgstr "Llicència"
-
-#: C/license.page:12(page/p)
-msgid ""
-"This work is distributed under a CreativeCommons Attribution-Share Alike 3.0 "
-"Unported license."
-msgstr ""
-"Aquest treball es distribueix sota la llicència Creative Commons "
-"Reconeixement-Compartir igual 3.0 llicència no adaptada."
-
-#: C/license.page:20(page/p)
-msgid "You are free:"
-msgstr "Sou lliure de:"
-
-#: C/license.page:25(item/title)
-msgid "<em>To share</em>"
-msgstr "<em>Compartir</em>"
-
-#: C/license.page:26(item/p)
-msgid "To copy, distribute and transmit the work."
-msgstr "Copiar, distribuir i transmetre el treball."
-
-#: C/license.page:29(item/title)
-msgid "<em>To remix</em>"
-msgstr "<em>Fer-ne obres derivades</em>"
-
-#: C/license.page:30(item/p)
-msgid "To adapt the work."
-msgstr "Adaptar el treball."
-
-#: C/license.page:33(page/p)
-msgid "Under the following conditions:"
-msgstr "Sota les següents condicions:"
-
-#: C/license.page:38(item/title)
-msgid "<em>Attribution</em>"
-msgstr "<em>Reconeixement</em>"
-
-#: C/license.page:39(item/p)
-msgid ""
-"You must attribute the work in the manner specified by the author or "
-"licensor (but not in any way that suggests that they endorse you or your use "
-"of the work)."
-msgstr ""
-"Cal que reconegueu el treball de la forma especificada per l'autor o el "
-"llicenciatari (però no de forma que suggereixi que us dóna suport personal o "
-"de l'ús del treball)."
-
-#: C/license.page:46(item/title)
-msgid "<em>Share Alike</em>"
-msgstr "<em>Compartir igual</em>"
-
-#: C/license.page:47(item/p)
-msgid ""
-"If you alter, transform, or build upon this work, you may distribute the "
-"resulting work only under the same, similar or a compatible license."
-msgstr ""
-"Si altereu, transformeu, o construïu a partir d'aquest treball heu de "
-"distribuir el treball resultant sota la mateixa llicència o una de "
-"compatible."
-
-#: C/license.page:53(page/p)
-msgid ""
-"For the full text of the license, see the <link href=\"http://"
-"creativecommons.org/licenses/by-sa/3.0/legalcode\">CreativeCommons website</"
-"link>, or read the full <link href=\"http://creativecommons.org/licenses/by-"
-"sa/3.0/\">Commons Deed</link>."
-msgstr ""
-"Per veure el text de la llicència completa vegeu el <link href=\"http://"
-"creativecommons.org/licenses/by-sa/3.0/legalcode\">Lloc web de Creative "
-"Commons </link>, o llegiu la pàgina <link href=\"http://creativecommons.org/"
-"licenses/by-sa/3.0/\">Commons Deed</link>."
-
-#: C/link-contacts.page:11(info/desc)
-msgid "Merge and separate different contacts into a single one."
-msgstr "Fusiona i separa diferents contactes en un de sol."
-
-#: C/link-contacts.page:19(credit/name)
-msgid "Shobha Tyagi"
-msgstr "Shobha Tyagi"
-
-#: C/link-contacts.page:29(page/title)
-msgid "Link and unlink contacts"
-msgstr "Enllaceu i desenllaceu contactes"
-
-#: C/link-contacts.page:30(page/p)
-msgid ""
-"If one or more of your contacts has multiple accounts with different "
-"messaging services, you can combine these accounts into a single contact."
-msgstr ""
-"Si algun contacte vostre té més d'un compte a diferents serveis de "
-"missatgeria, podeu combinar aquests comptes en un sol contacte."
-
-#: C/link-contacts.page:34(page/p)
-msgid ""
-"The resulting contact is called a <em>meta-contact</em>: a contact composed "
-"from different single contacts."
-msgstr ""
-"El contacte resultant s'anomena <em>metacontacte</em>: un contacte composat "
-"de diferents contactes individuals."
-
-#: C/link-contacts.page:38(page/p)
-msgid ""
-"Suppose you have a contact called Jane Smith who is using three different "
-"messaging services like:"
-msgstr ""
-"Si teniu un contacte, en Marc Garcia, que té tres serveis de missatgeria "
-"diferents, com per exemple:"
-
-#: C/link-contacts.page:44(item/p)
-msgid "janes@facebook"
-msgstr "marc@facebook"
-
-#: C/link-contacts.page:49(item/p)
-msgid "jane.smith@gmail"
-msgstr "marc.garcia@gmail"
-
-#: C/link-contacts.page:54(item/p)
-msgid "jane_smith@hotmail"
-msgstr "marc_garcia@hotmail"
-
-#: C/link-contacts.page:59(page/p)
-msgid "You can combine these contacts into a single Jane Smith one."
-msgstr ""
-"Podeu combinar aquests contactes en un de sol amb el nom de Marc Garcia."
-
-#: C/link-contacts.page:63(section/title)
-msgid "Link contacts"
-msgstr "Enllaceu contactes"
-
-#: C/link-contacts.page:64(section/p)
-msgid "The way you can link your contacts is as follows:"
-msgstr "Podeu enllaçar els vostres contactes de la manera següent:"
-
-#: C/link-contacts.page:69(item/p)
-msgid ""
-"Press the tick button to select entries you want to link. This will enable "
-"<em>selection mode</em> and you can see a checkbox for each entry."
-msgstr ""
-"Feu clic al botó de «vist» per seleccionar les entrades que voleu enllaçar. "
-"Haureu habilitat el <em>mode de selecció</em>, veureu que cada element té "
-"una casella de selecció."
-
-#: C/link-contacts.page:75(item/p)
-msgid ""
-"Tick the checkboxes that correspond to the <app>Contacts</app> entries which "
-"belong to the same contact."
-msgstr ""
-"Marqueu les caselles de selecció que corresponguin a les entrades de "
-"<app>contactes</app> que pertanyen al mateix contacte."
-
-#: C/link-contacts.page:81(item/p)
-msgid "Press <gui style=\"button\">Link</gui>."
-msgstr "Feu clic a <gui style=\"button\">Enllaça</gui>."
-
-#: C/link-contacts.page:86(section/p)
-msgid "Repeat steps 3 and 4 in order to link other contacts."
-msgstr "Repetiu els passos 3 i 4 per enllaçar altres comptes."
-
-#: C/link-contacts.page:92(section/title)
-msgid "Unlink contacts"
-msgstr "Desenllaceu contactes"
-
-#: C/link-contacts.page:93(section/p)
-msgid "To unlink a linked contact:"
-msgstr "Per desenllaçar un contacte enllaçat:"
-
-#: C/link-contacts.page:98(item/p)
-msgid "Select the contact from your list."
-msgstr "Seleccioneu el contacte de la vostra llista."
-
-#: C/link-contacts.page:103(item/p)
-msgid ""
-"Press <gui style=\"button\">Edit</gui> in the top-right corner of "
-"<app>Contacts</app>."
-msgstr ""
-"Premeu <gui style=\"button\">Edita</gui> a la cantonada de dalt a la dreta "
-"del <app>Contactes</app>."
-
-#: C/link-contacts.page:108(item/p)
-msgid "Press <gui style=\"button\">Linked Contacts</gui>."
-msgstr "Feu clic a <gui style=\"button\">Metacontactes</gui>."
-
-#: C/link-contacts.page:113(item/p)
-msgid ""
-"Press <gui style=\"button\">Remove</gui> to unlink an entry from the linked "
-"contact."
-msgstr ""
-"Feu clic a <gui style=\"button\">Suprimeix</gui> per desenllaçar una entrada "
-"del metacontacte."
-
-#: C/link-contacts.page:118(item/p)
-msgid ""
-"Press <gui style=\"button\">Close</gui> if you do not want to unlink any "
-"more contacts."
-msgstr ""
-"Feu clic a <gui style=\"button\">Tanca</gui> si no voleu desenllaçar més "
-"contactes."
-
-#: C/link-contacts.page:123(item/p)
-msgid "Finally, press <gui style=\"button\">Done</gui> to finish editing."
-msgstr ""
-"Per acabar, feu clic a <gui style=\"button\">Fet</gui> per acabar l'edició."
-
-#. This is a reference to an external file such as an image or video. When
-#. the file changes, the md5 hash will change to let you know you need to
-#. update your localized copy. The msgstr is not used at all. Set it to
-#. whatever you like once you have updated your copy of the file.
-#: C/overview.page:37(media)
-msgctxt "_"
-msgid ""
-"external ref='figures/video_overview.png' "
-"md5='6cfcfbd833bf2234537d402185c40596'"
-msgstr ""
-"external ref='figures/video_overview.png' "
-"md5='6cfcfbd833bf2234537d402185c40596'"
-
-#. This is a reference to an external file such as an image or video. When
-#. the file changes, the md5 hash will change to let you know you need to
-#. update your localized copy. The msgstr is not used at all. Set it to
-#. whatever you like once you have updated your copy of the file.
-#: C/overview.page:38(media)
-msgctxt "_"
-msgid ""
-"external ref='figures/conf_overview.png' "
-"md5='74c58668fe89c84060f12f6b70a6b903'"
-msgstr ""
-"external ref='figures/conf_overview.png' "
-"md5='74c58668fe89c84060f12f6b70a6b903'"
-
-#. This is a reference to an external file such as an image or video. When
-#. the file changes, the md5 hash will change to let you know you need to
-#. update your localized copy. The msgstr is not used at all. Set it to
-#. whatever you like once you have updated your copy of the file.
-#: C/overview.page:39(media)
-msgctxt "_"
-msgid ""
-"external ref='figures/croom_overview.png' "
-"md5='e9619d2c8420bc48a880c03dbc1ae084'"
-msgstr ""
-"external ref='figures/croom_overview.png' "
-"md5='e9619d2c8420bc48a880c03dbc1ae084'"
-
-#: C/overview.page:8(info/desc)
-msgid "What instant messaging is and how you can use it."
-msgstr "Què és la missatgeria instantània i com la podeu utilitzar?"
-
-#: C/overview.page:12(credit/name)
-msgid "Aruna S"
-msgstr "Aruna S"
-
-#: C/overview.page:24(page/title)
-msgid "Overview of instant messaging"
-msgstr "Visió general de la missatgeria instantània"
-
-#: C/overview.page:26(page/p)
-msgid ""
-"Instant messaging, sometimes abbreviated to IM, is a text-based means to "
-"communicate instantly over the internet and the local network. While some IM "
-"applications work with only one type of account, others, including <link "
-"xref=\"introduction\">Empathy</link>, provide IM facilities by using <link "
-"xref=\"add-account\">accounts</link> from different service providers. Some "
-"of these even support audio and video calling."
-msgstr ""
-"La missatgeria instantània, que de vegades s'abreuja com «IM», és un mitjà "
-"de comunicació instantani en format text i que funciona a través d'Internet "
-"i de les xarxes locals. Tot i que algunes aplicacions d'IM funcionen només "
-"amb un tipus de compte, d'altres com l'<link xref=\"introduction\">Empathy</"
-"link> permeten l'ús de <link xref=\"add-account\">comptes</link> de "
-"diferents proveïdors, fent més còmode l'ús de la missatgeria instantània. "
-"Alguns d'aquests proveïdors fins i tot permeten fer trucades de veu i de "
-"vídeo."
-
-#: C/overview.page:42(td/p)
-msgid "Video Conference"
-msgstr "Conferència de vídeo"
-
-#: C/overview.page:43(td/p)
-msgid "Group chats"
-msgstr "Xats de grup"
-
-#: C/overview.page:44(td/p)
-msgid "Chat rooms"
-msgstr "Sales de xats"
-
-#: C/overview.page:48(page/p)
-msgid ""
-"Some instant messaging applications can be used to connect to chat rooms, "
-"online places where like-minded people meet to talk. One popular means to "
-"connect to several chat rooms is the Internet Relay Chat, also known as "
-"<link xref=\"irc-manage\">IRC</link>. IRC provides <link xref=\"irc-join-room"
-"\">public</link> chat rooms, which are open to anyone who creates an account "
-"on the IRC Server, and private chat rooms, which are <link xref=\"irc-join-"
-"pwd\">password protected</link> and open only to a select few."
-msgstr ""
-"Algunes aplicacions de missatgeria instantània es poden utilitzar per "
-"connectar-se a sales de xat, llocs en línia on persones amb les mateixes "
-"inquietuds es troben per parlar. Una de les vies més populars per connectar-"
-"se a moltes sales de xat es l'Internet Relay Chat, també conegut com <link "
-"xref=\"irc-manage\">IRC</link>. L'IRC proporciona sales <link xref=\"irc-"
-"join-room\">públiques</link> de xat, obertes a tothom que tingui un compte "
-"al servidor de l'IRC i sales privades de xat protegides amb <link xref=\"irc-"
-"join-pwd\">contrasenya</link> i obertes només a un cert grup de persones."
-
-#: C/prev-conv.page:8(info/desc)
-msgid "Browse or search your previous conversations."
-msgstr "Navegueu o cerqueu per les converses anteriors."
-
-#: C/prev-conv.page:36(page/title)
-msgid "View previous conversations"
-msgstr "Visualització de les converses anteriors"
-
-#: C/prev-conv.page:38(page/p)
-msgid ""
-"<app>Empathy</app> automatically saves all your text conversations you have "
-"with your contacts. You can <link xref=\"#search\">search through all of "
-"your previous conversations</link> or <link xref=\"#browse\">browse previous "
-"conversations</link> by contact and date."
-msgstr ""
-"L'<app>Empathy</app> desa automàticament totes les converses que manteniu "
-"amb els contactes. Podeu cercar <link xref=\"#search\">per les converses "
-"anteriors</link> o <link xref=\"#browse\">navegar per les converses "
-"anteriors</link> per contacte i data."
-
-#: C/prev-conv.page:46(note/p)
-msgid ""
-"You do not need to be connected to the Internet to view and search your "
-"previous conversations."
-msgstr ""
-"No us cal estar connectat a Internet per visualitzar i cercar a les "
-"converses anteriors."
-
-#: C/prev-conv.page:53(section/title)
-msgid "Search previous conversations"
-msgstr "Cerqueu a les converses anteriors"
-
-#: C/prev-conv.page:55(section/p)
-msgid ""
-"You can perform a full-text search through all of your previous "
-"conversations."
-msgstr "Podeu utilitzar cerca de texts complets dins les converses anteriors."
-
-#: C/prev-conv.page:59(item/p) C/prev-conv.page:87(item/p)
-msgid ""
-"From the <gui>Contact List</gui> window, choose <guiseq><gui>View</gui> "
-"<gui>Previous Conversations</gui></guiseq>. Alternatively, press <key>F3</"
-"key>."
-msgstr ""
-"Des de la finestra <gui>Llista de contactes</gui> escolliu "
-"<guiseq><gui>Visualitza</gui><gui>Converses anteriors</gui></guiseq> o "
-"premeu <key>F3</key>."
-
-#: C/prev-conv.page:63(item/p)
-msgid ""
-"Select an account from the drop-down list in the top. A list of contacts and "
-"chat room for that account will be shown below."
-msgstr ""
-"Seleccioneu un compte de la llista desplegable situada a la part superior. "
-"Es mostrarà a sota la llista de contactes i les sales de xat per aquest "
-"compte."
-
-#: C/prev-conv.page:67(item/p)
-msgid ""
-"Type the text you want to search for in the <gui>Search</gui> text field."
-msgstr "Escriviu el text que voleu cercar al camp de text <gui>Cerca</gui>."
-
-#: C/prev-conv.page:71(item/p)
-msgid ""
-"Any conversations that matched your search terms will be shown. By default, "
-"conversations are ordered by date."
-msgstr ""
-"Es mostrarà totes les converses que compleixin els criteris de cerca. Per "
-"defecte, les converses estan ordenades per data."
-
-#: C/prev-conv.page:80(section/title)
-msgid "Browse previous conversations"
-msgstr "Navegueu per les converses anteriors"
-
-#: C/prev-conv.page:82(section/p)
-msgid ""
-"You can browse your previous conversations with your contacts or in chat "
-"rooms by date."
-msgstr ""
-"Podeu navegar, per data, per les converses anteriors amb els contactes i "
-"pels xats a les sales."
-
-#: C/prev-conv.page:91(item/p)
-msgid ""
-"Select an account from the drop-down list in the top left. A list of "
-"contacts and chat room for that account will be shown below."
-msgstr ""
-"Seleccioneu un compte de la llista desplegable de dalt a l'esquerre. Es "
-"mostrarà a sota la llista de contactes i les sales de xat per aquest compte."
-
-#: C/prev-conv.page:95(item/p)
-msgid ""
-"Select a contact or chat room to view your previous conversations from. By "
-"default the most recent conversation will be shown."
-msgstr ""
-"Seleccioneu un contacte o una sala de xat per veure'n les converses "
-"anteriors. Per defecte es mostrarà la conversa més recent."
-
-#: C/prev-conv.page:99(item/p)
-msgid ""
-"You can browse your conversations by date. Days on which you had a "
-"conversation with the selected contact will be shown in bold text. Click a "
-"date to select it. Click the arrows next to the month and year to browse "
-"earlier dates."
-msgstr ""
-"Podeu navegar per les converses per data. Els dies en els quals heu "
-"mantingut converses amb el contacte es mostraran amb negreta. Feu clic a una "
-"data per seleccionar-la. Feu clic a les fletxes al costat del mes i de l'any "
-"per navegar entre dates."
-
-#: C/prev-conv.page:105(section/p)
-msgid ""
-"You can search for text in the conversations by typing into the search field "
-"at the top. The matching conversations will be showed."
-msgstr ""
-"Podeu cercar alguna paraula o frase de les converses escrivint al camp de "
-"cerca situat a la part superior. Es mostraran les converses que coincideixin "
-"amb la paraula o la frase cercada."
-
-#: C/prev-conv.page:111(note/p)
-msgid ""
-"You can quickly view the previous conversations with one of your contacts "
-"from the <gui>Contact List</gui> window. Simply right click the contact and "
-"choose <gui>Previous Conversations</gui>. The <gui>Previous Conversations</"
-"gui> window will open with that contact already selected."
-msgstr ""
-"Podeu veure fàcilment les converses anteriors amb algun dels contactes a la "
-"finestra <gui>Llista de contactes</gui>. Feu clic sobre el contacte i "
-"escolliu <gui>Converses anteriors</gui>. S'obrirà la finestra <gui>Converses "
-"anteriors</gui> amb el contacte ja seleccionat."
-
-#: C/prob-conn-acctdisabled.page:7(info/desc)
-msgid ""
-"The instant messaging account that you want to use is not enabled in the "
-"list of accounts."
-msgstr ""
-"El compte del servei de missatgeria instantània que voleu utilitzar no està "
-"habilitat a la llista de comptes."
-
-#: C/prob-conn-acctdisabled.page:34(page/title)
-msgid "My account is not enabled"
-msgstr "El meu compte està habilitat"
-
-#: C/prob-conn-acctdisabled.page:36(page/p)
-msgid ""
-"If the instant messaging account that you want to use is not enabled in the "
-"drop-down account list when you try to start a new conversation or join a "
-"room, your account details may not be correct."
-msgstr ""
-"Si el compte de missatgeria instantània que voleu utilitzar no està "
-"habilitat a la llista inferior quan intenteu iniciar una conversa o unir-vos "
-"a una sala, els detalls del vostre compte poden no ser correctes."
-
-#: C/prob-conn-acctdisabled.page:44(item/p) C/prob-conn-auth.page:45(item/p)
-#: C/prob-conn-neterror.page:53(item/p)
-msgid ""
-"Make sure that you are connected to the Internet, or to a local area network."
-msgstr ""
-"Assegureu-vos que esteu connectats a Internet o a una xarxa d'àrea local."
-
-#: C/prob-conn-acctdisabled.page:49(item/p)
-msgid ""
-"Choose <guiseq><gui>Edit</gui><gui>Accounts</gui></guiseq> and select the "
-"account that is not working."
-msgstr ""
-"Escolliu <guiseq><gui>Edita</gui><gui>Comptes</gui></guiseq> i seleccioneu "
-"el compte que no està funcionant."
-
-#: C/prob-conn-acctdisabled.page:55(item/p) C/prob-conn-auth.page:63(item/p)
-msgid ""
-"Type your username and password again to make sure that they are correct."
-msgstr ""
-"Escriviu el nom d'usuari i la contrasenya de nou per estar segurs que són "
-"correctes."
-
-#: C/prob-conn-acctdisabled.page:60(item/p)
-#: C/prob-conn-neterror.page:64(item/p)
-msgid ""
-"Check in the <gui>Advanced</gui> section that all the details are correct. "
-"You should be able to find these details from the website of the messaging "
-"service."
-msgstr ""
-"Comproveu a la secció <gui>Avançat</gui> que les dades siguin les correctes. "
-"Hauríeu de poder trobar aquestes dades al lloc web del servei de missatgeria."
-
-#: C/prob-conn-acctdisabled.page:66(item/p)
-msgid "Check that the account is switched on."
-msgstr "Comproveu que el compte està habilitat."
-
-#: C/prob-conn-auth.page:8(info/desc)
-msgid ""
-"An error message which says “<gui>Authentication failed</gui>” appears in "
-"the main window."
-msgstr ""
-"Apareix un missatge d'error a la finestra principal que diu «<gui>Errada en "
-"l'autenticació</gui>»."
-
-#: C/prob-conn-auth.page:36(page/title)
-msgid "I get a message that says “Authentication failed”"
-msgstr "Teniu un missatge que diu «Errada en l'autenticació»."
-
-#: C/prob-conn-auth.page:38(page/p)
-msgid ""
-"This kind of error happens when your instant messaging service is not "
-"allowing you to connect because it does not recognize your username or "
-"password for some reason."
-msgstr ""
-"Aquest tipus d'errors apareix quan el servei de missatgeria instantània no "
-"permet la connexió perquè no reconeix el vostre nom d'usuari o contrasenya "
-"per alguna raó."
-
-#: C/prob-conn-auth.page:50(item/p)
-msgid ""
-"Make sure that you have registered an account with the service you are "
-"trying to connect to. If you do not have an account, most services will not "
-"allow you to connect."
-msgstr ""
-"Comproveu que heu registrat un compte amb el servei amb el qual intenteu "
-"connectar-vos. Si no teniu un compte, molts serveis no us permetran "
-"connectar-vos."
-
-#: C/prob-conn-auth.page:57(item/p) C/prob-conn-name.page:43(item/p)
-#: C/prob-conn-neterror.page:58(item/p)
-msgid ""
-"Click the <media type=\"image\" mime=\"image/png\" src=\"figures/gtk-edit.png"
-"\">edit</media> icon in the error message."
-msgstr ""
-"Feu clic a la icona <media type=\"image\" mime=\"image/png\" src=\"figures/"
-"gtk-edit.png\">Edita</media> del missatge d'error."
-
-#: C/prob-conn-auth.page:68(item/p)
-msgid ""
-"Deselect the <gui>Enabled</gui>, and then select it again to try to "
-"reconnect to the service."
-msgstr ""
-"Desactiveu <gui>Activat</gui> i torneu-lo a activar de nou per comprovar si "
-"es reconnecta el servei."
-
-#: C/prob-conn-name.page:9(info/title)
-msgctxt "link:error-msg"
-msgid "“Name in use”"
-msgstr "«Nom ja utilitzat»"
-
-#: C/prob-conn-name.page:10(info/desc)
-msgid ""
-"An error message which says “<gui>Name in use</gui>” appears in the main "
-"window."
-msgstr ""
-"Apareix un missatge a la finestra principal que diu «<gui>Nom utilitzat</"
-"gui>»."
-
-#: C/prob-conn-name.page:33(page/title)
-msgid "I get a message that says “Name in use”"
-msgstr "Teniu un missatge que diu «Nom utilitzat»"
-
-#: C/prob-conn-name.page:35(page/p)
-msgid ""
-"This kind of error happens when you try to connect to your IRC account and "
-"you are using a nickname that is already being used by someone else on that "
-"particular network."
-msgstr ""
-"Aquests tipus d'errades apareixen quan intenteu connectar-vos a comptes "
-"d'IRC i utilitzeu un sobrenom que ja l'utilitza algú altre en aquella xarxa."
-
-#: C/prob-conn-name.page:51(item/p)
-msgid "In the <gui>Nickname</gui> text box, type a new nickname."
-msgstr "Al quadre de text <gui>Sobrenom</gui> introduïu el sobrenom nou."
-
-#: C/prob-conn-name.page:56(item/p)
-msgid ""
-"If you have registered that nickname within the network you are using, set "
-"the password for that nickname. For more information, see <link xref=\"irc-"
-"nick-password\"/>."
-msgstr ""
-"Si heu registrat el sobrenom a la xarxa on sou ara, poseu la contrasenya per "
-"aquest sobrenom. Vegeu <link xref=\"irc-nick-password\"/> per més informació."
-
-#: C/prob-conn-name.page:65(item/p) C/prob-conn-neterror.page:79(item/p)
-msgid ""
-"Switch the account off, and then switch it on to try to reconnect to the "
-"service."
-msgstr ""
-"Desactiveu el compte i torneu-lo a activar de nou per intentar que es "
-"connecti de nou al servei."
-
-#: C/prob-conn-neterror.page:7(info/desc)
-msgid ""
-"An error message which says “<gui>Network error</gui>” appears in the main "
-"window."
-msgstr ""
-"Apareix un missatge d'error a la finestra principal que diu «<gui>Error de "
-"xarxa</gui>»."
-
-#: C/prob-conn-neterror.page:34(page/title)
-msgid "I get a message that says “Network error”"
-msgstr "Veig un missatge que diu «Error de xarxa»"
-
-#: C/prob-conn-neterror.page:42(page/p)
-msgid ""
-"This kind of error happens when <app>Empathy</app> cannot communicate with "
-"the instant messaging service for some reason."
-msgstr ""
-"Aquest tipus d'errada succeeix quan l'<app>Empathy</app> no pot comunicar-se "
-"amb el servei de missatgeria instantània per alguna raó."
-
-#: C/prob-conn-neterror.page:46(page/p)
-msgid ""
-"Also, this kind of error happens when you try to use an IRC account without "
-"setting a nickname."
-msgstr ""
-"També es pot produir quan intenteu utilitzar un compte d'IRC sense "
-"configurar el sobrenom."
-
-#: C/prob-conn-neterror.page:87(section/title)
-msgid "Proxy support"
-msgstr "Accés a través de servidor intermediari"
-
-#: C/prob-conn-neterror.page:88(section/p)
-msgid ""
-"At the moment <app>Empathy</app> can not be configured to work with a proxy."
-msgstr ""
-"Ara mateix l'<app>Empathy</app> no es pot configurar perquè funcioni amb un "
-"servidor intermediari."
-
-#: C/prob-conn.page:7(info/desc)
-msgid "Diagnose common problems connecting to an instant messaging service."
-msgstr ""
-"Diagnostiqueu problemes comuns en intentar-se connectar a un servei de "
-"missatgeria instantània."
-
-#: C/prob-conn.page:29(page/title)
-msgid "Problems connecting to an instant messaging service"
-msgstr "Problemes connectant a un servei de missatgeria instantània"
-
-#: C/remove-account.page:8(info/desc)
-msgid "Completely remove an account from <app>Empathy</app>."
-msgstr "Suprimeix un compte completament de l'<app>Empathy</app>."
-
-#: C/remove-account.page:34(page/title)
-msgid "Remove an account"
-msgstr "Suprimiu un compte"
-
-#: C/remove-account.page:36(page/p)
-msgid ""
-"You can completely remove an account from <app>Empathy</app> if you no "
-"longer wish to use the account. If you wish to use the account in "
-"<app>Empathy</app> again in the future, you will have to add your account "
-"details again."
-msgstr ""
-"Podeu suprimir un compte completament de l'<app>Empathy</app> si no voleu "
-"utilitzar-lo més. Si voleu utilitzar el compte un altre cop amb "
-"l'<app>Empathy</app> en un futur haureu de tornar a crear el compte amb "
-"totes les seves dades."
-
-#: C/remove-account.page:47(item/p)
-msgid ""
-"Select the account you wish to remove from the accounts list on the left "
-"side of the window."
-msgstr ""
-"Seleccioneu el compte que vulgueu suprimir de la llista de comptes a la part "
-"esquerra de la finestra."
-
-#: C/remove-account.page:51(item/p)
-msgid "Click <gui style=\"button\">-</gui>."
-msgstr "Feu clic a <gui style=\"button\">-</gui>."
-
-#: C/remove-account.page:54(item/p)
-msgid ""
-"A dialog will be shown asking for confirmation. Click the <gui>Remove</gui> "
-"button to permanently remove the account."
-msgstr ""
-"Es mostrarà un diàleg sol·licitant la confirmació. Feu clic al botó "
-"<gui>Suprimeix</gui> per a suprimir el compte permanentment."
-
-#: C/remove-account.page:60(note/p)
-msgid ""
-"Even after removing an account, <app>Empathy</app> does not delete your "
-"conversation history for that account."
-msgstr ""
-"Fins i tot després de la supressió d'un compte l'<app>Empathy</app> no "
-"esborrarà l'historial de converses del compte."
-
-#: C/salut-protocol.page:8(info/desc)
-msgid "Understanding the People Nearby feature."
-msgstr "Explicació sobre la funció de «Gent propera»."
-
-#: C/salut-protocol.page:33(page/title)
-msgid "What is People Nearby?"
-msgstr "Què és la «Gent propera»?"
-
-#: C/salut-protocol.page:40(page/p)
-msgid ""
-"The People Nearby service is a serverless communication service: you do not "
-"need to connect and authenticate to a central server in order to use it."
-msgstr ""
-"El servei de «Gent propera» és un servei de comunicació descentralitzat: no "
-"us cal estar connectat ni autenticar-vos amb un servidor central per "
-"utilitzar-lo."
-
-#: C/salut-protocol.page:45(page/p)
-msgid ""
-"This kind of serverless messaging system is restricted to a local area "
-"network and an active Internet connection is not necessary."
-msgstr ""
-"Aquest tipus de sistema de missatgeria descentralitzat està restringit a una "
-"xarxa local i no cal una connexió a Internet activa."
-
-#: C/salut-protocol.page:49(page/p)
-msgid ""
-"The people that use this service inside the same local area network will be "
-"auto-discovered, and it will be possible to send them messages and files as "
-"with other services."
-msgstr ""
-"La gent que utilitza aquest servei dins de la xarxa local apareixeran "
-"automàticament i es podran enviar missatges i fitxers igual com en els "
-"altres serveis."
-
-#: C/salut-protocol.page:54(page/p)
-msgid ""
-"All the modern local area networks should be able to support this kind of "
-"service."
-msgstr ""
-"Totes les xarxes locals modernes haurien de permetre aquest tipus de servei."
-
-#: C/send-file.page:8(info/desc)
-msgid "Send a file from your computer to one of your contacts."
-msgstr "Envieu un fitxer des del vostre ordinador a un dels contactes."
-
-#: C/send-file.page:36(page/title)
-msgid "Send files"
-msgstr "Envieu fitxers"
-
-#: C/send-file.page:45(item/p)
-msgid ""
-"Right click on the contact you want to send a file to, and choose <gui>Send "
-"file</gui>."
-msgstr ""
-"Feu clic amb el botó secundari al contacte que li voleu enviar el fitxer i "
-"seleccioneu <gui>Envia un fitxer</gui>."
-
-#: C/send-file.page:50(item/p)
-msgid ""
-"Click on the contact you want to send a file, and choose <guiseq><gui>Edit</"
-"gui> <gui>Contact</gui><gui>Send file</gui></guiseq>."
-msgstr ""
-"Feu clic al contacte a qui voleu enviar un fitxer i seleccioneu "
-"<guiseq><gui>Edita</gui><gui>Contacte</gui> <gui>Envia un fitxer</gui></"
-"guiseq>."
-
-#: C/send-file.page:58(item/p)
-msgid "Select the file to send, and click on <gui>Send</gui>."
-msgstr "Seleccioneu el fitxer a enviar i feu clic a <gui>Envia</gui>."
-
-#: C/send-file.page:63(item/p)
-msgid "The <gui>File Transfers</gui> window will appear."
-msgstr "Apareixerà la finestra <gui>Transferències de fitxers</gui>."
-
-#: C/send-file.page:66(item/p)
-msgid ""
-"Wait for your contact to accept the file transfer, or click <gui>Stop</gui> "
-"to halt the transfer."
-msgstr ""
-"Espereu que el contacte accepti la transferència del fitxer o feu clic a "
-"<gui>Atura</gui> per aturar la transferència."
-
-#: C/send-file.page:72(item/p)
-msgid ""
-"Once the transfer is finished, it is possible to close the <gui>File "
-"Transfers</gui> window."
-msgstr ""
-"Una vegada s'hagi acabat la transferència podeu tancar la finestra "
-"<gui>Transferències de fitxers</gui>."
-
-#: C/send-file.page:80(note/p)
-msgid ""
-"If you have multiple finished transfers listed in the window, click on "
-"<gui>Clear</gui> to empty the list. This will only remove the files from the "
-"list and will not delete them from your computer."
-msgstr ""
-"Si teniu llistades múltiples transferències acabades a la finestra, feu clic "
-"a <gui>Neteja</gui> per buidar la llista. Només s'esborraran de la llista, "
-"no s'esborraran els fitxers de l'ordinador."
-
-#: C/send-file.page:87(note/p)
-msgid ""
-"It is possible to send files only using the following services: <em>Jabber</"
-"em>, <em>Google Talk</em> and <em>People Nearby</em>."
-msgstr ""
-"Només podeu enviar fitxers amb els serveis següents: <em>Jabber</em>, "
-"<em>Google Talk</em> i <em>Gent propera</em>."
-
-#: C/send-file.page:93(note/p)
-msgid ""
-"In order to send a file to someone, you need to be connected to the "
-"Internet, or to a local area network."
-msgstr ""
-"Per enviar un fitxer a algú us cal estar connectat a Internet o a una xarxa "
-"d'àrea local."
-
-#: C/send-message.page:8(info/desc)
-msgid "Send a message to one of your contacts."
-msgstr "Envieu un missatge a un dels contactes."
-
-#: C/send-message.page:32(page/title)
-msgid "Send a message to someone"
-msgstr "Enviament de missatges"
-
-#: C/send-message.page:36(item/p)
-msgid ""
-"From the <gui>Contact List</gui> window, double-click the name of the "
-"contact that you want to have a conversation with."
-msgstr ""
-"Des de la finestra <gui>Llista de contactes</gui> feu doble clic al nom del "
-"contacte amb el que voleu parlar."
-
-#: C/send-message.page:42(item/p)
-msgid ""
-"A new window will open. Type a message into the box at the bottom of the "
-"window and press <key>Enter</key> to send it."
-msgstr ""
-"S'obrirà una finestra nova. Teclegeu el missatge a la caixa a la part "
-"inferior de la finestra i premeu <key>Retorn</key> per enviar-lo."
-
-#: C/send-message.page:50(section/title)
-msgid "Send a message to a meta-contact"
-msgstr "Com enviar un missatge a un metacontacte"
-
-#: C/send-message.page:58(item/p)
-msgid ""
-"Select the contact you want to have the conversation, and from the menu "
-"select <gui style=\"menuitem\">Chat</gui>."
-msgstr ""
-"Seleccioneu el contacte amb el que voleu conversar i des del menú "
-"seleccioneu <gui style=\"menuitem\">Xat</gui>."
-
-#: C/set-custom-status.page:9(info/desc)
-msgid "Add, edit or delete personal messages for your status."
-msgstr "Afegiu, editeu o suprimiu missatges personals dels vostres estats."
-
-#: C/set-custom-status.page:15(credit/name)
-msgid "Jim Campbell"
-msgstr "Jim Campbell"
-
-#: C/set-custom-status.page:34(page/title)
-msgid "Set a custom message"
-msgstr "Establiu un missatge personalitzat"
-
-#: C/set-custom-status.page:36(page/p)
-msgid ""
-"Sometimes you may want to set a custom message for your status, for example "
-"to let people know that you will be unavailable for a certain period of time."
-msgstr ""
-"A vegades voleu deixar un missatge personalitzat pel vostre estat, per "
-"exemple per fer saber als contactes que no estareu disponible durant una "
-"estona."
-
-#: C/set-custom-status.page:40(page/p)
-msgid ""
-"It is possible to set a custom message based on the different statuses "
-"available."
-msgstr "Podeu deixar un missatge personalitzat per a cada estat disponible."
-
-#: C/set-custom-status.page:46(item/p) C/set-custom-status.page:82(item/p)
-msgid ""
-"From the <gui>Contact List</gui> window, click on the drop-down list at the "
-"top."
-msgstr ""
-"Des de la finestra <gui>Llista de contactes</gui> feu clic a la llista "
-"desplegable de la part superior."
-
-#: C/set-custom-status.page:52(item/p)
-msgid ""
-"Select the status you want to add a custom message to. You have to select "
-"the one identified with the label <gui>Custom Message</gui>."
-msgstr ""
-"Seleccioneu l'estat al que voleu afegir-li el missatge personalitzat. Heu de "
-"seleccionar el que està identificat amb l'etiqueta <gui>Missatge "
-"personalitzat</gui>."
-
-#: C/set-custom-status.page:58(item/p)
-msgid ""
-"Enter your custom message in the text box at the top of the window, and "
-"press <key>Enter</key> to set the message."
-msgstr ""
-"Introduïu el missatge personalitzat a la caixa de text de dalt de la "
-"finestra i premeu <key>Retorn</key> per establir el missatge."
-
-#: C/set-custom-status.page:64(item/p)
-msgid ""
-"If you want to set the custom message as a favorite, saving it in order to "
-"use it again, click on the little heart on the right of the text box where "
-"you wrote your custom message."
-msgstr ""
-"Si voleu establir el missatge personalitzat com a preferit, per poder-lo "
-"utilitzar en un altre moment, feu clic al cor petit a la dreta de la caixa "
-"de text on heu escrit el missatge personalitzat."
-
-#: C/set-custom-status.page:69(item/p)
-msgid ""
-"If you do not do it, the custom message will not be available the next time "
-"you use <app>Empathy</app>. It will be saved only for the current session."
-msgstr ""
-"So no el deseu com a preferit quan torneu a iniciar l'<app>Empathy</app> no "
-"estarà disponible com a missatge personalitzat. Només es desarà per la "
-"sessió actual."
-
-#: C/set-custom-status.page:78(section/title)
-msgid "Edit and remove a custom message"
-msgstr "Edició i supressió dels missatges personalitzats"
-
-#: C/set-custom-status.page:88(item/p)
-msgid "Select <gui>Edit Custom Message</gui>."
-msgstr "Seleccioneu <gui>Edita el missatge personalitzat</gui>."
-
-#: C/set-custom-status.page:95(item/p)
-msgid "To edit a custom message:"
-msgstr "Per editar un missatge personalitzat:"
-
-#: C/set-custom-status.page:100(item/p)
-msgid ""
-"From the <gui>Saved Presets</gui> box, select the status message you want to "
-"edit and double-click on it."
-msgstr ""
-"Des de la caixa <gui>Preestablerts desats</gui>, seleccioneu el missatge "
-"d'estat que voleu editar i feu-hi doble clic."
-
-#: C/set-custom-status.page:106(item/p)
-msgid "Type the new custom message and press <key>Enter</key> to modify it."
-msgstr ""
-"Teclegeu el missatge personalitzat nou i premeu <key>Retorn</key> per "
-"modificar-lo."
-
-#: C/set-custom-status.page:113(item/p)
-msgid "To remove a custom message:"
-msgstr "Per suprimir un missatge personalitzat:"
-
-#: C/set-custom-status.page:118(item/p)
-msgid ""
-"From the <gui>Saved Presets</gui> box, select the status message you want to "
-"remove."
-msgstr ""
-"Des de la caixa <gui>Preestablerts desats</gui>, seleccioneu el missatge "
-"d'estat que voleu suprimir."
-
-#: C/set-custom-status.page:124(item/p)
-msgid "Click on the <gui>Remove</gui> button."
-msgstr "Feu clic al botó <gui>Suprimeix</gui>."
-
-#: C/set-custom-status.page:133(item/p)
-msgid "When finished, click on <gui>Close</gui>."
-msgstr "Feu clic a <gui>Tanca</gui> quan hàgiu acabat."
-
-#: C/set-custom-status.page:140(note/p)
-msgid ""
-"When you edit a custom message, it will not be set as the current status "
-"message. You will need to select it from the <gui>Contact List</gui> window."
-msgstr ""
-"Quan editeu un missatge personalitzat, aquest no s'establirà com el missatge "
-"actual. L'haureu de seleccionar a la finestra <gui>Llista de contactes</gui>."
-
-#: C/share-desktop.page:7(info/desc)
-msgid "Show your desktop to your contacts."
-msgstr "Mostreu l'escriptori als contactes."
-
-#: C/share-desktop.page:33(page/title)
-msgid "Share your desktop"
-msgstr "Compartició de l'escriptori"
-
-#: C/share-desktop.page:35(page/p)
-msgid ""
-"It is possible to share your desktop with some of your contacts. You can use "
-"this functionality to show your desktop to your contacts to, for example, "
-"ask for help or help your contacts resolve a problem."
-msgstr ""
-"Podeu compartir l'escriptori amb algun contacte. Podeu utilitzar-ho per "
-"mostrar l'escriptori als contactes, per exemple per demanar-los ajuda o "
-"ajudar-los a resoldre un problema."
-
-#: C/share-desktop.page:42(note/p)
-msgid ""
-"To be able to share your desktop, you need to have a VNC server, which has "
-"support for the feature, installed on your system. <app>Vino</app>, the "
-"GNOME VNC server, has the required support."
-msgstr ""
-"Per poder compartir l'escriptori, cal que tingueu instal·lat al sistema un "
-"servidor de VNC que permeti aquesta funció. El <app>Vino</app>, el servidor "
-"de VNC del GNOME, ja ho permet."
-
-#: C/share-desktop.page:51(item/p)
-msgid "From the <gui>Contact List</gui> window, do one of the following:"
-msgstr ""
-"Des de la finestra <gui>Llista de contactes</gui> executeu una de les "
-"accions següents:"
-
-#: C/share-desktop.page:56(item/p)
-msgid ""
-"Select the contact you want to share your desktop with and choose "
-"<guiseq><gui>Edit</gui><gui>Contact</gui> <gui>Share My Desktop</gui></"
-"guiseq>."
-msgstr ""
-"Seleccioneu el contacte amb el que voleu compartir l'escriptori i escolliu "
-"<guiseq><gui>Edita</gui><gui>Contacte</gui><gui>Comparteix el meu "
-"escriptori</gui></guiseq>."
-
-#: C/share-desktop.page:63(item/p)
-msgid ""
-"Right-click on the name of the contact you want to share your desktop with "
-"and select <gui>Share My Desktop</gui>."
-msgstr ""
-"Feu clic amb el botó secundari sobre el contacte amb el qual voleu compartir "
-"l'escriptori i seleccioneu <gui>Comparteix el meu escriptori</gui>."
-
-#: C/share-desktop.page:71(item/p)
-msgid ""
-"An invitation to view your desktop will be sent to the contact you have "
-"selected. To view your desktop, they will need to accept it."
-msgstr ""
-"Perquè pugui veure el vostre escriptori, al contacte que hageu seleccionat "
-"se li enviarà una invitació que haurà d'acceptar."
-
-#: C/share-desktop.page:77(item/p)
-msgid ""
-"You can disconnect the contact from your computer using your desktop sharing "
-"application."
-msgstr ""
-"Podeu desconnectar el contacte del vostre ordinador mitjançat l'aplicació de "
-"compartició d'escriptoris."
-
-#: C/share-desktop.page:82(note/p)
-msgid ""
-"For more information about how to use the remote desktop sharing "
-"application, refer to its help."
-msgstr ""
-"Per més informació sobre com utilitzar l'aplicació de compartició "
-"d'escriptoris remots mireu la seva ajuda."
-
-#: C/share-desktop.page:90(page/p)
-msgid ""
-"When you share your desktop with someone else, it is possible to experience "
-"system performance slowdown and low Internet speed."
-msgstr ""
-"Quan compartiu l'escriptori amb algú altre, podeu notar un alentiment del "
-"sistema i una disminució de la velocitat d'Internet."
-
-#: C/share-desktop.page:96(note/p)
-msgid ""
-"Some of your contacts may not be able to use this feature. It is necessary "
-"for them to have version 2.28, or newer, of <app>Empathy</app> and a "
-"compatible remote desktop viewer application installed in their system."
-msgstr ""
-"Potser no tots els contactes podran utilitzar aquesta funció. Cal que "
-"tinguin la versió 2.28 o una més nova de l'<app>Empathy</app> i una "
-"aplicació de visualització d'escriptoris remots compatible instal·lada al "
-"sistema."
-
-#. This is a reference to an external file such as an image or video. When
-#. the file changes, the md5 hash will change to let you know you need to
-#. update your localized copy. The msgstr is not used at all. Set it to
-#. whatever you like once you have updated your copy of the file.
-#: C/status-icons.page:39(media)
-msgctxt "_"
-msgid ""
-"external ref='figures/available.png' md5='2196b2f0ad4ce26fdb7b9d48e75d1947'"
-msgstr ""
-"external ref='figures/available.png' md5='2196b2f0ad4ce26fdb7b9d48e75d1947'"
-
-#. This is a reference to an external file such as an image or video. When
-#. the file changes, the md5 hash will change to let you know you need to
-#. update your localized copy. The msgstr is not used at all. Set it to
-#. whatever you like once you have updated your copy of the file.
-#: C/status-icons.page:45(media)
-msgctxt "_"
-msgid "external ref='figures/busy.png' md5='15eb2adff5faedf97b0cb9105d09410a'"
-msgstr "external ref='figures/busy.png' md5='15eb2adff5faedf97b0cb9105d09410a'"
-
-#. This is a reference to an external file such as an image or video. When
-#. the file changes, the md5 hash will change to let you know you need to
-#. update your localized copy. The msgstr is not used at all. Set it to
-#. whatever you like once you have updated your copy of the file.
-#: C/status-icons.page:53(media)
-msgctxt "_"
-msgid "external ref='figures/away.png' md5='9c504d6ffa0cf1a9cc8933d16e1bea33'"
-msgstr "external ref='figures/away.png' md5='9c504d6ffa0cf1a9cc8933d16e1bea33'"
-
-#. This is a reference to an external file such as an image or video. When
-#. the file changes, the md5 hash will change to let you know you need to
-#. update your localized copy. The msgstr is not used at all. Set it to
-#. whatever you like once you have updated your copy of the file.
-#.
-#. This is a reference to an external file such as an image or video. When
-#. the file changes, the md5 hash will change to let you know you need to
-#. update your localized copy. The msgstr is not used at all. Set it to
-#. whatever you like once you have updated your copy of the file.
-#: C/status-icons.page:62(media) C/status-icons.page:69(media)
-msgctxt "_"
-msgid ""
-"external ref='figures/offline.png' md5='c5b0c21181cbd6e13f8909243c0fa964'"
-msgstr ""
-"external ref='figures/offline.png' md5='c5b0c21181cbd6e13f8909243c0fa964'"
-
-#: C/status-icons.page:7(info/desc)
-msgid "Understanding the various statuses and status icons."
-msgstr "Explicació dels diversos estats i icones d'estat."
-
-#: C/status-icons.page:35(page/title)
-msgid "Status Types and Icons"
-msgstr "Icones i tipus d'estats"
-
-#: C/status-icons.page:39(item/title)
-msgid ""
-"<media type=\"image\" mime=\"image/png\" src=\"figures/available.png"
-"\">Available icon</media> <gui>Available</gui>"
-msgstr ""
-"<media type=\"image\" mime=\"image/png\" src=\"figures/available.png\">Icona "
-"de disponible</media> <gui>Disponible</gui>"
-
-#: C/status-icons.page:41(item/p)
-msgid ""
-"Use the <em>Available</em> status when you are at your computer and able to "
-"chat with your contacts. You can set a custom message for this status."
-msgstr ""
-"Utilitzeu l'estat <em>Disponible</em> quan esteu a l'ordinador i esteu "
-"disponibles per xatejar. Podeu configurar un missatge personalitzat per "
-"aquest estat."
-
-#: C/status-icons.page:45(item/title)
-msgid ""
-"<media type=\"image\" mime=\"image/png\" src=\"figures/busy.png\">Busy icon</"
-"media> <gui>Busy</gui>"
-msgstr ""
-"<media type=\"image\" mime=\"image/png\" src=\"figures/busy.png\">Icona "
-"d'ocupat</media> <gui>Ocupat</gui>"
-
-#: C/status-icons.page:47(item/p)
-msgid ""
-"Use the <em>Busy</em> status to let your contacts know that you don’t want "
-"to chat right now. They can still contact you, for instance if they have "
-"something urgent they need to discuss. By default, <app>Empathy</app> will "
-"not use notification bubbles and sounds when you are busy. You can set a "
-"custom message for this status."
-msgstr ""
-"Utilitzeu l'estat <em>Ocupat</em> per mostrar als contactes que no voleu "
-"xatejar ara. Encara podran xatejar si volen, per exemple si tenen alguna "
-"cosa urgent a comentar-vos. Per defecte, l'<app>Empathy</app> no utilitzarà "
-"finestres emergents ni sons quan esteu ocupats. Podeu configurar un missatge "
-"personalitzat per aquest estat."
-
-#: C/status-icons.page:53(item/title)
-msgid ""
-"<media type=\"image\" mime=\"image/png\" src=\"figures/away.png\">Away icon</"
-"media> <gui>Away</gui>"
-msgstr ""
-"<media type=\"image\" mime=\"image/png\" src=\"figures/away.png\">Icona "
-"d'absent</media> <gui>Absent</gui>"
-
-#: C/status-icons.page:55(item/p)
-msgid ""
-"Use the <em>Away</em> status when you are going away from your computer. "
-"<app>Empathy</app> automatically sets your status to Away if you do not use "
-"your computer for a while, or if your screensaver is on. By default, "
-"<app>Empathy</app> will not use notification bubbles and sounds when you are "
-"away. You can set a custom message for this status."
-msgstr ""
-"Utilitzeu l'estat <em>Absent</em> quan sou lluny de l'ordinador. "
-"L'<app>Empathy</app> us posa automàticament l'estat «Absent» si esteu un "
-"temps sense utilitzar l'ordinador o si s'activa l'estalvi de pantalla. Per "
-"defecte, l'<app>Empathy</app> no utilitzarà finestres emergents ni sons quan "
-"esteu absents. Podeu configurar un missatge personalitzat per aquest estat."
-
-#: C/status-icons.page:62(item/title)
-msgid ""
-"<media type=\"image\" mime=\"image/png\" src=\"figures/offline.png\">Offline "
-"icon</media> <gui>Invisible</gui>"
-msgstr ""
-"<media type=\"image\" mime=\"image/png\" src=\"figures/offline.png\">Icona "
-"d'invisible</media> <gui>Invisible</gui>"
-
-#: C/status-icons.page:64(item/p)
-msgid ""
-"When you set your status to <em>Invisible</em>, you will appear as offline "
-"to your contacts. You will still be connected to your accounts, and you "
-"still see your contacts’ statuses and start conversations with them."
-msgstr ""
-"Quan poseu l'estat com a <em>Invisible</em>, apareixereu com a desconnectat "
-"per als contactes. Encara estareu connectat als comptes i podreu veure "
-"l'estat dels contactes i xatejar-hi."
-
-#: C/status-icons.page:69(item/title)
-msgid ""
-"<media type=\"image\" mime=\"image/png\" src=\"figures/offline.png\">Offline "
-"icon</media> <gui>Offline</gui>"
-msgstr ""
-"<media type=\"image\" mime=\"image/png\" src=\"figures/offline.png\">Icona "
-"de fora de línia</media> <gui>Fora de línia</gui>"
-
-#: C/status-icons.page:71(item/p)
-msgid ""
-"Setting your status to <em>Offline</em> disconnects you from all of your "
-"accounts."
-msgstr ""
-"Si establiu l'estat com a <em>Desconnectat</em> us desconnectarà de tots els "
-"contactes."
-
-#: C/video-call.page:11(info/desc)
-msgid "Start a video conversation with one of your contacts."
-msgstr "Inicieu una conversa de vídeo amb un dels contactes."
-
-#: C/video-call.page:37(page/title)
-msgid "Start a video conversation"
-msgstr "Inicieu una conversa de vídeo"
-
-#: C/video-call.page:39(page/p)
-msgid ""
-"If you have a webcam, you can call your contacts and have a video "
-"conversation with them. This feature only works with certain types of "
-"accounts, and it requires the other person to have an application that "
-"supports video calls."
-msgstr ""
-"Si teniu una càmera web, podeu trucar els contactes i tindre una vídeo "
-"conferencia amb ells. Aquesta característica sols funciona amb certs tipus "
-"de comptes, i requereix que l'altra persona tingui una aplicació que permeti "
-"fer vídeo trucades."
-
-#: C/video-call.page:46(item/p)
-msgid ""
-"Right-click on the contact that you want to call and select <gui style="
-"\"menuitem\">Video Call</gui>."
-msgstr ""
-"Feu clic amb el botó secundari al contacte que voleu trucar i des del menú "
-"seleccioneu <gui style=\"menuitem\">Trucada de vídeo</gui>."
-
-#: C/video-call.page:54(item/p)
-msgid ""
-"To end the conversation, click on the <gui style=\"button\">hang up</gui> "
-"button."
-msgstr "Per acabar la conversa feu clic a <gui style=\"button\">Penja</gui>."
-
-#: C/video-call.page:60(note/p)
-msgid ""
-"To turn a video conversation into an audio conversation, choose <guiseq><gui "
-"style=\"menu\">Video</gui><gui style=\"menuitem\">Video Off</gui></guiseq>."
-msgstr ""
-"Per canviar d'una conversa de vídeo a una conversa de veu, escolliu "
-"<guiseq><gui style=\"menu\">Vídeo</gui><gui style=\"menuitem\">Apaga el "
-"vídeo</gui></guiseq>."
-
-#: C/video-call.page:65(section/title)
-msgid "Start a video conversation with a meta-contact"
-msgstr "Inicia una conversa de vídeo amb un metacontacte"
-
-#: C/video-call.page:73(item/p)
-msgid ""
-"Select the contact you want to have the conversation, and from the menu "
-"select <gui style=\"menuitem\">Video Call</gui>."
-msgstr ""
-"Seleccioneu el contacte amb el que voleu realitzar la conversa i des del "
-"menú seleccioneu <gui style=\"menuitem\">Trucada de vídeo</gui>."
diff --git a/help/ca/figures/empathy-main-window.png b/help/ca/figures/empathy-main-window.png
deleted file mode 100644
index bc761bd3..00000000
--- a/help/ca/figures/empathy-main-window.png
+++ /dev/null
Binary files differ
diff --git a/help/ca/figures/empathy-new-account.png b/help/ca/figures/empathy-new-account.png
deleted file mode 100644
index 06e2b169..00000000
--- a/help/ca/figures/empathy-new-account.png
+++ /dev/null
Binary files differ
diff --git a/help/cs/cs.po b/help/cs/cs.po
deleted file mode 100644
index 86702705..00000000
--- a/help/cs/cs.po
+++ /dev/null
@@ -1,1371 +0,0 @@
-# Czech translation of empathy help manual.
-# Lucas Lommer <llommer@svn.gnome.org>, 2008.
-# Martin Picek <picek.martin@gnome-cesko.cz>, 2009.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: empathy\n"
-"POT-Creation-Date: 2009-03-09 12:32+0000\n"
-"PO-Revision-Date: 2009-03-09 18:18+0100\n"
-"Last-Translator: Martin Picek <picek.martin@gnome-cesko.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"
-
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/empathy.xml:238(None)
-msgid ""
-"@@image: 'figures/empathy-main-window.png'; "
-"md5=38259a866f38ff1f754828e46d2b0e5c"
-msgstr ""
-"@@image: 'figures/empathy-main-window.png'; "
-"md5=38259a866f38ff1f754828e46d2b0e5c"
-
-#: C/empathy.xml:27(title)
-msgid "<application>Empathy</application> Manual V2.1"
-msgstr "Příručka k <application>Empathy</application> V2.1"
-
-#: C/empathy.xml:30(year)
-msgid "2008, 2009"
-msgstr "2008, 2009"
-
-#: C/empathy.xml:31(holder) C/empathy.xml:37(publishername)
-#: C/empathy.xml:48(orgname) C/empathy.xml:56(orgname) C/empathy.xml:87(para)
-#: C/empathy.xml:101(para)
-msgid "Ubuntu Documentation Project"
-msgstr "Dokumentační projekt 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 ""
-"Je povoleno kopírovat, šířit a/nebo upravovat tento dokument za podmínek GNU "
-"Free Documentation License (GFDL), verze 1.1 nebo jakékoli další verze "
-"vydané nadací Free Software Foundation; bez neměnných oddílů, bez textů "
-"předních desek a bez textů zadních desek. Kopii licence GFDL naleznete pod "
-"<ulink type=\"help\" url=\"ghelp:fdl\">tímto odkazem</ulink> nebo v souboru "
-"COPYING-DOCS dodávaném s touto příručkou."
-
-#: 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 ""
-"Tato příručka je součástí sbírky příruček GNOME šířených za podmínek licence "
-"GNU FDL. Pokud chcete tento dokument šířit odděleně od sbírky, musíte "
-"přiložit kopii licence dle popisu v oddíle 6 dané licence."
-
-#: 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 ""
-"Mnoho užívaných jmen určených k zviditelnění produktů nebo služeb jsou "
-"ochranné známky. Na místech, kde jsou tato jména v dokumentaci užita a "
-"členové Dokumentačního projektu GNOME jsou si vědomi skutečnosti, že se "
-"jedná o ochrannou známku, je takové jméno psáno velkými písmeny celé nebo s "
-"velkým písmenem na začátku."
-
-#: 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 ""
-"DOKUMENT JE POSKYTOVÁN V PODOBĚ \"JAK JE\", BEZ ZÁRUKY JAKÉHOKOLIV DRUHU, "
-"NEPOSKYTUJÍ SE ANI ODVOZENÉ ZÁRUKY, ZÁRUKY, ŽE DOKUMENT, NEBO JEHO UPRAVENÁ "
-"VERZE, JE BEZCHYBNÝ, NEBO ZÁRUKY PRODEJNOSTI, VHODNOSTI PRO URČITÝ ÚČEL, "
-"NEBO NEPORUŠENOSTI. RIZIKO NEKVALITY, NEPŘESNOSTI A ŠPATNÉHO PROVEDENÍ "
-"DOKUMENTU, NEBO JEHO UPRAVENÉ VERZE, NESETE VY. POKUD JE TENTO DOKUMENT NEBO "
-"JEHO UPRAVENÁ VERZE VADNÁ V JAKÉMKOLIV SMYSLU, VY (NIKOLIV PŮVODCE, AUTOR "
-"NEBO JAKÝKOLIV PŘISPĚVATEL) PŘEBÍRÁTE ODPOVĚDNOST ZA JAKÉKOLIV NÁKLADY NA "
-"NUTNÉ ÚPRAVY, OPRAVY ČI SLUŽBY. TOTO PROHLÁŠENÍ O ZÁRUCE PŘEDSTAVUJE "
-"ZÁKLADNÍ SOUČÁST TÉTO LICENCE. BEZ TOHOTO PROHLÁŠENÍ NENÍ PODLE TÉTO DOHODY "
-"POVOLENO UŽÍVÁNÍ ANI ÚPRAVY TOHOTO DOKUMENTU; DÁLE"
-
-#: 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 ""
-
-#: 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 ""
-"DOKUMENT A JEHO UPRAVENÉ VERZE JSOU ŠÍŘENY V SOULADU SE ZNĚNÍM LICENCE GNU "
-"FREE DOCUMENTATION LICENSE S NÁSLEDUJÍCÍM USTANOVENÍM: <placeholder-1/>"
-
-#: C/empathy.xml:45(firstname)
-msgid "Milo"
-msgstr "Milo"
-
-#: C/empathy.xml:46(surname)
-msgid "Casagrande"
-msgstr "Casagrande"
-
-#: C/empathy.xml:49(email)
-msgid "milo@ubuntu.com"
-msgstr "milo@ubuntu.com"
-
-#: C/empathy.xml:53(firstname)
-msgid "Seth"
-msgstr "Seth"
-
-#: C/empathy.xml:54(surname)
-msgid "Dudenhofer"
-msgstr "Dudenhofer"
-
-#: C/empathy.xml:57(email)
-msgid "sdudenhofer@gmail.com"
-msgstr "sdudenhofer@gmail.com"
-
-#: C/empathy.xml:81(revnumber)
-msgid "Empathy Manual V2.1"
-msgstr "Příručka k Empathy V2.1"
-
-#: C/empathy.xml:82(date)
-msgid "January 2009"
-msgstr "Leden 2009"
-
-#: C/empathy.xml:84(para) C/empathy.xml:95(para)
-msgid "Milo Casagrande <email>milo@ubuntu.com</email>"
-msgstr "Milo Casagrande <email>milo@ubuntu.com</email>"
-
-#: C/empathy.xml:92(revnumber)
-msgid "Empathy Manual V2.0"
-msgstr "Příručka k Empathy V2.0"
-
-#: C/empathy.xml:93(date)
-msgid "April 2008"
-msgstr "Duben 2008"
-
-#: C/empathy.xml:98(para)
-msgid "Seth Dudenhofer <email>sdudenhofer@gmail.com</email>"
-msgstr "Seth Dudenhofer <email>sdudenhofer@gmail.com</email>"
-
-#: C/empathy.xml:106(releaseinfo)
-msgid "This manual describes version 2.26 of Empathy."
-msgstr "Tato příručka popisuje Empathy ve verzi 2.26."
-
-#: C/empathy.xml:110(title)
-msgid "Feedback"
-msgstr "Ohlasy"
-
-#: C/empathy.xml:111(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 ""
-"Pokud chcete oznámit chybu nebo navrhnout vylepšení vztahující se k "
-"<application>Empathy</application> nebo této příručce, postupujte dle "
-"instrukcí na stránce <ulink url=\"ghelp:gnome-feedback\" type=\"help"
-"\">Zpětná vazba GNOME</ulink>."
-
-#: C/empathy.xml:119(para)
-msgid "Empathy is an application for instant messaging."
-msgstr "Empathy je aplikace pro výměnu rychlých zpráv."
-
-#: C/empathy.xml:127(primary) C/empathy.xml:0(application)
-msgid "Empathy"
-msgstr "Empathy"
-
-#: C/empathy.xml:130(primary)
-msgid "empathy"
-msgstr "empathy"
-
-#: C/empathy.xml:131(secondary)
-msgid "istant messaging"
-msgstr "odesílání rychlých zpráv"
-
-#: C/empathy.xml:135(title)
-msgid "Introduction"
-msgstr "Úvod"
-
-#: C/empathy.xml:136(para)
-msgid ""
-"<application>Empathy</application> is a multi-protocol instant messaging "
-"program for the GNOME Desktop. With <application>Empathy</application> you "
-"can keep in touch with all of your friends through lots of supported instant "
-"messaging services."
-msgstr ""
-"<application>Empathy</application> je aplikace pro pracovní prostředí GNOME "
-"určená k odesílání rychlých zpráv podporující různé protokoly. Pomocí "
-"<application>Empathy</application> zůstanete v kontaktu se všemi svými "
-"přáteli nezávisle na typu služby zasílání rychlých zpráv."
-
-#: C/empathy.xml:146(acronym)
-msgid "AIM"
-msgstr "AIM"
-
-#: C/empathy.xml:150(para)
-msgid "Google Talk"
-msgstr "Google Talk"
-
-#: C/empathy.xml:155(para) C/empathy.xml:1090(title)
-msgid "ICQ"
-msgstr "ICQ"
-
-#: C/empathy.xml:161(acronym)
-msgid "IRC"
-msgstr "IRC"
-
-#: C/empathy.xml:165(para)
-msgid "Jabber (or <acronym>XMPP</acronym>)"
-msgstr "Jabber (neboli <acronym>XMPP</acronym>)"
-
-#: C/empathy.xml:171(acronym)
-msgid "MSN"
-msgstr "MSN"
-
-#: C/empathy.xml:175(para) C/empathy.xml:442(para) C/empathy.xml:1050(title)
-msgid "Salut"
-msgstr "Salut"
-
-#: C/empathy.xml:181(acronym)
-msgid "SIP"
-msgstr "SIP"
-
-#: C/empathy.xml:185(para) C/empathy.xml:920(title)
-msgid "Yahoo"
-msgstr "Yahoo"
-
-#: C/empathy.xml:190(para)
-msgid "And many others..."
-msgstr "A mnoho dalších…"
-
-#: C/empathy.xml:141(para)
-msgid ""
-"<application>Empathy</application> supports the following services: "
-"<placeholder-1/>"
-msgstr ""
-"<application>Empathy</application> podporuje následující služby: "
-"<placeholder-1/>"
-
-#: C/empathy.xml:199(title)
-msgid "Getting Started"
-msgstr "Začínáme"
-
-#: C/empathy.xml:202(title)
-msgid "Starting Empathy"
-msgstr "Spuštění Empathy"
-
-#: C/empathy.xml:203(para)
-msgid "You can start <application>Empathy</application> in the following ways:"
-msgstr "<application>Empathy</application> lze spustit následujícími způsoby:"
-
-#: C/empathy.xml:207(term)
-msgid "<guimenu>Applications</guimenu> menu"
-msgstr "Nabídka <guimenu>Aplikace</guimenu>"
-
-#: C/empathy.xml:209(para)
-msgid ""
-"Choose <menuchoice><guisubmenu>Internet</guisubmenu><guimenuitem>Empathy "
-"Instant Messenger</guimenuitem></menuchoice>."
-msgstr ""
-"Vyberte <menuchoice><guisubmenu>Internet</"
-"guisubmenu><guimenuitem>Komunikátor Empathy</guimenuitem></menuchoice>."
-
-#: C/empathy.xml:218(term)
-msgid "Command line"
-msgstr "Příkazová řádka"
-
-#: C/empathy.xml:220(para)
-msgid "Type <command>empathy</command> and then press <keycap>Enter</keycap>."
-msgstr "Zadejte <command>empathy</command> a stiskněte <keycap>Enter</keycap>."
-
-#: C/empathy.xml:229(title)
-msgid "When You Start Empathy"
-msgstr "Když spustíte Empathy…"
-
-#: C/empathy.xml:234(title)
-msgid "<application>Empathy</application> Main Window"
-msgstr "Hlavní okno <application>Empathy</application>"
-
-#: C/empathy.xml:241(phrase)
-msgid ""
-"Shows <placeholder-1/> main window. Contains the titlebar, the menubar, "
-"contact list, status icon and status arrow button list."
-msgstr ""
-"Zobrazuje <placeholder-1/> hlavní okno, které obsahuje záhlaví, nabídkovou "
-"lištu, seznam kontaktů, stavovou ikonku a seznam stavů."
-
-#: C/empathy.xml:230(para)
-msgid ""
-"When you start <application>Empathy</application> the following window is "
-"shown. <placeholder-1/>"
-msgstr ""
-"Když spustíte <application>Empathy</application>, zobrazí se následující "
-"okno. <placeholder-1/>"
-
-#: C/empathy.xml:256(title)
-msgid "<application>Empathy</application> Main Components"
-msgstr "Hlavní komponenty <application>Empathy</application>"
-
-#: C/empathy.xml:263(para)
-msgid "Component"
-msgstr "Komponenta"
-
-#: C/empathy.xml:266(para)
-msgid "Description"
-msgstr "Popis"
-
-#: C/empathy.xml:273(para)
-msgid "Menubar"
-msgstr "Nabídková lišta"
-
-#: C/empathy.xml:276(para)
-msgid ""
-"Contains menus used to perform actions in <application>Empathy</application>."
-msgstr ""
-"Obsahuje nabídku činností, které lze v aplikaci <application>Empathy</"
-"application> provádět."
-
-#: C/empathy.xml:283(para)
-msgid "Status Drop-Down List"
-msgstr "Rozbalovací seznam se stavem"
-
-#: C/empathy.xml:286(para)
-msgid "Allows to update the status."
-msgstr "Umožňuje měnit stav."
-
-#: C/empathy.xml:293(para)
-msgid "Account Button"
-msgstr "Tlačítko Účet"
-
-#: C/empathy.xml:296(para)
-msgid "Opens the <guilabel>Accounts</guilabel> dialog."
-msgstr "Otevírá dialogové okno <guilabel>Účty</guilabel>."
-
-#: C/empathy.xml:303(para)
-msgid "Contact List"
-msgstr "Seznam kontaktů"
-
-#: C/empathy.xml:306(para)
-msgid "Shows all the available contacts and their associated status."
-msgstr "Zobrazuje přítomné kontakty a jejich stav."
-
-#: C/empathy.xml:252(para)
-msgid ""
-"<xref linkend=\"empathy-TBL-1\"/> describes the components of "
-"<application>Empathy</application>'s main 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 ""
-"<xref linkend=\"empathy-TBL-1\"/> popisuje komponenty hlavního okna "
-"<application>Empathy</application>. <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>"
-
-#: C/empathy.xml:320(title)
-msgid "Accounts"
-msgstr "Účty"
-
-#: C/empathy.xml:321(para)
-msgid ""
-"To use <application>Empathy</application> you need at least one account of "
-"the supported services."
-msgstr ""
-"Abyste mohli <application>Empathy</application> používat, musíte mít nejméně "
-"jeden účet u některé z podporovaných služeb."
-
-#: C/empathy.xml:324(para)
-msgid ""
-"If you don't already have an account and you don't have your <emphasis>user "
-"name</emphasis> and <emphasis>password</emphasis>, you need to register a "
-"new account (see <xref linkend=\"empathy-register-account\"/>)."
-msgstr ""
-"Pokud ještě žádný účet nemáte a nemáte tedy ani žádné <emphasis>uživatelské "
-"jméno</emphasis> a <emphasis>heslo</emphasis>, budete si jej muset "
-"zaregistrovat (viz <xref linkend=\"empathy-register-account\"/>)."
-
-#: C/empathy.xml:329(para)
-msgid ""
-"In order to talk with other users, also called <emphasis>contacts</"
-"emphasis>, you need to use the same service they are using. If, for example, "
-"one contact is using the <emphasis role=\"strong\">Jabber</emphasis> "
-"service, you need to have an account registered with that service."
-msgstr ""
-"Abyste mohli mluvit s jinými uživateli (zvanými <emphasis>kontakty</"
-"emphasis>), musíte používat stejnou službu jako oni. Například, pokud nějaký "
-"kontakt používá <emphasis role=\"strong\">Jabber</emphasis>, musíte mít "
-"zaregistrován účet pro stejnou službu."
-
-#: C/empathy.xml:336(para)
-msgid ""
-"<application>Empathy</application> can handle as many accounts on any "
-"supported services as you want and you can have them all open at the same "
-"time."
-msgstr ""
-"<application>Empathy</application> může obsluhovat libovolný počet účtů u "
-"libovolných podporovaných služeb, přičemž všechny můžete používat zároveň."
-
-#: C/empathy.xml:342(title)
-msgid "Registering an Account"
-msgstr "Registrace účtu"
-
-#: C/empathy.xml:343(para)
-msgid ""
-"You can freely register an account on any of the following services. Follow "
-"the instructions reported on each website on how to register your new "
-"account. At the end of the registration process you should have a "
-"<emphasis>user name</emphasis> (or an <emphasis>account ID</emphasis>) and a "
-"<emphasis>password</emphasis> that you will use to create the account in "
-"<application>Empathy</application>."
-msgstr ""
-"Zdarma si můžete zaregistrovat účty pro následující služby. Řiďte se "
-"instrukcemi pro registraci na příslušné stránce zvolené služby. Na konci "
-"registrace byste měli obdržet <emphasis>uživatelské jméno</emphasis> (neboli "
-"<emphasis>ID účtu</emphasis>) a <emphasis>heslo</emphasis>. Tyto údaje "
-"použijete při vytváření účtu v <application>Empathy</application>."
-
-#. Translators: try to find a localized version of the
-#. registration service website
-#: C/empathy.xml:361(para)
-msgid ""
-"The <ulink type=\"http\" url=\"http://dashboard.aim.com/aim\">AIM</ulink> "
-"service."
-msgstr ""
-"Služba <ulink type=\"http\" url=\"http://dashboard.aim.com/aim\">AIM</ulink>."
-
-#. Translators: try to find a localized version of the
-#. registration service website
-#: C/empathy.xml:368(para)
-msgid ""
-"The <ulink type=\"http\" url=\"http://www.google.com/talk/\">Google Talk</"
-"ulink> service."
-msgstr ""
-"Služba <ulink type=\"http\" url=\"http://www.google.com/talk/\">Google Talk</"
-"ulink>."
-
-#. Translators: try to find a localized version of the
-#. registration service website
-#: C/empathy.xml:376(para)
-msgid ""
-"The <ulink type=\"http\" url=\"https://www.icq.com/register/\">ICQ</ulink> "
-"service."
-msgstr ""
-"Služba <ulink type=\"http\" url=\"https://www.icq.com/register/\">ICQ</"
-"ulink>."
-
-#. Translators: try to find a localized version of the
-#. registration service website
-#: C/empathy.xml:383(para)
-msgid ""
-"The <ulink type=\"http\" url=\"https://accountservices.passport.net\">MSN</"
-"ulink> service."
-msgstr ""
-"Služba <ulink type=\"http\" url=\"https://accountservices.passport.net"
-"\">MSN</ulink>."
-
-#. Translators: try to find a localized version of the
-#. registration service website
-#: C/empathy.xml:390(para)
-msgid ""
-"The <ulink type=\"http\" url=\"https://login.yahoo.com/config/login\">Yahoo</"
-"ulink> service."
-msgstr ""
-"Služba <ulink type=\"http\" url=\"https://login.yahoo.com/config/login"
-"\">Yahoo</ulink>."
-
-#: C/empathy.xml:352(para)
-msgid "Click on the name of the service to visit its website: <placeholder-1/>"
-msgstr ""
-"Klikněte na název služby; otevře se její webová stránka: <placeholder-1/>"
-
-#: C/empathy.xml:396(para)
-msgid ""
-"For registering a <acronym>SIP</acronym> account, you can use one of the "
-"following service:"
-msgstr ""
-"Registrace účtu <acronym>SIP</acronym> lze provádět prostřednictvím těchto "
-"služeb:"
-
-#. Translators: try to find a localized version of the
-#. registration service website
-#: C/empathy.xml:405(para)
-msgid ""
-"The <ulink type=\"http\" url=\"https://www.ekiga.net/index.php?page=register"
-"\">Ekiga</ulink> service."
-msgstr ""
-"Služba <ulink type=\"http\" url=\"https://www.ekiga.net/index.php?"
-"page=register\">Ekiga</ulink>."
-
-#. Translators: try to find a localized version of the
-#. registration service website
-#: C/empathy.xml:412(para)
-msgid ""
-"The <ulink type=\"http\" url=\"http://account2.freeworlddialup.com/index.php?"
-"section_id=94\"><acronym>FWD</acronym></ulink> (Free World Dialup) service."
-msgstr ""
-"Služba <ulink type=\"http\" url=\"http://account2.freeworlddialup.com/index."
-"php?section_id=94\"><acronym>FWD</acronym></ulink> (Free World Dialup)."
-
-#. Translators: try to find a localized version of the
-#. registration service website
-#: C/empathy.xml:420(para)
-msgid ""
-"The <ulink type=\"http\" url=\"https://signup.sipphone.com/new-users/app?"
-"class=NewUser;proc=start\">Sipphone</ulink> service."
-msgstr ""
-"Služba <ulink type=\"http\" url=\"https://signup.sipphone.com/new-users/app?"
-"class=NewUser;proc=start\">Sipphone</ulink>."
-
-#: C/empathy.xml:426(para)
-msgid ""
-"For registering a <emphasis role=\"strong\">Jabber</emphasis> account, you "
-"can use the automatic account creation of <application>Empathy</"
-"application>. Not all Jabber service providers support the automatic "
-"creation of accounts, one service provider known to work with "
-"<application>Empathy</application> is <ulink type=\"http\" url=\"http://www."
-"jabber.org/web/Jabber.org\">jabber.org</ulink>."
-msgstr ""
-"K registraci účtu <emphasis role=\"strong\">Jabber</emphasis> můžete použít "
-"automatické vytvoření účtu v <application>Empathy</application>. Ne všechny "
-"služby Jabber poskytují podporu automatického vytváření účtů. Jednou ze "
-"služeb, o které je známo, že s <application>Empathy</application> funguje, "
-"je <ulink type=\"http\" url=\"http://www.jabber.org/web/Jabber.org\">jabber."
-"org</ulink>."
-
-#: C/empathy.xml:434(para)
-msgid ""
-"If you already have a <emphasis role=\"strong\">Jabber</emphasis> account, "
-"you can use one of the following services:"
-msgstr ""
-"Jestliže již máte účet <emphasis role=\"strong\">Jabber</emphasis>, můžete "
-"použít některou z následujících služeb:"
-
-#: C/empathy.xml:451(title)
-msgid "Adding your Account to <application>Empathy</application>"
-msgstr "Přidání účtu do <application>Empathy</application>"
-
-#: C/empathy.xml:456(para) C/empathy.xml:534(para) C/empathy.xml:586(para)
-#: C/empathy.xml:619(para) C/empathy.xml:649(para) C/empathy.xml:672(para)
-msgid ""
-"From the <link linkend=\"empathy-FIG-mainwindow\">main window </link> "
-"(<guilabel>Contact List</guilabel>) click on the account button or press "
-"<keycap>F4</keycap> to open the <guilabel>Accounts</guilabel> dialog."
-msgstr ""
-"V <link linkend=\"empathy-FIG-mainwindow\">hlavním okně</link> "
-"(<guilabel>Seznam kontaktů</guilabel>) klikněte na tlačítko Účet, nebo "
-"stiskněte <keycap>F4</keycap>. Otevře se dialogové okno <guilabel>Účty</"
-"guilabel>."
-
-#: C/empathy.xml:468(para) C/empathy.xml:485(para)
-msgid ""
-"From the <guilabel>Type</guilabel> drop-down list choose the service you "
-"wish to add an account for, then click on the <guibutton>Create</guibutton> "
-"button."
-msgstr ""
-"V rozbalovacím seznamu <guilabel>Typ</guilabel> zvolte službu, pro kterou "
-"chcete přidat účet, a klikněte na tlačítko <guibutton>Vytvořit</guibutton>."
-
-#: C/empathy.xml:464(para)
-msgid ""
-"If it is the first time you launch <application>Empathy</application>: "
-"<placeholder-1/>"
-msgstr ""
-"Jestliže jste spustili <application>Empathy</application> poprvé: "
-"<placeholder-1/>"
-
-#: C/empathy.xml:480(para)
-msgid "Click on the <guilabel>Add</guilabel> button."
-msgstr "Klikněte na tlačítko <guibutton>Přidat</guibutton>."
-
-#: C/empathy.xml:476(para)
-msgid "Otherwise: <placeholder-1/>"
-msgstr "Jinak: <placeholder-1/>"
-
-#: C/empathy.xml:495(para)
-msgid ""
-"Fill the required fields with your <emphasis>user name</emphasis> and "
-"<emphasis>password</emphasis>. Optionally, you can modify some advanced "
-"options. For more information, see <xref linkend=\"empathy-advanced-options"
-"\"/>."
-msgstr ""
-"Povinná políčka vyplňte svým <emphasis>uživatelským jménem</emphasis> a "
-"<emphasis>heslem</emphasis>. Můžete také upravovat některé pokročilé volby. "
-"Chcete-li se o pokročilých volbách dovědět více, přečtete si <xref linkend="
-"\"empathy-advanced-options\"/>."
-
-#: C/empathy.xml:504(para) C/empathy.xml:567(para)
-msgid ""
-"To enable the new account, select the <guilabel>Enabled</guilabel> check-box "
-"next to the name of the account in the box on the left."
-msgstr ""
-"Chcete-li nový účet povolit, zaškrtněte zaškrtávací políčko "
-"<guilabel>Povoleno</guilabel> (nalevo od názvu účtu)."
-
-#: C/empathy.xml:452(para)
-msgid ""
-"To add your account to <application>Empathy</application>, proceed as "
-"follows: <placeholder-1/>"
-msgstr ""
-"Chcete-li přidat do <application>Empathy</application> účet, proveďte "
-"následující kroky: <placeholder-1/>"
-
-#: C/empathy.xml:514(title)
-msgid "Importing Accounts"
-msgstr "Importování účtů"
-
-#: C/empathy.xml:515(para)
-msgid ""
-"If you use another instant messaging program, you can import the accounts "
-"from that program into <application>Empathy</application>"
-msgstr ""
-"Jestliže jste dříve používali nějaký jiný komunikátor, můžete z něj "
-"importovat účty do <application>Empathy</application>."
-
-#: C/empathy.xml:521(para)
-msgid ""
-"At the moment <application>Empathy</application> can import the accounts "
-"only from the instant messaging program <application>Pidgin</application>. "
-"For more information about <application>Pidgin</application>, see the <ulink "
-"type=\"http\" url=\"http://www.pidgin.im/\">Pidgin website</ulink>."
-msgstr ""
-"V současné době umí <application>Empathy</application> importovat účty pouze "
-"z komunikátoru <application>Pidgin</application>. Chcete-li se o něm dovědět "
-"více, navštivte jeho <ulink type=\"http\" url=\"http://www.pidgin.im/"
-"\">webovou stránku</ulink>."
-
-#: C/empathy.xml:542(para)
-msgid ""
-"Click on the <guibutton>Import Accounts...</guibutton> button to open the "
-"<guilabel>Import Accounts</guilabel> dialog."
-msgstr ""
-"Klikněte na <guibutton>Importovat účty…</guibutton>, otevře se dialogové "
-"okno <guilabel>Importovat účty…</guilabel>."
-
-#: C/empathy.xml:549(para)
-msgid ""
-"Select the accounts you would like to import by clicking on the "
-"<guilabel>Import</guilabel> check-box."
-msgstr ""
-"Zaškrtáváním zaškrtávacích políček <guilabel>Importovat</guilabel> vyberte "
-"účty, jež si přejete importovat."
-
-#: C/empathy.xml:555(para)
-msgid ""
-"When you have selected all the desired accounts, click <guibutton>OK</"
-"guibutton> to import them. If you don't want to import the accounts, click "
-"<guibutton>Cancel</guibutton>."
-msgstr ""
-"Až budete mít vybrány všechny zamýšlené účty, klikněte na <guibutton>Budiž</"
-"guibutton> – účty se importují. Jestliže nechcete nic importovat, klikněte "
-"na <guibutton>Zrušit</guibutton>."
-
-#: C/empathy.xml:563(para)
-msgid ""
-"When you import a new account into <application>Empathy</application>, it "
-"will not be enabled by default."
-msgstr ""
-"Když do <application>Empathy</application> importujete nový účet, není "
-"automaticky povolen."
-
-#: C/empathy.xml:530(para)
-msgid ""
-"To import the accounts into <application>Empathy</application>, proceed as "
-"follows: <placeholder-1/>"
-msgstr ""
-"Chcete-li do <application>Empathy</application> importovat účty, proveďte "
-"následující kroky: <placeholder-1/>"
-
-#: C/empathy.xml:579(title)
-msgid "Editing an Account"
-msgstr "Úprava účtu"
-
-#: C/empathy.xml:594(para)
-msgid "Select the account you wish to edit in the box on the left."
-msgstr "V seznamu v levé části okna vyberte účet, který chcete odstranit."
-
-#: C/empathy.xml:600(para)
-msgid "Modify the desired data."
-msgstr "Upravte příslušné hodnoty."
-
-#: C/empathy.xml:580(para)
-msgid ""
-"To edit one of your accounts, i.e. to change the <emphasis>password</"
-"emphasis> or your <emphasis>user name</emphasis>, proceed as follows: "
-"<placeholder-1/>"
-msgstr ""
-"Chcete-li některý z účtů upravit, například změnit <emphasis>heslo</"
-"emphasis> nebo <emphasis>uživatelské jméno</emphasis>, proveďte následující "
-"kroky: <placeholder-1/>"
-
-#: C/empathy.xml:608(para)
-msgid ""
-"Based on the type of the account, it is possibile to edit different settings."
-msgstr "V závislosti na typu účtu je možné upravovat různá nastavení."
-
-#: C/empathy.xml:627(para)
-#, fuzzy
-#| msgid ""
-#| "Select the account you wish to edit in the box on the left and double-"
-#| "click on it's name."
-msgid ""
-"Select the account you wish to edit in the box on the left and double-click "
-"on its name."
-msgstr ""
-"V seznamu v levé části okna vyberte účet, který chcete upravit, a dvakrát "
-"klikněte na jeho název."
-
-#: C/empathy.xml:633(para)
-msgid "Change the name of the account as you desire."
-msgstr "Změňte název účtu dle vašich potřeb."
-
-#: C/empathy.xml:614(para)
-msgid ""
-"To modify the identifier of an account, how <application>Empathy</"
-"application> identifies an account, proceed as follows: <placeholder-1/>"
-msgstr ""
-"Chcete-li změnit identifikátor účtu (kterým <application>Empathy</"
-"application> označuje účet), proveďte následující kroky: <placeholder-1/>"
-
-#: C/empathy.xml:642(title)
-msgid "Disabling and Removing an Account"
-msgstr "Zakázání a odstranění účtu"
-
-#: C/empathy.xml:643(para)
-msgid "To disable an account, proceed as follows:"
-msgstr "Chcete-li účet zakázat, proveďte následující kroky:"
-
-#: C/empathy.xml:658(para)
-msgid ""
-"Select the account you wish to disable in the box on the left of the dialog "
-"and deselect the <guilabel>Enabled</guilabel> check-box."
-msgstr ""
-"V seznamu v levé části okna vyberte účet, který chcete zakázat, a odškrtněte "
-"zaškrtávací políčko <guilabel>Povoleno</guilabel>."
-
-#: C/empathy.xml:666(para)
-msgid "To remove an account, proceed as follows:"
-msgstr "Chcete-li účet odstranit, proveďte následující kroky:"
-
-#: C/empathy.xml:681(para)
-msgid ""
-"Select the account you wish to disable in the box on the left of the dialog."
-msgstr "V seznamu v levé části okna vyberte účet, který chcete odstranit."
-
-#: C/empathy.xml:687(para)
-msgid "Click on the <guibutton>Remove</guibutton> button."
-msgstr "Klikněte na tlačítko <guibutton>Odstranit</guibutton>."
-
-#: C/empathy.xml:692(para)
-msgid ""
-"A dialog will be shown asking for confirmation. Click on the "
-"<guibutton>Remove</guibutton> button to remove the account."
-msgstr ""
-"Zobrazí se dialogové okno vyžadující potvrzení. Klikněte na tlačítko "
-"<guibutton>Odstranit</guibutton> – účet bude odstraněn."
-
-#: C/empathy.xml:702(title)
-msgid "Editing Personal Information"
-msgstr "Úprava osobních informací"
-
-#: C/empathy.xml:703(para)
-msgid ""
-"To change your personal information, your alias and your icon (the image "
-"that other contacts will see of you), for each of your accounts, proceed as "
-"follows:"
-msgstr ""
-"Chcete-li změnit své osobní informace – svou přezdívku a ikonku (obrázek, "
-"který vidí ostatní kontakty) – pro každý z účtů, proveďte následující kroky:"
-
-#: C/empathy.xml:711(para)
-msgid ""
-"From the <link linkend=\"empathy-FIG-mainwindow\">main window</link>, select "
-"<menuchoice><guimenu>Edit</guimenu><guimenuitem>Personal Information</"
-"guimenuitem></menuchoice>."
-msgstr ""
-"V <link linkend=\"empathy-FIG-mainwindow\">hlavním okně</link> vyberte "
-"<menuchoice><guimenu>Upravit</guimenu><guimenuitem>Osobní informace</"
-"guimenuitem></menuchoice>."
-
-#: C/empathy.xml:720(para)
-msgid ""
-"From the <guilabel>Account</guilabel> drop-down list, choose the account you "
-"want to edit."
-msgstr ""
-"V rozbalovacím seznamu <guilabel>Účet</guilabel> zvolte účet, který chcete "
-"upravit."
-
-#: C/empathy.xml:726(para)
-msgid "In the <guilabel>Alias</guilabel> text box, write your new alias."
-msgstr ""
-"Do vstupního políčka <guilabel>Alias</guilabel> zadejte svůj nový alias."
-
-#: C/empathy.xml:732(para)
-msgid ""
-"To change your icon, click on the person-looking button and choose an image "
-"file."
-msgstr ""
-"Chcete-li změnit svou ikonku, klikněte na tlačítko s obrázkem osoby a zvolte "
-"soubor s obrázkem."
-
-#: C/empathy.xml:738(para) C/empathy.xml:1319(para) C/empathy.xml:1353(para)
-msgid "When done, click <guibutton>Close</guibutton>."
-msgstr "Klikněte na <guibutton>Zavřít</guibutton>."
-
-#: C/empathy.xml:746(para)
-#, fuzzy
-#| msgid ""
-#| "An <emphasis>alias</emphasis> is an alternative way you can identify "
-#| "yourself. You can use your real name or your nickname."
-msgid ""
-"An <emphasis>alias</emphasis> is an alternative way you can identify "
-"yourself. You can use your real name or a nickname."
-msgstr ""
-"<emphasis>Alias</emphasis> je jedním ze způsobů vaší identifikace. Můžete "
-"použít své jméno nebo přezdívku."
-
-#: C/empathy.xml:756(title)
-msgid "Advanced Options"
-msgstr "Pokročilé volby"
-
-#: C/empathy.xml:757(para)
-msgid ""
-"Based on the service you are using, it is possible to configure more "
-"advanced options to modify the normal behavior of <application>Empathy</"
-"application>."
-msgstr ""
-
-#: C/empathy.xml:762(para)
-msgid ""
-"To configure these options, when you are <link linkend=\"empathy-create-"
-"account\">adding a new account</link>, click on the drop-down section "
-"<guilabel>Advanced</guilabel>."
-msgstr ""
-
-#: C/empathy.xml:770(title)
-#, fuzzy
-#| msgid "Jabber (or <acronym>XMPP</acronym>)"
-msgid "Jabber (or <acronym>XMPP</acronym>) and Google Talk"
-msgstr "Jabber (neboli <acronym>XMPP</acronym>)"
-
-#: C/empathy.xml:777(guilabel)
-msgid "Encryption required (TLS/SSL)"
-msgstr ""
-
-#: C/empathy.xml:780(para)
-msgid ""
-"Select this option in order to use some sort of encryption during your "
-"conversations."
-msgstr ""
-
-#: C/empathy.xml:788(guilabel)
-msgid "Ignore SSL certificate errors"
-msgstr ""
-
-#: C/empathy.xml:791(para)
-msgid ""
-"Select this option in order to ignore the errors that can be generated by "
-"some types of security certificates. Usually these certificates are called "
-"auto-signed."
-msgstr ""
-
-#: C/empathy.xml:799(para)
-msgid ""
-"Select this option only if you are sure the certificate is secure and you "
-"can trust it."
-msgstr ""
-
-#: C/empathy.xml:809(guilabel)
-msgid "Resource"
-msgstr ""
-
-#: C/empathy.xml:812(para)
-msgid ""
-"Use this text box to set a name with which you can identify the running "
-"program based on where you are running it. With this option, and the "
-"<guilabel>Priority</guilabel> one, you can use your account simultaneously "
-"in two different devices. For example, if you set one device to "
-"<replaceable>desktop</replaceable> and of the other one to "
-"<replaceable>mobile</replaceable>, you can connect with both of them and "
-"based on the <guilabel>Priority</guilabel> value you will receive messages "
-"on one of the two devices or both."
-msgstr ""
-
-#: C/empathy.xml:825(para)
-msgid ""
-"This can be useful if you have two devices, a main one and a portable one, "
-"and you move away from the main one bringing with you the other: you can "
-"still receive messages from your account with the portable device even if "
-"you do not disconnet from the main one."
-msgstr ""
-
-#: C/empathy.xml:834(para)
-msgid ""
-"If you set the same value for this text box on both the devices, when you "
-"connect with one of them, the other one will be disconnected, even if you "
-"set a different value with the <guilabel>Priority</guilabel> spin box."
-msgstr ""
-
-#: C/empathy.xml:847(guilabel)
-msgid "Priority"
-msgstr ""
-
-#: C/empathy.xml:850(para)
-msgid ""
-"Use this spin box to indicate wich device, set in the <guilabel>Resource</"
-"guilabel> text box, will receive the new messages. The higher the number, "
-"the higher the priority: you will receive the new messages on the device "
-"with the highest number."
-msgstr ""
-
-#: C/empathy.xml:857(para)
-msgid ""
-"You can set values in the range from <literal>-128</literal> to "
-"<literal>127</literal>."
-msgstr ""
-
-#: C/empathy.xml:863(para)
-msgid ""
-"If you set the same value of this spin box in both the devices, you will "
-"receive messages on both of them."
-msgstr ""
-
-#: C/empathy.xml:880(guilabel) C/empathy.xml:973(guilabel)
-#: C/empathy.xml:1021(guilabel) C/empathy.xml:1115(guilabel)
-msgid "Server"
-msgstr ""
-
-#: C/empathy.xml:883(para) C/empathy.xml:976(para) C/empathy.xml:1024(para)
-#: C/empathy.xml:1118(para)
-msgid ""
-"Use this text box to write the name of the server you want to use for this "
-"service."
-msgstr ""
-
-#: C/empathy.xml:891(guilabel) C/empathy.xml:984(guilabel)
-#: C/empathy.xml:1032(guilabel) C/empathy.xml:1126(guilabel)
-msgid "Port"
-msgstr ""
-
-#: C/empathy.xml:894(para) C/empathy.xml:987(para) C/empathy.xml:1035(para)
-#: C/empathy.xml:1129(para)
-msgid "Use this spin box to set the number of the port of the server to use."
-msgstr ""
-
-#: C/empathy.xml:898(para) C/empathy.xml:991(para) C/empathy.xml:1039(para)
-#: C/empathy.xml:1133(para)
-msgid ""
-"You can set values in the range from <literal>0</literal> to "
-"<literal>65,555</literal>."
-msgstr ""
-
-#: C/empathy.xml:906(guilabel)
-msgid "Use old SSL"
-msgstr ""
-
-#: C/empathy.xml:909(para)
-msgid ""
-"Select this option to use the old version of the secure protocol for "
-"encrypting your connection."
-msgstr ""
-
-#: C/empathy.xml:874(para)
-msgid ""
-"In the <guilabel>Override server settings</guilabel> section you can set "
-"options that take precedence over the default settings. <placeholder-1/>"
-msgstr ""
-
-#: C/empathy.xml:925(guilabel)
-msgid "Ignore conference and chatrooms invitations"
-msgstr ""
-
-#: C/empathy.xml:929(para)
-msgid ""
-"Select this option to ignore the invitations that other people may send you."
-msgstr ""
-
-#: C/empathy.xml:937(guilabel)
-msgid "Room List locale"
-msgstr ""
-
-#: C/empathy.xml:940(para)
-msgid ""
-"The value of this text box identifies the language used to retrieve the room "
-"list when connecting to the Yahoo service."
-msgstr ""
-
-#: C/empathy.xml:945(para)
-msgid ""
-"If you need to change this value, use the two letter code of your language."
-msgstr ""
-
-#: C/empathy.xml:953(guilabel) C/empathy.xml:1095(guilabel)
-msgid "Charset"
-msgstr ""
-
-#: C/empathy.xml:956(para) C/empathy.xml:1098(para)
-#, fuzzy
-#| msgid ""
-#| "Contains menus used to perform actions in <application>Empathy</"
-#| "application>."
-msgid ""
-"The value of this text box identifies the set of the characters used by "
-"<application>Empathy</application>."
-msgstr ""
-"Obsahuje nabídku činností, které lze v aplikaci <application>Empathy</"
-"application> provádět."
-
-#: C/empathy.xml:962(para) C/empathy.xml:1104(para)
-msgid ""
-"It is advise to leave this value to <literal>UTF-8</literal>. Change it only "
-"if that charset does not cover your language."
-msgstr ""
-
-#: C/empathy.xml:999(guilabel)
-msgid "Use Yahoo Japan"
-msgstr ""
-
-#: C/empathy.xml:1002(para)
-msgid ""
-"Select this option only if you have a Yahoo! Japan account. With the Yahoo! "
-"Japan service you can only use a Yahoo! Japan account: if you have "
-"registered an account with the English version of the service, that account "
-"will not work."
-msgstr ""
-
-#: C/empathy.xml:1016(title)
-msgid "<acronym>AIM</acronym>, GroupWise and <acronym>MSN</acronym>"
-msgstr ""
-
-#: C/empathy.xml:1055(guilabel)
-msgid "Published Name"
-msgstr ""
-
-#: C/empathy.xml:1058(para)
-msgid ""
-"Use this text box to write the name that will be visible to the other users "
-"of the network."
-msgstr ""
-
-#: C/empathy.xml:1066(guilabel)
-msgid "Email"
-msgstr ""
-
-#: C/empathy.xml:1069(para)
-msgid "Use this text box to write your email."
-msgstr ""
-
-#: C/empathy.xml:1076(guilabel)
-#, fuzzy
-#| msgid "Jabber"
-msgid "Jabber ID"
-msgstr "Jabber"
-
-#: C/empathy.xml:1079(para)
-msgid "Use this text box to write your Jabber ID, if you have one."
-msgstr ""
-
-#: C/empathy.xml:1144(title)
-msgid "Gadu Gadu"
-msgstr ""
-
-#: C/empathy.xml:1148(guilabel)
-msgid "Nick"
-msgstr ""
-
-#: C/empathy.xml:1150(para)
-msgid ""
-"Use this text box to write an alternative name to use with this service."
-msgstr ""
-
-#: C/empathy.xml:1165(title)
-msgid "Contacts and Groups"
-msgstr "Kontakty a skupiny"
-
-#: C/empathy.xml:1166(para)
-msgid ""
-"All the contacts are handled within <application>Empathy</application>'s "
-"<link linkend=\"empathy-FIG-mainwindow\">main window</link>."
-msgstr ""
-"Kontakty se v <application>Empathy</application> obsluhují z <link linkend="
-"\"empathy-FIG-mainwindow\">hlavního okna</link>."
-
-#: C/empathy.xml:1170(para)
-msgid ""
-"You can add or remove a contact or you can edit the information of a "
-"particular contact. It is also possibile to arrange contacts in groups. You "
-"can have a group for your work contacts, one for you family contacts, and so "
-"on."
-msgstr ""
-"Kontakty můžete přidávat, odstraňovat a upravovat. Je také možné je třídit "
-"do skupin – například můžete mít skupinu pro pracovní kontakty, skupinu pro "
-"rodinné kontakty atd."
-
-#: C/empathy.xml:1177(title)
-msgid "Adding and Removing a Contact"
-msgstr "Přidání a odstranění kontaktu"
-
-#: C/empathy.xml:1178(para)
-msgid "To add a new contact, proceed as follows:"
-msgstr "Chcete-li přidat nový kontakt, proveďte následující kroky:"
-
-#: C/empathy.xml:1184(para)
-msgid ""
-"From the <link linkend=\"empathy-FIG-mainwindow\">main window</link> choose "
-"<menuchoice><guimenu>Chat</guimenu><guimenuitem>Add Contact...</"
-"guimenuitem></menuchoice>. The <guilabel>New Contact</guilabel> dialog will "
-"be shown."
-msgstr ""
-"V <link linkend=\"empathy-FIG-mainwindow\">hlavním okně</link> vyberte "
-"<menuchoice><guimenu>Konverzace</guimenu><guimenuitem>Přidat kontakt…</"
-"guimenuitem></menuchoice>. Otevře se okno <guilabel>Nový kontakt</guilabel>."
-
-#: C/empathy.xml:1194(para)
-msgid ""
-"From the <guilabel>Account</guilabel> drop-down list, choose the service "
-"used by the contact you are adding."
-msgstr ""
-"V rozbalovacím seznamu <guilabel>Účet</guilabel> zvolte službu, kterou "
-"přidávaný kontakt používá."
-
-#: C/empathy.xml:1200(para)
-msgid ""
-"In the <guilabel>Identifier</guilabel> text box type the <emphasis>address</"
-"emphasis> of the contact in the form of <userinput><replaceable>user name</"
-"replaceable>@<replaceable>service\n"
-"\t domain</replaceable></userinput>."
-msgstr ""
-"Do vstupního políčka <guilabel>Identifikátor</guilabel> zadejte "
-"<emphasis>adresu</emphasis> kontaktu ve formátu "
-"<userinput><replaceable>uživatelské jméno</replaceable>@<replaceable>služba\n"
-"\t doména</replaceable></userinput>."
-
-#: C/empathy.xml:1209(para)
-msgid ""
-"In the <guilabel>Alias</guilabel> text box type the name you want to give at "
-"the the new contact."
-msgstr ""
-"Do vstupního políčka <guilabel>Alias</guilabel> zadejte název, který novému "
-"kontaktu chcete dát."
-
-#: C/empathy.xml:1215(para)
-msgid "Click on <guibutton>Add</guibutton> to add the new contact."
-msgstr "Kliknutím na tlačítko <guibutton>Přidat</guibutton> kontakt přidáte."
-
-#: C/empathy.xml:1221(para)
-msgid "To remove a contact, proceed as follows:"
-msgstr "Chcete-li odstranit kontakt, proveďte následující kroky:"
-
-#: C/empathy.xml:1227(para)
-msgid ""
-"From the <link linkend=\"empathy-FIG-mainwindow\">main window</link>, select "
-"the contact you would like to remove and right-click on it."
-msgstr ""
-"V <link linkend=\"empathy-FIG-mainwindow\">hlavním okně</link> vyberte "
-"kontakt, který chcete odstranit, a klikněte na něj pravým tlačítkem myši."
-
-#: C/empathy.xml:1234(para)
-msgid ""
-"From the popup menu, choose <guilabel>Remove</guilabel> to remove the "
-"contact."
-msgstr ""
-"V kontextové nabídce vyberte <guilabel>Odstranit</guilabel>, čímž kontakt "
-"odstraníte."
-
-#: C/empathy.xml:1243(para) C/empathy.xml:1279(para)
-msgid ""
-"An <emphasis>alias</emphasis> is an alternative way you can identify that "
-"particular contact. You can use the real name or the nickname of that person."
-msgstr ""
-"<emphasis>Alias</emphasis> je jedním ze způsobů identifikace kontaktu. "
-"Můžete použít jméno nebo přezdívku příslušné osoby."
-
-#: C/empathy.xml:1252(title)
-msgid "Editing a Contact"
-msgstr "Úprava kontaktu"
-
-#: C/empathy.xml:1253(para)
-msgid "To edit a contact, proceed as follows:"
-msgstr "Chcete-li upravit kontakt, proveďte následující kroky:"
-
-#: C/empathy.xml:1259(para) C/empathy.xml:1301(para)
-msgid ""
-"From the <link linkend=\"empathy-FIG-mainwindow\">main window</link>, select "
-"the contact you would like to modify and choose <menuchoice><guimenu>Edit</"
-"guimenu><guisubmenu>Account</guisubmenu><guimenuitem>Modify</guimenuitem></"
-"menuchoice>, or right-click on it and choose <guilabel>Modify</guilabel>."
-msgstr ""
-"V <link linkend=\"empathy-FIG-mainwindow\">hlavním okně</link> vyberte "
-"kontakt, který chcete upravit, a vyberte <menuchoice><guimenu>Upravit</"
-"guimenu><guisubmenu>Kontakt</guisubmenu><guimenuitem>Upravit</guimenuitem></"
-"menuchoice>, nebo na kontakt klikněte pravým tlačítkem a vyberte "
-"<guilabel>Upravit</guilabel>."
-
-#: C/empathy.xml:1272(para)
-msgid ""
-"From the <guilabel>Edit Contact Information</guilabel> dialog, you can "
-"modify the <emphasis>alias</emphasis> and the <emphasis>group</emphasis> of "
-"the contact."
-msgstr ""
-"V dialogovém okně <guilabel>Upravit informace o kontaktu</guilabel> můžete "
-"upravit <emphasis>alias</emphasis> a <emphasis>skupinu</emphasis> kontaktu."
-
-#: C/empathy.xml:1286(para)
-msgid ""
-"For more information about groups, see <xref linkend=\"empathy-add-contact-"
-"group\"/> and <xref linkend=\"empathy-add-group\"/>."
-msgstr ""
-"Chcete-li se o skupinách dovědět více, přečtěte si <xref linkend=\"empathy-"
-"add-contact-group\"/> a <xref linkend=\"empathy-add-group\"/>."
-
-#: C/empathy.xml:1294(title)
-msgid "Adding a Contact to a Group"
-msgstr "Přidání kontaktu do skupiny"
-
-#: C/empathy.xml:1295(para)
-msgid "To add a contact to one or more groups, proceed as follows:"
-msgstr ""
-"Chcete-li přidat kontakt do jedné nebo více skupin, proveďte následující "
-"kroky:"
-
-#: C/empathy.xml:1313(para)
-msgid ""
-"From the <guilabel>Groups</guilabel> section, select the group, or groups, "
-"you want to add the contact to."
-msgstr ""
-"V sekci <guilabel>Skupiny</guilabel> vyberte skupinu nebo skupiny, ke kterým "
-"má kontakt patřit."
-
-#: C/empathy.xml:1328(title)
-msgid "Adding a New Group"
-msgstr "Přidání nové skupiny"
-
-#: C/empathy.xml:1329(para)
-msgid "To add a new group, proceed as follows:"
-msgstr "Chcete-li přidat novou skupinu, proveďte následující kroky:"
-
-#: C/empathy.xml:1335(para)
-msgid ""
-"From the <link linkend=\"empathy-FIG-mainwindow\">main window</link>, select "
-"one contact and choose <menuchoice><guimenu>Edit</"
-"guimenu><guisubmenu>Account</guisubmenu><guimenuitem>Modify</guimenuitem></"
-"menuchoice>, or right-click on it and choose <guilabel>Modify</guilabel>."
-msgstr ""
-"V <link linkend=\"empathy-FIG-mainwindow\">hlavním okně</link> vyberte jeden "
-"kontakt a vyberte <menuchoice><guimenu>Upravit</guimenu><guisubmenu>Kontakt</"
-"guisubmenu><guimenuitem>Upravit</guimenuitem></menuchoice>, nebo klikněte "
-"pravým tlačítkem a vyberte <guilabel>Upravit</guilabel>."
-
-#: C/empathy.xml:1346(para)
-msgid ""
-"In the <guilabel>Groups</guilabel> section, write the name of the group you "
-"want to add and then click on <guibutton>Add Group</guibutton>."
-msgstr ""
-"V sekci <guilabel>Skupiny</guilabel> zadejte název skupiny, kterou chcete "
-"přidat, a pak klikněte na <guibutton>Přidat skupinu</guibutton>."
-
-#. Put one translator per line, in the form of NAME <EMAIL>, YEAR1, YEAR2.
-#: C/empathy.xml:0(None)
-msgid "translator-credits"
-msgstr ""
-"Martin Picek <picek.martin@gnome-cesko.cz>, 2009\n"
-"Lucas Lommer <llommer@svn.gnome.org>, 2008"
-
-#~ msgid "TODO"
-#~ msgstr "Tato kapitola ještě není hotova."
-
-#~ msgid ""
-#~ "@@image: 'figures/empathy-new-account.png'; "
-#~ "md5=6c1e0d8c709125d387e975e5738b8c0f"
-#~ msgstr ""
-#~ "@@image: 'figures/empathy-new-account.png'; "
-#~ "md5=6c1e0d8c709125d387e975e5738b8c0f"
-
-#~ msgid "2008"
-#~ msgstr "2008"
-
-#~ msgid "milo_casagrande@yahoo.it"
-#~ msgstr "milo_casagrande@yahoo.it"
-
-#~ msgid "When You Start Empathy for the First Time"
-#~ msgstr "Když spustíte Empathy úplně poprvé"
-
-#~ msgid "<application>Empathy</application> Accounts Dialog"
-#~ msgstr "Okno účtů v <application>Empathy</application>"
-
-#~ msgid "Shows <placeholder-1/> account creation dialog."
-#~ msgstr "Zobrazuje <placeholder-1/> okno pro tvorbu účtů."
-
-#~ msgid ""
-#~ "When you start <application>Empathy</application> for the first time and "
-#~ "you don't have configured any account yet, the following dialog is shown. "
-#~ "<placeholder-1/>"
-#~ msgstr ""
-#~ "Když spustíte <application>Empathy</application> úplně poprvé a nemáte "
-#~ "nastaveny žádné účty, objeví se následující okno. <placeholder-1/>"
-
-#~ msgid ""
-#~ "From here, you can configure and create your accounts. See <xref linkend="
-#~ "\"empathy-accounts\"/> for more information."
-#~ msgstr ""
-#~ "Zde je možné vytvářet a měnit nastavení účtů. Více informací popisuje "
-#~ "<xref linkend=\"empathy-accounts\"/>."
-
-#~ msgid ""
-#~ "The <ulink type=\"http\" url=\"http://www.ekiga.net/user/reg/index.php?"
-#~ "phplib_Session=c1d85267756241f8190e5fc21b029a62\">Ekiga</ulink> service."
-#~ msgstr ""
-#~ "Služba <ulink type=\"http\" url=\"http://www.ekiga.net/user/reg/\">Ekiga</"
-#~ "ulink>."
-
-#~ msgid ""
-#~ "You can use one of the following services if you already have a <emphasis "
-#~ "role=\"strong\">Jabber</emphasis> account:"
-#~ msgstr ""
-#~ "Pokud již máte účet služby <emphasis role=\"strong\">Jabber</emphasis>, "
-#~ "můžete využít následující služby:"
-
-#~ msgid ""
-#~ "Fill the required fields with your <emphasis>user name</emphasis> and "
-#~ "<emphasis>password</emphasis>."
-#~ msgstr ""
-#~ "Vyplňte do povinných položek své <emphasis>uživatelské jméno</emphasis> a "
-#~ "<emphasis>heslo</emphasis>."
-
-#~ msgid "To create an account, proceed as follow: <placeholder-1/>"
-#~ msgstr "Pokud chcete účet vytvořit, proveďte následující: <placeholder-1/>"
-
-#~ msgid "Contacts"
-#~ msgstr "Kontakty"
-
-#~ msgid "Modifying a Contact"
-#~ msgstr "Úprava kontaktu"
diff --git a/help/de/de.po b/help/de/de.po
deleted file mode 100644
index d5c2ffe1..00000000
--- a/help/de/de.po
+++ /dev/null
@@ -1,3753 +0,0 @@
-# German translation of empathy documentation.
-# Copyright (C) 2008 Free Software Foundation, Inc.
-# This file is distributed under the same license as the empathy
-# documentation package.
-#
-# Philipp Kerling <k.philipp@gmail.com>, 2008.
-# Mario Blättermann <mario.blaettermann@gmail.com>, 2008-2013.
-# Christian Kirbach <christian.kirbach@gmail.com>, 2009-2013, 2013.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: empathy help master\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2013-08-08 18:59+0000\n"
-"PO-Revision-Date: 2013-08-09 20:15+0100\n"
-"Last-Translator: Benjamin Steinwender <b@stbe.at>\n"
-"Language-Team: Deutsch <gnome-de@gnome.org>\n"
-"Language: de_DE\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: Poedit 1.5.7\n"
-
-#. Put one translator per line, in the form NAME <EMAIL>, YEAR1, YEAR2
-msgctxt "_"
-msgid "translator-credits"
-msgstr ""
-"Mario Blättermann <mario.blaettermann@gmail.com>, 2008-2013\n"
-"Philipp Kerling <k.philipp@gmail.com>, 2008\n"
-"Christian Kirbach <Christian.Kirbach@gmail.com>, 2010-2013"
-
-#. This is a reference to an external file such as an image or video. When
-#. the file changes, the md5 hash will change to let you know you need to
-#. update your localized copy. The msgstr is not used at all. Set it to
-#. whatever you like once you have updated your copy of the file.
-#.
-#. This is a reference to an external file such as an image or video. When
-#. the file changes, the md5 hash will change to let you know you need to
-#. update your localized copy. The msgstr is not used at all. Set it to
-#. whatever you like once you have updated your copy of the file.
-#: C/index.page:35(media)
-msgctxt "_"
-msgid ""
-"external ref='figures/empathy-logo.png' "
-"md5='1afc419a644e90b16393807e35cb5cb2'"
-msgstr "original"
-
-#: C/index.page:20(credit/name) C/add-account.page:21(credit/name)
-#: C/audio-call.page:22(credit/name) C/audio-video.page:17(credit/name)
-#: C/create-account.page:20(credit/name)
-#: C/disable-account.page:21(credit/name)
-#: C/favorite-rooms.page:14(credit/name) C/geolocation.page:17(credit/name)
-#: C/geolocation-not-showing.page:17(credit/name)
-#: C/geolocation-privacy.page:17(credit/name)
-#: C/geolocation-supported.page:16(credit/name)
-#: C/geolocation-turn.page:18(credit/name)
-#: C/geolocation-what-is.page:18(credit/name)
-#: C/group-conversations.page:19(credit/name)
-#: C/hide-contacts.page:11(credit/name) C/import-account.page:23(credit/name)
-#: C/introduction.page:13(credit/name) C/irc-commands.page:10(credit/name)
-#: C/irc-join-pwd.page:17(credit/name) C/irc-join-room.page:16(credit/name)
-#: C/irc-manage.page:19(credit/name) C/irc-nick-password.page:18(credit/name)
-#: C/irc-send-file.page:16(credit/name)
-#: C/irc-start-conversation.page:15(credit/name)
-#: C/link-contacts.page:15(credit/name) C/prev-conv.page:17(credit/name)
-#: C/prob-conn-acctdisabled.page:19(credit/name)
-#: C/prob-conn-auth.page:22(credit/name) C/prob-conn-name.page:19(credit/name)
-#: C/prob-conn-neterror.page:20(credit/name)
-#: C/remove-account.page:19(credit/name) C/salut-protocol.page:18(credit/name)
-#: C/send-file.page:21(credit/name) C/set-custom-status.page:19(credit/name)
-#: C/share-desktop.page:14(credit/name) C/status-icons.page:17(credit/name)
-#: C/video-call.page:25(credit/name)
-msgid "Milo Casagrande"
-msgstr "Milo Casagrande"
-
-#: C/index.page:25(license/p) C/account-irc.page:21(license/p)
-#: C/account-jabber.page:18(license/p) C/accounts-window.page:21(license/p)
-#: C/add-account.page:29(license/p) C/add-contact.page:22(license/p)
-#: C/audio-call.page:31(license/p) C/audio-video.page:21(license/p)
-#: C/change-status.page:28(license/p) C/create-account.page:29(license/p)
-#: C/disable-account.page:29(license/p) C/favorite-rooms.page:18(license/p)
-#: C/geolocation.page:21(license/p)
-#: C/geolocation-not-showing.page:21(license/p)
-#: C/geolocation-privacy.page:21(license/p)
-#: C/geolocation-supported.page:20(license/p)
-#: C/geolocation-turn.page:22(license/p)
-#: C/geolocation-what-is.page:22(license/p)
-#: C/group-conversations.page:23(license/p) C/hide-contacts.page:15(license/p)
-#: C/import-account.page:31(license/p) C/introduction.page:17(license/p)
-#: C/irc-commands.page:14(license/p) C/irc-join-pwd.page:21(license/p)
-#: C/irc-join-room.page:20(license/p) C/irc-manage.page:28(license/p)
-#: C/irc-nick-password.page:22(license/p) C/irc-send-file.page:20(license/p)
-#: C/irc-start-conversation.page:19(license/p)
-#: C/link-contacts.page:23(license/p) C/overview.page:21(license/p)
-#: C/prev-conv.page:25(license/p) C/prob-conn-acctdisabled.page:23(license/p)
-#: C/prob-conn-auth.page:26(license/p) C/prob-conn-name.page:23(license/p)
-#: C/prob-conn-neterror.page:24(license/p) C/prob-conn.page:18(license/p)
-#: C/remove-account.page:23(license/p) C/salut-protocol.page:22(license/p)
-#: C/send-file.page:25(license/p) C/send-message.page:21(license/p)
-#: C/set-custom-status.page:23(license/p) C/share-desktop.page:22(license/p)
-#: C/status-icons.page:25(license/p) C/video-call.page:34(license/p)
-msgid "Creative Commons Share Alike 3.0"
-msgstr "Creative Commons Share Alike 3.0"
-
-#: C/index.page:28(info/desc)
-msgid ""
-"Empathy is the instant messenging application for GNOME. It supports text, "
-"voice and video chat over many protocols."
-msgstr ""
-"Empathy ist eine Sofortnachrichten-Anwendung für GNOME. Textnachrichten, "
-"Sprach- und Videoanrufe sowie alle gängigen Nachrichtensysteme werden "
-"unterstützt."
-
-#: C/index.page:30(info/title)
-msgctxt "link"
-msgid "Empathy"
-msgstr "Empathy"
-
-#: C/index.page:31(info/title)
-msgctxt "text"
-msgid "Empathy"
-msgstr "Empathy"
-
-#: C/index.page:34(page/title)
-msgid "<_:media-1/> Empathy"
-msgstr "<_:media-1/> Empathy"
-
-#: C/index.page:40(section/title)
-msgid "Account Management"
-msgstr "Kontenverwaltung"
-
-#: C/index.page:44(section/title)
-msgid "Contact Management"
-msgstr "Kontaktverwaltung"
-
-#: C/index.page:48(section/title)
-msgid "Text Conversations"
-msgstr "Text-Unterhaltungen"
-
-#: C/index.page:52(section/title)
-msgid "Audio and Video Conversations"
-msgstr "Sprach- und Video-Unterhaltungen"
-
-#: C/index.page:56(section/title)
-msgid "Advanced Actions"
-msgstr "Fortgeschrittene Aktionen"
-
-#: C/index.page:60(section/title) C/irc-manage.page:64(section/title)
-msgid "Common Problems"
-msgstr "Häufig auftretende Probleme"
-
-#. This is a reference to an external file such as an image or video. When
-#. the file changes, the md5 hash will change to let you know you need to
-#. update your localized copy. The msgstr is not used at all. Set it to
-#. whatever you like once you have updated your copy of the file.
-#: C/account-irc.page:107(media)
-msgctxt "_"
-msgid ""
-"external ref='figures/gtk-add.png' md5='a856b499d8d4681b70b5ce6f25bc5c6d'"
-msgstr "original"
-
-#. This is a reference to an external file such as an image or video. When
-#. the file changes, the md5 hash will change to let you know you need to
-#. update your localized copy. The msgstr is not used at all. Set it to
-#. whatever you like once you have updated your copy of the file.
-#.
-#. This is a reference to an external file such as an image or video. When
-#. the file changes, the md5 hash will change to let you know you need to
-#. update your localized copy. The msgstr is not used at all. Set it to
-#. whatever you like once you have updated your copy of the file.
-#.
-#. This is a reference to an external file such as an image or video. When
-#. the file changes, the md5 hash will change to let you know you need to
-#. update your localized copy. The msgstr is not used at all. Set it to
-#. whatever you like once you have updated your copy of the file.
-#.
-#. This is a reference to an external file such as an image or video. When
-#. the file changes, the md5 hash will change to let you know you need to
-#. update your localized copy. The msgstr is not used at all. Set it to
-#. whatever you like once you have updated your copy of the file.
-#: C/account-irc.page:111(media) C/prob-conn-auth.page:58(media)
-#: C/prob-conn-name.page:44(media) C/prob-conn-neterror.page:59(media)
-msgctxt "_"
-msgid ""
-"external ref='figures/gtk-edit.png' md5='4f21b451732817be0604fe3e2c8da98b'"
-msgstr "original"
-
-#. This is a reference to an external file such as an image or video. When
-#. the file changes, the md5 hash will change to let you know you need to
-#. update your localized copy. The msgstr is not used at all. Set it to
-#. whatever you like once you have updated your copy of the file.
-#: C/account-irc.page:115(media)
-msgctxt "_"
-msgid ""
-"external ref='figures/gtk-remove.png' md5='215e3a325a3dd619874e35c30a018bb6'"
-msgstr "original"
-
-#: C/account-irc.page:9(info/desc)
-msgid "Additional information necessary for connecting to IRC networks."
-msgstr ""
-"Zusätzlich erforderliche Informationen für Verbindungen zu IRC-Netzwerken."
-
-#: C/account-irc.page:17(credit/name) C/account-jabber.page:14(credit/name)
-#: C/accounts-window.page:17(credit/name) C/add-account.page:25(credit/name)
-#: C/disable-account.page:25(credit/name)
-#: C/import-account.page:27(credit/name) C/prev-conv.page:21(credit/name)
-#: C/status-icons.page:21(credit/name)
-msgid "Shaun McCance"
-msgstr "Shaun McCance"
-
-#: C/account-irc.page:32(page/title)
-msgid "IRC account details"
-msgstr "IRC-Kontendetails"
-
-#: C/account-irc.page:34(page/p)
-msgid ""
-"IRC accounts require different information than many other types of "
-"accounts. To create an IRC account, you must specify at least an IRC network "
-"and a nickname. This page details the information you can provide for an IRC "
-"account."
-msgstr ""
-"IRC-Konten erfordern andere Informationen als die meisten anderen "
-"Kontentypen. Um ein IRC-Konto zu erstellen, müssen Sie mindestens ein IRC-"
-"Netzwerk und einen Spitznamen angeben. Diese Seite erläutert die "
-"Informationen, die Sie für ein IRC-Konto angeben können."
-
-#: C/account-irc.page:40(note/p) C/irc-manage.page:42(note/p)
-msgid ""
-"You must have the <sys>telepathy-idle</sys> package installed to use IRC in "
-"<app>Empathy</app>."
-msgstr ""
-"Sie müssen das Paket <sys>telepathy-idle</sys> installiert haben, um das IRC "
-"in <app>Empathy</app> nutzen zu können."
-
-#: C/account-irc.page:46(item/title) C/account-irc.page:124(item/title)
-msgid "<gui>Network</gui>"
-msgstr "<gui>Netzwerk</gui>"
-
-#: C/account-irc.page:47(item/p)
-msgid ""
-"IRC is an open system that allows people to run separate IRC networks. Each "
-"network is distinct and has its own users and chat rooms. <app>Empathy</app> "
-"lists the most popular networks in the <gui>Network</gui> drop-down list. "
-"You can add additional networks. See <link xref=\"#networks\"/> below."
-msgstr ""
-"IRC ist ein offenes System, welches Personen erlaubt, separate IRC-Netzwerke "
-"zu betreiben. Jedes Netzwerk ist in sich abgeschlossen und hat seine eigenen "
-"Benutzer und Unterhaltungsräume. <app>Empathy</app> listet die populärsten "
-"Netzwerke in der Auswahlliste <gui>Netzwerk</gui> auf. Sie können "
-"zusätzliche Netzwerke hinzufügen. Siehe <link xref=\"#networks\"/> "
-"nachfolgend."
-
-#: C/account-irc.page:54(item/title)
-msgid "<gui>Nickname</gui>"
-msgstr "<gui>Spitzname</gui>"
-
-#: C/account-irc.page:55(item/p)
-msgid ""
-"Your nickname is your unique name on the IRC network. Only one person on a "
-"network may use a given nickname. If you get an error message that says "
-"<link xref=\"prob-conn-name\" role=\"error-msg\"/> you will need to change "
-"your nickname."
-msgstr ""
-"Ihr Spitzname ist Ihr eindeutiger Name im IRC-Netzwerk. Nur eine einzige "
-"Person in einem Netzwerk darf einen gegebenen Spitznamen verwenden. Falls "
-"Sie die Fehlermeldung <link xref=\"prob-conn-name\" role=\"error-msg\"/> "
-"erhalten, müssen Sie Ihren Spitznamen ändern."
-
-#: C/account-irc.page:61(item/title)
-msgid "<gui>Password</gui>"
-msgstr "<gui>Passwort</gui>"
-
-#: C/account-irc.page:62(item/p)
-msgid ""
-"Some servers, particularly those on private networks, require a password to "
-"connect. If you are authorized to use the network, the network "
-"administrators should provide you with a password."
-msgstr ""
-"Einige Server, insbesondere diejenigen in privaten Netzwerken, erfordern ein "
-"Passwort für die Verbindung. Falls Sie legitimiert sind, das Netzwerk zu "
-"benutzen, sollte Sie Ihnen dessen Verwalter ein Passwort zur Verfügung "
-"gestellt haben."
-
-#: C/account-irc.page:66(note/title)
-msgid "NickServ Passwords"
-msgstr "NickServ-Passwörter"
-
-#: C/account-irc.page:67(note/p)
-msgid ""
-"On some networks, nicknames can be registered using a service known as "
-"NickServ. <app>Empathy</app> does not directly support nickname passwords. "
-"On some networks, including the popular freenode network, server passwords "
-"are automatically forwarded to NickServ, allowing you to set this field to "
-"identify yourself with NickServ. See <link xref=\"irc-nick-password\"/> for "
-"more details."
-msgstr ""
-"In einigen Netzwerken können Spitznamen mit einem Dienst namens NickServ "
-"registriert werden. <app>Empathy</app> unterstützt Passwörter für Spitznamen "
-"nicht direkt. In einigen Netzwerken, zum Beispiel FreeNode, werden "
-"Serverpasswörter automatisch an NickServ weitergeleitet, was Ihnen "
-"ermöglicht, sich mit diesem Feld bei NickServ zu identifizieren. Weitere "
-"Details hierzu finden Sie in <link xref=\"irc-nick-password\"/>"
-
-#: C/account-irc.page:77(item/title)
-msgid "<gui>Real name</gui>"
-msgstr "<gui>Realer Name</gui>"
-
-#: C/account-irc.page:78(item/p)
-msgid ""
-"You can provide your real name in addition to your nickname. Other users "
-"will be able to see this when they view your information."
-msgstr ""
-"Zusätzlich zu Ihrem Spitznamen können Sie auch Ihren echten Namen angeben. "
-"Dieser wird anderen Benutzern angezeigt, wenn diese Ihre persönlichen "
-"Informationen betrachten."
-
-#: C/account-irc.page:82(item/title)
-msgid "<gui>Quit message</gui>"
-msgstr "<gui>Abmeldungsnachricht</gui>"
-
-#: C/account-irc.page:83(item/p)
-msgid ""
-"When you go offline, a quit message is sent to all the chat rooms you’re in "
-"and to all the users you’re having a private conversation with. Use this "
-"field to provide a custom quit message."
-msgstr ""
-"Wenn Sie sich abmelden, wird eine Abmeldungsnachricht an alle "
-"Unterhaltungsräume gesendet, in denen Sie sich befinden, sowie an alle "
-"Benutzer, mit denen Sie eine private Unterhaltung führen. Verwenden Sie "
-"dieses Feld, um eine benutzerdefinierte Nachricht bereitzustellen."
-
-#: C/account-irc.page:95(info/title)
-msgctxt "link"
-msgid "IRC Networks"
-msgstr "IRC-Netzwerke"
-
-#: C/account-irc.page:98(section/title)
-msgid "Networks"
-msgstr "Netzwerke"
-
-#: C/account-irc.page:100(section/p)
-msgid ""
-"<app>Empathy</app> includes a list of popular IRC networks. If you wish to "
-"another IRC network, you can add it to the list. You can also modify "
-"networks and remove them from the list."
-msgstr ""
-"<app>Empathy</app> enthält eine Liste populärer IRC-Netzwerke. Falls Sie ein "
-"anderes IRC-Netzwerk wünschen, können Sie es zur Liste hinzufügen. Sie "
-"können auch Netzwerke bearbeiten oder aus der Liste entfernen."
-
-#: C/account-irc.page:108(media/span)
-msgid "Add"
-msgstr "Hinzufügen"
-
-#: C/account-irc.page:105(item/p)
-msgid "To add a network to the list, click <_:media-1/>."
-msgstr "Klicken Sie auf <_:media-1/>, um ein Netzwerk zur Liste hinzuzufügen."
-
-#: C/account-irc.page:112(media/span)
-msgid "Edit"
-msgstr "Bearbeiten"
-
-#: C/account-irc.page:109(item/p)
-msgid ""
-"To modify a network in the list, select the network and click <_:media-1/>."
-msgstr ""
-"Um ein Netzwerk in der Liste zu bearbeiten, wählen Sie es aus und klicken "
-"auf <_:media-1/>."
-
-#: C/account-irc.page:116(media/span)
-msgid "Remove"
-msgstr "Entfernen"
-
-#: C/account-irc.page:113(item/p)
-msgid ""
-"To remove a network from the list, select the network and click <_:media-1/>."
-msgstr ""
-"Um ein Netzwerk aus der Liste zu entfernen, wählen Sie es aus und klicken "
-"auf <_:media-1/>."
-
-#: C/account-irc.page:119(section/p)
-msgid ""
-"When adding or modifying a network, you can enter the following information:"
-msgstr ""
-"Beim Hinzufügen oder Ändern eines Netzwerks können Sie die folgenden "
-"Informationen eingeben:"
-
-#: C/account-irc.page:125(item/p)
-msgid ""
-"This is the name of the network as you want it to appear in the list of "
-"networks."
-msgstr ""
-"Dies ist der Name des Netzwerks, so wie der in der Liste der Netzwerke "
-"erscheinen soll."
-
-#: C/account-irc.page:129(item/title)
-msgid "<gui>Charset</gui>"
-msgstr "<gui>Zeichensatz</gui>"
-
-#: C/account-irc.page:130(item/p)
-msgid ""
-"This specifies the character encoding that is typically used on this "
-"network. A character encoding is a specific way of recording characters "
-"internally in a computer. There are many character encodings, and you need "
-"to use the same character encoding as other users to see their messages "
-"correctly."
-msgstr ""
-"Dies legt die Zeichenkodierung fest, die typischerweise in diesem Netzwerk "
-"verwendet wird. Eine Zeichenkodierung ist eine spezifische Art der internen "
-"Aufzeichnung von Zeichen in einem Rechner. Es gibt zahlreiche "
-"Zeichenkodierungen. Sie müssen die gleiche Kodierung wie die anderen "
-"Benutzer verwenden, damit deren Nachrichten korrekt angezeigt werden können."
-
-#: C/account-irc.page:139(item/p)
-msgid ""
-"By default, <app>Empathy</app> uses UTF-8, a modern character encoding that "
-"can handle text from most of the world's languages. Another common encoding "
-"for English and some other Western languages is ISO-8859-1."
-msgstr ""
-"Als Vorgabe verwendet <app>Empathy</app> UTF-8, eine moderne "
-"Zeichenkodierung, die mit Texten aus den meisten Sprachen der Welt umgehen "
-"kann. Eine weitere häufig benutzte Kodierung für Englisch und andere "
-"westliche Sprachen ist ISO-8859-1."
-
-#: C/account-irc.page:145(item/title)
-msgid "<gui>Servers</gui>"
-msgstr "<gui>Server</gui>"
-
-#: C/account-irc.page:146(item/p)
-msgid ""
-"An IRC network may have many servers you can connect to. When you are "
-"connected to a server on a particular network, you can communicate with all "
-"users on all other servers on that network. You can add and remove servers "
-"for this network using the <gui>Add</gui> and <gui>Remove</gui> buttons."
-msgstr ""
-"Ein IRC-Netzwerk kann aus vielen Servern bestehen, mit denen Sie sich "
-"verbinden können. Wenn Sie mit einem Server in einem bestimmten Netzwerk "
-"verbunden sind, dann können Sie auch mit den Benutzern auf anderen Servern "
-"dieses Netzwerks kommunizieren. Sie können mit Hilfe der Knöpfe "
-"<gui>Hinzufügen</gui> und <gui>Entfernen</gui> Server dieses Netzwerks "
-"hinzufügen und entfernen."
-
-#: C/account-irc.page:151(item/p)
-msgid ""
-"When a server is selected, click the field under <gui>Server</gui> or "
-"<gui>Port</gui> to edit it. Alternatively, use the left and right arrow keys "
-"to focus the field, and press the space bar to begin editing."
-msgstr ""
-"Wenn ein Server ausgewählt ist, klicken Sie auf die Felder unter "
-"<gui>Server</gui> oder <gui>Port</gui>, um diese zu bearbeiten. Alternativ "
-"verwenden Sie die linke und rechte Pfeiltaste, um das Feld zu fokussieren. "
-"Mit der Leertaste beginnen Sie mit der Bearbeitung."
-
-#: C/account-irc.page:155(item/p)
-msgid ""
-"Select the check box in the <gui>SSL</gui> column to encrypt all "
-"communication with a server. Note that this does not prevent other users on "
-"the network from seeing what you write on public chat rooms."
-msgstr ""
-"Aktivieren Sie das Ankreuzfeld in der <gui>SSL</gui>-Spalte, um jegliche "
-"Kommunikation mit dem Server zu verschlüsseln. Beachten Sie, dass dies "
-"andere Benutzer des Netzwerks nicht daran hindern wird, alles zu sehen, was "
-"Sie in öffentlichen Unterhaltungsräumen schreiben."
-
-#: C/account-jabber.page:7(info/desc)
-msgid "Advanced options for Jabber and Google Talk accounts."
-msgstr "Fortgeschrittene Optionen für Konten bei Jabber und Google Talk."
-
-#: C/account-jabber.page:29(page/title)
-msgid "Jabber account details"
-msgstr "Jabber-Kontendetails"
-
-#: C/account-jabber.page:31(page/p)
-msgid ""
-"Most Jabber accounts will require only a login ID and a password to connect. "
-"For some accounts or on certain types of networks, you may need to enter "
-"additional information in the <gui>Advanced</gui> section. Normally, you "
-"will not need to use the advanced options below. For general instructions on "
-"adding an account, see <link xref=\"add-account\"/>."
-msgstr ""
-"Die meisten Jabber-Konten erfordern nur eine Anmeldekennung und ein Passwort "
-"für die Verbindung. Für einige Konten oder bestimmte Netzwerktypen können "
-"Sie zusätzliche Informationen im Abschnitt <gui>Fortgeschritten</gui> "
-"eingeben. Normalerweise werden Sie die unten angegebenen zusätzlichen "
-"Optionen nicht benötigen. Allgemeine Informationen über das Hinzufügen eines "
-"Kontos finden Sie in <link xref=\"add-account\"/>."
-
-#: C/account-jabber.page:39(note/p)
-msgid ""
-"Google Talk is a type of Jabber account. These instructions hold for Google "
-"Talk accounts as well."
-msgstr ""
-"Google Talk ist eine Art Jabber-Konto. Diese Anweisungen gelten daher auch "
-"für Google Talk."
-
-#: C/account-jabber.page:45(item/title)
-msgid "<gui>Encryption required (TLS/SSL)</gui>"
-msgstr "<gui>Verschlüsselung erforderlich (TLS/SSL)</gui>"
-
-#: C/account-jabber.page:46(item/title)
-msgid "<gui>Ignore SSL certificate errors</gui>"
-msgstr "<gui>SSL-Zertifikatfehler ignorieren</gui>"
-
-#: C/account-jabber.page:47(item/p)
-msgid ""
-"Whenever possible, communication between <app>Empathy</app> and the Jabber "
-"server is encrypted. If encrypted communication is not possible, messages "
-"may be sent unencrypted. Select <gui>Encryption required</gui> to prevent "
-"<app>Empathy</app> from communicating with the Jabber server when encryption "
-"is not possible."
-msgstr ""
-"Wann immer es möglich ist, wird die Kommunikation zwischen <app>Empathy</"
-"app> und dem Jabber-Server verschlüsselt. Falls verschlüsselte Kommunikation "
-"nicht möglich ist, können Nachrichten unverschlüsselt gesendet werden. "
-"Wählen Sie <gui>Verschlüsselung erforderlich</gui>, um eine Kommunikation "
-"von <app>Empathy</app> mit dem Jabber-Server zu verhindern, wenn "
-"Verschlüsselung nicht möglich ist."
-
-#: C/account-jabber.page:52(item/p)
-msgid ""
-"Some Jabber servers may encrypt data using invalid certificates, or using "
-"certificates from unknown authorities. If you trust the server you are "
-"connecting to, you can select <gui>Ignore SSL certificate errors</gui> to "
-"allow encrypted communication with invalid certificates."
-msgstr ""
-"Einige Jabber-Server könnten Daten mit ungültigen Zertifikaten verschlüsseln "
-"oder Zertifikate von unbekannten Ausgabestellen verwenden. Falls Sie dem "
-"Server vertrauen, mit dem Sie sich verbinden wollen, wählen Sie <gui>SSL-"
-"Zertifikat-Fehler ignorieren</gui>, um verschlüsselte Kommunikation mit "
-"ungültigen Zertifikaten allgemein zuzulassen."
-
-#: C/account-jabber.page:59(item/title)
-msgid "<gui>Resource</gui>"
-msgstr "<gui>Ressource</gui>"
-
-#: C/account-jabber.page:60(item/title)
-msgid "<gui>Priority</gui>"
-msgstr "<gui>Priorität</gui>"
-
-#: C/account-jabber.page:61(item/p)
-msgid ""
-"If you have multiple applications (for instance, on separate computers) "
-"connected to your account at the same time, you can set a resource to "
-"uniquely identify each one. By default, <app>Empathy</app> will use "
-"<input>Telepathy</input> as the resource."
-msgstr ""
-"Falls Sie über mehrere Anwendungen gleichzeitig mit Ihrem Konto verbunden "
-"sind, beispielsweise von verschiedenen Rechnern aus, können Sie eine "
-"Ressource zur eindeutigen Identifizierung jeder dieser Anmeldungen "
-"festlegen. Als Vorgabe verwendet <app>Empathy</app> als Ressource "
-"<input>Telepathy</input>."
-
-#: C/account-jabber.page:65(item/p)
-msgid ""
-"You can set the priority to specify which application should receive "
-"incoming messages from your contacts. New messages will be sent to the "
-"application with the highest priority."
-msgstr ""
-"Sie können die Priorität festlegen, um anzugeben, welche Anwendung die "
-"eingehenden Nachrichten von Ihren Kontakten annehmen soll. Neue Nachrichten "
-"werden dabei zu der Anwendung mit der höchsten Priorität gesendet."
-
-#: C/account-jabber.page:70(item/title)
-msgid "<gui>Override server settings</gui>"
-msgstr "<gui>Server-Einstellungen überschreiben</gui>"
-
-#: C/account-jabber.page:71(item/p)
-msgid ""
-"<app>Empathy</app> will use default settings to connect to the Jabber server "
-"based on your login ID. For some Jabber servers, you will need to enter "
-"custom server settings manually. These settings should be provided for you "
-"by your Jabber provider."
-msgstr ""
-"<app>Empathy</app> verwendet Vorgabeeinstellungen für Verbindungen zum "
-"Jabber-Server, basierend auf Ihrer Anmeldekennung. Für einige Jabber-Server "
-"müssen Sie benutzerdefinierte Einstellungen manuell eingeben. Diese "
-"Einstellungen sollte Ihnen Ihr Jabber-Dienstanbieter zur Verfügung stellen."
-
-#: C/accounts-window.page:10(info/desc)
-msgid "Add, modify, and delete accounts."
-msgstr "Hinzufügen, Bearbeiten und Entfernen von Konten."
-
-#: C/accounts-window.page:32(page/title)
-msgid "Accounts Window"
-msgstr "Konten-Fenster"
-
-#: C/accounts-window.page:34(page/p)
-msgid ""
-"The <gui>Accounts</gui> window allows you to add, modify, and delete "
-"accounts."
-msgstr ""
-"Das <gui>Konten</gui> ermöglicht Ihnen das Hinzufügen, Bearbeiten oder "
-"Entfernen von Kontakten."
-
-#: C/accounts-window.page:42(section/title)
-msgid "Account Details"
-msgstr "Kontendetails"
-
-#: C/accounts-window.page:43(section/p)
-msgid ""
-"For most types of accounts, you can simply enter a login ID and a password. "
-"Certain accounts or account types, however, may require additional "
-"information."
-msgstr ""
-"Für die meisten Kontentypen können Sie einfach eine Anmeldekennung und ein "
-"Passwort eingeben. Bestimmte Konten oder Kontentypen könnten allerdings "
-"weitere Informationen erfordern."
-
-#: C/add-account.page:9(info/desc)
-msgid "Add a new account to <app>Empathy</app>."
-msgstr "Einen neuen Kontakt zu <app>Empathy</app> hinzufügen."
-
-#: C/add-account.page:40(page/title)
-msgid "Add a new account"
-msgstr "Hinzufügen eines neuen Kontos"
-
-#: C/add-account.page:42(page/p)
-msgid ""
-"You can add instant messaging accounts from any supported service to "
-"communicate with all of your contacts in <app>Empathy</app>. For some "
-"account providers, these steps will also allow you to register for a new "
-"account. For more details, see <link xref=\"create-account\"/>."
-msgstr ""
-"Sie können Sofortnachrichten-Konten für jeden unterstützten Dienst anlegen, "
-"um mit allen Ihren Kontakten in <app>Empathy</app> zu kommunizieren. Für "
-"einige Dienstanbieter erlauben Ihnen diese Schritte auch die Registrierung "
-"eines neuen Kontos. Weitere Details hierzu finden Sie in <link xref=\"create-"
-"account\"/>."
-
-#: C/add-account.page:49(item/p) C/disable-account.page:49(item/p)
-#: C/irc-nick-password.page:50(item/p) C/remove-account.page:43(item/p)
-msgid ""
-"From the <gui>Contact List</gui> window, choose <guiseq><gui>Edit</gui> "
-"<gui>Accounts</gui></guiseq>, or press <key>F4</key>."
-msgstr ""
-"Wählen Sie im <gui>Kontaktlisten</gui>-Fenster <guiseq><gui>Bearbeiten</"
-"gui><gui>Konten</gui></guiseq> oder drücken Sie <key>F4</key>."
-
-#: C/add-account.page:53(item/p)
-msgid "Click <gui style=\"button\">+</gui>."
-msgstr "Klicken Sie auf <gui style=\"button\">+</gui>."
-
-#: C/add-account.page:58(item/p)
-msgid ""
-"From the <gui>Protocol</gui> drop-down list, select the type of account you "
-"wish to add."
-msgstr ""
-"Aus der <gui>Protokoll</gui>-Aufklappliste wählen Sie den Kontentyp, welchen "
-"Sie hinzufügen wollen."
-
-#: C/add-account.page:62(item/p)
-msgid ""
-"If you do not already have a registered account, select <gui>Create a new "
-"account on the server</gui>. This feature is not available for all account "
-"types, and may not work with some account providers. See <link xref=\"create-"
-"account\"/> for more information."
-msgstr ""
-"Falls Sie noch kein Konto registriert haben, wählen Sie <gui>Ein neues Konto "
-"auf dem Server anlegen</gui>. Dieses Funktionsmerkmal ist nicht für alle "
-"Kontentypen verfügbar und funktioniert möglicherweise nicht mit allen "
-"Dienstanbietern. Weitere Informationen hierzu finden Sie in <link xref="
-"\"create-account\"/>."
-
-#: C/add-account.page:69(item/p)
-msgid ""
-"Enter the required information. For most accounts, you will only need a "
-"login ID and a password. Some accounts may require additional information. "
-"See <link xref=\"accounts-window#details\"/>for more information."
-msgstr ""
-"Geben Sie die benötigten Informationen ein. Für die meisten Konten wird die "
-"Eingabe einer Anmeldekennung und eines Passworts genügen. Einige Konten "
-"könnten zusätzliche Angaben erfordern. Weitere Informationen hierzu finden "
-"Sie in <link xref=\"accounts-window#details\"/>."
-
-#: C/add-account.page:74(item/p) C/import-account.page:61(item/p)
-#: C/irc-nick-password.page:63(item/p)
-msgid "Click <gui style=\"button\">Apply</gui>."
-msgstr "Klicken Sie auf <gui style=\"button\">Anwenden</gui>."
-
-#: C/add-account.page:81(note/p)
-msgid ""
-"To change the name that identifies the account in the <gui>Accounts</gui> "
-"window, select the account from the list on the left and either click on the "
-"name or press the space bar. Edit the account name and press <key>Enter</"
-"key> when you’re finished."
-msgstr ""
-"Um den Namen zu ändern, der das Konto im <gui>Konten</gui>-Fenster "
-"identifiziert, wählen Sie das Konto aus der linken Liste aus und klicken Sie "
-"anschließend entweder auf den Namen oder drücken Sie die <key>Leertaste</"
-"key>. Ändern Sie den Namen und drücken Sie die <key>Eingabetaste</key>, "
-"sobald Sie fertig sind."
-
-#: C/add-contact.page:9(info/desc)
-msgid "Add someone to the contact list."
-msgstr "Jemanden zur Kontaktliste hinzufügen."
-
-#: C/add-contact.page:18(credit/name) C/change-status.page:24(credit/name)
-#: C/prob-conn-acctdisabled.page:15(credit/name)
-#: C/prob-conn-auth.page:18(credit/name)
-#: C/prob-conn-neterror.page:16(credit/name) C/prob-conn.page:14(credit/name)
-#: C/send-file.page:17(credit/name) C/send-message.page:17(credit/name)
-msgid "Phil Bull"
-msgstr "Phil Bull"
-
-#: C/add-contact.page:33(page/title)
-msgid "Add someone to your list of contacts"
-msgstr "Jemanden zu Ihrer Kontaktliste hinzufügen"
-
-#: C/add-contact.page:37(item/p)
-msgid "Choose <guiseq><gui>Chat</gui><gui>Add Contact</gui></guiseq>."
-msgstr ""
-"Wählen Sie <guiseq><gui>Unterhaltung</gui><gui>Kontakt hinzufügen</gui></"
-"guiseq>."
-
-#: C/add-contact.page:40(item/p)
-msgid ""
-"From the <gui>Account</gui> drop-down list, select the account you wish to "
-"use to connect to your contact. Your contact will need to be using the same "
-"service as the account you select."
-msgstr ""
-"Wählen Sie in der <gui>Konten</gui>-Auswahlliste das Konto aus, mit dem Sie "
-"sich zu Ihrem Kontakt verbinden wollen. Es ist erforderlich, dass Ihr "
-"Kontakt den gleichen Dienst verwendet, den Sie hier angeben."
-
-#: C/add-contact.page:45(item/p)
-msgid ""
-"In the <gui>Identifier</gui> field, enter your contact’s login ID, username, "
-"screen name, or other appropriate identifier for the service type."
-msgstr ""
-"Geben Sie im Feld <gui>Bezeichner</gui> die Anmeldekennung, den "
-"Benutzernamen, den angezeigten Namen oder andere entsprechende "
-"Identifizierungsmerkmale für den Diensttyp Ihre Kontakts ein."
-
-#: C/add-contact.page:49(item/p)
-msgid ""
-"In the <gui>Alias</gui> field, type your contact’s name as you would like it "
-"to appear in your contact list."
-msgstr ""
-"Geben Sie in das <gui>Alias</gui>-Textfeld den Namen ein, so wie er in der "
-"Kontaktliste erscheinen soll."
-
-#: C/add-contact.page:53(item/p)
-msgid "Click <gui>Add</gui> to add the person to your list of contacts."
-msgstr ""
-"Klicken Sie auf <gui>Hinzufügen</gui>, um die Person zu Ihrer Kontaktliste "
-"hinzuzufügen."
-
-#: C/add-contact.page:61(note/p)
-msgid ""
-"To add a new person to your list of contacts, you need to be connected to "
-"the Internet and to your account."
-msgstr ""
-"Um eine neue Person zu Ihrer Kontaktliste hinzuzufügen, müssen Sie mit dem "
-"Internet und mit Ihrem Konto verbunden sein."
-
-#: C/audio-call.page:10(info/desc)
-msgid "Call your contacts over the Internet."
-msgstr "Ihre Kontakte über das Internet anrufen."
-
-#: C/audio-call.page:26(credit/name) C/create-account.page:24(credit/name)
-#: C/overview.page:17(credit/name) C/share-desktop.page:18(credit/name)
-#: C/video-call.page:29(credit/name)
-msgid "Ekaterina Gerasimova"
-msgstr "Ekaterina Gerasimova"
-
-#: C/audio-call.page:35(page/title)
-msgid "Start an audio conversation"
-msgstr "Eine Sprachunterhaltung starten"
-
-#: C/audio-call.page:37(page/p)
-msgid ""
-"You can call your contacts and have an audio conversation with them. This "
-"features only works with certain types of accounts and it requires the other "
-"person to have an application that supports audio calls."
-msgstr ""
-"Sie können Ihre Kontakte für eine Sprachunterhaltung anrufen. Dieses "
-"Funktionsmerkmal steht nur für bestimmte Kontentypen zur Verfügung. Außerdem "
-"muss die andere Person mit einer Anwendung arbeiten, die Sprachanrufe "
-"unterstützt."
-
-#: C/audio-call.page:43(item/p)
-msgid ""
-"Right-click on the contact that you want to call and select <gui style="
-"\"menuitem\">Audio Call</gui>."
-msgstr ""
-"Wählen Sie mit der rechten Maustaste den Kontakt aus, den Sie anrufen "
-"wollen, und wählen Sie <gui style=\"menuitem\">Sprachanruf</gui>."
-
-#: C/audio-call.page:49(item/p) C/video-call.page:50(item/p)
-msgid ""
-"A new window will open. When the connection is established, you will see the "
-"total conversation time at the bottom of the window."
-msgstr ""
-"Ein neues Fenster wird geöffnet. Sobald die Verbindung aufgebaut wurde, "
-"sehen Sie am unteren Rand des Fensters die Gesamtzeit der Unterhaltung."
-
-#: C/audio-call.page:55(item/p)
-msgid ""
-"To end the conversation, click the <gui style=\"button\">hand up</gui> "
-"button."
-msgstr ""
-"Um eine Unterhaltung zu beenden, klicken Sie auf den Knopf <gui style="
-"\"button\">Auflegen</gui>."
-
-#: C/audio-call.page:63(note/p)
-msgid ""
-"To turn an audio conversation into a video conversation, choose <guiseq><gui "
-"style=\"menu\">Video</gui> <gui style=\"menuitem\">Video On</gui></guiseq>."
-msgstr ""
-"Um eine Sprachunterhaltung in eine Videounterhaltung umzuwandeln, wählen Sie "
-"<guiseq><gui style=\"menu\">Video</gui><gui style=\"menuitem\">Video an</"
-"gui></guiseq>."
-
-#: C/audio-call.page:71(section/title)
-msgid "Start an audio conversation with a meta-contact"
-msgstr "Eine Sprachunterhaltung mit einem Meta-Kontakt starten"
-
-#: C/audio-call.page:74(item/p) C/send-message.page:53(item/p)
-#: C/video-call.page:68(item/p)
-msgid ""
-"From the <gui>Contact List</gui> window, right-click on the meta-contact."
-msgstr "Klicken Sie im<gui>Kontaktlisten</gui>-Fenster auf den Meta-Kontakt."
-
-#: C/audio-call.page:79(item/p)
-msgid ""
-"Select the contact you want to have the conversation, and from the menu "
-"select <gui style=\"menuitem\">Audio Call</gui>."
-msgstr ""
-"Wählen Sie den Kontakt aus, mit dem Sie eine Unterhaltung beginnen wollen, "
-"und wählen Sie im Menü <gui style=\"menuitem\">Sprachanruf</gui>."
-
-#: C/audio-call.page:86(note/p) C/send-message.page:65(note/p)
-#: C/video-call.page:80(note/p)
-msgid ""
-"To recognize if a contact is a <em>meta-contact</em>, move your mouse on a "
-"contact in the <gui>Contact List</gui> window, and stop over it for a "
-"second: a small pop-up message will appear showing the number of the "
-"contacts that form the meta-contact."
-msgstr ""
-"Bewegen und halten Sie den Mauszeiger über einen Kontakt im Fenster "
-"<gui>Kontaktliste</gui>, um erkennen zu können, ob es sich um einen <em>Meta-"
-"Kontakt</em> handelt. Nach kurzer Zeit erscheint eine Einblendung, die die "
-"Anzahl der Einzelkontakte nennt."
-
-#. This is a reference to an external file such as an image or video. When
-#. the file changes, the md5 hash will change to let you know you need to
-#. update your localized copy. The msgstr is not used at all. Set it to
-#. whatever you like once you have updated your copy of the file.
-#: C/audio-video.page:58(media)
-msgctxt "_"
-msgid "external ref='figures/audio-input-microphone.png' md5='__failed__'"
-msgstr "original"
-
-#. This is a reference to an external file such as an image or video. When
-#. the file changes, the md5 hash will change to let you know you need to
-#. update your localized copy. The msgstr is not used at all. Set it to
-#. whatever you like once you have updated your copy of the file.
-#: C/audio-video.page:70(media)
-msgctxt "_"
-msgid "external ref='figures/camera-web.png' md5='__failed__'"
-msgstr ""
-"external ref='figures/color-camera.png' "
-"md5='3c7319d2fde00e55eaca8f5318667a66'"
-
-#: C/audio-video.page:8(info/desc)
-msgid ""
-"Information on when it is possible to have an audio or video conversation."
-msgstr ""
-"Informationen über die Möglichkeiten für Sprach- und Video-Unterhaltungen."
-
-#: C/audio-video.page:32(page/title)
-msgid "Audio and video support"
-msgstr "Sprach- und Video-Unterstützung"
-
-#: C/audio-video.page:34(page/p)
-msgid ""
-"You can only have audio and video conversation with contacts who are using "
-"an application which also supports this feature. When your contacts support "
-"audio or video conversations, you will see the following icons next to their "
-"names in the contact list:"
-msgstr ""
-"Sie können Sprach- und Video-Unterhaltungen nur mit Kontakten führen, die "
-"ebenfalls eine Anwendung benutzen, die dieses Funktionsmerkmal unterstützt. "
-"Wenn Ihre Kontakte Sprach- oder Video-Unterhaltungen unterstützen, werden "
-"neben deren Namen in der Kontaktliste folgende Symbole angezeigt:"
-
-#: C/audio-video.page:43(td/p)
-msgid "Icon"
-msgstr "Symbol"
-
-#: C/audio-video.page:48(td/p)
-msgid "Description"
-msgstr "Beschreibung"
-
-#: C/audio-video.page:57(td/p)
-msgid ""
-"<media type=\"image\" mime=\"image/png\" src=\"figures/audio-input-"
-"microphone.png\"> Icon for audio conversation </media>"
-msgstr ""
-"<media type=\"image\" mime=\"image/png\" src=\"figures/audio-input-"
-"microphone.png\">Symbol für Sprachunterhaltungen</media>"
-
-#: C/audio-video.page:64(td/p)
-msgid "The contact is able to have an audio conversation."
-msgstr "Der Kontakt kann eine Sprachunterhaltung führen."
-
-#: C/audio-video.page:69(td/p)
-msgid ""
-"<media type=\"image\" mime=\"image/png\" src=\"figures/camera-web.png\"> "
-"Icon for video conversation </media>"
-msgstr ""
-"<media type=\"image\" mime=\"image/png\" src=\"figures/camera-web.png"
-"\">Symbol für Video-Unterhaltungen</media>"
-
-#: C/audio-video.page:76(td/p)
-msgid "The contact is able to have a video conversation."
-msgstr "Der Kontakt kann eine Video-Unterhaltung führen."
-
-#: C/audio-video.page:83(note/p)
-msgid ""
-"In order to have an audio conversation, you need to have a sound card that "
-"is supported by your operating system, and a working microphone."
-msgstr ""
-"Um eine Sprachunterhaltung führen zu können, benötigen Sie eine von Ihrem "
-"Betriebssystem unterstützte Soundkarte sowie ein funktionierendes Mikrofon."
-
-#: C/audio-video.page:87(note/p)
-msgid ""
-"In order to have a video conversation, you need to have a webcam that is "
-"supported by your operating system, and a working microphone."
-msgstr ""
-"Um eine Video-Unterhaltung führen zu können, benötigen Sie eine von Ihrem "
-"Betriebssystem unterstützte Webcam sowie ein funktionierendes Mikrofon."
-
-#: C/audio-video.page:95(section/title)
-msgid "Supported Account Types"
-msgstr "Unterstützte Kontentypen"
-
-#: C/audio-video.page:97(section/p)
-msgid ""
-"You can only have audio and video conversations using accounts on certain "
-"supported services. The following table lists whether audio and video is "
-"supported for each type of account."
-msgstr ""
-"Sie können nur mit denjenigen Konten Sprach- oder Video-Unterhaltungen "
-"führen, welche die entsprechenden Dienste unterstützen. In der folgenden "
-"Tabelle wird für jeden Kontentyp aufgelistet, ob Audio und Video unterstützt "
-"werden."
-
-#: C/audio-video.page:102(note/p)
-msgid ""
-"Account types are provided by plugins. Your system may not have all of the "
-"following types available, or it may have types not listed here. Updated "
-"plugins may make audio or video conversations possible on account types that "
-"are listed as unsupported here."
-msgstr ""
-"Kontentypen werden durch Plugins bereitgestellt. Auf Ihrem System könnten "
-"nicht alle der folgenden Typen verfügbar sein, oder die bei Ihnen "
-"verfügbaren Typen sind hier nicht aufgelistet. Durch aktualisierte Plugins "
-"könnte es möglich sein, dass hier als nicht unterstützte Typen aufgelistete "
-"Konten dennoch Sprach- und Video-Unterhaltungen ermöglichen."
-
-#: C/audio-video.page:128(td/p)
-msgid "Service"
-msgstr "Dienst"
-
-#: C/audio-video.page:129(td/p)
-msgid "Audio"
-msgstr "Audio"
-
-#: C/audio-video.page:130(td/p)
-msgid "Video"
-msgstr "Video"
-
-#: C/audio-video.page:135(td/p)
-msgid "AIM"
-msgstr "AIM"
-
-#: C/audio-video.page:136(td/p) C/audio-video.page:137(td/p)
-#: C/audio-video.page:141(td/p) C/audio-video.page:142(td/p)
-#: C/audio-video.page:146(td/p) C/audio-video.page:147(td/p)
-#: C/audio-video.page:156(td/p) C/audio-video.page:157(td/p)
-#: C/audio-video.page:161(td/p) C/audio-video.page:162(td/p)
-#: C/audio-video.page:166(td/p) C/audio-video.page:167(td/p)
-#: C/audio-video.page:181(td/p) C/audio-video.page:182(td/p)
-#: C/audio-video.page:186(td/p) C/audio-video.page:187(td/p)
-#: C/audio-video.page:191(td/p) C/audio-video.page:192(td/p)
-#: C/audio-video.page:196(td/p) C/audio-video.page:197(td/p)
-#: C/audio-video.page:201(td/p) C/audio-video.page:202(td/p)
-#: C/audio-video.page:211(td/p) C/audio-video.page:212(td/p)
-#: C/audio-video.page:216(td/p) C/audio-video.page:217(td/p)
-msgid "No"
-msgstr "Nein"
-
-#: C/audio-video.page:140(td/p)
-msgid "Facebook Chat"
-msgstr "Facebook-Unterhaltung"
-
-#: C/audio-video.page:145(td/p)
-msgid "gadugadu"
-msgstr "gadugadu"
-
-#: C/audio-video.page:150(td/p)
-msgid "Google Talk"
-msgstr "Google Talk"
-
-#: C/audio-video.page:151(td/p) C/audio-video.page:152(td/p)
-#: C/audio-video.page:171(td/p) C/audio-video.page:172(td/p)
-#: C/audio-video.page:176(td/p) C/audio-video.page:177(td/p)
-#: C/audio-video.page:206(td/p) C/audio-video.page:207(td/p)
-msgid "Yes"
-msgstr "Ja"
-
-#: C/audio-video.page:155(td/p)
-msgid "Groupwise"
-msgstr "Groupwise"
-
-#: C/audio-video.page:160(td/p)
-msgid "ICQ"
-msgstr "ICQ"
-
-#: C/audio-video.page:165(td/p) C/create-account.page:49(section/title)
-msgid "IRC"
-msgstr "IRC"
-
-#: C/audio-video.page:170(td/p) C/create-account.page:79(section/title)
-msgid "Jabber"
-msgstr "Jabber"
-
-#: C/audio-video.page:175(td/p)
-msgid "MSN"
-msgstr "MSN"
-
-#: C/audio-video.page:180(td/p)
-msgid "myspace"
-msgstr "myspace"
-
-#: C/audio-video.page:185(td/p)
-msgid "qq"
-msgstr "qq"
-
-#: C/audio-video.page:190(td/p) C/create-account.page:97(section/title)
-msgid "People Nearby"
-msgstr "Personen in der Nähe"
-
-#: C/audio-video.page:195(td/p)
-msgid "sametime"
-msgstr "gleichzeitig"
-
-#: C/audio-video.page:200(td/p)
-msgid "silc"
-msgstr "silc"
-
-#: C/audio-video.page:205(td/p) C/create-account.page:110(section/title)
-msgid "SIP"
-msgstr "SIP"
-
-#: C/audio-video.page:210(td/p)
-msgid "Yahoo!"
-msgstr "Yahoo!"
-
-#: C/audio-video.page:215(td/p)
-msgid "zephyr"
-msgstr "zephyr"
-
-#: C/change-status.page:9(info/desc)
-msgid "Change your status to advertise your availability to your contacts."
-msgstr ""
-"Ändern des Status, um Ihre Kontakte über Ihre Verfügbarkeit zu informieren."
-
-#: C/change-status.page:39(page/title)
-msgid "Change your status"
-msgstr "Ändern Ihres Status"
-
-#: C/change-status.page:41(page/p)
-msgid ""
-"You can set your status to indicate your availability to your contacts. "
-"<app>Empathy</app> allows you to select from a list of defined statuses."
-msgstr ""
-"Sie können Ihren Status festlegen, um Ihre Verfügbarkeit Ihren Kontakten "
-"anzuzeigen. <app>Empathy</app> ermöglicht Ihnen, aus einer Liste "
-"vordefinierter Status zu wählen."
-
-#: C/change-status.page:46(item/p)
-msgid ""
-"Click on the drop-down list at the top of the <gui>Contact List</gui> window."
-msgstr ""
-"Klicken Sie auf die Auswahlliste oben im <gui>Kontaktlisten</gui>-Fenster."
-
-#: C/change-status.page:51(item/p)
-msgid "Select a status from the list."
-msgstr "Wählen Sie einen Status in der Liste aus."
-
-#: C/change-status.page:57(page/p)
-msgid ""
-"See <link xref=\"status-icons\"/> for a list of the built-in statuses and "
-"what they mean. You can also <link xref=\"set-custom-status\">add custom "
-"status messages</link> to provide more information about your availability "
-"to your contacts."
-msgstr ""
-"In <link xref=\"status-icons\"/> finden Sie eine Liste mitgelieferter Status "
-"sowie deren Bedeutung. Sie können auch <link xref=\"set-custom-status"
-"\">benutzerdefinierte Statusmeldungen hinzufügen</link>, um für Ihre "
-"Kontakte weitere Informationen über Ihren Status bereitzustellen."
-
-#: C/change-status.page:63(note/p)
-msgid ""
-"If you do not use your computer for a while, or if the screensaver is on, "
-"the status will be automatically set to Away."
-msgstr ""
-"Falls Sie Ihren Rechner für eine gewisse Zeit nicht bedienen oder der "
-"Bildschirmschoner eingeschaltet ist, wird der Status automatisch auf "
-"abwesend gesetzt."
-
-#: C/create-account.page:32(info/desc)
-msgid "Create an account for one of the supported messaging services."
-msgstr "Ein Konto bei einem der unterstützten Nachrichtendienste erstellen."
-
-#: C/create-account.page:36(page/title)
-msgid "Register a new account"
-msgstr "Ein neues Konto registrieren"
-
-#: C/create-account.page:38(page/p)
-msgid ""
-"Most account types require you to create an account with a service provider "
-"before you can use that account with instant messaging applications. You can "
-"use <app>Empathy</app> to register for a new account with some account "
-"providers using the same steps as you would to <link xref=\"add-account"
-"\">add an account</link>."
-msgstr ""
-"Für die meisten Kontentypen ist es erforderlich, dass Sie ein Konto bei "
-"einem Dienstanbieter erstellen, bevor Sie dieses Konto für Sofortnachrichten-"
-"Anwendungen verwenden können. Für einige Kontenanbieter können Sie "
-"<app>Empathy</app> verwenden, um ein neues Konto zu anzumelden, unter "
-"Anwendung der gleichen Schritte wie für das <link xref=\"add-account"
-"\">Hinzufügen eines Kontos</link>."
-
-#: C/create-account.page:44(page/p)
-msgid ""
-"Once you create a new account, your account provider should give you a login "
-"or a username and a password, as well as any additional information you need "
-"to connect using <app>Empathy</app>."
-msgstr ""
-"Sobald Sie ein neues Konto erstellt haben, sollten Sie von Ihrem "
-"Dienstanbieter eine Anmeldekennung und ein Passwort sowie eventuelle "
-"zusätzliche Informationen erhalten haben, die Sie zum Verbinden mit "
-"<app>Empathy</app> benötigen."
-
-#: C/create-account.page:51(section/p)
-msgid ""
-"IRC networks require that you specify a nick (nickname) when you connect to "
-"the server. Some IRC networks use a service, such as NickServ, to allow "
-"users to <link xref=\"irc-nick-password\">protect their nick</link>. If you "
-"did not register your nick or are unable to do so and another user is using "
-"it, then you will need to choose a different one."
-msgstr ""
-"IRC-Netzwerke erfordern, dass Sie einen nick (Spitznamen) bei Verbindung mit "
-"dem Server angeben. Einige IRC-Netzwerke nutzen einen Dienst, wie z.B. "
-"NickServ, um Benutzern den <link xref=\"irc-nick-password\">Schutz Ihres "
-"Spitznamens</link> zu gewähren. Wenn Sie Ihren Spitznamen nicht anmelden "
-"oder dies nicht möglich ist und ein andere Benutzer ihn einsetzt, dann "
-"müssen Sie einen anderen wählen."
-
-#: C/create-account.page:57(section/p)
-msgid ""
-"Some IRC servers are password protected. You will need to know the password "
-"to connect to these servers. Generally, these are private IRC networks."
-msgstr ""
-"Einige IRC-Server sind passwortgeschützt. Sie müssen das Passwort kennen, um "
-"eine Verbindung zu diesen Servern herzustellen. Im Allgemeinen sind dies "
-"private IRC-Netzwerke."
-
-#: C/create-account.page:62(note/p)
-msgid ""
-"Many GNOME projects use <code>irc.gnome.org</code> for project-related "
-"discussion."
-msgstr ""
-"Viele GNOME-Projekte nutzen <code>irc.gnome.org</code> für Projekt-bezogene "
-"Diskussionen."
-
-#: C/create-account.page:68(section/title)
-msgid "Facebook"
-msgstr "Facebook"
-
-#: C/create-account.page:70(section/p)
-msgid ""
-"Facebook is one of the more popular social networks. It allows users to "
-"create their own profile and to communicate with their friends."
-msgstr ""
-"Facebook ist eines der am meisten genutzten sozialen Netzwerke. Den "
-"Benutzern wird die Erstellung eines eigenen Profils und die Kommunikation "
-"mit ihren Freunden ermöglicht."
-
-#: C/create-account.page:73(section/p)
-msgid ""
-"To use Facebook to communicate with your friends, you will need to create a "
-"new account from the website: <link href=\"https://www.facebook.com\">www."
-"facebook.com</link>."
-msgstr ""
-"Um Facebook zur Unterhaltung mit Ihren Freunden nutzen zu können, müssen Sie "
-"ein neues Konto auf folgender Webseite erstellen: <link href=\"https://www."
-"facebook.com\">www.facebook.com</link>."
-
-#: C/create-account.page:81(section/p)
-msgid ""
-"Jabber is an open instant messaging system. Like email, Jabber allows you to "
-"choose your account provider and communicate with all other Jabber users, "
-"regardless of their account provider."
-msgstr ""
-"Jabber ist ein offenes Sofortnachrichtensystem. Wie E-Mail, erlaubt Jabber "
-"die Wahl Ihres Konto-Dienstanbieters und die Kommunikation mit anderen "
-"Jabber-Benutzern, unabhängig von deren Konto-Dienstanbietern."
-
-#: C/create-account.page:85(section/p)
-msgid ""
-"You will need to create a new account with a Jabber provider. There are many "
-"free providers; one popular provider is <link href=\"http://register.jabber."
-"org/\">jabber.org</link>."
-msgstr ""
-"Es wird nötig sein, dass Sie ein neues Konto bei einem Jabber-Dienstanbieter "
-"anlegen. Es gibt zahlreiche freie Jabber-Dienstanbieter. Einer der "
-"populärsten ist <link href=\"http://register.jabber.org/\">jabber.org</link>."
-
-#: C/create-account.page:90(note/p)
-msgid ""
-"If you use Gmail or Google+ Hangouts, you already have a Jabber account. Use "
-"your Gmail address and password in <app>Empathy</app> to connect."
-msgstr ""
-"Falls Sie Gmail oder Google+ Hangouts verwenden, so haben Sie bereits ein "
-"Jabber-Konto. Verwenden Sie einfach Ihre Google Mail-Adresse und Ihr "
-"Passwort in <app>Empathy</app> für die Verbindung."
-
-#: C/create-account.page:99(section/p)
-msgid ""
-"This service works whenever you are connected to a local network, such as a "
-"wireless hotspot, you do not need to create an account with service "
-"providor, just set up your account through <app>Empathy</app>. It "
-"automatically finds all other users on the network who are also using this "
-"service."
-msgstr ""
-"Dieser Dienst ist immer dann verfügbar, wenn Sie mit einem lokalen Netzwerk "
-"verbunden sind, zum Beispiel einem drahtlosen Zugangspunkt (Hotspot). Sie "
-"müssen beim Dienstanbieter kein Konto einrichten. Erstellen Sie einfach ein "
-"Konto mit <app>Empathy</app>. Andere Benutzer, die diesen Dienst nutzen, "
-"werden im Netzwerk automatisch gefunden."
-
-#: C/create-account.page:105(section/p)
-msgid ""
-"For more information, see the <link xref=\"salut-protocol\">salut protocol</"
-"link>."
-msgstr ""
-"Weitere Informationen finden Sie unter <link xref=\"salut-protocol\">Salut-"
-"Protokoll</link>."
-
-#: C/create-account.page:112(section/p)
-msgid ""
-"SIP is an open system which allows users to have audio and video "
-"conversations over the Internet. You need to create an account with a SIP "
-"provider. You can communicate with all other SIP users, regardless of which "
-"SIP provider they use."
-msgstr ""
-"SIP ist ein offenes System für Sprach- und Video-Unterhaltungen über das "
-"Internet. Sie müssen ein SIP-Konto bei einem Dienstanbieter erstellen. "
-"Unabhängig davon, welchen Dienstanbieter Ihre Kontakte nutzen, können Sie "
-"mit allen anderen SIP-Benutzern kommunizieren."
-
-#: C/create-account.page:117(section/p)
-msgid ""
-"Some SIP providers allow you to call normal phones from your computer. "
-"Generally, you will need to subscribe to a paid service for this feature."
-msgstr ""
-"Einige SIP-Dienste ermöglichen es, von Ihrem Rechner aus gewöhnliche "
-"Telefone anzurufen. Im Allgemeinen werden Sie sich hierfür an einem zu "
-"bezahlenden Dienst registrieren müssen."
-
-#: C/create-account.page:123(section/title)
-msgid "Proprietary Services"
-msgstr "Proprietäre Dienste"
-
-#: C/create-account.page:125(section/p)
-msgid ""
-"There are many proprietary instant messaging services that have been "
-"developed by different companies or organizations. <app>Empathy</app> allows "
-"you to connect to an existing account for some of these services. To create "
-"a new account with one of these services, you will need to visit the website "
-"for the service."
-msgstr ""
-"Es gibt zahlreiche proprietäre Sofortnachrichtendienste, die von "
-"verschiedenen Unternehmen oder Organisationen entwickelt wurden. "
-"<app>Empathy</app> ermöglicht Ihnen für zahlreiche Dienste die Verbindung zu "
-"einem vorhandenen Konto. Um ein neues Konto bei einem dieser Dienste "
-"anzulegen, besuchen Sie bitte die Webseite des jeweiligen Anbieters."
-
-#: C/create-account.page:133(item/p)
-msgid "<link href=\"http://dashboard.aim.com/aim\">AIM</link>"
-msgstr "<link href=\"http://dashboard.aim.com/aim\">AIM</link>"
-
-#: C/create-account.page:136(item/p)
-msgid "<link href=\"https://www.icq.com/register/\">ICQ</link>"
-msgstr "<link href=\"https://www.icq.com/register/\">ICQ</link>"
-
-#: C/create-account.page:139(item/p)
-msgid "<link href=\"https://accountservices.passport.net\">MSN</link>"
-msgstr "<link href=\"https://accountservices.passport.net\">MSN</link>"
-
-#: C/create-account.page:142(item/p)
-msgid "<link href=\"https://login.yahoo.com/config/login\">Yahoo!</link>"
-msgstr "<link href=\"https://login.yahoo.com/config/login\">Yahoo!</link>"
-
-#: C/disable-account.page:9(info/desc)
-msgid "Prevent <app>Empathy</app> from automatically logging in to an account."
-msgstr ""
-"<app>Empathy</app> daran hindern, die Verbindung zu einem Konto automatisch "
-"herzustellen."
-
-#: C/disable-account.page:40(page/title)
-msgid "Disable an account"
-msgstr "Deaktivieren eines Kontos"
-
-#: C/disable-account.page:42(page/p)
-msgid ""
-"You can disable an account to prevent <app>Empathy</app> from logging in to "
-"it without removing the account entirely. You may wish to disable and re-"
-"enable an account if you only want to be logged in to the account at certain "
-"times, but you still want to use <app>Empathy</app> for other accounts."
-msgstr ""
-"Sie können ein Konto deaktivieren, um zu verhindern, dass <app>Empathy</app> "
-"sich an diesem Konto anmeldet. Das Konto wird dabei nicht völlig entfernt. "
-"Vielleicht wollen Sie ein Konto deaktivieren und erneut aktivieren, wenn Sie "
-"nur zeitweise angemeldet sein wollen, aber <app>Empathy</app> noch für "
-"andere Konten nutzen wollen."
-
-#: C/disable-account.page:53(item/p)
-msgid ""
-"Select the account you wish to disable from the accounts list on the left "
-"side of the window."
-msgstr ""
-"Wählen Sie das Konto, das Sie aus der Kontenliste entfernen wollen, an der "
-"linken Seite des Dialogs aus."
-
-#: C/disable-account.page:57(item/p)
-msgid "On the right side of the window, switch it off."
-msgstr "Schalten Sie es an der rechten Seite des Fensters aus."
-
-#: C/disable-account.page:62(page/p)
-msgid "To re-enable the account, switch it on."
-msgstr "Um das Konto erneut zu aktivieren, schalten Sie es ein."
-
-#: C/favorite-rooms.page:10(info/desc)
-msgid "Set, join and manage favorite rooms."
-msgstr "Einrichten, Betreten und Verwalten bevorzugter Räume."
-
-#: C/favorite-rooms.page:29(page/title)
-msgid "Favorite rooms"
-msgstr "Bevorzugte Räume"
-
-#: C/favorite-rooms.page:32(section/title)
-msgid "Set a room as a favorite"
-msgstr "Einen Raum als bevorzugt einrichten"
-
-#: C/favorite-rooms.page:35(item/p)
-msgid "Join a room."
-msgstr "Betreten eines Raumes."
-
-#: C/favorite-rooms.page:40(item/p)
-msgid ""
-"See <link xref=\"irc-join-room\"/> for more information on how to join an "
-"IRC room."
-msgstr ""
-"In <link xref=\"irc-join-room\"/> finden Sie weitere Informationen über das "
-"Betreten eines Raumes im IRC."
-
-#: C/favorite-rooms.page:46(item/p)
-msgid ""
-"See <link xref=\"group-conversations\"/> for more information on how to "
-"start or join a group conversation."
-msgstr ""
-"In <link xref=\"group-conversations\"/> finden Sie weitere Informationen "
-"über das Starten oder Teilnehmen an einer Gruppenunterhaltung."
-
-#: C/favorite-rooms.page:54(item/p)
-msgid ""
-"From the conversation window, choose <guiseq><gui>Conversation</"
-"gui><gui>Favorite Chat Room</gui></guiseq>."
-msgstr ""
-"Wählen Sie im Unterhaltungsfenster <guiseq><gui>Unterhaltung</"
-"gui><gui>Favorisierter Chatraum</gui></guiseq>."
-
-#: C/favorite-rooms.page:63(section/title)
-msgid "Join favorite rooms"
-msgstr "Betreten bevorzugter Räume"
-
-#: C/favorite-rooms.page:66(item/p) C/send-file.page:40(item/p)
-msgid "From the <gui>Contact List</gui> window, perform one of the following:"
-msgstr ""
-"Führen Sie im <gui>Kontaktlisten</gui>-Fenster eine der folgenden Aktionen "
-"aus:"
-
-#: C/favorite-rooms.page:71(item/p)
-msgid "Press <key>F5</key>."
-msgstr "Drücken Sie <key>F5</key>."
-
-#: C/favorite-rooms.page:76(item/p)
-msgid ""
-"Choose <guiseq><gui>Room</gui><gui>Join Favorites</gui></guiseq>, to join "
-"all your favorite rooms."
-msgstr ""
-"Wählen Sie <guiseq><gui>Raum</gui><gui>Favoriten betreten</gui></guiseq>, um "
-"alle Ihre bevorzugten Räume zu betreten."
-
-#: C/favorite-rooms.page:82(item/p)
-msgid "Choose <gui>Room</gui>, and select the favorite room you want to join."
-msgstr ""
-"Wählen Sie <gui>Raum</gui>, und wählen Sie den bevorzugten Raum aus, den Sie "
-"betreten wollen."
-
-#: C/favorite-rooms.page:90(note/p)
-msgid ""
-"To join a favorite room, you need to be connected to the Internet and to "
-"your account."
-msgstr ""
-"Um einen bevorzugten Raum zu betreten, müssen Sie mit dem Internet und mit "
-"Ihrem Konto verbunden sein."
-
-#: C/favorite-rooms.page:98(section/title)
-msgid "Manage favorite rooms"
-msgstr "Raumfavoriten verwalten"
-
-#: C/favorite-rooms.page:101(item/p)
-msgid ""
-"From the <gui>Contact List</gui> window, choose <guiseq><gui>Room</"
-"gui><gui>Manage Favorites</gui></guiseq>."
-msgstr ""
-"Wählen Sie im <gui>Kontaktlisten</gui>-Fenster <guiseq><gui>Raum</"
-"gui><gui>Favoriten verwalten</gui></guiseq>."
-
-#: C/favorite-rooms.page:107(item/p)
-msgid ""
-"From the <gui>Account</gui> drop-down list, select the account you want to "
-"manage the favorite rooms of."
-msgstr ""
-"Aus der <gui>Konto</gui>-Aufklappliste wählen Sie das Konto, dessen "
-"bevorzugte Räume Sie verwalten wollen."
-
-#: C/favorite-rooms.page:111(item/p)
-msgid "Select <gui>All</gui> to see all you favorite rooms."
-msgstr "Wählen Sie <gui>Alle</gui>, um alle Ihre bevorzugten Räume zu sehen."
-
-#: C/favorite-rooms.page:116(item/p)
-msgid "Select the favorite room you want to manage:"
-msgstr "Wählen Sie den bevorzugten Raum, den Sie verwalten wollen:"
-
-#: C/favorite-rooms.page:121(item/p)
-msgid ""
-"Select the <gui>Auto-Connect</gui> check-box in order to automatically join "
-"that room when you connect to your account."
-msgstr ""
-"Aktivieren Sie das Ankreuzfeld <gui>Auto-Verbinden</gui>, um einen Raum "
-"immer dann automatisch zu betreten, wenn Sie sich an Ihrem Konto anmelden."
-
-#: C/favorite-rooms.page:127(item/p)
-msgid "Click on <gui>Remove</gui> to remove the room from your favorites."
-msgstr ""
-"Klicken Sie auf <gui>Entfernen</gui>, um den Raum aus Ihren bevorzugten "
-"Räumen zu entfernen."
-
-#: C/favorite-rooms.page:134(item/p)
-msgid "When done, click <gui>Close</gui>."
-msgstr "Sobald Sie fertig sind, klicken Sie auf <gui>Schließen</gui>."
-
-#: C/geolocation.page:8(info/desc)
-msgid "Use and understand geolocation in <app>Empathy</app>."
-msgstr "Benutzung von und Erläuterungen zur Geoposition in <app>Empathy</app>."
-
-#: C/geolocation.page:32(page/title)
-msgid "Geographical position"
-msgstr "Die geografische Position"
-
-#: C/geolocation.page:35(section/title)
-msgid "Geolocation"
-msgstr "Geoposition"
-
-#: C/geolocation.page:39(section/title)
-msgid "Fix common problems"
-msgstr "Behebung häufig auftretender Probleme"
-
-#: C/geolocation-not-showing.page:8(info/desc)
-msgid "<app>Empathy</app> does not publish my geographical position."
-msgstr "<app>Empathy</app> übermittelt meine geografische Position nicht."
-
-#: C/geolocation-not-showing.page:32(page/title)
-msgid "Geographical position not published"
-msgstr "Geografische Position wird nicht veröffentlicht"
-
-#: C/geolocation-not-showing.page:34(page/p)
-msgid ""
-"If your contacts cannot see your location, <app>Empathy</app> might not be "
-"able to discover with a good margin of precision your geographical position."
-msgstr ""
-"Falls Ihre Kontakte Ihren Ort nicht sehen können, dann ist <app>Empathy</"
-"app> möglicherweise nicht in der Lage, Ihren Ort mit einer hinreichenden "
-"Genauigkeit zu bestimmen."
-
-#: C/geolocation-not-showing.page:38(page/p)
-msgid ""
-"In this case, your position will not be published, but you are still able to "
-"see the location of your contacts."
-msgstr ""
-"In diesem Fall wird Ihre Position nicht übermittelt, aber Sie sind weiterhin "
-"in der Lage, die Position Ihrer Kontakte zu sehen."
-
-#: C/geolocation-not-showing.page:42(page/p)
-msgid ""
-"If you want to publish your geographical position, you can try to use an "
-"external device such as a GPS."
-msgstr ""
-"Zum Übermitteln Ihrer geografischen Position können Sie ein externes Gerät "
-"verwenden, wie beispielsweise ein GPS-Gerät."
-
-#: C/geolocation-not-showing.page:48(note/p)
-msgid ""
-"In order to publish your geographical location, your Jabber server needs to "
-"support the Personal Eventing Protocal (PEP). A list of <link href=\"http://"
-"coccinella.im/servers/servers_by_pubsub_pep.html\">servers which support "
-"PEP</link> is maintained online. Google Talk does not support this feature "
-"at this time."
-msgstr ""
-"Um Ihre geografische Position übermitteln zu können, muss Ihr Jabber-Server "
-"das »Personal Eventing Protocol« (PEP) unterstützen. Eine Liste von <link "
-"href=\"http://coccinella.im/servers/servers_by_pubsub_pep.html\">Servern mit "
-"PEP-Unterstützung</link> wird im Internet gepflegt. Google Talk unterstützt "
-"dieses Funktionsmerkmal derzeit nicht."
-
-#: C/geolocation-privacy.page:8(info/desc)
-msgid "What information are sent and to who."
-msgstr "Welche Informationen gesendet werden und an wen."
-
-#: C/geolocation-privacy.page:32(page/title)
-msgid "Geolocation Privacy"
-msgstr "Datenschutz bei Geoposition"
-
-#: C/geolocation-privacy.page:35(section/title)
-msgid "What information is sent"
-msgstr "Gesendete Informationen"
-
-#: C/geolocation-privacy.page:36(section/p)
-msgid ""
-"What is possible to send is: your country, region, locality, area, street, "
-"building, floor, room, and postal code, longitude, latitude and altitude, "
-"speed and bearing."
-msgstr ""
-"Gesendet werden können: Ihr Land, Bundesland, Ort, Bereich, Straße, Gebäude, "
-"Etage und Raum sowie Ihre Postleitzahl, der Längengrad, der Breitengrad, die "
-"Höhe über dem Meeresspiegel, die Geschwindigkeit die Funkpeilung."
-
-#: C/geolocation-privacy.page:40(section/p)
-msgid ""
-"The accuracy and the quantity of information about your geographical "
-"position are based on the software or on the infrastructure used to discover "
-"your position."
-msgstr ""
-"Die Genauigkeit und die Menge der verfügbaren Informationen über Ihre "
-"geografische Position hängen von der Software oder der Infrastruktur ab, die "
-"für die Ermittlung Ihrer Position zum Einsatz kommt."
-
-#: C/geolocation-privacy.page:44(section/p)
-msgid ""
-"Different kind of networks may have different accuracy settings, and may "
-"send different information. The use of external devices such as GPS or "
-"mobile phone will increase the accuracy of the information sent."
-msgstr ""
-"Verschiedene Arten von Netzwerken haben unterschiedliche "
-"Genauigkeitseinstellungen und senden daher verschiedene Informationen. Die "
-"Benutzung externer Geräte wie GPS oder Mobiltelefone erhöht die Genauigkeit "
-"der gesendeten Informationen."
-
-#: C/geolocation-privacy.page:49(section/p)
-msgid ""
-"When the privacy mode is enabled, nothing more precise than your city will "
-"be sent, even if you are using an external device."
-msgstr ""
-"Wenn der Privatsphäre-Modus aktiviert ist, wird nichts Genaueres als "
-"lediglich Angaben über die Stadt gesendet, in der Sie sich befinden, selbst "
-"dann, wenn Sie ein externes Gerät verwenden."
-
-#: C/geolocation-privacy.page:56(section/title)
-msgid "Who can see the information sent"
-msgstr "Wer die gesendeten Informationen sehen kann"
-
-#: C/geolocation-privacy.page:57(section/p)
-msgid "Only your contacts can see your geographical position."
-msgstr "Nur Ihre Kontakte können Ihre geografische Position sehen."
-
-#: C/geolocation-privacy.page:63(section/title)
-msgid "What is the privacy mode"
-msgstr "Datenschutzmodus"
-
-#: C/geolocation-privacy.page:64(section/p)
-msgid ""
-"The privacy mode, enabled by default, is a reduced accuracy mode that will "
-"decrease the accuracy of the geographical position sent to your contacts."
-msgstr ""
-"Der per Vorgabe aktivierte Privatsphäre-Modus ist ein Modus mit verminderter "
-"Genauigkeit. Die Genauigkeit der zu Ihren Kontakten gesendeten geografischen "
-"Position wird dabei verringert."
-
-#: C/geolocation-privacy.page:71(section/title)
-msgid "Privacy overview"
-msgstr "Datenschutz-Überblick"
-
-#: C/geolocation-privacy.page:72(section/p)
-msgid ""
-"Overview of the various geolocation privacy settings in <app>Empathy</app>."
-msgstr ""
-"Überblick über die verschiedenen Privatsphäre-Einstellungen für die "
-"Geoposition in <app>Empathy</app>."
-
-#: C/geolocation-privacy.page:77(item/p)
-msgid "Geolocation is not enabled by default."
-msgstr "Geoposition ist per Vorgabe nicht aktiviert."
-
-#: C/geolocation-privacy.page:82(item/p)
-msgid "Privacy mode is enabled by default."
-msgstr "Der Datenschutzmodus ist per Vorgabe aktiviert."
-
-#: C/geolocation-privacy.page:87(item/p)
-msgid ""
-"Privacy mode prevails even when using external and more precise devices."
-msgstr ""
-"Der Privatsphäre-Modus ist auch dann wirksam, wenn externe und genauere "
-"Geräte benutzt werden."
-
-#: C/geolocation-privacy.page:92(item/p)
-msgid "Only your contacts can see your position."
-msgstr "Nur Ihre Kontakte können Ihre Position sehen."
-
-#: C/geolocation-supported.page:7(info/desc)
-msgid "Services that supports geolocation and compatibility."
-msgstr "Dienste, die Geoposition und Kompatibilität unterstützen."
-
-#: C/geolocation-supported.page:31(page/title)
-msgid "Supported services"
-msgstr "Unterstützte Dienste"
-
-#: C/geolocation-supported.page:33(page/p)
-msgid ""
-"The geolocation feature at the moment is compatible only with the Jabber "
-"service. In order to use it, you and your contacts need to have a Jabber "
-"account."
-msgstr ""
-"Gegenwärtig ist das Geolokation-Funktionsmerkmal ausschließlich mit dem "
-"Jabber-Dienst kompatibel. Um es nutzen zu können, müssen Sie und Ihre "
-"Kontakte über ein Jabber-Konto verfügen."
-
-#: C/geolocation-supported.page:39(note/p)
-msgid ""
-"It is necessary that also the server you are using supports the geolocation "
-"feature. Most of the Jabber servers support it. See your service website "
-"documentation for more information."
-msgstr ""
-"Es ist notwendig, dass auch der von Ihnen verwendete Server das Geoposition-"
-"Funktionsmerkmal unterstützt. Die meisten Jabber-Server tun dies. Weitere "
-"Informationen finden Sie auf der Webseite Ihres Dienstes."
-
-#: C/geolocation-supported.page:47(section/title)
-msgid "Compatibility"
-msgstr "Kompatibilität"
-
-#: C/geolocation-supported.page:49(section/p)
-msgid ""
-"<app>Empathy</app> geolocation feature is not compatible with other "
-"geographical position services such as <em>Google Latitude</em>, <em>Yahoo "
-"Fire Eagle</em> or <em>Brightkite</em>."
-msgstr ""
-"Das Geoposition-Funktionsmerkmal von <app>Empathy</app> ist nicht kompatibel "
-"mit anderen geografischen Ortungsdiensten wie <em>Google Latitude</em>, "
-"<em>Yahoo Fire Eagle</em> oder <em>Brightkite</em>."
-
-#: C/geolocation-turn.page:9(info/desc)
-msgid "How to activate and deactivate geolocation in <app>Empathy</app>."
-msgstr "Aktivierung und Deaktivierung der Geoposition in <app>Empathy</app>."
-
-#: C/geolocation-turn.page:33(page/title)
-msgid "Activate/Deactivate geolocation"
-msgstr "Aktivieren oder Deaktivieren der Geolokation"
-
-#: C/geolocation-turn.page:37(item/p)
-msgid "Choose <guiseq><gui>Edit</gui><gui>Preferences</gui></guiseq>."
-msgstr ""
-"Wählen Sie <guiseq><gui>Bearbeiten</gui><gui>Einstellungen</gui></guiseq>."
-
-#: C/geolocation-turn.page:42(item/p)
-msgid "Select the <gui>Location</gui> tab."
-msgstr "Wählen Sie den Reiter <gui>Ort</gui>."
-
-#: C/geolocation-turn.page:47(item/p)
-msgid ""
-"Select <gui>Publish location to my contacts</gui> to activate geolocation."
-msgstr ""
-"Wählen Sie <gui>Position an meine Kontakte übermitteln</gui>, um Geoposition "
-"zu aktivieren."
-
-#: C/geolocation-turn.page:50(item/p)
-msgid "To deactivate geolocation, deselect it."
-msgstr "Um Geoposition abzuschalten, deaktivieren Sie dies."
-
-#: C/geolocation-turn.page:55(item/p)
-msgid ""
-"To increase the accuracy of your position, deselect <gui>Reduce location "
-"accuracy</gui>."
-msgstr ""
-"Um die Genauigkeit Ihrer Position zu erhöhen, deaktivieren Sie "
-"<gui>Positionsgenauigkeit verringern</gui>."
-
-#: C/geolocation-turn.page:61(item/p)
-msgid ""
-"If you have an external device like a GPS or want to send a more accurate "
-"position, select the appropriate option in the <gui>Location sources</gui> "
-"section."
-msgstr ""
-"Falls Sie über ein externes Gerät verfügen, z.B. GPS, oder eine genauere "
-"Position senden wollen, wählen Sie die entsprechende Option im Abschnitt "
-"<gui>Positionsquellen</gui>."
-
-#: C/geolocation-what-is.page:9(info/desc)
-msgid "Understanding geolocation."
-msgstr "Erläuterungen zu Geoposition"
-
-#: C/geolocation-what-is.page:33(page/title)
-msgid "What is geolocation"
-msgstr "Was ist eine Geoposition?"
-
-#: C/geolocation-what-is.page:35(page/p)
-msgid ""
-"Geolocation allows you to identify the real geographical location of a "
-"computer or a device connected to the Internet."
-msgstr ""
-"Geoposition ermöglicht Ihnen die Ermittlung des wirklichen geografischen "
-"Ortes eines Rechners oder anderen Gerätes, welches mit dem Internet "
-"verbunden ist."
-
-#: C/geolocation-what-is.page:37(page/p)
-msgid "With geolocation in <app>Empathy</app> you can:"
-msgstr "Mit der Geoposition in <app>Empathy</app> können Sie:"
-
-#: C/geolocation-what-is.page:42(item/p)
-msgid "Publish your geographical location to your contacts."
-msgstr "Ihren Kontakten Ihre geografische Position anzeigen."
-
-#: C/geolocation-what-is.page:47(item/p)
-msgid "See your contacts’ geographical location and quickly contact them."
-msgstr ""
-"Die geografische Position Ihrer Kontakte sehen und direkt eine Verbindung "
-"herstellen."
-
-#: C/geolocation-what-is.page:52(item/p)
-msgid ""
-"Set the accuracy of your location and the device used to discover your "
-"location."
-msgstr ""
-"Die Genauigkeit Ihrer Position und das für die Ermittlung der Position "
-"verwendete Gerät sehen."
-
-#: C/geolocation-what-is.page:60(note/p)
-msgid ""
-"In order to see your contacts’ geographical locations, they need to use a "
-"service and an application that supports geolocation."
-msgstr ""
-"Um die geografische Position Ihrer Kontakte sehen zu können, müssen diese "
-"einen Dienst und eine Anwendung verwenden, die die Geoposition unterstützt."
-
-#: C/group-conversations.page:8(info/desc)
-msgid "Start or join a group conversation with your contacts."
-msgstr ""
-"Starten oder betreten Sie eine Gruppenunterhaltung mit Ihren Kontakten."
-
-#: C/group-conversations.page:34(page/title)
-msgid "Group conversations"
-msgstr "Gruppenunterhaltungen"
-
-#: C/group-conversations.page:36(page/p)
-msgid ""
-"Group conversations permits you to have text conversations with more than "
-"one contact at the same time."
-msgstr ""
-"Gruppenunterhaltungen ermöglichen Ihnen Textunterhaltungen mit mehreren "
-"Kontakten zugleich."
-
-#: C/group-conversations.page:40(page/p)
-msgid ""
-"To have a group conversation you need to have a registered account with "
-"either Jabber or Google Talk, or a People Nearby account."
-msgstr ""
-"Für eine Gruppenunterhaltung benötigen Sie ein registriertes Konto bei "
-"entweder Google Talk oder Jabber, oder ein »People Nearby«-Konto (»Personen "
-"in der Nähe«)."
-
-#: C/group-conversations.page:46(note/p)
-msgid ""
-"You can have a group conversation only with the contacts that are using the "
-"same service as yours."
-msgstr ""
-"Eine Gruppenunterhaltung können Sie nur mit denjenigen Kontakten führen, die "
-"den gleichen Dienst wie Sie verwenden."
-
-#: C/group-conversations.page:54(section/title)
-msgid "Start a group conversation"
-msgstr "Starten einer Gruppenunterhaltung"
-
-#: C/group-conversations.page:58(item/p)
-#: C/group-conversations.page:122(item/p) C/irc-join-room.page:39(item/p)
-msgid ""
-"From the <gui>Contact List</gui> window, choose <guiseq><gui>Room</"
-"gui><gui>Join</gui></guiseq>."
-msgstr ""
-"Wählen Sie im <gui>Kontaktlisten</gui>-Fenster <guiseq><gui>Raum</"
-"gui><gui>Betreten</gui></guiseq>."
-
-#: C/group-conversations.page:63(item/p)
-msgid ""
-"From the <gui>Account</gui> drop-down list, select the account you want to "
-"use for the group conversation."
-msgstr ""
-"Aus der <gui>Konto</gui>-Aufklappliste wählen Sie das Konto, welches Sie für "
-"die Gruppenunterhaltung verwenden wollen."
-
-#: C/group-conversations.page:69(item/p)
-msgid ""
-"In the <gui>Server</gui> text box, type the name of server in which the "
-"conversation will be hosted."
-msgstr ""
-"Geben Sie in das <gui>Server</gui>-Textfeld den Namen des Servers ein, auf "
-"dem die Unterhaltung stattfinden soll."
-
-#: C/group-conversations.page:73(item/p)
-msgid "Leave it empty if it will be on the current server."
-msgstr "Lassen Sie dies leer, wenn es sich um den aktuellen Server handelt."
-
-#: C/group-conversations.page:78(item/p)
-msgid ""
-"In the <gui>Room</gui> text box, type the name you want to give to the "
-"conversation."
-msgstr ""
-"Geben Sie in das <gui>Raum</gui>-Textfeld den Namen ein, den Sie der neuen "
-"Unterhaltung zuweisen wollen."
-
-#: C/group-conversations.page:82(note/p)
-msgid ""
-"This will be the name of the room you are going to have a conversation. This "
-"name will be publicly available for other people to join. It is not possible "
-"to create a private room."
-msgstr ""
-"Dies wird der Name des Raumes für die Unterhaltung sein. Dieser Name ist "
-"öffentlich für Andere einsehbar, um den Raum zu betreten. Es ist nicht "
-"möglich, einen privaten Raum zu erstellen."
-
-#: C/group-conversations.page:90(item/p)
-msgid ""
-"To invite other contacts to join the group conversation, from the "
-"<gui>Contact List</gui> window, select the contact you want to invite, and "
-"perform one of the following:"
-msgstr ""
-"Um im <gui>Kontaktlisten</gui>-Fenster andere Kontakte zur Teilnahme an "
-"einer Gruppenunterhaltung einzuladen, gehen Sie wie folgt vor:"
-
-#: C/group-conversations.page:97(item/p)
-msgid "Right-click on the contact and choose <gui>Invite to chatroom</gui>."
-msgstr ""
-"Klicken Sie mit der rechten Maustaste auf den Kontakt, und wählen Sie "
-"anschließend <gui>In Chatraum einladen</gui>."
-
-#: C/group-conversations.page:102(item/p)
-msgid ""
-"Choose <guiseq><gui>Edit</gui><gui>Contact</gui><gui>Invite to chatroom</"
-"gui></guiseq>."
-msgstr ""
-"Wählen Sie <guiseq><gui>Bearbeiten</gui><gui>Kontakt</gui><gui>In Chatraum "
-"einladen</gui></guiseq>."
-
-#: C/group-conversations.page:107(item/p)
-msgid ""
-"If you have more than one group conversation open, select the one you want "
-"to invite your contacts."
-msgstr ""
-"Falls Sie mehrere Gruppenunterhaltung geöffnet haben, wählen Sie diejenige "
-"aus, in welche Sie Ihre Kontakte einladen wollen."
-
-#: C/group-conversations.page:118(section/title)
-msgid "Join a group conversation"
-msgstr "Einer Gruppenunterhaltung beitreten"
-
-#: C/group-conversations.page:128(item/p)
-msgid "Expand the <gui>Room List</gui> section to see all the existing rooms."
-msgstr ""
-"Klappen Sie den Abschnitt <gui>Raumliste</gui> aus, um alle vorhandenen "
-"Räume anzuzeigen."
-
-#: C/group-conversations.page:133(item/p)
-msgid "Double-click on the name of a room to join it."
-msgstr "Klicken Sie doppelt auf den Namen eines Raums, um ihn zu betreten."
-
-#: C/group-conversations.page:139(section/p)
-msgid ""
-"It is not possible to join all existing rooms. Some of the rooms might "
-"require a password, or might be invitation only. <app>Empathy</app> does not "
-"support these kind of rooms."
-msgstr ""
-"Es ist nicht möglich, alle vorhandenen Räume zu betreten. Einige der Räume "
-"dürften ein Passwort wiederum können nur aufgrund einer Einladung betreten "
-"werden. <app>Empathy</app> unterstützt diese Art von Räumen nicht."
-
-#: C/hide-contacts.page:8(info/desc)
-msgid "Hide the offline contacts from your <gui>Contact List</gui>."
-msgstr "Verbergen von abgemeldeten Kontakten in Ihrer <gui>Kontaktliste</gui>."
-
-#: C/hide-contacts.page:19(page/title)
-msgid "Hide offline contacts"
-msgstr "Abgemeldete Kontakte verbergen"
-
-#: C/hide-contacts.page:21(page/p)
-msgid ""
-"Normally, <app>Empathy</app> shows all your contacts: those that are online, "
-"with which you can have a conversation, and also those that are offline."
-msgstr ""
-"Normalerweise zeigt <app>Empathy</app> alle Kontakte an: die angemeldeten "
-"Kontakte, mit denen Sie eine Unterhaltung führen können, und diejenigen "
-"Kontakte, die abgemeldet sind."
-
-#: C/hide-contacts.page:25(page/p)
-msgid "To hide the contacts that are offline:"
-msgstr "So verbergen Sie abgemeldete Kontakte:"
-
-#: C/hide-contacts.page:31(item/p)
-msgid ""
-"From the <gui>Contact List</gui> window, choose <guiseq><gui>View</gui> "
-"<gui>Offline Contacts</gui></guiseq>, or press <keyseq><key>Ctrl</key> "
-"<key>H</key></keyseq>."
-msgstr ""
-"Wählen Sie im <gui>Kontaktlisten</gui>-Fenster <guiseq><gui>Ansicht</gui> "
-"<gui>Abgemeldete Kontakte</gui></guiseq> oder drücken Sie <keyseq><key>Strg</"
-"key> <key>H</key></keyseq>."
-
-#: C/hide-contacts.page:36(item/p)
-msgid "To show the offline contacts again, repeat the same procedure above."
-msgstr ""
-"Um die abgemeldeten Kontakte wieder anzuzeigen, wiederholen Sie den oben "
-"beschriebenen Vorgang."
-
-#: C/import-account.page:10(info/desc)
-msgid "Import an account from another instant messaging application."
-msgstr ""
-"Importieren eines Kontos aus einer anderen Sofortnachrichten-Anwendung."
-
-#: C/import-account.page:19(credit/name)
-msgid "Peter Haslam"
-msgstr "Peter Haslam"
-
-#: C/import-account.page:42(page/title)
-msgid "Import an existing account"
-msgstr "Importieren eines vorhandenen Kontos"
-
-#: C/import-account.page:44(page/p)
-msgid ""
-"The first time you run <app>Empathy</app>, it will offer to import your "
-"accounts from other instant messaging applications. Currently, the only "
-"supported application is <app>Pidgin</app>."
-msgstr ""
-"Wenn Sie <app>Empathy</app> zum ersten Mal starten, wird Ihnen der Import "
-"von Konten aus anderen Sofortnachrichten-Anwendungen angeboten. Gegenwärtig "
-"wird als einzige Anwendung <app>Pidgin</app> unterstützt."
-
-#: C/import-account.page:50(item/p)
-msgid ""
-"Run <app>Empathy</app> for the first time. An assistant will offer you a "
-"number of options to create new accounts."
-msgstr ""
-"Wenn Sie <app>Empathy</app> zum ersten Mal ausführen, dann bietet Ihnen ein "
-"Assistent eine Reihe von Optionen zum Anlegen neuer Konten an."
-
-#: C/import-account.page:54(item/p)
-msgid ""
-"Select <gui>Yes, import my account details from</gui> and click "
-"<gui>Forward</gui>."
-msgstr ""
-"Wählen Sie <gui>Ja, meine Kontodetails importieren von</gui> und klicken Sie "
-"auf <gui>Weiter</gui>."
-
-#: C/import-account.page:58(item/p)
-msgid "Select the check box next to each account you wish to import."
-msgstr ""
-"Aktivieren Sie das Ankreuzfeld neben jedem Konto, das Sie importieren wollen."
-
-#: C/import-account.page:66(note/p)
-msgid ""
-"It is not currently possible to import accounts after you have completed the "
-"first-run assistant."
-msgstr ""
-"Gegenwärtig ist es nicht möglich, Konten zu importieren, nachdem der "
-"Einrichtungsassistent abgeschlossen ist."
-
-#. This is a reference to an external file such as an image or video. When
-#. the file changes, the md5 hash will change to let you know you need to
-#. update your localized copy. The msgstr is not used at all. Set it to
-#. whatever you like once you have updated your copy of the file.
-#: C/introduction.page:41(media)
-msgctxt "_"
-msgid ""
-"external ref='figures/empathy-main-window.png' "
-"md5='54908dcb2588beddb15ef0968d2c2582'"
-msgstr "ok"
-
-#: C/introduction.page:9(info/desc)
-msgid "Introduction to the <app>Empathy</app> instant messenger."
-msgstr "Einführung in den <app>Empathy</app>-Sofortnachrichtendienst."
-
-#: C/introduction.page:21(page/title)
-msgid "Introduction"
-msgstr "Einführung"
-
-#: C/introduction.page:23(page/p)
-msgid ""
-"<app>Empathy</app> is an instant messaging application for the GNOME "
-"Desktop. It supports text messaging, voice &amp; video calls, file "
-"transfers, and all the most used messaging systems such as MSN and Google "
-"Talk."
-msgstr ""
-"<app>Empathy</app> ist eine Sofortnachrichten-Anwendung für die GNOME-"
-"Arbeitsumgebung. Textnachrichten, Sprach- und Videoanrufe, "
-"Dateiübertragungen sowie alle gängigen Nachrichtensysteme wie MSN und "
-"GoogleTalk werden unterstützt."
-
-#: C/introduction.page:28(page/p)
-msgid ""
-"<app>Empathy</app> includes features that help you better collaborate while "
-"at work, and that let you easily keep in touch with your friends."
-msgstr ""
-"<app>Empathy</app> bietet Funktionsmerkmale, die Ihnen einerseits die "
-"berufliche Zusammenarbeit erleichtern, aber es auch ermöglichen, mit Ihren "
-"Freunden in Verbindung zu bleiben."
-
-#: C/introduction.page:32(page/p)
-msgid ""
-"Using <app>Empathy</app>, you can group all the conversations in a single "
-"window, have multiple windows for different kind of conversations, easily "
-"search through your previous conversations, and share your desktop in just "
-"two clicks."
-msgstr ""
-"In <app>Empathy</app> können Sie alle Unterhaltungen in einem einzigen "
-"Fenster anordnen oder mehrere Fenster für die verschiedenen Arten von "
-"Unterhaltungen verwenden, frühere Unterhaltungen durchsuchen und Ihre "
-"Arbeitsumgebung mit nur zwei Klicks freigeben."
-
-#: C/introduction.page:39(figure/title)
-msgid "<gui>Contact List</gui> window"
-msgstr "<gui>Kontaktlisten</gui>-Fenster"
-
-#: C/introduction.page:40(figure/desc)
-msgid "<app>Empathy</app> main window"
-msgstr "<app>Empathy</app>-Hauptfenster"
-
-#: C/introduction.page:42(media/p)
-msgid "<app>Empathy</app> main window."
-msgstr "<app>Empathy</app>-Hauptfenster."
-
-#: C/irc-commands.page:7(info/desc)
-msgid "The supported IRC commands."
-msgstr "Die unterstützten IRC-Befehle."
-
-#: C/irc-commands.page:18(page/title)
-msgid "Supported IRC commands"
-msgstr "Unterstützte IRC-Befehle"
-
-#: C/irc-commands.page:19(page/p)
-msgid ""
-"To see the list of the supported IRC commands, in a chat room type <input>/"
-"help</input> and press <key>Enter</key>."
-msgstr ""
-"Um eine Liste der unterstützten IRC-Befehle in einem Unterhaltungsraum zu "
-"sehen, geben Sie <input>/help</input> ein und drücken Sie die "
-"<key>Eingabetaste</key>."
-
-#: C/irc-commands.page:24(note/p)
-msgid "All commands available have a small description on their usage."
-msgstr "Alle Befehle verfügen über eine Kurzbeschreibung der Benutzung."
-
-#: C/irc-join-pwd.page:9(info/desc)
-msgid "Enter password-protected IRC chat rooms."
-msgstr "Betreten von passwortgeschützten Räumen im IRC"
-
-#: C/irc-join-pwd.page:25(page/title)
-msgid "Join a protected IRC chat room"
-msgstr "Betreten eines passwortgeschützten Raumes im IRC"
-
-#: C/irc-join-pwd.page:27(page/p)
-msgid ""
-"On some IRC networks, private IRC rooms may be protected with a password. If "
-"you know the password, use the following steps to join:"
-msgstr ""
-"In einigen IRC-Netzwerken können private IRC-Räume durch ein Passwort "
-"geschützt sein. Falls Sie das Passwort kennen, gehen Sie wie folgt vor, um "
-"den Raum zu betreten:"
-
-#: C/irc-join-pwd.page:33(item/p)
-msgid "<link xref=\"irc-join-room\">Join the room</link> as normal."
-msgstr "<link xref=\"irc-join-room\">Betreten Sie den Raum</link> wie gewohnt."
-
-#: C/irc-join-pwd.page:38(item/p)
-msgid ""
-"Empathy will prompt you for a password. Enter the password for the IRC chat "
-"room and click <gui style=\"button\">Join</gui>."
-msgstr ""
-"<app>Empathy</app> wird Sie nach einem Passwort fragen. Geben Sie das "
-"Passwort für den IRC-Raum ein und klicken Sie auf <gui style=\"button"
-"\">Beitreten</gui>."
-
-#: C/irc-join-room.page:8(info/desc)
-msgid "Join an IRC channel."
-msgstr "Betreten eines IRC-Kanals."
-
-#: C/irc-join-room.page:31(page/title)
-msgid "Join an IRC chat room"
-msgstr "Betreten eines IRC-Unterhaltungsraumes"
-
-#: C/irc-join-room.page:33(page/p)
-msgid ""
-"You can join IRC chat rooms (also known as IRC channels) on any IRC network "
-"you’re connected to. To connect to an IRC network, see <link xref=\"add-"
-"account\"/> and <link xref=\"account-irc\"/>."
-msgstr ""
-"Sie können IRC-Unterhaltungsräume (auch als IRC-Kanäle bekannt) in jedem IRC-"
-"Netzwerk betreten, mit dem Sie verbunden sind. Weitere Informationen hierzu "
-"finden Sie in <link xref=\"add-account\"/> und <link xref=\"account-irc\"/>."
-
-#: C/irc-join-room.page:45(item/p)
-msgid ""
-"From the <gui>Account</gui> drop-down list, select the IRC account that "
-"corresponds to the network you want to use."
-msgstr ""
-"Aus der <gui>Konto</gui>-Auswahlliste wählen Sie das IRC-Konto, das zu dem "
-"Netzwerk gehört, welches Sie verwenden wollen."
-
-#: C/irc-join-room.page:51(item/p)
-msgid ""
-"In the <gui>Room</gui> text box, type the name of the channel you want to "
-"join. IRC channel names start with the hash character (<sys>#</sys>)."
-msgstr ""
-"Geben Sie in das <gui>Raum</gui>-Textfeld den Namen des Channels ein, den "
-"Sie betreten wollen. Die Namen der IRC-Kanäle beginnen mit einem Raute-"
-"Zeichen (<sys>#</sys>)."
-
-#: C/irc-join-room.page:57(item/p)
-msgid "Click <gui>Join</gui> to enter the room."
-msgstr "Klicken Sie auf <gui>Betreten</gui>, um den Raum zu betreten."
-
-#: C/irc-join-room.page:64(note/p)
-msgid ""
-"To join multiple rooms, you need to repeat the steps above for each room."
-msgstr ""
-"Um mehrere Räume zu betreten, müssen Sie die oben genannten Schritte für "
-"jeden Raum wiederholen."
-
-#: C/irc-manage.page:9(info/desc)
-msgid "How to use IRC with <app>Empathy</app>."
-msgstr "Benutzung des IRC mit <app>Empathy</app>."
-
-#: C/irc-manage.page:23(credit/name)
-msgid "Sindhu S"
-msgstr "Sindhu S"
-
-#: C/irc-manage.page:39(page/title)
-msgid "Internet Relay Chat (IRC)"
-msgstr "Internet Relay Chat (IRC)"
-
-#: C/irc-manage.page:47(when/p)
-msgid ""
-"<link action=\"install:telepathy-idle\" xref=\"index\"> Install telepathy-"
-"idle</link>"
-msgstr ""
-"<link action=\"install:telepathy-idle\" xref=\"index\">telepathy-idle "
-"installieren</link>"
-
-#: C/irc-manage.page:55(info/title)
-msgctxt "link"
-msgid "IRC Chat Rooms and Conversations"
-msgstr "IRC-Räume und Unterhaltungen"
-
-#: C/irc-manage.page:57(section/title)
-msgid "Chat Rooms and Conversations"
-msgstr "Unterhaltungsräume und Unterhaltungen"
-
-#: C/irc-manage.page:62(info/title)
-msgctxt "link"
-msgid "Common IRC Problems"
-msgstr "Häufige Probleme im IRC"
-
-#: C/irc-nick-password.page:10(info/desc)
-msgid "Protect your nickname to prevent other IRC users from using it."
-msgstr ""
-"Schützen Sie Ihren Spitznamen, um zu verhindern, dass andere IRC-Benutzer "
-"ihn verwenden."
-
-#: C/irc-nick-password.page:33(page/title)
-msgid "Use a nickname password on IRC"
-msgstr "Verwenden eines Passworts für einen Spitznamen im IRC"
-
-#: C/irc-nick-password.page:35(page/p)
-msgid ""
-"On some IRC networks, you can register your nickname with a service called "
-"NickServ. By sending special messages to NickServ, you can set your password "
-"and identify yourself. Some IRC chat rooms may not allow you to join without "
-"a registered nickname."
-msgstr ""
-"In einigen IRC-Netzwerken können Sie Ihren Spitznamen mittels eines Dienstes "
-"namens NickServ registrieren. Durch spezielle Meldungen an NickServ können "
-"Sie Ihr Passwort festlegen und sich selbst identifizieren. Manche IRC-"
-"Unterhaltungsräume können Sie ohne einen registrierten Spitznamen nicht "
-"betreten."
-
-#: C/irc-nick-password.page:40(page/p)
-msgid ""
-"<app>Empathy</app> does not currently support nickname registration. Some "
-"IRC networks, however, will automatically forward a <em>server password</em> "
-"to NickServ. On these networks, you can use the IRC password in "
-"<app>Empathy</app> to identify yourself to NickServ. The popular freenode "
-"network is known to have this feature."
-msgstr ""
-"<app>Empathy</app> unterstützt gegenwärtig die Registrierung von Spitznamen "
-"nicht. Einige IRC-Netzwerke leiten jedoch automatisch ein "
-"<em>Serverpasswort</em> an NickServ weiter. In diesen Netzwerken können Sie "
-"das IRC-Passwort in <app>Empathy</app> verwenden, um sich bei NickServ zu "
-"identifizieren. Das populäre FreeNode-Netzwerk verfügt bekanntermaßen über "
-"dieses Funktionsmerkmal."
-
-#: C/irc-nick-password.page:46(page/p)
-msgid "To set an IRC server password:"
-msgstr "So legen Sie ein IRC-Serverpasswort fest:"
-
-#: C/irc-nick-password.page:54(item/p)
-msgid "Select the IRC account from the list on the left of the dialog."
-msgstr ""
-"Wählen Sie das IRC-Konto aus der Liste an der linken Seite des Dialogs aus."
-
-#: C/irc-nick-password.page:57(item/p)
-msgid ""
-"In the <gui>Password</gui> field, type the password you used to register "
-"your nikcname."
-msgstr ""
-"Geben Sie im Textfeld <gui>Passwort</gui> das Passwort ein, dass Sie bei der "
-"Registrierung Ihres Spitznamens verwendet haben."
-
-#: C/irc-nick-password.page:69(note/p)
-msgid ""
-"These instructions only allow you to use a password-protected nickname on "
-"certain IRC networks. It is not currently possible to register an IRC "
-"nickname or change your nickname password using <app>Empathy</app>."
-msgstr ""
-"Diese Anweisungen erlauben Ihnen lediglich die Verwendung eines "
-"passwortgeschützten Spitznamens in verschiedenen IRC-Netzwerken. Es ist "
-"gegenwärtig nicht möglich, mit <app>Empathy</app> einen IRC-Spitznamen zu "
-"registrieren oder das Passwort für Ihren Spitznamen zu ändern."
-
-#: C/irc-send-file.page:9(info/desc)
-msgid "<app>Empathy</app> does not currently support sending files using IRC."
-msgstr ""
-"Derzeit ist es nicht möglich, mit <app>Empathy</app> Dateien im IRC zu "
-"versenden."
-
-#: C/irc-send-file.page:31(page/title)
-msgid "Send files over IRC"
-msgstr "Dateien im IRC senden"
-
-#: C/irc-send-file.page:33(page/p)
-msgid "It is not currently possible to send files using IRC."
-msgstr "Derzeit ist es nicht möglich, Dateien im IRC zu versenden."
-
-#: C/irc-start-conversation.page:8(info/desc)
-msgid "Start a conversation with an IRC contact."
-msgstr "Eine Unterhaltung mit einem IRC-Kontakt starten."
-
-#: C/irc-start-conversation.page:30(page/title)
-msgid "Chat with somebody on IRC"
-msgstr "Eine Unterhaltung mit jemandem im IRC führen"
-
-#: C/irc-start-conversation.page:32(page/p)
-msgid ""
-"You can hold private conversations with other IRC users, outside of the "
-"public IRC chat rooms. To start a conversation with another IRC user:"
-msgstr ""
-"Sie können private Unterhaltungen mit anderen IRC-Benutzern außerhalb der "
-"öffentlichen IRC-Unterhaltungsräume führen. So beginnen Sie eine "
-"Unterhaltung mit einem anderen IRC-Benutzer:"
-
-#: C/irc-start-conversation.page:37(item/p)
-msgid ""
-"In the contact list for an IRC chat room, double click the name of the user "
-"you want to chat with. Alternatively, right click the name of the user and "
-"choose <gui>Chat</gui>."
-msgstr ""
-"Klicken Sie doppelt in der Kontaktliste für einen IRC-Unterhaltungsraum auf "
-"den Namen des Benutzers, mit dem Sie eine Unterhaltung führen wollen. "
-"Alternativ klicken Sie mit der rechten Maustaste auf den Spitznamen des "
-"Benutzers und wählen <gui>Unterhaltung</gui>."
-
-#: C/irc-start-conversation.page:45(item/p)
-msgid ""
-"The IRC room contact list is not the same as <app>Empathy</app> contact "
-"list. It contains a list of users in the IRC chat room you joined. Different "
-"rooms can have different contacts listed."
-msgstr ""
-"Die Kontaktliste in IRC-Unterhaltungsräumen ist nicht mit der Kontaktliste "
-"in <app>Empathy</app> vergleichbar. Sie enthält eine Liste von Benutzern des "
-"Raumes, den Sie betreten haben. Verschiedene Räume können unterschiedliche "
-"Kontaktlisten haben."
-
-#: C/irc-start-conversation.page:52(item/p)
-msgid ""
-"The IRC room contact list is usually on the right side of the IRC room "
-"window. If you do not see it, choose <guiseq><gui>Conversation</"
-"gui><gui>Show Contact List</gui></guiseq>."
-msgstr ""
-"Die Kontaktliste des IRC-Raumes befindet sich üblicherweise an der rechten "
-"Seite des IRC-Fensters. Falls sie nicht angezeigt wird, wählen Sie "
-"<guiseq><gui>Unterhaltung</gui><gui>Kontaktliste anzeigen</gui></guiseq>."
-
-#: C/license.page:8(info/desc)
-msgid "Legal information."
-msgstr "Rechtliche Hinweise."
-
-#: C/license.page:11(page/title)
-msgid "License"
-msgstr "Lizenz"
-
-#: C/license.page:12(page/p)
-msgid ""
-"This work is distributed under a CreativeCommons Attribution-Share Alike 3.0 "
-"Unported license."
-msgstr ""
-"Dieses Werk wird unter einer »CreativeCommons Attribution-Share Alike 3.0 "
-"Unported license« verbreitet."
-
-#: C/license.page:20(page/p)
-msgid "You are free:"
-msgstr "Es ist Ihnen gestattet:"
-
-#: C/license.page:25(item/title)
-msgid "<em>To share</em>"
-msgstr "<em>Freizugeben</em>"
-
-#: C/license.page:26(item/p)
-msgid "To copy, distribute and transmit the work."
-msgstr ""
-"Das Werk bzw. den Inhalt zu vervielfältigen, zu verbreiten und öffentlich "
-"zugänglich zu machen."
-
-#: C/license.page:29(item/title)
-msgid "<em>To remix</em>"
-msgstr "<em>Änderungen vorzunehmen</em>"
-
-#: C/license.page:30(item/p)
-msgid "To adapt the work."
-msgstr "Abwandlungen und Bearbeitungen des Werkes bzw. Inhaltes anzufertigen."
-
-#: C/license.page:33(page/p)
-msgid "Under the following conditions:"
-msgstr "Unter den folgenden Bedingungen:"
-
-#: C/license.page:38(item/title)
-msgid "<em>Attribution</em>"
-msgstr "<em>Weitergabe</em>"
-
-#: C/license.page:39(item/p)
-msgid ""
-"You must attribute the work in the manner specified by the author or "
-"licensor (but not in any way that suggests that they endorse you or your use "
-"of the work)."
-msgstr ""
-"Sie dürfen das Werk nur unter gleichen Bedingungen weitergeben, wie Sie vom "
-"Autor oder Lizenzgeber festgelegt wurden (aber nicht so, dass es wie Ihr "
-"Werk aussieht)."
-
-#: C/license.page:46(item/title)
-msgid "<em>Share Alike</em>"
-msgstr "<em>Share Alike</em>"
-
-#: C/license.page:47(item/p)
-msgid ""
-"If you alter, transform, or build upon this work, you may distribute the "
-"resulting work only under the same, similar or a compatible license."
-msgstr ""
-"Wenn Sie das lizenzierte Werk bzw. den lizenzierten Inhalt bearbeiten, "
-"abwandeln oder in anderer Weise erkennbar als Grundlage für eigenes Schaffen "
-"verwenden, dürfen Sie die daraufhin neu entstandenen Werke bzw. Inhalte nur "
-"unter Verwendung von Lizenzbedingungen weitergeben, die mit denen dieses "
-"Lizenzvertrages identisch, vergleichbar oder kompatibel sind."
-
-#: C/license.page:53(page/p)
-msgid ""
-"For the full text of the license, see the <link href=\"http://"
-"creativecommons.org/licenses/by-sa/3.0/legalcode\">CreativeCommons website</"
-"link>, or read the full <link href=\"http://creativecommons.org/licenses/by-"
-"sa/3.0/\">Commons Deed</link>."
-msgstr ""
-"Den vollständigen Text der Lizenz finden sie auf der <link href=\"http://"
-"creativecommons.org/licenses/by-sa/3.0/legalcode\">CreativeCommons-Webseite</"
-"link>. Oder Sie können den vollständigen <link href=\"http://creativecommons."
-"org/licenses/by-sa/3.0/\">Commons Deed</link> lesen."
-
-#: C/link-contacts.page:11(info/desc)
-msgid "Merge and separate different contacts into a single one."
-msgstr ""
-"Verschiedene Kontakte in einen einzigen zusammenführen oder diese aufteilen."
-
-#: C/link-contacts.page:19(credit/name)
-msgid "Shobha Tyagi"
-msgstr "Shobha Tyagi"
-
-#: C/link-contacts.page:29(page/title)
-msgid "Link and unlink contacts"
-msgstr "Kontakte verknüpfen und trennen"
-
-#: C/link-contacts.page:30(page/p)
-msgid ""
-"If one or more of your contacts has multiple accounts with different "
-"messaging services, you can combine these accounts into a single contact."
-msgstr ""
-"Wenn ein oder mehrere Kontakte mehrere Konten bei unterschiedlichen "
-"Nachrichtendiensten haben, so können Sie diese Kontakte in einen einzigen "
-"zusammenlegen."
-
-#: C/link-contacts.page:34(page/p)
-msgid ""
-"The resulting contact is called a <em>meta-contact</em>: a contact composed "
-"from different single contacts."
-msgstr ""
-"Der entstehende Kontakt wird als <em>Meta-Kontakt</em> bezeichnet: Ein "
-"Kontakt, der aus unterschiedlichen einzelnen Kontakten gebildet wird."
-
-#: C/link-contacts.page:38(page/p)
-msgid ""
-"Suppose you have a contact called Jane Smith who is using three different "
-"messaging services like:"
-msgstr ""
-"Wenn Sie einen Kontakt »Janina Schmitt« haben, der drei verschiedene "
-"Nachrichtendienste verwende, wie z.B.:"
-
-#: C/link-contacts.page:44(item/p)
-msgid "janes@facebook"
-msgstr "janinas@facebook"
-
-#: C/link-contacts.page:49(item/p)
-msgid "jane.smith@gmail"
-msgstr "Janina Schmitt@gmail"
-
-#: C/link-contacts.page:54(item/p)
-msgid "jane_smith@hotmail"
-msgstr "Janina_Schmitt@hotmail"
-
-#: C/link-contacts.page:59(page/p)
-msgid "You can combine these contacts into a single Jane Smith one."
-msgstr "Dann können Sie diese Kontakte in einen einzigen zusammenlegen."
-
-#: C/link-contacts.page:63(section/title)
-msgid "Link contacts"
-msgstr "Kontakte zusammenlegen"
-
-#: C/link-contacts.page:64(section/p)
-msgid "The way you can link your contacts is as follows:"
-msgstr "So können Sie Ihre Kontakte zusammen legen:"
-
-#: C/link-contacts.page:69(item/p)
-msgid ""
-"Press the tick button to select entries you want to link. This will enable "
-"<em>selection mode</em> and you can see a checkbox for each entry."
-msgstr ""
-"Klicken Sie auf den Auswahl-Knopf, um Einträge zum Verknüpfen zu wählen. "
-"Damit wird der <em>Auswahl-Modus</em> aktiviert und es erscheinen "
-"Ankreuzfelder für jeden Eintrag."
-
-#: C/link-contacts.page:75(item/p)
-msgid ""
-"Tick the checkboxes that correspond to the <app>Contacts</app> entries which "
-"belong to the same contact."
-msgstr ""
-"Wählen Sie die Ankreuzfelder aus, die zu den Einträgen des selben "
-"<app>Kontakts</app> gehören. "
-
-#: C/link-contacts.page:81(item/p)
-msgid "Press <gui style=\"button\">Link</gui>."
-msgstr "Klicken Sie auf <gui style=\"button\">Verknüpfen</gui>."
-
-#: C/link-contacts.page:86(section/p)
-msgid "Repeat steps 3 and 4 in order to link other contacts."
-msgstr ""
-"Wiederholen Sie die Schritte 3 und 4, um weitere Kontakte zusammen zu legen."
-
-#: C/link-contacts.page:92(section/title)
-msgid "Unlink contacts"
-msgstr "Kontaktverknüpfungen lösen"
-
-#: C/link-contacts.page:93(section/p)
-msgid "To unlink a linked contact:"
-msgstr "So trennen Sie einen verknüpften Kontakt:"
-
-#: C/link-contacts.page:98(item/p)
-msgid "Select the contact from your list."
-msgstr "Wählen Sie den Kontakt aus Ihrer Liste aus."
-
-#: C/link-contacts.page:103(item/p)
-msgid ""
-"Press <gui style=\"button\">Edit</gui> in the top-right corner of "
-"<app>Contacts</app>."
-msgstr ""
-"Klicken Sie auf <gui style=\"button\">Bearbeiten</gui> in der oberen rechten "
-"Ecke von <app>Kontakte</app>."
-
-#: C/link-contacts.page:108(item/p)
-msgid "Press <gui style=\"button\">Linked Contacts</gui>."
-msgstr "Klicken Sie auf <gui style=\"button\">Verknüpfte Kontakte</gui>."
-
-#: C/link-contacts.page:113(item/p)
-msgid ""
-"Press <gui style=\"button\">Remove</gui> to unlink an entry from the linked "
-"contact."
-msgstr ""
-"Klicken Sie auf <gui style=\"button\">Entfernen</gui>, um einen Eintrag vom "
-"verknüpften Kontakt zu lösen."
-
-#: C/link-contacts.page:118(item/p)
-msgid ""
-"Press <gui style=\"button\">Close</gui> if you do not want to unlink any "
-"more contacts."
-msgstr ""
-"Klicken Sie auf <gui style=\"button\">Schließen</gui>, sobald Sie keine "
-"weiteren Kontaktverknüpfungen aufheben wollen."
-
-#: C/link-contacts.page:123(item/p)
-msgid "Finally, press <gui style=\"button\">Done</gui> to finish editing."
-msgstr ""
-"Klicken Sie zum Schluss auf <gui style=\"button\">Fertig</gui>, um die "
-"Bearbeitung abzuschließen."
-
-#. This is a reference to an external file such as an image or video. When
-#. the file changes, the md5 hash will change to let you know you need to
-#. update your localized copy. The msgstr is not used at all. Set it to
-#. whatever you like once you have updated your copy of the file.
-#: C/overview.page:38(media)
-msgctxt "_"
-msgid ""
-"external ref='figures/video_overview.png' "
-"md5='6cfcfbd833bf2234537d402185c40596'"
-msgstr "original"
-
-#. This is a reference to an external file such as an image or video. When
-#. the file changes, the md5 hash will change to let you know you need to
-#. update your localized copy. The msgstr is not used at all. Set it to
-#. whatever you like once you have updated your copy of the file.
-#: C/overview.page:39(media)
-msgctxt "_"
-msgid ""
-"external ref='figures/conf_overview.png' "
-"md5='74c58668fe89c84060f12f6b70a6b903'"
-msgstr "original"
-
-#. This is a reference to an external file such as an image or video. When
-#. the file changes, the md5 hash will change to let you know you need to
-#. update your localized copy. The msgstr is not used at all. Set it to
-#. whatever you like once you have updated your copy of the file.
-#: C/overview.page:40(media)
-msgctxt "_"
-msgid ""
-"external ref='figures/croom_overview.png' "
-"md5='e9619d2c8420bc48a880c03dbc1ae084'"
-msgstr "original"
-
-#: C/overview.page:9(info/desc)
-msgid "What instant messaging is and how you can use it."
-msgstr "Was sind Sofortnachrichten und wie können Sie diese nutzen."
-
-#: C/overview.page:13(credit/name)
-msgid "Aruna S"
-msgstr "Aruna S"
-
-#: C/overview.page:25(page/title)
-msgid "Overview of instant messaging"
-msgstr "Überblick über Sofortnachrichten"
-
-#: C/overview.page:27(page/p)
-msgid ""
-"Instant messaging, sometimes abbreviated to IM, is a text-based means to "
-"communicate instantly over the internet and the local network. While some IM "
-"applications work with only one type of account, others, including <link "
-"xref=\"introduction\">Empathy</link>, provide IM facilities by using <link "
-"xref=\"add-account\">accounts</link> from different service providers. Some "
-"of these even support audio and video calling."
-msgstr ""
-"Sofortnachrichten, manchmal abgekürzt »IM« von Instant Messaging, ist eine "
-"textbasierte Kommunikationsmöglichkeit, um Nachrichten ohne Verzögerung über "
-"das Internet oder ein lokales Netzwerk zu senden. Während einige Anwendungen "
-"für Sofortnachrichten nur mit einer bestimmten Art von Konten funktionieren, "
-"können andere, wie <link xref=\"introduction\">Empathy</link>, auch <link "
-"xref=\"add-account\">Konten</link> von verschiedenen Anbietern nutzen. "
-"Einige unterstützen auch Sprach- und Videoanrufe."
-
-#: C/overview.page:43(td/p)
-msgid "Video Conference"
-msgstr "Videokonferenz"
-
-#: C/overview.page:44(td/p)
-msgid "Group chats"
-msgstr "Gruppenunterhaltungen"
-
-#: C/overview.page:45(td/p)
-msgid "Chat rooms"
-msgstr "Unterhaltungsräume"
-
-#: C/overview.page:49(page/p)
-msgid ""
-"Some instant messaging applications can be used to connect to chat rooms, "
-"online places where like-minded people meet to talk. One popular means to "
-"connect to several chat rooms is the Internet Relay Chat, also known as "
-"<link xref=\"irc-manage\">IRC</link>. IRC provides <link xref=\"irc-join-room"
-"\">public</link> chat rooms, which are open to anyone who creates an account "
-"on the IRC Server, and private chat rooms, which are <link xref=\"irc-join-"
-"pwd\">password protected</link> and open only to a select few."
-msgstr ""
-"Einige Anwendungen für Sofortnachrichten können genutzt werden, um sich mit "
-"Unterhaltungsräumen zu verbinden, also virtuellen Plätzen, wo sich Personen "
-"treffen, um sich zu unterhalten. Eine beliebte Technik für "
-"Unterhaltungsräume ist der »Internet Relay Chat«, auch als <link xref=\"irc-"
-"manage\">IRC</link> bekannt. IRC stellt <link xref=\"irc-join-room"
-"\">öffentliche</link> Unterhaltungsräume bereit, bei der sich jeder, der ein "
-"Konto auf dem IRC-Server erstellt, anmelden kann, und private "
-"Unterhaltungsräume, welche <link xref=\"irc-join-pwd\">passwortgeschützt</"
-"link> und nur für ausgewählte Personen offen sind."
-
-#: C/prev-conv.page:8(info/desc)
-msgid "Browse or search your previous conversations."
-msgstr "Betrachten und Durchsuchen Ihrer früheren Unterhaltungen."
-
-#: C/prev-conv.page:36(page/title)
-msgid "View previous conversations"
-msgstr "Vorherige Unterhaltungen anschauen"
-
-#: C/prev-conv.page:38(page/p)
-msgid ""
-"<app>Empathy</app> automatically saves all your text conversations you have "
-"with your contacts. You can <link xref=\"#search\">search through all of "
-"your previous conversations</link> or <link xref=\"#browse\">browse previous "
-"conversations</link> by contact and date."
-msgstr ""
-"<app>Empathy</app> speichert automatisch alle Ihre Text-Unterhaltungen, die "
-"Sie mit Ihren Kontakten führen. Sie können <link xref=\"#search\">alle "
-"früheren Unterhaltungen durchsuchen</link> oder <link xref=\"#browse"
-"\">frühere Unterhaltungen anhand Kontakt und Datum suchen</link>."
-
-#: C/prev-conv.page:46(note/p)
-msgid ""
-"You do not need to be connected to the Internet to view and search your "
-"previous conversations."
-msgstr ""
-"Sie müssen nicht mit dem Internet verbunden sein, um Ihre vorherigen "
-"Unterhaltungen zu betrachten und zu durchsuchen."
-
-#: C/prev-conv.page:53(section/title)
-msgid "Search previous conversations"
-msgstr "Vorherige Unterhaltungen durchsuchen"
-
-#: C/prev-conv.page:55(section/p)
-msgid ""
-"You can perform a full-text search through all of your previous "
-"conversations."
-msgstr ""
-"Sie können den Volltext aller Ihrer vorherigen Unterhaltungen durchsuchen."
-
-#: C/prev-conv.page:59(item/p) C/prev-conv.page:87(item/p)
-msgid ""
-"From the <gui>Contact List</gui> window, choose <guiseq><gui>View</gui> "
-"<gui>Previous Conversations</gui></guiseq>. Alternatively, press <key>F3</"
-"key>."
-msgstr ""
-"Wählen Sie im <gui>Kontaktlisten</gui>-Fenster <guiseq><gui>Ansicht</gui> "
-"<gui>Vorherige Unterhaltungen</gui></guiseq>. Alternativ drücken Sie "
-"<key>F3</key>."
-
-#: C/prev-conv.page:63(item/p)
-msgid ""
-"Select an account from the drop-down list in the top. A list of contacts and "
-"chat room for that account will be shown below."
-msgstr ""
-"Wählen Sie ein Konto in der Auswahlliste oben. Eine Liste der Kontakte und "
-"Unterhaltungsräume für dieses Konto wird darunter angezeigt."
-
-#: C/prev-conv.page:67(item/p)
-msgid ""
-"Type the text you want to search for in the <gui>Search</gui> text field."
-msgstr "Geben Sie den zu suchenden Text im <gui>Suchfeld</gui> ein."
-
-#: C/prev-conv.page:71(item/p)
-msgid ""
-"Any conversations that matched your search terms will be shown. By default, "
-"conversations are ordered by date."
-msgstr ""
-"Jegliche Unterhaltungen, die auf Ihre Suchbegriffe zutreffen, werden in der "
-"Liste unterhalb des Suchfeldes angezeigt. Per Vorgabe sind die "
-"Unterhaltungen nach Datum geordnet."
-
-#: C/prev-conv.page:80(section/title)
-msgid "Browse previous conversations"
-msgstr "Vorherige Unterhaltungen betrachten"
-
-#: C/prev-conv.page:82(section/p)
-msgid ""
-"You can browse your previous conversations with your contacts or in chat "
-"rooms by date."
-msgstr ""
-"Sie können Ihre früheren Unterhaltungen mit Ihren Kontakten oder in "
-"Unterhaltungsräumen anhand des Datums durchsuchen."
-
-#: C/prev-conv.page:91(item/p)
-msgid ""
-"Select an account from the drop-down list in the top left. A list of "
-"contacts and chat room for that account will be shown below."
-msgstr ""
-"Wählen Sie ein Konto in der Auswahlliste oben links. Eine Liste der Kontakte "
-"und Unterhaltungsräume für dieses Konto wird darunter angezeigt."
-
-#: C/prev-conv.page:95(item/p)
-msgid ""
-"Select a contact or chat room to view your previous conversations from. By "
-"default the most recent conversation will be shown."
-msgstr ""
-"Wählen Sie einen Kontakt oder Unterhaltungsraum, um dessen frühere "
-"Unterhaltungen zu betrachten. Per Vorgabe wird die letzte Unterhaltung "
-"angezeigt."
-
-#: C/prev-conv.page:99(item/p)
-msgid ""
-"You can browse your conversations by date. Days on which you had a "
-"conversation with the selected contact will be shown in bold text. Click a "
-"date to select it. Click the arrows next to the month and year to browse "
-"earlier dates."
-msgstr ""
-"Sie können Ihre Unterhaltungen anhand des Datums durchsuchen. Die Tage, an "
-"denen Sie eine Unterhaltung mit dem ausgewählten Kontakt geführt haben, "
-"werden fett hervorgehoben. Klicken Sie auf ein Datum, um es auszuwählen. "
-"Klicken Sie auf die Pfeile neben den Monats- und Jahresangaben, um zu "
-"früheren Daten zu gehen."
-
-#: C/prev-conv.page:105(section/p)
-msgid ""
-"You can search for text in the conversations by typing into the search field "
-"at the top. The matching conversations will be showed."
-msgstr ""
-"Sie können nach Text in den Unterhaltungen suchen, indem Sie ihn in das "
-"Suchfeld oben eingeben. Die damit übereinstimmenden unterhaltungen werden "
-"hervorgehoben."
-
-#: C/prev-conv.page:111(note/p)
-msgid ""
-"You can quickly view the previous conversations with one of your contacts "
-"from the <gui>Contact List</gui> window. Simply right click the contact and "
-"choose <gui>Previous Conversations</gui>. The <gui>Previous Conversations</"
-"gui> window will open with that contact already selected."
-msgstr ""
-"Im <gui>Kontaktlisten</gui>-Fenster können Sie schnell die früheren "
-"Unterhaltungen mit einem Ihrer Kontakte betrachten. Klicken Sie einfach mit "
-"der rechten Maustaste auf den Kontakt und wählen Sie <gui>Vorherige "
-"Unterhaltungen anschauen</gui>. Das Fenster <gui>Vorherige Unterhaltungen</"
-"gui> für den bereits ausgewählten Kontakt wird geöffnet."
-
-#: C/prob-conn-acctdisabled.page:7(info/desc)
-msgid ""
-"The instant messaging account that you want to use is not enabled in the "
-"list of accounts."
-msgstr ""
-"Das Sofortnachrichten-Konto, welches Sie verwenden wollen, ist in der "
-"Kontenliste nicht aktiviert."
-
-#: C/prob-conn-acctdisabled.page:34(page/title)
-msgid "My account is not enabled"
-msgstr "Mein Konto ist nicht aktiviert"
-
-#: C/prob-conn-acctdisabled.page:36(page/p)
-msgid ""
-"If the instant messaging account that you want to use is not enabled in the "
-"drop-down account list when you try to start a new conversation or join a "
-"room, your account details may not be correct."
-msgstr ""
-"Falls das zu verwendende Sofortnachrichten-Konto in der Auswahlliste nicht "
-"aktiviert ist, wenn Sie eine neue Unterhaltung starten oder einen Raum "
-"betreten wollen, könnten Ihre Kontendetails eventuell nicht korrekt sein."
-
-#: C/prob-conn-acctdisabled.page:44(item/p) C/prob-conn-auth.page:46(item/p)
-#: C/prob-conn-neterror.page:54(item/p)
-msgid ""
-"Make sure that you are connected to the Internet, or to a local area network."
-msgstr ""
-"Stellen Sie sicher, dass Sie mit dem Internet beziehungsweise mit einem "
-"lokalen Netzwerk verbunden sind."
-
-#: C/prob-conn-acctdisabled.page:49(item/p)
-msgid ""
-"Choose <guiseq><gui>Edit</gui><gui>Accounts</gui></guiseq> and select the "
-"account that is not working."
-msgstr ""
-"Wählen Sie <guiseq><gui>Bearbeiten</gui><gui>Konten</gui></guiseq> und "
-"wählen Sie den nicht funktionierenden Kontakt aus."
-
-#: C/prob-conn-acctdisabled.page:55(item/p) C/prob-conn-auth.page:62(item/p)
-msgid ""
-"Type your username and password again to make sure that they are correct."
-msgstr ""
-"Geben sie Ihren Benutzernamen und Ihr Passwort erneut ein, um sicher zu "
-"stellen, dass diese korrekt sind."
-
-#: C/prob-conn-acctdisabled.page:60(item/p)
-#: C/prob-conn-neterror.page:63(item/p)
-msgid ""
-"Check in the <gui>Advanced</gui> section that all the details are correct. "
-"You should be able to find these details from the website of the messaging "
-"service."
-msgstr ""
-"Überprüfen Sie im Abschnitt <gui>Fortgeschritten</gui>, dass alle Details "
-"korrekt sind. Es sollte möglich sein, diese Details auf der Webseite des "
-"jeweiligen Sofortnachrichtendienstes zu finden."
-
-#: C/prob-conn-acctdisabled.page:66(item/p)
-msgid "Check that the account is switched on."
-msgstr "Überprüfen Sie, ob das Konto eingeschaltet ist."
-
-#: C/prob-conn-auth.page:9(info/desc)
-msgid ""
-"An error message which says “<gui>Authentication failed</gui>” appears in "
-"the main window."
-msgstr ""
-"Eine Fehlermeldung »<gui>Legitimierung fehlgeschlagen</gui>« erscheint im "
-"Hauptfenster."
-
-#: C/prob-conn-auth.page:37(page/title)
-msgid "I get a message that says “Authentication failed”"
-msgstr "Eine Meldung zeigt »Legitimierung fehlgeschlagen« an"
-
-#: C/prob-conn-auth.page:39(page/p)
-msgid ""
-"This kind of error happens when your instant messaging service is not "
-"allowing you to connect because it does not recognize your username or "
-"password for some reason."
-msgstr ""
-"Dieser Fehler geschieht, wenn Ihr Sofortnachrichtendienst keine Verbindung "
-"erlaubt, weil Benutzername oder Passwort aus verschiedenen Gründen nicht "
-"akzeptiert werden konnten."
-
-#: C/prob-conn-auth.page:51(item/p)
-msgid ""
-"Make sure that you have registered an account with the service you are "
-"trying to connect to. If you do not have an account, most services will not "
-"allow you to connect."
-msgstr ""
-"Stellen Sie sicher, dass Sie bei dem Dienst ein Konto registriert haben, mit "
-"dem Sie sich verbinden wollen. Falls Sie über kein Konto verfügen, "
-"verweigern die meisten Dienste die Verbindung."
-
-#: C/prob-conn-auth.page:58(media/span) C/prob-conn-name.page:44(media/span)
-#: C/prob-conn-neterror.page:59(media/span)
-msgid "edit"
-msgstr "Bearbeiten"
-
-#: C/prob-conn-auth.page:58(item/p) C/prob-conn-name.page:44(item/p)
-#: C/prob-conn-neterror.page:59(item/p)
-msgid "Click the <_:media-1/> icon in the error message."
-msgstr "Klicken Sie auf das Symbol <_:media-1/> in der Fehlernachricht."
-
-#: C/prob-conn-auth.page:67(item/p)
-msgid ""
-"Deselect the <gui>Enabled</gui>, and then select it again to try to "
-"reconnect to the service."
-msgstr ""
-"Deaktivieren Sie das Ankreuzfeld <gui>Aktiviert</gui> und aktivieren Sie es "
-"erneut, um einen neuen Verbindungsversuch zu starten."
-
-#: C/prob-conn-name.page:10(info/title)
-msgctxt "link:error-msg"
-msgid "“Name in use”"
-msgstr "»Name bereits in Verwendung«"
-
-#: C/prob-conn-name.page:11(info/desc)
-msgid ""
-"An error message which says “<gui>Name in use</gui>” appears in the main "
-"window."
-msgstr ""
-"Eine Fehlermeldung »<gui>Name bereits in Benutzung</gui>« erscheint im "
-"Hauptfenster."
-
-#: C/prob-conn-name.page:34(page/title)
-msgid "I get a message that says “Name in use”"
-msgstr "Eine Meldung zeigt »Name bereits in Benutzung« an"
-
-#: C/prob-conn-name.page:36(page/p)
-msgid ""
-"This kind of error happens when you try to connect to your IRC account and "
-"you are using a nickname that is already being used by someone else on that "
-"particular network."
-msgstr ""
-"Dieser Fehler tritt auf, wenn Sie sich mit Ihrem IRC-Konto verbinden wollen "
-"und Sie einen Spitznamen verwenden wollen, den in diesem bestimmten Netzwerk "
-"bereits jemand anders gewählt hat."
-
-#: C/prob-conn-name.page:50(item/p)
-msgid "In the <gui>Nickname</gui> text box, type a new nickname."
-msgstr ""
-"Geben Sie in das <gui>Spitzname</gui>-Textfeld einen neuen Spitznamen ein."
-
-#: C/prob-conn-name.page:55(item/p)
-msgid ""
-"If you have registered that nickname within the network you are using, set "
-"the password for that nickname. For more information, see <link xref=\"irc-"
-"nick-password\"/>."
-msgstr ""
-"Falls Sie diesen Spitznamen in dem von Ihnen verwendeten Netzwerk "
-"registriert haben, legen Sie für diesen Spitznamen ein Passwort fest. "
-"Weitere Informationen hierzu finden Sie in <link xref=\"irc-nick-password\"/"
-">."
-
-#: C/prob-conn-name.page:64(item/p) C/prob-conn-neterror.page:78(item/p)
-msgid ""
-"Switch the account off, and then switch it on to try to reconnect to the "
-"service."
-msgstr ""
-"Deaktivieren Sie das Konto und aktivieren Sie es erneut, um einen neuen "
-"Verbindungsversuch zu starten."
-
-#: C/prob-conn-neterror.page:8(info/desc)
-msgid ""
-"An error message which says “<gui>Network error</gui>” appears in the main "
-"window."
-msgstr ""
-"Eine Fehlermeldung mit dem Text »<gui>Netzwerkfehler</gui>« erscheint im "
-"Hauptfenster."
-
-#: C/prob-conn-neterror.page:35(page/title)
-msgid "I get a message that says “Network error”"
-msgstr "Eine Meldung zeigt einen »Netzwerkfehler« an"
-
-#: C/prob-conn-neterror.page:43(page/p)
-msgid ""
-"This kind of error happens when <app>Empathy</app> cannot communicate with "
-"the instant messaging service for some reason."
-msgstr ""
-"Dieser Fehler tritt auf, wenn <app>Empathy</app> aus irgendeinem Grund nicht "
-"in der Lage ist, mit dem Sofortnachrichtendienst zu kommunizieren."
-
-#: C/prob-conn-neterror.page:47(page/p)
-msgid ""
-"Also, this kind of error happens when you try to use an IRC account without "
-"setting a nickname."
-msgstr ""
-"Dieser Fehler tritt auch auf, wenn Sie ein IRC-Konto verwenden wollen, ohne "
-"einen Spitznamen festzulegen."
-
-#: C/prob-conn-neterror.page:86(section/title)
-msgid "Proxy support"
-msgstr "Proxy-Unterstützung"
-
-#: C/prob-conn-neterror.page:87(section/p)
-msgid ""
-"At the moment <app>Empathy</app> can not be configured to work with a proxy."
-msgstr ""
-"Momentan ist es nicht möglich, <app>Empathy</app> so zu konfigurieren, dass "
-"es mit einem Proxy-Server zusammenarbeitet."
-
-#: C/prob-conn.page:7(info/desc)
-msgid "Diagnose common problems connecting to an instant messaging service."
-msgstr ""
-"Diagnostizieren häufiger Verbindungsprobleme mit einem "
-"Sofortnachrichtendienst."
-
-#: C/prob-conn.page:29(page/title)
-msgid "Problems connecting to an instant messaging service"
-msgstr "Probleme beim Verbinden zu einem Sofortnachrichtendienst"
-
-#: C/remove-account.page:8(info/desc)
-msgid "Completely remove an account from <app>Empathy</app>."
-msgstr "Ein Konto vollständig aus <app>Empathy</app> löschen."
-
-#: C/remove-account.page:34(page/title)
-msgid "Remove an account"
-msgstr "Löschen eines Kontos"
-
-#: C/remove-account.page:36(page/p)
-msgid ""
-"You can completely remove an account from <app>Empathy</app> if you no "
-"longer wish to use the account. If you wish to use the account in "
-"<app>Empathy</app> again in the future, you will have to add your account "
-"details again."
-msgstr ""
-"Sie können ein Konto aus <app>Empathy</app> vollständig löschen, falls Sie "
-"dieses nicht mehr benutzen wollen. Sollten Sie in Zukunft dieses Konto in "
-"<app>Empathy</app> erneut nutzen wollen, dann müssen Sie die Kontendetails "
-"erneut eingeben."
-
-#: C/remove-account.page:47(item/p)
-msgid ""
-"Select the account you wish to remove from the accounts list on the left "
-"side of the window."
-msgstr ""
-"Wählen Sie das Konto, das Sie aus der Kontenliste entfernen wollen, an der "
-"linken Seite des Fensters aus."
-
-#: C/remove-account.page:51(item/p)
-msgid "Click <gui style=\"button\">-</gui>."
-msgstr "Klicken Sie auf <gui style=\"button\">-</gui>."
-
-#: C/remove-account.page:54(item/p)
-msgid ""
-"A dialog will be shown asking for confirmation. Click the <gui>Remove</gui> "
-"button to permanently remove the account."
-msgstr ""
-"Ein Dialogfenster bittet darum, den Vorgang zu bestätigen. Klicken Sie auf "
-"den Knopf <gui>Entfernen</gui>, um das Konto dauerhaft zu entfernen."
-
-#: C/remove-account.page:60(note/p)
-msgid ""
-"Even after removing an account, <app>Empathy</app> does not delete your "
-"conversation history for that account."
-msgstr ""
-"Auch nach dem Entfernen des Kontos löscht <app>Empathy</app> nicht die zu "
-"diesem Konto gehörenden Unterhaltungsmitschnitte."
-
-#: C/salut-protocol.page:8(info/desc)
-msgid "Understanding the People Nearby feature."
-msgstr "Erläuterungen zum Funktionsmerkmal »Personen in der Nähe«."
-
-#: C/salut-protocol.page:33(page/title)
-msgid "What is People Nearby?"
-msgstr "Was ist »Personen in der Nähe«?"
-
-#: C/salut-protocol.page:40(page/p)
-msgid ""
-"The People Nearby service is a serverless communication service: you do not "
-"need to connect and authenticate to a central server in order to use it."
-msgstr ""
-"Der Dienst »Personen in der Nähe« (People Nearby) ist ein "
-"Kommunikationsdienst, der ohne Server auskommt: Es ist nicht notwendig, sich "
-"mit einem Server zu verbinden und sich zu legitimieren, um den Dienst zu "
-"nutzen."
-
-#: C/salut-protocol.page:45(page/p)
-msgid ""
-"This kind of serverless messaging system is restricted to a local area "
-"network and an active Internet connection is not necessary."
-msgstr ""
-"Dieses Nachrichtensystem ohne Server ist auf lokale Netzwerke beschränkt und "
-"erfordert keine aktive Internetverbindung."
-
-#: C/salut-protocol.page:49(page/p)
-msgid ""
-"The people that use this service inside the same local area network will be "
-"auto-discovered, and it will be possible to send them messages and files as "
-"with other services."
-msgstr ""
-"Teilnehmer dieses Dienstes innerhalb des gleichen lokalen Netzwerks werden "
-"automatisch ermittelt. Es ist möglich, ihnen Nachrichten und Dateien zu "
-"senden, wie mit anderen Diensten auch."
-
-#: C/salut-protocol.page:54(page/p)
-msgid ""
-"All the modern local area networks should be able to support this kind of "
-"service."
-msgstr ""
-"Alle modernen lokalen Netzwerke sollten in der Lage sein, diese Art Dienst "
-"zu unterstützen."
-
-#: C/send-file.page:8(info/desc)
-msgid "Send a file from your computer to one of your contacts."
-msgstr "Senden Sie eine Datei von Ihrem Rechner an einen Ihrer Kontakte."
-
-#: C/send-file.page:36(page/title)
-msgid "Send files"
-msgstr "Dateien senden"
-
-#: C/send-file.page:45(item/p)
-msgid ""
-"Right click on the contact you want to send a file to, and choose <gui>Send "
-"file</gui>."
-msgstr ""
-"Klicken Sie mit der rechten Maustaste auf den Namen des Kontakts, dem Sie "
-"eine Datei senden wollen, und klicken Sie anschließend auf <gui>Datei "
-"senden</gui>."
-
-#: C/send-file.page:50(item/p)
-msgid ""
-"Click on the contact you want to send a file, and choose <guiseq><gui>Edit</"
-"gui> <gui>Contact</gui><gui>Send file</gui></guiseq>."
-msgstr ""
-"Klicken Sie auf den Kontakt, an den Sie eine Datei senden wollen, und wählen "
-"Sie <guiseq><gui>Bearbeiten</gui><gui>Kontakt</gui><gui>Datei senden</gui></"
-"guiseq>."
-
-#: C/send-file.page:58(item/p)
-msgid "Select the file to send, and click on <gui>Send</gui>."
-msgstr ""
-"Wählen Sie die zu sendende Datei aus und klicken Sie auf <gui>Senden</gui>."
-
-#: C/send-file.page:63(item/p)
-msgid "The <gui>File Transfers</gui> window will appear."
-msgstr "Das Fenster <gui>Dateiübertragungen</gui> wird geöffnet."
-
-#: C/send-file.page:66(item/p)
-msgid ""
-"Wait for your contact to accept the file transfer, or click <gui>Stop</gui> "
-"to halt the transfer."
-msgstr ""
-"Warten Sie darauf, dass Ihr Kontakt die Dateiübertragung akzeptiert, oder "
-"klicken Sie auf <gui>Stopp</gui>, um die Übertragung zu stoppen."
-
-#: C/send-file.page:72(item/p)
-msgid ""
-"Once the transfer is finished, it is possible to close the <gui>File "
-"Transfers</gui> window."
-msgstr ""
-"Sobald die Dateiübertragung abgeschlossen ist, können Sie das Fenster "
-"<gui>Dateiübertragungen</gui> schließen."
-
-#: C/send-file.page:80(note/p)
-msgid ""
-"If you have multiple finished transfers listed in the window, click on "
-"<gui>Clear</gui> to empty the list. This will only remove the files from the "
-"list and will not delete them from your computer."
-msgstr ""
-"Falls mehrere abgeschlossene Dateiübertragungen in diesem Fenster "
-"aufgelistet sind, dann klicken Sie auf <gui>Leeren</gui>, um die Liste zu "
-"leeren. Dies entfernt die Dateien nur aus der Liste, aber nicht von Ihrem "
-"Rechner."
-
-#: C/send-file.page:87(note/p)
-msgid ""
-"It is possible to send files only using the following services: <em>Jabber</"
-"em>, <em>Google Talk</em> and <em>People Nearby</em>."
-msgstr ""
-"Mit folgenden Diensten können Sie Dateien versenden: <em>Jabber</em>, "
-"<em>Google Talk</em> und <em>People Nearby</em> (»Personen in der Nähe«)."
-
-#: C/send-file.page:93(note/p)
-msgid ""
-"In order to send a file to someone, you need to be connected to the "
-"Internet, or to a local area network."
-msgstr ""
-"Um jemandem eine Datei senden zu können, müssen Sie mit dem Internet oder "
-"einem lokalen Netzwerk verbunden sein."
-
-#: C/send-message.page:8(info/desc)
-msgid "Send a message to one of your contacts."
-msgstr "Eine Nachricht an einen Ihrer Kontakte senden."
-
-#: C/send-message.page:32(page/title)
-msgid "Send a message to someone"
-msgstr "Jemandem eine Nachricht senden"
-
-#: C/send-message.page:36(item/p)
-msgid ""
-"From the <gui>Contact List</gui> window, double-click the name of the "
-"contact that you want to have a conversation with."
-msgstr ""
-"Klicken Sie im Fenster <gui>Kontaktliste</gui> doppelt auf den Namen des "
-"Kontakts, mit dem Sie eine Unterhaltung beginnen wollen."
-
-#: C/send-message.page:42(item/p)
-msgid ""
-"A new window will open. Type a message into the box at the bottom of the "
-"window and press <key>Enter</key> to send it."
-msgstr ""
-"Ein neues Fenster wird geöffnet. Geben Sie eine Nachricht in das Feld am "
-"unteren Rand des Fensters ein und drücken Sie die <key>Eingabetaste</key>, "
-"um sie zu senden."
-
-#: C/send-message.page:50(section/title)
-msgid "Send a message to a meta-contact"
-msgstr "Einem Meta-Kontakt eine Nachricht senden"
-
-#: C/send-message.page:58(item/p)
-msgid ""
-"Select the contact you want to have the conversation, and from the menu "
-"select <gui style=\"menuitem\">Chat</gui>."
-msgstr ""
-"Wählen Sie den Kontakt aus, mit dem Sie eine Unterhaltung beginnen wollen, "
-"und wählen Sie im Menü <gui style=\"menuitem\">Unterhaltung</gui>."
-
-#: C/set-custom-status.page:9(info/desc)
-msgid "Add, edit or delete personal messages for your status."
-msgstr ""
-"Hinzufügen, Bearbeiten oder Löschen persönlicher Nachrichten für Ihren "
-"Status."
-
-#: C/set-custom-status.page:15(credit/name)
-msgid "Jim Campbell"
-msgstr "Jim Campbell"
-
-#: C/set-custom-status.page:34(page/title)
-msgid "Set a custom message"
-msgstr "Festlegen einer benutzerdefinierten Nachricht"
-
-#: C/set-custom-status.page:36(page/p)
-msgid ""
-"Sometimes you may want to set a custom message for your status, for example "
-"to let people know that you will be unavailable for a certain period of time."
-msgstr ""
-"Vielleicht wollen Sie eine benutzerdefinierte Nachricht für Ihren Status "
-"festlegen, zum Beispiel um jemanden darüber zu informieren, dass Sie für "
-"eine bestimmte Zeitspanne nicht verfügbar sein werden."
-
-#: C/set-custom-status.page:40(page/p)
-msgid ""
-"It is possible to set a custom message based on the different statuses "
-"available."
-msgstr ""
-"Es ist möglich, eine benutzerdefinierte Nachricht festzulegen, basierend auf "
-"den verfügbaren Status."
-
-#: C/set-custom-status.page:46(item/p) C/set-custom-status.page:82(item/p)
-msgid ""
-"From the <gui>Contact List</gui> window, click on the drop-down list at the "
-"top."
-msgstr ""
-"Klicken Sie im<gui>Kontaktlisten</gui>-Fenster in die Auswahlliste oben."
-
-#: C/set-custom-status.page:52(item/p)
-msgid ""
-"Select the status you want to add a custom message to. You have to select "
-"the one identified with the label <gui>Custom Message</gui>."
-msgstr ""
-"Wählen Sie den Status aus, dem Sie eine benutzerdefinierte Nachricht "
-"zuordnen wollen. Sie müssen denjenigen mit der Bezeichnung "
-"<gui>Benutzerdefinierte Nachricht</gui> auswählen."
-
-#: C/set-custom-status.page:58(item/p)
-msgid ""
-"Enter your custom message in the text box at the top of the window, and "
-"press <key>Enter</key> to set the message."
-msgstr ""
-"Geben Sie Ihre benutzerdefinierte Nachricht in das Textfeld am oberen Rand "
-"des Fensters ein und drücken Sie die <key>Eingabetaste</key>, um sie zu "
-"speichern."
-
-#: C/set-custom-status.page:64(item/p)
-msgid ""
-"If you want to set the custom message as a favorite, saving it in order to "
-"use it again, click on the little heart on the right of the text box where "
-"you wrote your custom message."
-msgstr ""
-"Wenn Sie die benutzerdefinierte Nachricht als bevorzugt festlegen wollen, "
-"speichern Sie sie, um sie wiederverwenden zu können. Klicken Sie "
-"anschließend auf das kleine Herz an der rechten Seite des Textfeldes, in "
-"welches Sie Ihre benutzerdefinierte Nachricht eingegeben haben."
-
-#: C/set-custom-status.page:69(item/p)
-msgid ""
-"If you do not do it, the custom message will not be available the next time "
-"you use <app>Empathy</app>. It will be saved only for the current session."
-msgstr ""
-"Falls Sie es nicht tun, dann wird die benutzerdefinierte Nachricht bei der "
-"nächsten Benutzung von <app>Empathy</app> nicht verfügbar sein. Sie wird nur "
-"für die aktuelle Sitzung gespeichert."
-
-#: C/set-custom-status.page:78(section/title)
-msgid "Edit and remove a custom message"
-msgstr "Eine benutzerdefinierte Nachricht bearbeiten und entfernen"
-
-#: C/set-custom-status.page:88(item/p)
-msgid "Select <gui>Edit Custom Message</gui>."
-msgstr "Wählen Sie <gui>Benutzerdefinierte Nachrichten bearbeiten</gui>."
-
-#: C/set-custom-status.page:95(item/p)
-msgid "To edit a custom message:"
-msgstr "So bearbeiten Sie eine benutzerdefinierte Nachricht:"
-
-#: C/set-custom-status.page:100(item/p)
-msgid ""
-"From the <gui>Saved Presets</gui> box, select the status message you want to "
-"edit and double-click on it."
-msgstr ""
-"Wählen Sie in <gui>Gespeicherte Voreinstellungen</gui> die Statusmeldung "
-"aus, die Sie bearbeiten wollen, und klicken Sie zweimal darauf."
-
-#: C/set-custom-status.page:106(item/p)
-msgid "Type the new custom message and press <key>Enter</key> to modify it."
-msgstr ""
-"Geben Sie die neue benutzerdefinierte Nachricht ein und drücken Sie die "
-"<key>Eingabetaste</key>, um die Änderungen anzuwenden."
-
-#: C/set-custom-status.page:113(item/p)
-msgid "To remove a custom message:"
-msgstr "So entfernen Sie eine benutzerdefinierte Nachricht:"
-
-#: C/set-custom-status.page:118(item/p)
-msgid ""
-"From the <gui>Saved Presets</gui> box, select the status message you want to "
-"remove."
-msgstr ""
-"Wählen Sie in <gui>Gespeicherte Voreinstellungen</gui> die Statusmeldung "
-"aus, die Sie entfernen wollen."
-
-#: C/set-custom-status.page:124(item/p)
-msgid "Click on the <gui>Remove</gui> button."
-msgstr "Klicken Sie auf den Knopf <gui>Entfernen</gui>."
-
-#: C/set-custom-status.page:133(item/p)
-msgid "When finished, click on <gui>Close</gui>."
-msgstr "Klicken Sie auf <gui>Schließen</gui>, sobald Sie fertig sind."
-
-#: C/set-custom-status.page:140(note/p)
-msgid ""
-"When you edit a custom message, it will not be set as the current status "
-"message. You will need to select it from the <gui>Contact List</gui> window."
-msgstr ""
-"Wenn Sie eine neue benutzerdefinierte Nachricht bearbeiten, wird diese nicht "
-"als aktuelle Statusnachricht festgelegt. Sie müssen Sie im "
-"<gui>Kontaktlisten</gui>-Fenster auswählen."
-
-#: C/share-desktop.page:7(info/desc)
-msgid "Show your desktop to your contacts."
-msgstr "Freigeben der Arbeitsumgebung für Ihre Kontakte."
-
-#: C/share-desktop.page:33(page/title)
-msgid "Share your desktop"
-msgstr "Freigabe Ihrer Arbeitsumgebung"
-
-#: C/share-desktop.page:35(page/p)
-msgid ""
-"It is possible to share your desktop with some of your contacts. You can use "
-"this functionality to show your desktop to your contacts to, for example, "
-"ask for help or help your contacts resolve a problem."
-msgstr ""
-"Es ist möglich, Ihre Arbeitsumgebung für einige Ihrer Kontakte freizugeben "
-"oder deren freigegebene Arbeitsumgebungen zu benutzen. Sie können auf diese "
-"Weise Ihre Arbeitsumgebung Ihren Kontakten zeigen, um ihnen bei der Lösung "
-"von Problemen zu helfen oder selbst um Hilfe zu bitten."
-
-#: C/share-desktop.page:42(note/p)
-msgid ""
-"To be able to share your desktop, you need to have a VNC server, which has "
-"support for the feature, installed on your system. <app>Vino</app>, the "
-"GNOME VNC server, has the required support."
-msgstr ""
-"Um Ihren Bildschirm freigeben zu können, benötigen Sie einen auf Ihrem "
-"System installierten VNC-Server, der dieses Funktionsmerkmal unterstützt. "
-"<app>Vino</app>, der VNC-Server von GNOME, verfügt über diese Funktionalität."
-
-#: C/share-desktop.page:51(item/p)
-msgid "From the <gui>Contact List</gui> window, do one of the following:"
-msgstr ""
-"Führen Sie im <gui>Kontaktlisten</gui>-Fenster eine der folgenden Aktionen "
-"aus:"
-
-#: C/share-desktop.page:56(item/p)
-msgid ""
-"Select the contact you want to share your desktop with and choose "
-"<guiseq><gui>Edit</gui><gui>Contact</gui> <gui>Share My Desktop</gui></"
-"guiseq>."
-msgstr ""
-"Wählen Sie den Kontakt aus, für den Sie Ihre Arbeitsumgebung freigeben "
-"wollen, und wählen Sie <guiseq><gui>Bearbeiten</gui><gui>Kontakt</"
-"gui><gui>Meine Arbeitsumgebung freigeben</gui></guiseq>."
-
-#: C/share-desktop.page:63(item/p)
-msgid ""
-"Right-click on the name of the contact you want to share your desktop with "
-"and select <gui>Share My Desktop</gui>."
-msgstr ""
-"Klicken Sie mit der rechten Maustaste auf den Namen des Kontakts, für den "
-"Sie Ihre Arbeitsumgebung freigeben wollen und wählen Sie <gui>Meine "
-"Arbeitsumgebung freigeben</gui>."
-
-#: C/share-desktop.page:71(item/p)
-msgid ""
-"An invitation to view your desktop will be sent to the contact you have "
-"selected. To view your desktop, they will need to accept it."
-msgstr ""
-"Eine Einladung zum Betrachten Ihres Bildschirms wird an die ausgewählten "
-"Kontakte gesendet. Um Ihren Bildschirm anzuzeigen, müssen die Kontakte diese "
-"akzeptieren."
-
-#: C/share-desktop.page:77(item/p)
-msgid ""
-"You can disconnect the contact from your computer using your desktop sharing "
-"application."
-msgstr ""
-"Sie können die Verbindung zum Kontakt über die Anwendung zur Freigabe Ihrer "
-"Arbeitsumgebung trennen."
-
-#: C/share-desktop.page:82(note/p)
-msgid ""
-"For more information about how to use the remote desktop sharing "
-"application, refer to its help."
-msgstr ""
-"Für weitere Informationen über die Benutzung der Anwendung zum Betrachten "
-"entfernter Arbeitsumgebungen ziehen Sie deren Hilfe zu Rate."
-
-#: C/share-desktop.page:90(page/p)
-msgid ""
-"When you share your desktop with someone else, it is possible to experience "
-"system performance slowdown and low Internet speed."
-msgstr ""
-"Wenn Sie Ihre Arbeitsumgebung für jemanden freigeben, kann das eine sinkende "
-"Systemleistung und eine langsamere Internetgeschwindigkeit zur Folge haben."
-
-#: C/share-desktop.page:96(note/p)
-msgid ""
-"Some of your contacts may not be able to use this feature. It is necessary "
-"for them to have version 2.28, or newer, of <app>Empathy</app> and a "
-"compatible remote desktop viewer application installed in their system."
-msgstr ""
-"Beachten Sie, dass nicht alle Ihre Kontakte diese Funktionalität "
-"unterstützen. Sie benötigen dafür mindestens die Version 2.28 von "
-"<app>Empathy</app> sowie eine auf deren System installierte Anwendung zum "
-"Betrachten entfernter Arbeitsumgebungen."
-
-#. This is a reference to an external file such as an image or video. When
-#. the file changes, the md5 hash will change to let you know you need to
-#. update your localized copy. The msgstr is not used at all. Set it to
-#. whatever you like once you have updated your copy of the file.
-#: C/status-icons.page:40(media)
-msgctxt "_"
-msgid ""
-"external ref='figures/available.png' md5='2196b2f0ad4ce26fdb7b9d48e75d1947'"
-msgstr "original"
-
-#. This is a reference to an external file such as an image or video. When
-#. the file changes, the md5 hash will change to let you know you need to
-#. update your localized copy. The msgstr is not used at all. Set it to
-#. whatever you like once you have updated your copy of the file.
-#: C/status-icons.page:46(media)
-msgctxt "_"
-msgid "external ref='figures/busy.png' md5='15eb2adff5faedf97b0cb9105d09410a'"
-msgstr "original"
-
-#. This is a reference to an external file such as an image or video. When
-#. the file changes, the md5 hash will change to let you know you need to
-#. update your localized copy. The msgstr is not used at all. Set it to
-#. whatever you like once you have updated your copy of the file.
-#: C/status-icons.page:54(media)
-msgctxt "_"
-msgid "external ref='figures/away.png' md5='9c504d6ffa0cf1a9cc8933d16e1bea33'"
-msgstr "original"
-
-#. This is a reference to an external file such as an image or video. When
-#. the file changes, the md5 hash will change to let you know you need to
-#. update your localized copy. The msgstr is not used at all. Set it to
-#. whatever you like once you have updated your copy of the file.
-#.
-#. This is a reference to an external file such as an image or video. When
-#. the file changes, the md5 hash will change to let you know you need to
-#. update your localized copy. The msgstr is not used at all. Set it to
-#. whatever you like once you have updated your copy of the file.
-#: C/status-icons.page:63(media) C/status-icons.page:70(media)
-msgctxt "_"
-msgid ""
-"external ref='figures/offline.png' md5='c5b0c21181cbd6e13f8909243c0fa964'"
-msgstr "original"
-
-#: C/status-icons.page:8(info/desc)
-msgid "Understanding the various statuses and status icons."
-msgstr "Erläuterung der verschiedenen Status und deren Symbole."
-
-#: C/status-icons.page:36(page/title)
-msgid "Status Types and Icons"
-msgstr "Typen des Anwesenheitsstatus und Symbole"
-
-#: C/status-icons.page:40(media/span)
-msgid "Available icon"
-msgstr "Symbol »Verfügbar«"
-
-#: C/status-icons.page:40(item/title)
-msgid "<_:media-1/> <gui>Available</gui>"
-msgstr "<_:media-1/> <gui>Verfügbar</gui>"
-
-#: C/status-icons.page:42(item/p)
-msgid ""
-"Use the <em>Available</em> status when you are at your computer and able to "
-"chat with your contacts. You can set a custom message for this status."
-msgstr ""
-"Verwenden Sie den Status <em>Verfügbar</em>, wenn Sie sich an Ihrem Rechner "
-"befinden und somit Unterhaltungen mit Ihren Kontakten führen können. Sie "
-"können für diesen Status eine benutzerdefinierte Nachricht festlegen."
-
-#: C/status-icons.page:46(media/span)
-msgid "Busy icon"
-msgstr "Symbol »Beschäftigt«"
-
-#: C/status-icons.page:46(item/title)
-msgid "<_:media-1/> <gui>Busy</gui>"
-msgstr "<_:media-1/> <gui>Beschäftigt</gui>"
-
-#: C/status-icons.page:48(item/p)
-msgid ""
-"Use the <em>Busy</em> status to let your contacts know that you don’t want "
-"to chat right now. They can still contact you, for instance if they have "
-"something urgent they need to discuss. By default, <app>Empathy</app> will "
-"not use notification bubbles and sounds when you are busy. You can set a "
-"custom message for this status."
-msgstr ""
-"Verwenden Sie den Status <em>Beschäftigt</em>, wenn Sie Ihre Kontakte "
-"darüber informieren wollen, dass Sie gerade keine Unterhaltung wünschen. "
-"Diese können Sie trotzdem noch kontaktieren, beispielsweise in dringenden "
-"Fällen. Per Vorgabe zeigt <app>Empathy</app> keine einblendenden "
-"Benachrichtigungen an oder spielt Klänge ab, wenn Sie beschäftigt sind. Sie "
-"können für diesen Status eine benutzerdefinierte Nachricht festlegen."
-
-#: C/status-icons.page:54(media/span)
-msgid "Away icon"
-msgstr "Symbol »Abwesend«"
-
-#: C/status-icons.page:54(item/title)
-msgid "<_:media-1/> <gui>Away</gui>"
-msgstr "<_:media-1/> <gui>Abwesend</gui>"
-
-#: C/status-icons.page:56(item/p)
-msgid ""
-"Use the <em>Away</em> status when you are going away from your computer. "
-"<app>Empathy</app> automatically sets your status to Away if you do not use "
-"your computer for a while, or if your screensaver is on. By default, "
-"<app>Empathy</app> will not use notification bubbles and sounds when you are "
-"away. You can set a custom message for this status."
-msgstr ""
-"Verwenden Sie den Status <em>Beschäftigt</em>, wenn Sie sich von Ihrem "
-"Rechner entfernen. <app>Empathy</app> setzt Ihren Status automatisch auf "
-"abwesend, wenn Sie Ihren Rechner für einen gewissen Zeitraum nicht bedienen "
-"oder wenn der Bildschirmschoner eingeschaltet ist. <app>Empathy</app> zeigt "
-"keine einblendenden Benachrichtigungen an oder spielt Klänge ab, wenn Sie "
-"abwesend sind. Sie können für diesen Status eine benutzerdefinierte "
-"Nachricht festlegen."
-
-#: C/status-icons.page:63(media/span) C/status-icons.page:70(media/span)
-msgid "Offline icon"
-msgstr "Symbol »Abgemeldet«"
-
-#: C/status-icons.page:63(item/title)
-msgid "<_:media-1/> <gui>Invisible</gui>"
-msgstr "<_:media-1/> <gui>Unsichtbar</gui>"
-
-#: C/status-icons.page:65(item/p)
-msgid ""
-"When you set your status to <em>Invisible</em>, you will appear as offline "
-"to your contacts. You will still be connected to your accounts, and you "
-"still see your contacts’ statuses and start conversations with them."
-msgstr ""
-"Wenn Sie Ihren Status auf <em>Unsichtbar</em> setzen, erscheinen Sie für "
-"Ihre Kontakte als abgemeldet. Sie sind noch immer mit Ihren Kontakten "
-"verbunden. Sie sehen deren Status und können Unterhaltungen mit Ihnen "
-"beginnen."
-
-#: C/status-icons.page:70(item/title)
-msgid "<_:media-1/> <gui>Offline</gui>"
-msgstr "<_:media-1/> <gui>Abgemeldet</gui>"
-
-#: C/status-icons.page:72(item/p)
-msgid ""
-"Setting your status to <em>Offline</em> disconnects you from all of your "
-"accounts."
-msgstr ""
-"Wenn Sie Ihren Status auf <em>Abgemeldet</em> setzen, werden alle "
-"Verbindungen zu Ihren Kontakten getrennt."
-
-#: C/video-call.page:11(info/desc)
-msgid "Start a video conversation with one of your contacts."
-msgstr "Beginnen Sie eine Videounterhaltung mit einem Ihrer Kontakte."
-
-#: C/video-call.page:37(page/title)
-msgid "Start a video conversation"
-msgstr "Eine Video-Unterhaltung beginnen"
-
-#: C/video-call.page:39(page/p)
-msgid ""
-"If you have a webcam, you can call your contacts and have a video "
-"conversation with them. This feature only works with certain types of "
-"accounts, and it requires the other person to have an application that "
-"supports video calls."
-msgstr ""
-"Falls Sie über eine Webcam verfügen, können Sie Ihre Kontakte für eine "
-"Videounterhaltung anrufen. Dieses Funktionsmerkmal steht nur für bestimmte "
-"Kontentypen zur Verfügung. Außerdem muss die andere Person mit einer "
-"Anwendung arbeiten, die Videoanrufe unterstützt."
-
-#: C/video-call.page:46(item/p)
-msgid ""
-"Right-click on the contact that you want to call and select <gui style="
-"\"menuitem\">Video Call</gui>."
-msgstr ""
-"Wählen Sie mit der rechten Maustaste den Kontakt aus, den Sie eine anrufen "
-"wollen, und wählen Sie im Menü <gui style=\"menuitem\">Videoanruf</gui>."
-
-#: C/video-call.page:54(item/p)
-msgid ""
-"To end the conversation, click on the <gui style=\"button\">hang up</gui> "
-"button."
-msgstr ""
-"Um eine Unterhaltung zu beenden, klicken Sie auf <gui style=\"button"
-"\">Auflegen</gui>."
-
-#: C/video-call.page:60(note/p)
-msgid ""
-"To turn a video conversation into an audio conversation, choose <guiseq><gui "
-"style=\"menu\">Video</gui><gui style=\"menuitem\">Video Off</gui></guiseq>."
-msgstr ""
-"Um eine Video-Unterhaltung in eine Sprachunterhaltung umzuwandeln, wählen "
-"Sie <guiseq><gui style=\"menu\">Video</gui><gui style=\"menuitem\">Video "
-"aus</gui></guiseq>."
-
-#: C/video-call.page:65(section/title)
-msgid "Start a video conversation with a meta-contact"
-msgstr "Beginnen einer Videounterhaltung mit einem Meta-Kontakt"
-
-#: C/video-call.page:73(item/p)
-msgid ""
-"Select the contact you want to have the conversation, and from the menu "
-"select <gui style=\"menuitem\">Video Call</gui>."
-msgstr ""
-"Wählen Sie den Kontakt aus, mit dem Sie eine Unterhaltung beginnen wollen, "
-"und wählen Sie im Menü <gui style=\"menuitem\">Videoanruf</gui>."
-
-#~ msgctxt "link"
-#~ msgid "Empathy Internet Messenger"
-#~ msgstr "Empathy Internet-Nachrichtendienst"
-
-#~ msgctxt "text"
-#~ msgid "Empathy Internet Messenger"
-#~ msgstr "Empathy Internet-Nachrichtendienst"
-
-#~ msgid ""
-#~ "<media type=\"image\" mime=\"image/png\" src=\"figures/empathy-logo.png"
-#~ "\"> Empathy Internet Messenger logo </media> Empathy Internet Messenger"
-#~ msgstr ""
-#~ "<media type=\"image\" mime=\"image/png\" src=\"figures/empathy-logo.png"
-#~ "\">Empathy Internet-Nachrichtendienst-Logo</media> Empathy Internet-"
-#~ "Nachrichtendienst"
-
-#~ msgid ""
-#~ "To add a network to the list, click <media type=\"image\" mime=\"image/png"
-#~ "\" src=\"figures/gtk-add.png\" width=\"16\" height=\"16\">Add</media>."
-#~ msgstr ""
-#~ "Um ein Netzwerk zur Liste hinzuzufügen, klicken Sie auf <media type="
-#~ "\"image\" mime=\"image/png\" src=\"figures/gtk-add.png\" width=\"16\" "
-#~ "height=\"16\">Hinzufügen</media>."
-
-#~ msgid ""
-#~ "From the <gui>Contact List</gui> window, click the <media type=\"image\" "
-#~ "mime=\"image/png\" src=\"figures/camera-web.png\">video call</media> icon "
-#~ "next to the name of the contact you wish to call and choose <gui style="
-#~ "\"menuitem\">Audio Call</gui>."
-#~ msgstr ""
-#~ "Klicken Sie im <gui>Kontaktlisten</gui>-Fenster auf das <media type="
-#~ "\"image\" mime=\"image/png\" src=\"figures/camera-web.png\">Videoanruf</"
-#~ "media>-Symbol neben dem Namen des Kontakts, den Sie anrufen wollen, und "
-#~ "wählen Sie <gui style=\"menuitem\">Videoanruf</gui>."
-
-#~ msgid ""
-#~ "Due to technical differences, the free <link href=\"https://www.ekiga.net/"
-#~ "index.php?page=register\">Ekiga.net</link> service does not currently "
-#~ "work with <app>Empathy</app>."
-#~ msgstr ""
-#~ "Wegen technischer Unterschiede funktioniert <link href=\"https://www."
-#~ "ekiga.net/index.php?page=register\">Ekiga.net</link> derzeit nicht mit "
-#~ "<app>Empathy</app>."
-
-#~ msgid ""
-#~ "You do not need to register for an account to use IRC. Although you "
-#~ "specify a nickname when you add an IRC account to <app>Empathy</app>, "
-#~ "this nickname is only established each time you connect. If another user "
-#~ "is using the nickname, you will need to choose a new nickname."
-#~ msgstr ""
-#~ "Sie müssen kein Konto registrieren, um das IRC zu benutzen. Obgleich Sie "
-#~ "beim Hinzufügen eines IRC-Kontos in <app>Empathy</app> einen Spitznamen "
-#~ "angeben, wird dieser Spitzname zwar jedes Mal bei einem Verbindungsaufbau "
-#~ "festgelegt. Falls aber ein anderer Benutzer diesen Spitznamen verwendet, "
-#~ "müssen Sie einen neuen wählen."
-
-#~ msgid ""
-#~ "Some IRC networks use a service called NickServ to allow users to protect "
-#~ "their nicknames. See <link xref=\"irc-nick-password\"/> for more "
-#~ "information."
-#~ msgstr ""
-#~ "Einige IRC-Netzwerke verwenden einen Dienst namens NickServ, um Benutzern "
-#~ "zu ermöglichen, ihre Spitznamen zu schützen. Weitere Informationen finden "
-#~ "Sie in <link xref=\"irc-nick-password\"/>."
-
-#~ msgid "Combine and separate contacts"
-#~ msgstr "Kontakte zusammenlegen und aufteilen"
-
-#~ msgid ""
-#~ "From the <gui>Contact List</gui> window, right-click one of the contact "
-#~ "that has different accounts, and select <gui style=\"menuitem\">Link "
-#~ "Contacts...</gui>."
-#~ msgstr ""
-#~ "Klicken Sie mit der rechten Maustaste im Fenster <gui>Kontaktliste</gui> "
-#~ "auf einen Kontakt, der verschiedene Konten verwendet, und wählen Sie <gui "
-#~ "style=\"menuitem\">Kontakte verknüpfen …</gui>."
-
-#~ msgid ""
-#~ "From the left pane in the <gui>Link Contacts</gui> window, select the "
-#~ "contacts you want to combine."
-#~ msgstr ""
-#~ "Wählen Sie in der linken Seitenleiste im Fenster <gui>Kontakte "
-#~ "verknüpfen</gui> die Kontakte aus, die Sie zusammenlegen wollen."
-
-#~ msgid ""
-#~ "When a meta-contact has been created, the default contact that will be "
-#~ "used to have a conversation with when you double-click on it, is the "
-#~ "contact with the highest presence on-line."
-#~ msgstr ""
-#~ "Wenn ein Meta-Kontakt erstellt wurde wird derjenige Kontakt bei einer "
-#~ "Unterhaltung verwendet, der die längste Zeit angemeldet ist."
-
-#~ msgid "Separating contacts"
-#~ msgstr "Kontakte aufteilen"
-
-#~ msgid ""
-#~ "From the <gui>Contact List</gui>, right-click the contact to separate, "
-#~ "and select <gui style=\"menuitem\">Link Contacts...</gui>."
-#~ msgstr ""
-#~ "Wählen Sie in der <gui>Kontakliste</gui> den Kontakt mit der rechten "
-#~ "Maustaste aus, den Sie aufteilen möchten, und wählen Sie <gui style="
-#~ "\"menuitem\">Kontakte verknüpfen …</gui>."
-
-#~ msgid "Click <gui style=\"button\">Unlink</gui>."
-#~ msgstr "Klicken Sie auf <gui style=\"button\">Verknüpfung aufheben</gui>."
-
-#~ msgid ""
-#~ "Click the <media type=\"image\" mime=\"image/png\" src=\"figures/gtk-edit."
-#~ "png\">edit</media> icon in the error message."
-#~ msgstr ""
-#~ "Klicken Sie auf das <media type=\"image\" mime=\"image/png\" src="
-#~ "\"figures/gtk-edit.png\">Bearbeiten</media>-Symbol in der Fehlermeldung."
-
-#~ msgid ""
-#~ "<media type=\"image\" mime=\"image/png\" src=\"figures/available.png"
-#~ "\">Available icon</media> <gui>Available</gui>"
-#~ msgstr ""
-#~ "<media type=\"image\" mime=\"image/png\" src=\"figures/available.png"
-#~ "\">Verfügbar-Symbol</media> <gui>Verfügbar</gui>"
-
-#~ msgid ""
-#~ "<media type=\"image\" mime=\"image/png\" src=\"figures/busy.png\">Busy "
-#~ "icon</media> <gui>Busy</gui>"
-#~ msgstr ""
-#~ "<media type=\"image\" mime=\"image/png\" src=\"figures/busy.png"
-#~ "\">Beschäftigt-Symbol</media> <gui>Beschäftigt</gui>"
-
-#~ msgid ""
-#~ "<media type=\"image\" mime=\"image/png\" src=\"figures/away.png\">Away "
-#~ "icon</media> <gui>Away</gui>"
-#~ msgstr ""
-#~ "<media type=\"image\" mime=\"image/png\" src=\"figures/away.png"
-#~ "\">Abwesend-Symbol</media> <gui>Abwesend</gui>"
diff --git a/help/de/figures/empathy-main-window.png b/help/de/figures/empathy-main-window.png
deleted file mode 100644
index 3daa37c7..00000000
--- a/help/de/figures/empathy-main-window.png
+++ /dev/null
Binary files differ
diff --git a/help/el/el.po b/help/el/el.po
deleted file mode 100644
index 6e4d45ea..00000000
--- a/help/el/el.po
+++ /dev/null
@@ -1,3920 +0,0 @@
-# translation of empathy-master-help-el-4325__.merged.po to Greek
-# Marios Zindilis <m.zindilis@dmajor.org>, 2009, 2010.
-# Jennie Petoumenou <epetoumenou@gmail.com>, 2009.
-# Dimitris Spingos (Δημήτρης Σπίγγος) <dmtrs32@gmail.com>, 2013.
-msgid ""
-msgstr ""
-"Project-Id-Version: empathy-master-help-el-4325__.merged\n"
-"POT-Creation-Date: 2013-04-15 22:03+0000\n"
-"PO-Revision-Date: 2013-04-26 00:03+0300\n"
-"Last-Translator: Dimitris Spingos (Δημήτρης Σπίγγος) <dmtrs32@gmail.com>\n"
-"Language-Team: team@gnome.gr\n"
-"Language: el\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: Virtaal 0.7.1\n"
-
-#. Put one translator per line, in the form NAME <EMAIL>, YEAR1, YEAR2
-msgctxt "_"
-msgid "translator-credits"
-msgstr ""
-"Ελληνική μεταφραστική ομάδα GNOME <team@gnome.gr>\n"
-" Δημήτρης Σπίγγος, <dmtrs32@gmail.com>, 2013\n"
-" Τζένη Πετούμενου <epetoumenou@gmail.gr>, 2009\n"
-" Μάριος Ζηντίλης <m.zindilis@dmajor.org, 2009\n"
-" Μιχάλης Κοτσαρίνης <mk73628@gmail.com>, 2010\n"
-" Θάνος Τρυφωνίδης <tomtryf@gmail.com>, 2012\n"
-"\n"
-"Για περισσότερες πληροφορίες, επισκεφθείτε τη σελίδα http://www.gnome.gr/"
-
-#: C/index.page:8(info/title)
-msgctxt "link"
-msgid "Empathy Internet Messenger"
-msgstr "Μηνύματα διαδικτύου Empathy"
-
-#: C/index.page:9(info/title)
-msgctxt "text"
-msgid "Empathy Internet Messenger"
-msgstr "Μηνύματα διαδικτύου Empathy"
-
-#: C/index.page:20(credit/name) C/add-account.page:21(credit/name)
-#: C/audio-call.page:22(credit/name) C/audio-video.page:17(credit/name)
-#: C/create-account.page:19(credit/name)
-#: C/disable-account.page:21(credit/name)
-#: C/favorite-rooms.page:14(credit/name) C/geolocation.page:17(credit/name)
-#: C/geolocation-not-showing.page:17(credit/name)
-#: C/geolocation-privacy.page:17(credit/name)
-#: C/geolocation-supported.page:16(credit/name)
-#: C/geolocation-turn.page:18(credit/name)
-#: C/geolocation-what-is.page:18(credit/name)
-#: C/group-conversations.page:19(credit/name)
-#: C/hide-contacts.page:11(credit/name) C/import-account.page:23(credit/name)
-#: C/introduction.page:13(credit/name) C/irc-commands.page:10(credit/name)
-#: C/irc-join-pwd.page:17(credit/name) C/irc-join-room.page:16(credit/name)
-#: C/irc-manage.page:19(credit/name) C/irc-nick-password.page:18(credit/name)
-#: C/irc-send-file.page:16(credit/name)
-#: C/irc-start-conversation.page:15(credit/name)
-#: C/link-contacts.page:15(credit/name) C/prev-conv.page:17(credit/name)
-#: C/prob-conn-acctdisabled.page:19(credit/name)
-#: C/prob-conn-auth.page:21(credit/name) C/prob-conn-name.page:18(credit/name)
-#: C/prob-conn-neterror.page:19(credit/name)
-#: C/remove-account.page:19(credit/name) C/salut-protocol.page:18(credit/name)
-#: C/send-file.page:21(credit/name) C/set-custom-status.page:19(credit/name)
-#: C/share-desktop.page:14(credit/name) C/status-icons.page:16(credit/name)
-#: C/video-call.page:25(credit/name)
-msgid "Milo Casagrande"
-msgstr "Milo Casagrande"
-
-#: C/index.page:24(license/p) C/account-irc.page:20(license/p)
-#: C/account-jabber.page:18(license/p) C/accounts-window.page:22(license/p)
-#: C/add-account.page:29(license/p) C/add-contact.page:22(license/p)
-#: C/audio-call.page:31(license/p) C/audio-video.page:21(license/p)
-#: C/change-status.page:28(license/p) C/create-account.page:23(license/p)
-#: C/disable-account.page:29(license/p) C/favorite-rooms.page:18(license/p)
-#: C/geolocation.page:21(license/p)
-#: C/geolocation-not-showing.page:21(license/p)
-#: C/geolocation-privacy.page:21(license/p)
-#: C/geolocation-supported.page:20(license/p)
-#: C/geolocation-turn.page:22(license/p)
-#: C/geolocation-what-is.page:22(license/p)
-#: C/group-conversations.page:23(license/p) C/hide-contacts.page:15(license/p)
-#: C/import-account.page:31(license/p) C/introduction.page:17(license/p)
-#: C/irc-commands.page:14(license/p) C/irc-join-pwd.page:21(license/p)
-#: C/irc-join-room.page:20(license/p) C/irc-manage.page:28(license/p)
-#: C/irc-nick-password.page:22(license/p) C/irc-send-file.page:20(license/p)
-#: C/irc-start-conversation.page:19(license/p)
-#: C/link-contacts.page:19(license/p) C/overview.page:20(license/p)
-#: C/prev-conv.page:25(license/p) C/prob-conn-acctdisabled.page:23(license/p)
-#: C/prob-conn-auth.page:25(license/p) C/prob-conn-name.page:22(license/p)
-#: C/prob-conn-neterror.page:23(license/p) C/prob-conn.page:18(license/p)
-#: C/remove-account.page:23(license/p) C/salut-protocol.page:22(license/p)
-#: C/send-file.page:25(license/p) C/send-message.page:21(license/p)
-#: C/set-custom-status.page:23(license/p) C/share-desktop.page:22(license/p)
-#: C/status-icons.page:24(license/p) C/video-call.page:34(license/p)
-msgid "Creative Commons Share Alike 3.0"
-msgstr "Creative Commons Share Alike 3.0"
-
-#: C/index.page:30(media/span)
-#| msgctxt "link"
-#| msgid "Empathy Internet Messenger"
-msgid "Empathy Internet Messenger logo"
-msgstr "Λογότυπος αγγελιοφόρου διαδικτύου Empathy"
-
-#: C/index.page:28(page/title)
-#| msgctxt "link"
-#| msgid "Empathy Internet Messenger"
-msgid "<_:media-1/> Empathy Internet Messenger"
-msgstr "<_:media-1/> Αγγελιοφόρος διαδικτύου Empathy"
-
-#: C/index.page:36(section/title)
-msgid "Account Management"
-msgstr "Διαχείριση λογαριασμών"
-
-#: C/index.page:40(section/title)
-msgid "Contact Management"
-msgstr "Διαχείριση επαφών"
-
-#: C/index.page:44(section/title)
-msgid "Text Conversations"
-msgstr "Γραπτές συζητήσεις"
-
-#: C/index.page:48(section/title)
-msgid "Audio and Video Conversations"
-msgstr "Φωνητικές κλήσεις και βιντεοκλήσεις"
-
-#: C/index.page:52(section/title)
-msgid "Advanced Actions"
-msgstr "Για προχωρημένους"
-
-#: C/index.page:56(section/title) C/irc-manage.page:64(section/title)
-msgid "Common Problems"
-msgstr "Κοινά προβλήματα"
-
-#. This is a reference to an external file such as an image or video. When
-#. the file changes, the md5 hash will change to let you know you need to
-#. update your localized copy. The msgstr is not used at all. Set it to
-#. whatever you like once you have updated your copy of the file.
-#: C/account-irc.page:106(media)
-msgctxt "_"
-msgid ""
-"external ref='figures/gtk-add.png' md5='a856b499d8d4681b70b5ce6f25bc5c6d'"
-msgstr ""
-"external ref='figures/gtk-add.png' md5='a856b499d8d4681b70b5ce6f25bc5c6d'"
-
-#. This is a reference to an external file such as an image or video. When
-#. the file changes, the md5 hash will change to let you know you need to
-#. update your localized copy. The msgstr is not used at all. Set it to
-#. whatever you like once you have updated your copy of the file.
-#.
-#. This is a reference to an external file such as an image or video. When
-#. the file changes, the md5 hash will change to let you know you need to
-#. update your localized copy. The msgstr is not used at all. Set it to
-#. whatever you like once you have updated your copy of the file.
-#.
-#. This is a reference to an external file such as an image or video. When
-#. the file changes, the md5 hash will change to let you know you need to
-#. update your localized copy. The msgstr is not used at all. Set it to
-#. whatever you like once you have updated your copy of the file.
-#.
-#. This is a reference to an external file such as an image or video. When
-#. the file changes, the md5 hash will change to let you know you need to
-#. update your localized copy. The msgstr is not used at all. Set it to
-#. whatever you like once you have updated your copy of the file.
-#: C/account-irc.page:109(media) C/prob-conn-auth.page:58(media)
-#: C/prob-conn-name.page:44(media) C/prob-conn-neterror.page:59(media)
-msgctxt "_"
-msgid ""
-"external ref='figures/gtk-edit.png' md5='4f21b451732817be0604fe3e2c8da98b'"
-msgstr ""
-"external ref='figures/gtk-edit.png' md5='4f21b451732817be0604fe3e2c8da98b'"
-
-#. This is a reference to an external file such as an image or video. When
-#. the file changes, the md5 hash will change to let you know you need to
-#. update your localized copy. The msgstr is not used at all. Set it to
-#. whatever you like once you have updated your copy of the file.
-#: C/account-irc.page:112(media)
-msgctxt "_"
-msgid ""
-"external ref='figures/gtk-remove.png' md5='215e3a325a3dd619874e35c30a018bb6'"
-msgstr ""
-"external ref='figures/gtk-remove.png' md5='215e3a325a3dd619874e35c30a018bb6'"
-
-#: C/account-irc.page:8(info/desc)
-msgid "Additional information necessary for connecting to IRC networks."
-msgstr "Επιπλέον στοιχεία που απαιτούνται για τη σύνδεση σε δίκτυα IRC."
-
-#: C/account-irc.page:16(credit/name) C/account-jabber.page:14(credit/name)
-#: C/accounts-window.page:18(credit/name) C/add-account.page:25(credit/name)
-#: C/disable-account.page:25(credit/name)
-#: C/import-account.page:27(credit/name) C/prev-conv.page:21(credit/name)
-#: C/status-icons.page:20(credit/name)
-msgid "Shaun McCance"
-msgstr "Shaun McCance"
-
-#: C/account-irc.page:31(page/title)
-msgid "IRC account details"
-msgstr "Στοιχεία λογαριασμού IRC"
-
-#: C/account-irc.page:33(page/p)
-msgid ""
-"IRC accounts require different information than many other types of "
-"accounts. To create an IRC account, you must specify at least an IRC network "
-"and a nickname. This page details the information you can provide for an IRC "
-"account."
-msgstr ""
-"Οι λογαριασμοί IRC χρησιμοποιούν διαφορετικά στοιχεία σε σχέση με τους "
-"υπόλοιπους τύπους λογαριασμών. Για να δημιουργήσετε ένα λογαριασμό IRC, θα "
-"χρειαστείτε οπωσδήποτε το όνομα ενός δικτύου IRC και ένα ψευδώνυμο. Σε αυτή "
-"τη σελίδα αναφέρονται λεπτομερώς τα στοιχεία που μπορείτε να εισάγετε για "
-"ένα λογαριασμό IRC."
-
-#: C/account-irc.page:39(note/p) C/irc-manage.page:42(note/p)
-msgid ""
-"You must have the <sys>telepathy-idle</sys> package installed to use IRC in "
-"<app>Empathy</app>."
-msgstr ""
-"Πρέπει να έχετε εγκατεστημένο το πακέτο <sys>telepathy-idle</sys> για να "
-"χρησιμοποιήσετε το IRC στο <app>Empathy</app>."
-
-#: C/account-irc.page:45(item/title) C/account-irc.page:120(item/title)
-msgid "<gui>Network</gui>"
-msgstr "<gui>Δίκτυο</gui>"
-
-#: C/account-irc.page:46(item/p)
-msgid ""
-"IRC is an open system that allows people to run separate IRC networks. Each "
-"network is distinct and has its own users and chat rooms. <app>Empathy</app> "
-"lists the most popular networks in the <gui>Network</gui> drop-down list. "
-"You can add additional networks. See <link xref=\"#networks\"/> below."
-msgstr ""
-"Το IRC είναι ένα ανοιχτό σύστημα που σας επιτρέπει να χρησιμοποιείτε "
-"διαφορετικά δίκτυα IRC. Κάθε δίκτυο λειτουργεί ξεχωριστά, και διαθέτει τους "
-"δικούς του χρήστες και δωμάτια συζήτησης. Το <app>Empathy</app> εμφανίζει τα "
-"πιο δημοφιλή δίκτυα στην αναπτυσσόμενη λίστα <gui>Δίκτυο</gui>. Μπορείτε, "
-"όμως, να προσθέτετε και άλλα δίκτυα. Για περισσότερες πληροφορίες, δείτε την "
-"<link xref=\"#networks\"/> παρακάτω."
-
-#: C/account-irc.page:53(item/title)
-msgid "<gui>Nickname</gui>"
-msgstr "<gui>Ψευδώνυμο</gui>"
-
-#: C/account-irc.page:54(item/p)
-msgid ""
-"Your nickname is your unique name on the IRC network. Only one person on a "
-"network may use a given nickname. If you get an error message that says "
-"<link xref=\"prob-conn-name\" role=\"error-msg\"/> you will need to change "
-"your nickname."
-msgstr ""
-"Το ψευδώνυμό σας είναι ένα μοναδικό όνομα που χρησιμοποιείται στο δίκτυο "
-"IRC. Σε κάθε δίκτυο, μόνο ένα άτομο επιτρέπεται να χρησιμοποιεί κάθε "
-"διαφορετικό ψευδώνυμο. Αν εμφανιστεί το μήνυμα σφάλματος <link xref=\"prob-"
-"conn-name\" role=\"error-msg\"/>, θα πρέπει να αλλάξετε το ψευδώνυμό σας."
-
-#: C/account-irc.page:60(item/title)
-msgid "<gui>Password</gui>"
-msgstr "<gui>Συνθηματικό</gui>"
-
-#: C/account-irc.page:61(item/p)
-msgid ""
-"Some servers, particularly those on private networks, require a password to "
-"connect. If you are authorized to use the network, the network "
-"administrators should provide you with a password."
-msgstr ""
-"Ορισμένοι εξυπηρετητές, ιδιαίτερα οι εξυπηρετητές ιδιωτικών δικτύων, "
-"απαιτούν συνθηματικό για να επιτρέψουν τη σύνδεση. Αν είστε εξουσιοδοτημένοι "
-"χρήστες ενός τέτοιου δικτύου, οι διαχειριστές του δικτύου θα πρέπει να σας "
-"έχουν προμηθεύσει το συνθηματικό."
-
-#: C/account-irc.page:65(note/title)
-msgid "NickServ Passwords"
-msgstr "Συνθηματικά NickServ"
-
-#: C/account-irc.page:66(note/p)
-msgid ""
-"On some networks, nicknames can be registered using a service known as "
-"NickServ. <app>Empathy</app> does not directly support nickname passwords. "
-"On some networks, including the popular freenode network, server passwords "
-"are automatically forwarded to NickServ, allowing you to set this field to "
-"identify yourself with NickServ. See <link xref=\"irc-nick-password\"/> for "
-"more details."
-msgstr ""
-"Σε ορισμένα δίκτυα, είναι δυνατόν να καταχωρήσετε το ψευδώνυμό σας, "
-"χρησιμοποιώντας την υπηρεσία NickServ. Το <app>Empathy</app> δεν υποστηρίζει "
-"απευθείας τη χρήση συνθηματικών για τα ψευδώνυμα. Σε ορισμένα δίκτυα, όπως "
-"το δημοφιλές δίκτυο FreeNode, τα συνθηματικά του εξυπηρετητή προωθούνται "
-"αυτόματα στο NickServ, και άρα μπορείτε να εισάγετε το συνθηματικό σας στο "
-"πεδίο αυτό. Για περισσότερες λεπτομέρειες, δείτε την <link xref=\"irc-nick-"
-"password\"/>."
-
-#: C/account-irc.page:76(item/title)
-msgid "<gui>Real name</gui>"
-msgstr "<gui>Πραγματικό όνομα</gui>"
-
-#: C/account-irc.page:77(item/p)
-msgid ""
-"You can provide your real name in addition to your nickname. Other users "
-"will be able to see this when they view your information."
-msgstr ""
-"Μπορείτε να εισάγετε και το πραγματικό σας όνομα, μαζί με το ψευδώνυμό σας. "
-"Οι υπόλοιποι χρήστες θα μπορούν να το βλέπουν όταν κοιτούν τα στοιχεία σας."
-
-#: C/account-irc.page:81(item/title)
-msgid "<gui>Quit message</gui>"
-msgstr "<gui>Μήνυμα εξόδου</gui>"
-
-#: C/account-irc.page:82(item/p)
-msgid ""
-"When you go offline, a quit message is sent to all the chat rooms you’re in "
-"and to all the users you’re having a private conversation with. Use this "
-"field to provide a custom quit message."
-msgstr ""
-"Όταν τερματίζεται η σύνδεσή σας, στέλνεται ένα μήνυμα εξόδου σε όλα τα "
-"δωμάτια συζήτησης στα οποία συμμετείχατε, καθώς και σε όλους τους χρήστες με "
-"τους οποίους είχατε ιδιωτικές συζητήσεις. Μπορείτε να χρησιμοποιήσετε αυτό "
-"το πεδίο για να εισάγετε ένα προσαρμοσμένο μήνυμα εξόδου."
-
-#: C/account-irc.page:94(info/title)
-msgctxt "link"
-msgid "IRC Networks"
-msgstr "Δίκτυα IRC"
-
-#: C/account-irc.page:97(section/title)
-msgid "Networks"
-msgstr "Δίκτυα"
-
-#: C/account-irc.page:99(section/p)
-msgid ""
-"<app>Empathy</app> includes a list of popular IRC networks. If you wish to "
-"another IRC network, you can add it to the list. You can also modify "
-"networks and remove them from the list."
-msgstr ""
-"Το <app>Empathy</app> συμπεριλαμβάνει μια λίστα με δημοφιλή δίκτυα IRC. Αν "
-"θέλετε να συνδεθείτε σε κάποιο άλλο δίκτυο IRC, μπορείτε να το προσθέσετε "
-"στη λίστα. Επίσης, μπορείτε να τροποποιείτε ή να διαγράφετε τα δίκτυα της "
-"λίστας."
-
-#: C/account-irc.page:104(item/p)
-msgid ""
-"To add a network to the list, click <media type=\"image\" mime=\"image/png\" "
-"src=\"figures/gtk-add.png\" width=\"16\" height=\"16\">Add</media>."
-msgstr ""
-"Για να προσθέσετε ένα δίκτυο στη λίστα, πατήστε <media type=\"image\" mime="
-"\"image/png\" src=\"figures/gtk-add.png\" width=\"16\" height="
-"\"16\">Προσθήκη</media>."
-
-#: C/account-irc.page:107(item/p)
-msgid ""
-"To modify a network in the list, select the network and click <media type="
-"\"image\" mime=\"image/png\" src=\"figures/gtk-edit.png\" width=\"16\" "
-"height=\"16\">Edit</media>."
-msgstr ""
-"Για να τροποποιήσετε ένα δίκτυο της λίστας, επιλέξτε το δίκτυο και μετά "
-"πατήστε <media type=\"image\" mime=\"image/png\" src=\"figures/gtk-edit.png"
-"\" width=\"16\" height=\"16\">Επεξεργασία</media>."
-
-#: C/account-irc.page:110(item/p)
-msgid ""
-"To remove a network from the list, select the network and click <media type="
-"\"image\" mime=\"image/png\" src=\"figures/gtk-remove.png\" width=\"16\" "
-"height=\"16\">Remove</media>."
-msgstr ""
-"Για να διαγράψετε ένα δίκτυο από τη λίστα, επιλέξτε το δίκτυο και μετά "
-"πατήστε <media type=\"image\" mime=\"image/png\" src=\"figures/gtk-remove.png"
-"\" width=\"16\" height=\"16\">Διαγραφή</media>."
-
-#: C/account-irc.page:115(section/p)
-msgid ""
-"When adding or modifying a network, you can enter the following information:"
-msgstr ""
-"Όταν προσθέτετε ή τροποποιείτε δίκτυα, μπορείτε να εισάγετε τα ακόλουθα "
-"στοιχεία:"
-
-#: C/account-irc.page:121(item/p)
-msgid ""
-"This is the name of the network as you want it to appear in the list of "
-"networks."
-msgstr ""
-"Αυτό είναι το όνομα του δικτύου, όπως θα εμφανίζεται στη λίστα δικτύων."
-
-#: C/account-irc.page:125(item/title)
-msgid "<gui>Charset</gui>"
-msgstr "<gui>Κωδικοποίηση</gui>"
-
-#: C/account-irc.page:126(item/p)
-msgid ""
-"This specifies the character encoding that is typically used on this "
-"network. A character encoding is a specific way of recording characters "
-"internally in a computer. There are many character encodings, and you need "
-"to use the same character encoding as other users to see their messages "
-"correctly."
-msgstr ""
-"Ορίζει την κωδικοποίηση χαρακτήρων που χρησιμοποιείται συνήθως στο δίκτυο "
-"αυτό. Η κωδικοποίηση χαρακτήρων είναι ένας συγκεκριμένος τρόπος με τον οποίο "
-"αποθηκεύει χαρακτήρες ο υπολογιστής. Υπάρχουν πολλές διαθέσιμες "
-"κωδικοποιήσεις χαρακτήρων και για να βλέπετε τα μηνύματα των άλλων χρηστών "
-"χωρίς προβλήματα, θα πρέπει να χρησιμοποιείτε την ίδια κωδικοποίηση με "
-"αυτούς."
-
-#: C/account-irc.page:135(item/p)
-msgid ""
-"By default, <app>Empathy</app> uses UTF-8, a modern character encoding that "
-"can handle text from most of the world's languages. Another common encoding "
-"for English and some other Western languages is ISO-8859-1."
-msgstr ""
-"Η προεπιλογή του <app>Empathy</app> είναι η UTF-8, μια σύγχρονη κωδικοποίηση "
-"χαρακτήρων που αναγνωρίζει κείμενα γραμμένα στις περισσότερες γλώσσες του "
-"κόσμου. Για τα Ελληνικά, μια ακόμη δημοφιλής κωδικοποίηση είναι η "
-"ISO-8859-7, ενώ για τα Αγγλικά η ISO-8859-1."
-
-#: C/account-irc.page:141(item/title)
-msgid "<gui>Servers</gui>"
-msgstr "<gui>Εξυπηρετητές</gui>"
-
-#: C/account-irc.page:142(item/p)
-msgid ""
-"An IRC network may have many servers you can connect to. When you are "
-"connected to a server on a particular network, you can communicate with all "
-"users on all other servers on that network. You can add and remove servers "
-"for this network using the <gui>Add</gui> and <gui>Remove</gui> buttons."
-msgstr ""
-"Ένα δίκτυο IRC μπορεί να διαθέτει αρκετούς εξυπηρετητές. Αν έχετε συνδεθεί "
-"σε έναν εξυπηρετητή ενός δικτύου, θα μπορείτε να επικοινωνείτε με όλους τους "
-"χρήστες του δικτύου, όποιον εξυπηρετητή και αν χρησιμοποιούν αυτοί. Μπορείτε "
-"να προσθέτετε και να διαγράφετε τους εξυπηρετητές που χρησιμοποιούνται για "
-"το συγκεκριμένο δίκτυο, χρησιμοποιώντας τα κουμπιά <gui>Προσθήκη</gui> και "
-"<gui>Διαγραφή</gui>."
-
-#: C/account-irc.page:147(item/p)
-msgid ""
-"When a server is selected, click the field under <gui>Server</gui> or "
-"<gui>Port</gui> to edit it. Alternatively, use the left and right arrow keys "
-"to focus the field, and press the space bar to begin editing."
-msgstr ""
-"Αφού επιλέξετε έναν εξυπηρετητή, κάνετε κλικ στο πεδίο <gui>Εξυπηρετητής</"
-"gui> ή <gui>Θύρα</gui>, για να επεξεργαστείτε τα στοιχεία του. Εναλλακτικά, "
-"χρησιμοποιήστε το αριστερό ή το δεξί βέλος για να εστιάσετε στα πεδία, και "
-"πατήστε διάστημα για να ξεκινήσετε την επεξεργασία."
-
-#: C/account-irc.page:151(item/p)
-msgid ""
-"Select the check box in the <gui>SSL</gui> column to encrypt all "
-"communication with a server. Note that this does not prevent other users on "
-"the network from seeing what you write on public chat rooms."
-msgstr ""
-"Σημειώστε την επιλογή στη στήλη <gui>SSL</gui>, για να κρυπτογραφείτε κάθε "
-"επικοινωνία σας με τον εξυπηρετητή. Θυμηθείτε ότι οι υπόλοιποι χρήστες του "
-"δικτύου εξακολουθούν να μπορούν να διαβάζουν οτιδήποτε γράφετε σε δημόσια "
-"δωμάτια συζήτησης."
-
-#: C/account-jabber.page:7(info/desc)
-msgid "Advanced options for Jabber and Google Talk accounts."
-msgstr "Επιλογές για προχωρημένους σε λογαριασμούς Jabber και Google Talk."
-
-#: C/account-jabber.page:29(page/title)
-msgid "Jabber account details"
-msgstr "Στοιχεία λογαριασμού Jabber"
-
-#: C/account-jabber.page:31(page/p)
-msgid ""
-"Most Jabber accounts will require only a login ID and a password to connect. "
-"For some accounts or on certain types of networks, you may need to enter "
-"additional information in the <gui>Advanced</gui> section. Normally, you "
-"will not need to use the advanced options below. For general instructions on "
-"adding an account, see <link xref=\"add-account\"/>."
-msgstr ""
-"Για να συνδεθείτε στους περισσότερους λογαριασμούς Jabber χρειάζεστε μόνο το "
-"όνομα χρήστη και το συνθηματικό σας. Ωστόσο, για ορισμένους λογαριασμούς ή "
-"τύπους λογαριασμών μπορεί να χρειαστεί να συμπληρώσετε ορισμένα επιπλέον "
-"στοιχεία στην ενότητα <gui>Για προχωρημένους</gui>. Υπό φυσιολογικές "
-"συνθήκες, δε χρειάζεται να ασχοληθείτε με τις παρακάτω προχωρημένες "
-"επιλογές. Για τις γενικές οδηγίες προσθήκης νέων λογαριασμών, δείτε την "
-"<link xref=\"add-account\"/>."
-
-#: C/account-jabber.page:39(note/p)
-msgid ""
-"Google Talk is a type of Jabber account. These instructions hold for Google "
-"Talk accounts as well."
-msgstr ""
-"Το Google Talk είναι λογαριασμός Jabber. Αυτές οι οδηγίες ισχύουν και για "
-"τους λογαριασμούς Google Talk."
-
-#: C/account-jabber.page:45(item/title)
-msgid "<gui>Encryption required (TLS/SSL)</gui>"
-msgstr "<gui>Απαιτείται κρυπτογράφηση (TLS/SSL)</gui>"
-
-#: C/account-jabber.page:46(item/title)
-msgid "<gui>Ignore SSL certificate errors</gui>"
-msgstr "<gui>Παράβλεψη σφαλμάτων πιστοποιητικών SSL</gui>"
-
-#: C/account-jabber.page:47(item/p)
-msgid ""
-"Whenever possible, communication between <app>Empathy</app> and the Jabber "
-"server is encrypted. If encrypted communication is not possible, messages "
-"may be sent unencrypted. Select <gui>Encryption required</gui> to prevent "
-"<app>Empathy</app> from communicating with the Jabber server when encryption "
-"is not possible."
-msgstr ""
-"Όπου είναι δυνατό, η επικοινωνία μεταξύ <app>Empathy</app> και εξυπηρετητή "
-"Jabber κρυπτογραφείται. Αν δεν είναι δυνατή η κρυπτογράφηση της "
-"επικοινωνίας, μπορεί να σταλούν μηνύματα χωρίς κρυπτογράφηση. Επιλέξτε "
-"<gui>Απαιτείται κρυπτογράφηση</gui> για να απαγορεύσετε στο <app>Empathy</"
-"app> να επικοινωνεί με τον εξυπηρετητή Jabber αν δεν υπάρχει δυνατότητα "
-"κρυπτογράφησης."
-
-#: C/account-jabber.page:52(item/p)
-msgid ""
-"Some Jabber servers may encrypt data using invalid certificates, or using "
-"certificates from unknown authorities. If you trust the server you are "
-"connecting to, you can select <gui>Ignore SSL certificate errors</gui> to "
-"allow encrypted communication with invalid certificates."
-msgstr ""
-"Ορισμένοι εξυπηρετητές Jabber μπορεί να κρυπτογραφούν τα δεδομένα "
-"χρησιμοποιώντας μη έγκυρα πιστοποιητικά, ή πιστοποιητικά από άγνωστες αρχές. "
-"Αν εμπιστεύεστε τον εξυπηρετητή, μπορείτε να επιλέξετε <gui>Αγνόηση "
-"σφαλμάτων πιστοποιητικών SSL</gui> για να επιτρέψετε την κρυπτογράφηση με "
-"χρήση μη έγκυρων πιστοποιητικών."
-
-#: C/account-jabber.page:59(item/title)
-msgid "<gui>Resource</gui>"
-msgstr "<gui>Πόρος</gui>"
-
-#: C/account-jabber.page:60(item/title)
-msgid "<gui>Priority</gui>"
-msgstr "<gui>Προτεραιότητα</gui>"
-
-#: C/account-jabber.page:61(item/p)
-msgid ""
-"If you have multiple applications (for instance, on separate computers) "
-"connected to your account at the same time, you can set a resource to "
-"uniquely identify each one. By default, <app>Empathy</app> will use "
-"<input>Telepathy</input> as the resource."
-msgstr ""
-"Αν υπάρχουν πολλαπλές εφαρμογές που είναι συνδεδεμένες στο λογαριασμό σας "
-"ταυτόχρονα (π.χ. από διαφορετικούς υπολογιστές), μπορείτε να ορίσετε έναν "
-"πόρο που θα ταυτοποιεί κάθε εφαρμογή. Το <app>Empathy</app> χρησιμοποιεί το "
-"<input>Telepathy</input> ως τον προεπιλεγμένο πόρο."
-
-#: C/account-jabber.page:65(item/p)
-msgid ""
-"You can set the priority to specify which application should receive "
-"incoming messages from your contacts. New messages will be sent to the "
-"application with the highest priority."
-msgstr ""
-"Μπορείτε να ορίσετε προτεραιότητες, για να προσδιορίσετε ποια εφαρμογή θα "
-"λαμβάνει τα εισερχόμενα μηνύματα των επαφών σας. Τα νέα μηνύματα θα "
-"αποστέλλονται στην εφαρμογή με την υψηλότερη προτεραιότητα."
-
-#: C/account-jabber.page:70(item/title)
-msgid "<gui>Override server settings</gui>"
-msgstr "<gui>Παράκαμψη ρυθμίσεων του εξυπηρετητή</gui>"
-
-#: C/account-jabber.page:71(item/p)
-msgid ""
-"<app>Empathy</app> will use default settings to connect to the Jabber server "
-"based on your login ID. For some Jabber servers, you will need to enter "
-"custom server settings manually. These settings should be provided for you "
-"by your Jabber provider."
-msgstr ""
-"Το <app>Empathy</app> χρησιμοποιεί τις προεπιλεγμένες ρυθμίσεις για να "
-"συνδέεται στον εξυπηρετητή Jabber. Για ορισμένους εξυπηρετητές Jabber μπορεί "
-"να χρειαστεί να εισάγετε χειροκίνητα κάποιες ειδικές ρυθμίσεις. Τις "
-"ρυθμίσεις αυτές θα πρέπει να τις έχετε λάβει από τον πάροχό σας."
-
-#: C/accounts-window.page:11(info/desc)
-msgid "Add, modify, and delete accounts."
-msgstr "Προσθήκη, τροποποίηση και διαγραφή λογαριασμών."
-
-#: C/accounts-window.page:33(page/title)
-msgid "Accounts Window"
-msgstr "Παράθυρο λογαριασμών"
-
-#: C/accounts-window.page:35(page/p)
-msgid ""
-"The <gui>Accounts</gui> window allows you to add, modify, and delete "
-"accounts."
-msgstr ""
-"Το παράθυρο με όνομα <gui>Λογαριασμοί</gui> επιτρέπει να προσθέτετε, να "
-"τροποποιείτε και να διαγράφετε λογαριασμούς."
-
-#: C/accounts-window.page:43(section/title)
-msgid "Account Details"
-msgstr "Στοιχεία λογαριασμών"
-
-#: C/accounts-window.page:44(section/p)
-msgid ""
-"For most types of accounts, you can simply enter a login ID and a password. "
-"Certain accounts or account types, however, may require additional "
-"information."
-msgstr ""
-"Για τους περισσότερους τύπους λογαριασμών, αρκεί να εισάγετε το όνομα χρήστη "
-"και το συνθηματικό. Ωστόσο, ορισμένοι λογαριασμοί ή τύποι λογαριασμών μπορεί "
-"να απαιτούν και επιπλέον στοιχεία."
-
-#: C/add-account.page:9(info/desc)
-msgid "Add a new account to <app>Empathy</app>."
-msgstr "Προσθήκη νέου λογαριασμού στο <app>Empathy</app>."
-
-#: C/add-account.page:40(page/title)
-msgid "Add a new account"
-msgstr "Προσθήκη νέου λογαριασμού"
-
-#: C/add-account.page:42(page/p)
-msgid ""
-"You can add instant messaging accounts from any supported service to "
-"communicate with all of your contacts in <app>Empathy</app>. For some "
-"account providers, these steps will also allow you to register for a new "
-"account. For more details, see <link xref=\"create-account\"/>."
-msgstr ""
-"Μπορείτε να προσθέτετε λογαριασμούς άμεσων μηνυμάτων από οποιαδήποτε "
-"υποστηριζόμενη υπηρεσία για επικοινωνία με όλες τις επαφές σας στο "
-"<app>Empathy</app>. Για μερικούς παρόχους λογαριασμών, αυτά τα βήματα θα σας "
-"επιτρέψουν επίσης να καταχωρίσετε έναν νέο λογαριασμό. Για περισσότερες "
-"λεπτομέρειες, δείτε το <link xref=\"create-account\"/>."
-
-#: C/add-account.page:49(item/p) C/disable-account.page:49(item/p)
-#: C/irc-nick-password.page:50(item/p) C/remove-account.page:43(item/p)
-msgid ""
-"From the <gui>Contact List</gui> window, choose <guiseq><gui>Edit</gui> "
-"<gui>Accounts</gui></guiseq>, or press <key>F4</key>."
-msgstr ""
-"Από το παράθυρο <gui>Λίστα επαφών</gui>, επιλέξτε <guiseq><gui>Επεξεργασία</"
-"gui> <gui>Λογαριασμοί</gui></guiseq>, ή πατήστε <key>F4</key>."
-
-#: C/add-account.page:53(item/p)
-msgid "Click <gui style=\"button\">+</gui>."
-msgstr "Πατήστε <gui style=\"button\">+</gui>."
-
-#: C/add-account.page:58(item/p)
-msgid ""
-"From the <gui>Protocol</gui> drop-down list, select the type of account you "
-"wish to add."
-msgstr ""
-"Από την αναδιπλούμενη λίστα <gui>Πρωτόκολλο</gui>, επιλέξτε τον τύπο του "
-"λογαριασμού που θέλετε να προσθέσετε."
-
-#: C/add-account.page:62(item/p)
-msgid ""
-"If you do not already have a registered account, select <gui>Create a new "
-"account on the server</gui>. This feature is not available for all account "
-"types, and may not work with some account providers. See <link xref=\"create-"
-"account\"/> for more information."
-msgstr ""
-"Αν δε διαθέτετε ήδη λογαριασμό αυτού του τύπου, επιλέξτε <gui>Δημιουργία "
-"νέου λογαριασμού στον εξυπηρετητή</gui>. Αυτή η λειτουργία δεν είναι "
-"διαθέσιμη για όλους τους τύπους λογαριασμών, και ενδεχομένως να μη "
-"λειτουργήσει για ορισμένους παρόχους. Δείτε τη <link xref=\"create-account\"/"
-"> για περισσότερες λεπτομέρειες."
-
-#: C/add-account.page:69(item/p)
-msgid ""
-"Enter the required information. For most accounts, you will only need a "
-"login ID and a password. Some accounts may require additional information. "
-"See <link xref=\"accounts-window#details\"/>for more information."
-msgstr ""
-"Εισάγετε τις απαιτούμενες πληροφορίες. Για τους περισσότερους τύπους "
-"λογαριασμών, αρκούν το όνομα χρήστη και το συνθηματικό. Ωστόσο, ορισμένοι "
-"τύποι μπορεί να απαιτούν και επιπλέον στοιχεία. Δείτε την <link xref="
-"\"accounts-window#details\"/>για περισσότερες πληροφορίες."
-
-#: C/add-account.page:74(item/p) C/import-account.page:61(item/p)
-#: C/irc-nick-password.page:63(item/p)
-msgid "Click <gui style=\"button\">Apply</gui>."
-msgstr "Πατήστε <gui style=\"button\">Εφαρμογή</gui>."
-
-#: C/add-account.page:81(note/p)
-msgid ""
-"To change the name that identifies the account in the <gui>Accounts</gui> "
-"window, select the account from the list on the left and either click on the "
-"name or press the space bar. Edit the account name and press <key>Enter</"
-"key> when you’re finished."
-msgstr ""
-"Για να αλλάξετε το όνομα που χρησιμοποιείται για το λογαριασμό στο παράθυρο "
-"<gui>Λογαριασμοί</gui>, επιλέξτε το λογαριασμό από τη λίστα στα αριστερά, "
-"και μετά πατήστε το όνομα ή πιέστε το πλήκτρο διαστήματος. Αλλάξτε το όνομα "
-"του λογαριασμού και πιέστε <key>Enter</key> όταν τελειώσετε."
-
-#: C/add-contact.page:9(info/desc)
-msgid "Add someone to the contact list."
-msgstr "Προσθήκη νέας επαφής."
-
-#: C/add-contact.page:18(credit/name) C/change-status.page:24(credit/name)
-#: C/prob-conn-acctdisabled.page:15(credit/name)
-#: C/prob-conn-auth.page:17(credit/name)
-#: C/prob-conn-neterror.page:15(credit/name) C/prob-conn.page:14(credit/name)
-#: C/send-file.page:17(credit/name) C/send-message.page:17(credit/name)
-msgid "Phil Bull"
-msgstr "Phil Bull"
-
-#: C/add-contact.page:33(page/title)
-msgid "Add someone to your list of contacts"
-msgstr "Προσθήκη νέας επαφής"
-
-#: C/add-contact.page:37(item/p)
-msgid "Choose <guiseq><gui>Chat</gui><gui>Add Contact</gui></guiseq>."
-msgstr ""
-"Επιλέξτε <guiseq><gui>Συζήτηση</gui><gui>Προσθήκη επαφής</gui></guiseq>."
-
-#: C/add-contact.page:40(item/p)
-msgid ""
-"From the <gui>Account</gui> drop-down list, select the account you wish to "
-"use to connect to your contact. Your contact will need to be using the same "
-"service as the account you select."
-msgstr ""
-"Από την αναπτυσσόμενη λίστα <gui>Λογαριασμός</gui>, επιλέξτε το λογαριασμό "
-"που θέλετε να χρησιμοποιήσετε για να επικοινωνείτε με την επαφή σας. Η επαφή "
-"σας θα πρέπει να χρησιμοποιεί την ίδια υπηρεσία με την υπηρεσία του "
-"λογαριασμού που επιλέξατε."
-
-#: C/add-contact.page:45(item/p)
-msgid ""
-"In the <gui>Identifier</gui> field, enter your contact’s login ID, username, "
-"screen name, or other appropriate identifier for the service type."
-msgstr ""
-"Στο πεδίο <gui>Αναγνωριστικό</gui>, εισάγετε το όνομα χρήστη, το "
-"καταχωρημένο ψευδώνυμο, ή άλλο κατάλληλο αναγνωριστικό για την επαφή σας."
-
-#: C/add-contact.page:49(item/p)
-msgid ""
-"In the <gui>Alias</gui> field, type your contact’s name as you would like it "
-"to appear in your contact list."
-msgstr ""
-"Στο πεδίο <gui>Ψευδώνυμο</gui>, εισάγετε το όνομα με το οποίο θέλετε να "
-"εμφανίζεται η επαφή στη λίστα επαφών σας."
-
-#: C/add-contact.page:53(item/p)
-msgid "Click <gui>Add</gui> to add the person to your list of contacts."
-msgstr ""
-"Πατήστε <gui>Προσθήκη</gui> για να προσθέσετε το άτομο αυτό στη λίστα επαφών "
-"σας."
-
-#: C/add-contact.page:61(note/p)
-msgid ""
-"To add a new person to your list of contacts, you need to be connected to "
-"the Internet and to your account."
-msgstr ""
-"Για να προσθέσετε ένα νέο άτομο στη λίστα επαφών σας, θα πρέπει να έχετε "
-"συνδεθεί στο διαδίκτυο, καθώς και στο λογαριασμό σας."
-
-#: C/audio-call.page:10(info/desc)
-msgid "Call your contacts over the Internet."
-msgstr "Κλήση των επαφών σας μέσω διαδικτύου."
-
-#: C/audio-call.page:26(credit/name) C/overview.page:16(credit/name)
-#: C/share-desktop.page:18(credit/name) C/video-call.page:29(credit/name)
-msgid "Ekaterina Gerasimova"
-msgstr "Ekaterina Gerasimova"
-
-#: C/audio-call.page:35(page/title)
-msgid "Start an audio conversation"
-msgstr "Έναρξη φωνητικής κλήσης"
-
-#: C/audio-call.page:37(page/p)
-#| msgid ""
-#| "You can call your contacts and have an audio conversation with them. This "
-#| "features only works with certain types of accounts, and it requires the "
-#| "other person to have an application that supports audio calls."
-msgid ""
-"You can call your contacts and have an audio conversation with them. This "
-"features only works with certain types of accounts and it requires the other "
-"person to have an application that supports audio calls."
-msgstr ""
-"Μπορείτε να καλείτε τις επαφές σας και να μιλάτε μαζί τους ηχητικά. Αυτή η "
-"λειτουργία διατίθεται μόνο για ορισμένους τύπους λογαριασμών και απαιτεί το "
-"άλλο άτομο να διαθέτει επίσης εφαρμογή που υποστηρίζει φωνητικές κλήσεις."
-
-#: C/audio-call.page:43(item/p)
-#| msgid ""
-#| "Select the contact you want to have the conversation, and from the menu "
-#| "select <gui style=\"menuitem\">Audio Call</gui>."
-msgid ""
-"Right-click on the contact that you want to call and select <gui style="
-"\"menuitem\">Audio Call</gui>."
-msgstr ""
-"Δεξιοπατήστε στην επαφή την οποία θέλετε να καλέσετε και επιλέξτε <gui "
-"style=\"menuitem\">Φωνητική κλήση</gui>."
-
-#: C/audio-call.page:49(item/p) C/video-call.page:50(item/p)
-#| msgid ""
-#| "A new window will open. When the connection is established, you will see "
-#| "<gui>Connected</gui> at the bottom of the window, along with the total "
-#| "conversation time."
-msgid ""
-"A new window will open. When the connection is established, you will see the "
-"total conversation time at the bottom of the window."
-msgstr ""
-"Θα ανοίξει ένα νέο παράθυρο. Όταν επιτευχθεί η σύνδεση, θα δείτε τον "
-"συνολικό χρόνο συζήτησης στο κάτω μέρος του παραθύρου."
-
-#: C/audio-call.page:55(item/p)
-#| msgid ""
-#| "To end the conversation, click on <gui style=\"button\">Hang up</gui>."
-msgid ""
-"To end the conversation, click the <gui style=\"button\">hand up</gui> "
-"button."
-msgstr ""
-"Για να τερματίσετε τη συνομιλία, πατήστε το κουμπί <gui "
-"style=\"button\">Κλείσιμο</gui>."
-
-#: C/audio-call.page:63(note/p)
-msgid ""
-"To turn an audio conversation into a video conversation, choose <guiseq><gui "
-"style=\"menu\">Video</gui> <gui style=\"menuitem\">Video On</gui></guiseq>."
-msgstr ""
-"Για να μετατρέψετε μια φωνητική κλήση σε βιντεοκλήση, επιλέξτε <guiseq><gui "
-"style=\"menu\">Βίντεο</gui> <gui style=\"menuitem\">Βίντεο "
-"ενεργό</gui></guiseq>."
-
-#: C/audio-call.page:71(section/title)
-msgid "Start an audio conversation with a meta-contact"
-msgstr "Έναρξη φωνητικής συζήτησης με μια μετα-επαφή"
-
-#: C/audio-call.page:74(item/p) C/send-message.page:53(item/p)
-#: C/video-call.page:68(item/p)
-msgid ""
-"From the <gui>Contact List</gui> window, right-click on the meta-contact."
-msgstr "Στο παράθυρο <gui>Λίστα επαφών</gui>, κάντε δεξί κλικ στη μετα-επαφή."
-
-#: C/audio-call.page:79(item/p)
-msgid ""
-"Select the contact you want to have the conversation, and from the menu "
-"select <gui style=\"menuitem\">Audio Call</gui>."
-msgstr ""
-"Επιλέξτε την επαφή με την οποία θέλετε να συζητήσετε, και από το μενού "
-"επιλέξτε <gui style=\"menuitem\">Φωνητική κλήση</gui>."
-
-#: C/audio-call.page:86(note/p) C/send-message.page:65(note/p)
-#: C/video-call.page:80(note/p)
-msgid ""
-"To recognize if a contact is a <em>meta-contact</em>, move your mouse on a "
-"contact in the <gui>Contact List</gui> window, and stop over it for a "
-"second: a small pop-up message will appear showing the number of the "
-"contacts that form the meta-contact."
-msgstr ""
-"Για να αναγνωρίσετε αν μια επαφή είναι μια <em>μετα-επαφή</em>, μετακινήστε "
-"το ποντίκι σε μια επαφή στο παράθυρο της <gui>Λίστας επαφών</gui> και "
-"σταματήστε το πάνω της για ένα δευτερόλεπτο: θα εμφανιστεί ένα μικρό "
-"αναδυόμενο μήνυμα που θα δείχνει τον αριθμό των επαφών που απαρτίζουν τη "
-"μετα-επαφή."
-
-#. This is a reference to an external file such as an image or video. When
-#. the file changes, the md5 hash will change to let you know you need to
-#. update your localized copy. The msgstr is not used at all. Set it to
-#. whatever you like once you have updated your copy of the file.
-#: C/audio-video.page:58(media)
-#| msgctxt "_"
-#| msgid ""
-#| "external ref='figures/audio-input-microphone.png' "
-#| "md5='8d89026b66a263a3bc5b1f0665948567'"
-msgctxt "_"
-msgid "external ref='figures/audio-input-microphone.png' md5='__failed__'"
-msgstr "external ref='figures/audio-input-microphone.png' md5='__failed__'"
-
-#. This is a reference to an external file such as an image or video. When
-#. the file changes, the md5 hash will change to let you know you need to
-#. update your localized copy. The msgstr is not used at all. Set it to
-#. whatever you like once you have updated your copy of the file.
-#: C/audio-video.page:70(media)
-#| msgctxt "_"
-#| msgid ""
-#| "external ref='figures/camera-web.png' "
-#| "md5='8166b4372f25b78cbf5a64fe2eac2ce5'"
-msgctxt "_"
-msgid "external ref='figures/camera-web.png' md5='__failed__'"
-msgstr "external ref='figures/camera-web.png' md5='__failed__'"
-
-#: C/audio-video.page:8(info/desc)
-msgid ""
-"Information on when it is possible to have an audio or video conversation."
-msgstr ""
-"Πληροφορίες για τη δυνατότητα πραγματοποίησης φωνητικών κλήσεων και "
-"βιντεοκλήσεων."
-
-#: C/audio-video.page:32(page/title)
-msgid "Audio and video support"
-msgstr "Υποστήριξη ήχου και βίντεο"
-
-#: C/audio-video.page:34(page/p)
-msgid ""
-"You can only have audio and video conversation with contacts who are using "
-"an application which also supports this feature. When your contacts support "
-"audio or video conversations, you will see the following icons next to their "
-"names in the contact list:"
-msgstr ""
-"Μπορείτε να πραγματοποιείτε κλήσεις με ήχο και βίντεο μόνο αν οι επαφές σας "
-"χρησιμοποιούν εφαρμογές που υποστηρίζουν αυτές τις λειτουργίες. Αν οι επαφές "
-"σας διαθέτουν υποστήριξη για φωνητικές κλήσεις ή βιντεοκλήσεις, θα "
-"εμφανίζονται τα ακόλουθα εικονίδια δίπλα στο όνομά τους στη λίστα επαφών:"
-
-#: C/audio-video.page:43(td/p)
-msgid "Icon"
-msgstr "Εικονίδιο"
-
-#: C/audio-video.page:48(td/p)
-msgid "Description"
-msgstr "Περιγραφή"
-
-#: C/audio-video.page:57(td/p)
-msgid ""
-"<media type=\"image\" mime=\"image/png\" src=\"figures/audio-input-"
-"microphone.png\"> Icon for audio conversation </media>"
-msgstr ""
-"<media type=\"image\" mime=\"image/png\" src=\"figures/audio-input-"
-"microphone.png\"> Εικονίδιο για φωνητική συνομιλία </media>"
-
-#: C/audio-video.page:64(td/p)
-msgid "The contact is able to have an audio conversation."
-msgstr "Η επαφή μπορεί να πραγματοποιεί φωνητικές κλήσεις."
-
-#: C/audio-video.page:69(td/p)
-msgid ""
-"<media type=\"image\" mime=\"image/png\" src=\"figures/camera-web.png\"> "
-"Icon for video conversation </media>"
-msgstr ""
-"<media type=\"image\" mime=\"image/png\" src=\"figures/camera-web.png\"> "
-"Εικονίδιο για συνομιλία με βίντεο </media>"
-
-#: C/audio-video.page:76(td/p)
-msgid "The contact is able to have a video conversation."
-msgstr "Η επαφή μπορεί να πραγματοποιεί βιντεοκλήσεις."
-
-#: C/audio-video.page:83(note/p)
-msgid ""
-"In order to have an audio conversation, you need to have a sound card that "
-"is supported by your operating system, and a working microphone."
-msgstr ""
-"Για να πραγματοποιείτε φωνητικές κλήσεις, θα πρέπει να διαθέτετε κάρτα ήχου "
-"που να υποστηρίζεται από το λειτουργικό σας σύστημα, καθώς και μικρόφωνο."
-
-#: C/audio-video.page:87(note/p)
-msgid ""
-"In order to have a video conversation, you need to have a webcam that is "
-"supported by your operating system, and a working microphone."
-msgstr ""
-"Για να πραγματοποιείτε βιντεοκλήσεις, θα πρέπει να διαθέτετε κάμερα δικτύου "
-"που να υποστηρίζεται από το λειτουργικό σας σύστημα, καθώς και μικρόφωνο."
-
-#: C/audio-video.page:95(section/title)
-msgid "Supported Account Types"
-msgstr "Υποστηριζόμενοι τύποι λογαριασμών"
-
-#: C/audio-video.page:97(section/p)
-msgid ""
-"You can only have audio and video conversations using accounts on certain "
-"supported services. The following table lists whether audio and video is "
-"supported for each type of account."
-msgstr ""
-"Οι φωνητικές κλήσεις και οι βιντεοκλήσεις υποστηρίζονται μόνο από ορισμένους "
-"τύπους λογαριασμών. Στον ακόλουθο πίνακα μπορείτε να δείτε τους τύπους "
-"λογαριασμών που υποστηρίζουν κλήσεις βίντεο ή ήχου."
-
-#: C/audio-video.page:102(note/p)
-msgid ""
-"Account types are provided by plugins. Your system may not have all of the "
-"following types available, or it may have types not listed here. Updated "
-"plugins may make audio or video conversations possible on account types that "
-"are listed as unsupported here."
-msgstr ""
-"Η υποστήριξη για τους διάφορους τύπους λογαριασμών παρέχεται μέσω προσθέτων. "
-"Το σύστημά σας μπορεί να μην υποστηρίζει όλους τους τύπους λογαριασμών που "
-"περιγράφονται σε αυτό το εγχειρίδιο, ή μπορεί να υποστηρίζει και άλλους "
-"τύπους λογαριασμών. Επίσης, μπορεί να διαθέτει ενημερωμένα πρόσθετα που να "
-"υποστηρίζουν κλήσεις βίντεο ή ήχου για τύπους λογαριασμών για τους οποίους "
-"αναφέρεται ότι δεν υποστηρίζονται."
-
-#: C/audio-video.page:128(td/p)
-msgid "Service"
-msgstr "Υπηρεσία"
-
-#: C/audio-video.page:129(td/p)
-msgid "Audio"
-msgstr "Ήχος"
-
-#: C/audio-video.page:130(td/p)
-msgid "Video"
-msgstr "Βίντεο"
-
-#: C/audio-video.page:135(td/p)
-msgid "AIM"
-msgstr "AIM"
-
-#: C/audio-video.page:136(td/p) C/audio-video.page:137(td/p)
-#: C/audio-video.page:141(td/p) C/audio-video.page:142(td/p)
-#: C/audio-video.page:146(td/p) C/audio-video.page:147(td/p)
-#: C/audio-video.page:156(td/p) C/audio-video.page:157(td/p)
-#: C/audio-video.page:161(td/p) C/audio-video.page:162(td/p)
-#: C/audio-video.page:166(td/p) C/audio-video.page:167(td/p)
-#: C/audio-video.page:181(td/p) C/audio-video.page:182(td/p)
-#: C/audio-video.page:186(td/p) C/audio-video.page:187(td/p)
-#: C/audio-video.page:191(td/p) C/audio-video.page:192(td/p)
-#: C/audio-video.page:196(td/p) C/audio-video.page:197(td/p)
-#: C/audio-video.page:201(td/p) C/audio-video.page:202(td/p)
-#: C/audio-video.page:211(td/p) C/audio-video.page:212(td/p)
-#: C/audio-video.page:216(td/p) C/audio-video.page:217(td/p)
-msgid "No"
-msgstr "Όχι"
-
-#: C/audio-video.page:140(td/p)
-msgid "Facebook Chat"
-msgstr "Συνομιλία Facebook"
-
-#: C/audio-video.page:145(td/p)
-msgid "gadugadu"
-msgstr "gadugadu"
-
-#: C/audio-video.page:150(td/p)
-msgid "Google Talk"
-msgstr "Google Talk"
-
-#: C/audio-video.page:151(td/p) C/audio-video.page:152(td/p)
-#: C/audio-video.page:171(td/p) C/audio-video.page:172(td/p)
-#: C/audio-video.page:176(td/p) C/audio-video.page:177(td/p)
-#: C/audio-video.page:206(td/p) C/audio-video.page:207(td/p)
-msgid "Yes"
-msgstr "Ναι"
-
-#: C/audio-video.page:155(td/p)
-msgid "Groupwise"
-msgstr "Groupwise"
-
-#: C/audio-video.page:160(td/p)
-msgid "ICQ"
-msgstr "ICQ"
-
-#: C/audio-video.page:165(td/p) C/create-account.page:107(section/title)
-msgid "IRC"
-msgstr "IRC"
-
-#: C/audio-video.page:170(td/p) C/create-account.page:60(section/title)
-msgid "Jabber"
-msgstr "Jabber"
-
-#: C/audio-video.page:175(td/p)
-msgid "MSN"
-msgstr "MSN"
-
-#: C/audio-video.page:180(td/p)
-msgid "myspace"
-msgstr "myspace"
-
-#: C/audio-video.page:185(td/p)
-msgid "qq"
-msgstr "qq"
-
-#: C/audio-video.page:190(td/p) C/create-account.page:78(section/title)
-msgid "People Nearby"
-msgstr "Γειτονικά άτομα"
-
-#: C/audio-video.page:195(td/p)
-msgid "sametime"
-msgstr "sametime"
-
-#: C/audio-video.page:200(td/p)
-msgid "silc"
-msgstr "silc"
-
-#: C/audio-video.page:205(td/p) C/create-account.page:89(section/title)
-msgid "SIP"
-msgstr "SIP"
-
-#: C/audio-video.page:210(td/p)
-msgid "Yahoo!"
-msgstr "Yahoo!"
-
-#: C/audio-video.page:215(td/p)
-msgid "zephyr"
-msgstr "zephyr"
-
-#: C/change-status.page:9(info/desc)
-msgid "Change your status to advertise your availability to your contacts."
-msgstr ""
-"Αλλαγή της κατάστασής σας και ενημέρωση των επαφών σας για τη διαθεσιμότητά "
-"σας."
-
-#: C/change-status.page:39(page/title)
-msgid "Change your status"
-msgstr "Αλλαγή της κατάστασής σας"
-
-#: C/change-status.page:41(page/p)
-msgid ""
-"You can set your status to indicate your availability to your contacts. "
-"<app>Empathy</app> allows you to select from a list of defined statuses."
-msgstr ""
-"Μπορείτε να ορίζετε την κατάστασή σας για να ενημερώνετε τις επαφές σας για "
-"το αν είστε διαθέσιμοι. Το <app>Empathy</app> σας επιτρέπει να επιλέγετε από "
-"μια σειρά καταστάσεων."
-
-#: C/change-status.page:46(item/p)
-msgid ""
-"Click on the drop-down list at the top of the <gui>Contact List</gui> window."
-msgstr ""
-"Κάνετε κλικ στην αναπτυσσόμενη λίστα στο πάνω μέρος του παραθύρου <gui>Λίστα "
-"επαφών</gui>."
-
-#: C/change-status.page:51(item/p)
-msgid "Select a status from the list."
-msgstr "Επιλέξτε μια κατάσταση από τη λίστα."
-
-#: C/change-status.page:57(page/p)
-msgid ""
-"See <link xref=\"status-icons\"/> for a list of the built-in statuses and "
-"what they mean. You can also <link xref=\"set-custom-status\">add custom "
-"status messages</link> to provide more information about your availability "
-"to your contacts."
-msgstr ""
-"Στο <link xref=\"status-icons\"/> υπάρχει μια λίστα με τις ενσωματωμένες "
-"καταστάσεις και το τι σημαίνουν. Επίσης, μπορείτε να <link xref=\"set-custom-"
-"status\">προσθέτετε προσαρμοσμένα μηνύματα κατάστασης</link> που παρέχουν "
-"περισσότερες πληροφορίες για τη διαθεσιμότητά σας στις επαφές σας."
-
-#: C/change-status.page:63(note/p)
-msgid ""
-"If you do not use your computer for a while, or if the screensaver is on, "
-"the status will be automatically set to Away."
-msgstr ""
-"Αν δεν έχετε χρησιμοποιήσει τον υπολογιστή σας για κάποιο χρονικό διάστημα, "
-"ή αν έχει ενεργοποιηθεί η προστασία οθόνης, επιλέγεται αυτόματα η κατάσταση "
-"Απουσιάζει."
-
-#: C/create-account.page:9(info/desc)
-msgid "Register for an account with one of the supported messaging services."
-msgstr ""
-"Δημιουργία λογαριασμού σε μία από τις υποστηριζόμενες υπηρεσίες μηνυμάτων."
-
-#: C/create-account.page:34(page/title)
-msgid "Register for a new account"
-msgstr "Δημιουργία νέου λογαριασμού"
-
-#: C/create-account.page:36(page/p)
-msgid ""
-"Most account types require you to create an account with a account provider "
-"before you can connect using instant messaging applications like "
-"<app>Empathy</app>. With some account providers, you can use <app>Empathy</"
-"app> to register for a new account, using the same steps as you would to "
-"<link xref=\"add-account\">add an account</link>."
-msgstr ""
-"Οι περισσότερες υπηρεσίες απαιτούν τη δημιουργία λογαριασμού σε συγκεκριμένο "
-"πάροχο, πριν σας επιτρέψουν να στέλνετε άμεσα μηνύματα, χρησιμοποιώντας "
-"εφαρμογές όπως το <app>Empathy</app>. Για ορισμένους παρόχους μπορείτε να "
-"χρησιμοποιήσετε το <app>Empathy</app> για να δημιουργήσετε νέο λογαριασμό, "
-"ακολουθώντας την ίδια διαδικασία που θα χρησιμοποιούσατε και για <link xref="
-"\"add-account\">προσθήκη λογαριασμού</link>."
-
-#: C/create-account.page:42(page/p)
-msgid ""
-"This page provides information on creating a new account for various types "
-"of accounts. Your account provider should give you a login ID and a "
-"password, as well as any additional information you need to connect using "
-"<app>Empathy</app>."
-msgstr ""
-"Αυτή η σελίδα παρέχει πληροφορίες για τη δημιουργία νέου λογαριασμού σε "
-"διάφορες υπηρεσίες. Ο πάροχος του λογαριασμού θα πρέπει να σας παρέχει το "
-"όνομα χρήστη και το συνθηματικό σας, καθώς και οποιεσδήποτε άλλες "
-"πληροφορίες απαιτούνται για τη σύνδεση μέσω <app>Empathy</app>."
-
-#: C/create-account.page:47(section/title)
-msgid "Facebook"
-msgstr "Facebook"
-
-#: C/create-account.page:48(section/p)
-msgid ""
-"Facebook is one of the most-used social networks. It allows users to create "
-"their own profile and to communicate with their friends."
-msgstr ""
-"Το Facebook είναι ένα από τα ευρέως χρησιμοποιούμενα κοινωνικά δίκτυα. "
-"Επιτρέπει στους χρήστες να δημιουργήσουν το δικό τους προφίλ και να "
-"επικοινωνούν με τους φίλους τους."
-
-#: C/create-account.page:52(section/p)
-msgid ""
-"To use Facebook to communicate with your friends, you will need to create a "
-"new account from the website: <link href=\"http://www.facebook.com\">www."
-"facebook.com</link>."
-msgstr ""
-"Για να χρησιμοποιήσετε το Facebook για να επικοινωνήσετε με τους φίλους σας, "
-"θα πρέπει να δημιουργήσετε ένα καινούριο λογαριασμό από αυτή την ιστοσελίδα: "
-"<link href=\"http://www.facebook.com\">www.facebook.com</link>."
-
-#: C/create-account.page:62(section/p)
-msgid ""
-"Jabber is an open instant messaging system. Like email, Jabber allows you to "
-"choose your account provider and communicate with all other Jabber users, "
-"regardless of their account provider."
-msgstr ""
-"Το Jabber είναι ένα ανοιχτό σύστημα άμεσων μηνυμάτων. Όπως και η ηλεκτρονική "
-"αλληλογραφία, το Jabber σας επιτρέπει να επιλέξετε τον πάροχο του "
-"λογαριασμού σας και να επικοινωνήσετε με όλους τους άλλους χρήστες, "
-"ανεξάρτητα από τον πάροχο λογαριασμού τους."
-
-#: C/create-account.page:66(section/p)
-msgid ""
-"You will need to create a new account with a Jabber provider. There are many "
-"free providers; one popular provider is <link href=\"http://register.jabber."
-"org/\">Jabber.org</link>."
-msgstr ""
-"Θα πρέπει να δημιουργήσετε λογαριασμό σε έναν πάροχο Jabber. Πολλοί πάροχοι "
-"προσφέρουν δωρεάν λογαριασμούς· ένας δημοφιλής πάροχος είναι το <link href="
-"\"http://register.jabber.org/\">Jabber.org</link>."
-
-#: C/create-account.page:71(note/p)
-msgid ""
-"If you use Google Mail or Google Talk, you already have a Jabber account. "
-"Google Talk is a Jabber service. Simply use your Google Mail address and "
-"password in <app>Empathy</app> to connect."
-msgstr ""
-"Αν χρησιμοποιείτε το Google Mail ή το Google Talk, τότε διαθέτετε ήδη "
-"λογαριασμό Jabber. Το Google Talk είναι υπηρεσία Jabber. Άρα, απλά εισάγετε "
-"τη διεύθυνση και το συνθηματικό του λογαριασμού σας στο Google Mail για να "
-"συνδεθείτε μέσω <app>Empathy</app>."
-
-#: C/create-account.page:80(section/p)
-msgid ""
-"You do not need to create an account with a service provider to use this "
-"feature. This service works whenever you are connected to a local network, "
-"such as a wireless hotspot. It automatically finds all other users on the "
-"network who are also using this service."
-msgstr ""
-"Δε χρειάζεται να έχετε λογαριασμό σε κάποιον πάροχο για να χρησιμοποιήσετε "
-"αυτή τη λειτουργία. Η λειτουργία αυτή είναι διαθέσιμη όποτε είστε "
-"συνδεδεμένοι σε ένα τοπικό δίκτυο, π.χ. ένα σημείο ασύρματης πρόσβασης στο "
-"διαδίκτυο. Η υπηρεσία εντοπίζει αυτόματα όλους τους υπόλοιπους χρήστες του "
-"δικτύου που χρησιμοποιούν και αυτοί την ίδια υπηρεσία."
-
-#: C/create-account.page:85(section/p)
-msgid "For more information, see <link xref=\"salut-protocol\"/>."
-msgstr ""
-"Για περισσότερες πληροφορίες, δείτε την <link xref=\"salut-protocol\"/>."
-
-#: C/create-account.page:91(section/p)
-msgid ""
-"SIP is an open system which allows users to have audio and video "
-"conversations over the Internet. You need to create an account with a SIP "
-"provider. You can communicate with all other SIP users, regardless of which "
-"SIP provider they use."
-msgstr ""
-"Το SIP είναι ένα ανοιχτό σύστημα που επιτρέπει στους χρήστες του να κάνουν "
-"φωνητικές κλήσεις και βιντεοκλήσεις μέσω διαδικτύου. Θα πρέπει να "
-"δημιουργήσετε λογαριασμό σε έναν πάροχο SIP. Στη συνέχεια, θα μπορείτε να "
-"επικοινωνείτε με όλους τους υπόλοιπους χρήστες SIP, ανεξάρτητα από τον "
-"πάροχό τους."
-
-#: C/create-account.page:97(note/p)
-msgid ""
-"Due to technical differences, the free <link href=\"https://www.ekiga.net/"
-"index.php?page=register\">Ekiga.net</link> service does not currently work "
-"with <app>Empathy</app>."
-msgstr ""
-"Εξαιτίας ορισμένων τεχνικών διαφορών, προς το παρόν η ελεύθερη υπηρεσία "
-"<link href=\"https://www.ekiga.net/index.php?page=register\">Ekiga.net</link> "
-"δεν υποστηρίζεται από το <app>Empathy</app>."
-
-#: C/create-account.page:102(section/p)
-msgid ""
-"Some SIP providers allow you to call normal phones from your computer. "
-"Generally, you will need to subscribe to a paid service for this feature."
-msgstr ""
-"Ορισμένοι πάροχοι SIP σας επιτρέπουν να καλείτε κανονικά τηλέφωνα από τον "
-"υπολογιστή σας. Συνήθως, θα πρέπει να έχετε εγγραφεί σε μια υπηρεσία που "
-"προσφέρεται επί πληρωμή για να εκμεταλλευτείτε αυτή τη δυνατότητα."
-
-#: C/create-account.page:109(section/p)
-msgid ""
-"You do not need to register for an account to use IRC. Although you specify "
-"a nickname when you add an IRC account to <app>Empathy</app>, this nickname "
-"is only established each time you connect. If another user is using the "
-"nickname, you will need to choose a new nickname."
-msgstr ""
-"Δε χρειάζεται να διαθέτετε λογαριασμό για να χρησιμοποιήσετε το IRC. Παρόλο "
-"που πρέπει να επιλέξετε ένα ψευδώνυμο για να προσθέσετε ένα λογαριασμό IRC "
-"στο <app>Empathy</app>, το ψευδώνυμο αυτό μπορεί να αλλάζει κάθε φορά που "
-"συνδέεστε. Επίσης, αν υπάρχει άλλος χρήστης με το ίδιο ψευδώνυμο, θα πρέπει "
-"να αλλάξετε το δικό σας."
-
-#: C/create-account.page:114(section/p)
-msgid ""
-"Some IRC networks use a service called NickServ to allow users to protect "
-"their nicknames. See <link xref=\"irc-nick-password\"/> for more information."
-msgstr ""
-"Ορισμένα δίκτυα IRC χρησιμοποιούν μία υπηρεσία που ονομάζεται NickServ και η "
-"οποία επιτρέπει στους χρήστες να προστατεύουν τα ψευδώνυμά τους. Δείτε το "
-"<link xref=\"irc-nick-password\"/> για περισσότερες πληροφορίες."
-
-#: C/create-account.page:117(section/p)
-msgid ""
-"Some IRC servers are password protected. You will need to know the password "
-"to connect to these servers. Generally, these are private IRC networks."
-msgstr ""
-"Ορισμένοι εξυπηρετητές IRC προστατεύονται από συνθηματικό. Για να συνδεθείτε "
-"σε αυτούς τους εξυπηρετητές θα πρέπει να γνωρίζετε το συνθηματικό τους. "
-"Συνήθως πρόκειται για ιδιωτικά δίκτυα IRC."
-
-#: C/create-account.page:122(section/title)
-msgid "Proprietary Services"
-msgstr "Ιδιοταγείς υπηρεσίες"
-
-#: C/create-account.page:124(section/p)
-msgid ""
-"There are many proprietary instant messaging services that have been "
-"developed by different companies or organizations. <app>Empathy</app> allows "
-"you to connect to an existing account for most popular services. To create a "
-"new account with one of these services, you will need to visit the service’s "
-"web site and agree to its terms of use."
-msgstr ""
-"Διάφορες εταιρείες και οργανισμοί έχουν αναπτύξει τις δικές τους ιδιοταγείς "
-"υπηρεσίες άμεσων μηνυμάτων. Το <app>Empathy</app> σας επιτρέπει να συνδέεστε "
-"σε λογαριασμούς των περισσότερων δημοφιλών υπηρεσιών. Για να δημιουργήσετε "
-"ένα νέο λογαριασμό για μία από αυτές τις υπηρεσίες, θα πρέπει να "
-"επισκεφθείτε την ιστοσελίδα της υπηρεσίας και να αποδεχτείτε τους όρους "
-"χρήσης της."
-
-#: C/create-account.page:132(item/p)
-msgid "<link href=\"http://dashboard.aim.com/aim\">AIM</link>"
-msgstr "<link href=\"http://dashboard.aim.com/aim\">AIM</link>"
-
-#: C/create-account.page:137(item/p)
-msgid "<link href=\"https://www.icq.com/register/\">ICQ</link>"
-msgstr "<link href=\"https://www.icq.com/register/\">ICQ</link>"
-
-#: C/create-account.page:142(item/p)
-msgid "<link href=\"https://accountservices.passport.net\">MSN</link>"
-msgstr "<link href=\"https://accountservices.passport.net\">MSN</link>"
-
-#: C/create-account.page:147(item/p)
-msgid "<link href=\"https://login.yahoo.com/config/login\">Yahoo!</link>"
-msgstr "<link href=\"https://login.yahoo.com/config/login\">Yahoo!</link>"
-
-#: C/disable-account.page:9(info/desc)
-msgid "Prevent <app>Empathy</app> from automatically logging in to an account."
-msgstr ""
-"Εμποδίζοντας το <app>Empathy</app> να συνδέεται αυτόματα στους λογαριασμούς."
-
-#: C/disable-account.page:40(page/title)
-msgid "Disable an account"
-msgstr "Απενεργοποίηση λογαριασμού"
-
-#: C/disable-account.page:42(page/p)
-msgid ""
-"You can disable an account to prevent <app>Empathy</app> from logging in to "
-"it without removing the account entirely. You may wish to disable and re-"
-"enable an account if you only want to be logged in to the account at certain "
-"times, but you still want to use <app>Empathy</app> for other accounts."
-msgstr ""
-"Μπορείτε να απενεργοποιήσετε ένα λογαριασμό για αποφυγή σύνδεσης του "
-"<app>Empathy</app> χωρίς πλήρη αφαίρεση του λογαριασμού. Μπορεί να θέλετε να "
-"απενεργοποιήσετε και να επανεργοποιήσετε έναν λογαριασμό αν θέλετε μόνο να "
-"συνδεθείτε στον λογαριασμό συγκεκριμένες φορές, αλλά να θέλετε να "
-"χρησιμοποιήσετε ακόμα το <app>Empathy</app> για άλλους λογαριασμούς."
-
-#: C/disable-account.page:53(item/p)
-msgid ""
-"Select the account you wish to disable from the accounts list on the left "
-"side of the window."
-msgstr ""
-"Επιλέξτε το λογαριασμό που θέλετε να απενεργοποιήσετε από τη λίστα "
-"λογαριασμών στην αριστερή πλευρά του παραθύρου."
-
-#: C/disable-account.page:57(item/p)
-msgid "On the right side of the window, switch it off."
-msgstr "Στη δεξιά πλευρά του παραθύρου, απενεργοποιήστε τον."
-
-#: C/disable-account.page:62(page/p)
-msgid "To re-enable the account, switch it on."
-msgstr "Για να επανενεργοποιήσετε το λογαριασμό, απλά ενεργοποιήστε τον."
-
-#: C/favorite-rooms.page:10(info/desc)
-msgid "Set, join and manage favorite rooms."
-msgstr "Ορισμός, είσοδος και διαχείριση αγαπημένων δωματίων."
-
-#: C/favorite-rooms.page:29(page/title)
-msgid "Favorite rooms"
-msgstr "Αγαπημένα δωμάτια"
-
-#: C/favorite-rooms.page:32(section/title)
-msgid "Set a room as a favorite"
-msgstr "Ορισμός ενός δωματίου ως αγαπημένου"
-
-#: C/favorite-rooms.page:35(item/p)
-msgid "Join a room."
-msgstr "Μπείτε στο δωμάτιο."
-
-#: C/favorite-rooms.page:40(item/p)
-msgid ""
-"See <link xref=\"irc-join-room\"/> for more information on how to join an "
-"IRC room."
-msgstr ""
-"Δείτε την <link xref=\"irc-join-room\"/> για περισσότερες πληροφορίες "
-"σχετικά με την είσοδο σε δωμάτια IRC."
-
-#: C/favorite-rooms.page:46(item/p)
-msgid ""
-"See <link xref=\"group-conversations\"/> for more information on how to "
-"start or join a group conversation."
-msgstr ""
-"Δείτε την <link xref=\"group-conversations\"/> για περισσότερες πληροφορίες "
-"σχετικά με την έναρξη ομαδικών συζητήσεων ή την είσοδο σε αυτές."
-
-#: C/favorite-rooms.page:54(item/p)
-msgid ""
-"From the conversation window, choose <guiseq><gui>Conversation</"
-"gui><gui>Favorite Chat Room</gui></guiseq>."
-msgstr ""
-"Από το παράθυρο της συζήτησης, επιλέξτε <guiseq><gui>Συζήτηση</"
-"gui><gui>Αγαπημένο δωμάτιο συζήτησης</gui></guiseq>."
-
-#: C/favorite-rooms.page:63(section/title)
-msgid "Join favorite rooms"
-msgstr "Είσοδος στα αγαπημένα σας δωμάτια"
-
-#: C/favorite-rooms.page:66(item/p) C/send-file.page:40(item/p)
-msgid "From the <gui>Contact List</gui> window, perform one of the following:"
-msgstr "Από το παράθυρο <gui>Λίστα επαφών</gui>, κάνετε ένα από τα ακόλουθα:"
-
-#: C/favorite-rooms.page:71(item/p)
-msgid "Press <key>F5</key>."
-msgstr "Πατήστε <key>F5</key>."
-
-#: C/favorite-rooms.page:76(item/p)
-msgid ""
-"Choose <guiseq><gui>Room</gui><gui>Join Favorites</gui></guiseq>, to join "
-"all your favorite rooms."
-msgstr ""
-"Επιλέξτε <guiseq><gui>Δωμάτιο</gui><gui>Είσοδος στα αγαπημένα</gui></guiseq> "
-"για να μπείτε σε όλα τα αγαπημένα σας δωμάτια."
-
-#: C/favorite-rooms.page:82(item/p)
-msgid "Choose <gui>Room</gui>, and select the favorite room you want to join."
-msgstr ""
-"Επιλέξτε πρώτα <gui>Δωμάτιο</gui>, και στη συνέχεια το αγαπημένο δωμάτιο στο "
-"οποίο θέλετε να μπείτε."
-
-#: C/favorite-rooms.page:90(note/p)
-msgid ""
-"To join a favorite room, you need to be connected to the Internet and to "
-"your account."
-msgstr ""
-"Για να μπείτε σε ένα αγαπημένο δωμάτιο, πρέπει να έχετε συνδεθεί στο "
-"διαδίκτυο, καθώς και στο λογαριασμό σας."
-
-#: C/favorite-rooms.page:98(section/title)
-msgid "Manage favorite rooms"
-msgstr "Διαχείριση αγαπημένων δωματίων"
-
-#: C/favorite-rooms.page:101(item/p)
-msgid ""
-"From the <gui>Contact List</gui> window, choose <guiseq><gui>Room</"
-"gui><gui>Manage Favorites</gui></guiseq>."
-msgstr ""
-"Από το παράθυρο <gui>Λίστα επαφών</gui>, επιλέξτε <guiseq><gui>Δωμάτιο</"
-"gui><gui>Διαχείριση αγαπημένων</gui></guiseq>."
-
-#: C/favorite-rooms.page:107(item/p)
-msgid ""
-"From the <gui>Account</gui> drop-down list, select the account you want to "
-"manage the favorite rooms of."
-msgstr ""
-"Από την αναπτυσσόμενη λίστα <gui>Λογαριασμός</gui>, επιλέξτε το λογαριασμό "
-"του οποίου τα αγαπημένα δωμάτια θέλετε να διαχειριστείτε."
-
-#: C/favorite-rooms.page:111(item/p)
-msgid "Select <gui>All</gui> to see all you favorite rooms."
-msgstr "Επιλέξτε <gui>Όλα</gui> για να δείτε όλα τα αγαπημένα σας δωμάτια."
-
-#: C/favorite-rooms.page:116(item/p)
-msgid "Select the favorite room you want to manage:"
-msgstr "Επιλέξτε το αγαπημένο δωμάτιο το οποίο θέλετε να διαχειριστείτε:"
-
-#: C/favorite-rooms.page:121(item/p)
-msgid ""
-"Select the <gui>Auto-Connect</gui> check-box in order to automatically join "
-"that room when you connect to your account."
-msgstr ""
-"Σημειώστε την επιλογή <gui>Αυτόματη σύνδεση</gui>, για να μπαίνετε αυτόματα "
-"στο δωμάτιο κάθε φορά που συνδέεστε στο λογαριασμό σας."
-
-#: C/favorite-rooms.page:127(item/p)
-msgid "Click on <gui>Remove</gui> to remove the room from your favorites."
-msgstr ""
-"Πατήστε <gui>Διαγραφή</gui> για να αφαιρέσετε το δωμάτιο από τα αγαπημένα "
-"σας."
-
-#: C/favorite-rooms.page:134(item/p)
-msgid "When done, click <gui>Close</gui>."
-msgstr "Όταν τελειώσετε, κάντε κλικ στο κουμπί <gui>Κλείσιμο</gui>."
-
-#: C/geolocation.page:8(info/desc)
-msgid "Use and understand geolocation in <app>Empathy</app>."
-msgstr "Χρήση και κατανόηση του εντοπισμού τοποθεσίας στο <app>Empathy</app>."
-
-#: C/geolocation.page:32(page/title)
-msgid "Geographical position"
-msgstr "Γεωγραφική θέση"
-
-#: C/geolocation.page:35(section/title)
-msgid "Geolocation"
-msgstr "Εντοπισμός τοποθεσίας"
-
-#: C/geolocation.page:39(section/title)
-msgid "Fix common problems"
-msgstr "Επίλυση κοινών προβλημάτων"
-
-#: C/geolocation-not-showing.page:8(info/desc)
-msgid "<app>Empathy</app> does not publish my geographical position."
-msgstr "Το <app>Empathy</app> δε δημοσιεύει τη γεωγραφική μου θέση."
-
-#: C/geolocation-not-showing.page:32(page/title)
-msgid "Geographical position not published"
-msgstr "Μη δημοσίευση γεωγραφικής θέσης"
-
-#: C/geolocation-not-showing.page:34(page/p)
-msgid ""
-"If your contacts cannot see your location, <app>Empathy</app> might not be "
-"able to discover with a good margin of precision your geographical position."
-msgstr ""
-"Αν οι επαφές σας δεν μπορούν να δουν την τοποθεσία σας, ίσως το "
-"<app>Empathy</app> να μη μπορεί να προσδιορίσει τη γεωγραφική σας θέση με "
-"αρκετή ακρίβεια."
-
-#: C/geolocation-not-showing.page:38(page/p)
-msgid ""
-"In this case, your position will not be published, but you are still able to "
-"see the location of your contacts."
-msgstr ""
-"Σε αυτήν την περίπτωση, η δική σας τοποθεσία δε δημοσιεύεται, αλλά "
-"εξακολουθείτε να βλέπετε τις τοποθεσίες των επαφών σας."
-
-#: C/geolocation-not-showing.page:42(page/p)
-msgid ""
-"If you want to publish your geographical position, you can try to use an "
-"external device such as a GPS."
-msgstr ""
-"Αν θέλετε να δημοσιεύσετε τη γεωγραφική σας θέση, μπορείτε να δοκιμάσετε με "
-"μια εξωτερική συσκευή όπως ένα GPS."
-
-#: C/geolocation-not-showing.page:48(note/p)
-msgid ""
-"In order to publish your geographical location, your Jabber server needs to "
-"support the Personal Eventing Protocal (PEP). A list of <link href=\"http://"
-"coccinella.im/servers/servers_by_pubsub_pep.html\">servers which support "
-"PEP</link> is maintained online. Google Talk does not support this feature "
-"at this time."
-msgstr ""
-"Για να είναι σε θέση να δημοσιεύει τη γεωγραφική σας θέση, ο εξυπηρετητής "
-"Jabber που χρησιμοποιείτε θα πρέπει να υποστηρίζει το πρωτόκολλο Personal "
-"Eventing Protocol (PEP). Στο διαδίκτυο μπορείτε να βρείτε μία λίστα με τους "
-"<link href=\"http://coccinella.im/servers/servers_by_pubsub_pep.html"
-"\">εξυπηρετητές με υποστήριξη PEP</link>. Προς το παρόν, το Google Talk δεν "
-"υποστηρίζει αυτή τη λειτουργία."
-
-#: C/geolocation-privacy.page:8(info/desc)
-msgid "What information are sent and to who."
-msgstr "Είδος και παραλήπτες πληροφοριών."
-
-#: C/geolocation-privacy.page:32(page/title)
-msgid "Geolocation Privacy"
-msgstr "Απόρρητο εντοπισμού τοποθεσίας"
-
-#: C/geolocation-privacy.page:35(section/title)
-msgid "What information is sent"
-msgstr "Είδος πληροφοριών που αποστέλλονται"
-
-#: C/geolocation-privacy.page:36(section/p)
-msgid ""
-"What is possible to send is: your country, region, locality, area, street, "
-"building, floor, room, and postal code, longitude, latitude and altitude, "
-"speed and bearing."
-msgstr ""
-"Υπάρχει δυνατότητα αποστολής των ακόλουθων στοιχείων: χώρα, περιφέρεια, "
-"περιοχή, ταχυδρομικός κώδικας, οδός, κτίριο, όροφος, δωμάτιο, γεωγραφικός "
-"μήκος, γεωγραφικό πλάτος, υψόμετρο, ταχύτητα και προσανατολισμός."
-
-#: C/geolocation-privacy.page:40(section/p)
-msgid ""
-"The accuracy and the quantity of information about your geographical "
-"position are based on the software or on the infrastructure used to discover "
-"your position."
-msgstr ""
-"Η ακρίβεια και η ποσότητα των πληροφοριών εξαρτώνται από το λογισμικό και "
-"την υποδομή που χρησιμοποιείται για τον εντοπισμό της θέσης σας."
-
-#: C/geolocation-privacy.page:44(section/p)
-msgid ""
-"Different kind of networks may have different accuracy settings, and may "
-"send different information. The use of external devices such as GPS or "
-"mobile phone will increase the accuracy of the information sent."
-msgstr ""
-"Κάθε δίκτυο μπορεί να έχει διαφορετικές ρυθμίσεις ακριβείας και να στέλνει "
-"διαφορετικές πληροφορίες. Η χρήση εξωτερικών συσκευών, όπως είναι τα GPS και "
-"τα κινητά τηλέφωνα, μπορεί να αυξήσει την ακρίβεια των πληροφοριών."
-
-#: C/geolocation-privacy.page:49(section/p)
-msgid ""
-"When the privacy mode is enabled, nothing more precise than your city will "
-"be sent, even if you are using an external device."
-msgstr ""
-"Αν είναι ενεργοποιημένη η λειτουργία απορρήτου, η πιο ακριβής πληροφορία που "
-"θα αποστέλλεται θα είναι η πόλη σας, ακόμη και αν χρησιμοποιείτε εξωτερική "
-"συσκευή."
-
-#: C/geolocation-privacy.page:56(section/title)
-msgid "Who can see the information sent"
-msgstr "Πρόσβαση άλλων στις πληροφορίες"
-
-#: C/geolocation-privacy.page:57(section/p)
-msgid "Only your contacts can see your geographical position."
-msgstr "Μόνο οι επαφές σας μπορούν να βλέπουν τη γεωγραφική σας θέση."
-
-#: C/geolocation-privacy.page:63(section/title)
-msgid "What is the privacy mode"
-msgstr "Λειτουργία απορρήτου"
-
-#: C/geolocation-privacy.page:64(section/p)
-msgid ""
-"The privacy mode, enabled by default, is a reduced accuracy mode that will "
-"decrease the accuracy of the geographical position sent to your contacts."
-msgstr ""
-"Η λειτουργία απορρήτου, που είναι και η προεπιλεγμένη, είναι μια λειτουργία "
-"που μειώνει την ακρίβεια της γεωγραφικής θέσης που αποστέλλεται στις επαφές "
-"σας."
-
-#: C/geolocation-privacy.page:71(section/title)
-msgid "Privacy overview"
-msgstr "Περιγραφή απορρήτου"
-
-#: C/geolocation-privacy.page:72(section/p)
-msgid ""
-"Overview of the various geolocation privacy settings in <app>Empathy</app>."
-msgstr ""
-"Περιγραφή των βασικών ρυθμίσεων απορρήτου για τον εντοπισμό τοποθεσίας στο "
-"<app>Empathy</app>."
-
-#: C/geolocation-privacy.page:77(item/p)
-msgid "Geolocation is not enabled by default."
-msgstr "Ο εντοπισμός τοποθεσίας δεν ενεργοποιείται από προεπιλογή."
-
-#: C/geolocation-privacy.page:82(item/p)
-msgid "Privacy mode is enabled by default."
-msgstr "Η λειτουργία απορρήτου είναι ενεργοποιημένη από προεπιλογή."
-
-#: C/geolocation-privacy.page:87(item/p)
-msgid ""
-"Privacy mode prevails even when using external and more precise devices."
-msgstr ""
-"Η λειτουργία απορρήτου υπερισχύει, ακόμη και όταν χρησιμοποιούνται "
-"εξωτερικές συσκευές υψηλής ακρίβειας."
-
-#: C/geolocation-privacy.page:92(item/p)
-msgid "Only your contacts can see your position."
-msgstr "Μόνο οι επαφές σας βλέπουν την τοποθεσία σας."
-
-#: C/geolocation-supported.page:7(info/desc)
-msgid "Services that supports geolocation and compatibility."
-msgstr "Υπηρεσίες που υποστηρίζουν τον εντοπισμό τοποθεσίας και συμβατότητα."
-
-#: C/geolocation-supported.page:31(page/title)
-msgid "Supported services"
-msgstr "Υποστηριζόμενες υπηρεσίες"
-
-#: C/geolocation-supported.page:33(page/p)
-msgid ""
-"The geolocation feature at the moment is compatible only with the Jabber "
-"service. In order to use it, you and your contacts need to have a Jabber "
-"account."
-msgstr ""
-"Προς το παρόν, η λειτουργία εντοπισμού τοποθεσίας είναι συμβατή μόνο με την "
-"υπηρεσία Jabber. Για να τη χρησιμοποιήσετε, εσείς και οι επαφές σας θα "
-"πρέπει να διαθέτετε λογαριασμό Jabber."
-
-#: C/geolocation-supported.page:39(note/p)
-msgid ""
-"It is necessary that also the server you are using supports the geolocation "
-"feature. Most of the Jabber servers support it. See your service website "
-"documentation for more information."
-msgstr ""
-"Επιπλέον, ο εξυπηρετητής που χρησιμοποιείτε θα πρέπει επίσης να υποστηρίζει "
-"τη λειτουργία εντοπισμού τοποθεσίας. Οι περισσότεροι εξυπηρετητές Jabber την "
-"υποστηρίζουν. Για περισσότερες πληροφορίες, δείτε την τεκμηρίωση στον "
-"ιστότοπο της υπηρεσίας σας."
-
-#: C/geolocation-supported.page:47(section/title)
-msgid "Compatibility"
-msgstr "Συμβατότητα"
-
-#: C/geolocation-supported.page:49(section/p)
-msgid ""
-"<app>Empathy</app> geolocation feature is not compatible with other "
-"geographical position services such as <em>Google Latitude</em>, <em>Yahoo "
-"Fire Eagle</em> or <em>Brightkite</em>."
-msgstr ""
-"Ο εντοπισμός τοποθεσίας του <app>Empathy</app> δεν είναι συμβατός με άλλες "
-"υπηρεσίες εντοπισμού γεωγραφικής θέσης, όπως οι <em>Google Latitude</em>, "
-"<em>Yahoo Fire Eagle</em> και <em>Brightkite</em>."
-
-#: C/geolocation-turn.page:9(info/desc)
-msgid "How to activate and deactivate geolocation in <app>Empathy</app>."
-msgstr ""
-"Ενεργοποίηση και απενεργοποίηση του εντοπισμού τοποθεσίας στο <app>Empathy</"
-"app>."
-
-#: C/geolocation-turn.page:33(page/title)
-msgid "Activate/Deactivate geolocation"
-msgstr "Ενεργοποίηση/Απενεργοποίηση εντοπισμού τοποθεσίας"
-
-#: C/geolocation-turn.page:37(item/p)
-msgid "Choose <guiseq><gui>Edit</gui><gui>Preferences</gui></guiseq>."
-msgstr ""
-"Επιλέξτε <guiseq><gui>Επεξεργασία</gui><gui>Προτιμήσεις</gui></guiseq>."
-
-#: C/geolocation-turn.page:42(item/p)
-msgid "Select the <gui>Location</gui> tab."
-msgstr "Επιλέξτε την καρτέλα <gui>Τοποθεσία</gui>."
-
-#: C/geolocation-turn.page:47(item/p)
-msgid ""
-"Select <gui>Publish location to my contacts</gui> to activate geolocation."
-msgstr ""
-"Επιλέξτε <gui>Δημοσίευση της τοποθεσίας μου στις επαφές μου</gui> για να "
-"ενεργοποιήσετε τον εντοπισμό τοποθεσίας."
-
-#: C/geolocation-turn.page:50(item/p)
-msgid "To deactivate geolocation, deselect it."
-msgstr ""
-"Για να απενεργοποιήσετε τον εντοπισμό τοποθεσίας, αποεπιλέξτε την επιλογή."
-
-#: C/geolocation-turn.page:55(item/p)
-msgid ""
-"To increase the accuracy of your position, deselect <gui>Reduce location "
-"accuracy</gui>."
-msgstr ""
-"Για να αυξήσετε την ακρίβεια του εντοπισμού, αποεπιλέξτε το <gui>Μείωση της "
-"ακρίβειας της τοποθεσίας μου</gui>."
-
-#: C/geolocation-turn.page:61(item/p)
-msgid ""
-"If you have an external device like a GPS or want to send a more accurate "
-"position, select the appropriate option in the <gui>Location sources</gui> "
-"section."
-msgstr ""
-"Αν διαθέτετε μια εξωτερική συσκευή όπως GPS, ή αν θέλετε να στέλνετε πιο "
-"ακριβή στοιχεία για την τοποθεσία σας, σημειώστε την κατάλληλη επιλογή στην "
-"ενότητα <gui>Πηγές τοποθεσίας</gui>."
-
-#: C/geolocation-what-is.page:9(info/desc)
-msgid "Understanding geolocation."
-msgstr "Κατανόηση του εντοπισμού τοποθεσίας."
-
-#: C/geolocation-what-is.page:33(page/title)
-msgid "What is geolocation"
-msgstr "Περιγραφή εντοπισμού τοποθεσίας"
-
-#: C/geolocation-what-is.page:35(page/p)
-msgid ""
-"Geolocation allows you to identify the real geographical location of a "
-"computer or a device connected to the Internet."
-msgstr ""
-"Ο εντοπισμός τοποθεσίας επιτρέπει την ανίχνευση της πραγματική γεωγραφικής "
-"θέσης ενός υπολογιστή ή άλλης συσκευής συνδεδεμένης στο διαδίκτυο."
-
-#: C/geolocation-what-is.page:37(page/p)
-msgid "With geolocation in <app>Empathy</app> you can:"
-msgstr "Χάρη στον εντοπισμό τοποθεσίας, το <app>Empathy</app> σας επιτρέπει:"
-
-#: C/geolocation-what-is.page:42(item/p)
-msgid "Publish your geographical location to your contacts."
-msgstr "Να δημοσιεύετε τη γεωγραφική σας θέση στις επαφές σας."
-
-#: C/geolocation-what-is.page:47(item/p)
-msgid "See your contacts’ geographical location and quickly contact them."
-msgstr ""
-"Να βλέπετε τη γεωγραφική θέση των επαφών σας και να επικοινωνείτε πιο "
-"γρήγορα μαζί τους."
-
-#: C/geolocation-what-is.page:52(item/p)
-msgid ""
-"Set the accuracy of your location and the device used to discover your "
-"location."
-msgstr ""
-"Να ορίζετε την ακρίβεια της τοποθεσίας σας και τη συσκευή που θα "
-"χρησιμοποιείται για τον εντοπισμό της τοποθεσίας σας."
-
-#: C/geolocation-what-is.page:60(note/p)
-msgid ""
-"In order to see your contacts’ geographical locations, they need to use a "
-"service and an application that supports geolocation."
-msgstr ""
-"Για να μπορείτε να βλέπετε τις τοποθεσίες των επαφών σας, οι επαφές σας θα "
-"πρέπει να χρησιμοποιούν υπηρεσίες και εφαρμογές που υποστηρίζουν τον "
-"εντοπισμό τοποθεσίας."
-
-#: C/group-conversations.page:8(info/desc)
-msgid "Start or join a group conversation with your contacts."
-msgstr "Έναρξη ομαδικών συζητήσεων ή είσοδος σε αυτές."
-
-#: C/group-conversations.page:34(page/title)
-msgid "Group conversations"
-msgstr "Ομαδικές συζητήσεις"
-
-#: C/group-conversations.page:36(page/p)
-msgid ""
-"Group conversations permits you to have text conversations with more than "
-"one contact at the same time."
-msgstr ""
-"Οι ομαδικές συζητήσεις σας επιτρέπουν να κάνετε γραπτή συζήτηση με "
-"περισσότερες από μία επαφές ταυτόχρονα."
-
-#: C/group-conversations.page:40(page/p)
-msgid ""
-"To have a group conversation you need to have a registered account with "
-"either Jabber or Google Talk, or a People Nearby account."
-msgstr ""
-"Για να κάνετε ομαδικές συζητήσεις θα πρέπει να διαθέτετε λογαριασμό Jabber, "
-"Google Talk ή λογαριασμό Γειτονικών ατόμων."
-
-#: C/group-conversations.page:46(note/p)
-msgid ""
-"You can have a group conversation only with the contacts that are using the "
-"same service as yours."
-msgstr ""
-"Μπορείτε να κάνετε ομαδικές συζητήσεις μόνο με επαφές που χρησιμοποιούν την "
-"ίδια υπηρεσία με εσάς."
-
-#: C/group-conversations.page:54(section/title)
-msgid "Start a group conversation"
-msgstr "Έναρξη ομαδικής συζήτησης"
-
-#: C/group-conversations.page:58(item/p)
-#: C/group-conversations.page:122(item/p) C/irc-join-room.page:39(item/p)
-msgid ""
-"From the <gui>Contact List</gui> window, choose <guiseq><gui>Room</"
-"gui><gui>Join</gui></guiseq>."
-msgstr ""
-"Από το παράθυρο <gui>Λίστα επαφών</gui>, επιλέξτε <guiseq><gui>Δωμάτιο</"
-"gui><gui>Είσοδος</gui></guiseq>."
-
-#: C/group-conversations.page:63(item/p)
-msgid ""
-"From the <gui>Account</gui> drop-down list, select the account you want to "
-"use for the group conversation."
-msgstr ""
-"Από την αναπτυσσόμενη λίστα <gui>Λογαριασμός</gui>, επιλέξτε το λογαριασμό "
-"που επιθυμείτε να χρησιμοποιήσετε για την ομαδική συζήτηση."
-
-#: C/group-conversations.page:69(item/p)
-msgid ""
-"In the <gui>Server</gui> text box, type the name of server in which the "
-"conversation will be hosted."
-msgstr ""
-"Στο πεδίο <gui>Εξυπηρετητής</gui>, εισάγετε το όνομα του εξυπηρετητή που θα "
-"φιλοξενήσει τη συζήτηση."
-
-#: C/group-conversations.page:73(item/p)
-msgid "Leave it empty if it will be on the current server."
-msgstr ""
-"Αφήστε το πεδίο κενό αν σκοπεύετε να χρησιμοποιήσετε τον τρέχοντα "
-"εξυπηρετητή."
-
-#: C/group-conversations.page:78(item/p)
-msgid ""
-"In the <gui>Room</gui> text box, type the name you want to give to the "
-"conversation."
-msgstr "Στο πεδίο <gui>Δωμάτιο</gui>, εισάγετε ένα όνομα για τη νέα συζήτηση."
-
-#: C/group-conversations.page:82(note/p)
-msgid ""
-"This will be the name of the room you are going to have a conversation. This "
-"name will be publicly available for other people to join. It is not possible "
-"to create a private room."
-msgstr ""
-"Αυτό θα είναι το όνομα του δωματίου όπου θα διεξαχθεί η συζήτηση. Το όνομα "
-"θα είναι δημόσιο και οποιοσδήποτε θα μπορεί να εισέλθει στο δωμάτιο. Δεν "
-"είναι δυνατή η δημιουργία ιδιωτικού δωματίου."
-
-#: C/group-conversations.page:90(item/p)
-msgid ""
-"To invite other contacts to join the group conversation, from the "
-"<gui>Contact List</gui> window, select the contact you want to invite, and "
-"perform one of the following:"
-msgstr ""
-"Για να προσκαλέσετε και άλλες επαφές στην ομαδική συζήτηση, από το παράθυρο "
-"<gui>Λίστα επαφών</gui>, επιλέξτε την επαφή που θέλετε να προσκαλέσετε, και "
-"ακολουθήστε μία από τις παρακάτω διαδικασίες:"
-
-#: C/group-conversations.page:97(item/p)
-msgid "Right-click on the contact and choose <gui>Invite to chatroom</gui>."
-msgstr ""
-"Κάνετε δεξί κλικ στην επαφή και επιλέξτε <gui>Πρόσκληση στο δωμάτιο "
-"συζήτησης</gui>."
-
-#: C/group-conversations.page:102(item/p)
-msgid ""
-"Choose <guiseq><gui>Edit</gui><gui>Contact</gui><gui>Invite to chatroom</"
-"gui></guiseq>."
-msgstr ""
-"Επιλέξτε <guiseq><gui>Επεξεργασία</gui><gui>Επαφή</gui><gui>Πρόσκληση στο "
-"δωμάτιο συζήτησης</gui></guiseq>."
-
-#: C/group-conversations.page:107(item/p)
-msgid ""
-"If you have more than one group conversation open, select the one you want "
-"to invite your contacts."
-msgstr ""
-"Αν έχετε διάφορες ομαδικές συζητήσεις ανοιχτές, επιλέξτε σε ποια θέλετε να "
-"προσκαλέσετε τις επαφές σας."
-
-#: C/group-conversations.page:118(section/title)
-msgid "Join a group conversation"
-msgstr "Είσοδος σε ομαδική συζήτηση"
-
-#: C/group-conversations.page:128(item/p)
-msgid "Expand the <gui>Room List</gui> section to see all the existing rooms."
-msgstr ""
-"Αναπτύξτε την ενότητα <gui>Λίστα δωματίων</gui> για να δείτε όλα τα "
-"διαθέσιμα δωμάτια."
-
-#: C/group-conversations.page:133(item/p)
-msgid "Double-click on the name of a room to join it."
-msgstr "Κάνετε διπλό κλικ στο όνομα ενός δωματίου για να μπείτε σε αυτό."
-
-#: C/group-conversations.page:139(section/p)
-msgid ""
-"It is not possible to join all existing rooms. Some of the rooms might "
-"require a password, or might be invitation only. <app>Empathy</app> does not "
-"support these kind of rooms."
-msgstr ""
-"Δεν μπορείτε να μπείτε σε όλα τα δωμάτια. Κάποια δωμάτια μπορεί να απαιτούν "
-"συνθηματικό ή να δέχονται μόνο προσκεκλημένα μέλη. Το <app>Empathy</app> δεν "
-"υποστηρίζει αυτές τις κατηγορίες δωματίων."
-
-#: C/hide-contacts.page:8(info/desc)
-msgid "Hide the offline contacts from your <gui>Contact List</gui>."
-msgstr ""
-"Απόκρυψη των αποσυνδεδεμένων επαφών από τη <gui>Λίστα επαφών</gui> σας."
-
-#: C/hide-contacts.page:19(page/title)
-msgid "Hide offline contacts"
-msgstr "Απόκρυψη επαφών εκτός σύνδεσης"
-
-#: C/hide-contacts.page:21(page/p)
-msgid ""
-"Normally, <app>Empathy</app> shows all your contacts: those that are online, "
-"with which you can have a conversation, and also those that are offline."
-msgstr ""
-"Κανονικά, το <app>Empathy</app> εμφανίζει όλες τις επαφές σας: αυτές που "
-"είναι συνδεδεμένες, με τις οποίες μπορείτε να ξεκινήσετε μια συνομιλία, αλλά "
-"και αυτές που βρίσκονται εκτός σύνδεσης."
-
-#: C/hide-contacts.page:25(page/p)
-msgid "To hide the contacts that are offline:"
-msgstr "Για να αποκρύψετε τις αποσυνδεδεμένες επαφές:"
-
-#: C/hide-contacts.page:31(item/p)
-msgid ""
-"From the <gui>Contact List</gui> window, choose <guiseq><gui>View</gui> "
-"<gui>Offline Contacts</gui></guiseq>, or press <keyseq><key>Ctrl</key> "
-"<key>H</key></keyseq>."
-msgstr ""
-"Από το παράθυρο <gui>Λίστα επαφών</gui>, επιλέξτε <guiseq><gui>Προβολή</gui> "
-"<gui>Επαφές εκτός σύνδεσης</gui></guiseq>, ή πατήστε <keyseq><key>Ctrl</key> "
-"<key>H</key></keyseq>."
-
-#: C/hide-contacts.page:36(item/p)
-msgid "To show the offline contacts again, repeat the same procedure above."
-msgstr ""
-"Επαναλάβετε την ίδια διαδικασία για να εμφανίσετε και πάλι τις επαφές εκτός "
-"σύνδεσης."
-
-#: C/import-account.page:10(info/desc)
-msgid "Import an account from another instant messaging application."
-msgstr "Εισαγωγή λογαριασμού από άλλη εφαρμογή άμεσων μηνυμάτων."
-
-#: C/import-account.page:19(credit/name)
-msgid "Peter Haslam"
-msgstr "Peter Haslam"
-
-#: C/import-account.page:42(page/title)
-msgid "Import an existing account"
-msgstr "Εισαγωγή υπάρχοντος λογαριασμού"
-
-#: C/import-account.page:44(page/p)
-msgid ""
-"The first time you run <app>Empathy</app>, it will offer to import your "
-"accounts from other instant messaging applications. Currently, the only "
-"supported application is <app>Pidgin</app>."
-msgstr ""
-"Την πρώτη φορά που θα εκτελέσετε το <app>Empathy</app>, θα σας ρωτήσει αν "
-"θέλετε να εισάγετε τους λογαριασμούς σας από άλλες εφαρμογές άμεσων "
-"μηνυμάτων. Προς το παρόν, η μόνη εφαρμογή που υποστηρίζεται είναι το "
-"<app>Pidgin</app>."
-
-#: C/import-account.page:50(item/p)
-msgid ""
-"Run <app>Empathy</app> for the first time. An assistant will offer you a "
-"number of options to create new accounts."
-msgstr ""
-"Εκτελέστε το <app>Empathy</app> για πρώτη φορά. Ο βοηθός θα σας προσφέρει "
-"μια σειρά επιλογών για τη δημιουργία νέων λογαριασμών."
-
-#: C/import-account.page:54(item/p)
-msgid ""
-"Select <gui>Yes, import my account details from</gui> and click "
-"<gui>Forward</gui>."
-msgstr ""
-"Επιλέξτε <gui>Ναι, να γίνει εισαγωγή των στοιχείων του λογαριασμού μου από "
-"το </gui> και πατήστε <gui>Μπροστά</gui>."
-
-#: C/import-account.page:58(item/p)
-msgid "Select the check box next to each account you wish to import."
-msgstr "Σημειώστε το κουτάκι δίπλα σε κάθε λογαριασμό που θέλετε να εισάγετε."
-
-#: C/import-account.page:66(note/p)
-msgid ""
-"It is not currently possible to import accounts after you have completed the "
-"first-run assistant."
-msgstr ""
-"Προς το παρόν, μπορείτε να εισάγετε λογαριασμούς μόνο από το βοηθό, δηλαδή "
-"μόνο την πρώτη φορά που εκτελείτε την εφαρμογή."
-
-#. This is a reference to an external file such as an image or video. When
-#. the file changes, the md5 hash will change to let you know you need to
-#. update your localized copy. The msgstr is not used at all. Set it to
-#. whatever you like once you have updated your copy of the file.
-#: C/introduction.page:41(media)
-msgctxt "_"
-msgid ""
-"external ref='figures/empathy-main-window.png' "
-"md5='54908dcb2588beddb15ef0968d2c2582'"
-msgstr ""
-"external ref='figures/empathy-main-window.png' "
-"md5='54908dcb2588beddb15ef0968d2c2582'"
-
-#: C/introduction.page:9(info/desc)
-msgid "Introduction to the <app>Empathy</app> instant messenger."
-msgstr "Εισαγωγή στα άμεσα μηνύματα του <app>Empathy</app>."
-
-#: C/introduction.page:21(page/title)
-msgid "Introduction"
-msgstr "Εισαγωγή"
-
-#: C/introduction.page:23(page/p)
-msgid ""
-"<app>Empathy</app> is an instant messaging application for the GNOME "
-"Desktop. It supports text messaging, voice &amp; video calls, file "
-"transfers, and all the most used messaging systems such as MSN and Google "
-"Talk."
-msgstr ""
-"Το <app>Empathy</app> είναι μια εφαρμογή αποστολής άμεσων μηνυμάτων για την "
-"επιφάνεια εργασίας του GNOME. Παρέχει υποστήριξη για αποστολή γραπτών "
-"μηνυμάτων, φωνητικές κλήσεις &amp; βιντεοκλήσεις, μεταφορά αρχείων, και όλα "
-"τα πιο δημοφιλή συστήματα αποστολής μηνυμάτων, όπως το MSN και το Google "
-"Talk."
-
-#: C/introduction.page:28(page/p)
-msgid ""
-"<app>Empathy</app> includes features that help you better collaborate while "
-"at work, and that let you easily keep in touch with your friends."
-msgstr ""
-"Το <app>Empathy</app> περιλαμβάνει λειτουργίες που διευκολύνουν τις "
-"επαγγελματικές σας συνεργασίες και σας επιτρέπουν να παραμένετε σε επαφή με "
-"τους φίλους σας."
-
-#: C/introduction.page:32(page/p)
-msgid ""
-"Using <app>Empathy</app>, you can group all the conversations in a single "
-"window, have multiple windows for different kind of conversations, easily "
-"search through your previous conversations, and share your desktop in just "
-"two clicks."
-msgstr ""
-"Χρησιμοποιώντας το <app>Empathy</app>, μπορείτε να ομαδοποιείτε όλες τις "
-"συζητήσεις σε ένα ενιαίο παράθυρο, ή να έχετε πολλαπλά παράθυρα για "
-"διαφορετικά είδη συνομιλιών, να αναζητήσετε εύκολα τις προηγούμενες "
-"συζητήσεις σας και να μοιράζεστε την επιφάνεια εργασίας σας με δύο μόνο "
-"πατήματα."
-
-#: C/introduction.page:39(figure/title)
-msgid "<gui>Contact List</gui> window"
-msgstr "Παράθυρο <gui>Λίστα επαφών</gui>"
-
-#: C/introduction.page:40(figure/desc)
-msgid "<app>Empathy</app> main window"
-msgstr "Βασικό παράθυρο του <app>Empathy</app>"
-
-#: C/introduction.page:42(media/p)
-msgid "<app>Empathy</app> main window."
-msgstr "Βασικό παράθυρο του <app>Empathy</app>."
-
-#: C/irc-commands.page:7(info/desc)
-msgid "The supported IRC commands."
-msgstr "Οι εντολές του IRC που υποστηρίζονται."
-
-#: C/irc-commands.page:18(page/title)
-msgid "Supported IRC commands"
-msgstr "Εντολές του IRC που υποστηρίζονται"
-
-#: C/irc-commands.page:19(page/p)
-msgid ""
-"To see the list of the supported IRC commands, in a chat room type <input>/"
-"help</input> and press <key>Enter</key>."
-msgstr ""
-"Για να δείτε τη λίστα των εντολών του IRC που υποστηρίζονται, σε ένα δωμάτιο "
-"συζητήσεων πληκτρολογήστε <input>/help</input> και πιέστε το πλήκτρο "
-"<key>Enter</key>."
-
-#: C/irc-commands.page:24(note/p)
-msgid "All commands available have a small description on their usage."
-msgstr "Όλες οι διαθέσιμες εντολές έχουν μια μικρή περιγραφή της χρήσης τους."
-
-#: C/irc-join-pwd.page:9(info/desc)
-msgid "Enter password-protected IRC chat rooms."
-msgstr "Είσοδος σε δωμάτιο συζήτησης IRC προστατευμένο με συνθηματικό."
-
-#: C/irc-join-pwd.page:25(page/title)
-msgid "Join a protected IRC chat room"
-msgstr "Είσοδος σε προστατευμένο δωμάτιο συζήτησης IRC"
-
-#: C/irc-join-pwd.page:27(page/p)
-msgid ""
-"On some IRC networks, private IRC rooms may be protected with a password. If "
-"you know the password, use the following steps to join:"
-msgstr ""
-"Σε μερικά δίκτυα IRC, κάποια ιδιωτικά δωμάτια συζήτησης μπορεί να "
-"προστατεύονται με ένα συνθηματικό. Αν το γνωρίζετε, χρησιμοποιήστε τα "
-"ακόλουθα βήματα για να συνδεθείτε:"
-
-#: C/irc-join-pwd.page:33(item/p)
-msgid "<link xref=\"irc-join-room\">Join the room</link> as normal."
-msgstr "<link xref=\"irc-join-room\">Συνδεθείτε στο δωμάτιο</link> κανονικά."
-
-#: C/irc-join-pwd.page:38(item/p)
-msgid ""
-"Empathy will prompt you for a password. Enter the password for the IRC chat "
-"room and click <gui style=\"button\">Join</gui>."
-msgstr ""
-"Το Empathy θα σας ζητήσει συνθηματικό. Πληκτρολογήστε το συνθηματικό του "
-"δωματίου του IRC, και πατήστε το <gui style=\"button\">Είσοδος</gui>."
-
-#: C/irc-join-room.page:8(info/desc)
-msgid "Join an IRC channel."
-msgstr "Είσοδος σε κανάλι IRC."
-
-#: C/irc-join-room.page:31(page/title)
-msgid "Join an IRC chat room"
-msgstr "Είσοδος σε δωμάτιο συζήτησης IRC"
-
-#: C/irc-join-room.page:33(page/p)
-msgid ""
-"You can join IRC chat rooms (also known as IRC channels) on any IRC network "
-"you’re connected to. To connect to an IRC network, see <link xref=\"add-"
-"account\"/> and <link xref=\"account-irc\"/>."
-msgstr ""
-"Μπορείτε να μπαίνετε σε δωμάτια συζήτησης IRC (γνωστά και ως κανάλια IRC) "
-"από οποιοδήποτε δίκτυο IRC στο οποίο έχετε συνδεθεί. Για τον τρόπο σύνδεσης "
-"σε δίκτυα IRC, δείτε την <link xref=\"add-account\"/> και την <link xref="
-"\"account-irc\"/>."
-
-#: C/irc-join-room.page:45(item/p)
-msgid ""
-"From the <gui>Account</gui> drop-down list, select the IRC account that "
-"corresponds to the network you want to use."
-msgstr ""
-"Από την αναπτυσσόμενη λίστα <gui>Λογαριασμός</gui>, επιλέξτε το λογαριασμό "
-"IRC που αντιστοιχεί στο δίκτυο που σας ενδιαφέρει."
-
-#: C/irc-join-room.page:51(item/p)
-msgid ""
-"In the <gui>Room</gui> text box, type the name of the channel you want to "
-"join. IRC channel names start with the hash character (<sys>#</sys>)."
-msgstr ""
-"Στο πεδίο κειμένου <gui>Δωμάτιο</gui>, εισάγετε το όνομα του καναλιού στο "
-"οποίο θέλετε να μπείτε. Τα ονόματα των καναλιών του IRC ξεκινούν πάντα με "
-"δίεση (<sys>#</sys>)."
-
-#: C/irc-join-room.page:57(item/p)
-msgid "Click <gui>Join</gui> to enter the room."
-msgstr "Πατήστε <gui>Είσοδος</gui> για να μπείτε στο δωμάτιο."
-
-#: C/irc-join-room.page:64(note/p)
-msgid ""
-"To join multiple rooms, you need to repeat the steps above for each room."
-msgstr ""
-"Για να μπείτε σε περισσότερα από ένα δωμάτια, επαναλάβετε την παραπάνω "
-"διαδικασία για κάθε δωμάτιο."
-
-#: C/irc-manage.page:9(info/desc)
-msgid "How to use IRC with <app>Empathy</app>."
-msgstr "Χρήση IRC μέσω <app>Empathy</app>."
-
-#: C/irc-manage.page:23(credit/name)
-msgid "Sindhu S"
-msgstr "Sindhu S"
-
-#: C/irc-manage.page:39(page/title)
-msgid "Internet Relay Chat (IRC)"
-msgstr "Internet Relay Chat (IRC)"
-
-#: C/irc-manage.page:47(when/p)
-msgid ""
-"<link action=\"install:telepathy-idle\" xref=\"index\"> Install telepathy-"
-"idle</link>"
-msgstr ""
-"<link action=\"install:telepathy-idle\" xref=\"index\"> Εγκατάσταση του "
-"telepathy-idle</link>"
-
-#: C/irc-manage.page:55(info/title)
-msgctxt "link"
-msgid "IRC Chat Rooms and Conversations"
-msgstr "Δωμάτια και συζητήσεις IRC"
-
-#: C/irc-manage.page:57(section/title)
-msgid "Chat Rooms and Conversations"
-msgstr "Δωμάτια και συζητήσεις"
-
-#: C/irc-manage.page:62(info/title)
-msgctxt "link"
-msgid "Common IRC Problems"
-msgstr "Συχνά προβλήματα IRC"
-
-#: C/irc-nick-password.page:10(info/desc)
-msgid "Protect your nickname to prevent other IRC users from using it."
-msgstr ""
-"Προστατέψτε το ψευδώνυμό σας για να εμποδίσετε τη χρήση του από άλλους "
-"χρήστες IRC."
-
-#: C/irc-nick-password.page:33(page/title)
-msgid "Use a nickname password on IRC"
-msgstr "Χρήση συνθηματικού για το ψευδώνυμό σας στο IRC"
-
-#: C/irc-nick-password.page:35(page/p)
-msgid ""
-"On some IRC networks, you can register your nickname with a service called "
-"NickServ. By sending special messages to NickServ, you can set your password "
-"and identify yourself. Some IRC chat rooms may not allow you to join without "
-"a registered nickname."
-msgstr ""
-"Σε ορισμένα δίκτυα IRC μπορείτε να καταχωρήσετε το ψευδώνυμό σας στην "
-"υπηρεσία NickServ. Ορίζετε το συνθηματικό σας στέλνοντας ειδικά μηνύματα στο "
-"NickServ, και το χρησιμοποιείτε για να εισέρχεστε. Ορισμένα δωμάτια "
-"συζήτησης IRC δεν επιτρέπουν την είσοδο χωρίς καταχωρημένο ψευδώνυμο."
-
-#: C/irc-nick-password.page:40(page/p)
-msgid ""
-"<app>Empathy</app> does not currently support nickname registration. Some "
-"IRC networks, however, will automatically forward a <em>server password</em> "
-"to NickServ. On these networks, you can use the IRC password in "
-"<app>Empathy</app> to identify yourself to NickServ. The popular freenode "
-"network is known to have this feature."
-msgstr ""
-"Προς το παρόν, το <app>Empathy</app> δεν υποστηρίζει την καταχώρηση "
-"ψευδωνύμων. Ωστόσο, ορισμένα δίκτυα IRC προωθούν αυτόματα το <em>συνθηματικό "
-"εξυπηρετητή</em> στο NickServ. Σε αυτά τα δίκτυα, μπορείτε να χρησιμοποιείτε "
-"το συνθηματικό του IRC στο <app>Empathy</app> για να κάνετε την πιστοποίηση "
-"στο NickServ. Το δημοφιλές δίκτυο FreeNode ανήκει σε αυτήν την κατηγορία "
-"δικτύων."
-
-#: C/irc-nick-password.page:46(page/p)
-msgid "To set an IRC server password:"
-msgstr "Για να ορίσετε συνθηματικό εξυπηρετητή IRC:"
-
-#: C/irc-nick-password.page:54(item/p)
-msgid "Select the IRC account from the list on the left of the dialog."
-msgstr ""
-"Επιλέξτε το λογαριασμό IRC από τη λίστα στην αριστερή πλευρά του διαλόγου."
-
-#: C/irc-nick-password.page:57(item/p)
-msgid ""
-"In the <gui>Password</gui> field, type the password you used to register "
-"your nikcname."
-msgstr ""
-"Στο πεδίο <gui></gui>, εισάγετε το συνθηματικό που χρησιμοποιήσατε για να "
-"καταχωρήσετε το ψευδώνυμό σας."
-
-#: C/irc-nick-password.page:69(note/p)
-msgid ""
-"These instructions only allow you to use a password-protected nickname on "
-"certain IRC networks. It is not currently possible to register an IRC "
-"nickname or change your nickname password using <app>Empathy</app>."
-msgstr ""
-"Αυτές οι οδηγίες σας επιτρέπουν να χρησιμοποιείτε ψευδώνυμα με συνθηματικό "
-"σε ορισμένα μόνο δίκτυα IRC. Προς το παρόν, δεν μπορείτε να καταχωρήσετε "
-"ψευδώνυμο IRC, ή να αλλάξετε το συνθηματικό του ψευδωνύμου σας μέσω του "
-"<app>Empathy</app>."
-
-#: C/irc-send-file.page:9(info/desc)
-msgid "<app>Empathy</app> does not currently support sending files using IRC."
-msgstr ""
-"Προς το παρόν, το <app>Empathy</app> δεν υποστηρίζει την αποστολή αρχείων "
-"μέσω IRC."
-
-#: C/irc-send-file.page:31(page/title)
-msgid "Send files over IRC"
-msgstr "Αποστολή αρχείων μέσω IRC"
-
-#: C/irc-send-file.page:33(page/p)
-msgid "It is not currently possible to send files using IRC."
-msgstr "Προς το παρόν, δεν μπορείτε να στέλνετε αρχεία μέσω IRC."
-
-#: C/irc-start-conversation.page:8(info/desc)
-msgid "Start a conversation with an IRC contact."
-msgstr "Έναρξη συζήτησης με επαφή στο IRC."
-
-#: C/irc-start-conversation.page:30(page/title)
-msgid "Chat with somebody on IRC"
-msgstr "Συζήτηση στο IRC"
-
-#: C/irc-start-conversation.page:32(page/p)
-msgid ""
-"You can hold private conversations with other IRC users, outside of the "
-"public IRC chat rooms. To start a conversation with another IRC user:"
-msgstr ""
-"Μπορείτε να κάνετε ιδιωτικές συζητήσεις με άλλους χρήστες του IRC, έξω από "
-"τα δημόσια δωμάτια συζήτησης. Για να ξεκινήσετε μια συζήτηση με άλλο χρήστη "
-"IRC:"
-
-#: C/irc-start-conversation.page:37(item/p)
-msgid ""
-"In the contact list for an IRC chat room, double click the name of the user "
-"you want to chat with. Alternatively, right click the name of the user and "
-"choose <gui>Chat</gui>."
-msgstr ""
-"Στη λίστα επαφών ενός δωματίου IRC, κάνετε διπλό κλικ στο όνομα του χρήστη "
-"που σας ενδιαφέρει. Εναλλακτικά, κάνετε δεξί κλικ στο όνομα του χρήστη και "
-"επιλέξτε <gui>Συζήτηση</gui>."
-
-#: C/irc-start-conversation.page:45(item/p)
-msgid ""
-"The IRC room contact list is not the same as <app>Empathy</app> contact "
-"list. It contains a list of users in the IRC chat room you joined. Different "
-"rooms can have different contacts listed."
-msgstr ""
-"Η λίστα επαφών ενός δωματίου IRC δεν είναι η ίδια με τη λίστα επαφών του "
-"<app>Empathy</app>. Πρόκειται για λίστα που περιλαμβάνει όλους τους χρήστες "
-"του δωματίου IRC στο οποίο μπήκατε. Κάθε δωμάτιο IRC έχει διαφορετική λίστα "
-"επαφών."
-
-#: C/irc-start-conversation.page:52(item/p)
-msgid ""
-"The IRC room contact list is usually on the right side of the IRC room "
-"window. If you do not see it, choose <guiseq><gui>Conversation</"
-"gui><gui>Show Contact List</gui></guiseq>."
-msgstr ""
-"Η λίστα επαφών των δωματίων IRC συνήθως βρίσκεται στη δεξιά πλευρά του "
-"παραθύρου του δωματίου. Αν δεν τη βλέπετε, επιλέξτε <guiseq><gui>Συζήτηση</"
-"gui><gui>Εμφάνιση λίστας επαφών</gui></guiseq>."
-
-#: C/license.page:8(info/desc)
-msgid "Legal information."
-msgstr "Νομικές πληροφορίες."
-
-#: C/license.page:11(page/title)
-msgid "License"
-msgstr "Άδεια"
-
-#: C/license.page:12(page/p)
-msgid ""
-"This work is distributed under a CreativeCommons Attribution-Share Alike 3.0 "
-"Unported license."
-msgstr ""
-"Το έργο διανέμεται υπό τους όρους της άδειας Creative Commons Attribution-"
-"Share Alike 3.0 Unported."
-
-#: C/license.page:20(page/p)
-msgid "You are free:"
-msgstr "Μπορείτε να:"
-
-#: C/license.page:25(item/title)
-msgid "<em>To share</em>"
-msgstr "<em>Να μοιραστείτε</em>"
-
-#: C/license.page:26(item/p)
-msgid "To copy, distribute and transmit the work."
-msgstr "Να αντιγράψετε, να διανείμετε και να μεταδόσετε το έργο."
-
-#: C/license.page:29(item/title)
-msgid "<em>To remix</em>"
-msgstr "<em>Να τροποιήσετε</em>"
-
-#: C/license.page:30(item/p)
-msgid "To adapt the work."
-msgstr "Να τροποποιήσετε το έργο."
-
-#: C/license.page:33(page/p)
-msgid "Under the following conditions:"
-msgstr "Υπό τους εξής όρους:"
-
-#: C/license.page:38(item/title)
-msgid "<em>Attribution</em>"
-msgstr "<em>Απόδοση</em>"
-
-#: C/license.page:39(item/p)
-msgid ""
-"You must attribute the work in the manner specified by the author or "
-"licensor (but not in any way that suggests that they endorse you or your use "
-"of the work)."
-msgstr ""
-"Πρέπει να αναφέρετε την πηγή του έργου με τον τρόπο που καθορίζεται από το "
-"δημιουργό του ή αυτόν που παρέχει την άδεια (αλλά όχι με τρόπο που να εννοεί "
-"ότι εγκρίνουν εσάς ή τη δική σας χρήση του έργου)."
-
-#: C/license.page:46(item/title)
-msgid "<em>Share Alike</em>"
-msgstr "<em>Παρόμοια διανομή</em>"
-
-#: C/license.page:47(item/p)
-msgid ""
-"If you alter, transform, or build upon this work, you may distribute the "
-"resulting work only under the same, similar or a compatible license."
-msgstr ""
-"Αν μετατρέψετε, μετασχηματίσετε ή επεκτείνετε αυτό το έργο, μπορείτε να "
-"αναδιανείμετε το αποτέλεσμα υπό την ίδια, παρόμοια ή συμβατή άδεια χρήσης."
-
-#: C/license.page:53(page/p)
-msgid ""
-"For the full text of the license, see the <link href=\"http://"
-"creativecommons.org/licenses/by-sa/3.0/legalcode\">CreativeCommons website</"
-"link>, or read the full <link href=\"http://creativecommons.org/licenses/by-"
-"sa/3.0/\">Commons Deed</link>."
-msgstr ""
-"Για το πλήρες κείμενο της άδειας, δείτε τον <link href=\"http://"
-"creativecommons.org/licenses/by-sa/3.0/legalcode\">ιστότοπο CreativeCommons</"
-"link>, ή διαβάστε όλη την <link href=\"http://creativecommons.org/licenses/"
-"by-sa/3.0/\">Πράξη Commons</link>."
-
-#: C/link-contacts.page:11(info/desc)
-msgid "Merge and separate different contacts into a single one."
-msgstr "Συγχωνεύστε και διαχωρίστε διαφορετικές επαφές σε μία."
-
-#: C/link-contacts.page:25(page/title)
-msgid "Combine and separate contacts"
-msgstr "Συγχώνευση και διαχωρισμός επαφών"
-
-#: C/link-contacts.page:26(page/p)
-msgid ""
-"If one, or more, of your contacts has multiple accounts with different "
-"messaging services, you can combine these contacts into a single one."
-msgstr ""
-"Αν μία, ή περισσότερες, από τις επαφές σας έχει πολλαπλούς λογαριασμούς με "
-"διαφορετικές υπηρεσίες μηνυμάτων, μπορείτε να συγχωνεύσετε αυτές τις επαφές "
-"σε μία."
-
-#: C/link-contacts.page:30(page/p)
-msgid ""
-"The resulting contact is called a <em>meta-contact</em>: a contact composed "
-"from different single contacts."
-msgstr ""
-"Η επαφή που προκύπτει ονομάζεται <em>μετα-επαφή</em>: μια επαφή αποτελούμενη "
-"από διαφορετικές απλές επαφές."
-
-#: C/link-contacts.page:34(page/p)
-msgid ""
-"If you have a Jane Smith contact that is using three different messaging "
-"services like:"
-msgstr ""
-"Αν έχετε μια επαφή Μαρία Παπαδοπούλου που χρησιμοποιεί τρεις διαφορετικές "
-"υπηρεσίες μηνυμάτων όπως:"
-
-#: C/link-contacts.page:40(item/p)
-msgid "janes@facebook"
-msgstr "mariap@facebook"
-
-#: C/link-contacts.page:45(item/p)
-msgid "jane.smith@gmail"
-msgstr "maria.papad@gmail"
-
-#: C/link-contacts.page:50(item/p)
-msgid "jane_smith@hotmail"
-msgstr "maria_papad@hotmail"
-
-#: C/link-contacts.page:55(page/p)
-msgid "You can combine these contacts into a single Jane Smith one."
-msgstr ""
-"Μπορείτε να συνδυάσετε αυτές τις επαφές σε μία μόνο Μαρία Παπαδοπούλου."
-
-#: C/link-contacts.page:60(section/title)
-msgid "Combining contacts"
-msgstr "Συγχώνευση επαφών"
-
-#: C/link-contacts.page:63(item/p)
-msgid ""
-"From the <gui>Contact List</gui> window, right-click one of the contact that "
-"has different accounts, and select <gui style=\"menuitem\">Link Contacts...</"
-"gui>."
-msgstr ""
-"Από το παράθυρο <gui>Λίστα επαφών</gui>, κάντε δεξί κλικ σε μια επαφή που "
-"έχει διαφορετικούς λογαριασμούς και επιλέξτε <gui style=\"menuitem"
-"\">Συγχώνευση επαφών…</gui>."
-
-#: C/link-contacts.page:70(item/p)
-msgid ""
-"From the left pane in the <gui>Link Contacts</gui> window, select the "
-"contacts you want to combine."
-msgstr ""
-"Από το αριστερό πλαίσιο στο παράθυρο <gui>Συγχώνευση επαφών</gui>, επιλέξτε "
-"τις επαφές που θέλετε να συγχωνεύσετε."
-
-#: C/link-contacts.page:76(item/p)
-msgid "Click <gui style=\"button\">Link</gui>."
-msgstr "Πατήστε <gui style=\"button\">Συγχώνευση</gui>."
-
-#: C/link-contacts.page:82(note/p)
-msgid ""
-"When a meta-contact has been created, the default contact that will be used "
-"to have a conversation with when you double-click on it, is the contact with "
-"the highest presence on-line."
-msgstr ""
-"Όταν έχει δημιουργηθεί μια μετα-επαφή, η προεπιλεγμένη επαφή που θα "
-"χρησιμοποιηθεί για να έχετε μια συζήτηση με αυτή όταν κάνετε διπλό κλικ σε "
-"αυτή, είναι η επαφή με τη μεγαλύτερη διαδικτυακή παρουσία."
-
-#: C/link-contacts.page:91(section/title)
-msgid "Separating contacts"
-msgstr "Διαχωρισμός επαφών"
-
-#: C/link-contacts.page:94(item/p)
-msgid ""
-"From the <gui>Contact List</gui>, right-click the contact to separate, and "
-"select <gui style=\"menuitem\">Link Contacts...</gui>."
-msgstr ""
-"Από το παράθυρο <gui>Λίστα επαφών</gui>, κάντε δεξί κλικ στην επαφή που θα "
-"διαχωρίσετε και επιλέξτε <gui style=\"menuitem\">Συγχώνευση επαφών…</gui>."
-
-#: C/link-contacts.page:100(item/p)
-msgid "Click <gui style=\"button\">Unlink</gui>."
-msgstr "Πατήστε <gui style=\"button\">Διαχωρισμός</gui>."
-
-#. This is a reference to an external file such as an image or video. When
-#. the file changes, the md5 hash will change to let you know you need to
-#. update your localized copy. The msgstr is not used at all. Set it to
-#. whatever you like once you have updated your copy of the file.
-#: C/overview.page:37(media)
-msgctxt "_"
-msgid ""
-"external ref='figures/video_overview.png' "
-"md5='6cfcfbd833bf2234537d402185c40596'"
-msgstr ""
-"external ref='figures/video_overview.png' "
-"md5='6cfcfbd833bf2234537d402185c40596'"
-
-#. This is a reference to an external file such as an image or video. When
-#. the file changes, the md5 hash will change to let you know you need to
-#. update your localized copy. The msgstr is not used at all. Set it to
-#. whatever you like once you have updated your copy of the file.
-#: C/overview.page:38(media)
-msgctxt "_"
-msgid ""
-"external ref='figures/conf_overview.png' "
-"md5='74c58668fe89c84060f12f6b70a6b903'"
-msgstr ""
-"external ref='figures/conf_overview.png' "
-"md5='74c58668fe89c84060f12f6b70a6b903'"
-
-#. This is a reference to an external file such as an image or video. When
-#. the file changes, the md5 hash will change to let you know you need to
-#. update your localized copy. The msgstr is not used at all. Set it to
-#. whatever you like once you have updated your copy of the file.
-#: C/overview.page:39(media)
-msgctxt "_"
-msgid ""
-"external ref='figures/croom_overview.png' "
-"md5='e9619d2c8420bc48a880c03dbc1ae084'"
-msgstr ""
-"external ref='figures/croom_overview.png' "
-"md5='e9619d2c8420bc48a880c03dbc1ae084'"
-
-#: C/overview.page:8(info/desc)
-msgid "What instant messaging is and how you can use it."
-msgstr "Τι άμεσο μήνυμα είναι και πώς μπορείτε να το χρησιμοποιήσετε."
-
-#: C/overview.page:12(credit/name)
-msgid "Aruna S"
-msgstr "Aruna S"
-
-#: C/overview.page:24(page/title)
-msgid "Overview of instant messaging"
-msgstr "Επισκόπηση άμεσων μηνυμάτων"
-
-#: C/overview.page:26(page/p)
-msgid ""
-"Instant messaging, sometimes abbreviated to IM, is a text-based means to "
-"communicate instantly over the internet and the local network. While some IM "
-"applications work with only one type of account, others, including <link "
-"xref=\"introduction\">Empathy</link>, provide IM facilities by using <link "
-"xref=\"add-account\">accounts</link> from different service providers. Some "
-"of these even support audio and video calling."
-msgstr ""
-"Τα άμεσα μηνύματα, μερικές φορές συντομευμένα ως IM, είναι μέσα με βάση "
-"κείμενο για στιγμιαία επικοινωνία μέσω διαδικτύου και του τοπικού δικτύου. "
-"Ενώ μερικές εφαρμογές IM δουλεύουν με μόνο έναν τύπο λογαριασμού, άλλες, "
-"συμπεριλαμβάνουν το <link xref=\"introduction\">Empathy</link>, που παρέχει "
-"διευκολύνσεις IM χρησιμοποιώντας <link xref=\"add-account\">λογαριασμούς</"
-"link> από διαφορετικούς παρόχους υπηρεσίας. Κάποιοι από αυτούς υποστηρίζουν "
-"ακόμα κλήση ήχου και βίντεο."
-
-#: C/overview.page:42(td/p)
-msgid "Video Conference"
-msgstr "Βιντεοδιάσκεψη"
-
-#: C/overview.page:43(td/p)
-msgid "Group chats"
-msgstr "Ομαδικές συνομιλίες"
-
-#: C/overview.page:44(td/p)
-msgid "Chat rooms"
-msgstr "Δωμάτια συνομιλίας"
-
-#: C/overview.page:48(page/p)
-msgid ""
-"Some instant messaging applications can be used to connect to chat rooms, "
-"online places where like-minded people meet to talk. One popular means to "
-"connect to several chat rooms is the Internet Relay Chat, also known as "
-"<link xref=\"irc-manage\">IRC</link>. IRC provides <link xref=\"irc-join-room"
-"\">public</link> chat rooms, which are open to anyone who creates an account "
-"on the IRC Server, and private chat rooms, which are <link xref=\"irc-join-"
-"pwd\">password protected</link> and open only to a select few."
-msgstr ""
-"Μερικές εφαρμογές άμεσων μηνυμάτων μπορούν να χρησιμοποιηθούν για σύνδεση με "
-"δωμάτια συνομιλιών, με δικτυακές θέσεις όπου άτομα με τα ίδια ενδιαφέροντα "
-"συναντιούνται για να συζητήσουν. Ένα δημοφιλές μέσο σύνδεσης σε πολλά "
-"δωμάτια συνομιλιών είναι οι διαδικτυακές μεταγωγές, γνωστές επίσης ως <link "
-"xref=\"irc-manage\">IRC</link>. Το IRC παρέχει <link xref=\"irc-join-room"
-"\">δημόσια</link> δωμάτια συνομιλίας, που είναι ανοικτά σε οποιονδήποτε "
-"δημιουργήσει έναν λογαριασμό στον εξυπηρετητή IRC και ιδιωτικά δωμάτια "
-"συνομιλίας, που <link xref=\"irc-join-pwd\">προστατεύονται με κωδικό</link> "
-"και ανοίγουν μόνο σε λίγους επιλεγμένους."
-
-#: C/prev-conv.page:8(info/desc)
-msgid "Browse or search your previous conversations."
-msgstr "Περιήγηση ή αναζήτηση σε προηγούμενες συζητήσεις."
-
-#: C/prev-conv.page:36(page/title)
-msgid "View previous conversations"
-msgstr "Προβολή προηγούμενων συζητήσεων"
-
-#: C/prev-conv.page:38(page/p)
-msgid ""
-"<app>Empathy</app> automatically saves all your text conversations you have "
-"with your contacts. You can <link xref=\"#search\">search through all of "
-"your previous conversations</link> or <link xref=\"#browse\">browse previous "
-"conversations</link> by contact and date."
-msgstr ""
-"Το <app>Empathy</app> αποθηκεύει αυτόματα τις γραπτές συζητήσεις σας με τις "
-"επαφές σας. Μπορείτε να κάνετε <link xref=\"#search\">αναζήτηση σε όλες τις "
-"προηγούμενες συζητήσεις σας</link> ή <link xref=\"#browse\">περιήγηση στης "
-"προηγούμενες συζητήσεις σας</link> με βάση το όνομα της επαφής και την "
-"ημερομηνία."
-
-#: C/prev-conv.page:46(note/p)
-msgid ""
-"You do not need to be connected to the Internet to view and search your "
-"previous conversations."
-msgstr ""
-"Δεν χρειάζεται να είστε συνδεδεμένοι στο διαδίκτυο για να δείτε και να "
-"ψάξετε τις προηγούμενες συζητήσεις σας."
-
-#: C/prev-conv.page:53(section/title)
-msgid "Search previous conversations"
-msgstr "Αναζήτηση προηγούμενων συζητήσεων"
-
-#: C/prev-conv.page:55(section/p)
-msgid ""
-"You can perform a full-text search through all of your previous "
-"conversations."
-msgstr ""
-"Μπορείτε να κάνετε αναζητήσεις στο πλήρες κείμενο όλων των προηγούμενων "
-"συζητήσεών σας."
-
-#: C/prev-conv.page:59(item/p) C/prev-conv.page:87(item/p)
-msgid ""
-"From the <gui>Contact List</gui> window, choose <guiseq><gui>View</gui> "
-"<gui>Previous Conversations</gui></guiseq>. Alternatively, press <key>F3</"
-"key>."
-msgstr ""
-"Από το παράθυρο <gui>Λίστα επαφών</gui>, επιλέξτε <guiseq><gui>Προβολή</gui> "
-"<gui>Προηγούμενες συζητήσεις</gui></guiseq>. Εναλλακτικά, πατήστε <key>F3</"
-"key>."
-
-#: C/prev-conv.page:63(item/p)
-msgid ""
-"Select an account from the drop-down list in the top. A list of contacts and "
-"chat room for that account will be shown below."
-msgstr ""
-"Επιλέξτε ένα λογαριασμό από την πάνω αναπτυσσόμενη λίστα. Από κάτω θα "
-"εμφανιστεί η λίστα επαφών και δωματίων συζήτησης γι' αυτόν το λογαριασμό."
-
-#: C/prev-conv.page:67(item/p)
-msgid ""
-"Type the text you want to search for in the <gui>Search</gui> text field."
-msgstr ""
-"Πληκτρολογήστε το κείμενο που θέλετε να αναζητήσετε στο πεδίο κειμένου "
-"<gui>Αναζήτηση</gui>."
-
-#: C/prev-conv.page:71(item/p)
-msgid ""
-"Any conversations that matched your search terms will be shown. By default, "
-"conversations are ordered by date."
-msgstr ""
-"Οι συζητήσεις που αντιστοιχούν στους όρους της αναζήτησης θα εμφανιστούν. Η "
-"προεπιλογή είναι, οι συζητήσεις να ταξινομούνται κατά ημερομηνία."
-
-#: C/prev-conv.page:80(section/title)
-msgid "Browse previous conversations"
-msgstr "Περιήγηση προηγούμενων συζητήσεων"
-
-#: C/prev-conv.page:82(section/p)
-msgid ""
-"You can browse your previous conversations with your contacts or in chat "
-"rooms by date."
-msgstr ""
-"Μπορείτε να εμφανίζετε τις προηγούμενες συζητήσεις σας, με τις επαφές σας ή "
-"σε δωμάτια συζήτησης, τοποθετημένες σε χρονολογική σειρά."
-
-#: C/prev-conv.page:91(item/p)
-msgid ""
-"Select an account from the drop-down list in the top left. A list of "
-"contacts and chat room for that account will be shown below."
-msgstr ""
-"Επιλέξτε ένα λογαριασμό από την αναπτυσσόμενη λίστα πάνω αριστερά. Από κάτω "
-"θα εμφανιστεί η λίστα επαφών και δωματίων συζήτησης που αντιστοιχεί σε αυτόν "
-"το λογαριασμό."
-
-#: C/prev-conv.page:95(item/p)
-msgid ""
-"Select a contact or chat room to view your previous conversations from. By "
-"default the most recent conversation will be shown."
-msgstr ""
-"Επιλέξτε μια επαφή ή ένα δωμάτιο συζήτησης για να δείτε τις αντίστοιχες "
-"προηγούμενες συζητήσεις. Η προεπιλογή είναι να εμφανίζεται η πιο πρόσφατη "
-"συζήτηση."
-
-#: C/prev-conv.page:99(item/p)
-msgid ""
-"You can browse your conversations by date. Days on which you had a "
-"conversation with the selected contact will be shown in bold text. Click a "
-"date to select it. Click the arrows next to the month and year to browse "
-"earlier dates."
-msgstr ""
-"Μπορείτε να περιηγηθείτε στις συζητήσεις σας με βάση την ημερομηνία. Οι "
-"ημέρες που είχατε συζητήσει με την επιλεγμένη επαφή εμφανίζονται με έντονους "
-"χαρακτήρες. Κάνετε κλικ σε μια ημερομηνία για να την επιλέξετε. "
-"Χρησιμοποιήστε τα βέλη δίπλα από το μήνα και το έτος για να επιλέξετε "
-"παλαιότερες ημερομηνίες."
-
-#: C/prev-conv.page:105(section/p)
-msgid ""
-"You can search for text in the conversations by typing into the search field "
-"at the top. The matching conversations will be showed."
-msgstr ""
-"Μπορείτε να κάνετε αναζήτηση για κείμενο στις συζητήσεις πληκτρολογώντας στο "
-"πεδίο αναζήτησης στο πάνω μέρος. Θα εμφανιστεί η ζητούμενη συνομιλία."
-
-#: C/prev-conv.page:111(note/p)
-msgid ""
-"You can quickly view the previous conversations with one of your contacts "
-"from the <gui>Contact List</gui> window. Simply right click the contact and "
-"choose <gui>Previous Conversations</gui>. The <gui>Previous Conversations</"
-"gui> window will open with that contact already selected."
-msgstr ""
-"Υπάρχει ένας γρήγορος τρόπος για να προβάλετε τις προηγούμενες συζητήσεις "
-"σας με μία επαφή από το παράθυρο <gui>Λίστα επαφών</gui>. Απλά κάντε δεξί "
-"κλικ στην επαφή και επιλέξτε <gui>Προηγούμενες συζητήσεις</gui>. Θα "
-"εμφανιστεί το παράθυρο <gui>Προηγούμενες συζητήσεις</gui> με τη συγκεκριμένη "
-"επαφή επιλεγμένη."
-
-#: C/prob-conn-acctdisabled.page:7(info/desc)
-msgid ""
-"The instant messaging account that you want to use is not enabled in the "
-"list of accounts."
-msgstr ""
-"Ο λογαριασμός άμεσων μηνυμάτων που προσπαθείτε να χρησιμοποιήσετε δεν "
-"εμφανίζεται ενεργοποιημένος στη λίστα λογαριασμών."
-
-#: C/prob-conn-acctdisabled.page:34(page/title)
-msgid "My account is not enabled"
-msgstr "Ο λογαριασμός μου δεν είναι ενεργοποιημένος"
-
-#: C/prob-conn-acctdisabled.page:36(page/p)
-msgid ""
-"If the instant messaging account that you want to use is not enabled in the "
-"drop-down account list when you try to start a new conversation or join a "
-"room, your account details may not be correct."
-msgstr ""
-"Αν ένας λογαριασμός άμεσων μηνυμάτων δεν εμφανίζεται ενεργοποιημένος στην "
-"αναπτυσσόμενη λίστα λογαριασμών, όταν προσπαθείτε να ξεκινήσετε μια συζήτηση "
-"ή να μπείτε σε ένα δωμάτιο, τα στοιχεία του λογαριασμού μπορεί να είναι "
-"λανθασμένα."
-
-#: C/prob-conn-acctdisabled.page:44(item/p) C/prob-conn-auth.page:45(item/p)
-#: C/prob-conn-neterror.page:53(item/p)
-msgid ""
-"Make sure that you are connected to the Internet, or to a local area network."
-msgstr "Βεβαιωθείτε ότι είστε συνδεδεμένοι στο διαδίκτυο ή στο τοπικό δίκτυο."
-
-#: C/prob-conn-acctdisabled.page:49(item/p)
-msgid ""
-"Choose <guiseq><gui>Edit</gui><gui>Accounts</gui></guiseq> and select the "
-"account that is not working."
-msgstr ""
-"Επιλέξτε πρώτα <guiseq><gui>Επεξεργασία</gui><gui>Λογαριασμοί</gui></"
-"guiseq>, και μετά το λογαριασμό που δε λειτουργεί."
-
-#: C/prob-conn-acctdisabled.page:55(item/p) C/prob-conn-auth.page:63(item/p)
-msgid ""
-"Type your username and password again to make sure that they are correct."
-msgstr ""
-"Εισάγετε ξανά το όνομα χρήστη και το συνθηματικό σας, για να βεβαιωθείτε ότι "
-"τα είχατε πληκτρολογήσει σωστά."
-
-#: C/prob-conn-acctdisabled.page:60(item/p)
-#: C/prob-conn-neterror.page:64(item/p)
-msgid ""
-"Check in the <gui>Advanced</gui> section that all the details are correct. "
-"You should be able to find these details from the website of the messaging "
-"service."
-msgstr ""
-"Στην ενότητα <gui>Για προχωρημένους</gui>, ελέγξτε ότι όλα τα στοιχεία είναι "
-"σωστά. Τα στοιχεία θα πρέπει να είναι διαθέσιμα στον ιστότοπο της υπηρεσίας "
-"άμεσων μηνυμάτων."
-
-#: C/prob-conn-acctdisabled.page:66(item/p)
-msgid "Check that the account is switched on."
-msgstr "Βεβαιωθείτε ότι ο λογαριασμός είναι ενεργοποιημένος."
-
-#: C/prob-conn-auth.page:8(info/desc)
-msgid ""
-"An error message which says “<gui>Authentication failed</gui>” appears in "
-"the main window."
-msgstr ""
-"Στο κύριο παράθυρο εμφανίζεται το μήνυμα λάθους “<gui>Η πιστοποίηση "
-"απέτυχε</gui>”."
-
-#: C/prob-conn-auth.page:36(page/title)
-msgid "I get a message that says “Authentication failed”"
-msgstr "Λαμβάνω το μήνυμα “Η πιστοποίηση απέτυχε”"
-
-#: C/prob-conn-auth.page:38(page/p)
-msgid ""
-"This kind of error happens when your instant messaging service is not "
-"allowing you to connect because it does not recognize your username or "
-"password for some reason."
-msgstr ""
-"Αυτό το σφάλμα εμφανίζεται όταν η υπηρεσία άμεσων μηνυμάτων δε σας επιτρέπει "
-"να συνδεθείτε, επειδή, για οποιονδήποτε λόγο, δεν αναγνωρίζει το όνομα "
-"χρήστη ή το συνθηματικό σας."
-
-#: C/prob-conn-auth.page:50(item/p)
-msgid ""
-"Make sure that you have registered an account with the service you are "
-"trying to connect to. If you do not have an account, most services will not "
-"allow you to connect."
-msgstr ""
-"Βεβαιωθείτε ότι διαθέτετε λογαριασμό στη συγκεκριμένη υπηρεσία. Οι "
-"περισσότερες υπηρεσίες άμεσων μηνυμάτων δε θα σας επιτρέψουν να συνδεθείτε "
-"χωρίς λογαριασμό."
-
-#: C/prob-conn-auth.page:57(item/p) C/prob-conn-name.page:43(item/p)
-#: C/prob-conn-neterror.page:58(item/p)
-msgid ""
-"Click the <media type=\"image\" mime=\"image/png\" src=\"figures/gtk-edit.png"
-"\">edit</media> icon in the error message."
-msgstr ""
-"Πατήστε το εικονίδιο <media type=\"image\" mime=\"image/png\" src=\"figures/"
-"gtk-edit.png\">επεξεργασία</media> στο μήνυμα σφάλματος."
-
-#: C/prob-conn-auth.page:68(item/p)
-msgid ""
-"Deselect the <gui>Enabled</gui>, and then select it again to try to "
-"reconnect to the service."
-msgstr ""
-"Αποεπιλέξτε το <gui>Ενεργός</gui> και επιλέξτε το ξανά, για να γίνει νέα "
-"προσπάθεια σύνδεσης στην υπηρεσία."
-
-#: C/prob-conn-name.page:9(info/title)
-msgctxt "link:error-msg"
-msgid "“Name in use”"
-msgstr "“Όνομα σε χρήση”"
-
-#: C/prob-conn-name.page:10(info/desc)
-msgid ""
-"An error message which says “<gui>Name in use</gui>” appears in the main "
-"window."
-msgstr ""
-"Στο κύριο παράθυρο εμφανίζεται το μήνυμα λάθους “<gui>Το όνομα "
-"χρησιμοποιείται ήδη</gui>”."
-
-#: C/prob-conn-name.page:33(page/title)
-msgid "I get a message that says “Name in use”"
-msgstr "Λαμβάνω το μήνυμα “Το όνομα χρησιμοποιείται ήδη”"
-
-#: C/prob-conn-name.page:35(page/p)
-msgid ""
-"This kind of error happens when you try to connect to your IRC account and "
-"you are using a nickname that is already being used by someone else on that "
-"particular network."
-msgstr ""
-"Αυτό το σφάλμα εμφανίζεται όταν προσπαθείτε να συνδεθείτε σε λογαριασμό IRC "
-"με ψευδώνυμο που χρησιμοποιείται ήδη από άλλο χρήστη του συγκεκριμένου "
-"δικτύου."
-
-#: C/prob-conn-name.page:51(item/p)
-msgid "In the <gui>Nickname</gui> text box, type a new nickname."
-msgstr "Στο πεδίο κειμένου <gui>Ψευδώνυμο</gui>, εισάγετε ένα νέο ψευδώνυμο."
-
-#: C/prob-conn-name.page:56(item/p)
-msgid ""
-"If you have registered that nickname within the network you are using, set "
-"the password for that nickname. For more information, see <link xref=\"irc-"
-"nick-password\"/>."
-msgstr ""
-"Αν έχετε καταχωρήσει το ψευδώνυμο αυτό στο συγκεκριμένο δίκτυο, εισάγετε το "
-"συνθηματικό για το ψευδώνυμο. Για περισσότερες πληροφορίες, δείτε την <link "
-"xref=\"irc-nick-password\"/>."
-
-#: C/prob-conn-name.page:65(item/p) C/prob-conn-neterror.page:79(item/p)
-msgid ""
-"Switch the account off, and then switch it on to try to reconnect to the "
-"service."
-msgstr ""
-"Απενεργοποιήστε τον λογαριασμό, και ενεργοποιήστε τον ξανά για να γίνει νέα "
-"προσπάθεια σύνδεσης στην υπηρεσία."
-
-#: C/prob-conn-neterror.page:7(info/desc)
-msgid ""
-"An error message which says “<gui>Network error</gui>” appears in the main "
-"window."
-msgstr ""
-"Στο κύριο παράθυρο εμφανίζεται το μήνυμα λάθους “<gui>Σφάλμα δικτύου</gui>”."
-
-#: C/prob-conn-neterror.page:34(page/title)
-msgid "I get a message that says “Network error”"
-msgstr "Λαμβάνω το μήνυμα “Σφάλμα δικτύου”"
-
-#: C/prob-conn-neterror.page:42(page/p)
-msgid ""
-"This kind of error happens when <app>Empathy</app> cannot communicate with "
-"the instant messaging service for some reason."
-msgstr ""
-"Αυτό το σφάλμα εμφανίζεται όταν, για οποιονδήποτε λόγο, το <app>Empathy</"
-"app> αδυνατεί να επικοινωνήσει με την υπηρεσία άμεσων μηνυμάτων."
-
-#: C/prob-conn-neterror.page:46(page/p)
-msgid ""
-"Also, this kind of error happens when you try to use an IRC account without "
-"setting a nickname."
-msgstr ""
-"Επίσης, αυτό το σφάλμα εμφανίζεται αν προσπαθείτε να χρησιμοποιήσετε "
-"λογαριασμό IRC χωρίς να έχετε επιλέξει ψευδώνυμο."
-
-#: C/prob-conn-neterror.page:87(section/title)
-msgid "Proxy support"
-msgstr "Υποστήριξη διαμεσολαβητών δικτύου"
-
-#: C/prob-conn-neterror.page:88(section/p)
-msgid ""
-"At the moment <app>Empathy</app> can not be configured to work with a proxy."
-msgstr ""
-"Προς το παρόν, το <app>Empathy</app> δε μπορεί να ρυθμιστεί ώστε να "
-"λειτουργεί μέσω διαμεσολαβητή."
-
-#: C/prob-conn.page:7(info/desc)
-msgid "Diagnose common problems connecting to an instant messaging service."
-msgstr ""
-"Διάγνωση κοινών προβλημάτων κατά τη σύνδεση σε υπηρεσίες άμεσων μηνυμάτων."
-
-#: C/prob-conn.page:29(page/title)
-msgid "Problems connecting to an instant messaging service"
-msgstr "Προβλήματα σύνδεσης σε υπηρεσίες άμεσων μηνυμάτων"
-
-#: C/remove-account.page:8(info/desc)
-msgid "Completely remove an account from <app>Empathy</app>."
-msgstr "Ολοκληρωτική διαγραφή λογαριασμού από το <app>Empathy</app>."
-
-#: C/remove-account.page:34(page/title)
-msgid "Remove an account"
-msgstr "Διαγραφή λογαριασμού"
-
-#: C/remove-account.page:36(page/p)
-msgid ""
-"You can completely remove an account from <app>Empathy</app> if you no "
-"longer wish to use the account. If you wish to use the account in "
-"<app>Empathy</app> again in the future, you will have to add your account "
-"details again."
-msgstr ""
-"Μπορείτε να διαγράψετε ολοκληρωτικά ένα λογαριασμό από το <app>Empathy</"
-"app>, αν δεν πρόκειται να τον χρησιμοποιήσετε άλλο. Αν, αργότερα, "
-"αποφασίσετε να χρησιμοποιήσετε ξανά το λογαριασμό από το <app>Empathy</app>, "
-"θα πρέπει να εισάγετε εκ νέου τα στοιχεία του."
-
-#: C/remove-account.page:47(item/p)
-msgid ""
-"Select the account you wish to remove from the accounts list on the left "
-"side of the window."
-msgstr ""
-"Επιλέξτε το λογαριασμό που θέλετε να διαγράψετε από τη λίστα στην αριστερή "
-"πλευρά του παραθύρου."
-
-#: C/remove-account.page:51(item/p)
-msgid "Click <gui style=\"button\">-</gui>."
-msgstr "Πατήστε <gui style=\"button\">-</gui>."
-
-#: C/remove-account.page:54(item/p)
-msgid ""
-"A dialog will be shown asking for confirmation. Click the <gui>Remove</gui> "
-"button to permanently remove the account."
-msgstr ""
-"Θα εμφανιστεί ένας διάλογος που θα σας ζητάει επιβεβαίωση. Πατήστε το κουμπί "
-"<gui>Διαγραφή</gui> για να διαγράψετε οριστικά το λογαριασμό."
-
-#: C/remove-account.page:60(note/p)
-msgid ""
-"Even after removing an account, <app>Empathy</app> does not delete your "
-"conversation history for that account."
-msgstr ""
-"Ακόμη και αν διαγράψετε ένα λογαριασμό, το <app>Empathy</app> δε διαγράφει "
-"το ιστορικό των συζητήσεων για αυτόν το λογαριασμό."
-
-#: C/salut-protocol.page:8(info/desc)
-msgid "Understanding the People Nearby feature."
-msgstr "Λειτουργία γειτονικών ατόμων."
-
-#: C/salut-protocol.page:33(page/title)
-msgid "What is People Nearby?"
-msgstr "Τι είναι τα γειτονικά άτομα;"
-
-#: C/salut-protocol.page:40(page/p)
-msgid ""
-"The People Nearby service is a serverless communication service: you do not "
-"need to connect and authenticate to a central server in order to use it."
-msgstr ""
-"Η λειτουργία γειτονικών ατόμων είναι μία υπηρεσία επικοινωνίας που δε "
-"χρησιμοποιεί εξυπηρετητή: δεν απαιτεί σύνδεση και πιστοποίηση σε κεντρικό "
-"υπολογιστή."
-
-#: C/salut-protocol.page:45(page/p)
-msgid ""
-"This kind of serverless messaging system is restricted to a local area "
-"network and an active Internet connection is not necessary."
-msgstr ""
-"Αυτή η αποστολή μηνυμάτων χωρίς παρεμβολή εξυπηρετητή αφορά μόνο τα τοπικά "
-"δίκτυα και δεν απαιτεί σύνδεση στο διαδίκτυο."
-
-#: C/salut-protocol.page:49(page/p)
-msgid ""
-"The people that use this service inside the same local area network will be "
-"auto-discovered, and it will be possible to send them messages and files as "
-"with other services."
-msgstr ""
-"Το Empathy ανακαλύπτει αυτόματα τα άτομα εντός του τοπικού σας δικτύου που "
-"χρησιμοποιούν αυτή την υπηρεσία, και σας επιτρέπει να τους στέλνετε μηνύματα "
-"και αρχεία, όπως και με τις υπόλοιπες υπηρεσίες."
-
-#: C/salut-protocol.page:54(page/p)
-msgid ""
-"All the modern local area networks should be able to support this kind of "
-"service."
-msgstr ""
-"Κανονικά, όλα τα τοπικά δίκτυα σύγχρονης τεχνολογίας πρέπει να υποστηρίζουν "
-"αυτή την υπηρεσία."
-
-#: C/send-file.page:8(info/desc)
-msgid "Send a file from your computer to one of your contacts."
-msgstr "Αποστολή αρχείων από των υπολογιστή σας στις επαφές σας."
-
-#: C/send-file.page:36(page/title)
-msgid "Send files"
-msgstr "Αποστολή αρχείων"
-
-#: C/send-file.page:45(item/p)
-msgid ""
-"Right click on the contact you want to send a file to, and choose <gui>Send "
-"file</gui>."
-msgstr ""
-"Κάνετε δεξί κλικ στο όνομα της επαφής στην οποία θέλετε να στείλετε το "
-"αρχείο, και επιλέξτε <gui>Αποστολή αρχείου</gui>."
-
-#: C/send-file.page:50(item/p)
-msgid ""
-"Click on the contact you want to send a file, and choose <guiseq><gui>Edit</"
-"gui> <gui>Contact</gui><gui>Send file</gui></guiseq>."
-msgstr ""
-"Κάνετε κλικ στην επαφή που θέλετε να στείλετε το αρχείο, και επιλέξτε "
-"<guiseq><gui>Επεξεργασία</gui> <gui>Επαφή</gui><gui>Αποστολή αρχείου</gui></"
-"guiseq>."
-
-#: C/send-file.page:58(item/p)
-msgid "Select the file to send, and click on <gui>Send</gui>."
-msgstr ""
-"Επιλέξτε το αρχείο που θέλετε να στείλετε, και πατήστε <gui>Αποστολή</gui>."
-
-#: C/send-file.page:63(item/p)
-msgid "The <gui>File Transfers</gui> window will appear."
-msgstr "Θα εμφανιστεί το παράθυρο <gui>Μεταφορές αρχείων</gui>."
-
-#: C/send-file.page:66(item/p)
-msgid ""
-"Wait for your contact to accept the file transfer, or click <gui>Stop</gui> "
-"to halt the transfer."
-msgstr ""
-"Περιμένετε να αποδεχτεί τη μεταφορά του αρχείου η επαφή σας, ή πατήστε "
-"<gui>Διακοπή</gui> για να σταματήσετε τη μεταφορά."
-
-#: C/send-file.page:72(item/p)
-msgid ""
-"Once the transfer is finished, it is possible to close the <gui>File "
-"Transfers</gui> window."
-msgstr ""
-"Αφού ολοκληρωθεί η μεταφορά, μπορείτε να κλείσετε το παράθυρο <gui>Μεταφορές "
-"αρχείων</gui>."
-
-#: C/send-file.page:80(note/p)
-msgid ""
-"If you have multiple finished transfers listed in the window, click on "
-"<gui>Clear</gui> to empty the list. This will only remove the files from the "
-"list and will not delete them from your computer."
-msgstr ""
-"Αν στο παράθυρο εμφανίζονται πολλές ολοκληρωμένες μεταφορές, πατήστε "
-"<gui>Εκκαθάριση</gui> για να αδειάσετε τη λίστα. Αυτή η ενέργεια δε "
-"διαγράφει τα αρχεία από τον υπολογιστή σας, αλλά μόνο από τη λίστα."
-
-#: C/send-file.page:87(note/p)
-msgid ""
-"It is possible to send files only using the following services: <em>Jabber</"
-"em>, <em>Google Talk</em> and <em>People Nearby</em>."
-msgstr ""
-"Μόνο οι παρακάτω υπηρεσίες υποστηρίζουν την αποστολή αρχείων: <em>Jabber</"
-"em>, <em>Google Talk</em> και <em>Γειτονικά άτομα</em>."
-
-#: C/send-file.page:93(note/p)
-msgid ""
-"In order to send a file to someone, you need to be connected to the "
-"Internet, or to a local area network."
-msgstr ""
-"Για την αποστολή αρχείων απαιτείται σύνδεση στο διαδίκτυο ή σε τοπικό δίκτυο."
-
-#: C/send-message.page:8(info/desc)
-msgid "Send a message to one of your contacts."
-msgstr "Αποστολή μηνυμάτων στις επαφές σας."
-
-#: C/send-message.page:32(page/title)
-msgid "Send a message to someone"
-msgstr "Αποστολή μηνυμάτων"
-
-#: C/send-message.page:36(item/p)
-msgid ""
-"From the <gui>Contact List</gui> window, double-click the name of the "
-"contact that you want to have a conversation with."
-msgstr ""
-"Στο παράθυρο <gui>Λίστα επαφών</gui>, κάντε διπλό κλικ στο όνομα της επαφής "
-"με την οποία θέλετε να συζητήσετε."
-
-#: C/send-message.page:42(item/p)
-msgid ""
-"A new window will open. Type a message into the box at the bottom of the "
-"window and press <key>Enter</key> to send it."
-msgstr ""
-"Θα ανοίξει ένα νέο παράθυρο. Εισάγετε το μήνυμά σας στο πεδίο κειμένου στο "
-"κάτω μέρος του παραθύρου και πατήστε <key>Enter</key> για να το στείλετε."
-
-#: C/send-message.page:50(section/title)
-msgid "Send a message to a meta-contact"
-msgstr "Αποστολή μηνύματος σε μια μετα-επαφή"
-
-#: C/send-message.page:58(item/p)
-msgid ""
-"Select the contact you want to have the conversation, and from the menu "
-"select <gui style=\"menuitem\">Chat</gui>."
-msgstr ""
-"Επιλέξτε την επαφή με την οποία θέλετε να συζητήσετε, και από το μενού "
-"επιλέξτε <gui style=\"menuitem\">Συζήτηση</gui>."
-
-#: C/set-custom-status.page:9(info/desc)
-msgid "Add, edit or delete personal messages for your status."
-msgstr "Προσθήκη, επεξεργασία ή διαγραφή προσωπικών μηνυμάτων κατάστασης."
-
-#: C/set-custom-status.page:15(credit/name)
-msgid "Jim Campbell"
-msgstr "Jim Campbell"
-
-#: C/set-custom-status.page:34(page/title)
-msgid "Set a custom message"
-msgstr "Δημιουργία προσαρμοσμένου μηνύματος"
-
-#: C/set-custom-status.page:36(page/p)
-msgid ""
-"Sometimes you may want to set a custom message for your status, for example "
-"to let people know that you will be unavailable for a certain period of time."
-msgstr ""
-"Κάποιες φορές μπορεί να θέλετε να ορίσετε ένα προσαρμοσμένο μήνυμα για την "
-"κατάστασή σας, π.χ. αν θέλετε να ενημερώσετε τις επαφές σας ότι δε θα είστε "
-"διαθέσιμοι για συγκεκριμένο χρονικό διάστημα."
-
-#: C/set-custom-status.page:40(page/p)
-msgid ""
-"It is possible to set a custom message based on the different statuses "
-"available."
-msgstr ""
-"Μπορείτε να δημιουργήσετε ένα προσαρμοσμένο μήνυμα, βασισμένο στις διάφορες "
-"διαθέσιμες καταστάσεις."
-
-#: C/set-custom-status.page:46(item/p) C/set-custom-status.page:82(item/p)
-msgid ""
-"From the <gui>Contact List</gui> window, click on the drop-down list at the "
-"top."
-msgstr ""
-"Στο παράθυρο <gui>Λίστα επαφών</gui>, κάνετε κλικ στην αναπτυσσόμενη λίστα "
-"στο πάνω μέρος."
-
-#: C/set-custom-status.page:52(item/p)
-msgid ""
-"Select the status you want to add a custom message to. You have to select "
-"the one identified with the label <gui>Custom Message</gui>."
-msgstr ""
-"Επιλέξτε την κατάσταση για την οποία θέλετε να προσθέσετε προσαρμοσμένο "
-"μήνυμα. Θα πρέπει να επιλέξετε <gui>Προσαρμοσμένο μήνυμα</gui> για την "
-"κατάσταση που σας ενδιαφέρει."
-
-#: C/set-custom-status.page:58(item/p)
-msgid ""
-"Enter your custom message in the text box at the top of the window, and "
-"press <key>Enter</key> to set the message."
-msgstr ""
-"Εισάγετε το προσαρμοσμένο μήνυμα στο πλαίσιο κειμένου στο πάνω μέρος του "
-"παραθύρου και πατήστε <key>Enter</key> για να το οριστικοποιήσετε."
-
-#: C/set-custom-status.page:64(item/p)
-msgid ""
-"If you want to set the custom message as a favorite, saving it in order to "
-"use it again, click on the little heart on the right of the text box where "
-"you wrote your custom message."
-msgstr ""
-"Αν θέλετε να ορίσετε το προσαρμοσμένο μήνυμα ως αγαπημένο σας, αποθηκεύστε "
-"το για το χρησιμοποιήσετε ξανά, και κάντε κλικ στο αστεράκι στα δεξιά του "
-"πλαισίου κειμένου όπου γράψατε το προσαρμοσμένο μήνυμα."
-
-#: C/set-custom-status.page:69(item/p)
-msgid ""
-"If you do not do it, the custom message will not be available the next time "
-"you use <app>Empathy</app>. It will be saved only for the current session."
-msgstr ""
-"Αν δεν το προσθέσετε στα αγαπημένα, δε θα είναι διαθέσιμο την επόμενη φορά "
-"που θα χρησιμοποιήσετε το <app>Empathy</app>. Το μήνυμα παραμένει "
-"αποθηκευμένο μόνο για την τρέχουσα συνεδρία."
-
-#: C/set-custom-status.page:78(section/title)
-msgid "Edit and remove a custom message"
-msgstr "Προσθήκη και απομάκρυνση ενός προσαρμοσμένου μηνύματος"
-
-#: C/set-custom-status.page:88(item/p)
-msgid "Select <gui>Edit Custom Message</gui>."
-msgstr "Επιλέξτε <gui>Επεξεργασία προσαρμοσμένου μηνύματος</gui>."
-
-#: C/set-custom-status.page:95(item/p)
-msgid "To edit a custom message:"
-msgstr "Για να επεξεργαστείτε ένα προσαρμοσμένο μήνυμα:"
-
-#: C/set-custom-status.page:100(item/p)
-msgid ""
-"From the <gui>Saved Presets</gui> box, select the status message you want to "
-"edit and double-click on it."
-msgstr ""
-"Από το πλαίσιο <gui>Αποθηκευμένες προεπιλογές</gui>, επιλέξτε το μήνυμα "
-"κατάστασης που θέλετε να επεξεργαστείτε και κάνετε δεξί κλικ πάνω του."
-
-#: C/set-custom-status.page:106(item/p)
-msgid "Type the new custom message and press <key>Enter</key> to modify it."
-msgstr ""
-"Εισάγετε το νέο προσαρμοσμένο μήνυμα και πατήστε <key>Enter</key> για να "
-"εφαρμόσετε τις αλλαγές."
-
-#: C/set-custom-status.page:113(item/p)
-msgid "To remove a custom message:"
-msgstr "Για να διαγράψετε ένα προσαρμοσμένο μήνυμα:"
-
-#: C/set-custom-status.page:118(item/p)
-msgid ""
-"From the <gui>Saved Presets</gui> box, select the status message you want to "
-"remove."
-msgstr ""
-"Από το πλαίσιο <gui>Αποθηκευμένες προεπιλογές</gui>, επιλέξτε το μήνυμα "
-"κατάστασης που θέλετε να διαγράψετε."
-
-#: C/set-custom-status.page:124(item/p)
-msgid "Click on the <gui>Remove</gui> button."
-msgstr "Πατήστε το κουμπί <gui>Αφαίρεση</gui>."
-
-#: C/set-custom-status.page:133(item/p)
-msgid "When finished, click on <gui>Close</gui>."
-msgstr "Όταν τελειώσετε, πατήστε <gui>Κλείσιμο</gui>."
-
-#: C/set-custom-status.page:140(note/p)
-msgid ""
-"When you edit a custom message, it will not be set as the current status "
-"message. You will need to select it from the <gui>Contact List</gui> window."
-msgstr ""
-"Όταν τροποποιείτε ένα προσαρμοσμένο μήνυμα, δεν επιλέγεται αυτόματα ως το "
-"μήνυμα της τρέχουσας κατάστασης. Θα πρέπει να επιλέξετε το μήνυμα από το "
-"παράθυρο <gui>Λίστα επαφών</gui>."
-
-#: C/share-desktop.page:7(info/desc)
-msgid "Show your desktop to your contacts."
-msgstr "Εμφάνιση της επιφάνειας εργασίας στις επαφές σας."
-
-#: C/share-desktop.page:33(page/title)
-msgid "Share your desktop"
-msgstr "Κοινή χρήση της επιφάνειας εργασίας σας"
-
-#: C/share-desktop.page:35(page/p)
-msgid ""
-"It is possible to share your desktop with some of your contacts. You can use "
-"this functionality to show your desktop to your contacts to, for example, "
-"ask for help or help your contacts resolve a problem."
-msgstr ""
-"Είναι δυνατόν να μοιράζεστε την επιφάνεια εργασίας σας με ορισμένες επαφές "
-"σας. Μπορείτε να χρησιμοποιήσετε αυτή τη δυνατότητα για να δείξετε την "
-"επιφάνεια εργασίας σας στις επαφές σας, π.χ. για να ζητήσετε ή να προσφέρετε "
-"βοήθεια για κάποιο πρόβλημα."
-
-#: C/share-desktop.page:42(note/p)
-msgid ""
-"To be able to share your desktop, you need to have a VNC server, which has "
-"support for the feature, installed on your system. <app>Vino</app>, the "
-"GNOME VNC server, has the required support."
-msgstr ""
-"Για να είστε σε θέση να μοιράσετε την επιφάνεια εργασίας σας, χρειάζεστε να "
-"έχετε έναν διακομιστή VNC που υποστηρίζει αυτό το γνώρισμα, εγκατεστημένο "
-"στο σύστημά σας. Το <app>Vino</app>, ο διακομιστής VNC του GNOME, έχει την "
-"απαιτούμενη υποστήριξη."
-
-#: C/share-desktop.page:51(item/p)
-msgid "From the <gui>Contact List</gui> window, do one of the following:"
-msgstr "Από το παράθυρο <gui>Λίστα επαφών</gui>, κάντε ένα από τα ακόλουθα:"
-
-#: C/share-desktop.page:56(item/p)
-msgid ""
-"Select the contact you want to share your desktop with and choose "
-"<guiseq><gui>Edit</gui><gui>Contact</gui> <gui>Share My Desktop</gui></"
-"guiseq>."
-msgstr ""
-"Επιλέξτε πρώτα την επαφή με την οποία θέλετε να μοιραστείτε την επιφάνεια "
-"εργασίας σας και μετά επιλέξτε <guiseq><gui>Επεξεργασία</gui><gui>Επαφή</"
-"gui><gui>Κοινή χρήση της επιφάνειας εργασίας μου</gui></guiseq>."
-
-#: C/share-desktop.page:63(item/p)
-msgid ""
-"Right-click on the name of the contact you want to share your desktop with "
-"and select <gui>Share My Desktop</gui>."
-msgstr ""
-"Κάντε δεξί κλικ στο όνομα της επαφής με την οποία θέλετε να μοιραστείτε την "
-"επιφάνεια εργασίας σας και επιλέξτε <gui>Κοινή χρήση της επιφάνειας εργασίας "
-"μου</gui>."
-
-#: C/share-desktop.page:71(item/p)
-msgid ""
-"An invitation to view your desktop will be sent to the contact you have "
-"selected. To view your desktop, they will need to accept it."
-msgstr ""
-"Μια πρόσκληση για να δει την επιφάνεια εργασίας σας θα αποσταλεί στην "
-"επιλεγμένη επαφή. Πρέπει να την αποδεχτεί, για να την δει."
-
-#: C/share-desktop.page:77(item/p)
-msgid ""
-"You can disconnect the contact from your computer using your desktop sharing "
-"application."
-msgstr ""
-"Μπορείτε να αποσυνδέσετε την επαφή από τον υπολογιστή σας χρησιμοποιώντας "
-"την εφαρμογή διαμοιρασμού της επιφάνειας εργασίας."
-
-#: C/share-desktop.page:82(note/p)
-msgid ""
-"For more information about how to use the remote desktop sharing "
-"application, refer to its help."
-msgstr ""
-"Για περισσότερες πληροφορίες σχετικά με τη χρήση της εφαρμογής προβολής "
-"απομακρυσμένης επιφάνειας εργασίας, ανατρέξτε στη βοήθεια της εφαρμογής "
-"αυτής."
-
-#: C/share-desktop.page:90(page/p)
-msgid ""
-"When you share your desktop with someone else, it is possible to experience "
-"system performance slowdown and low Internet speed."
-msgstr ""
-"Όταν μοιράζεστε την επιφάνεια εργασίας σας με άλλους, μπορεί να παρατηρήσετε "
-"μείωση της ταχύτητας του συστήματος ή της σύνδεσης στο διαδίκτυο."
-
-#: C/share-desktop.page:96(note/p)
-msgid ""
-"Some of your contacts may not be able to use this feature. It is necessary "
-"for them to have version 2.28, or newer, of <app>Empathy</app> and a "
-"compatible remote desktop viewer application installed in their system."
-msgstr ""
-"Ορισμένες επαφές σας μπορεί να μην υποστηρίζουν αυτή τη λειτουργία. Η "
-"λειτουργία αυτή απαιτεί την έκδοση 2.28, ή νεότερη, του <app>Empathy</app> "
-"καθώς και μια εφαρμογή προβολής απομακρυσμένης επιφάνειας εργασίας."
-
-#. This is a reference to an external file such as an image or video. When
-#. the file changes, the md5 hash will change to let you know you need to
-#. update your localized copy. The msgstr is not used at all. Set it to
-#. whatever you like once you have updated your copy of the file.
-#: C/status-icons.page:39(media)
-msgctxt "_"
-msgid ""
-"external ref='figures/available.png' md5='2196b2f0ad4ce26fdb7b9d48e75d1947'"
-msgstr ""
-"external ref='figures/available.png' md5='2196b2f0ad4ce26fdb7b9d48e75d1947'"
-
-#. This is a reference to an external file such as an image or video. When
-#. the file changes, the md5 hash will change to let you know you need to
-#. update your localized copy. The msgstr is not used at all. Set it to
-#. whatever you like once you have updated your copy of the file.
-#: C/status-icons.page:45(media)
-msgctxt "_"
-msgid "external ref='figures/busy.png' md5='15eb2adff5faedf97b0cb9105d09410a'"
-msgstr "external ref='figures/busy.png' md5='15eb2adff5faedf97b0cb9105d09410a'"
-
-#. This is a reference to an external file such as an image or video. When
-#. the file changes, the md5 hash will change to let you know you need to
-#. update your localized copy. The msgstr is not used at all. Set it to
-#. whatever you like once you have updated your copy of the file.
-#: C/status-icons.page:53(media)
-msgctxt "_"
-msgid "external ref='figures/away.png' md5='9c504d6ffa0cf1a9cc8933d16e1bea33'"
-msgstr "external ref='figures/away.png' md5='9c504d6ffa0cf1a9cc8933d16e1bea33'"
-
-#. This is a reference to an external file such as an image or video. When
-#. the file changes, the md5 hash will change to let you know you need to
-#. update your localized copy. The msgstr is not used at all. Set it to
-#. whatever you like once you have updated your copy of the file.
-#.
-#. This is a reference to an external file such as an image or video. When
-#. the file changes, the md5 hash will change to let you know you need to
-#. update your localized copy. The msgstr is not used at all. Set it to
-#. whatever you like once you have updated your copy of the file.
-#: C/status-icons.page:62(media) C/status-icons.page:69(media)
-msgctxt "_"
-msgid ""
-"external ref='figures/offline.png' md5='c5b0c21181cbd6e13f8909243c0fa964'"
-msgstr ""
-"external ref='figures/offline.png' md5='c5b0c21181cbd6e13f8909243c0fa964'"
-
-#: C/status-icons.page:7(info/desc)
-msgid "Understanding the various statuses and status icons."
-msgstr "Επεξήγηση των διαφόρων καταστάσεων και εικονιδίων κατάστασης."
-
-#: C/status-icons.page:35(page/title)
-msgid "Status Types and Icons"
-msgstr "Τύποι και εικονίδια κατάστασης"
-
-#: C/status-icons.page:39(item/title)
-msgid ""
-"<media type=\"image\" mime=\"image/png\" src=\"figures/available.png"
-"\">Available icon</media> <gui>Available</gui>"
-msgstr ""
-"<media type=\"image\" mime=\"image/png\" src=\"figures/available.png"
-"\">Available icon</media> <gui>Διαθέσιμος/η</gui>"
-
-#: C/status-icons.page:41(item/p)
-msgid ""
-"Use the <em>Available</em> status when you are at your computer and able to "
-"chat with your contacts. You can set a custom message for this status."
-msgstr ""
-"Χρησιμοποιήστε την κατάσταση <em>ΔΙαθέσιμος/η</em> αν βρίσκεστε στον "
-"υπολογιστή σας και μπορείτε να συζητήσετε με τις επαφές σας. Μπορείτε να "
-"προσαρμόσετε το μήνυμα που θα εμφανίζεται για αυτήν την κατάσταση."
-
-#: C/status-icons.page:45(item/title)
-msgid ""
-"<media type=\"image\" mime=\"image/png\" src=\"figures/busy.png\">Busy icon</"
-"media> <gui>Busy</gui>"
-msgstr ""
-"<media type=\"image\" mime=\"image/png\" src=\"figures/busy.png\">Busy icon</"
-"media> <gui>Απασχολημένος/η</gui>"
-
-#: C/status-icons.page:47(item/p)
-msgid ""
-"Use the <em>Busy</em> status to let your contacts know that you don’t want "
-"to chat right now. They can still contact you, for instance if they have "
-"something urgent they need to discuss. By default, <app>Empathy</app> will "
-"not use notification bubbles and sounds when you are busy. You can set a "
-"custom message for this status."
-msgstr ""
-"Χρησιμοποιήστε την κατάσταση <em>Απασχολημένος/η</em> για να ενημερώσετε τις "
-"επαφές σας ότι δεν ενδιαφέρεστε να συζητήσετε μαζί τους. Οι επαφές σας "
-"εξακολουθούν να μπορούν να επικοινωνήσουν μαζί σας, π.χ. σε περίπτωση που "
-"προκύψει κάτι επείγον. Κανονικά, το <app>Empathy</app> δε θα χρησιμοποιεί "
-"ήχους και αναδυόμενες ειδοποιήσεις όταν είστε απασχολημένοι. Μπορείτε να "
-"προσαρμόσετε το μήνυμα που θα εμφανίζεται για αυτήν την κατάσταση."
-
-#: C/status-icons.page:53(item/title)
-msgid ""
-"<media type=\"image\" mime=\"image/png\" src=\"figures/away.png\">Away icon</"
-"media> <gui>Away</gui>"
-msgstr ""
-"<media type=\"image\" mime=\"image/png\" src=\"figures/away.png\">Away icon</"
-"media> <gui>Απουσιάζει</gui>"
-
-#: C/status-icons.page:55(item/p)
-msgid ""
-"Use the <em>Away</em> status when you are going away from your computer. "
-"<app>Empathy</app> automatically sets your status to Away if you do not use "
-"your computer for a while, or if your screensaver is on. By default, "
-"<app>Empathy</app> will not use notification bubbles and sounds when you are "
-"away. You can set a custom message for this status."
-msgstr ""
-"Χρησιμοποιήστε την κατάσταση <em>Απουσιάζει</em> όταν φεύγετε από τον "
-"υπολογιστή σας. Το <app>Empathy</app> μετατρέπει αυτόματα την κατάστασή σας "
-"σε Απουσιάζει, αν δεν έχετε χρησιμοποιήσει τον υπολογιστή σας για κάποιο "
-"διάστημα, ή αν είναι ενεργοποιημένη η προστασία οθόνης. Κανονικά, το "
-"<app>Empathy</app> δε θα χρησιμοποιεί ήχους και αναδυόμενες ειδοποιήσεις "
-"όταν είστε απασχολημένοι. Μπορείτε να προσαρμόσετε το μήνυμα που θα "
-"εμφανίζεται για αυτήν την κατάσταση."
-
-#: C/status-icons.page:62(item/title)
-msgid ""
-"<media type=\"image\" mime=\"image/png\" src=\"figures/offline.png\">Offline "
-"icon</media> <gui>Invisible</gui>"
-msgstr ""
-"<media type=\"image\" mime=\"image/png\" src=\"figures/offline.png\">Offline "
-"icon</media> <gui>Αόρατος</gui>"
-
-#: C/status-icons.page:64(item/p)
-msgid ""
-"When you set your status to <em>Invisible</em>, you will appear as offline "
-"to your contacts. You will still be connected to your accounts, and you "
-"still see your contacts’ statuses and start conversations with them."
-msgstr ""
-"Όταν επιλέξετε την κατάσταση <em>Αόρατος/η</em>, οι επαφές σας θα βλέπουν "
-"ότι είστε εκτός σύνδεσης. Θα παραμένετε όμως συνδεδεμένοι στους λογαριασμούς "
-"σας και θα μπορείτε να δείτε την κατάσταση των επαφών σας και να ξεκινήσετε "
-"συζητήσεις μαζί τους."
-
-#: C/status-icons.page:69(item/title)
-msgid ""
-"<media type=\"image\" mime=\"image/png\" src=\"figures/offline.png\">Offline "
-"icon</media> <gui>Offline</gui>"
-msgstr ""
-"<media type=\"image\" mime=\"image/png\" src=\"figures/offline.png\">Offline "
-"icon</media> <gui>Εκτός σύνδεσης</gui>"
-
-#: C/status-icons.page:71(item/p)
-msgid ""
-"Setting your status to <em>Offline</em> disconnects you from all of your "
-"accounts."
-msgstr ""
-"Αν επιλέξετε την κατάσταση <em>Εκτός σύνδεσης</em>, θα αποσυνδεθείτε από "
-"όλους τους λογαριασμούς σας."
-
-#: C/video-call.page:11(info/desc)
-msgid "Start a video conversation with one of your contacts."
-msgstr "Έναρξη βιντεοσυζήτησης με τις επαφές σας."
-
-#: C/video-call.page:37(page/title)
-msgid "Start a video conversation"
-msgstr "Έναρξη βιντεοκλήσης"
-
-#: C/video-call.page:39(page/p)
-msgid ""
-"If you have a webcam, you can call your contacts and have a video "
-"conversation with them. This feature only works with certain types of "
-"accounts, and it requires the other person to have an application that "
-"supports video calls."
-msgstr ""
-"Αν έχετε κάμερα, μπορείτε να κάνετε βιντεοκλήσεις με τις επαφές σας. Αυτή η "
-"δυνατότητα υπάρχει μόνο για ορισμένους τύπους λογαριασμών, και προϋποθέτει "
-"ότι ο συνομιλητής σας διαθέτει και αυτός εφαρμογή που υποστηρίζει "
-"βιντεοκλήσεις."
-
-#: C/video-call.page:46(item/p)
-#| msgid ""
-#| "Select the contact you want to have the conversation, and from the menu "
-#| "select <gui style=\"menuitem\">Video Call</gui>."
-msgid ""
-"Right-click on the contact that you want to call and select <gui style="
-"\"menuitem\">Video Call</gui>."
-msgstr ""
-"Δεξιοπατήστε στην επαφή την οποία θέλετε να καλέσετε και επιλέξτε <gui "
-"style=\"menuitem\">Βιντεοκλήση</gui>."
-
-#: C/video-call.page:54(item/p)
-#| msgid ""
-#| "To end the conversation, click on <gui style=\"button\">Hang up</gui>."
-msgid ""
-"To end the conversation, click on the <gui style=\"button\">hang up</gui> "
-"button."
-msgstr ""
-"Για να τερματίσετε τη συνομιλία, πατήστε το κουμπί <gui "
-"style=\"button\">Κλείσιμο</gui>."
-
-#: C/video-call.page:60(note/p)
-msgid ""
-"To turn a video conversation into an audio conversation, choose <guiseq><gui "
-"style=\"menu\">Video</gui><gui style=\"menuitem\">Video Off</gui></guiseq>."
-msgstr ""
-"Για να μετατρέψετε μια βιντεοκλήση σε φωνητική συνομιλία, επιλέξτε "
-"<guiseq><gui style=\"menu\">Βίντεο</gui><gui style=\"menuitem\">Βίντεο "
-"ανενεργό</gui></guiseq>."
-
-#: C/video-call.page:65(section/title)
-msgid "Start a video conversation with a meta-contact"
-msgstr "Έναρξη βιντεοσυζήτησης με μια μετα-επαφή"
-
-#: C/video-call.page:73(item/p)
-msgid ""
-"Select the contact you want to have the conversation, and from the menu "
-"select <gui style=\"menuitem\">Video Call</gui>."
-msgstr ""
-"Επιλέξτε την επαφή με την οποία θέλετε να συζητήσετε, και από το μενού "
-"επιλέξτε <gui style=\"menuitem\">Βιντεοκλήση</gui>."
-
-#~ msgctxt "_"
-#~ msgid ""
-#~ "external ref='figures/empathy-logo.png' "
-#~ "md5='1afc419a644e90b16393807e35cb5cb2'"
-#~ msgstr ""
-#~ "external ref='figures/empathy-logo.png' "
-#~ "md5='1afc419a644e90b16393807e35cb5cb2'"
-
-#~ msgid ""
-#~ "<media type=\"image\" mime=\"image/png\" src=\"figures/empathy-logo.png"
-#~ "\"> Empathy Internet Messenger logo </media> Empathy Internet Messenger"
-#~ msgstr ""
-#~ "<media type=\"image\" mime=\"image/png\" src=\"figures/empathy-logo.png"
-#~ "\"> Λογότυπο του Αποστολέα άμεσων μηνυμάτων Empathy</media> Αποστολέας "
-#~ "άμεσων μηνυμάτων Empathy"
-
-#~ msgid ""
-#~ "From the <gui>Contact List</gui> window, click the <media type=\"image\" "
-#~ "mime=\"image/png\" src=\"figures/camera-web.png\">video call</media> icon "
-#~ "next to the name of the contact you wish to call and choose <gui style="
-#~ "\"menuitem\">Audio Call</gui>."
-#~ msgstr ""
-#~ "Από το παράθυρο <gui>Λίστα επαφών</gui>, πατήστε το εικονίδιο <media type="
-#~ "\"image\" mime=\"image/png\" src=\"figures/camera-web.png\">βιντεοκλήση</"
-#~ "media> δίπλα από το όνομα της επαφής που επιθυμείτε να καλέσετε, και "
-#~ "επιλέξτε <gui style=\"menuitem\">Φωνητική κλήση</gui>."
-
-#~ msgid ""
-#~ "From the <gui>Contact List</gui> window, click the <media type=\"image\" "
-#~ "mime=\"image/png\" src=\"figures/camera-web.png\">video call</media> icon "
-#~ "next to the name of the contact you wish to call and choose <gui style="
-#~ "\"menuitem\">Video Call</gui>."
-#~ msgstr ""
-#~ "Από το παράθυρο <gui>Λίστα επαφών</gui>, πατήστε το εικονίδιο <media type="
-#~ "\"image\" mime=\"image/png\" src=\"figures/camera-web.png\">βιντεοκλήση</"
-#~ "media> δίπλα από το όνομα της επαφής που επιθυμείτε να καλέσετε, και "
-#~ "επιλέξτε <gui style=\"menuitem\">Βιντεοκλήση</gui>. Εναλλακτικά, κάνετε "
-#~ "δεξί κλικ στο όνομα της επαφής και επιλέξτε <gui>Βιντεοκλήση</gui>."
-
-#~ msgid "milo@ubuntu.com"
-#~ msgstr "milo@ubuntu.com"
-
-#~ msgid "@@image: 'figures/busy.png'; md5=6cab57171fb6d732a85ace48f11cf207"
-#~ msgstr "@@image: 'figures/busy.png'; md5=6cab57171fb6d732a85ace48f11cf207"
-
-#~ msgid "@@image: 'figures/away.png'; md5=9a93ccca527af39cbe11db5c9d915ca0"
-#~ msgstr "@@image: 'figures/away.png'; md5=9a93ccca527af39cbe11db5c9d915ca0"
-
-#~ msgid "@@image: 'figures/offline.png'; md5=565ba82fbedd22e4eb5b810750199527"
-#~ msgstr ""
-#~ "@@image: 'figures/offline.png'; md5=565ba82fbedd22e4eb5b810750199527"
-
-#~ msgid "shaunm@gnome.org"
-#~ msgstr "shaunm@gnome.org"
-
-#~ msgid "Available icon"
-#~ msgstr "εικονίδιο Διαθέσιμος/η"
-
-#~ msgid "Available"
-#~ msgstr "Διαθέσιμος/η"
-
-#~ msgid "Busy icon"
-#~ msgstr "εικονίδιο Απασχολημένος/η"
-
-#~ msgid "Busy"
-#~ msgstr "Απασχολημένος/η"
-
-#~ msgid "Away icon"
-#~ msgstr "εικονίδιο Απουσιάζει"
-
-#~ msgid "Away"
-#~ msgstr "Απουσιάζει"
-
-#~ msgid "Offline icon"
-#~ msgstr "Εικονίδιο Εκτός σύνδεσης"
-
-#~ msgid "Invisible"
-#~ msgstr "Αόρατος/η"
-
-#~ msgid "Offline"
-#~ msgstr "Εκτός σύνδεσης"
-
-#~ msgid ""
-#~ "In order to be able to share your desktop or to remotely use your "
-#~ "contacts desktop, it is necessary to have a remote desktop viewer "
-#~ "application installed in your system."
-#~ msgstr ""
-#~ "Για να μπορείτε να μοιραστείτε την επιφάνεια εργασίας σας ή να "
-#~ "χρησιμοποιήσετε απομακρυσμένα την επιφάνεια εργασίας μιας επαφής σας, θα "
-#~ "πρέπει να έχετε εγκατεστημένη μια εφαρμογή προβολής απομακρυσμένης "
-#~ "επιφάνειας εργασίας."
-
-#~ msgid ""
-#~ "A request will be sent to the contact you want to share your desktop "
-#~ "with. If they accept, the default remote desktop viewer application will "
-#~ "be launched in order to permit you to disconnect the user that is "
-#~ "controlling your desktop."
-#~ msgstr ""
-#~ "Η επαφή σας θα λάβει ένα αίτημα κοινής χρήσης της επιφάνειας εργασίας "
-#~ "σας. Αν απαντήσει θετικά, θα εκκινηθεί η προεπιλεγμένη εφαρμογή προβολής "
-#~ "απομακρυσμένης επιφάνειας εργασίας, που σας επιτρέπει να αποσυνδέσετε την "
-#~ "επαφή που ελέγχει την επιφάνεια εργασίας σας."
-
-#~ msgid "jwcampbell@gmail.com"
-#~ msgstr "jwcampbell@gmail.com"
-
-#~ msgid "Edit, remove and add a custom message"
-#~ msgstr "Επεξεργασία, διαγραφή και προσθήκη προσαρμοσμένου μηνύματος"
-
-#~ msgid ""
-#~ "To add a new custom message, from the <gui>Add New Preset</gui> section:"
-#~ msgstr ""
-#~ "Για να προσθέσετε ένα νέο προσαρμοσμένο μήνυμα, από την ενότητα "
-#~ "<gui>Προσθήκη νέας προεπιλογής</gui>:"
-
-#~ msgid ""
-#~ "Click on the drop-down list to select the status you want to set a custom "
-#~ "message to."
-#~ msgstr ""
-#~ "Κάνετε κλικ στην αναπτυσσόμενη λίστα για να επιλέξετε την κατάσταση για "
-#~ "την οποία θέλετε να προσθέσετε προσαρμοσμένο μήνυμα."
-
-#~ msgid "Click on the text box, and type the new custom message."
-#~ msgstr ""
-#~ "Κάνετε κλικ στο πεδίο κειμένου και εισάγετε το νέο προσαρμοσμένο μήνυμα."
-
-#~ msgid "Click on <gui>Add</gui> to add the new message to the presets ones."
-#~ msgstr ""
-#~ "Πατήστε <gui>Προσθήκη</gui> για να προσθέσετε το νέο μήνυμα στις "
-#~ "προεπιλογές."
-
-#~ msgid "philbull@gmail.com"
-#~ msgstr "philbull@gmail.com"
-
-#~ msgid "I'd like to see this played up a bit more."
-#~ msgstr "I'd like to see this played up a bit more."
-
-#~ msgid "Click on <gui style=\"button\">Remove</gui>."
-#~ msgstr "Πατήστε <gui style=\"button\">Αφαίρεση</gui>."
-
-#~ msgid "shaunm"
-#~ msgstr "shaunm"
-
-#~ msgid ""
-#~ "Empathy no longer allows you to create an IRC account without a valid "
-#~ "nick. I've removed the guide link. Remove the text."
-#~ msgstr ""
-#~ "Empathy no longer allows you to create an IRC account without a valid "
-#~ "nick. I've removed the guide link. Remove the text."
-
-#~ msgid ""
-#~ "Deselect the <gui>Enabled</gui> check-box next to the name of your "
-#~ "account, and then select it again to try to reconnect to the service."
-#~ msgstr ""
-#~ "Αποεπιλέξτε το <gui>Ενεργός</gui> δίπλα στο όνομα του λογαριασμού σας. "
-#~ "Μετά, επιλέξτε το ξανά, για να γίνει νέα προσπάθεια σύνδεσης στην "
-#~ "υπηρεσία."
-
-#~ msgid ""
-#~ "Check that the <gui style=\"checkbox\">Enabled</gui> check-box is "
-#~ "selected. If it is not, select the check-box to enable the account."
-#~ msgstr ""
-#~ "Βεβαιωθείτε ότι είναι ενεργοποιημένη η επιλογή <gui style=\"checkbox"
-#~ "\">Ενεργός</gui>. Αν δεν είναι, σημειώστε την, για να ενεργοποιήσετε το "
-#~ "λογαριασμό."
-
-#~ msgid ""
-#~ "Highlighting text is quirky: <link href=\"http://bugzilla.gnome.org/"
-#~ "show_bug.cgi?id=593733\">#593733</link>. If there's an actual "
-#~ "highlighting going on, independent of the selection (like in yellow or "
-#~ "something), we can use the term \"highlight\". Otherwise we need to use "
-#~ "the term \"select\". Watch that bug."
-#~ msgstr ""
-#~ "Highlighting text is quirky: <link href=\"http://bugzilla.gnome.org/"
-#~ "show_bug.cgi?id=593733\">#593733</link>. If there's an actual "
-#~ "highlighting going on, independent of the selection (like in yellow or "
-#~ "something), we can use the term \"highlight\". Otherwise we need to use "
-#~ "the term \"select\". Watch that bug."
-
-#~ msgid "Select the <gui>Search</gui> tab."
-#~ msgstr "Επιλέξτε την καρτέλα <gui>Αναζήτηση</gui>."
-
-#~ msgid ""
-#~ "In the <gui>For</gui> field, type the text you want to search for. Click "
-#~ "<gui>Find</gui> or press <key>Enter</key>."
-#~ msgstr ""
-#~ "Στο πεδίο <gui>Για</gui>, εισάγετε το κείμενο το οποίο θέλετε να βρείτε, "
-#~ "και πατήστε <gui>Αναζήτηση</gui> ή <key>Enter</key>."
-
-#~ msgid ""
-#~ "Click on a conversation to view it. <app>Empathy</app> will select the "
-#~ "text in the conversation that matched your search terms."
-#~ msgstr ""
-#~ "Κάνετε κλικ σε μια συζήτηση για να την εμφανίσετε. Το <app>Empathy</app> "
-#~ "θα επιλέξει το κείμενο της συζήτησης που αντιστοιχεί στους όρους της "
-#~ "αναζήτησής σας."
-
-#~ msgid "Select the <gui>Conversations</gui> tab."
-#~ msgstr "Επιλέξτε την καρτέλα <gui>Συζητήσεις</gui>."
-
-#~ msgid ""
-#~ "@@image: 'figures/empathy-logo.png'; md5=14568248b11d2cfe7992c5edd7e157e8"
-#~ msgstr ""
-#~ "@@image: 'figures/empathy-logo.png'; md5=14568248b11d2cfe7992c5edd7e157e8"
-
-#~ msgid "peter.haslam@freenet.de"
-#~ msgstr "peter.haslam@freenet.de"
-
-#~ msgid ""
-#~ "Deselect <gui style=\"checkbox\">Enabled</gui> on the right side of the "
-#~ "window."
-#~ msgstr ""
-#~ "Αποεπιλέξτε το <gui style=\"checkbox\">Ενεργός</gui> στη δεξιά πλευρά του "
-#~ "παραθύρου."
-
-#~ msgid ""
-#~ "There are a number of popular free SIP account providers; one popular "
-#~ "provider is <link href=\"https://signup.sipphone.com/new-users/app?"
-#~ "class=NewUser;proc=start\">Sipphone</link>."
-#~ msgstr ""
-#~ "Υπάρχουν αρκετοί δημοφιλείς πάροχοι δωρεάν λογαριασμών SIP· ένας είναι το "
-#~ "<link href=\"https://signup.sipphone.com/new-users/app?class=NewUser;"
-#~ "proc=start\">Sipphone</link>."
-
-#~ msgid "Icon for audio conversation"
-#~ msgstr "Εικονίδιο φωνητικής κλήσης"
-
-#~ msgid "Icon for video conversation"
-#~ msgstr "Εικονίδιο βιντεοκλήσης"
-
-#~ msgid ""
-#~ "I'd like to do tables like this using nothing for No and ✔ for Yes, but "
-#~ "we need to look at the accessibility impact. I've <link href=\"http://"
-#~ "mail.gnome.org/archives/gnome-doc-list/2009-September/msg00006.html"
-#~ "\">asked the accessibility team</link> for input."
-#~ msgstr ""
-#~ "I'd like to do tables like this using nothing for No and ✔ for Yes, but "
-#~ "we need to look at the accessibility impact. I've <link href=\"http://"
-#~ "mail.gnome.org/archives/gnome-doc-list/2009-September/msg00006.html"
-#~ "\">asked the accessibility team</link> for input."
-
-#~ msgid ""
-#~ "There's recent work on telepathy-butterfly and papyon to support audio "
-#~ "and video for MSN. It might be released in time for 2.28, but since it "
-#~ "doesn't follow the Gnome release schedule, I can't be sure. If it looks "
-#~ "like it's going to ship, let's mark it Yes."
-#~ msgstr ""
-#~ "Αυτή την περίοδο, στα έργα telepathy-butterfly και papyon γίνεται "
-#~ "προσπάθεια για την προσθήκη υποστήριξης ήχου και βίντεο στο MSN. Η "
-#~ "υποστήριξη μπορεί να είναι διαθέσιμη για την έκδοση 2.28, αλλά επειδή οι "
-#~ "εκδόσεις αυτών των έργων δε συμπίπτουν με τις εκδόσεις του GNOME, δεν "
-#~ "μπορούν να γίνουν ασφαλείς προβλέψεις."
-
-#~ msgid "Click <gui style=\"button\">Log in</gui>."
-#~ msgstr "Πατήστε <gui style=\"button\">Σύνδεση</gui>."
-
-#~ msgid "Resource"
-#~ msgstr "Πόρος"
-
-#~ msgid "Priority"
-#~ msgstr "Προτεραιότητα"
-
-#~ msgid "Network"
-#~ msgstr "Δίκτυο"
-
-#~ msgid "Nickname"
-#~ msgstr "Ψευδώνυμο"
-
-#~ msgid "Password"
-#~ msgstr "Συνθηματικό"
-
-#~ msgid "Quit message"
-#~ msgstr "Μήνυμα εξόδου"
-
-#~ msgid "Charset"
-#~ msgstr "Κωδικοποίηση"
-
-#~ msgid "Servers"
-#~ msgstr "Εξυπηρετητές"
-
-#~ msgid ""
-#~ "From the <gui>Contact List</gui> window, click the <media type=\"image\" "
-#~ "mime=\"image/png\" src=\"figures/audio-input-microphone.png\">audio call</"
-#~ "media> icon next to the name of the contact you wish to call and choose "
-#~ "<gui style=\"menuitem\">Audio Call</gui>. Alternatively, right click the "
-#~ "contact and choose <gui style=\"menuitem\">Audio Call</gui>."
-#~ msgstr ""
-#~ "Στο παράθυρο <gui>Λίστα επαφών</gui>, πατήστε το εικονίδιο <media type="
-#~ "\"image\" mime=\"image/png\" src=\"figures/audio-input-microphone.png"
-#~ "\">φωνητική κλήση</media> δίπλα από το όνομα της επαφής που επιθυμείτε να "
-#~ "καλέσετε, και επιλέξτε <gui style=\"menuitem\">Φωνητική κλήση</gui>. "
-#~ "Εναλλακτικά, κάνετε δεξί κλικ στο όνομα της επαφής και επιλέξτε <gui "
-#~ "style=\"menuitem\">Φωνητική κλήση</gui>."
-
-#~ msgid ""
-#~ "Click on the trash icon next to the account name to remove the account."
-#~ msgstr ""
-#~ "Κάνετε κλικ στο εικονίδιο των απορριμμάτων δίπλα στο όνομα του "
-#~ "λογαριασμού για να διαγράψετε το λογαριασμό."
-
-#~ msgid "To join such a room, if you know the password:"
-#~ msgstr ""
-#~ "Για να συνδεθείτε σε ένα τέτοιο δωμάτιο, αν γνωρίζετε το συνθηματικό:"
-
-#~ msgid ""
-#~ "As a special exception, the copyright holders give you permission to "
-#~ "copy, modify, and distribute the example code contained in this document "
-#~ "under the terms of your choosing, without restriction."
-#~ msgstr ""
-#~ "Ως ειδική εξαίρεση, οι κάτοχοι των δικαιωμάτων πνευματικής ιδιοκτησίας "
-#~ "σας χορηγούν άδεια αντιγραφής, τροποποίησης και διανομής των "
-#~ "παραδειγμάτων κώδικα που περιέχονται στο έγγραφο, υπό τους όρους που "
-#~ "εσείς επιθυμείτε, χωρίς περιορισμό."
-
-#~ msgid "Hidden"
-#~ msgstr "Αόρατος/η"
diff --git a/help/el/figures/empathy-main-window.png b/help/el/figures/empathy-main-window.png
deleted file mode 100644
index 39a0bf86..00000000
--- a/help/el/figures/empathy-main-window.png
+++ /dev/null
Binary files differ
diff --git a/help/el/figures/empathy-new-account.png b/help/el/figures/empathy-new-account.png
deleted file mode 100644
index 20d02ef1..00000000
--- a/help/el/figures/empathy-new-account.png
+++ /dev/null
Binary files differ
diff --git a/help/en_GB/en_GB.po b/help/en_GB/en_GB.po
deleted file mode 100644
index e7c28df6..00000000
--- a/help/en_GB/en_GB.po
+++ /dev/null
@@ -1,1361 +0,0 @@
-# Copyright (C) 2009 THE PACKAGE'S COPYRIGHT HOLDER
-# This file is distributed under the same licence as the empathy package.
-#
-# Philip Withnall <philip@tecnocode.co.uk>, 2009.
-msgid ""
-msgstr ""
-"Project-Id-Version: empathy\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-04-16 20:27+0000\n"
-"PO-Revision-Date: 2009-03-10 00:10+0000\n"
-"Last-Translator: Philip Withnall <philip@tecnocode.co.uk>\n"
-"Language-Team: British English <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"
-
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/empathy.xml:237(None)
-msgid ""
-"@@image: 'figures/empathy-main-window.png'; "
-"md5=38259a866f38ff1f754828e46d2b0e5c"
-msgstr ""
-"@@image: 'figures/empathy-main-window.png'; "
-"md5=38259a866f38ff1f754828e46d2b0e5c"
-
-#: C/empathy.xml:27(title)
-msgid "<application>Empathy</application> Manual V2.1"
-msgstr "<application>Empathy</application> Manual V2.1"
-
-#: C/empathy.xml:30(year)
-msgid "2008, 2009"
-msgstr "2008, 2009"
-
-#: C/empathy.xml:31(holder) C/empathy.xml:37(publishername)
-#: C/empathy.xml:48(orgname) C/empathy.xml:56(orgname) C/empathy.xml:87(para)
-#: C/empathy.xml:101(para)
-msgid "Ubuntu Documentation Project"
-msgstr "Ubuntu Documentation Project"
-
-#: 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 ""
-"Permission is granted to copy, distribute and/or modify this document under "
-"the terms of the GNU Free Documentation Licence (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."
-
-#: 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 ""
-"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 licence to the manual, as described in "
-"section 6 of the licence."
-
-#: 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 ""
-"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."
-
-#: 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 ""
-"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 LICENCE. NO USE OF ANY DOCUMENT OR MODIFIED VERSION "
-"OF THE DOCUMENT IS AUTHORISED HEREUNDER EXCEPT UNDER THIS DISCLAIMER; AND"
-
-#: 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 ""
-"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."
-
-#: 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 ""
-"DOCUMENT AND MODIFIED VERSIONS OF THE DOCUMENT ARE PROVIDED UNDER THE TERMS "
-"OF THE GNU FREE DOCUMENTATION LICENCE WITH THE FURTHER UNDERSTANDING THAT: "
-"<placeholder-1/>"
-
-#: C/empathy.xml:45(firstname)
-msgid "Milo"
-msgstr "Milo"
-
-#: C/empathy.xml:46(surname)
-msgid "Casagrande"
-msgstr "Casagrande"
-
-#: C/empathy.xml:49(email)
-msgid "milo@ubuntu.com"
-msgstr "milo@ubuntu.com"
-
-#: C/empathy.xml:53(firstname)
-msgid "Seth"
-msgstr "Seth"
-
-#: C/empathy.xml:54(surname)
-msgid "Dudenhofer"
-msgstr "Dudenhofer"
-
-#: C/empathy.xml:57(email)
-msgid "sdudenhofer@gmail.com"
-msgstr "sdudenhofer@gmail.com"
-
-#: C/empathy.xml:81(revnumber)
-msgid "Empathy Manual V2.1"
-msgstr "Empathy Manual V2.1"
-
-#: C/empathy.xml:82(date)
-msgid "January 2009"
-msgstr "January 2009"
-
-#: C/empathy.xml:84(para) C/empathy.xml:95(para)
-msgid "Milo Casagrande <email>milo@ubuntu.com</email>"
-msgstr "Milo Casagrande <email>milo@ubuntu.com</email>"
-
-#: C/empathy.xml:92(revnumber)
-msgid "Empathy Manual V2.0"
-msgstr "Empathy Manual V2.0"
-
-#: C/empathy.xml:93(date)
-msgid "April 2008"
-msgstr "April 2008"
-
-#: C/empathy.xml:98(para)
-msgid "Seth Dudenhofer <email>sdudenhofer@gmail.com</email>"
-msgstr "Seth Dudenhofer <email>sdudenhofer@gmail.com</email>"
-
-#: C/empathy.xml:106(releaseinfo)
-msgid "This manual describes version 2.26 of Empathy."
-msgstr "This manual describes version 2.26 of Empathy."
-
-#: C/empathy.xml:110(title)
-msgid "Feedback"
-msgstr "Feedback"
-
-#: C/empathy.xml:111(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:user-guide?feedback\" type=\"help\">GNOME Feedback Page</ulink>."
-msgstr ""
-"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:user-guide?feedback\" type=\"help\">GNOME Feedback Page</ulink>."
-
-#: C/empathy.xml:118(para)
-msgid "Empathy is an application for instant messaging."
-msgstr "Empathy is an application for instant messaging."
-
-#: C/empathy.xml:126(primary) C/empathy.xml:0(application)
-msgid "Empathy"
-msgstr "Empathy"
-
-#: C/empathy.xml:129(primary)
-msgid "empathy"
-msgstr "empathy"
-
-#: C/empathy.xml:130(secondary)
-msgid "istant messaging"
-msgstr "instant messaging"
-
-#: C/empathy.xml:134(title)
-msgid "Introduction"
-msgstr "Introduction"
-
-#: C/empathy.xml:135(para)
-msgid ""
-"<application>Empathy</application> is a multi-protocol instant messaging "
-"program for the GNOME Desktop. With <application>Empathy</application> you "
-"can keep in touch with all of your friends through lots of supported instant "
-"messaging services."
-msgstr ""
-"<application>Empathy</application> is a multi-protocol instant messaging "
-"program for the GNOME Desktop. With <application>Empathy</application> you "
-"can keep in touch with all of your friends through lots of supported instant "
-"messaging services."
-
-#: C/empathy.xml:145(acronym)
-msgid "AIM"
-msgstr "AIM"
-
-#: C/empathy.xml:149(para)
-msgid "Google Talk"
-msgstr "Google Talk"
-
-#: C/empathy.xml:154(para) C/empathy.xml:1089(title)
-msgid "ICQ"
-msgstr "ICQ"
-
-#: C/empathy.xml:160(acronym)
-msgid "IRC"
-msgstr "IRC"
-
-#: C/empathy.xml:164(para)
-msgid "Jabber (or <acronym>XMPP</acronym>)"
-msgstr "Jabber (or <acronym>XMPP</acronym>)"
-
-#: C/empathy.xml:170(acronym)
-msgid "MSN"
-msgstr "MSN"
-
-#: C/empathy.xml:174(para) C/empathy.xml:441(para) C/empathy.xml:1049(title)
-msgid "Salut"
-msgstr "Salut"
-
-#: C/empathy.xml:180(acronym)
-msgid "SIP"
-msgstr "SIP"
-
-#: C/empathy.xml:184(para) C/empathy.xml:919(title)
-msgid "Yahoo"
-msgstr "Yahoo"
-
-#: C/empathy.xml:189(para)
-msgid "And many others..."
-msgstr "And many others…"
-
-#: C/empathy.xml:140(para)
-msgid ""
-"<application>Empathy</application> supports the following services: "
-"<placeholder-1/>"
-msgstr ""
-"<application>Empathy</application> supports the following services: "
-"<placeholder-1/>"
-
-#: C/empathy.xml:198(title)
-msgid "Getting Started"
-msgstr "Getting Started"
-
-#: C/empathy.xml:201(title)
-msgid "Starting Empathy"
-msgstr "Starting Empathy"
-
-#: C/empathy.xml:202(para)
-msgid "You can start <application>Empathy</application> in the following ways:"
-msgstr ""
-"You can start <application>Empathy</application> in the following ways:"
-
-#: C/empathy.xml:206(term)
-msgid "<guimenu>Applications</guimenu> menu"
-msgstr "<guimenu>Applications</guimenu> menu"
-
-#: C/empathy.xml:208(para)
-msgid ""
-"Choose <menuchoice><guisubmenu>Internet</guisubmenu><guimenuitem>Empathy "
-"Instant Messenger</guimenuitem></menuchoice>."
-msgstr ""
-"Choose <menuchoice><guisubmenu>Internet</guisubmenu><guimenuitem>Empathy "
-"Instant Messenger</guimenuitem></menuchoice>."
-
-#: C/empathy.xml:217(term)
-msgid "Command line"
-msgstr "Command line"
-
-#: C/empathy.xml:219(para)
-msgid "Type <command>empathy</command> and then press <keycap>Enter</keycap>."
-msgstr "Type <command>empathy</command> and then press <keycap>Enter</keycap>."
-
-#: C/empathy.xml:228(title)
-msgid "When You Start Empathy"
-msgstr "When You Start Empathy"
-
-#: C/empathy.xml:233(title)
-msgid "<application>Empathy</application> Main Window"
-msgstr "<application>Empathy</application> Main Window"
-
-#: C/empathy.xml:240(phrase)
-msgid ""
-"Shows <placeholder-1/> main window. Contains the titlebar, the menubar, "
-"contact list, status icon and status arrow button list."
-msgstr ""
-"Shows the <placeholder-1/> main window. Contains the titlebar, the menubar, "
-"contact list, status icon and status arrow button list."
-
-#: C/empathy.xml:229(para)
-msgid ""
-"When you start <application>Empathy</application> the following window is "
-"shown. <placeholder-1/>"
-msgstr ""
-"When you start <application>Empathy</application> the following window is "
-"shown. <placeholder-1/>"
-
-#: C/empathy.xml:255(title)
-msgid "<application>Empathy</application> Main Components"
-msgstr "<application>Empathy</application> Main Components"
-
-#: C/empathy.xml:262(para)
-msgid "Component"
-msgstr "Component"
-
-#: C/empathy.xml:265(para)
-msgid "Description"
-msgstr "Description"
-
-#: C/empathy.xml:272(para)
-msgid "Menubar"
-msgstr "Menubar"
-
-#: C/empathy.xml:275(para)
-msgid ""
-"Contains menus used to perform actions in <application>Empathy</application>."
-msgstr ""
-"Contains menus used to perform actions in <application>Empathy</application>."
-
-#: C/empathy.xml:282(para)
-msgid "Status Drop-Down List"
-msgstr "Status Drop-Down List"
-
-#: C/empathy.xml:285(para)
-msgid "Allows to update the status."
-msgstr "Allows you to update your status."
-
-#: C/empathy.xml:292(para)
-msgid "Account Button"
-msgstr "Account Button"
-
-#: C/empathy.xml:295(para)
-msgid "Opens the <guilabel>Accounts</guilabel> dialog."
-msgstr "Opens the <guilabel>Accounts</guilabel> dialogue."
-
-#: C/empathy.xml:302(para)
-msgid "Contact List"
-msgstr "Contact List"
-
-#: C/empathy.xml:305(para)
-msgid "Shows all the available contacts and their associated status."
-msgstr "Shows all the available contacts and their associated status."
-
-#: C/empathy.xml:251(para)
-msgid ""
-"<xref linkend=\"empathy-TBL-1\"/> describes the components of "
-"<application>Empathy</application>'s main 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 ""
-"<xref linkend=\"empathy-TBL-1\"/> describes the components of "
-"<application>Empathy</application>'s main 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>"
-
-#: C/empathy.xml:319(title)
-msgid "Accounts"
-msgstr "Accounts"
-
-#: C/empathy.xml:320(para)
-msgid ""
-"To use <application>Empathy</application> you need at least one account of "
-"the supported services."
-msgstr ""
-"To use <application>Empathy</application> you need at least one account on "
-"the supported services."
-
-#: C/empathy.xml:323(para)
-msgid ""
-"If you don't already have an account and you don't have your <emphasis>user "
-"name</emphasis> and <emphasis>password</emphasis>, you need to register a "
-"new account (see <xref linkend=\"empathy-register-account\"/>)."
-msgstr ""
-"If you don't already have an account and you don't have your "
-"<emphasis>username</emphasis> and <emphasis>password</emphasis>, you need to "
-"register a new account (see <xref linkend=\"empathy-register-account\"/>)."
-
-#: C/empathy.xml:328(para)
-msgid ""
-"In order to talk with other users, also called <emphasis>contacts</"
-"emphasis>, you need to use the same service they are using. If, for example, "
-"one contact is using the <emphasis role=\"strong\">Jabber</emphasis> "
-"service, you need to have an account registered with that service."
-msgstr ""
-"In order to talk with other users, also called <emphasis>contacts</"
-"emphasis>, you need to use the same service they are using. If, for example, "
-"one contact is using the <emphasis role=\"strong\">Jabber</emphasis> "
-"service, you need to have an account registered with that service."
-
-#: C/empathy.xml:335(para)
-msgid ""
-"<application>Empathy</application> can handle as many accounts on any "
-"supported services as you want and you can have them all open at the same "
-"time."
-msgstr ""
-"<application>Empathy</application> can handle as many accounts on any "
-"supported services as you want and you can have them all open at the same "
-"time."
-
-#: C/empathy.xml:341(title)
-msgid "Registering an Account"
-msgstr "Registering an Account"
-
-#: C/empathy.xml:342(para)
-msgid ""
-"You can freely register an account on any of the following services. Follow "
-"the instructions reported on each website on how to register your new "
-"account. At the end of the registration process you should have a "
-"<emphasis>user name</emphasis> (or an <emphasis>account ID</emphasis>) and a "
-"<emphasis>password</emphasis> that you will use to create the account in "
-"<application>Empathy</application>."
-msgstr ""
-"You can freely register an account on any of the following services. Follow "
-"the instructions reported on each website on how to register your new "
-"account. At the end of the registration process you should have a "
-"<emphasis>username</emphasis> (or an <emphasis>account ID</emphasis>) and a "
-"<emphasis>password</emphasis> that you will use to create the account in "
-"<application>Empathy</application>."
-
-#. Translators: try to find a localized version of the
-#. registration service website
-#: C/empathy.xml:360(para)
-msgid ""
-"The <ulink type=\"http\" url=\"http://dashboard.aim.com/aim\">AIM</ulink> "
-"service."
-msgstr ""
-"The <ulink type=\"http\" url=\"http://dashboard.aim.com/aim\">AIM</ulink> "
-"service."
-
-#. Translators: try to find a localized version of the
-#. registration service website
-#: C/empathy.xml:367(para)
-msgid ""
-"The <ulink type=\"http\" url=\"http://www.google.com/talk/\">Google Talk</"
-"ulink> service."
-msgstr ""
-"The <ulink type=\"http\" url=\"http://www.google.com/talk/\">Google Talk</"
-"ulink> service."
-
-#. Translators: try to find a localized version of the
-#. registration service website
-#: C/empathy.xml:375(para)
-msgid ""
-"The <ulink type=\"http\" url=\"https://www.icq.com/register/\">ICQ</ulink> "
-"service."
-msgstr ""
-"The <ulink type=\"http\" url=\"https://www.icq.com/register/\">ICQ</ulink> "
-"service."
-
-#. Translators: try to find a localized version of the
-#. registration service website
-#: C/empathy.xml:382(para)
-msgid ""
-"The <ulink type=\"http\" url=\"https://accountservices.passport.net\">MSN</"
-"ulink> service."
-msgstr ""
-"The <ulink type=\"http\" url=\"https://accountservices.passport.net\">MSN</"
-"ulink> service."
-
-#. Translators: try to find a localized version of the
-#. registration service website
-#: C/empathy.xml:389(para)
-msgid ""
-"The <ulink type=\"http\" url=\"https://login.yahoo.com/config/login\">Yahoo</"
-"ulink> service."
-msgstr ""
-"The <ulink type=\"http\" url=\"https://login.yahoo.com/config/login\">Yahoo</"
-"ulink> service."
-
-#: C/empathy.xml:351(para)
-msgid "Click on the name of the service to visit its website: <placeholder-1/>"
-msgstr ""
-"Click on the name of the service to visit its website: <placeholder-1/>"
-
-#: C/empathy.xml:395(para)
-msgid ""
-"For registering a <acronym>SIP</acronym> account, you can use one of the "
-"following service:"
-msgstr ""
-"For registering a <acronym>SIP</acronym> account, you can use one of the "
-"following services:"
-
-#. Translators: try to find a localized version of the
-#. registration service website
-#: C/empathy.xml:404(para)
-msgid ""
-"The <ulink type=\"http\" url=\"https://www.ekiga.net/index.php?page=register"
-"\">Ekiga</ulink> service."
-msgstr ""
-"The <ulink type=\"http\" url=\"https://www.ekiga.net/index.php?page=register"
-"\">Ekiga</ulink> service."
-
-#. Translators: try to find a localized version of the
-#. registration service website
-#: C/empathy.xml:411(para)
-msgid ""
-"The <ulink type=\"http\" url=\"http://account2.freeworlddialup.com/index.php?"
-"section_id=94\"><acronym>FWD</acronym></ulink> (Free World Dialup) service."
-msgstr ""
-"The <ulink type=\"http\" url=\"http://account2.freeworlddialup.com/index.php?"
-"section_id=94\"><acronym>FWD</acronym></ulink> (Free World Dialup) service."
-
-#. Translators: try to find a localized version of the
-#. registration service website
-#: C/empathy.xml:419(para)
-msgid ""
-"The <ulink type=\"http\" url=\"https://signup.sipphone.com/new-users/app?"
-"class=NewUser;proc=start\">Sipphone</ulink> service."
-msgstr ""
-"The <ulink type=\"http\" url=\"https://signup.sipphone.com/new-users/app?"
-"class=NewUser;proc=start\">Sipphone</ulink> service."
-
-#: C/empathy.xml:425(para)
-msgid ""
-"For registering a <emphasis role=\"strong\">Jabber</emphasis> account, you "
-"can use the automatic account creation of <application>Empathy</"
-"application>. Not all Jabber service providers support the automatic "
-"creation of accounts, one service provider known to work with "
-"<application>Empathy</application> is <ulink type=\"http\" url=\"http://www."
-"jabber.org/web/Jabber.org\">jabber.org</ulink>."
-msgstr ""
-"For registering a <emphasis role=\"strong\">Jabber</emphasis> account, you "
-"can use the automatic account creation of <application>Empathy</"
-"application>. Not all Jabber service providers support the automatic "
-"creation of accounts; one service provider known to work with "
-"<application>Empathy</application> is <ulink type=\"http\" url=\"http://www."
-"jabber.org/web/Jabber.org\">jabber.org</ulink>."
-
-#: C/empathy.xml:433(para)
-msgid ""
-"If you already have a <emphasis role=\"strong\">Jabber</emphasis> account, "
-"you can use one of the following services:"
-msgstr ""
-"If you already have a <emphasis role=\"strong\">Jabber</emphasis> account, "
-"you can use one of the following services:"
-
-#: C/empathy.xml:450(title)
-msgid "Adding your Account to <application>Empathy</application>"
-msgstr "Adding your Account to <application>Empathy</application>"
-
-#: C/empathy.xml:455(para) C/empathy.xml:533(para) C/empathy.xml:585(para)
-#: C/empathy.xml:618(para) C/empathy.xml:648(para) C/empathy.xml:671(para)
-msgid ""
-"From the <link linkend=\"empathy-FIG-mainwindow\">main window </link> "
-"(<guilabel>Contact List</guilabel>) click on the account button or press "
-"<keycap>F4</keycap> to open the <guilabel>Accounts</guilabel> dialog."
-msgstr ""
-"From the <link linkend=\"empathy-FIG-mainwindow\">main window </link> "
-"(<guilabel>Contact List</guilabel>) click on the account button or press "
-"<keycap>F4</keycap> to open the <guilabel>Accounts</guilabel> dialogue."
-
-#: C/empathy.xml:467(para) C/empathy.xml:484(para)
-msgid ""
-"From the <guilabel>Type</guilabel> drop-down list choose the service you "
-"wish to add an account for, then click on the <guibutton>Create</guibutton> "
-"button."
-msgstr ""
-"From the <guilabel>Type</guilabel> drop-down list choose the service for "
-"which you wish to add an account, then click on the <guibutton>Create</"
-"guibutton> button."
-
-#: C/empathy.xml:463(para)
-msgid ""
-"If it is the first time you launch <application>Empathy</application>: "
-"<placeholder-1/>"
-msgstr ""
-"If it is the first time you're launching <application>Empathy</application>: "
-"<placeholder-1/>"
-
-#: C/empathy.xml:479(para)
-msgid "Click on the <guilabel>Add</guilabel> button."
-msgstr "Click on the <guilabel>Add</guilabel> button."
-
-#: C/empathy.xml:475(para)
-msgid "Otherwise: <placeholder-1/>"
-msgstr "Otherwise: <placeholder-1/>"
-
-#: C/empathy.xml:494(para)
-msgid ""
-"Fill the required fields with your <emphasis>user name</emphasis> and "
-"<emphasis>password</emphasis>. Optionally, you can modify some advanced "
-"options. For more information, see <xref linkend=\"empathy-advanced-options"
-"\"/>."
-msgstr ""
-"Fill the required fields with your <emphasis>username</emphasis> and "
-"<emphasis>password</emphasis>. Optionally, you can modify some advanced "
-"options. For more information, see <xref linkend=\"empathy-advanced-options"
-"\"/>."
-
-#: C/empathy.xml:503(para) C/empathy.xml:566(para)
-msgid ""
-"To enable the new account, select the <guilabel>Enabled</guilabel> check-box "
-"next to the name of the account in the box on the left."
-msgstr ""
-"To enable the new account, select the <guilabel>Enabled</guilabel> check box "
-"next to the name of the account in the box on the left."
-
-#: C/empathy.xml:451(para)
-msgid ""
-"To add your account to <application>Empathy</application>, proceed as "
-"follows: <placeholder-1/>"
-msgstr ""
-"To add your account to <application>Empathy</application>, proceed as "
-"follows: <placeholder-1/>"
-
-#: C/empathy.xml:513(title)
-msgid "Importing Accounts"
-msgstr "Importing Accounts"
-
-#: C/empathy.xml:514(para)
-msgid ""
-"If you use another instant messaging program, you can import the accounts "
-"from that program into <application>Empathy</application>"
-msgstr ""
-"If you use another instant messaging program, you can import the accounts "
-"from that program into <application>Empathy</application>"
-
-#: C/empathy.xml:520(para)
-msgid ""
-"At the moment <application>Empathy</application> can import the accounts "
-"only from the instant messaging program <application>Pidgin</application>. "
-"For more information about <application>Pidgin</application>, see the <ulink "
-"type=\"http\" url=\"http://www.pidgin.im/\">Pidgin website</ulink>."
-msgstr ""
-"At the moment <application>Empathy</application> can import the accounts "
-"only from the instant messaging program <application>Pidgin</application>. "
-"For more information about <application>Pidgin</application>, see the <ulink "
-"type=\"http\" url=\"http://www.pidgin.im/\">Pidgin website</ulink>."
-
-#: C/empathy.xml:541(para)
-msgid ""
-"Click on the <guibutton>Import Accounts...</guibutton> button to open the "
-"<guilabel>Import Accounts</guilabel> dialog."
-msgstr ""
-"Click on the <guibutton>Import Accounts...</guibutton> button to open the "
-"<guilabel>Import Accounts</guilabel> dialogue."
-
-#: C/empathy.xml:548(para)
-msgid ""
-"Select the accounts you would like to import by clicking on the "
-"<guilabel>Import</guilabel> check-box."
-msgstr ""
-"Select the accounts you would like to import by clicking on the "
-"<guilabel>Import</guilabel> check box."
-
-#: C/empathy.xml:554(para)
-msgid ""
-"When you have selected all the desired accounts, click <guibutton>OK</"
-"guibutton> to import them. If you don't want to import the accounts, click "
-"<guibutton>Cancel</guibutton>."
-msgstr ""
-"When you have selected all the desired accounts, click <guibutton>OK</"
-"guibutton> to import them. If you don't want to import the accounts, click "
-"<guibutton>Cancel</guibutton>."
-
-#: C/empathy.xml:562(para)
-msgid ""
-"When you import a new account into <application>Empathy</application>, it "
-"will not be enabled by default."
-msgstr ""
-"When you import a new account into <application>Empathy</application>, it "
-"will not be enabled by default."
-
-#: C/empathy.xml:529(para)
-msgid ""
-"To import the accounts into <application>Empathy</application>, proceed as "
-"follows: <placeholder-1/>"
-msgstr ""
-"To import the accounts into <application>Empathy</application>, proceed as "
-"follows: <placeholder-1/>"
-
-#: C/empathy.xml:578(title)
-msgid "Editing an Account"
-msgstr "Editing an Account"
-
-#: C/empathy.xml:593(para)
-msgid "Select the account you wish to edit in the box on the left."
-msgstr "Select the account you wish to edit in the box on the left."
-
-#: C/empathy.xml:599(para)
-msgid "Modify the desired data."
-msgstr "Modify the desired data."
-
-#: C/empathy.xml:579(para)
-msgid ""
-"To edit one of your accounts, i.e. to change the <emphasis>password</"
-"emphasis> or your <emphasis>user name</emphasis>, proceed as follows: "
-"<placeholder-1/>"
-msgstr ""
-"To edit one of your accounts, i.e. to change the <emphasis>password</"
-"emphasis> or your <emphasis>username</emphasis>, proceed as follows: "
-"<placeholder-1/>"
-
-#: C/empathy.xml:607(para)
-msgid ""
-"Based on the type of the account, it is possibile to edit different settings."
-msgstr ""
-"Based on the type of the account, it is possibile to edit different settings."
-
-#: C/empathy.xml:626(para)
-msgid ""
-"Select the account you wish to edit in the box on the left and double-click "
-"on its name."
-msgstr ""
-"Select the account you wish to edit in the box on the left and double-click "
-"on its name."
-
-#: C/empathy.xml:632(para)
-msgid "Change the name of the account as you desire."
-msgstr "Change the name of the account as you desire."
-
-#: C/empathy.xml:613(para)
-msgid ""
-"To modify the identifier of an account, how <application>Empathy</"
-"application> identifies an account, proceed as follows: <placeholder-1/>"
-msgstr ""
-"To modify the identifier of an account – how <application>Empathy</"
-"application> identifies an account – proceed as follows: <placeholder-1/>"
-
-#: C/empathy.xml:641(title)
-msgid "Disabling and Removing an Account"
-msgstr "Disabling and Removing an Account"
-
-#: C/empathy.xml:642(para)
-msgid "To disable an account, proceed as follows:"
-msgstr "To disable an account, proceed as follows:"
-
-#: C/empathy.xml:657(para)
-msgid ""
-"Select the account you wish to disable in the box on the left of the dialog "
-"and deselect the <guilabel>Enabled</guilabel> check-box."
-msgstr ""
-"Select the account you wish to disable in the box on the left of the "
-"dialogue and deselect the <guilabel>Enabled</guilabel> check box."
-
-#: C/empathy.xml:665(para)
-msgid "To remove an account, proceed as follows:"
-msgstr "To remove an account, proceed as follows:"
-
-#: C/empathy.xml:680(para)
-msgid ""
-"Select the account you wish to disable in the box on the left of the dialog."
-msgstr ""
-"Select the account you wish to disable in the box on the left of the "
-"dialogue."
-
-#: C/empathy.xml:686(para)
-msgid "Click on the <guibutton>Remove</guibutton> button."
-msgstr "Click on the <guibutton>Remove</guibutton> button."
-
-#: C/empathy.xml:691(para)
-msgid ""
-"A dialog will be shown asking for confirmation. Click on the "
-"<guibutton>Remove</guibutton> button to remove the account."
-msgstr ""
-"A dialogue will be shown asking for confirmation. Click on the "
-"<guibutton>Remove</guibutton> button to remove the account."
-
-#: C/empathy.xml:701(title)
-msgid "Editing Personal Information"
-msgstr "Editing Personal Information"
-
-#: C/empathy.xml:702(para)
-msgid ""
-"To change your personal information, your alias and your icon (the image "
-"that other contacts will see of you), for each of your accounts, proceed as "
-"follows:"
-msgstr ""
-"To change your personal information, your alias and your icon (the image "
-"that other contacts will see of you), for each of your accounts, proceed as "
-"follows:"
-
-#: C/empathy.xml:710(para)
-msgid ""
-"From the <link linkend=\"empathy-FIG-mainwindow\">main window</link>, select "
-"<menuchoice><guimenu>Edit</guimenu><guimenuitem>Personal Information</"
-"guimenuitem></menuchoice>."
-msgstr ""
-"From the <link linkend=\"empathy-FIG-mainwindow\">main window</link>, select "
-"<menuchoice><guimenu>Edit</guimenu><guimenuitem>Personal Information</"
-"guimenuitem></menuchoice>."
-
-#: C/empathy.xml:719(para)
-msgid ""
-"From the <guilabel>Account</guilabel> drop-down list, choose the account you "
-"want to edit."
-msgstr ""
-"From the <guilabel>Account</guilabel> drop-down list, choose the account you "
-"want to edit."
-
-#: C/empathy.xml:725(para)
-msgid "In the <guilabel>Alias</guilabel> text box, write your new alias."
-msgstr "In the <guilabel>Alias</guilabel> text box, write your new alias."
-
-#: C/empathy.xml:731(para)
-msgid ""
-"To change your icon, click on the person-looking button and choose an image "
-"file."
-msgstr ""
-"To change your icon, click on the person button and choose an image file."
-
-#: C/empathy.xml:737(para) C/empathy.xml:1318(para) C/empathy.xml:1352(para)
-msgid "When done, click <guibutton>Close</guibutton>."
-msgstr "When done, click <guibutton>Close</guibutton>."
-
-#: C/empathy.xml:745(para)
-msgid ""
-"An <emphasis>alias</emphasis> is an alternative way you can identify "
-"yourself. You can use your real name or a nickname."
-msgstr ""
-"An <emphasis>alias</emphasis> is an alternative way you can identify "
-"yourself. You can use your real name or a nickname."
-
-#: C/empathy.xml:755(title)
-msgid "Advanced Options"
-msgstr "Advanced Options"
-
-#: C/empathy.xml:756(para)
-msgid ""
-"Based on the service you are using, it is possible to configure more "
-"advanced options to modify the normal behavior of <application>Empathy</"
-"application>."
-msgstr ""
-"Based on the service you are using, it is possible to configure more "
-"advanced options to modify the normal behavior of <application>Empathy</"
-"application>."
-
-#: C/empathy.xml:761(para)
-msgid ""
-"To configure these options, when you are <link linkend=\"empathy-create-"
-"account\">adding a new account</link>, click on the drop-down section "
-"<guilabel>Advanced</guilabel>."
-msgstr ""
-"To configure these options, when you are <link linkend=\"empathy-create-"
-"account\">adding a new account</link>, click on the drop-down section "
-"<guilabel>Advanced</guilabel>."
-
-#: C/empathy.xml:769(title)
-msgid "Jabber (or <acronym>XMPP</acronym>) and Google Talk"
-msgstr "Jabber (or <acronym>XMPP</acronym>) and Google Talk"
-
-#: C/empathy.xml:776(guilabel)
-msgid "Encryption required (TLS/SSL)"
-msgstr "Encryption required (TLS/SSL)"
-
-#: C/empathy.xml:779(para)
-msgid ""
-"Select this option in order to use some sort of encryption during your "
-"conversations."
-msgstr ""
-"Select this option in order to use some sort of encryption during your "
-"conversations."
-
-#: C/empathy.xml:787(guilabel)
-msgid "Ignore SSL certificate errors"
-msgstr "Ignore SSL certificate errors"
-
-#: C/empathy.xml:790(para)
-msgid ""
-"Select this option in order to ignore the errors that can be generated by "
-"some types of security certificates. Usually these certificates are called "
-"auto-signed."
-msgstr ""
-"Select this option in order to ignore the errors that can be generated by "
-"some types of security certificates. Usually these certificates are called "
-"auto-signed."
-
-#: C/empathy.xml:798(para)
-msgid ""
-"Select this option only if you are sure the certificate is secure and you "
-"can trust it."
-msgstr ""
-"Select this option only if you are sure the certificate is secure and you "
-"can trust it."
-
-#: C/empathy.xml:808(guilabel)
-msgid "Resource"
-msgstr "Resource"
-
-#: C/empathy.xml:811(para)
-msgid ""
-"Use this text box to set a name with which you can identify the running "
-"program based on where you are running it. With this option, and the "
-"<guilabel>Priority</guilabel> one, you can use your account simultaneously "
-"in two different devices. For example, if you set one device to "
-"<replaceable>desktop</replaceable> and the other one to <replaceable>mobile</"
-"replaceable>, you can connect with both of them and based on the "
-"<guilabel>Priority</guilabel> value you will receive messages on one of the "
-"two devices or both."
-msgstr ""
-"Use this text box to set a name with which you can identify the running "
-"program based on where you are running it. With this option, and the "
-"<guilabel>Priority</guilabel> one, you can use your account simultaneously "
-"on two different devices. For example, if you set one device to "
-"<replaceable>desktop</replaceable> and the other one to <replaceable>mobile</"
-"replaceable>, you can connect with both of them and, based on the "
-"<guilabel>Priority</guilabel> value, you will receive messages on one of the "
-"two devices or both."
-
-#: C/empathy.xml:824(para)
-msgid ""
-"This can be useful if you have two devices, a main one and a portable one, "
-"and you move away from the main one bringing with you the other: you can "
-"still receive messages from your account with the portable device even if "
-"you do not disconnet from the main one."
-msgstr ""
-"This can be useful if you have two devices, a main one and a portable one, "
-"and you move away from the main one bringing with you the other: you can "
-"still receive messages from your account with the portable device even if "
-"you do not disconnect from the main one."
-
-#: C/empathy.xml:833(para)
-msgid ""
-"If you set the same value for this text box on both the devices, when you "
-"connect with one of them, the other one will be disconnected, even if you "
-"set a different value with the <guilabel>Priority</guilabel> spin box."
-msgstr ""
-"If you set the same value for this text box on both the devices, when you "
-"connect with one of them, the other one will be disconnected, even if you "
-"set a different value with the <guilabel>Priority</guilabel> spin box."
-
-#: C/empathy.xml:846(guilabel)
-msgid "Priority"
-msgstr "Priority"
-
-#: C/empathy.xml:849(para)
-msgid ""
-"Use this spin box to indicate wich device, set in the <guilabel>Resource</"
-"guilabel> text box, will receive the new messages. The higher the number, "
-"the higher the priority: you will receive the new messages on the device "
-"with the highest number."
-msgstr ""
-"Use this spin box to indicate which device, set in the <guilabel>Resource</"
-"guilabel> text box, will receive the new messages. The higher the number, "
-"the higher the priority: you will receive the new messages on the device "
-"with the highest number."
-
-#: C/empathy.xml:856(para)
-msgid ""
-"You can set values in the range from <literal>-128</literal> to "
-"<literal>127</literal>."
-msgstr ""
-"You can set values in the range from <literal>-128</literal> to "
-"<literal>127</literal>."
-
-#: C/empathy.xml:862(para)
-msgid ""
-"If you set the same value of this spin box in both the devices, you will "
-"receive messages on both of them."
-msgstr ""
-"If you set the same value of this spin box in both the devices, you will "
-"receive messages on both of them."
-
-#: C/empathy.xml:879(guilabel) C/empathy.xml:972(guilabel)
-#: C/empathy.xml:1020(guilabel) C/empathy.xml:1114(guilabel)
-msgid "Server"
-msgstr "Server"
-
-#: C/empathy.xml:882(para) C/empathy.xml:975(para) C/empathy.xml:1023(para)
-#: C/empathy.xml:1117(para)
-msgid ""
-"Use this text box to write the name of the server you want to use for this "
-"service."
-msgstr ""
-"Use this text box to write the name of the server you want to use for this "
-"service."
-
-#: C/empathy.xml:890(guilabel) C/empathy.xml:983(guilabel)
-#: C/empathy.xml:1031(guilabel) C/empathy.xml:1125(guilabel)
-msgid "Port"
-msgstr "Port"
-
-#: C/empathy.xml:893(para) C/empathy.xml:986(para) C/empathy.xml:1034(para)
-#: C/empathy.xml:1128(para)
-msgid "Use this spin box to set the number of the port of the server to use."
-msgstr "Use this spin box to set the number of the port of the server to use."
-
-#: C/empathy.xml:897(para) C/empathy.xml:990(para) C/empathy.xml:1038(para)
-#: C/empathy.xml:1132(para)
-msgid ""
-"You can set values in the range from <literal>0</literal> to "
-"<literal>65,555</literal>."
-msgstr ""
-"You can set values in the range from <literal>0</literal> to "
-"<literal>65,555</literal>."
-
-#: C/empathy.xml:905(guilabel)
-msgid "Use old SSL"
-msgstr "Use old SSL"
-
-#: C/empathy.xml:908(para)
-msgid ""
-"Select this option to use the old version of the secure protocol for "
-"encrypting your connection."
-msgstr ""
-"Select this option to use the old version of the secure protocol for "
-"encrypting your connection."
-
-#: C/empathy.xml:873(para)
-msgid ""
-"In the <guilabel>Override server settings</guilabel> section you can set "
-"options that take precedence over the default settings. <placeholder-1/>"
-msgstr ""
-"In the <guilabel>Override server settings</guilabel> section you can set "
-"options that take precedence over the default settings. <placeholder-1/>"
-
-#: C/empathy.xml:924(guilabel)
-msgid "Ignore conference and chatrooms invitations"
-msgstr "Ignore conference and chatrooms invitations"
-
-#: C/empathy.xml:928(para)
-msgid ""
-"Select this option to ignore the invitations that other people may send you."
-msgstr ""
-"Select this option to ignore the invitations that other people may send you."
-
-#: C/empathy.xml:936(guilabel)
-msgid "Room List locale"
-msgstr "Room List locale"
-
-#: C/empathy.xml:939(para)
-msgid ""
-"The value of this text box identifies the language used to retrieve the room "
-"list when connecting to the Yahoo service."
-msgstr ""
-"The value of this text box identifies the language used to retrieve the room "
-"list when connecting to the Yahoo! service."
-
-#: C/empathy.xml:944(para)
-msgid ""
-"If you need to change this value, use the two letter code of your language."
-msgstr ""
-"If you need to change this value, use the two letter code of your language."
-
-#: C/empathy.xml:952(guilabel) C/empathy.xml:1094(guilabel)
-msgid "Charset"
-msgstr "Charset"
-
-#: C/empathy.xml:955(para) C/empathy.xml:1097(para)
-msgid ""
-"The value of this text box identifies the set of the characters used by "
-"<application>Empathy</application>."
-msgstr ""
-"The value of this text box identifies the set of the characters used by "
-"<application>Empathy</application>."
-
-#: C/empathy.xml:961(para) C/empathy.xml:1103(para)
-msgid ""
-"It is advise to leave this value to <literal>UTF-8</literal>. Change it only "
-"if that charset does not cover your language."
-msgstr ""
-"It is advised to leave this value as <literal>UTF-8</literal>. Change it "
-"only if that charset does not cover your language."
-
-#: C/empathy.xml:998(guilabel)
-msgid "Use Yahoo Japan"
-msgstr "Use Yahoo! Japan"
-
-#: C/empathy.xml:1001(para)
-msgid ""
-"Select this option only if you have a Yahoo! Japan account. With the Yahoo! "
-"Japan service you can only use a Yahoo! Japan account: if you have "
-"registered an account with the English version of the service, that account "
-"will not work."
-msgstr ""
-"Select this option only if you have a Yahoo! Japan account. With the Yahoo! "
-"Japan service you can only use a Yahoo! Japan account: if you have "
-"registered an account with the English version of the service, that account "
-"will not work."
-
-#: C/empathy.xml:1015(title)
-msgid "<acronym>AIM</acronym>, GroupWise and <acronym>MSN</acronym>"
-msgstr "<acronym>AIM</acronym>, GroupWise and <acronym>MSN</acronym>"
-
-#: C/empathy.xml:1054(guilabel)
-msgid "Published Name"
-msgstr "Published Name"
-
-#: C/empathy.xml:1057(para)
-msgid ""
-"Use this text box to write the name that will be visible to the other users "
-"of the network."
-msgstr ""
-"Use this text box to write the name that will be visible to the other users "
-"of the network."
-
-#: C/empathy.xml:1065(guilabel)
-msgid "Email"
-msgstr "E-mail"
-
-#: C/empathy.xml:1068(para)
-msgid "Use this text box to write your email."
-msgstr "Use this text box to write your e-mail address."
-
-#: C/empathy.xml:1075(guilabel)
-msgid "Jabber ID"
-msgstr "Jabber ID"
-
-#: C/empathy.xml:1078(para)
-msgid "Use this text box to write your Jabber ID, if you have one."
-msgstr "Use this text box to write your Jabber ID, if you have one."
-
-#: C/empathy.xml:1143(title)
-msgid "Gadu Gadu"
-msgstr "Gadu Gadu"
-
-#: C/empathy.xml:1147(guilabel)
-msgid "Nick"
-msgstr "Nick"
-
-#: C/empathy.xml:1149(para)
-msgid ""
-"Use this text box to write an alternative name to use with this service."
-msgstr ""
-"Use this text box to write an alternative name to use with this service."
-
-#: C/empathy.xml:1164(title)
-msgid "Contacts and Groups"
-msgstr "Contacts and Groups"
-
-#: C/empathy.xml:1165(para)
-msgid ""
-"All the contacts are handled within <application>Empathy</application>'s "
-"<link linkend=\"empathy-FIG-mainwindow\">main window</link>."
-msgstr ""
-"All the contacts are handled within <application>Empathy</application>'s "
-"<link linkend=\"empathy-FIG-mainwindow\">main window</link>."
-
-#: C/empathy.xml:1169(para)
-msgid ""
-"You can add or remove a contact or you can edit the information of a "
-"particular contact. It is also possibile to arrange contacts in groups. You "
-"can have a group for your work contacts, one for you family contacts, and so "
-"on."
-msgstr ""
-"You can add or remove a contact or you can edit the information of a "
-"particular contact. It is also possible to arrange contacts in groups. You "
-"can have a group for your work contacts, one for you family contacts, and so "
-"on."
-
-#: C/empathy.xml:1176(title)
-msgid "Adding and Removing a Contact"
-msgstr "Adding and Removing a Contact"
-
-#: C/empathy.xml:1177(para)
-msgid "To add a new contact, proceed as follows:"
-msgstr "To add a new contact, proceed as follows:"
-
-#: C/empathy.xml:1183(para)
-msgid ""
-"From the <link linkend=\"empathy-FIG-mainwindow\">main window</link> choose "
-"<menuchoice><guimenu>Chat</guimenu><guimenuitem>Add Contact...</"
-"guimenuitem></menuchoice>. The <guilabel>New Contact</guilabel> dialog will "
-"be shown."
-msgstr ""
-"From the <link linkend=\"empathy-FIG-mainwindow\">main window</link> choose "
-"<menuchoice><guimenu>Chat</guimenu><guimenuitem>Add Contact...</"
-"guimenuitem></menuchoice>. The <guilabel>New Contact</guilabel> dialogue "
-"will be shown."
-
-#: C/empathy.xml:1193(para)
-msgid ""
-"From the <guilabel>Account</guilabel> drop-down list, choose the service "
-"used by the contact you are adding."
-msgstr ""
-"From the <guilabel>Account</guilabel> drop-down list, choose the service "
-"used by the contact you are adding."
-
-#: C/empathy.xml:1199(para)
-msgid ""
-"In the <guilabel>Identifier</guilabel> text box type the <emphasis>address</"
-"emphasis> of the contact in the form of <userinput><replaceable>user name</"
-"replaceable>@<replaceable>service\n"
-"\t domain</replaceable></userinput>."
-msgstr ""
-"In the <guilabel>Identifier</guilabel> text box type the <emphasis>address</"
-"emphasis> of the contact in the form of <userinput><replaceable>username</"
-"replaceable>@<replaceable>service domain</replaceable></userinput>."
-
-#: C/empathy.xml:1208(para)
-msgid ""
-"In the <guilabel>Alias</guilabel> text box type the name you want to give at "
-"the the new contact."
-msgstr ""
-"In the <guilabel>Alias</guilabel> text box type the name you want to give at "
-"the the new contact."
-
-#: C/empathy.xml:1214(para)
-msgid "Click on <guibutton>Add</guibutton> to add the new contact."
-msgstr "Click on <guibutton>Add</guibutton> to add the new contact."
-
-#: C/empathy.xml:1220(para)
-msgid "To remove a contact, proceed as follows:"
-msgstr "To remove a contact, proceed as follows:"
-
-#: C/empathy.xml:1226(para)
-msgid ""
-"From the <link linkend=\"empathy-FIG-mainwindow\">main window</link>, select "
-"the contact you would like to remove and right-click on it."
-msgstr ""
-"From the <link linkend=\"empathy-FIG-mainwindow\">main window</link>, select "
-"the contact you would like to remove and right-click on it."
-
-#: C/empathy.xml:1233(para)
-msgid ""
-"From the popup menu, choose <guilabel>Remove</guilabel> to remove the "
-"contact."
-msgstr ""
-"From the popup menu, choose <guilabel>Remove</guilabel> to remove the "
-"contact."
-
-#: C/empathy.xml:1242(para) C/empathy.xml:1278(para)
-msgid ""
-"An <emphasis>alias</emphasis> is an alternative way you can identify that "
-"particular contact. You can use the real name or the nickname of that person."
-msgstr ""
-"An <emphasis>alias</emphasis> is an alternative way you can identify that "
-"particular contact. You can use the real name or the nickname of that person."
-
-#: C/empathy.xml:1251(title)
-msgid "Editing a Contact"
-msgstr "Editing a Contact"
-
-#: C/empathy.xml:1252(para)
-msgid "To edit a contact, proceed as follows:"
-msgstr "To edit a contact, proceed as follows:"
-
-#: C/empathy.xml:1258(para) C/empathy.xml:1300(para)
-msgid ""
-"From the <link linkend=\"empathy-FIG-mainwindow\">main window</link>, select "
-"the contact you would like to modify and choose <menuchoice><guimenu>Edit</"
-"guimenu><guisubmenu>Contact</guisubmenu><guimenuitem>Edit</guimenuitem></"
-"menuchoice>, or right-click on it and choose <guilabel>Edit</guilabel>."
-msgstr ""
-"From the <link linkend=\"empathy-FIG-mainwindow\">main window</link>, select "
-"the contact you would like to modify and choose <menuchoice><guimenu>Edit</"
-"guimenu><guisubmenu>Contact</guisubmenu><guimenuitem>Edit</guimenuitem></"
-"menuchoice>, or right-click on it and choose <guimenuitem>Edit</guimenuitem>."
-
-#: C/empathy.xml:1271(para)
-msgid ""
-"From the <guilabel>Edit Contact Information</guilabel> dialog, you can "
-"modify the <emphasis>alias</emphasis> and the <emphasis>group</emphasis> of "
-"the contact."
-msgstr ""
-"From the <guilabel>Edit Contact Information</guilabel> dialogue, you can "
-"modify the <emphasis>alias</emphasis> and the <emphasis>group</emphasis> of "
-"the contact."
-
-#: C/empathy.xml:1285(para)
-msgid ""
-"For more information about groups, see <xref linkend=\"empathy-add-contact-"
-"group\"/> and <xref linkend=\"empathy-add-group\"/>."
-msgstr ""
-"For more information about groups, see <xref linkend=\"empathy-add-contact-"
-"group\"/> and <xref linkend=\"empathy-add-group\"/>."
-
-#: C/empathy.xml:1293(title)
-msgid "Adding a Contact to a Group"
-msgstr "Adding a Contact to a Group"
-
-#: C/empathy.xml:1294(para)
-msgid "To add a contact to one or more groups, proceed as follows:"
-msgstr "To add a contact to one or more groups, proceed as follows:"
-
-#: C/empathy.xml:1312(para)
-msgid ""
-"From the <guilabel>Groups</guilabel> section, select the group, or groups, "
-"you want to add the contact to."
-msgstr ""
-"From the <guilabel>Groups</guilabel> section, select the group, or groups, "
-"to which you want to add the contact."
-
-#: C/empathy.xml:1327(title)
-msgid "Adding a New Group"
-msgstr "Adding a New Group"
-
-#: C/empathy.xml:1328(para)
-msgid "To add a new group, proceed as follows:"
-msgstr "To add a new group, proceed as follows:"
-
-#: C/empathy.xml:1334(para)
-msgid ""
-"From the <link linkend=\"empathy-FIG-mainwindow\">main window</link>, select "
-"one contact and choose <menuchoice><guimenu>Edit</"
-"guimenu><guisubmenu>Contact</guisubmenu><guimenuitem>Edit</guimenuitem></"
-"menuchoice>, or right-click on it and choose <guilabel>Edit</guilabel>."
-msgstr ""
-"From the <link linkend=\"empathy-FIG-mainwindow\">main window</link>, select "
-"one contact and choose <menuchoice><guimenu>Edit</"
-"guimenu><guisubmenu>Contact</guisubmenu><guimenuitem>Edit</guimenuitem></"
-"menuchoice>, or right-click on it and choose <guimenuitem>Edit</guimenuitem>."
-
-#: C/empathy.xml:1345(para)
-msgid ""
-"In the <guilabel>Groups</guilabel> section, write the name of the group you "
-"want to add and then click on <guibutton>Add Group</guibutton>."
-msgstr ""
-"In the <guilabel>Groups</guilabel> section, write the name of the group you "
-"want to add and then click on <guibutton>Add Group</guibutton>."
-
-#. Put one translator per line, in the form of NAME <EMAIL>, YEAR1, YEAR2.
-#: C/empathy.xml:0(None)
-msgid "translator-credits"
-msgstr "Philip Withnall <philip@tecnocode.co.uk>, 2009"
-
-#~ msgid "TODO"
-#~ msgstr "TODO"
diff --git a/help/es/es.po b/help/es/es.po
deleted file mode 100644
index 96ef4884..00000000
--- a/help/es/es.po
+++ /dev/null
@@ -1,3990 +0,0 @@
-# translation of empathy-help.master.po to Español
-# Jorge González <jorgegonz@svn.gnome.org>, 2009, 2010, 2011.
-# Daniel Mustieles <daniel.mustieles@gmail.com>, 2011, 2012, 2013.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: empathy-help.master\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2013-06-23 17:39+0000\n"
-"PO-Revision-Date: 2013-06-24 16:27+0200\n"
-"Last-Translator: Daniel Mustieles <daniel.mustieles@gmail.com>\n"
-"Language-Team: Español <gnome-es-list@gnome.org>\n"
-"Language: \n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: Gtranslator 2.91.5\n"
-"Plural-Forms: nplurals=2; plural=(n!=1);\n"
-
-#. Put one translator per line, in the form NAME <EMAIL>, YEAR1, YEAR2
-msgctxt "_"
-msgid "translator-credits"
-msgstr ""
-"Daniel Mustieles <daniel.mustieles@gmail.com>, 2012, 2013\n"
-"Jorge González <jorgegonz@svn.gnome.org>, 2008-2010"
-
-#: C/index.page:20(credit/name) C/add-account.page:21(credit/name)
-#: C/audio-call.page:22(credit/name) C/audio-video.page:17(credit/name)
-#: C/create-account.page:20(credit/name)
-#: C/disable-account.page:21(credit/name)
-#: C/favorite-rooms.page:14(credit/name) C/geolocation.page:17(credit/name)
-#: C/geolocation-not-showing.page:17(credit/name)
-#: C/geolocation-privacy.page:17(credit/name)
-#: C/geolocation-supported.page:16(credit/name)
-#: C/geolocation-turn.page:18(credit/name)
-#: C/geolocation-what-is.page:18(credit/name)
-#: C/group-conversations.page:19(credit/name)
-#: C/hide-contacts.page:11(credit/name) C/import-account.page:23(credit/name)
-#: C/introduction.page:13(credit/name) C/irc-commands.page:10(credit/name)
-#: C/irc-join-pwd.page:17(credit/name) C/irc-join-room.page:16(credit/name)
-#: C/irc-manage.page:19(credit/name) C/irc-nick-password.page:18(credit/name)
-#: C/irc-send-file.page:16(credit/name)
-#: C/irc-start-conversation.page:15(credit/name)
-#: C/link-contacts.page:15(credit/name) C/prev-conv.page:17(credit/name)
-#: C/prob-conn-acctdisabled.page:19(credit/name)
-#: C/prob-conn-auth.page:22(credit/name) C/prob-conn-name.page:19(credit/name)
-#: C/prob-conn-neterror.page:20(credit/name)
-#: C/remove-account.page:19(credit/name) C/salut-protocol.page:18(credit/name)
-#: C/send-file.page:21(credit/name) C/set-custom-status.page:19(credit/name)
-#: C/share-desktop.page:14(credit/name) C/status-icons.page:17(credit/name)
-#: C/video-call.page:25(credit/name)
-msgid "Milo Casagrande"
-msgstr "Milo Casagrande"
-
-#: C/index.page:25(license/p) C/account-irc.page:21(license/p)
-#: C/account-jabber.page:18(license/p) C/accounts-window.page:21(license/p)
-#: C/add-account.page:29(license/p) C/add-contact.page:22(license/p)
-#: C/audio-call.page:31(license/p) C/audio-video.page:21(license/p)
-#: C/change-status.page:28(license/p) C/create-account.page:29(license/p)
-#: C/disable-account.page:29(license/p) C/favorite-rooms.page:18(license/p)
-#: C/geolocation.page:21(license/p)
-#: C/geolocation-not-showing.page:21(license/p)
-#: C/geolocation-privacy.page:21(license/p)
-#: C/geolocation-supported.page:20(license/p)
-#: C/geolocation-turn.page:22(license/p)
-#: C/geolocation-what-is.page:22(license/p)
-#: C/group-conversations.page:23(license/p) C/hide-contacts.page:15(license/p)
-#: C/import-account.page:31(license/p) C/introduction.page:17(license/p)
-#: C/irc-commands.page:14(license/p) C/irc-join-pwd.page:21(license/p)
-#: C/irc-join-room.page:20(license/p) C/irc-manage.page:28(license/p)
-#: C/irc-nick-password.page:22(license/p) C/irc-send-file.page:20(license/p)
-#: C/irc-start-conversation.page:19(license/p)
-#: C/link-contacts.page:23(license/p) C/overview.page:21(license/p)
-#: C/prev-conv.page:25(license/p) C/prob-conn-acctdisabled.page:23(license/p)
-#: C/prob-conn-auth.page:26(license/p) C/prob-conn-name.page:23(license/p)
-#: C/prob-conn-neterror.page:24(license/p) C/prob-conn.page:18(license/p)
-#: C/remove-account.page:23(license/p) C/salut-protocol.page:22(license/p)
-#: C/send-file.page:25(license/p) C/send-message.page:21(license/p)
-#: C/set-custom-status.page:23(license/p) C/share-desktop.page:22(license/p)
-#: C/status-icons.page:25(license/p) C/video-call.page:34(license/p)
-msgid "Creative Commons Share Alike 3.0"
-msgstr "Creative Commons Compartir Igual 3.0"
-
-#: C/index.page:28(info/desc)
-#| msgid ""
-#| "<app>Empathy</app> is an instant messaging application for the GNOME "
-#| "Desktop. It supports text messaging, voice &amp; video calls, file "
-#| "transfers, and all the most used messaging systems such as MSN and Google "
-#| "Talk."
-msgid ""
-"Empathy is the instant messenging application for GNOME. It supports text, "
-"voice and video chat over many protocols."
-msgstr ""
-"Empathy es la aplicación de mensajería instantánea para GNOME. Soporta "
-"mensajes de texto, llamadas de voz y de vídeo sobre varios protocolos."
-
-#: C/index.page:30(info/title)
-msgctxt "link"
-msgid "Empathy"
-msgstr "Empathy"
-
-#: C/index.page:31(info/title)
-msgctxt "text"
-msgid "Empathy"
-msgstr "Empathy"
-
-#: C/index.page:34(page/title)
-#| msgid "<_:media-1/> Empathy Internet Messenger"
-msgid "<_:media-1/> Empathy"
-msgstr "<_:media-1/> Empathy"
-
-#: C/index.page:40(section/title)
-msgid "Account Management"
-msgstr "Gestión de cuentas"
-
-#: C/index.page:44(section/title)
-msgid "Contact Management"
-msgstr "Gestión de contactos"
-
-#: C/index.page:48(section/title)
-msgid "Text Conversations"
-msgstr "Conversaciones de texto"
-
-#: C/index.page:52(section/title)
-msgid "Audio and Video Conversations"
-msgstr "Conversaciones de sonido y vídeo"
-
-#: C/index.page:56(section/title)
-msgid "Advanced Actions"
-msgstr "Acciones avanzadas"
-
-#: C/index.page:60(section/title) C/irc-manage.page:64(section/title)
-msgid "Common Problems"
-msgstr "Problemas comunes"
-
-#: C/account-irc.page:9(info/desc)
-msgid "Additional information necessary for connecting to IRC networks."
-msgstr "Información adicional necesaria para conectarse a redes IRC."
-
-#: C/account-irc.page:17(credit/name) C/account-jabber.page:14(credit/name)
-#: C/accounts-window.page:17(credit/name) C/add-account.page:25(credit/name)
-#: C/disable-account.page:25(credit/name)
-#: C/import-account.page:27(credit/name) C/prev-conv.page:21(credit/name)
-#: C/status-icons.page:21(credit/name)
-msgid "Shaun McCance"
-msgstr "Shaun McCance"
-
-#: C/account-irc.page:32(page/title)
-msgid "IRC account details"
-msgstr "Detalles de la cuenta IRC"
-
-#: C/account-irc.page:34(page/p)
-msgid ""
-"IRC accounts require different information than many other types of "
-"accounts. To create an IRC account, you must specify at least an IRC network "
-"and a nickname. This page details the information you can provide for an IRC "
-"account."
-msgstr ""
-"Las cuentas de IRC requieren información diferente que otros tipos de "
-"cuentas. Para crear una cuenta IRC debe especificar al menos la red IRC y el "
-"apodo. Esta página detalla la información que puede proporcionar para una "
-"cuenta de IRC."
-
-#: C/account-irc.page:40(note/p) C/irc-manage.page:42(note/p)
-msgid ""
-"You must have the <sys>telepathy-idle</sys> package installed to use IRC in "
-"<app>Empathy</app>."
-msgstr ""
-"Debe tener instalado el paquete <sys>telepathy-idle</sys> para poder usar el "
-"IRC en <app>Empathy</app>."
-
-#: C/account-irc.page:46(item/title) C/account-irc.page:124(item/title)
-msgid "<gui>Network</gui>"
-msgstr "<gui>Red</gui>"
-
-#: C/account-irc.page:47(item/p)
-msgid ""
-"IRC is an open system that allows people to run separate IRC networks. Each "
-"network is distinct and has its own users and chat rooms. <app>Empathy</app> "
-"lists the most popular networks in the <gui>Network</gui> drop-down list. "
-"You can add additional networks. See <link xref=\"#networks\"/> below."
-msgstr ""
-"IRC es un sistema abierto que permite a la gente estar en diferentes redes "
-"IRC. Cada red es distinta y tiene sus propios usuarios y salas de chat. "
-"<app>Empathy</app> lista las redes más populares en la lista desplegable "
-"<gui>Red</gui>. Puede añadir redes adicionales. Consulte debajo la <link "
-"xref=\"#networks\"/>."
-
-#: C/account-irc.page:54(item/title)
-msgid "<gui>Nickname</gui>"
-msgstr "<gui>Alias</gui>"
-
-#: C/account-irc.page:55(item/p)
-msgid ""
-"Your nickname is your unique name on the IRC network. Only one person on a "
-"network may use a given nickname. If you get an error message that says "
-"<link xref=\"prob-conn-name\" role=\"error-msg\"/> you will need to change "
-"your nickname."
-msgstr ""
-"Su apodo es su nombre único en la red IRC. Sólo una persona en una red puede "
-"usar cierto apodo. Si obtiene un mensaje que dice <link xref=\"prob-conn-name"
-"\" role=\"error-msg\"/> deberá cambiar su apodo."
-
-#: C/account-irc.page:61(item/title)
-msgid "<gui>Password</gui>"
-msgstr "<gui>Contraseña</gui>"
-
-#: C/account-irc.page:62(item/p)
-msgid ""
-"Some servers, particularly those on private networks, require a password to "
-"connect. If you are authorized to use the network, the network "
-"administrators should provide you with a password."
-msgstr ""
-"Algunos servidores, particularmente aquellos en redes privadas, requieren "
-"una contraseña para la conexión. Si está autorizado a usar la red, los "
-"administradores de la red le proporcionarán una contraseña."
-
-#: C/account-irc.page:66(note/title)
-msgid "NickServ Passwords"
-msgstr "Contraseñas NickServ"
-
-#: C/account-irc.page:67(note/p)
-msgid ""
-"On some networks, nicknames can be registered using a service known as "
-"NickServ. <app>Empathy</app> does not directly support nickname passwords. "
-"On some networks, including the popular freenode network, server passwords "
-"are automatically forwarded to NickServ, allowing you to set this field to "
-"identify yourself with NickServ. See <link xref=\"irc-nick-password\"/> for "
-"more details."
-msgstr ""
-"En algunas redes los apodos se pueden registrar con un servicio conocido "
-"como NickServ. <app>Empathy</app> no soporta directamente contraseñas para "
-"apodos. En algunas redes, incluyendo la popular red freenode, las "
-"contraseñas de servidor se redireccionan automáticamente a NickServ, "
-"permitiéndole usar este campo para identificarse con NickServ. Para obtener "
-"más información consulte la <link xref=\"irc-nick-password\"/>."
-
-#: C/account-irc.page:77(item/title)
-msgid "<gui>Real name</gui>"
-msgstr "<gui>Nombre real</gui>"
-
-#: C/account-irc.page:78(item/p)
-msgid ""
-"You can provide your real name in addition to your nickname. Other users "
-"will be able to see this when they view your information."
-msgstr ""
-"Puede proporcionar su nombre real además de su apodo. Otros usuarios podrán "
-"verlo al ver su información."
-
-#: C/account-irc.page:82(item/title)
-msgid "<gui>Quit message</gui>"
-msgstr "<gui>Mensaje de salida</gui>"
-
-#: C/account-irc.page:83(item/p)
-msgid ""
-"When you go offline, a quit message is sent to all the chat rooms you’re in "
-"and to all the users you’re having a private conversation with. Use this "
-"field to provide a custom quit message."
-msgstr ""
-"Cuando se desconecta se envía un mensaje de salida a todas las salas de chat "
-"en las que está y a todos los usuarios con los que tiene una conversación "
-"privada. Use este campo para proporcionar un mensaje personalizado."
-
-#: C/account-irc.page:95(info/title)
-msgctxt "link"
-msgid "IRC Networks"
-msgstr "Redes IRC"
-
-#: C/account-irc.page:98(section/title)
-msgid "Networks"
-msgstr "Redes"
-
-#: C/account-irc.page:100(section/p)
-msgid ""
-"<app>Empathy</app> includes a list of popular IRC networks. If you wish to "
-"another IRC network, you can add it to the list. You can also modify "
-"networks and remove them from the list."
-msgstr ""
-"<app>Empathy</app> incluye una lista de redes IRC populares. Si quiere usar "
-"otra red IRC puede añadirla a la lista. También puede modificar y quitar "
-"redes de la lista."
-
-#: C/account-irc.page:108(media/span)
-msgid "Add"
-msgstr "Añadir"
-
-#: C/account-irc.page:105(item/p)
-msgid "To add a network to the list, click <_:media-1/>."
-msgstr "Para añadir una red a la lista, pulse <_:media-1/>."
-
-#: C/account-irc.page:112(media/span)
-msgid "Edit"
-msgstr "Editar"
-
-#: C/account-irc.page:109(item/p)
-msgid ""
-"To modify a network in the list, select the network and click <_:media-1/>."
-msgstr ""
-"Para modificar una red de la lista seleccione la red y pulse <_:media-1/>."
-
-#: C/account-irc.page:116(media/span)
-msgid "Remove"
-msgstr "Quitar"
-
-#: C/account-irc.page:113(item/p)
-msgid ""
-"To remove a network from the list, select the network and click <_:media-1/>."
-msgstr ""
-"Para quitar una red de la lista seleccione la red y pulse <_:media-1/>."
-
-#: C/account-irc.page:119(section/p)
-msgid ""
-"When adding or modifying a network, you can enter the following information:"
-msgstr ""
-"Al añadir o modificar una red puede introducir la siguiente información:"
-
-#: C/account-irc.page:125(item/p)
-msgid ""
-"This is the name of the network as you want it to appear in the list of "
-"networks."
-msgstr ""
-"Este es el nombre de la red como quiere que aparezca en la lista de redes."
-
-#: C/account-irc.page:129(item/title)
-msgid "<gui>Charset</gui>"
-msgstr "<gui>Conjunto de caracteres</gui>"
-
-#: C/account-irc.page:130(item/p)
-msgid ""
-"This specifies the character encoding that is typically used on this "
-"network. A character encoding is a specific way of recording characters "
-"internally in a computer. There are many character encodings, and you need "
-"to use the same character encoding as other users to see their messages "
-"correctly."
-msgstr ""
-"Esto especifica la codificación de caracteres usada generalmente en esta "
-"red. Una codificación de caracteres es una forma específica de grabar los "
-"caracteres internamente en un equipo. Existen muchas configuraciones de "
-"caracteres y debe usar la misma configuración de caracteres que el resto de "
-"usuarios para poder ver sus mensajes correctamente."
-
-#: C/account-irc.page:139(item/p)
-msgid ""
-"By default, <app>Empathy</app> uses UTF-8, a modern character encoding that "
-"can handle text from most of the world's languages. Another common encoding "
-"for English and some other Western languages is ISO-8859-1."
-msgstr ""
-"De forma predeterminada <app>Empathy</app> usa UTF-8, una codificación de "
-"caracteres moderna que puede gestionar texto en la mayoría de los idiomas "
-"del mundo. Otra configuración de caracteres común para inglés y otros "
-"idiomas occidentales es ISO-8859-1."
-
-#: C/account-irc.page:145(item/title)
-msgid "<gui>Servers</gui>"
-msgstr "<gui>Servidores</gui>"
-
-#: C/account-irc.page:146(item/p)
-msgid ""
-"An IRC network may have many servers you can connect to. When you are "
-"connected to a server on a particular network, you can communicate with all "
-"users on all other servers on that network. You can add and remove servers "
-"for this network using the <gui>Add</gui> and <gui>Remove</gui> buttons."
-msgstr ""
-"Una red IRC puede tener muchos servidores a los que se puede conectar. "
-"Cuando está conectado a un servidor en una red en particular, puede "
-"comunicarse con todos los usuarios en todos los servidores de esa red. Puede "
-"añadir y quitar servidores para esa red usando los botones <gui>Añadir</gui> "
-"y <gui>Quitar</gui>."
-
-#: C/account-irc.page:151(item/p)
-msgid ""
-"When a server is selected, click the field under <gui>Server</gui> or "
-"<gui>Port</gui> to edit it. Alternatively, use the left and right arrow keys "
-"to focus the field, and press the space bar to begin editing."
-msgstr ""
-"Cuando un servidor esté seleccionado, pulse el campo bajo <gui>Servidor</"
-"gui> o <gui>Puerto</gui> para editarlo. Alternativamente, use las flechas "
-"izquierda y derecha para dar el foco al campo y pulse la barra espaciadora "
-"para comenzar a editarlo."
-
-#: C/account-irc.page:155(item/p)
-msgid ""
-"Select the check box in the <gui>SSL</gui> column to encrypt all "
-"communication with a server. Note that this does not prevent other users on "
-"the network from seeing what you write on public chat rooms."
-msgstr ""
-"Seleccione la casilla de verificación en la columna <gui>SSL</gui> para "
-"cifrar toda la comunicación con el servidor. Note que esto no previene que "
-"otros usuarios en la red vean lo que escribe en salas de chat públicas."
-
-#: C/account-jabber.page:7(info/desc)
-msgid "Advanced options for Jabber and Google Talk accounts."
-msgstr "Opciones avanzadas para cuentas Jabber y Google Talk."
-
-#: C/account-jabber.page:29(page/title)
-msgid "Jabber account details"
-msgstr "Detalles de la cuenta Jabber"
-
-#: C/account-jabber.page:31(page/p)
-msgid ""
-"Most Jabber accounts will require only a login ID and a password to connect. "
-"For some accounts or on certain types of networks, you may need to enter "
-"additional information in the <gui>Advanced</gui> section. Normally, you "
-"will not need to use the advanced options below. For general instructions on "
-"adding an account, see <link xref=\"add-account\"/>."
-msgstr ""
-"La mayoría de cuentas Jabber, para conectarse, sólo requieren un ID de "
-"inicio de sesión y una contraseña. Para algunas cuentas en cierto tipo de "
-"redes, puede necesitar introducir información adicional en la sección "
-"<gui>Avanzadas</gui>. Generalmente no necesitará usar las opciones avanzadas "
-"de debajo. Consulte la <link xref=\"add-account\"/> para obtener "
-"instrucciones generales para añadir una cuenta."
-
-#: C/account-jabber.page:39(note/p)
-msgid ""
-"Google Talk is a type of Jabber account. These instructions hold for Google "
-"Talk accounts as well."
-msgstr ""
-"Google Talk es un tipo de cuenta Jabber. Estas instrucciones también "
-"funcionan para cuentas de Google Talk."
-
-#: C/account-jabber.page:45(item/title)
-msgid "<gui>Encryption required (TLS/SSL)</gui>"
-msgstr "<gui>Se requiere cifrado (TLS/SSL)</gui>"
-
-#: C/account-jabber.page:46(item/title)
-msgid "<gui>Ignore SSL certificate errors</gui>"
-msgstr "<gui>Ignorar los errores de certificados SSL</gui>"
-
-#: C/account-jabber.page:47(item/p)
-msgid ""
-"Whenever possible, communication between <app>Empathy</app> and the Jabber "
-"server is encrypted. If encrypted communication is not possible, messages "
-"may be sent unencrypted. Select <gui>Encryption required</gui> to prevent "
-"<app>Empathy</app> from communicating with the Jabber server when encryption "
-"is not possible."
-msgstr ""
-"Siempre que sea posible, la comunicación entre <app>Empathy</app> y el "
-"servidor Jabber está cifrada. Si la comunicación cifrada no es posible, "
-"puede que los mensajes se envíen sin cifrar. Seleccione <gui>Requiere "
-"cifrado</gui> para evitar que <app>Empathy</app> se comunique con el "
-"servidor Jabber cuando no es posible cifrar la comunicación."
-
-#: C/account-jabber.page:52(item/p)
-msgid ""
-"Some Jabber servers may encrypt data using invalid certificates, or using "
-"certificates from unknown authorities. If you trust the server you are "
-"connecting to, you can select <gui>Ignore SSL certificate errors</gui> to "
-"allow encrypted communication with invalid certificates."
-msgstr ""
-"Algunos servidores Jabber pueden cifrar datos usando certificados no válidos "
-"o usando certificados de autoridades desconocidas. Si confía en el servidor "
-"al que se está conectando puede seleccionar <gui>Ignorar los errores de "
-"certificados SSL</gui> para permitir comunicaciones cifradas con "
-"certificados no válidos."
-
-#: C/account-jabber.page:59(item/title)
-msgid "<gui>Resource</gui>"
-msgstr "<gui>Recurso</gui>"
-
-#: C/account-jabber.page:60(item/title)
-msgid "<gui>Priority</gui>"
-msgstr "<gui>Prioridad</gui>"
-
-#: C/account-jabber.page:61(item/p)
-msgid ""
-"If you have multiple applications (for instance, on separate computers) "
-"connected to your account at the same time, you can set a resource to "
-"uniquely identify each one. By default, <app>Empathy</app> will use "
-"<input>Telepathy</input> as the resource."
-msgstr ""
-"Si tiene múltiples aplicaciones (en equipos diferentes, por ejemplo) "
-"conectados a su cuenta al mismo tiempo, puede configurar un recurso para "
-"identificar unívocamente cada una. De forma predeterminada <app>Empathy</"
-"app> usará <input>Telepathy</input> como recurso."
-
-#: C/account-jabber.page:65(item/p)
-msgid ""
-"You can set the priority to specify which application should receive "
-"incoming messages from your contacts. New messages will be sent to the "
-"application with the highest priority."
-msgstr ""
-"Puede establecer la prioridad para especificar qué aplicación debería "
-"recibir mensajes entrantes de sus contactos. Los mensajes nuevos se enviarán "
-"a la aplicación con la prioridad más alta."
-
-#: C/account-jabber.page:70(item/title)
-msgid "<gui>Override server settings</gui>"
-msgstr "<gui>Sobreescribir los ajustes del servidor</gui>"
-
-#: C/account-jabber.page:71(item/p)
-msgid ""
-"<app>Empathy</app> will use default settings to connect to the Jabber server "
-"based on your login ID. For some Jabber servers, you will need to enter "
-"custom server settings manually. These settings should be provided for you "
-"by your Jabber provider."
-msgstr ""
-"<app>Empathy</app> usará la configuración predeterminada para conectarse al "
-"servidor Jabber en función de su ID de inicio de sesión. Para algunos "
-"servidores Jabber necesitará introducir manualmente ajustes de servidor. Su "
-"proveedor Jabber deberá proporcionar esos ajustes."
-
-#: C/accounts-window.page:10(info/desc)
-msgid "Add, modify, and delete accounts."
-msgstr "Añadir, modificar y eliminar cuentas."
-
-#: C/accounts-window.page:32(page/title)
-msgid "Accounts Window"
-msgstr "Ventana de cuentas"
-
-#: C/accounts-window.page:34(page/p)
-msgid ""
-"The <gui>Accounts</gui> window allows you to add, modify, and delete "
-"accounts."
-msgstr ""
-"La ventana <gui>Cuentas</gui> le permite añadir, modificar y eliminar "
-"cuentas."
-
-#: C/accounts-window.page:42(section/title)
-msgid "Account Details"
-msgstr "Detalles de la cuenta"
-
-#: C/accounts-window.page:43(section/p)
-msgid ""
-"For most types of accounts, you can simply enter a login ID and a password. "
-"Certain accounts or account types, however, may require additional "
-"information."
-msgstr ""
-"Para la mayoría de los tipos de cuenta puede, simplemente, introducir un ID "
-"de inicio de sesión y una contraseña. No obstante, algunos tipos de cuenta "
-"pueden requerir información adicional."
-
-#: C/add-account.page:9(info/desc)
-msgid "Add a new account to <app>Empathy</app>."
-msgstr "Añadir una cuenta nueva en <app>Empathy</app>."
-
-#: C/add-account.page:40(page/title)
-msgid "Add a new account"
-msgstr "Añadir una cuenta nueva"
-
-#: C/add-account.page:42(page/p)
-msgid ""
-"You can add instant messaging accounts from any supported service to "
-"communicate with all of your contacts in <app>Empathy</app>. For some "
-"account providers, these steps will also allow you to register for a new "
-"account. For more details, see <link xref=\"create-account\"/>."
-msgstr ""
-"Puede añadir cuentas de mensajería instantánea de cualquier servicio "
-"soportado para comunicarse con todos sus contactos desde <app>Empathy</app>. "
-"Para algunos proveedores de cuentas estos pasos le permitirán registrar una "
-"cuenta nueva. Para obtener más detalles consulte la <link xref=\"create-"
-"account\"/>."
-
-#: C/add-account.page:49(item/p) C/disable-account.page:49(item/p)
-#: C/irc-nick-password.page:50(item/p) C/remove-account.page:43(item/p)
-msgid ""
-"From the <gui>Contact List</gui> window, choose <guiseq><gui>Edit</gui> "
-"<gui>Accounts</gui></guiseq>, or press <key>F4</key>."
-msgstr ""
-"Desde la ventana <gui>Lista de contactos</gui> elija <guiseq><gui>Editar</"
-"gui><gui>Cuentas</gui></guiseq> o pulse <key>F4</key>."
-
-#: C/add-account.page:53(item/p)
-msgid "Click <gui style=\"button\">+</gui>."
-msgstr "Pulse <gui style=\"button\">+</gui>."
-
-#: C/add-account.page:58(item/p)
-msgid ""
-"From the <gui>Protocol</gui> drop-down list, select the type of account you "
-"wish to add."
-msgstr ""
-"Desde la lista desplegable <gui>Protocolo</gui> seleccione el tipo de cuenta "
-"que quiere añadir."
-
-#: C/add-account.page:62(item/p)
-msgid ""
-"If you do not already have a registered account, select <gui>Create a new "
-"account on the server</gui>. This feature is not available for all account "
-"types, and may not work with some account providers. See <link xref=\"create-"
-"account\"/> for more information."
-msgstr ""
-"Si aún no tiene una cuenta registrada seleccione <gui>Crear una cuenta nueva "
-"en el servidor</gui>. Esta característica no está disponible para todos los "
-"tipos de cuentas y puede no funcionar con algunos proveedores de cuentas. "
-"Para obtener más información consulte la <link xref=\"create-account\"/>."
-
-#: C/add-account.page:69(item/p)
-msgid ""
-"Enter the required information. For most accounts, you will only need a "
-"login ID and a password. Some accounts may require additional information. "
-"See <link xref=\"accounts-window#details\"/>for more information."
-msgstr ""
-"Introduzca la información requerida. Para la mayoría de cuentas sólo "
-"necesitará un ID de inicio de sesión y una contraseña. Algunas cuentas "
-"pueden requerir información adicional. Para obtener más información consulte "
-"la <link xref=\"accounts-window#details\"/>."
-
-#: C/add-account.page:74(item/p) C/import-account.page:61(item/p)
-#: C/irc-nick-password.page:63(item/p)
-msgid "Click <gui style=\"button\">Apply</gui>."
-msgstr "Pulse <gui style=\"button\">Aplicar</gui>."
-
-#: C/add-account.page:81(note/p)
-msgid ""
-"To change the name that identifies the account in the <gui>Accounts</gui> "
-"window, select the account from the list on the left and either click on the "
-"name or press the space bar. Edit the account name and press <key>Enter</"
-"key> when you’re finished."
-msgstr ""
-"Para cambiar el nombre que identifica la cuenta en la ventana <gui>Cuentas</"
-"gui>, seleccione la cuenta de la lista a la izquierda y pulse en el nombre o "
-"la barra espaciadora. Edite el nombre de la cuenta y pulse <key>Intro</key> "
-"cuando haya acabado."
-
-#: C/add-contact.page:9(info/desc)
-msgid "Add someone to the contact list."
-msgstr "Añadir alguien a la lista de contactos."
-
-#: C/add-contact.page:18(credit/name) C/change-status.page:24(credit/name)
-#: C/prob-conn-acctdisabled.page:15(credit/name)
-#: C/prob-conn-auth.page:18(credit/name)
-#: C/prob-conn-neterror.page:16(credit/name) C/prob-conn.page:14(credit/name)
-#: C/send-file.page:17(credit/name) C/send-message.page:17(credit/name)
-msgid "Phil Bull"
-msgstr "Phil Bull"
-
-#: C/add-contact.page:33(page/title)
-msgid "Add someone to your list of contacts"
-msgstr "Añadir alguien a su lista de contactos"
-
-#: C/add-contact.page:37(item/p)
-msgid "Choose <guiseq><gui>Chat</gui><gui>Add Contact</gui></guiseq>."
-msgstr "Elija <guiseq><gui>Chat</gui><gui>Añadir contacto</gui></guiseq>."
-
-#: C/add-contact.page:40(item/p)
-msgid ""
-"From the <gui>Account</gui> drop-down list, select the account you wish to "
-"use to connect to your contact. Your contact will need to be using the same "
-"service as the account you select."
-msgstr ""
-"Desde la lista desplegable <gui>Cuenta</gui> seleccione la cuenta que quiere "
-"usar para conectar con su contacto. Su contacto deberá usar el mismo "
-"servicio que la cuenta que esté seleccionando."
-
-#: C/add-contact.page:45(item/p)
-msgid ""
-"In the <gui>Identifier</gui> field, enter your contact’s login ID, username, "
-"screen name, or other appropriate identifier for the service type."
-msgstr ""
-"En el campo <gui>Identificador</gui> introduzca el ID de inicio de sesión de "
-"su contacto, su nombre en pantalla u otro identificador apropiado para el "
-"tipo de servicio."
-
-#: C/add-contact.page:49(item/p)
-msgid ""
-"In the <gui>Alias</gui> field, type your contact’s name as you would like it "
-"to appear in your contact list."
-msgstr ""
-"En el campo <gui>Apodo</gui> escriba el nombre de su contacto tal y como le "
-"gustaría que apareciese en su lista de contactos."
-
-#: C/add-contact.page:53(item/p)
-msgid "Click <gui>Add</gui> to add the person to your list of contacts."
-msgstr ""
-"Pulse <gui>Añadir</gui> para añadir la persona a su lista de contactos."
-
-#: C/add-contact.page:61(note/p)
-msgid ""
-"To add a new person to your list of contacts, you need to be connected to "
-"the Internet and to your account."
-msgstr ""
-"Para añadir una persona nueva a su lista de contactos necesita estar "
-"conectado a Internet y a su cuenta."
-
-#: C/audio-call.page:10(info/desc)
-msgid "Call your contacts over the Internet."
-msgstr "Llamar a sus contactos a través de Internet."
-
-#: C/audio-call.page:26(credit/name) C/create-account.page:24(credit/name)
-#: C/overview.page:17(credit/name) C/share-desktop.page:18(credit/name)
-#: C/video-call.page:29(credit/name)
-msgid "Ekaterina Gerasimova"
-msgstr "Ekaterina Gerasimova"
-
-#: C/audio-call.page:35(page/title)
-msgid "Start an audio conversation"
-msgstr "Iniciar una conversación de sonido"
-
-#: C/audio-call.page:37(page/p)
-msgid ""
-"You can call your contacts and have an audio conversation with them. This "
-"features only works with certain types of accounts and it requires the other "
-"person to have an application that supports audio calls."
-msgstr ""
-"Puede llamar a sus contactos y tener conversaciones de voz con ellos. Esta "
-"característica sólo funciona con cierto tipo de cuentas y requiere que la "
-"otra persona tenga una aplicación que soporte llamadas de voz."
-
-#: C/audio-call.page:43(item/p)
-msgid ""
-"Right-click on the contact that you want to call and select <gui style="
-"\"menuitem\">Audio Call</gui>."
-msgstr ""
-"Pulse con el botón derecho sobre el contacto al que quiere llamar y "
-"seleccione <gui style=\"menuitem\">Llamada de voz</gui>."
-
-#: C/audio-call.page:49(item/p) C/video-call.page:50(item/p)
-msgid ""
-"A new window will open. When the connection is established, you will see the "
-"total conversation time at the bottom of the window."
-msgstr ""
-"Se abrirá una ventana nueva. Cuando se establezca la conexión, verá el "
-"tiempo total de conversación en la parte inferior de la ventana."
-
-#: C/audio-call.page:55(item/p)
-msgid ""
-"To end the conversation, click the <gui style=\"button\">hand up</gui> "
-"button."
-msgstr ""
-"Para finalizar una conversación pulse el botón <gui style=\"button\">Colgar</"
-"gui>."
-
-#: C/audio-call.page:63(note/p)
-msgid ""
-"To turn an audio conversation into a video conversation, choose <guiseq><gui "
-"style=\"menu\">Video</gui> <gui style=\"menuitem\">Video On</gui></guiseq>."
-msgstr ""
-"Para convertir una conversación de sonido en una de vídeo, elija "
-"<guiseq><gui style=\"menu\">Vídeo</gui><gui style=\"menuitem\">Vídeo "
-"encendido</gui></guiseq>."
-
-#: C/audio-call.page:71(section/title)
-msgid "Start an audio conversation with a meta-contact"
-msgstr "Iniciar una conversación con un metacontacto"
-
-#: C/audio-call.page:74(item/p) C/send-message.page:53(item/p)
-#: C/video-call.page:68(item/p)
-msgid ""
-"From the <gui>Contact List</gui> window, right-click on the meta-contact."
-msgstr ""
-"Desde la ventana <gui>Lista de contactos</gui>, pulse con el botón derecho "
-"sobre el metacontacto."
-
-#: C/audio-call.page:79(item/p)
-msgid ""
-"Select the contact you want to have the conversation, and from the menu "
-"select <gui style=\"menuitem\">Audio Call</gui>."
-msgstr ""
-"Seleccione el contacto con el que quiere tener la conversación y, del menú, "
-"seleccione <gui style=\"menuitem\">Llamada de voz</gui>."
-
-#: C/audio-call.page:86(note/p) C/send-message.page:65(note/p)
-#: C/video-call.page:80(note/p)
-msgid ""
-"To recognize if a contact is a <em>meta-contact</em>, move your mouse on a "
-"contact in the <gui>Contact List</gui> window, and stop over it for a "
-"second: a small pop-up message will appear showing the number of the "
-"contacts that form the meta-contact."
-msgstr ""
-"Para reconocer si un contecto es un <em>metacontacto</em>, mueva su ratón "
-"sobre un contacto en la ventana de la <gui>Lista de contactos</gui> y "
-"deténgalo encima un segundo: aparecerá un pequeño mensaje emergente "
-"mostrando el número de contactos que forman el metacontacto."
-
-#. This is a reference to an external file such as an image or video. When
-#. the file changes, the md5 hash will change to let you know you need to
-#. update your localized copy. The msgstr is not used at all. Set it to
-#. whatever you like once you have updated your copy of the file.
-#: C/audio-video.page:58(media)
-msgctxt "_"
-msgid "external ref='figures/audio-input-microphone.png' md5='__failed__'"
-msgstr "external ref='figures/audio-input-microphone.png' md5='__failed__'"
-
-#. This is a reference to an external file such as an image or video. When
-#. the file changes, the md5 hash will change to let you know you need to
-#. update your localized copy. The msgstr is not used at all. Set it to
-#. whatever you like once you have updated your copy of the file.
-#: C/audio-video.page:70(media)
-msgctxt "_"
-msgid "external ref='figures/camera-web.png' md5='__failed__'"
-msgstr "external ref='figures/camera-web.png' md5='__failed__'"
-
-#: C/audio-video.page:8(info/desc)
-msgid ""
-"Information on when it is possible to have an audio or video conversation."
-msgstr ""
-"Información acerca de cuándo es posible tener una conversación de vídeo o "
-"sonido."
-
-#: C/audio-video.page:32(page/title)
-msgid "Audio and video support"
-msgstr "Soporte de sonido y vídeo"
-
-#: C/audio-video.page:34(page/p)
-msgid ""
-"You can only have audio and video conversation with contacts who are using "
-"an application which also supports this feature. When your contacts support "
-"audio or video conversations, you will see the following icons next to their "
-"names in the contact list:"
-msgstr ""
-"Sólo puede tener conversaciones de sonido y vídeo con contactos que estén "
-"usando una aplicación que también soporte la característica. Cuando las "
-"aplicaciones de sus contactos soportan conversaciones de sonido o vídeo lo "
-"verá en forma de iconos junto a sus nombres, en la lista de contactos:"
-
-#: C/audio-video.page:43(td/p)
-msgid "Icon"
-msgstr "Icono"
-
-#: C/audio-video.page:48(td/p)
-msgid "Description"
-msgstr "Descripción"
-
-#: C/audio-video.page:57(td/p)
-msgid ""
-"<media type=\"image\" mime=\"image/png\" src=\"figures/audio-input-"
-"microphone.png\"> Icon for audio conversation </media>"
-msgstr ""
-"<media type=\"image\" mime=\"image/png\" src=\"figures/audio-input-"
-"microphone.png\"> Icono para conversación de sonido </media>"
-
-#: C/audio-video.page:64(td/p)
-msgid "The contact is able to have an audio conversation."
-msgstr "El contacto puede tener conversaciones de sonido."
-
-#: C/audio-video.page:69(td/p)
-msgid ""
-"<media type=\"image\" mime=\"image/png\" src=\"figures/camera-web.png\"> "
-"Icon for video conversation </media>"
-msgstr ""
-"<media type=\"image\" mime=\"image/png\" src=\"figures/camera-web.png\"> "
-"Icono para conversación de vídeo </media>"
-
-#: C/audio-video.page:76(td/p)
-msgid "The contact is able to have a video conversation."
-msgstr "El contacto puede tener conversaciones de vídeo."
-
-#: C/audio-video.page:83(note/p)
-msgid ""
-"In order to have an audio conversation, you need to have a sound card that "
-"is supported by your operating system, and a working microphone."
-msgstr ""
-"Para poder tener una conversación de sonido debe tener una tarjeta de sonido "
-"soportada por el sistema operativo y un micrófono que funcione."
-
-#: C/audio-video.page:87(note/p)
-msgid ""
-"In order to have a video conversation, you need to have a webcam that is "
-"supported by your operating system, and a working microphone."
-msgstr ""
-"Para poder tener una conversación de vídeo debe tener una cámara web "
-"soportada por el sistema operativo y un micrófono que funcione."
-
-#: C/audio-video.page:95(section/title)
-msgid "Supported Account Types"
-msgstr "Tipos de cuentas soportadas"
-
-#: C/audio-video.page:97(section/p)
-msgid ""
-"You can only have audio and video conversations using accounts on certain "
-"supported services. The following table lists whether audio and video is "
-"supported for each type of account."
-msgstr ""
-"Sólo puede tener conversaciones de sonido y vídeo usando cuentas en ciertos "
-"servicios soportados. La siguiente tabla lista si el sonido y vídeo está "
-"soportado para cada tipo de cuenta."
-
-#: C/audio-video.page:102(note/p)
-msgid ""
-"Account types are provided by plugins. Your system may not have all of the "
-"following types available, or it may have types not listed here. Updated "
-"plugins may make audio or video conversations possible on account types that "
-"are listed as unsupported here."
-msgstr ""
-"Los complementos proporcionan los tipos de cuentas. Puede que su sistema no "
-"tenga disponible todos los siguientes tipos, o puede tener tipos no listados "
-"aquí. Las actualizaciones de complementos pueden hacer posibles "
-"conversaciones de sonido o vídeo en tipos de cuentas que aquí se muestran "
-"como no soportadas."
-
-#: C/audio-video.page:128(td/p)
-msgid "Service"
-msgstr "Servicio"
-
-#: C/audio-video.page:129(td/p)
-msgid "Audio"
-msgstr "Sonido"
-
-#: C/audio-video.page:130(td/p)
-msgid "Video"
-msgstr "Vídeo"
-
-#: C/audio-video.page:135(td/p)
-msgid "AIM"
-msgstr "AIM"
-
-#: C/audio-video.page:136(td/p) C/audio-video.page:137(td/p)
-#: C/audio-video.page:141(td/p) C/audio-video.page:142(td/p)
-#: C/audio-video.page:146(td/p) C/audio-video.page:147(td/p)
-#: C/audio-video.page:156(td/p) C/audio-video.page:157(td/p)
-#: C/audio-video.page:161(td/p) C/audio-video.page:162(td/p)
-#: C/audio-video.page:166(td/p) C/audio-video.page:167(td/p)
-#: C/audio-video.page:181(td/p) C/audio-video.page:182(td/p)
-#: C/audio-video.page:186(td/p) C/audio-video.page:187(td/p)
-#: C/audio-video.page:191(td/p) C/audio-video.page:192(td/p)
-#: C/audio-video.page:196(td/p) C/audio-video.page:197(td/p)
-#: C/audio-video.page:201(td/p) C/audio-video.page:202(td/p)
-#: C/audio-video.page:211(td/p) C/audio-video.page:212(td/p)
-#: C/audio-video.page:216(td/p) C/audio-video.page:217(td/p)
-msgid "No"
-msgstr "No"
-
-#: C/audio-video.page:140(td/p)
-msgid "Facebook Chat"
-msgstr "Chat de Facebook"
-
-#: C/audio-video.page:145(td/p)
-msgid "gadugadu"
-msgstr "gadugadu"
-
-#: C/audio-video.page:150(td/p)
-msgid "Google Talk"
-msgstr "Google Talk"
-
-#: C/audio-video.page:151(td/p) C/audio-video.page:152(td/p)
-#: C/audio-video.page:171(td/p) C/audio-video.page:172(td/p)
-#: C/audio-video.page:176(td/p) C/audio-video.page:177(td/p)
-#: C/audio-video.page:206(td/p) C/audio-video.page:207(td/p)
-msgid "Yes"
-msgstr "Sí"
-
-#: C/audio-video.page:155(td/p)
-msgid "Groupwise"
-msgstr "Groupwise"
-
-#: C/audio-video.page:160(td/p)
-msgid "ICQ"
-msgstr "ICQ"
-
-#: C/audio-video.page:165(td/p) C/create-account.page:49(section/title)
-msgid "IRC"
-msgstr "IRC"
-
-#: C/audio-video.page:170(td/p) C/create-account.page:79(section/title)
-msgid "Jabber"
-msgstr "Jabber"
-
-#: C/audio-video.page:175(td/p)
-msgid "MSN"
-msgstr "MSN"
-
-#: C/audio-video.page:180(td/p)
-msgid "myspace"
-msgstr "myspace"
-
-#: C/audio-video.page:185(td/p)
-msgid "qq"
-msgstr "qq"
-
-#: C/audio-video.page:190(td/p) C/create-account.page:97(section/title)
-msgid "People Nearby"
-msgstr "Gente cerca"
-
-#: C/audio-video.page:195(td/p)
-msgid "sametime"
-msgstr "sametime"
-
-#: C/audio-video.page:200(td/p)
-msgid "silc"
-msgstr "silc"
-
-#: C/audio-video.page:205(td/p) C/create-account.page:110(section/title)
-msgid "SIP"
-msgstr "SIP"
-
-#: C/audio-video.page:210(td/p)
-msgid "Yahoo!"
-msgstr "Yahoo!"
-
-#: C/audio-video.page:215(td/p)
-msgid "zephyr"
-msgstr "zephyr"
-
-#: C/change-status.page:9(info/desc)
-msgid "Change your status to advertise your availability to your contacts."
-msgstr "Cambie su estado para avisar de su disponibilidad a sus contactos."
-
-#: C/change-status.page:39(page/title)
-msgid "Change your status"
-msgstr "Cambiar su estado"
-
-#: C/change-status.page:41(page/p)
-msgid ""
-"You can set your status to indicate your availability to your contacts. "
-"<app>Empathy</app> allows you to select from a list of defined statuses."
-msgstr ""
-"Puede establecer su estado para indicar su disponibilidad a sus contactos. "
-"<app>Empathy</app> le permite seleccionar una lista de estados predefinidos."
-
-#: C/change-status.page:46(item/p)
-msgid ""
-"Click on the drop-down list at the top of the <gui>Contact List</gui> window."
-msgstr ""
-"Pulse en la lista desplegable en la parte superior de la ventana de la "
-"<gui>Lista de contactos</gui>."
-
-#: C/change-status.page:51(item/p)
-msgid "Select a status from the list."
-msgstr "Seleccione un estado de la lista."
-
-#: C/change-status.page:57(page/p)
-msgid ""
-"See <link xref=\"status-icons\"/> for a list of the built-in statuses and "
-"what they mean. You can also <link xref=\"set-custom-status\">add custom "
-"status messages</link> to provide more information about your availability "
-"to your contacts."
-msgstr ""
-"Consulte la <link xref=\"status-icons\"/> para obtener una lista de los "
-"estados predefinidos y lo que significan. También puede <link xref=\"set-"
-"custom-status\">añadir mensajes de estado personalizados</link> para "
-"proporcionar a sus contactos más información acerca de su disponibilidad."
-
-#: C/change-status.page:63(note/p)
-msgid ""
-"If you do not use your computer for a while, or if the screensaver is on, "
-"the status will be automatically set to Away."
-msgstr ""
-"Si no usa su equipo durante un rato, o si se activa el salvapantallas, el "
-"estado se cambiará automáticamente a Ausente."
-
-#: C/create-account.page:32(info/desc)
-#| msgid ""
-#| "Register for an account with one of the supported messaging services."
-msgid "Create an account for one of the supported messaging services."
-msgstr "Cree una cuenta en uno de los servicios de mensajería soportados."
-
-#: C/create-account.page:36(page/title)
-#| msgid "Register for a new account"
-msgid "Register a new account"
-msgstr "Registrar una cuenta nueva"
-
-#: C/create-account.page:38(page/p)
-#| msgid ""
-#| "Most account types require you to create an account with a account "
-#| "provider before you can connect using instant messaging applications like "
-#| "<app>Empathy</app>. With some account providers, you can use "
-#| "<app>Empathy</app> to register for a new account, using the same steps as "
-#| "you would to <link xref=\"add-account\">add an account</link>."
-msgid ""
-"Most account types require you to create an account with a service provider "
-"before you can use that account with instant messaging applications. You can "
-"use <app>Empathy</app> to register for a new account with some account "
-"providers using the same steps as you would to <link xref=\"add-account"
-"\">add an account</link>."
-msgstr ""
-"Muchos tipos de cuenta requieren que cree una cuenta con un proveedor de "
-"cuentas antes de poder conectarse y usar aplicaciones de mensajería "
-"instantánea. Con algunos proveedores de cuentas puede usar <app>Empathy</"
-"app> para registrar una cuenta nueva, siguiendo los mismos pasos que "
-"seguiría para <link xref=\"add-account\">añadir una cuenta</link>."
-
-#: C/create-account.page:44(page/p)
-#| msgid ""
-#| "This page provides information on creating a new account for various "
-#| "types of accounts. Your account provider should give you a login ID and a "
-#| "password, as well as any additional information you need to connect using "
-#| "<app>Empathy</app>."
-msgid ""
-"Once you create a new account, your account provider should give you a login "
-"or a username and a password, as well as any additional information you need "
-"to connect using <app>Empathy</app>."
-msgstr ""
-"Una vez que haya creado su nueva cuenta, su proveedor de cuentas debería "
-"proporcionarle un ID o un nombre de usuario de inicio de sesión y una "
-"contraseña, así como otra información adicional que puede necesitar para "
-"conectarse usando <app>Empathy</app>."
-
-#: C/create-account.page:51(section/p)
-msgid ""
-"IRC networks require that you specify a nick (nickname) when you connect to "
-"the server. Some IRC networks use a service, such as NickServ, to allow "
-"users to <link xref=\"irc-nick-password\">protect their nick</link>. If you "
-"did not register your nick or are unable to do so and another user is using "
-"it, then you will need to choose a different one."
-msgstr ""
-"Las redes IRC requieren que especifique un alias (nick) cuando se conecta al "
-"servidor. Algunas redes IRC usan un servicio, como NickServ, para permitir a "
-"los usuarios <link xref=\"irc-nick-password\">proteger su nick</link>. Si no "
-"registra su nick o no puede hacerlo y otra persona lo está usando, deberá "
-"elegir otro diferente."
-
-#: C/create-account.page:57(section/p)
-msgid ""
-"Some IRC servers are password protected. You will need to know the password "
-"to connect to these servers. Generally, these are private IRC networks."
-msgstr ""
-"Algunos servidores de IRC están protegidos con contraseña. Necesitará "
-"conocer la contraseña para conectarse a esos servidores. Generalmente son "
-"redes de IRC privadas."
-
-#: C/create-account.page:62(note/p)
-msgid ""
-"Many GNOME projects use <code>irc.gnome.org</code> for project-related "
-"discussion."
-msgstr ""
-"Muchos proyectos de GNOME usan <code>irc.gnome.org</code> para discusiones "
-"relacionadas con el proyecto."
-
-#: C/create-account.page:68(section/title)
-msgid "Facebook"
-msgstr "Facebook"
-
-#: C/create-account.page:70(section/p)
-#| msgid ""
-#| "Facebook is one of the most-used social networks. It allows users to "
-#| "create their own profile and to communicate with their friends."
-msgid ""
-"Facebook is one of the more popular social networks. It allows users to "
-"create their own profile and to communicate with their friends."
-msgstr ""
-"Facebook es una de las redes sociales más usadas. Permite a los usuarios "
-"crear su propio perfil y comunicarse con sus amigos."
-
-#: C/create-account.page:73(section/p)
-#| msgid ""
-#| "To use Facebook to communicate with your friends, you will need to create "
-#| "a new account from the website: <link href=\"http://www.facebook.com"
-#| "\">www.facebook.com</link>."
-msgid ""
-"To use Facebook to communicate with your friends, you will need to create a "
-"new account from the website: <link href=\"https://www.facebook.com\">www."
-"facebook.com</link>."
-msgstr ""
-"Para usar Facebook para comunicarse con sus amigos necesita crear una cuenta "
-"nueva desde el sitio web: <link href=\"https://www.facebook.com\">www."
-"facebook.com</link>."
-
-#: C/create-account.page:81(section/p)
-msgid ""
-"Jabber is an open instant messaging system. Like email, Jabber allows you to "
-"choose your account provider and communicate with all other Jabber users, "
-"regardless of their account provider."
-msgstr ""
-"Jabber es un sistema de mensajería instantánea abierto. Como el correo-e, "
-"Jabber le permite elegir su proveedor de la cuenta y comunicarse con otros "
-"usuarios de Jabber, independientemente del proveedor de la cuenta."
-
-#: C/create-account.page:85(section/p)
-#| msgid ""
-#| "You will need to create a new account with a Jabber provider. There are "
-#| "many free providers; one popular provider is <link href=\"http://register."
-#| "jabber.org/\">Jabber.org</link>."
-msgid ""
-"You will need to create a new account with a Jabber provider. There are many "
-"free providers; one popular provider is <link href=\"http://register.jabber."
-"org/\">jabber.org</link>."
-msgstr ""
-"Deberá crear una cuenta nueva con un proveedor Jabber. Existen muchos "
-"proveedores libres; un proveedor popular es <link href=\"http://register."
-"jabber.org/\">jabber.org</link>."
-
-#: C/create-account.page:90(note/p)
-#| msgid ""
-#| "If you use Google Mail or Google Talk, you already have a Jabber account. "
-#| "Google Talk is a Jabber service. Simply use your Google Mail address and "
-#| "password in <app>Empathy</app> to connect."
-msgid ""
-"If you use Gmail or Google+ Hangouts, you already have a Jabber account. Use "
-"your Gmail address and password in <app>Empathy</app> to connect."
-msgstr ""
-"Si usa Google Mail o Google+ Hangouts ya tiene una cuenta Jabber. "
-"Simplemente use su dirección de GMail y su contraseña en <app>Empathy</app> "
-"para conectarse."
-
-#: C/create-account.page:99(section/p)
-#| msgid ""
-#| "You do not need to create an account with a service provider to use this "
-#| "feature. This service works whenever you are connected to a local "
-#| "network, such as a wireless hotspot. It automatically finds all other "
-#| "users on the network who are also using this service."
-msgid ""
-"This service works whenever you are connected to a local network, such as a "
-"wireless hotspot, you do not need to create an account with service "
-"providor, just set up your account through <app>Empathy</app>. It "
-"automatically finds all other users on the network who are also using this "
-"service."
-msgstr ""
-"Este servicio funciona siempre que esté conectado a una red local, tal como "
-"un punto inalámbrico; no es necesario crear una cuenta con un proveedor del "
-"servicio, simplemente configure su cuenta en <app>Empathy</app>. "
-"Automáticamente encuentra otros usuarios en la red que estén usando este "
-"servicio."
-
-#: C/create-account.page:105(section/p)
-#| msgid "For more information, see <link xref=\"salut-protocol\"/>."
-msgid ""
-"For more information, see the <link xref=\"salut-protocol\">salut protocol</"
-"link>."
-msgstr ""
-"Para obtener más información consulte el <link xref=\"salut-protocol"
-"\">protocolo salut</link>."
-
-#: C/create-account.page:112(section/p)
-msgid ""
-"SIP is an open system which allows users to have audio and video "
-"conversations over the Internet. You need to create an account with a SIP "
-"provider. You can communicate with all other SIP users, regardless of which "
-"SIP provider they use."
-msgstr ""
-"SIP es un sistema abierto que permite a los usuarios realizar conversaciones "
-"de sonido y vídeo en Internet. Debe crear una cuenta con un proveedor SIP. "
-"Puede comunicarse con todos los usuarios SIP, independientemente del "
-"proveedor SIP que usen."
-
-#: C/create-account.page:117(section/p)
-msgid ""
-"Some SIP providers allow you to call normal phones from your computer. "
-"Generally, you will need to subscribe to a paid service for this feature."
-msgstr ""
-"Algunos proveedores SIP le permiten llamar a teléfonos normales desde su "
-"equipo. Generalmente deberá suscribirse a un servicio de pago para usar esta "
-"característica."
-
-#: C/create-account.page:123(section/title)
-msgid "Proprietary Services"
-msgstr "Servicios propietarios"
-
-#: C/create-account.page:125(section/p)
-#| msgid ""
-#| "There are many proprietary instant messaging services that have been "
-#| "developed by different companies or organizations. <app>Empathy</app> "
-#| "allows you to connect to an existing account for most popular services. "
-#| "To create a new account with one of these services, you will need to "
-#| "visit the service’s web site and agree to its terms of use."
-msgid ""
-"There are many proprietary instant messaging services that have been "
-"developed by different companies or organizations. <app>Empathy</app> allows "
-"you to connect to an existing account for some of these services. To create "
-"a new account with one of these services, you will need to visit the website "
-"for the service."
-msgstr ""
-"Existen muchos servicios propietarios de mensajería instantánea "
-"desarrollados por diferentes empresas u organizaciones. <app>Empathy</app> "
-"le permite conectarse a una cuenta existente de alguno de estos servicios. "
-"Para crear una cuenta nueva con uno de esos servicios deberá visitar el "
-"sitio web del servicio."
-
-#: C/create-account.page:133(item/p)
-msgid "<link href=\"http://dashboard.aim.com/aim\">AIM</link>"
-msgstr "<link href=\"http://dashboard.aim.com/aim\">AIM</link>"
-
-#: C/create-account.page:136(item/p)
-msgid "<link href=\"https://www.icq.com/register/\">ICQ</link>"
-msgstr "<link href=\"https://www.icq.com/register/\">ICQ</link>"
-
-#: C/create-account.page:139(item/p)
-msgid "<link href=\"https://accountservices.passport.net\">MSN</link>"
-msgstr "<link href=\"https://accountservices.passport.net\">MSN</link>"
-
-#: C/create-account.page:142(item/p)
-msgid "<link href=\"https://login.yahoo.com/config/login\">Yahoo!</link>"
-msgstr "<link href=\"https://login.yahoo.com/config/login\">Yahoo!</link>"
-
-#: C/disable-account.page:9(info/desc)
-msgid "Prevent <app>Empathy</app> from automatically logging in to an account."
-msgstr ""
-"Evitar que <app>Empathy</app> inicie sesión automáticamente en una cuenta."
-
-#: C/disable-account.page:40(page/title)
-msgid "Disable an account"
-msgstr "Desactivar una cuenta"
-
-#: C/disable-account.page:42(page/p)
-msgid ""
-"You can disable an account to prevent <app>Empathy</app> from logging in to "
-"it without removing the account entirely. You may wish to disable and re-"
-"enable an account if you only want to be logged in to the account at certain "
-"times, but you still want to use <app>Empathy</app> for other accounts."
-msgstr ""
-"Puede desactivar una cuenta para evitar que <app>Empathy</app> inicie sesión "
-"en ella, sin tener que quitar la cuenta completamente. Puede querer "
-"desactivar una cuenta y reactivarla si sólo quiere iniciar sesión en la "
-"cuenta de vez en cuando, pero sigue queriendo usar <app>Empathy</app> para "
-"otras cuentas."
-
-#: C/disable-account.page:53(item/p)
-msgid ""
-"Select the account you wish to disable from the accounts list on the left "
-"side of the window."
-msgstr ""
-"Seleccione la cuenta que quiere desactivar desde la lista de cuentas en la "
-"parte izquierda de la ventana."
-
-#: C/disable-account.page:57(item/p)
-msgid "On the right side of the window, switch it off."
-msgstr "Desactívela en la parte derecha de la ventana,"
-
-#: C/disable-account.page:62(page/p)
-msgid "To re-enable the account, switch it on."
-msgstr "Para reactivar la cuenta, actívela."
-
-#: C/favorite-rooms.page:10(info/desc)
-msgid "Set, join and manage favorite rooms."
-msgstr "Configurar, unirse a y gestionar salas favoritas."
-
-#: C/favorite-rooms.page:29(page/title)
-msgid "Favorite rooms"
-msgstr "Salas favoritas"
-
-#: C/favorite-rooms.page:32(section/title)
-msgid "Set a room as a favorite"
-msgstr "Establecer una sala como favorita"
-
-#: C/favorite-rooms.page:35(item/p)
-msgid "Join a room."
-msgstr "Unirse a una sala."
-
-#: C/favorite-rooms.page:40(item/p)
-msgid ""
-"See <link xref=\"irc-join-room\"/> for more information on how to join an "
-"IRC room."
-msgstr ""
-"Para obtener más información acerca de cómo unirse a una sala de chat IRC, "
-"consulte la <link xref=\"irc-join-room\"/>."
-
-#: C/favorite-rooms.page:46(item/p)
-msgid ""
-"See <link xref=\"group-conversations\"/> for more information on how to "
-"start or join a group conversation."
-msgstr ""
-"Para obtener más información acerca de cómo unirse a una conversación en "
-"grupo, consulte la <link xref=\"group-conversations\"/>."
-
-#: C/favorite-rooms.page:54(item/p)
-msgid ""
-"From the conversation window, choose <guiseq><gui>Conversation</"
-"gui><gui>Favorite Chat Room</gui></guiseq>."
-msgstr ""
-"Desde la ventana de conversación, elija <guiseq><gui>Conversación</"
-"gui><gui>Sala de chat favorita</gui></guiseq>."
-
-#: C/favorite-rooms.page:63(section/title)
-msgid "Join favorite rooms"
-msgstr "Unirse a las salas favoritas"
-
-#: C/favorite-rooms.page:66(item/p) C/send-file.page:40(item/p)
-msgid "From the <gui>Contact List</gui> window, perform one of the following:"
-msgstr ""
-"En la ventana de la <gui>Lista de contactos</gui> realice una de las "
-"siguientes acciones:"
-
-#: C/favorite-rooms.page:71(item/p)
-msgid "Press <key>F5</key>."
-msgstr "Pulse <key>F5</key>."
-
-#: C/favorite-rooms.page:76(item/p)
-msgid ""
-"Choose <guiseq><gui>Room</gui><gui>Join Favorites</gui></guiseq>, to join "
-"all your favorite rooms."
-msgstr ""
-"Elija <guiseq><gui>Salas</gui><gui>Unirse a las favoritas</gui></guiseq> "
-"para unirse a todas sus salas favoritas."
-
-#: C/favorite-rooms.page:82(item/p)
-msgid "Choose <gui>Room</gui>, and select the favorite room you want to join."
-msgstr ""
-"Elija <gui>Sala</gui> y seleccione la sala favorita a la que quiere unirse."
-
-#: C/favorite-rooms.page:90(note/p)
-msgid ""
-"To join a favorite room, you need to be connected to the Internet and to "
-"your account."
-msgstr ""
-"Para unirse a una sala favorita debe estar conectado a Internet y con la "
-"cuenta."
-
-#: C/favorite-rooms.page:98(section/title)
-msgid "Manage favorite rooms"
-msgstr "Gestionar las salas favoritas"
-
-#: C/favorite-rooms.page:101(item/p)
-msgid ""
-"From the <gui>Contact List</gui> window, choose <guiseq><gui>Room</"
-"gui><gui>Manage Favorites</gui></guiseq>."
-msgstr ""
-"Desde la ventana <gui>Lista de contactos</gui> elija <guiseq><gui>Sala</"
-"gui><gui>Gestionar salas favoritas</gui></guiseq>."
-
-#: C/favorite-rooms.page:107(item/p)
-msgid ""
-"From the <gui>Account</gui> drop-down list, select the account you want to "
-"manage the favorite rooms of."
-msgstr ""
-"Desde la lista desplegable <gui>Cuenta</gui> seleccione la cuenta de la que "
-"quiere gestionar las salas favoritas."
-
-#: C/favorite-rooms.page:111(item/p)
-msgid "Select <gui>All</gui> to see all you favorite rooms."
-msgstr "Pulse <gui>Todas</gui> para entrar en todas sus salas favoritas."
-
-#: C/favorite-rooms.page:116(item/p)
-msgid "Select the favorite room you want to manage:"
-msgstr "Seleccione la sala favorita que quiere gestionar:"
-
-#: C/favorite-rooms.page:121(item/p)
-msgid ""
-"Select the <gui>Auto-Connect</gui> check-box in order to automatically join "
-"that room when you connect to your account."
-msgstr ""
-"Seleccione la casilla de verificación <gui>Autoconectar</gui> para unirse a "
-"esa sala automáticamente al conectarse con la cuenta."
-
-#: C/favorite-rooms.page:127(item/p)
-msgid "Click on <gui>Remove</gui> to remove the room from your favorites."
-msgstr "Pulse <gui>Quitar</gui> para quitar la sala de sus favoritas."
-
-#: C/favorite-rooms.page:134(item/p)
-msgid "When done, click <gui>Close</gui>."
-msgstr "Cuando haya terminado pulse <gui>Cerrar</gui>."
-
-#: C/geolocation.page:8(info/desc)
-msgid "Use and understand geolocation in <app>Empathy</app>."
-msgstr "Usar y entender la geolocalización en <app>Empathy</app>."
-
-#: C/geolocation.page:32(page/title)
-msgid "Geographical position"
-msgstr "Posición geográfica"
-
-#: C/geolocation.page:35(section/title)
-msgid "Geolocation"
-msgstr "Geolocalización"
-
-#: C/geolocation.page:39(section/title)
-msgid "Fix common problems"
-msgstr "Solucionar problemas comunes"
-
-#: C/geolocation-not-showing.page:8(info/desc)
-msgid "<app>Empathy</app> does not publish my geographical position."
-msgstr "<app>Empathy</app> no publica mi posición geográfica."
-
-#: C/geolocation-not-showing.page:32(page/title)
-msgid "Geographical position not published"
-msgstr "Posición geográfica no publicada"
-
-#: C/geolocation-not-showing.page:34(page/p)
-msgid ""
-"If your contacts cannot see your location, <app>Empathy</app> might not be "
-"able to discover with a good margin of precision your geographical position."
-msgstr ""
-"Si sus contactos no ven su posición, <app>Empathy</app> puede no ser capaz "
-"de descubrir su posición geográfica con un buen margen de precisión."
-
-#: C/geolocation-not-showing.page:38(page/p)
-msgid ""
-"In this case, your position will not be published, but you are still able to "
-"see the location of your contacts."
-msgstr ""
-"En este caso no se publicará su posición pero aún podrá ver la posición de "
-"sus contactos."
-
-#: C/geolocation-not-showing.page:42(page/p)
-msgid ""
-"If you want to publish your geographical position, you can try to use an "
-"external device such as a GPS."
-msgstr ""
-"Si quiere publicar su posición geográfica puede intentar usar un dispositivo "
-"externo tal como un GPS."
-
-#: C/geolocation-not-showing.page:48(note/p)
-msgid ""
-"In order to publish your geographical location, your Jabber server needs to "
-"support the Personal Eventing Protocal (PEP). A list of <link href=\"http://"
-"coccinella.im/servers/servers_by_pubsub_pep.html\">servers which support "
-"PEP</link> is maintained online. Google Talk does not support this feature "
-"at this time."
-msgstr ""
-"Para publicar su ubicación geográfica su servidor Jabber debe soportar el "
-"protocolo de eventos personales (PEP). Una lista de los <link href=\"http://"
-"coccinella.im/servers/servers_by_pubsub_pep.html\">servidores que soportan "
-"PEP</link> se mantiene en línea. Por el momento Google Talk no soporta esta "
-"característica."
-
-#: C/geolocation-privacy.page:8(info/desc)
-msgid "What information are sent and to who."
-msgstr "Qué información se envía y a quién."
-
-#: C/geolocation-privacy.page:32(page/title)
-msgid "Geolocation Privacy"
-msgstr "Privacidad en la geolocalización"
-
-#: C/geolocation-privacy.page:35(section/title)
-msgid "What information is sent"
-msgstr "Qué información se envía"
-
-#: C/geolocation-privacy.page:36(section/p)
-msgid ""
-"What is possible to send is: your country, region, locality, area, street, "
-"building, floor, room, and postal code, longitude, latitude and altitude, "
-"speed and bearing."
-msgstr ""
-"Es posible enviar: su país, región, localidad, área, calle, edificio, "
-"planta, habitación, código postal, longitud y altitud, velocidad y "
-"orientación."
-
-#: C/geolocation-privacy.page:40(section/p)
-msgid ""
-"The accuracy and the quantity of information about your geographical "
-"position are based on the software or on the infrastructure used to discover "
-"your position."
-msgstr ""
-"La precisión y cantidad de información acerca de su posición geográfica se "
-"basa en el software o en la infraestructura usada para descubrir su posición."
-
-#: C/geolocation-privacy.page:44(section/p)
-msgid ""
-"Different kind of networks may have different accuracy settings, and may "
-"send different information. The use of external devices such as GPS or "
-"mobile phone will increase the accuracy of the information sent."
-msgstr ""
-"Diferentes tipos de redes pueden tener diferentes ajustes de precisión y "
-"pueden enviar diferente información. El uso de dispositivos externos tales "
-"como un GPS o teléfono móvil puede aumentar la precisión de la información "
-"enviada."
-
-#: C/geolocation-privacy.page:49(section/p)
-msgid ""
-"When the privacy mode is enabled, nothing more precise than your city will "
-"be sent, even if you are using an external device."
-msgstr ""
-"Cuando el modo de privacidad está activado, no se enviará nada más preciso "
-"que la ciudad, incluso si está usando un dispositivo externo."
-
-#: C/geolocation-privacy.page:56(section/title)
-msgid "Who can see the information sent"
-msgstr "Quién puede ver la información enviada"
-
-#: C/geolocation-privacy.page:57(section/p)
-msgid "Only your contacts can see your geographical position."
-msgstr "Sólo sus contactos pueden ver su posición geográfica."
-
-#: C/geolocation-privacy.page:63(section/title)
-msgid "What is the privacy mode"
-msgstr "Cuál es el modo de privacidad"
-
-#: C/geolocation-privacy.page:64(section/p)
-msgid ""
-"The privacy mode, enabled by default, is a reduced accuracy mode that will "
-"decrease the accuracy of the geographical position sent to your contacts."
-msgstr ""
-"El modo de privacidad, activado de forma predeterminada, es un modo de "
-"precisión reducida de la información de posición geográfica enviada a sus "
-"contactos."
-
-#: C/geolocation-privacy.page:71(section/title)
-msgid "Privacy overview"
-msgstr "Visión general de la privacidad"
-
-#: C/geolocation-privacy.page:72(section/p)
-msgid ""
-"Overview of the various geolocation privacy settings in <app>Empathy</app>."
-msgstr ""
-"Visión general de los ajustes de privacidad en la geolocalización de "
-"<app>Empathy</app>."
-
-#: C/geolocation-privacy.page:77(item/p)
-msgid "Geolocation is not enabled by default."
-msgstr "De forma predeterminada la geolocalización no está activada."
-
-#: C/geolocation-privacy.page:82(item/p)
-msgid "Privacy mode is enabled by default."
-msgstr "De forma predeterminada está activado el modo de privacidad."
-
-#: C/geolocation-privacy.page:87(item/p)
-msgid ""
-"Privacy mode prevails even when using external and more precise devices."
-msgstr ""
-"El modo de privacidad prevalece incluso cuando se está usando dispositivos "
-"externos más precisos."
-
-#: C/geolocation-privacy.page:92(item/p)
-msgid "Only your contacts can see your position."
-msgstr "Sólo sus contactos pueden ver su posición."
-
-#: C/geolocation-supported.page:7(info/desc)
-msgid "Services that supports geolocation and compatibility."
-msgstr "Servicios que soportan geolocalización y compatibilidad."
-
-#: C/geolocation-supported.page:31(page/title)
-msgid "Supported services"
-msgstr "Servicios soportados"
-
-#: C/geolocation-supported.page:33(page/p)
-msgid ""
-"The geolocation feature at the moment is compatible only with the Jabber "
-"service. In order to use it, you and your contacts need to have a Jabber "
-"account."
-msgstr ""
-"Por el momento la característica de geolocalización sólo es compatible con "
-"el servicio Jabber. Para usarla usted y sus contactos deben tener una cuenta "
-"Jabber."
-
-#: C/geolocation-supported.page:39(note/p)
-msgid ""
-"It is necessary that also the server you are using supports the geolocation "
-"feature. Most of the Jabber servers support it. See your service website "
-"documentation for more information."
-msgstr ""
-"Es necesario que también el servidor que está usando soporte la "
-"característica de geolocalización. La mayoría de los servidores Jabber la "
-"soporta. Para obtener más información consulte la documentación en la página "
-"web de su servicio."
-
-#: C/geolocation-supported.page:47(section/title)
-msgid "Compatibility"
-msgstr "Compatibilidad"
-
-#: C/geolocation-supported.page:49(section/p)
-msgid ""
-"<app>Empathy</app> geolocation feature is not compatible with other "
-"geographical position services such as <em>Google Latitude</em>, <em>Yahoo "
-"Fire Eagle</em> or <em>Brightkite</em>."
-msgstr ""
-"La característica de geolocalización de <app>Empathy</app> no es compatible "
-"con otros servicios de posición geográfica tales como <em>Google Latitude</"
-"em>, <em>Yahoo Fire Eagle</em> o <em>Brightkite</em>."
-
-#: C/geolocation-turn.page:9(info/desc)
-msgid "How to activate and deactivate geolocation in <app>Empathy</app>."
-msgstr "Cómo activar y desactivar la geolocalización en <app>Empathy</app>."
-
-#: C/geolocation-turn.page:33(page/title)
-msgid "Activate/Deactivate geolocation"
-msgstr "Activar y desactivar la geolocalización"
-
-#: C/geolocation-turn.page:37(item/p)
-msgid "Choose <guiseq><gui>Edit</gui><gui>Preferences</gui></guiseq>."
-msgstr "Elija <guiseq><gui>Editar</gui><gui>Preferencias</gui></guiseq>."
-
-#: C/geolocation-turn.page:42(item/p)
-msgid "Select the <gui>Location</gui> tab."
-msgstr "Seleccione la pestaña <gui>Ubicación geográfica</gui>."
-
-#: C/geolocation-turn.page:47(item/p)
-msgid ""
-"Select <gui>Publish location to my contacts</gui> to activate geolocation."
-msgstr ""
-"Seleccione <gui>Publicar mi ubicación a mis contactos</gui> para activar la "
-"geolocalización."
-
-#: C/geolocation-turn.page:50(item/p)
-msgid "To deactivate geolocation, deselect it."
-msgstr "Para desactivar la geolocalización, deselecciónela."
-
-#: C/geolocation-turn.page:55(item/p)
-msgid ""
-"To increase the accuracy of your position, deselect <gui>Reduce location "
-"accuracy</gui>."
-msgstr ""
-"Para aumentar la precisión de su posición, deseleccione <gui>Reducir la "
-"precisión de la ubicación</gui>."
-
-#: C/geolocation-turn.page:61(item/p)
-msgid ""
-"If you have an external device like a GPS or want to send a more accurate "
-"position, select the appropriate option in the <gui>Location sources</gui> "
-"section."
-msgstr ""
-"Si tiene un dispositivo externo como un GPS y quiere enviar una posición más "
-"precisa, seleccione la opción apropiada en la sección <gui>Orígenes de las "
-"ubicaciones</gui>."
-
-#: C/geolocation-what-is.page:9(info/desc)
-msgid "Understanding geolocation."
-msgstr "Entender la geolocalización"
-
-#: C/geolocation-what-is.page:33(page/title)
-msgid "What is geolocation"
-msgstr "¿Qué es la geolocalización?"
-
-#: C/geolocation-what-is.page:35(page/p)
-msgid ""
-"Geolocation allows you to identify the real geographical location of a "
-"computer or a device connected to the Internet."
-msgstr ""
-"La geolocalización le permite identificar la ubicación geográfica real de un "
-"equipo o un dispositivo conectado a internet."
-
-#: C/geolocation-what-is.page:37(page/p)
-msgid "With geolocation in <app>Empathy</app> you can:"
-msgstr "Con la geolocalización de <app>Empathy</app> puede:"
-
-#: C/geolocation-what-is.page:42(item/p)
-msgid "Publish your geographical location to your contacts."
-msgstr "Publicar su información geográfica a sus contactos."
-
-#: C/geolocation-what-is.page:47(item/p)
-msgid "See your contacts’ geographical location and quickly contact them."
-msgstr ""
-"Vea la ubicación geográfica de sus contactos y contacte con ellos "
-"rápidamente."
-
-#: C/geolocation-what-is.page:52(item/p)
-msgid ""
-"Set the accuracy of your location and the device used to discover your "
-"location."
-msgstr ""
-"Establezca la precisión de su ubicación y el dispositivo que usar para "
-"descubrir su ubicación."
-
-#: C/geolocation-what-is.page:60(note/p)
-msgid ""
-"In order to see your contacts’ geographical locations, they need to use a "
-"service and an application that supports geolocation."
-msgstr ""
-"Para poder ver las ubicaciones geográficas de sus contactos, éstos deben "
-"usar un servicio y una aplicación que soporte geolocalización."
-
-#: C/group-conversations.page:8(info/desc)
-msgid "Start or join a group conversation with your contacts."
-msgstr "Iniciar o unirse a un grupo de conversación con sus contactos."
-
-#: C/group-conversations.page:34(page/title)
-msgid "Group conversations"
-msgstr "Conversaciones en grupo"
-
-#: C/group-conversations.page:36(page/p)
-msgid ""
-"Group conversations permits you to have text conversations with more than "
-"one contact at the same time."
-msgstr ""
-"Las conversaciones en grupo le permite mantener conversaciones de texto con "
-"más de un contacto al mismo tiempo."
-
-#: C/group-conversations.page:40(page/p)
-msgid ""
-"To have a group conversation you need to have a registered account with "
-"either Jabber or Google Talk, or a People Nearby account."
-msgstr ""
-"Para tener una conversación en grupo debe haber registrado una cuenta en "
-"Jabber o Google Talk, o en Gente cerca."
-
-#: C/group-conversations.page:46(note/p)
-msgid ""
-"You can have a group conversation only with the contacts that are using the "
-"same service as yours."
-msgstr ""
-"Puede tener conversaciones en grupo sólo con los contactos que usan el mismo "
-"servicio que el suyo."
-
-#: C/group-conversations.page:54(section/title)
-msgid "Start a group conversation"
-msgstr "Iniciar una conversación en grupo"
-
-#: C/group-conversations.page:58(item/p)
-#: C/group-conversations.page:122(item/p) C/irc-join-room.page:39(item/p)
-msgid ""
-"From the <gui>Contact List</gui> window, choose <guiseq><gui>Room</"
-"gui><gui>Join</gui></guiseq>."
-msgstr ""
-"Desde la ventana <gui>Lista de contactos</gui> elija <guiseq><gui>Sala</"
-"gui><gui>Unirse</gui></guiseq>."
-
-#: C/group-conversations.page:63(item/p)
-msgid ""
-"From the <gui>Account</gui> drop-down list, select the account you want to "
-"use for the group conversation."
-msgstr ""
-"Desde la lista desplegable <gui>Cuenta</gui> seleccione la cuenta que quiera "
-"usar para la conversación en grupo."
-
-#: C/group-conversations.page:69(item/p)
-msgid ""
-"In the <gui>Server</gui> text box, type the name of server in which the "
-"conversation will be hosted."
-msgstr ""
-"En la caja de texto <gui>Servidor</gui> escriba el nombre del servidor en el "
-"que se hospedará la conversación."
-
-#: C/group-conversations.page:73(item/p)
-msgid "Leave it empty if it will be on the current server."
-msgstr "Déjelo vacío si será en el servidor actual."
-
-#: C/group-conversations.page:78(item/p)
-msgid ""
-"In the <gui>Room</gui> text box, type the name you want to give to the "
-"conversation."
-msgstr ""
-"En la caja de texto <gui>Sala</gui> escriba el nombre que quiere darle a la "
-"conversación."
-
-#: C/group-conversations.page:82(note/p)
-msgid ""
-"This will be the name of the room you are going to have a conversation. This "
-"name will be publicly available for other people to join. It is not possible "
-"to create a private room."
-msgstr ""
-"Este será el nombre de la sala en la que va a tener una conversación. Este "
-"nombre estará públicamente disponible para que otras personas se unan. No es "
-"posible crear una sala privada."
-
-#: C/group-conversations.page:90(item/p)
-msgid ""
-"To invite other contacts to join the group conversation, from the "
-"<gui>Contact List</gui> window, select the contact you want to invite, and "
-"perform one of the following:"
-msgstr ""
-"Para invitar a otros contactos a unirse a la conversación en grupo, desde la "
-"ventana <gui>Lista de contactos</gui> seleccione el contacto al que quiere "
-"invitar y realice una de las siguientes acciones:"
-
-#: C/group-conversations.page:97(item/p)
-msgid "Right-click on the contact and choose <gui>Invite to chatroom</gui>."
-msgstr ""
-"Pulse con el botón derecho del ratón sobre el contacto y elija <gui>Invitar "
-"a la sala de chat</gui>."
-
-#: C/group-conversations.page:102(item/p)
-msgid ""
-"Choose <guiseq><gui>Edit</gui><gui>Contact</gui><gui>Invite to chatroom</"
-"gui></guiseq>."
-msgstr ""
-"Elija <guiseq><gui>Editar</gui><gui>Contacto</gui><gui>Invitar a la sala de "
-"chat</gui></guiseq>."
-
-#: C/group-conversations.page:107(item/p)
-msgid ""
-"If you have more than one group conversation open, select the one you want "
-"to invite your contacts."
-msgstr ""
-"Si tiene más de una conversación en grupo abierta, seleccione en la quiere "
-"invitar a sus contactos."
-
-#: C/group-conversations.page:118(section/title)
-msgid "Join a group conversation"
-msgstr "Unirse a una conversación en grupo"
-
-#: C/group-conversations.page:128(item/p)
-msgid "Expand the <gui>Room List</gui> section to see all the existing rooms."
-msgstr ""
-"Expanda la sección <gui>Lista de salas</gui> para ver todas las salas "
-"existentes."
-
-#: C/group-conversations.page:133(item/p)
-msgid "Double-click on the name of a room to join it."
-msgstr "Pulse dos veces sobre el nombre de una sala a la que quiera unirse."
-
-#: C/group-conversations.page:139(section/p)
-msgid ""
-"It is not possible to join all existing rooms. Some of the rooms might "
-"require a password, or might be invitation only. <app>Empathy</app> does not "
-"support these kind of rooms."
-msgstr ""
-"No es posible unirse a todas las salas existentes. Algunas salas pueden "
-"requerir una contraseña o pueden ser de sólo invitación. <app>Empathy</app> "
-"no soporta este tipo de salas."
-
-#: C/hide-contacts.page:8(info/desc)
-msgid "Hide the offline contacts from your <gui>Contact List</gui>."
-msgstr ""
-"Ocultar los contactos desconectados de su <gui>Lista de contactos</gui>."
-
-#: C/hide-contacts.page:19(page/title)
-msgid "Hide offline contacts"
-msgstr "Ocultar contactos desconectados"
-
-#: C/hide-contacts.page:21(page/p)
-msgid ""
-"Normally, <app>Empathy</app> shows all your contacts: those that are online, "
-"with which you can have a conversation, and also those that are offline."
-msgstr ""
-"Generalmente <app>Empathy</app> muestra todos contactos: los que están "
-"conectados, con los que puede establecer una conversación, y también los que "
-"están desconectados."
-
-#: C/hide-contacts.page:25(page/p)
-msgid "To hide the contacts that are offline:"
-msgstr "Para ocultar los contactos desconectados:"
-
-#: C/hide-contacts.page:31(item/p)
-msgid ""
-"From the <gui>Contact List</gui> window, choose <guiseq><gui>View</gui> "
-"<gui>Offline Contacts</gui></guiseq>, or press <keyseq><key>Ctrl</key> "
-"<key>H</key></keyseq>."
-msgstr ""
-"Desde la ventana <gui>Lista de contactos</gui> elija <guiseq><gui>Ver</"
-"gui><gui>Contactos desconectados</gui></guiseq> o pulse <keyseq><key>Ctrl</"
-"key><key>H</key></keyseq>."
-
-#: C/hide-contacts.page:36(item/p)
-msgid "To show the offline contacts again, repeat the same procedure above."
-msgstr ""
-"Para mostrar los contactos desconectados de nuevo, repita el mismo "
-"procedimiento anterior."
-
-#: C/import-account.page:10(info/desc)
-msgid "Import an account from another instant messaging application."
-msgstr "Importar una cuenta de otra aplicación de mensajería instantánea."
-
-#: C/import-account.page:19(credit/name)
-msgid "Peter Haslam"
-msgstr "Peter Haslam"
-
-#: C/import-account.page:42(page/title)
-msgid "Import an existing account"
-msgstr "Importar una cuenta existente"
-
-#: C/import-account.page:44(page/p)
-msgid ""
-"The first time you run <app>Empathy</app>, it will offer to import your "
-"accounts from other instant messaging applications. Currently, the only "
-"supported application is <app>Pidgin</app>."
-msgstr ""
-"La primera vez que ejecuta <app>Empathy</app> se le ofrecerá importar sus "
-"cuentas de otras aplicaciones de mensajería instantánea. Actualmente la "
-"única aplicación soportada es <app>Pidgin</app>."
-
-#: C/import-account.page:50(item/p)
-msgid ""
-"Run <app>Empathy</app> for the first time. An assistant will offer you a "
-"number of options to create new accounts."
-msgstr ""
-"Ejecute <app>Empathy</app> por primera vez. un asistente le ofrecerá un "
-"número de opciones para crear cuentas nuevas."
-
-#: C/import-account.page:54(item/p)
-msgid ""
-"Select <gui>Yes, import my account details from</gui> and click "
-"<gui>Forward</gui>."
-msgstr ""
-"Seleccione <gui>Sí, importar los detalles de mi cuenta desde</gui> y pulse "
-"<gui>Siguiente</gui>."
-
-#: C/import-account.page:58(item/p)
-msgid "Select the check box next to each account you wish to import."
-msgstr ""
-"Seleccione la casilla de verificación junto a cada cuenta que quiera "
-"importar."
-
-#: C/import-account.page:66(note/p)
-msgid ""
-"It is not currently possible to import accounts after you have completed the "
-"first-run assistant."
-msgstr ""
-"Actualmente no es posible importar cuentas después de haber completado el "
-"asistente de primera ejecución."
-
-#. This is a reference to an external file such as an image or video. When
-#. the file changes, the md5 hash will change to let you know you need to
-#. update your localized copy. The msgstr is not used at all. Set it to
-#. whatever you like once you have updated your copy of the file.
-#: C/introduction.page:41(media)
-msgctxt "_"
-msgid ""
-"external ref='figures/empathy-main-window.png' "
-"md5='54908dcb2588beddb15ef0968d2c2582'"
-msgstr ""
-"external ref='figures/empathy-main-window.png' "
-"md5='54908dcb2588beddb15ef0968d2c2582'"
-
-#: C/introduction.page:9(info/desc)
-msgid "Introduction to the <app>Empathy</app> instant messenger."
-msgstr "Introducción al programa de mensajería instantánea <app>Empathy</app>."
-
-#: C/introduction.page:21(page/title)
-msgid "Introduction"
-msgstr "Introducción"
-
-#: C/introduction.page:23(page/p)
-msgid ""
-"<app>Empathy</app> is an instant messaging application for the GNOME "
-"Desktop. It supports text messaging, voice &amp; video calls, file "
-"transfers, and all the most used messaging systems such as MSN and Google "
-"Talk."
-msgstr ""
-"<app>Empathy</app> es una aplicación de mensajería instantánea para el "
-"Escritorio GNOME. soporte mensajes de texto, llamadas de voz y "
-"vídeollamadas, transferencias de archivos y los sistemas de mensajería más "
-"populares como MSN y Google Talk."
-
-#: C/introduction.page:28(page/p)
-msgid ""
-"<app>Empathy</app> includes features that help you better collaborate while "
-"at work, and that let you easily keep in touch with your friends."
-msgstr ""
-"<app>Empathy</app> incluye características que le ayudarán a colaborar mejor "
-"en el trabajo y le permitirán mantener en contacto con sus amigos fácilmente."
-
-#: C/introduction.page:32(page/p)
-msgid ""
-"Using <app>Empathy</app>, you can group all the conversations in a single "
-"window, have multiple windows for different kind of conversations, easily "
-"search through your previous conversations, and share your desktop in just "
-"two clicks."
-msgstr ""
-"Usando <app>Empathy</app> puede agrupar las conversaciones en una sola "
-"ventana o tener múltiples ventanas para los diferentes tipos de "
-"conversaciones; búsqueda fácil de sus conversaciones anteriores y "
-"compartición de su escritorio con sólo un par de pulsaciones de ratón."
-
-#: C/introduction.page:39(figure/title)
-msgid "<gui>Contact List</gui> window"
-msgstr "Ventana de <gui>Lista de contactos</gui>"
-
-#: C/introduction.page:40(figure/desc)
-msgid "<app>Empathy</app> main window"
-msgstr "Ventana principal de <app>Empathy</app>"
-
-#: C/introduction.page:42(media/p)
-msgid "<app>Empathy</app> main window."
-msgstr "Ventana principal de <app>Empathy</app>."
-
-#: C/irc-commands.page:7(info/desc)
-msgid "The supported IRC commands."
-msgstr "Los comandos de IRC soportados."
-
-#: C/irc-commands.page:18(page/title)
-msgid "Supported IRC commands"
-msgstr "Comandos IRC soportados"
-
-#: C/irc-commands.page:19(page/p)
-msgid ""
-"To see the list of the supported IRC commands, in a chat room type <input>/"
-"help</input> and press <key>Enter</key>."
-msgstr ""
-"Para ver una lista de los comandos de IRC soportados, en una sala de chat "
-"escriba <input>/help</input> y pulse <key>Intro</key> "
-
-#: C/irc-commands.page:24(note/p)
-msgid "All commands available have a small description on their usage."
-msgstr ""
-"Todos los comandos disponibles tienen una pequeña descripción acerca de su "
-"uso."
-
-#: C/irc-join-pwd.page:9(info/desc)
-msgid "Enter password-protected IRC chat rooms."
-msgstr "Introduzca la contraseña para salas de chat IRC protegidas."
-
-#: C/irc-join-pwd.page:25(page/title)
-msgid "Join a protected IRC chat room"
-msgstr "Unirse a una sala de chat protegida en el IRC"
-
-#: C/irc-join-pwd.page:27(page/p)
-msgid ""
-"On some IRC networks, private IRC rooms may be protected with a password. If "
-"you know the password, use the following steps to join:"
-msgstr ""
-"En algunas redes IRC las salas privadas de IRC pueden estar protegidas por "
-"contraseña. Si sabe la contraseña, realice los siguientes pasos para unirse:"
-
-#: C/irc-join-pwd.page:33(item/p)
-msgid "<link xref=\"irc-join-room\">Join the room</link> as normal."
-msgstr "<link xref=\"irc-join-room\">Unirse a la sala</link> de forma normal."
-
-#: C/irc-join-pwd.page:38(item/p)
-msgid ""
-"Empathy will prompt you for a password. Enter the password for the IRC chat "
-"room and click <gui style=\"button\">Join</gui>."
-msgstr ""
-"Empathy le preguntará la contraseña. Introduzca la contrseña para la sala de "
-"chat IRC y pulse <gui style=\"button\">Unirse</gui>."
-
-#: C/irc-join-room.page:8(info/desc)
-msgid "Join an IRC channel."
-msgstr "Entrar en un canal IRC."
-
-#: C/irc-join-room.page:31(page/title)
-msgid "Join an IRC chat room"
-msgstr "Unirse a una sala en el IRC"
-
-#: C/irc-join-room.page:33(page/p)
-msgid ""
-"You can join IRC chat rooms (also known as IRC channels) on any IRC network "
-"you’re connected to. To connect to an IRC network, see <link xref=\"add-"
-"account\"/> and <link xref=\"account-irc\"/>."
-msgstr ""
-"Puede unirse a salas de chat IRC (también conocidos como canales de IRC) en "
-"cualquier red de IRC a la que esté conectado. Para conectarse a una red de "
-"IRC consulte la <link xref=\"add-account\"/> y la <link xref=\"account-irc\"/"
-">."
-
-#: C/irc-join-room.page:45(item/p)
-msgid ""
-"From the <gui>Account</gui> drop-down list, select the IRC account that "
-"corresponds to the network you want to use."
-msgstr ""
-"Desde la lista desplegable <gui>Cuenta</gui> elija la cuenta IRC que "
-"corresponda con la red que quiere usar."
-
-#: C/irc-join-room.page:51(item/p)
-msgid ""
-"In the <gui>Room</gui> text box, type the name of the channel you want to "
-"join. IRC channel names start with the hash character (<sys>#</sys>)."
-msgstr ""
-"En la caja de texto <gui>Sala</gui>, escriba el nombre del canal de IRC al "
-"que quiere unirse. Preceda el nombre con el carácter almohadilla (<sys>#</"
-"sys>)."
-
-#: C/irc-join-room.page:57(item/p)
-msgid "Click <gui>Join</gui> to enter the room."
-msgstr "Pulse <gui>Unirse</gui> para entrar en la sala."
-
-#: C/irc-join-room.page:64(note/p)
-msgid ""
-"To join multiple rooms, you need to repeat the steps above for each room."
-msgstr ""
-"Para entrar en varias salas, debe repetir los pasos anteriores para cada "
-"sala."
-
-#: C/irc-manage.page:9(info/desc)
-msgid "How to use IRC with <app>Empathy</app>."
-msgstr "Cómo usar el IRC con <app>Empathy</app>."
-
-#: C/irc-manage.page:23(credit/name)
-msgid "Sindhu S"
-msgstr "Sindhu S"
-
-#: C/irc-manage.page:39(page/title)
-msgid "Internet Relay Chat (IRC)"
-msgstr "Internet Relay Chat (IRC)"
-
-#: C/irc-manage.page:47(when/p)
-msgid ""
-"<link action=\"install:telepathy-idle\" xref=\"index\"> Install telepathy-"
-"idle</link>"
-msgstr ""
-"<link action=\"install:telepathy-idle\" xref=\"index\"> Instalar telepathy-"
-"idle</link>"
-
-#: C/irc-manage.page:55(info/title)
-msgctxt "link"
-msgid "IRC Chat Rooms and Conversations"
-msgstr "Salas de chat y conversaciones en el IRC"
-
-#: C/irc-manage.page:57(section/title)
-msgid "Chat Rooms and Conversations"
-msgstr "Salas de chat y conversaciones"
-
-#: C/irc-manage.page:62(info/title)
-msgctxt "link"
-msgid "Common IRC Problems"
-msgstr "Problemas comunes en el IRC"
-
-#: C/irc-nick-password.page:10(info/desc)
-msgid "Protect your nickname to prevent other IRC users from using it."
-msgstr "Proteja su apodo para prevenir que otros usuarios del IRC lo usen."
-
-#: C/irc-nick-password.page:33(page/title)
-msgid "Use a nickname password on IRC"
-msgstr "Usar una contraseña para un apodo en el IRC"
-
-#: C/irc-nick-password.page:35(page/p)
-msgid ""
-"On some IRC networks, you can register your nickname with a service called "
-"NickServ. By sending special messages to NickServ, you can set your password "
-"and identify yourself. Some IRC chat rooms may not allow you to join without "
-"a registered nickname."
-msgstr ""
-"En algunas redes de IRC puede registrar su apodo con un servicio llamado "
-"NickServ. Enviando mensajes especiales a NickServ puede configurar su "
-"contraseña e identificarse. Puede que algunas salas de chat IRC no le "
-"permitan unirse sin un nombre registrado."
-
-#: C/irc-nick-password.page:40(page/p)
-msgid ""
-"<app>Empathy</app> does not currently support nickname registration. Some "
-"IRC networks, however, will automatically forward a <em>server password</em> "
-"to NickServ. On these networks, you can use the IRC password in "
-"<app>Empathy</app> to identify yourself to NickServ. The popular freenode "
-"network is known to have this feature."
-msgstr ""
-"Actualmente <app>Empathy</app> no soporta el registro de apodos. No obstante "
-"algunos servidores de IRC reenviarán automáticamente una <em>contraseña de "
-"servidor</em> a NickServ. En esas redes podrá usar contraseñas de IRC en "
-"<app>Empathy</app> para identificarse contra NickServ. Se sabe que la "
-"popular red freenode dispone de esta característica."
-
-#: C/irc-nick-password.page:46(page/p)
-msgid "To set an IRC server password:"
-msgstr "Para establecer una contraseña de servidor de IRC:"
-
-#: C/irc-nick-password.page:54(item/p)
-msgid "Select the IRC account from the list on the left of the dialog."
-msgstr ""
-"Seleccione la cuenta de IRC de la lista en la parte izquierda del diálogo."
-
-#: C/irc-nick-password.page:57(item/p)
-msgid ""
-"In the <gui>Password</gui> field, type the password you used to register "
-"your nikcname."
-msgstr ""
-"En la caja de texto <gui>Contraseña</gui> escriba la contraseña que quiere "
-"usar para registrar su apodo."
-
-#: C/irc-nick-password.page:69(note/p)
-msgid ""
-"These instructions only allow you to use a password-protected nickname on "
-"certain IRC networks. It is not currently possible to register an IRC "
-"nickname or change your nickname password using <app>Empathy</app>."
-msgstr ""
-"Estas instrucciones sólo le permiten usar un apodo protegido por contraseña "
-"en ciertas redes de IRC. Actualmente no es posible registrar un apodo IRC o "
-"cambiar la contraseña de su apodo con <app>Empathy</app>."
-
-#: C/irc-send-file.page:9(info/desc)
-msgid "<app>Empathy</app> does not currently support sending files using IRC."
-msgstr ""
-"Actualmente <app>Empathy</app> no soporta enviar archivos a través del IRC."
-
-#: C/irc-send-file.page:31(page/title)
-msgid "Send files over IRC"
-msgstr "Enviar archivos a través del IRC"
-
-#: C/irc-send-file.page:33(page/p)
-msgid "It is not currently possible to send files using IRC."
-msgstr "Actualmente no es posible enviar archivos a través del IRC."
-
-#: C/irc-start-conversation.page:8(info/desc)
-msgid "Start a conversation with an IRC contact."
-msgstr "Iniciar una conversación con un contacto del IRC."
-
-#: C/irc-start-conversation.page:30(page/title)
-msgid "Chat with somebody on IRC"
-msgstr "Charlar con alguien en el IRC"
-
-#: C/irc-start-conversation.page:32(page/p)
-msgid ""
-"You can hold private conversations with other IRC users, outside of the "
-"public IRC chat rooms. To start a conversation with another IRC user:"
-msgstr ""
-"Puede mantener conversaciones privadas con otros usuarios del IRC, fuera de "
-"las salas públicas del IRC. Para iniciar una conversación con otro usuario "
-"del IRC:"
-
-#: C/irc-start-conversation.page:37(item/p)
-msgid ""
-"In the contact list for an IRC chat room, double click the name of the user "
-"you want to chat with. Alternatively, right click the name of the user and "
-"choose <gui>Chat</gui>."
-msgstr ""
-"En la lista de contactos para la sala de chat del IRC, pulse dos veces en el "
-"nombre del usuario con el que quiere charlar. Alternativamente, pulse con el "
-"botón derecho del ratón sobre el nombre del usuario y elija <gui>Chat</gui>."
-
-#: C/irc-start-conversation.page:45(item/p)
-msgid ""
-"The IRC room contact list is not the same as <app>Empathy</app> contact "
-"list. It contains a list of users in the IRC chat room you joined. Different "
-"rooms can have different contacts listed."
-msgstr ""
-"La lista de contactos de la sala IRC no es igual que la lista de contactos "
-"de <app>Empathy</app>. Contiene una lista de usuarios en la sala de chat del "
-"IRC a la que se ha unido. Salas diferentes pueden tener diferentes listados "
-"de contactos."
-
-#: C/irc-start-conversation.page:52(item/p)
-msgid ""
-"The IRC room contact list is usually on the right side of the IRC room "
-"window. If you do not see it, choose <guiseq><gui>Conversation</"
-"gui><gui>Show Contact List</gui></guiseq>."
-msgstr ""
-"La lista de contactos de una sala IRC generalmente está en la parte derecha "
-"de la ventana de la sala del IRC. Si no la ve elija "
-"<guiseq><gui>Conversación</gui><gui>Mostrar lista de contactos</gui></"
-"guiseq>."
-
-#: C/license.page:8(info/desc)
-msgid "Legal information."
-msgstr "Información legal."
-
-#: C/license.page:11(page/title)
-msgid "License"
-msgstr "Licencia"
-
-#: C/license.page:12(page/p)
-msgid ""
-"This work is distributed under a CreativeCommons Attribution-Share Alike 3.0 "
-"Unported license."
-msgstr ""
-"Este trabajo está licenciado bajo una Licencia Creative Commons Atribución - "
-"Compartir igual 3.0 sin soporte."
-
-#: C/license.page:20(page/p)
-msgid "You are free:"
-msgstr "Es libre de:"
-
-#: C/license.page:25(item/title)
-msgid "<em>To share</em>"
-msgstr "<em>Compartir</em>"
-
-#: C/license.page:26(item/p)
-msgid "To copy, distribute and transmit the work."
-msgstr "Copiar, distribuir y comunicar públicamente la obra"
-
-#: C/license.page:29(item/title)
-msgid "<em>To remix</em>"
-msgstr "<em>Hacer obras derivadas</em>"
-
-#: C/license.page:30(item/p)
-msgid "To adapt the work."
-msgstr "Adaptar el trabajo."
-
-#: C/license.page:33(page/p)
-msgid "Under the following conditions:"
-msgstr "Bajo las siguientes condiciones:"
-
-#: C/license.page:38(item/title)
-msgid "<em>Attribution</em>"
-msgstr "<em>Atribución</em>"
-
-#: C/license.page:39(item/p)
-msgid ""
-"You must attribute the work in the manner specified by the author or "
-"licensor (but not in any way that suggests that they endorse you or your use "
-"of the work)."
-msgstr ""
-"Debe reconocer los créditos de la obra de la manera especificada por el "
-"autor o el licenciador (pero no de una manera que sugiera que tiene su apoyo "
-"o apoyan el uso que hace de su obra)."
-
-#: C/license.page:46(item/title)
-msgid "<em>Share Alike</em>"
-msgstr "<em>Compartir igual</em>"
-
-#: C/license.page:47(item/p)
-msgid ""
-"If you alter, transform, or build upon this work, you may distribute the "
-"resulting work only under the same, similar or a compatible license."
-msgstr ""
-"Si transforma o modifica esta obra para crear una obra derivada, sólo puede "
-"distribuir la obra resultante bajo la misma licencia, una de similar o una "
-"de compatible."
-
-#: C/license.page:53(page/p)
-msgid ""
-"For the full text of the license, see the <link href=\"http://"
-"creativecommons.org/licenses/by-sa/3.0/legalcode\">CreativeCommons website</"
-"link>, or read the full <link href=\"http://creativecommons.org/licenses/by-"
-"sa/3.0/\">Commons Deed</link>."
-msgstr ""
-"Para ver el texto completo de la licencia consulte la <link href=\"http://"
-"creativecommons.org/licenses/by-sa/3.0/legalcode/\">página web de Creative "
-"Commons</link> o lea el<link href=\"http://creativecommons.org/licenses/by-"
-"sa/3.0/\">Escrito de Commons</link>."
-
-#: C/link-contacts.page:11(info/desc)
-msgid "Merge and separate different contacts into a single one."
-msgstr "Unir y separar diferentes contactos en uno solo."
-
-#: C/link-contacts.page:19(credit/name)
-msgid "Shobha Tyagi"
-msgstr "Shobha Tyagi"
-
-#: C/link-contacts.page:29(page/title)
-msgid "Link and unlink contacts"
-msgstr "Enlazar y desenlazar contactos"
-
-#: C/link-contacts.page:30(page/p)
-msgid ""
-"If one or more of your contacts has multiple accounts with different "
-"messaging services, you can combine these accounts into a single contact."
-msgstr ""
-"Si uno o más de sus contactos tienen varias cuentas con diferentes servicios "
-"de mensajería, puede combinar esas cuentas en uno sola."
-
-#: C/link-contacts.page:34(page/p)
-msgid ""
-"The resulting contact is called a <em>meta-contact</em>: a contact composed "
-"from different single contacts."
-msgstr ""
-"Al contacto resultante se le llama <em>metacontacto</em>: un contacto "
-"compuesto de diferentes contactos simples."
-
-#: C/link-contacts.page:38(page/p)
-msgid ""
-"Suppose you have a contact called Jane Smith who is using three different "
-"messaging services like:"
-msgstr ""
-"Suponga que tiene un contacto llamado Juan Pérez que usa tres servicios de "
-"mensajería de contactos como:"
-
-#: C/link-contacts.page:44(item/p)
-msgid "janes@facebook"
-msgstr "juan@facebook"
-
-#: C/link-contacts.page:49(item/p)
-msgid "jane.smith@gmail"
-msgstr "juan.perez@gmail"
-
-#: C/link-contacts.page:54(item/p)
-msgid "jane_smith@hotmail"
-msgstr "juan_perez@hotmail"
-
-#: C/link-contacts.page:59(page/p)
-msgid "You can combine these contacts into a single Jane Smith one."
-msgstr "Puede combinar estos contactos en un solo Juan Pérez."
-
-#: C/link-contacts.page:63(section/title)
-msgid "Link contacts"
-msgstr "Enlazar contactos"
-
-#: C/link-contacts.page:64(section/p)
-msgid "The way you can link your contacts is as follows:"
-msgstr "Puede enlazar sus contactos de la siguiente manera:"
-
-#: C/link-contacts.page:69(item/p)
-msgid ""
-"Press the tick button to select entries you want to link. This will enable "
-"<em>selection mode</em> and you can see a checkbox for each entry."
-msgstr ""
-"Pulse el botón para seleccionar las entradas que quiere enlazar. Esto "
-"activará el <em>modo de selección</em> y verá una casilla por cada entrada."
-
-#: C/link-contacts.page:75(item/p)
-msgid ""
-"Tick the checkboxes that correspond to the <app>Contacts</app> entries which "
-"belong to the same contact."
-msgstr ""
-"Marque las casillas que corresponden a las entradas de <app>Contactos</app> "
-"que pertenecen al mismo contacto."
-
-#: C/link-contacts.page:81(item/p)
-msgid "Press <gui style=\"button\">Link</gui>."
-msgstr "Pulse <gui style=\"button\">Enlazar</gui>."
-
-#: C/link-contacts.page:86(section/p)
-msgid "Repeat steps 3 and 4 in order to link other contacts."
-msgstr "Repita los pasos 3 y 4 para enlazar otros contactos."
-
-#: C/link-contacts.page:92(section/title)
-msgid "Unlink contacts"
-msgstr "Desenlazar contactos"
-
-#: C/link-contacts.page:93(section/p)
-msgid "To unlink a linked contact:"
-msgstr "Para desenlazar un contacto enlazado:"
-
-#: C/link-contacts.page:98(item/p)
-msgid "Select the contact from your list."
-msgstr "Seleccione el contacto de su lista."
-
-#: C/link-contacts.page:103(item/p)
-msgid ""
-"Press <gui style=\"button\">Edit</gui> in the top-right corner of "
-"<app>Contacts</app>."
-msgstr ""
-"Pulse <gui style=\"button\">Editar</gui> en la esquina superior derecha de "
-"<app>Contactos</app>."
-
-#: C/link-contacts.page:108(item/p)
-msgid "Press <gui style=\"button\">Linked Contacts</gui>."
-msgstr "Pulse <gui style=\"button\">Contactos enlazados</gui>."
-
-#: C/link-contacts.page:113(item/p)
-msgid ""
-"Press <gui style=\"button\">Remove</gui> to unlink an entry from the linked "
-"contact."
-msgstr ""
-"Pulse <gui style=\"button\">Quitar</gui> para desenlazar una entrada de un "
-"contacto enlazado."
-
-#: C/link-contacts.page:118(item/p)
-msgid ""
-"Press <gui style=\"button\">Close</gui> if you do not want to unlink any "
-"more contacts."
-msgstr ""
-"Pulse <gui style=\"button\">Cerrar</gui> si no quiere desenlazar más "
-"contactos."
-
-#: C/link-contacts.page:123(item/p)
-msgid "Finally, press <gui style=\"button\">Done</gui> to finish editing."
-msgstr ""
-"Finalmente, pulse <gui style=\"button\">Hecho</gui> para terminar la edición."
-
-#: C/overview.page:9(info/desc)
-msgid "What instant messaging is and how you can use it."
-msgstr "Qué es la mensajería instantánea y cómo puede usarla."
-
-#: C/overview.page:13(credit/name)
-msgid "Aruna S"
-msgstr "Aruna S"
-
-#: C/overview.page:25(page/title)
-msgid "Overview of instant messaging"
-msgstr "Visión general de la mensajería instantánea"
-
-#: C/overview.page:27(page/p)
-msgid ""
-"Instant messaging, sometimes abbreviated to IM, is a text-based means to "
-"communicate instantly over the internet and the local network. While some IM "
-"applications work with only one type of account, others, including <link "
-"xref=\"introduction\">Empathy</link>, provide IM facilities by using <link "
-"xref=\"add-account\">accounts</link> from different service providers. Some "
-"of these even support audio and video calling."
-msgstr ""
-"La mensajería instantánea, abreviada algunas veces como IM, es una manera de "
-"comunicarse a través de Internet y de una red local usando texto. Aunque "
-"algunas aplicaciones de IM sólo funcionan con un tipo de cuentas otras, "
-"entre las que se incluye <link xref=\"introduction\">Empathy</link>, "
-"proporcionan facilidades de IM usando <link xref=\"add-account\">cuentas</"
-"link> de diferentes proveedores de servicios. Algunos de ellos soportan "
-"incluso llamadas con sonido y vídeo."
-
-#: C/overview.page:43(td/p)
-msgid "Video Conference"
-msgstr "Videoconferencia"
-
-#: C/overview.page:44(td/p)
-msgid "Group chats"
-msgstr "Conversaciones en grupo"
-
-#: C/overview.page:45(td/p)
-msgid "Chat rooms"
-msgstr "Salas de chat"
-
-#: C/overview.page:49(page/p)
-msgid ""
-"Some instant messaging applications can be used to connect to chat rooms, "
-"online places where like-minded people meet to talk. One popular means to "
-"connect to several chat rooms is the Internet Relay Chat, also known as "
-"<link xref=\"irc-manage\">IRC</link>. IRC provides <link xref=\"irc-join-room"
-"\">public</link> chat rooms, which are open to anyone who creates an account "
-"on the IRC Server, and private chat rooms, which are <link xref=\"irc-join-"
-"pwd\">password protected</link> and open only to a select few."
-msgstr ""
-"Algunas aplicaciones de mensajería instantánea se pueden usar para "
-"conectarse a salas de chat, lugares en línea donde conocer gente con gustos "
-"similares con la que poder hablar. Una manera popular de conectarse a varias "
-"salas de chat es con «Internet Relay Chat», también conocido como <link xref="
-"\"irc-manage\">IRC</link>. IRC proporciona salas de chat <link xref=\"irc-"
-"join-room\">públicas</link> abiertas para todo aquel que se cree una cuenta "
-"en el servidor de IRC, y salas privadas, que están <link xref=\"irc-join-pwd"
-"\">protegidas por contraseña</link> y sólo permiten el acceso a unos pocos."
-
-#: C/prev-conv.page:8(info/desc)
-msgid "Browse or search your previous conversations."
-msgstr "Examinar o buscar en sus conversaciones anteriores"
-
-#: C/prev-conv.page:36(page/title)
-msgid "View previous conversations"
-msgstr "Ver conversaciones anteriores"
-
-#: C/prev-conv.page:38(page/p)
-msgid ""
-"<app>Empathy</app> automatically saves all your text conversations you have "
-"with your contacts. You can <link xref=\"#search\">search through all of "
-"your previous conversations</link> or <link xref=\"#browse\">browse previous "
-"conversations</link> by contact and date."
-msgstr ""
-"<app>Empathy</app> guarda automáticamente todas las conversaciones de texto "
-"que tiene con sus contactos. Puede <link xref=\"#search\">buscar a través de "
-"todas sus conversaciones anteriores</link> o <link xref=\"#browse\">buscar "
-"conversación anteriores</link> por contacto y fecha."
-
-#: C/prev-conv.page:46(note/p)
-msgid ""
-"You do not need to be connected to the Internet to view and search your "
-"previous conversations."
-msgstr ""
-"No necesita estar conectado a Internet para ver y buscar en sus "
-"conversaciones anteriores."
-
-#: C/prev-conv.page:53(section/title)
-msgid "Search previous conversations"
-msgstr "Buscar conversaciones anteriores"
-
-#: C/prev-conv.page:55(section/p)
-msgid ""
-"You can perform a full-text search through all of your previous "
-"conversations."
-msgstr ""
-"Puede realizar una búsqueda de texto completo sobre todas sus conversaciones "
-"anteriores."
-
-#: C/prev-conv.page:59(item/p) C/prev-conv.page:87(item/p)
-msgid ""
-"From the <gui>Contact List</gui> window, choose <guiseq><gui>View</gui> "
-"<gui>Previous Conversations</gui></guiseq>. Alternatively, press <key>F3</"
-"key>."
-msgstr ""
-"Desde la ventana <gui>Lista de contactos</gui> elija <guiseq><gui>Ver</"
-"gui><gui>Conversaciones anteriores</gui></guiseq>. Alternativamente, pulse "
-"<key>F3</key>."
-
-#: C/prev-conv.page:63(item/p)
-msgid ""
-"Select an account from the drop-down list in the top. A list of contacts and "
-"chat room for that account will be shown below."
-msgstr ""
-"Seleccione una cuenta de la lista desplegable en la parte superior. Para esa "
-"cuenta se mostrará debajo una lista de contactos y una sala de chat."
-
-#: C/prev-conv.page:67(item/p)
-msgid ""
-"Type the text you want to search for in the <gui>Search</gui> text field."
-msgstr ""
-"Escriba el texto que quiere buscar en el cuadro de texto <gui>Buscar</gui>"
-
-#: C/prev-conv.page:71(item/p)
-msgid ""
-"Any conversations that matched your search terms will be shown. By default, "
-"conversations are ordered by date."
-msgstr ""
-"Se mostrará cualquier conversación que coincida con sus términos de "
-"búsqueda. Las conversaciones se ordenan por fecha de forma predeterminada."
-
-#: C/prev-conv.page:80(section/title)
-msgid "Browse previous conversations"
-msgstr "Examinar conversaciones anteriores"
-
-#: C/prev-conv.page:82(section/p)
-msgid ""
-"You can browse your previous conversations with your contacts or in chat "
-"rooms by date."
-msgstr ""
-"Puede examinar por fecha las conversaciones anteriores con sus contactos o "
-"en salas de chat."
-
-#: C/prev-conv.page:91(item/p)
-msgid ""
-"Select an account from the drop-down list in the top left. A list of "
-"contacts and chat room for that account will be shown below."
-msgstr ""
-"Seleccione una cuenta de la lista desplegable en la parte superior "
-"izquierda. Para esa cuenta se mostrará debajo una lista de contactos y una "
-"sala de chat."
-
-#: C/prev-conv.page:95(item/p)
-msgid ""
-"Select a contact or chat room to view your previous conversations from. By "
-"default the most recent conversation will be shown."
-msgstr ""
-"Para ver sus conversaciones anteriores, seleccione un contacto o una sala de "
-"chat. De forma predeterminada se muestra la conversación más reciente."
-
-#: C/prev-conv.page:99(item/p)
-msgid ""
-"You can browse your conversations by date. Days on which you had a "
-"conversation with the selected contact will be shown in bold text. Click a "
-"date to select it. Click the arrows next to the month and year to browse "
-"earlier dates."
-msgstr ""
-"Puede examinar sus conversaciones por fecha. Los días en los que mantuvo una "
-"conversación con el contacto seleccionado se mostrarán en negrita. Pulse "
-"sobre una fecha para seleccionarla. Pulse las fechas junto al mes y año para "
-"examinar fechas anteriores."
-
-#: C/prev-conv.page:105(section/p)
-msgid ""
-"You can search for text in the conversations by typing into the search field "
-"at the top. The matching conversations will be showed."
-msgstr ""
-"Puede buscar texto en las conversaciones mostradas escribiéndolo en el campo "
-"de búsqueda en la parte superior. Se resaltarán las conversaciones "
-"coincidentes."
-
-#: C/prev-conv.page:111(note/p)
-msgid ""
-"You can quickly view the previous conversations with one of your contacts "
-"from the <gui>Contact List</gui> window. Simply right click the contact and "
-"choose <gui>Previous Conversations</gui>. The <gui>Previous Conversations</"
-"gui> window will open with that contact already selected."
-msgstr ""
-"Puede ver rápidamente las conversaciones anteriores con uno de sus contactos "
-"desde la ventana <gui>Lista de contactos</gui>. Simplemente pulse con el "
-"botón derecho del ratón sobre el contacto y seleccione <gui>Conversaciones "
-"anteriores</gui>. Se abrirá la ventana <gui>Conversaciones previas</gui> con "
-"el contacto seleccionado."
-
-#: C/prob-conn-acctdisabled.page:7(info/desc)
-msgid ""
-"The instant messaging account that you want to use is not enabled in the "
-"list of accounts."
-msgstr ""
-"La cuenta de mensajería instantánea que quiere usar no está activada en la "
-"lista de cuentas."
-
-#: C/prob-conn-acctdisabled.page:34(page/title)
-msgid "My account is not enabled"
-msgstr "Mi cuenta no está activada"
-
-#: C/prob-conn-acctdisabled.page:36(page/p)
-msgid ""
-"If the instant messaging account that you want to use is not enabled in the "
-"drop-down account list when you try to start a new conversation or join a "
-"room, your account details may not be correct."
-msgstr ""
-"Si la cuenta de mensajería instantánea que quiere usar no está activada en "
-"la lista desplegable de cuentas, cuando intenta iniciar una conversación "
-"nueva o unirse a una charla, puede que los detalles de su cuenta no sean "
-"correctos."
-
-#: C/prob-conn-acctdisabled.page:44(item/p) C/prob-conn-auth.page:46(item/p)
-#: C/prob-conn-neterror.page:54(item/p)
-msgid ""
-"Make sure that you are connected to the Internet, or to a local area network."
-msgstr "Asegúrese de que está conectado a Internet o a una red de área local."
-
-#: C/prob-conn-acctdisabled.page:49(item/p)
-msgid ""
-"Choose <guiseq><gui>Edit</gui><gui>Accounts</gui></guiseq> and select the "
-"account that is not working."
-msgstr ""
-"Elija <guiseq><gui>Editar</gui><gui>Cuentas</gui></guiseq> y seleccione la "
-"cuenta que no está funcionando."
-
-#: C/prob-conn-acctdisabled.page:55(item/p) C/prob-conn-auth.page:62(item/p)
-msgid ""
-"Type your username and password again to make sure that they are correct."
-msgstr ""
-"Escriba su nombre de usuario y contraseña de nuevo y asegúrese de que son "
-"correctos."
-
-#: C/prob-conn-acctdisabled.page:60(item/p)
-#: C/prob-conn-neterror.page:63(item/p)
-msgid ""
-"Check in the <gui>Advanced</gui> section that all the details are correct. "
-"You should be able to find these details from the website of the messaging "
-"service."
-msgstr ""
-"Expanda la sección <gui>Avanzadas</gui> y asegúrese de que los detalles son "
-"correctos. Debería poder encontrar estos detalles en la página web del "
-"servicio de mensajería."
-
-#: C/prob-conn-acctdisabled.page:66(item/p)
-msgid "Check that the account is switched on."
-msgstr "Compruebe que la cuenta está activada"
-
-#: C/prob-conn-auth.page:9(info/desc)
-msgid ""
-"An error message which says “<gui>Authentication failed</gui>” appears in "
-"the main window."
-msgstr ""
-"Aparece un mensaje de error en la ventana principal que muestra «<gui>Falló "
-"la autenticación</gui>»."
-
-#: C/prob-conn-auth.page:37(page/title)
-msgid "I get a message that says “Authentication failed”"
-msgstr "Obtengo un mensaje que dice «Falló la autenticación»"
-
-#: C/prob-conn-auth.page:39(page/p)
-msgid ""
-"This kind of error happens when your instant messaging service is not "
-"allowing you to connect because it does not recognize your username or "
-"password for some reason."
-msgstr ""
-"Este tipo de error sucede cuando su servicio de mensajería instantánea no le "
-"está permitiendo conectar porque por alguna razón no reconoce su nombre de "
-"usuario o contraseña."
-
-#: C/prob-conn-auth.page:51(item/p)
-msgid ""
-"Make sure that you have registered an account with the service you are "
-"trying to connect to. If you do not have an account, most services will not "
-"allow you to connect."
-msgstr ""
-"Asegúrese de que ha registrado una cuenta con el servicio al que está "
-"intentando conectarse. Si no tiene una cuenta la mayoría de los servicios no "
-"le permitirán que se conecte."
-
-#: C/prob-conn-auth.page:58(media/span) C/prob-conn-name.page:44(media/span)
-#: C/prob-conn-neterror.page:59(media/span)
-msgid "edit"
-msgstr "editar"
-
-#: C/prob-conn-auth.page:58(item/p) C/prob-conn-name.page:44(item/p)
-#: C/prob-conn-neterror.page:59(item/p)
-msgid "Click the <_:media-1/> icon in the error message."
-msgstr "Pulse el icono <_:media-1/> en el mensaje de error."
-
-#: C/prob-conn-auth.page:67(item/p)
-msgid ""
-"Deselect the <gui>Enabled</gui>, and then select it again to try to "
-"reconnect to the service."
-msgstr ""
-"Deseleccione la casilla de verificación <gui>Activada</gui> y después "
-"selecciónela de nuevo para intentar reconectar con el servicio."
-
-#: C/prob-conn-name.page:10(info/title)
-msgctxt "link:error-msg"
-msgid "“Name in use”"
-msgstr "«Nombre en uso»"
-
-#: C/prob-conn-name.page:11(info/desc)
-msgid ""
-"An error message which says “<gui>Name in use</gui>” appears in the main "
-"window."
-msgstr ""
-"Aparecen en la ventana principal un mensaje de error que dice «<gui>Nombre en "
-"uso</gui>»."
-
-#: C/prob-conn-name.page:34(page/title)
-msgid "I get a message that says “Name in use”"
-msgstr "Obtengo un mensaje de error que muestra «Nombre en uso»"
-
-#: C/prob-conn-name.page:36(page/p)
-msgid ""
-"This kind of error happens when you try to connect to your IRC account and "
-"you are using a nickname that is already being used by someone else on that "
-"particular network."
-msgstr ""
-"Este tipo de error sucede cuando intenta conectarse a su cuenta de IRC y "
-"está usando un apodo que ya está usando otra persona en esa red en "
-"particular."
-
-#: C/prob-conn-name.page:50(item/p)
-msgid "In the <gui>Nickname</gui> text box, type a new nickname."
-msgstr "En la caja de texto <gui>Apodo</gui> escriba un apodo nuevo."
-
-#: C/prob-conn-name.page:55(item/p)
-msgid ""
-"If you have registered that nickname within the network you are using, set "
-"the password for that nickname. For more information, see <link xref=\"irc-"
-"nick-password\"/>."
-msgstr ""
-"Si ha registrado ese apodo en la red que está usando, establezca la "
-"contraseña para ese apodo. Para obtener más información consulte la <link "
-"xref=\"irc-nick-password\"/>."
-
-#: C/prob-conn-name.page:64(item/p) C/prob-conn-neterror.page:78(item/p)
-msgid ""
-"Switch the account off, and then switch it on to try to reconnect to the "
-"service."
-msgstr ""
-"Salga de la cuenta y vuelva a entrar para volver a conectarse al servicio."
-
-#: C/prob-conn-neterror.page:8(info/desc)
-msgid ""
-"An error message which says “<gui>Network error</gui>” appears in the main "
-"window."
-msgstr ""
-"Aparecerá el mensaje de error «<gui>Error de red</gui>» en la ventana "
-"principal."
-
-#: C/prob-conn-neterror.page:35(page/title)
-msgid "I get a message that says “Network error”"
-msgstr "Obtengo un mensaje que muestra «Error de red»"
-
-#: C/prob-conn-neterror.page:43(page/p)
-msgid ""
-"This kind of error happens when <app>Empathy</app> cannot communicate with "
-"the instant messaging service for some reason."
-msgstr ""
-"Este tipo de mensaje sucede cuando <app>Empathy</app> no se puede comunicar "
-"con el servicio de mensajería instantánea por alguna razón."
-
-#: C/prob-conn-neterror.page:47(page/p)
-msgid ""
-"Also, this kind of error happens when you try to use an IRC account without "
-"setting a nickname."
-msgstr ""
-"Este tipo de error también sucede cuando intenta usar una cuenta de IRC sin "
-"haber configurado el apodo."
-
-#: C/prob-conn-neterror.page:86(section/title)
-msgid "Proxy support"
-msgstr "Soporte de proxy"
-
-#: C/prob-conn-neterror.page:87(section/p)
-msgid ""
-"At the moment <app>Empathy</app> can not be configured to work with a proxy."
-msgstr ""
-"Por el momento <app>Empathy</app> no se puede configurar para que funcione "
-"con un proxy."
-
-#: C/prob-conn.page:7(info/desc)
-msgid "Diagnose common problems connecting to an instant messaging service."
-msgstr ""
-"Diagnosticar problemas comunes al conectarse a un servicio de mensajería "
-"instantánea."
-
-#: C/prob-conn.page:29(page/title)
-msgid "Problems connecting to an instant messaging service"
-msgstr "Problemas al conectarse a un servicio de mensajería instantánea"
-
-#: C/remove-account.page:8(info/desc)
-msgid "Completely remove an account from <app>Empathy</app>."
-msgstr "Quitar completamente una cuenta en <app>Empathy</app>."
-
-#: C/remove-account.page:34(page/title)
-msgid "Remove an account"
-msgstr "Quitar una cuenta"
-
-#: C/remove-account.page:36(page/p)
-msgid ""
-"You can completely remove an account from <app>Empathy</app> if you no "
-"longer wish to use the account. If you wish to use the account in "
-"<app>Empathy</app> again in the future, you will have to add your account "
-"details again."
-msgstr ""
-"Puede quitar completamente una cuenta de <app>Empathy</app> si no quiere "
-"seguir usándola. Si quiere usar de nuevo la cuenta en <app>Empathy</app> en "
-"el futuro, deberá añadir los detalles de la cuenta de nuevo."
-
-#: C/remove-account.page:47(item/p)
-msgid ""
-"Select the account you wish to remove from the accounts list on the left "
-"side of the window."
-msgstr ""
-"Seleccione la cuenta que quiere quitar de la lista de cuentas en la parte "
-"izquierda de la ventana."
-
-#: C/remove-account.page:51(item/p)
-msgid "Click <gui style=\"button\">-</gui>."
-msgstr "Pulse <gui style=\"button\">-</gui>."
-
-#: C/remove-account.page:54(item/p)
-msgid ""
-"A dialog will be shown asking for confirmation. Click the <gui>Remove</gui> "
-"button to permanently remove the account."
-msgstr ""
-"Se mostrará un diálogo preguntando por una confirmación. Pulse el botón "
-"<gui>Quitar</gui> para quitar la cuenta permanentemente."
-
-#: C/remove-account.page:60(note/p)
-msgid ""
-"Even after removing an account, <app>Empathy</app> does not delete your "
-"conversation history for that account."
-msgstr ""
-"Incluso después de quitar una cuenta, <app>Empathy</app> no elimina su "
-"histórico de conversaciones para esa cuenta."
-
-#: C/salut-protocol.page:8(info/desc)
-msgid "Understanding the People Nearby feature."
-msgstr "Entender la característica Gente cerca."
-
-#: C/salut-protocol.page:33(page/title)
-msgid "What is People Nearby?"
-msgstr "¿Qué es Gente cerca?"
-
-#: C/salut-protocol.page:40(page/p)
-msgid ""
-"The People Nearby service is a serverless communication service: you do not "
-"need to connect and authenticate to a central server in order to use it."
-msgstr ""
-"El servicio Gente cerca es un servicio de comunicación sin servidores: no "
-"necesita conectarse y autenticarse contra un servidor central para poder "
-"usarlo."
-
-#: C/salut-protocol.page:45(page/p)
-msgid ""
-"This kind of serverless messaging system is restricted to a local area "
-"network and an active Internet connection is not necessary."
-msgstr ""
-"Este tipo de sistemas de mensajería sin servidores está restringido a redes "
-"de área local y no se necesita una conexión activa con Internet."
-
-#: C/salut-protocol.page:49(page/p)
-msgid ""
-"The people that use this service inside the same local area network will be "
-"auto-discovered, and it will be possible to send them messages and files as "
-"with other services."
-msgstr ""
-"La gente que usa este servicio dentro de la misma red de área local se "
-"autodescubrirá y será posible enviarles mensajes y archivos al igual que con "
-"otros servicios."
-
-#: C/salut-protocol.page:54(page/p)
-msgid ""
-"All the modern local area networks should be able to support this kind of "
-"service."
-msgstr ""
-"Todas las redes modernas de área local deberían poder soportar este tipo de "
-"servicio."
-
-#: C/send-file.page:8(info/desc)
-msgid "Send a file from your computer to one of your contacts."
-msgstr "Enviar un archivo desde su equipo a uno de sus contactos."
-
-#: C/send-file.page:36(page/title)
-msgid "Send files"
-msgstr "Enviar archivos"
-
-#: C/send-file.page:45(item/p)
-msgid ""
-"Right click on the contact you want to send a file to, and choose <gui>Send "
-"file</gui>."
-msgstr ""
-"Pulse con el botón derecho sobre el contacto al que quiere enviar un archivo "
-"y seleccione <gui>Enviar archivo</gui>."
-
-#: C/send-file.page:50(item/p)
-msgid ""
-"Click on the contact you want to send a file, and choose <guiseq><gui>Edit</"
-"gui> <gui>Contact</gui><gui>Send file</gui></guiseq>."
-msgstr ""
-"Pulse sobre el contacto al que quiere enviar un archivo y elija "
-"<guiseq><gui>Editar</gui><gui>Contacto</gui><gui>Enviar archivo</gui></"
-"guiseq>."
-
-#: C/send-file.page:58(item/p)
-msgid "Select the file to send, and click on <gui>Send</gui>."
-msgstr "Seleccione el archivo para enviar y pulse <gui>Enviar</gui>."
-
-#: C/send-file.page:63(item/p)
-msgid "The <gui>File Transfers</gui> window will appear."
-msgstr "Aparecerá la ventana <gui>Transferencias de archivos</gui>."
-
-#: C/send-file.page:66(item/p)
-msgid ""
-"Wait for your contact to accept the file transfer, or click <gui>Stop</gui> "
-"to halt the transfer."
-msgstr ""
-"Espere a que su contacto acepte la transferencia de archivo o pulse "
-"<gui>Detener</gui> para detener la transferencia."
-
-#: C/send-file.page:72(item/p)
-msgid ""
-"Once the transfer is finished, it is possible to close the <gui>File "
-"Transfers</gui> window."
-msgstr ""
-"Una vez que la transferencia haya finalizado, es posible cerrar la ventana "
-"<gui>Transferencias de archivos</gui>."
-
-#: C/send-file.page:80(note/p)
-msgid ""
-"If you have multiple finished transfers listed in the window, click on "
-"<gui>Clear</gui> to empty the list. This will only remove the files from the "
-"list and will not delete them from your computer."
-msgstr ""
-"Si tiene múltiples transferencias finalizadas listas en la ventana pulse "
-"<gui>Limpiar</gui> para vaciar la lista. Esto sólo quitará los archivos de "
-"la lista y no los eliminarº de su equipo."
-
-#: C/send-file.page:87(note/p)
-msgid ""
-"It is possible to send files only using the following services: <em>Jabber</"
-"em>, <em>Google Talk</em> and <em>People Nearby</em>."
-msgstr ""
-"Sólo es posible enviar archivos usando los siguientes servicios: <em>Jabber</"
-"em>, <em>Google Talk</em> y <em>Gente cerca</em>."
-
-#: C/send-file.page:93(note/p)
-msgid ""
-"In order to send a file to someone, you need to be connected to the "
-"Internet, or to a local area network."
-msgstr ""
-"Para poder enviar un archivo a alguien necesita estar conectado a Internet o "
-"a una red de área local."
-
-#: C/send-message.page:8(info/desc)
-msgid "Send a message to one of your contacts."
-msgstr "Enviar un mensaje a uno de sus contactos."
-
-#: C/send-message.page:32(page/title)
-msgid "Send a message to someone"
-msgstr "Enviar un mensaje a alguien"
-
-#: C/send-message.page:36(item/p)
-msgid ""
-"From the <gui>Contact List</gui> window, double-click the name of the "
-"contact that you want to have a conversation with."
-msgstr ""
-"Desde la ventana <gui>Lista de contactos</gui> pulse dos veces sobre el "
-"nombre del contacto con el que quiere tener una conversación."
-
-#: C/send-message.page:42(item/p)
-msgid ""
-"A new window will open. Type a message into the box at the bottom of the "
-"window and press <key>Enter</key> to send it."
-msgstr ""
-"Se abrirá una ventana nueva. Cuando se establezca la conexión, verá la "
-"ventana de charla en la parte inferior de la ventana, <key>Intro</key> y el "
-"tiempo total de conversación."
-
-#: C/send-message.page:50(section/title)
-msgid "Send a message to a meta-contact"
-msgstr "Enviar un mensaje a un metacontacto"
-
-#: C/send-message.page:58(item/p)
-msgid ""
-"Select the contact you want to have the conversation, and from the menu "
-"select <gui style=\"menuitem\">Chat</gui>."
-msgstr ""
-"Seleccione el contacto con el que quiere tener la conversación y, del menú, "
-"seleccione <gui style=\"menuitem\">Chat</gui>."
-
-#: C/set-custom-status.page:9(info/desc)
-msgid "Add, edit or delete personal messages for your status."
-msgstr "Añadir, editar o eliminar un mensaje personal para su estado."
-
-#: C/set-custom-status.page:15(credit/name)
-msgid "Jim Campbell"
-msgstr "Jim Campbell"
-
-#: C/set-custom-status.page:34(page/title)
-msgid "Set a custom message"
-msgstr "Establecer un mensaje personalizado"
-
-#: C/set-custom-status.page:36(page/p)
-msgid ""
-"Sometimes you may want to set a custom message for your status, for example "
-"to let people know that you will be unavailable for a certain period of time."
-msgstr ""
-"A veces puede querer usar un mensaje personal para su estado, por ejemplo, "
-"para hacer saber a sus contactos que no estará disponible por un periodo de "
-"tiempo."
-
-#: C/set-custom-status.page:40(page/p)
-msgid ""
-"It is possible to set a custom message based on the different statuses "
-"available."
-msgstr ""
-"Es posible establecer un mensaje personalizado basado en los diferentes "
-"estados disponibles."
-
-#: C/set-custom-status.page:46(item/p) C/set-custom-status.page:82(item/p)
-msgid ""
-"From the <gui>Contact List</gui> window, click on the drop-down list at the "
-"top."
-msgstr ""
-"Desde la ventana <gui>Lista de contactos</gui>, pulse en la lista "
-"desplegable en la parte superior."
-
-#: C/set-custom-status.page:52(item/p)
-msgid ""
-"Select the status you want to add a custom message to. You have to select "
-"the one identified with the label <gui>Custom Message</gui>."
-msgstr ""
-"Seleccione el estado al que quiere añadir el mensaje personalizado. Tiene "
-"que seleccionar el identificado con la etiqueta <gui>Mensaje personalizado</"
-"gui>."
-
-#: C/set-custom-status.page:58(item/p)
-msgid ""
-"Enter your custom message in the text box at the top of the window, and "
-"press <key>Enter</key> to set the message."
-msgstr ""
-"Introduzca su mensaje personalizado en la caja de texto en la parte superior "
-"de la ventana y pulse <key>Intro</key> para establecer el mensaje."
-
-#: C/set-custom-status.page:64(item/p)
-msgid ""
-"If you want to set the custom message as a favorite, saving it in order to "
-"use it again, click on the little heart on the right of the text box where "
-"you wrote your custom message."
-msgstr ""
-"Si quiere establecer el mensaje personalizado como un favorito, guardándolo "
-"para usarlo de nuevo, pulse en el pequeño corazón a la derecha de la caja de "
-"texto donde escribió su mensaje personalizado."
-
-#: C/set-custom-status.page:69(item/p)
-msgid ""
-"If you do not do it, the custom message will not be available the next time "
-"you use <app>Empathy</app>. It will be saved only for the current session."
-msgstr ""
-"Si no lo hace el mensaje personalizado no estará disponible la próxima vez "
-"que use <app>Empathy</app>. Sólo se guardará durante la sesión actual."
-
-#: C/set-custom-status.page:78(section/title)
-msgid "Edit and remove a custom message"
-msgstr "Editar y quitar un mensaje personalizado"
-
-#: C/set-custom-status.page:88(item/p)
-msgid "Select <gui>Edit Custom Message</gui>."
-msgstr "Seleccione <gui>Editar mensaje personalizado</gui>."
-
-#: C/set-custom-status.page:95(item/p)
-msgid "To edit a custom message:"
-msgstr "Para editar un mensaje personalizado:"
-
-#: C/set-custom-status.page:100(item/p)
-msgid ""
-"From the <gui>Saved Presets</gui> box, select the status message you want to "
-"edit and double-click on it."
-msgstr ""
-"Desde la caja <gui>Estados guardados</gui>, seleccione el mensaje de estado "
-"que quiere editar y pulse dos veces sobre él."
-
-#: C/set-custom-status.page:106(item/p)
-msgid "Type the new custom message and press <key>Enter</key> to modify it."
-msgstr ""
-"Escriba el mensaje personalizado nuevo y pulse <key>Intro</key> para "
-"modificarlo."
-
-#: C/set-custom-status.page:113(item/p)
-msgid "To remove a custom message:"
-msgstr "Para quitar un mensaje personalizado:"
-
-#: C/set-custom-status.page:118(item/p)
-msgid ""
-"From the <gui>Saved Presets</gui> box, select the status message you want to "
-"remove."
-msgstr ""
-"Desde la caja <gui>Estados guardados</gui>, seleccione el mensaje de estado "
-"que quiere quitar."
-
-#: C/set-custom-status.page:124(item/p)
-msgid "Click on the <gui>Remove</gui> button."
-msgstr "Pulse el botón <gui>Quitar</gui>."
-
-#: C/set-custom-status.page:133(item/p)
-msgid "When finished, click on <gui>Close</gui>."
-msgstr "Cuando haya terminado pulse <gui>Cerrar</gui>."
-
-#: C/set-custom-status.page:140(note/p)
-msgid ""
-"When you edit a custom message, it will not be set as the current status "
-"message. You will need to select it from the <gui>Contact List</gui> window."
-msgstr ""
-"Cuando edita un mensaje personalizado nuevo no se establece como el mensaje "
-"de estado actual. Deberá seleccionarlo en la ventana de <gui>Lista de "
-"contactos</gui>."
-
-#: C/share-desktop.page:7(info/desc)
-msgid "Show your desktop to your contacts."
-msgstr "Mostrar su escritorio a sus contactos."
-
-#: C/share-desktop.page:33(page/title)
-msgid "Share your desktop"
-msgstr "Compartir su escritorio"
-
-#: C/share-desktop.page:35(page/p)
-msgid ""
-"It is possible to share your desktop with some of your contacts. You can use "
-"this functionality to show your desktop to your contacts to, for example, "
-"ask for help or help your contacts resolve a problem."
-msgstr ""
-"Es posible compartir su escritorio con algunos de sus contactos. Puede usar "
-"esta funcionalidad para mostrar su escritorio a sus contactos, o preguntar "
-"por ayuda o ayudar a sus contactos a resolver problemas."
-
-#: C/share-desktop.page:42(note/p)
-msgid ""
-"To be able to share your desktop, you need to have a VNC server, which has "
-"support for the feature, installed on your system. <app>Vino</app>, the "
-"GNOME VNC server, has the required support."
-msgstr ""
-"Para poder compartir su escritorio necesita tener un servidor VNC, que "
-"soporte para la característica, instalado en su sistema. <app>Vino</app>, el "
-"servidor VNC de GNOME, tiene el soporte necesario."
-
-#: C/share-desktop.page:51(item/p)
-msgid "From the <gui>Contact List</gui> window, do one of the following:"
-msgstr ""
-"En la ventana de la <gui>Lista de contactos</gui> realice una de las "
-"siguientes:"
-
-#: C/share-desktop.page:56(item/p)
-msgid ""
-"Select the contact you want to share your desktop with and choose "
-"<guiseq><gui>Edit</gui><gui>Contact</gui> <gui>Share My Desktop</gui></"
-"guiseq>."
-msgstr ""
-"Seleccione el contacto con el que quiere compartir su escritorio y elija "
-"<guiseq><gui>Editar</gui><gui>Contacto</gui><gui>Compartir mi escritorio</"
-"gui></guiseq>."
-
-#: C/share-desktop.page:63(item/p)
-msgid ""
-"Right-click on the name of the contact you want to share your desktop with "
-"and select <gui>Share My Desktop</gui>."
-msgstr ""
-"Pulse con el botón derecho del ratón sobre el nombre del contacto con el que "
-"quiera compartir su escritorio y seleccione <gui>Compartir mi escritorio</"
-"gui>."
-
-#: C/share-desktop.page:71(item/p)
-msgid ""
-"An invitation to view your desktop will be sent to the contact you have "
-"selected. To view your desktop, they will need to accept it."
-msgstr ""
-"Se enviará una invitación para ver su escritorio al contacto que haya "
-"seleccionado. Deberán aceptarla para poder ver su escritorio."
-
-#: C/share-desktop.page:77(item/p)
-msgid ""
-"You can disconnect the contact from your computer using your desktop sharing "
-"application."
-msgstr ""
-"Puede desconectar el contacto de su equipo usando su aplicación de "
-"compartición de escritorio."
-
-#: C/share-desktop.page:82(note/p)
-msgid ""
-"For more information about how to use the remote desktop sharing "
-"application, refer to its help."
-msgstr ""
-"Consulte la ayuda para obtener más información acerca de cómo usar la "
-"aplicación de compartición de escritorio."
-
-#: C/share-desktop.page:90(page/p)
-msgid ""
-"When you share your desktop with someone else, it is possible to experience "
-"system performance slowdown and low Internet speed."
-msgstr ""
-"Cuando comparte su escritorio con otros, es posible que experimente una "
-"ralentización del rendimiento del sistema y una baja velocidad de Internet."
-
-#: C/share-desktop.page:96(note/p)
-msgid ""
-"Some of your contacts may not be able to use this feature. It is necessary "
-"for them to have version 2.28, or newer, of <app>Empathy</app> and a "
-"compatible remote desktop viewer application installed in their system."
-msgstr ""
-"Puede que algunos de sus contactos no puedan usar esta característica. Es "
-"necesario que tengan al menos la versión 2.28 de <app>Empathy</app> y una "
-"aplicación de visión remota de escritorios instalada en su sistema."
-
-#: C/status-icons.page:8(info/desc)
-msgid "Understanding the various statuses and status icons."
-msgstr "Entender los diversos estados e iconos de estado."
-
-#: C/status-icons.page:36(page/title)
-msgid "Status Types and Icons"
-msgstr "Tipos de estados e iconos"
-
-#: C/status-icons.page:40(media/span)
-msgid "Available icon"
-msgstr "Icono de disponible"
-
-#: C/status-icons.page:40(item/title)
-msgid "<_:media-1/> <gui>Available</gui>"
-msgstr "<_:media-1/> <gui>Disponible</gui>"
-
-#: C/status-icons.page:42(item/p)
-msgid ""
-"Use the <em>Available</em> status when you are at your computer and able to "
-"chat with your contacts. You can set a custom message for this status."
-msgstr ""
-"Use el estado <em>Disponible</em> cuando está en su equipo y disponible para "
-"charlar con sus contactos. Puede establecer un mensaje personalizado para "
-"este estado."
-
-#: C/status-icons.page:46(media/span)
-msgid "Busy icon"
-msgstr "Icono de ocupado"
-
-#: C/status-icons.page:46(item/title)
-msgid "<_:media-1/> <gui>Busy</gui>"
-msgstr "<_:media-1/> <gui>Ocupado</gui>"
-
-#: C/status-icons.page:48(item/p)
-msgid ""
-"Use the <em>Busy</em> status to let your contacts know that you don’t want "
-"to chat right now. They can still contact you, for instance if they have "
-"something urgent they need to discuss. By default, <app>Empathy</app> will "
-"not use notification bubbles and sounds when you are busy. You can set a "
-"custom message for this status."
-msgstr ""
-"Use el estado <em>Ocupado</em> para hacer saber a sus contactos que no "
-"quiere charlar ahora. Aún podrán contactarle si, por ejemplo, tienen algo "
-"urgente que necesitan discutir. De forma predeterminada <app>Empathy</app> "
-"no usará las burbujas de notificación y sonidos cuando esté ocupado. Puede "
-"establecer un mensaje personalizado para este estado."
-
-#: C/status-icons.page:54(media/span)
-msgid "Away icon"
-msgstr "Icono de ausente"
-
-#: C/status-icons.page:54(item/title)
-msgid "<_:media-1/> <gui>Away</gui>"
-msgstr "<_:media-1/> <gui>Ausente</gui>"
-
-#: C/status-icons.page:56(item/p)
-msgid ""
-"Use the <em>Away</em> status when you are going away from your computer. "
-"<app>Empathy</app> automatically sets your status to Away if you do not use "
-"your computer for a while, or if your screensaver is on. By default, "
-"<app>Empathy</app> will not use notification bubbles and sounds when you are "
-"away. You can set a custom message for this status."
-msgstr ""
-"Use el estado <em>Ausente</em> cuando esté haciendo algo lejos del equipo. "
-"<app>Empathy</app> establece automáticamente su estado a Ausente si no usa "
-"su equipo durante un rato o si su salvapantallas está activado. De forma "
-"predeterminada <app>Empathy</app> no usará las burbujas de notificación y "
-"sonidos cuando esté ocupado. Puede establecer un mensaje personalizado para "
-"este estado."
-
-#: C/status-icons.page:63(media/span) C/status-icons.page:70(media/span)
-msgid "Offline icon"
-msgstr "Icono de desconectado"
-
-#: C/status-icons.page:63(item/title)
-msgid "<_:media-1/> <gui>Invisible</gui>"
-msgstr "<_:media-1/> <gui>Invisible</gui>"
-
-#: C/status-icons.page:65(item/p)
-msgid ""
-"When you set your status to <em>Invisible</em>, you will appear as offline "
-"to your contacts. You will still be connected to your accounts, and you "
-"still see your contacts’ statuses and start conversations with them."
-msgstr ""
-"Cuando su estado es <em>Invisible</em> aparecerá como desconectado para sus "
-"contactos. Aún estará conectado a sus cuentas, verá los estados de sus "
-"contactos y podrá iniciar conversaciones con ellos."
-
-#: C/status-icons.page:70(item/title)
-msgid "<_:media-1/> <gui>Offline</gui>"
-msgstr "<_:media-1/> <gui>Desconectado</gui>"
-
-#: C/status-icons.page:72(item/p)
-msgid ""
-"Setting your status to <em>Offline</em> disconnects you from all of your "
-"accounts."
-msgstr ""
-"Establecer su estado como <em>Desconectado</em> le desconecta de todas sus "
-"cuentas."
-
-#: C/video-call.page:11(info/desc)
-msgid "Start a video conversation with one of your contacts."
-msgstr "Iniciar una conversación de vídeo con uno de sus contactos."
-
-#: C/video-call.page:37(page/title)
-msgid "Start a video conversation"
-msgstr "Comenzar una conversación de vídeo"
-
-#: C/video-call.page:39(page/p)
-msgid ""
-"If you have a webcam, you can call your contacts and have a video "
-"conversation with them. This feature only works with certain types of "
-"accounts, and it requires the other person to have an application that "
-"supports video calls."
-msgstr ""
-"Si tiene una cámara web puede llamar a sus contactos y tener conversaciones "
-"de vídeo con ellos. Esta característica sólo funciona con ciertos tipos de "
-"cuentas y requiere que la otra persona tenga una aplicación que soporte "
-"llamadas de vídeo."
-
-#: C/video-call.page:46(item/p)
-msgid ""
-"Right-click on the contact that you want to call and select <gui style="
-"\"menuitem\">Video Call</gui>."
-msgstr ""
-"Pulse con el botón derecho sobre el contacto al que quiere llamar y "
-"seleccione <gui style=\"menuitem\">Llamada de vídeo</gui>."
-
-#: C/video-call.page:54(item/p)
-msgid ""
-"To end the conversation, click on the <gui style=\"button\">hang up</gui> "
-"button."
-msgstr ""
-"Para finalizar una conversación pulse el botón <gui style=\"button\">Colgar</"
-"gui>."
-
-#: C/video-call.page:60(note/p)
-msgid ""
-"To turn a video conversation into an audio conversation, choose <guiseq><gui "
-"style=\"menu\">Video</gui><gui style=\"menuitem\">Video Off</gui></guiseq>."
-msgstr ""
-"Para convertir una conversación de vídeo en una de sonido, elija "
-"<guiseq><gui style=\"menu\">Vídeo</gui><gui style=\"menuitem\">Vídeo "
-"apagado</gui></guiseq>."
-
-#: C/video-call.page:65(section/title)
-msgid "Start a video conversation with a meta-contact"
-msgstr "Iniciar una conversación de vídeo con uno de sus metacontactos."
-
-#: C/video-call.page:73(item/p)
-msgid ""
-"Select the contact you want to have the conversation, and from the menu "
-"select <gui style=\"menuitem\">Video Call</gui>."
-msgstr ""
-"Seleccione el contacto con el que quiere tener la conversación y, del menú, "
-"seleccione <gui style=\"menuitem\">Llamada de vídeo</gui>."
-
-#~ msgctxt "link"
-#~ msgid "Empathy Internet Messenger"
-#~ msgstr "Mensajería para Internet Empathy"
-
-#~ msgctxt "text"
-#~ msgid "Empathy Internet Messenger"
-#~ msgstr "Mensajería para Internet Empathy"
-
-#~ msgid "Empathy Internet Messenger logo"
-#~ msgstr "Logo de mensajería para Internet Empathy"
-
-#~ msgid ""
-#~ "Due to technical differences, the free <link href=\"https://www.ekiga.net/"
-#~ "index.php?page=register\">Ekiga.net</link> service does not currently "
-#~ "work with <app>Empathy</app>."
-#~ msgstr ""
-#~ "Debido a algunas diferencias, actualmente el servicio libre <link href="
-#~ "\"https://www.ekiga.net/index.php?page=register\">Ekiga.net</link> no "
-#~ "funciona con <app>Empathy</app>."
-
-#~ msgid ""
-#~ "You do not need to register for an account to use IRC. Although you "
-#~ "specify a nickname when you add an IRC account to <app>Empathy</app>, "
-#~ "this nickname is only established each time you connect. If another user "
-#~ "is using the nickname, you will need to choose a new nickname."
-#~ msgstr ""
-#~ "No necesita registrar una cuenta para usar el IRC. Aunque especifique un "
-#~ "apodo al añadir una cuenta IRC en <app>Empathy</app>, este apodo sólo se "
-#~ "establece cada vez que se conecta. Si otro usuario está usando el nombre, "
-#~ "deberá elegir un apodo nuevo."
-
-#~ msgid ""
-#~ "Some IRC networks use a service called NickServ to allow users to protect "
-#~ "their nicknames. See <link xref=\"irc-nick-password\"/> for more "
-#~ "information."
-#~ msgstr ""
-#~ "Algunas redes IRC usan un servicio llamado NickServ para permitir a los "
-#~ "usuarios proteger sus apodos. Para obtener más información consulte la "
-#~ "<link xref=\"irc-nick-password\"/>."
-
-#~ msgctxt "_"
-#~ msgid ""
-#~ "external ref='figures/gtk-add.png' md5='a856b499d8d4681b70b5ce6f25bc5c6d'"
-#~ msgstr ""
-#~ "external ref='figures/gtk-add.png' md5='a856b499d8d4681b70b5ce6f25bc5c6d'"
-
-#~ msgctxt "_"
-#~ msgid ""
-#~ "external ref='figures/gtk-edit.png' md5='4f21b451732817be0604fe3e2c8da98b'"
-#~ msgstr ""
-#~ "external ref='figures/gtk-edit.png' md5='4f21b451732817be0604fe3e2c8da98b'"
-
-#~ msgctxt "_"
-#~ msgid ""
-#~ "external ref='figures/gtk-remove.png' "
-#~ "md5='215e3a325a3dd619874e35c30a018bb6'"
-#~ msgstr ""
-#~ "external ref='figures/gtk-remove.png' "
-#~ "md5='215e3a325a3dd619874e35c30a018bb6'"
-
-#~ msgid ""
-#~ "To add a network to the list, click <media type=\"image\" mime=\"image/png"
-#~ "\" src=\"figures/gtk-add.png\" width=\"16\" height=\"16\">Add</media>."
-#~ msgstr ""
-#~ "Para añadir una red a la lista pulse <media type=\"image\" mime=\"image/"
-#~ "png\" src=\"figures/gtk-add.png\" width=\"16\" height=\"16\">Añadir</"
-#~ "media>."
-
-#~ msgctxt "_"
-#~ msgid ""
-#~ "external ref='figures/video_overview.png' "
-#~ "md5='6cfcfbd833bf2234537d402185c40596'"
-#~ msgstr ""
-#~ "external ref='figures/video_overview.png' "
-#~ "md5='6cfcfbd833bf2234537d402185c40596'"
-
-#~ msgctxt "_"
-#~ msgid ""
-#~ "external ref='figures/conf_overview.png' "
-#~ "md5='74c58668fe89c84060f12f6b70a6b903'"
-#~ msgstr ""
-#~ "external ref='figures/conf_overview.png' "
-#~ "md5='74c58668fe89c84060f12f6b70a6b903'"
-
-#~ msgctxt "_"
-#~ msgid ""
-#~ "external ref='figures/croom_overview.png' "
-#~ "md5='e9619d2c8420bc48a880c03dbc1ae084'"
-#~ msgstr ""
-#~ "external ref='figures/croom_overview.png' "
-#~ "md5='e9619d2c8420bc48a880c03dbc1ae084'"
-
-#~ msgid ""
-#~ "Click the <media type=\"image\" mime=\"image/png\" src=\"figures/gtk-edit."
-#~ "png\">edit</media> icon in the error message."
-#~ msgstr ""
-#~ "Pulse el icono <media type=\"image\" mime=\"image/png\" src=\"figures/gtk-"
-#~ "edit.png\">Editar</media> en el mensaje de error."
-
-#~ msgctxt "_"
-#~ msgid ""
-#~ "external ref='figures/available.png' "
-#~ "md5='2196b2f0ad4ce26fdb7b9d48e75d1947'"
-#~ msgstr ""
-#~ "external ref='figures/available.png' "
-#~ "md5='2196b2f0ad4ce26fdb7b9d48e75d1947'"
-
-#~ msgctxt "_"
-#~ msgid ""
-#~ "external ref='figures/busy.png' md5='15eb2adff5faedf97b0cb9105d09410a'"
-#~ msgstr ""
-#~ "external ref='figures/busy.png' md5='15eb2adff5faedf97b0cb9105d09410a'"
-
-#~ msgctxt "_"
-#~ msgid ""
-#~ "external ref='figures/away.png' md5='9c504d6ffa0cf1a9cc8933d16e1bea33'"
-#~ msgstr ""
-#~ "external ref='figures/away.png' md5='9c504d6ffa0cf1a9cc8933d16e1bea33'"
-
-#~ msgctxt "_"
-#~ msgid ""
-#~ "external ref='figures/offline.png' md5='c5b0c21181cbd6e13f8909243c0fa964'"
-#~ msgstr ""
-#~ "external ref='figures/offline.png' md5='c5b0c21181cbd6e13f8909243c0fa964'"
-
-#~ msgid ""
-#~ "<media type=\"image\" mime=\"image/png\" src=\"figures/available.png"
-#~ "\">Available icon</media> <gui>Available</gui>"
-#~ msgstr ""
-#~ "<media type=\"image\" mime=\"image/png\" src=\"figures/available.png"
-#~ "\">Icono de «disponible»</media> <gui>Disponible</gui>"
-
-#~ msgid ""
-#~ "<media type=\"image\" mime=\"image/png\" src=\"figures/busy.png\">Busy "
-#~ "icon</media> <gui>Busy</gui>"
-#~ msgstr ""
-#~ "<media type=\"image\" mime=\"image/png\" src=\"figures/busy.png\">Icono "
-#~ "de «ocupado»</media> <gui>Ocupado</gui>"
-
-#~ msgid ""
-#~ "<media type=\"image\" mime=\"image/png\" src=\"figures/away.png\">Away "
-#~ "icon</media> <gui>Away</gui>"
-#~ msgstr ""
-#~ "<media type=\"image\" mime=\"image/png\" src=\"figures/away.png\">Icono "
-#~ "de «ausente»</media> <gui>Ausente</gui>"
-
-#~ msgid ""
-#~ "<media type=\"image\" mime=\"image/png\" src=\"figures/offline.png"
-#~ "\">Offline icon</media> <gui>Invisible</gui>"
-#~ msgstr ""
-#~ "<media type=\"image\" mime=\"image/png\" src=\"figures/offline.png"
-#~ "\">Icono de «desconectado»</media> <gui>Invisible</gui>"
-
-#~ msgid ""
-#~ "<media type=\"image\" mime=\"image/png\" src=\"figures/offline.png"
-#~ "\">Offline icon</media> <gui>Offline</gui>"
-#~ msgstr ""
-#~ "<media type=\"image\" mime=\"image/png\" src=\"figures/offline.png"
-#~ "\">Icono de «desconectado»</media> <gui>Desconectado</gui>"
-
-#~ msgid "Combine and separate contacts"
-#~ msgstr "Combinar y separar contactos"
-
-#~ msgid ""
-#~ "From the <gui>Contact List</gui> window, right-click one of the contact "
-#~ "that has different accounts, and select <gui style=\"menuitem\">Link "
-#~ "Contacts...</gui>."
-#~ msgstr ""
-#~ "Desde la ventana <gui>Lista de contactos</gui> pulse con el botón derecho "
-#~ "uno de los contactos que tiene diferentes cuentas y seleccione <gui style="
-#~ "\"menuitem\">Enlazar contactos...</gui>."
-
-#~ msgid ""
-#~ "From the left pane in the <gui>Link Contacts</gui> window, select the "
-#~ "contacts you want to combine."
-#~ msgstr ""
-#~ "Desde el panel izquierdo, en la ventana <gui>Enlazar contatos</gui>, "
-#~ "seleccione los contactos que quiere combinar."
-
-#~ msgid ""
-#~ "When a meta-contact has been created, the default contact that will be "
-#~ "used to have a conversation with when you double-click on it, is the "
-#~ "contact with the highest presence on-line."
-#~ msgstr ""
-#~ "Cuando se ha creado un metacontacto, el contacto predeterminado que se "
-#~ "usará para tener una conversación al pulsar dos veces sobre él, es el "
-#~ "último contacto con presencia en línea."
-
-#~ msgid "Separating contacts"
-#~ msgstr "Separar contactos"
-
-#~ msgid ""
-#~ "From the <gui>Contact List</gui>, right-click the contact to separate, "
-#~ "and select <gui style=\"menuitem\">Link Contacts...</gui>."
-#~ msgstr ""
-#~ "Desde la ventana <gui>Lista de contactos</gui> pulse con el botón derecho "
-#~ "del ratón para separar, y seleccione <gui style=\"menuitem\">Enlazar "
-#~ "contactos...</gui>."
-
-#~ msgid "Click <gui style=\"button\">Unlink</gui>."
-#~ msgstr "Pulse <gui style=\"button\">Desenlazar</gui>."
-
-#~ msgid ""
-#~ "From the <gui>Contact List</gui> window, click the <media type=\"image\" "
-#~ "mime=\"image/png\" src=\"figures/camera-web.png\">video call</media> icon "
-#~ "next to the name of the contact you wish to call and choose <gui style="
-#~ "\"menuitem\">Audio Call</gui>."
-#~ msgstr ""
-#~ "Desde la ventana <gui>Lista de contactos</gui> pulse el icono de <media "
-#~ "type=\"image\" mime=\"image/png\" src=\"figures/camera-web.png"
-#~ "\">videollamada</media> junto al nombre del contacto al que quiere llamar "
-#~ "y seleccione <gui style=\"menuitem\">Llamada de voz</gui>."
-
-#~ msgid ""
-#~ "From the <gui>Contact List</gui> window, click the <media type=\"image\" "
-#~ "mime=\"image/png\" src=\"figures/camera-web.png\">video call</media> icon "
-#~ "next to the name of the contact you wish to call and choose <gui style="
-#~ "\"menuitem\">Video Call</gui>."
-#~ msgstr ""
-#~ "Desde la ventana <gui>Lista de contactos</gui> pulse el icono de <media "
-#~ "type=\"image\" mime=\"image/png\" src=\"figures/camera-web.png\">vídeo "
-#~ "llamada</media> junto al nombre del contacto al que quiere llamar y "
-#~ "seleccione <gui style=\"menuitem\">Llamada de vídeo</gui>."
-
-#~ msgctxt "_"
-#~ msgid ""
-#~ "external ref='figures/empathy-logo.png' "
-#~ "md5='1afc419a644e90b16393807e35cb5cb2'"
-#~ msgstr ""
-#~ "external ref='figures/empathy-logo.png' "
-#~ "md5='1afc419a644e90b16393807e35cb5cb2'"
-
-#~ msgid ""
-#~ "<media type=\"image\" mime=\"image/png\" src=\"figures/empathy-logo.png"
-#~ "\"> Empathy Internet Messenger logo </media> Empathy Internet Messenger"
-#~ msgstr ""
-#~ "<media type=\"image\" mime=\"image/png\" src=\"figures/empathy-logo.png"
-#~ "\">Logotipo de la mensajería para Internet Empathy</media> Mensajería "
-#~ "para Internet Empathy"
-
-#~ msgid "milo@ubuntu.com"
-#~ msgstr "milo@ubuntu.com"
-
-#~ msgid "shaunm@gnome.org"
-#~ msgstr "shaunm@gnome.org"
-
-#~ msgid "Available"
-#~ msgstr "Disponible"
-
-#~ msgid "Busy"
-#~ msgstr "Ocupado"
-
-#~ msgid "Away"
-#~ msgstr "Ausente"
-
-#~ msgid "Invisible"
-#~ msgstr "Invisible"
-
-#~ msgid "Offline"
-#~ msgstr "Desconectado"
-
-#~ msgid "kittykat3756@gmail.com"
-#~ msgstr "kittykat3756@gmail.com"
-
-#~ msgid "jwcampbell@gmail.com"
-#~ msgstr "jwcampbell@gmail.com"
-
-#~ msgid "philbull@gmail.com"
-#~ msgstr "philbull@gmail.com"
-
-#~ msgid "I'd like to see this played up a bit more."
-#~ msgstr "Me gustaría ver esto explicado un poco más."
-
-#~ msgid "shaunm"
-#~ msgstr "shaunm"
-
-#~ msgid ""
-#~ "Empathy no longer allows you to create an IRC account without a valid "
-#~ "nick. I've removed the guide link. Remove the text."
-#~ msgstr ""
-#~ "Empathy ya no le permite crear una cuenta de IRC sin un apodo válido. Se "
-#~ "ha quitado el enlace de guía. Quitar el texto."
-
-#~ msgid "Install telepathy-idle"
-#~ msgstr "Instale telepathy-idle"
-
-#~ msgid "peter.haslam@freenet.de"
-#~ msgstr "peter.haslam@freenet.de"
-
-#~ msgid "Icon for audio conversation"
-#~ msgstr "Icono para la conversación de sonido"
-
-#~ msgid "Icon for video conversation"
-#~ msgstr "Icono para la conversación de vídeo"
-
-#~ msgid ""
-#~ "I'd like to do tables like this using nothing for No and ✔ for Yes, but "
-#~ "we need to look at the accessibility impact. I've <link href=\"http://"
-#~ "mail.gnome.org/archives/gnome-doc-list/2009-September/msg00006.html"
-#~ "\">asked the accessibility team</link> for input."
-#~ msgstr ""
-#~ "Me gustaría poner tablas como ésta sin usar nada para No y ✔ para Sí, "
-#~ "pero se debe tener en cuenta el impacto en la accesibilidad. Ya <link "
-#~ "href=\"http://mail.gnome.org/archives/gnome-doc-list/2009-September/"
-#~ "msg00006.html\">he preguntado al equipo de accesibilidad</link>."
-
-#~ msgid ""
-#~ "There's recent work on telepathy-butterfly and papyon to support audio "
-#~ "and video for MSN. It might be released in time for 2.28, but since it "
-#~ "doesn't follow the Gnome release schedule, I can't be sure. If it looks "
-#~ "like it's going to ship, let's mark it Yes."
-#~ msgstr ""
-#~ "Existe trabajo reciente en telepathy-butterfly y papyon para soportar "
-#~ "sonido y vídeo para MSN. Puede que se publique a tiempo para 2.28 pero ya "
-#~ "que no sigue la planificación de publicaciones de GNOME no se puede estar "
-#~ "seguro. Si parece que va a dar tiempo se incluirá."
-
-#~ msgid "Resource"
-#~ msgstr "Recurso"
-
-#~ msgid "Priority"
-#~ msgstr "Prioridad"
-
-#~ msgid "Network"
-#~ msgstr "Red"
-
-#~ msgid "Nickname"
-#~ msgstr "Apodo"
-
-#~ msgid "Password"
-#~ msgstr "Contraseña"
-
-#~ msgid "Real name"
-#~ msgstr "Nombre real"
-
-#~ msgid "Quit message"
-#~ msgstr "Mensaje de salida"
-
-#~ msgid "Charset"
-#~ msgstr "Conjunto de caracteres"
-
-#~ msgid "Servers"
-#~ msgstr "Servidores"
-
-#~ msgid "Edit, remove and add a custom message"
-#~ msgstr "Editar, quitar y añadir un mensaje personalizado"
-
-#~ msgid ""
-#~ "To add a new custom message, from the <gui>Add New Preset</gui> section:"
-#~ msgstr ""
-#~ "Para añadir un mensaje personalizado nuevo, desde la sección <gui>Añadir "
-#~ "estado guardado</gui> "
-
-#~ msgid ""
-#~ "Click on the drop-down list to select the status you want to set a custom "
-#~ "message to."
-#~ msgstr ""
-#~ "Pulse en la lista desplegable para seleccionar el estado en el que quiere "
-#~ "establecer un mensaje personalizado."
-
-#~ msgid "Click on the text box, and type the new custom message."
-#~ msgstr "Pulse en la caja de texto y escriba el mensaje personalizado nuevo."
-
-#~ msgid "Click on <gui>Add</gui> to add the new message to the presets ones."
-#~ msgstr ""
-#~ "Pulse <gui>Añadir</gui> para añadir un mensaje nuevo a los guardados."
-
-#~ msgid "Click on <gui style=\"button\">Remove</gui>."
-#~ msgstr "Pulse <gui style=\"button\">Quitar</gui>."
-
-#~ msgid ""
-#~ "Highlighting text is quirky: <link href=\"http://bugzilla.gnome.org/"
-#~ "show_bug.cgi?id=593733\">#593733</link>. If there's an actual "
-#~ "highlighting going on, independent of the selection (like in yellow or "
-#~ "something), we can use the term \"highlight\". Otherwise we need to use "
-#~ "the term \"select\". Watch that bug."
-#~ msgstr ""
-#~ "Resaltar texto es extraño: <link href=\"http://bugzilla.gnome.org/"
-#~ "show_bug.cgi?id=593733\">#593733</link>. Si existe un resaltado "
-#~ "actualmente, independiente de la selección (en amarillo, por ejemplo), se "
-#~ "puede usar el término «resaltar». De otra forma se debe usar el término "
-#~ "«seleccionado». Siga el progreso del error."
-
-#~ msgid "Select the <gui>Search</gui> tab."
-#~ msgstr "Seleccione la pestaña <gui>Buscar</gui>."
-
-#~ msgid ""
-#~ "In the <gui>For</gui> field, type the text you want to search for. Click "
-#~ "<gui>Find</gui> or press <key>Enter</key>."
-#~ msgstr ""
-#~ "En el campo <gui>Para</gui> escriba el texto que quiere buscar. Pulse "
-#~ "<gui>Buscar</gui> o pulse <key>Intro</key>."
-
-#~ msgid ""
-#~ "Click on a conversation to view it. <app>Empathy</app> will select the "
-#~ "text in the conversation that matched your search terms."
-#~ msgstr ""
-#~ "Pulse sobre una conversación para verla. <app>Empathy</app> seleccionará "
-#~ "el texto en la conversación que coincida con sus términos de búsqueda."
-
-#~ msgid "Select the <gui>Conversations</gui> tab."
-#~ msgstr "Seleccione la pestaña <gui>Conversaciones</gui>."
-
-#~ msgid "Click <gui style=\"button\">Log in</gui>."
-#~ msgstr "Pulse <gui style=\"button\">Iniciar sesión</gui>."
-
-#~ msgid ""
-#~ "Deselect the <gui>Enabled</gui> check-box next to the name of your "
-#~ "account, and then select it again to try to reconnect to the service."
-#~ msgstr ""
-#~ "Deseleccione la casilla de verificación <gui>Activada</gui> junto al "
-#~ "nombre de su cuenta y después selecciónela de nuevo para intentar "
-#~ "reconectar con el servicio."
-
-#~ msgid ""
-#~ "Check that the <gui style=\"checkbox\">Enabled</gui> check-box is "
-#~ "selected. If it is not, select the check-box to enable the account."
-#~ msgstr ""
-#~ "Compruebe que la casilla de verificación <gui style=\"checkbox"
-#~ "\">Activada</gui> está seleccionada. Si no lo está, marque la casilla de "
-#~ "verificación para activar la cuenta."
-
-#~ msgid ""
-#~ "Deselect <gui style=\"checkbox\">Enabled</gui> on the right side of the "
-#~ "window."
-#~ msgstr ""
-#~ "Deseleccione <gui style=\"checkbox\">Activada</gui> en la parte derecha "
-#~ "de la ventana."
-
-#~ msgid ""
-#~ "In order to be able to share your desktop or to remotely use your "
-#~ "contacts desktop, it is necessary to have a remote desktop viewer "
-#~ "application installed in your system."
-#~ msgstr ""
-#~ "Para poder compartir su escritorio o usar remotamente el escritorio de "
-#~ "sus contactos es necesario tener una aplicación de visión remota de "
-#~ "escritorios instalada en su sistema."
-
-#~ msgid ""
-#~ "A request will be sent to the contact you want to share your desktop "
-#~ "with. If they accept, the default remote desktop viewer application will "
-#~ "be launched in order to permit you to disconnect the user that is "
-#~ "controlling your desktop."
-#~ msgstr ""
-#~ "Se enviará una solicitud al contacto con el que quiere compartir su "
-#~ "escritorio. Si acepta, se lanzará la aplicación de visión remota de "
-#~ "escritorios para permitirle desconectar al usuario que está controlando "
-#~ "su escritorio."
-
-#~ msgid ""
-#~ "There are a number of popular free SIP account providers; one popular "
-#~ "provider is <link href=\"https://signup.sipphone.com/new-users/app?"
-#~ "class=NewUser;proc=start\">Sipphone</link>."
-#~ msgstr ""
-#~ "Existe cierto número de proveedores de cuentas SIP populares; un "
-#~ "proveedor popular es <link href=\"https://signup.sipphone.com/new-users/"
-#~ "app?class=NewUser;proc=start\">Sipphone</link>."
-
-#~| msgid ""
-#~| "From the <gui>Contact List</gui> window, click the <media type=\"image\" "
-#~| "mime=\"image/png\" src=\"figures/audio-input-microphone.png\">audio "
-#~| "call</media> icon next to the name of the contact you wish to call and "
-#~| "choose <gui style=\"menuitem\">Audio Call</gui>. Alternatively, right "
-#~| "click the contact and choose <gui style=\"menuitem\">Audio Call</gui>."
-#~ msgid ""
-#~ "From the <gui>Contact List</gui> window, click the <media type=\"image\" "
-#~ "mime=\"image/png\" src=\"figures/audio-input-microphone.png\">audio call</"
-#~ "media> icon next to the name of the contact you wish to call and choose "
-#~ "<gui style=\"menuitem\">Audio Call</gui>."
-#~ msgstr ""
-#~ "Desde la ventana <gui>Lista de contactos</gui> pulse el icono de <media "
-#~ "type=\"image\" mime=\"image/png\" src=\"figures/audio-input-microphone.png"
-#~ "\">llamada de voz</media> junto al nombre del contacto al que quiera "
-#~ "llamar y elija <gui style=\"menuitem\">Llamada de voz<gui>."
-
-#~ msgid ""
-#~ "Click on the trash icon next to the account name to remove the account."
-#~ msgstr ""
-#~ "Para quitar la cuenta pulse el icono de la papelera junto al nombre de la "
-#~ "cuenta."
-
-#~ msgid "To join such a room, if you know the password:"
-#~ msgstr "Para unirse a una sala así, si sabe la contraseña:"
-
-#~ msgid ""
-#~ "<app>Empathy</app> does not currently support password-protected IRC chat "
-#~ "rooms."
-#~ msgstr ""
-#~ "Actualmente <app>Empathy</app> no soporta salas de chat de IRC protegidas "
-#~ "por contraseña."
-
-#~ msgid ""
-#~ "It is not currently possible to join a password-protected IRC chat room."
-#~ msgstr ""
-#~ "Actualmente no es posible unirse a salas protegidas por contraseña en el "
-#~ "IRC."
-
-#~ msgid "See all of your contacts, even those that are not online."
-#~ msgstr "Vea todos sus contactos, incluso aquellos que no están conectados."
-
-#~ msgid "Click <gui>Apply</gui>."
-#~ msgstr "Pulse el botón <gui>Aplicar</gui>."
-
-#~ msgid ""
-#~ "In the case of an IRC account, type your nickname in the <gui>Nickname</"
-#~ "gui> text box."
-#~ msgstr ""
-#~ "En el caso de una cuenta de IRC, escriba su apodo en la caja de texto "
-#~ "<gui>Apodo</gui>."
-
-#~ msgid ""
-#~ "As a special exception, the copyright holders give you permission to "
-#~ "copy, modify, and distribute the example code contained in this document "
-#~ "under the terms of your choosing, without restriction."
-#~ msgstr ""
-#~ "Como excepción especial, los poseedores de los derechos de autor le dan "
-#~ "permiso para copiar, modificar y distribuir el ejemplo de código "
-#~ "contenido en este documento bajo los términos que usted elija, sin "
-#~ "restricción."
-
-#~ msgid "Link to A/V support matrix"
-#~ msgstr "Enlace a la matriz de soporte de S/V"
-
-#~ msgid "Click the <gui style=\"button\">Add</gui> button."
-#~ msgstr "Pulse el botón <gui style=\"button\">Añadir</gui>."
-
-#~ msgid ""
-#~ "If you select another account without clicking <gui>Connect</gui>, any "
-#~ "information you have entered will be lost."
-#~ msgstr ""
-#~ "Si selecciona otra cuenta sin pulsar <gui>Conectar</gui> se perderá "
-#~ "cualquier información introducida."
-
-#~ msgid "Hidden"
-#~ msgstr "Oculto"
diff --git a/help/es/figures/empathy-main-window.png b/help/es/figures/empathy-main-window.png
deleted file mode 100644
index 6d9b7311..00000000
--- a/help/es/figures/empathy-main-window.png
+++ /dev/null
Binary files differ
diff --git a/help/es/figures/empathy-new-account.png b/help/es/figures/empathy-new-account.png
deleted file mode 100644
index c0f9308f..00000000
--- a/help/es/figures/empathy-new-account.png
+++ /dev/null
Binary files differ
diff --git a/help/eu/eu.po b/help/eu/eu.po
deleted file mode 100644
index b5f5439d..00000000
--- a/help/eu/eu.po
+++ /dev/null
@@ -1,3527 +0,0 @@
-# translation of empathy.help.master.po to Basque
-# Iñaki Larrañaga Murgoitio <dooteo@euskalgnu.org>, 2011.
-# Basque translation for empathy.
-# Copyright (C) 2010 empathy's COPYRIGHT HOLDER
-# This file is distributed under the same license as the empathy package.
-msgid ""
-msgstr ""
-"Project-Id-Version: empathy.help.master\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-09-14 08:38+0000\n"
-"PO-Revision-Date: 2011-04-14 16:22+0200\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\n"
-"\n"
-
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/video-call.page:38(None)
-#: C/audio-video.page:70(None)
-#: C/audio-call.page:36(None)
-msgid "@@image: 'figures/camera-web.png'; md5=8166b4372f25b78cbf5a64fe2eac2ce5"
-msgstr "@@image: 'figures/camera-web.png'; md5=8166b4372f25b78cbf5a64fe2eac2ce5"
-
-#: C/video-call.page:10(desc)
-msgid "Start a video conversation with one of your contacts."
-msgstr "Hasi bideo-solasdaldi bat zure kontaktuetako batekin."
-
-#: C/video-call.page:21(name)
-#: C/status-icons.page:16(name)
-#: C/share-desktop.page:13(name)
-#: C/set-custom-status.page:19(name)
-#: C/send-file.page:21(name)
-#: C/salut-protocol.page:18(name)
-#: C/remove-account.page:18(name)
-#: C/prob-conn-neterror.page:18(name)
-#: C/prob-conn-name.page:17(name)
-#: C/prob-conn-auth.page:21(name)
-#: C/prob-conn-acctdisabled.page:18(name)
-#: C/prev-conv.page:16(name)
-#: C/link-contacts.page:15(name)
-#: C/irc-start-conversation.page:15(name)
-#: C/irc-send-file.page:16(name)
-#: C/irc-nick-password.page:18(name)
-#: C/irc-manage.page:19(name)
-#: C/irc-join-room.page:16(name)
-#: C/irc-join-pwd.page:17(name)
-#: C/irc-commands.page:10(name)
-#: C/introduction.page:13(name)
-#: C/index.page:19(name)
-#: C/import-account.page:23(name)
-#: C/hide-contacts.page:11(name)
-#: C/group-conversations.page:19(name)
-#: C/geolocation-what-is.page:18(name)
-#: C/geolocation-turn.page:18(name)
-#: C/geolocation-supported.page:16(name)
-#: C/geolocation-privacy.page:17(name)
-#: C/geolocation-not-showing.page:17(name)
-#: C/geolocation.page:17(name)
-#: C/favorite-rooms.page:14(name)
-#: C/disable-account.page:20(name)
-#: C/create-account.page:18(name)
-#: C/audio-video.page:17(name)
-#: C/audio-call.page:19(name)
-#: C/add-account.page:20(name)
-msgid "Milo Casagrande"
-msgstr "Milo Casagrande"
-
-#: C/video-call.page:22(email)
-#: C/status-icons.page:17(email)
-#: C/share-desktop.page:14(email)
-#: C/set-custom-status.page:20(email)
-#: C/send-file.page:22(email)
-#: C/salut-protocol.page:19(email)
-#: C/remove-account.page:19(email)
-#: C/prob-conn-neterror.page:19(email)
-#: C/prob-conn-name.page:18(email)
-#: C/prob-conn-auth.page:22(email)
-#: C/prob-conn-acctdisabled.page:19(email)
-#: C/prev-conv.page:17(email)
-#: C/link-contacts.page:16(email)
-#: C/irc-start-conversation.page:16(email)
-#: C/irc-send-file.page:17(email)
-#: C/irc-nick-password.page:19(email)
-#: C/irc-manage.page:20(email)
-#: C/irc-join-room.page:17(email)
-#: C/irc-join-pwd.page:18(email)
-#: C/irc-commands.page:11(email)
-#: C/introduction.page:14(email)
-#: C/index.page:20(email)
-#: C/import-account.page:24(email)
-#: C/hide-contacts.page:12(email)
-#: C/group-conversations.page:20(email)
-#: C/geolocation-what-is.page:19(email)
-#: C/geolocation-turn.page:19(email)
-#: C/geolocation-supported.page:17(email)
-#: C/geolocation-privacy.page:18(email)
-#: C/geolocation-not-showing.page:18(email)
-#: C/geolocation.page:18(email)
-#: C/favorite-rooms.page:15(email)
-#: C/disable-account.page:21(email)
-#: C/create-account.page:19(email)
-#: C/audio-video.page:18(email)
-#: C/audio-call.page:20(email)
-#: C/add-account.page:21(email)
-msgid "milo@ubuntu.com"
-msgstr "milo@ubuntu.com"
-
-#: C/video-call.page:25(p)
-#: C/status-icons.page:24(p)
-#: C/share-desktop.page:17(p)
-#: C/set-custom-status.page:23(p)
-#: C/send-message.page:21(p)
-#: C/send-file.page:25(p)
-#: C/salut-protocol.page:22(p)
-#: C/remove-account.page:22(p)
-#: C/prob-conn.page:18(p)
-#: C/prob-conn-neterror.page:22(p)
-#: C/prob-conn-name.page:21(p)
-#: C/prob-conn-auth.page:25(p)
-#: C/prob-conn-acctdisabled.page:22(p)
-#: C/prev-conv.page:24(p)
-#: C/link-contacts.page:19(p)
-#: C/irc-start-conversation.page:19(p)
-#: C/irc-send-file.page:20(p)
-#: C/irc-nick-password.page:22(p)
-#: C/irc-manage.page:23(p)
-#: C/irc-join-room.page:20(p)
-#: C/irc-join-pwd.page:21(p)
-#: C/irc-commands.page:14(p)
-#: C/introduction.page:17(p)
-#: C/index.page:23(p)
-#: C/import-account.page:31(p)
-#: C/hide-contacts.page:15(p)
-#: C/group-conversations.page:23(p)
-#: C/geolocation-what-is.page:22(p)
-#: C/geolocation-turn.page:22(p)
-#: C/geolocation-supported.page:20(p)
-#: C/geolocation-privacy.page:21(p)
-#: C/geolocation-not-showing.page:21(p)
-#: C/geolocation.page:21(p)
-#: C/favorite-rooms.page:18(p)
-#: C/disable-account.page:28(p)
-#: C/create-account.page:22(p)
-#: C/change-status.page:23(p)
-#: C/audio-video.page:21(p)
-#: C/audio-call.page:23(p)
-#: C/add-contact.page:22(p)
-#: C/add-account.page:28(p)
-#: C/accounts-window.page:22(p)
-#: C/account-jabber.page:18(p)
-#: C/account-irc.page:20(p)
-msgid "Creative Commons Share Alike 3.0"
-msgstr "Creative Commons Partekatu Berdin 3.0"
-
-#: C/video-call.page:28(title)
-msgid "Start a video conversation"
-msgstr "Hasi bideo-solasaldi bat"
-
-#: C/video-call.page:30(p)
-msgid ""
-"If you have a webcam, you can call your contacts and have a video "
-"conversation with them. This features only works with certain types of "
-"accounts, and it requires the other person to have an application that "
-"supports video calls."
-msgstr ""
-"Web-kamera bat baduzu, kontaktuei dei diezaiekezu eta bideo-solasaldia izan "
-"haiekin. Eginbide honek kontu mota jakin batzuekin bakarrik funtzionatzen "
-"du, eta beste pertsonak bideo-deiak onartzen dituen aplikazio bat eduki "
-"behar du."
-
-#: C/video-call.page:37(p)
-msgid ""
-"From the <gui>Contact List</gui> window, click the <media type=\"image\" "
-"mime=\"image/png\" src=\"figures/camera-web.png\">video call</media> icon next "
-"to the name of the contact you wish to call and choose <gui "
-"style=\"menuitem\">Video Call</gui>."
-msgstr ""
-"<gui>Kontaktu-zerrenda</gui> leihoan, egin klik deitu nahi diozun "
-"kontaktuaren ondoko <media type=\"image\" mime=\"image/png\" src=\"figures"
-"/camera-web.png\">bideo-deia</media> ikonoan, eta aukeratu <gui "
-"style=\"menuitem\">Bideo-deia</gui>."
-
-#: C/video-call.page:43(p)
-#: C/audio-call.page:42(p)
-msgid ""
-"A new window will open. When the connection is established, you will see "
-"<gui>Connected</gui> at the bottom of the window, along with the total "
-"conversation time."
-msgstr ""
-"Leiho berria irekiko da. Behin konexioa ezarrita, <gui>Konektatuta</gui> "
-"azalduko da leihoaren behealdean, solasaldi-denbora osoarekin batera."
-
-#: C/video-call.page:48(p)
-#: C/audio-call.page:48(p)
-msgid "To end the conversation, click on <gui style=\"button\">Hang up</gui>."
-msgstr ""
-"Solasaldiarekin amaitzeko, egin klik <gui style=\"button\">Eseki</gui> "
-"botoian."
-
-#: C/video-call.page:54(p)
-msgid ""
-"To turn a video conversation into an audio conversation, choose <guiseq><gui "
-"style=\"menu\">Video</gui><gui style=\"menuitem\">Video Off</gui></guiseq>."
-msgstr ""
-"Bideo-solasaldi bat audio-solasaldi bihurtzeko, aukeratu <guiseq><gui "
-"style=\"menu\">Bideoa</gui><gui style=\"menuitem\">Desaktibatu "
-"bideoa</gui></guiseq>."
-
-#: C/video-call.page:60(title)
-msgid "Start a video conversation with a meta-contact"
-msgstr "Hasi bideo-solasaldi bat metakontaktu batekin"
-
-#: C/video-call.page:63(p)
-#: C/send-message.page:53(p)
-#: C/audio-call.page:66(p)
-msgid "From the <gui>Contact List</gui> window, right-click on the meta-contact."
-msgstr ""
-"<gui>Kontaktu-zerrenda</gui> leihoan, egin klik eskuin-botoiarekin "
-"metakontaktuan."
-
-#: C/video-call.page:68(p)
-msgid ""
-"Select the contact you want to have the conversation, and from the menu "
-"select <gui style=\"menuitem\">Video Call</gui>."
-msgstr ""
-"Hautatu zein kontakturekin eduki nahi duzun solasaldia, eta hautatu menuan "
-"<gui style=\"menuitem\">Bideo-deia</gui>."
-
-#: C/video-call.page:75(p)
-#: C/send-message.page:65(p)
-#: C/audio-call.page:78(p)
-msgid ""
-"To recognize if a contact is a <em>meta-contact</em>, move your mouse on a "
-"contact in the <gui>Contact List</gui> window, and stop over it for a "
-"second: a small pop-up message will appear showing the number of the "
-"contacts that form the meta-contact."
-msgstr ""
-"Kontaktu bat <em>metakontaktua</em> den jakiteko, mugitu sagua kontaktu "
-"batean <gui>Kontaktu-zerrenda</gui> leihoan, eta utzi geldirik segundo "
-"batez: laster-leiho txiki bat azalduko da, metakontaktua osatzen duten "
-"kontaktuen kopurua erakusteko."
-
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/status-icons.page:39(None)
-msgid "@@image: 'figures/available.png'; md5=1952a8952efbe87e84b21e09e0587e71"
-msgstr "@@image: 'figures/available.png'; md5=1952a8952efbe87e84b21e09e0587e71"
-
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/status-icons.page:45(None)
-msgid "@@image: 'figures/busy.png'; md5=6cab57171fb6d732a85ace48f11cf207"
-msgstr "@@image: 'figures/busy.png'; md5=6cab57171fb6d732a85ace48f11cf207"
-
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/status-icons.page:53(None)
-msgid "@@image: 'figures/away.png'; md5=9a93ccca527af39cbe11db5c9d915ca0"
-msgstr "@@image: 'figures/away.png'; md5=9a93ccca527af39cbe11db5c9d915ca0"
-
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/status-icons.page:62(None)
-#: C/status-icons.page:69(None)
-msgid "@@image: 'figures/offline.png'; md5=565ba82fbedd22e4eb5b810750199527"
-msgstr "@@image: 'figures/offline.png'; md5=565ba82fbedd22e4eb5b810750199527"
-
-#: C/status-icons.page:7(desc)
-msgid "Understanding the various statuses and status icons."
-msgstr "Egoera eta egoera-ikonoak ulertzea"
-
-#: C/status-icons.page:20(name)
-#: C/salut-protocol.page:36(cite)
-#: C/prev-conv.page:20(name)
-#: C/prev-conv.page:38(cite)
-#: C/import-account.page:27(name)
-#: C/disable-account.page:24(name)
-#: C/audio-video.page:109(cite)
-#: C/audio-video.page:117(cite)
-#: C/add-account.page:24(name)
-#: C/accounts-window.page:18(name)
-#: C/account-jabber.page:14(name)
-#: C/account-irc.page:16(name)
-msgid "Shaun McCance"
-msgstr "Shaun McCance"
-
-#: C/status-icons.page:21(email)
-#: C/prev-conv.page:21(email)
-#: C/import-account.page:28(email)
-#: C/disable-account.page:25(email)
-#: C/add-account.page:25(email)
-#: C/accounts-window.page:19(email)
-#: C/account-jabber.page:15(email)
-#: C/account-irc.page:17(email)
-msgid "shaunm@gnome.org"
-msgstr "shaunm@gnome.org"
-
-#: C/status-icons.page:35(title)
-msgid "Status Types and Icons"
-msgstr "Egoera motak eta haien ikonoak"
-
-#: C/status-icons.page:39(media)
-msgid "Available icon"
-msgstr "Ikono erabilgarria"
-
-#: C/status-icons.page:40(gui)
-msgid "Available"
-msgstr "Erabilgarri"
-
-#: C/status-icons.page:41(p)
-msgid ""
-"Use the <em>Available</em> status when you are at your computer and able to "
-"chat with your contacts. You can set a custom message for this status."
-msgstr ""
-"Erabili <em>Erabilgarri</em> egoera zure ordenagailuan zaudenean eta zure "
-"kontaktuekin hitz egiteko prest zaudenean. Mezu pertsonalizatu bat ezar "
-"diezaiokezu egoera horri."
-
-#: C/status-icons.page:45(media)
-msgid "Busy icon"
-msgstr "'Lanpetuta' ikonoa"
-
-#: C/status-icons.page:46(gui)
-msgid "Busy"
-msgstr "Lanpetuta"
-
-#: C/status-icons.page:47(p)
-msgid ""
-"Use the <em>Busy</em> status to let your contacts know that you don’t want "
-"to chat right now. They can still contact you, for instance if they have "
-"something urgent they need to discuss. By default, <app>Empathy</app> will "
-"not use notification bubbles and sounds when you are busy. You can set a "
-"custom message for this status."
-msgstr ""
-"Erabili <em>Lanpetuta</em> egoera zure kontaktuei jakinarazteko une horretan "
-"ez duzula berriketan egin nahi. Halere, zurekin harremanetan jar daitezke, "
-"eztabaidatzeko presako zerbait badute, esate baterako. Modu lehenetsian, "
-"<app>Empathy</app>-k ez du erabiliko jakinarazpen-burbuilarik edo -soinurik "
-"lanpetuta zaudenean. Mezu pertsonalizatu bat ezar diezaiokezu egoera horri."
-
-#: C/status-icons.page:53(media)
-msgid "Away icon"
-msgstr "'Kanpoan' ikonoa"
-
-#: C/status-icons.page:54(gui)
-msgid "Away"
-msgstr "Kanpoan"
-
-#: C/status-icons.page:55(p)
-msgid ""
-"Use the <em>Away</em> status when you are going away from your computer. "
-"<app>Empathy</app> automatically sets your status to Away if you do not use "
-"your computer for a while, or if your screensaver is on. By default, "
-"<app>Empathy</app> will not use notification bubbles and sounds when you are "
-"away. You can set a custom message for this status."
-msgstr ""
-"Erabili <em>Kanpoan</em> egoera ordenagailuaren ondoan ez zaudela "
-"jakinarazteko. <app>Empathy</app>-k automatikoki jarriko du zure egoera "
-"'Kanpoan' moduan, denbora batez ez baduzu ordenagailua erabiltzen, edo "
-"pantaila-babeslea aktibatuta badago. Modu lehenetsian, <app>Empathy</app>-k "
-"ez du erabiliko jakinarazpen-burbuilarik edo -soinurik kanpoan zaudenean. "
-"Mezu pertsonalizatu bat ezar diezaiokezu egoera horri."
-
-#: C/status-icons.page:62(media)
-#: C/status-icons.page:69(media)
-msgid "Offline icon"
-msgstr "'Lineaz kanpo' ikonoa"
-
-#: C/status-icons.page:63(gui)
-msgid "Invisible"
-msgstr "Ikusezina"
-
-#: C/status-icons.page:64(p)
-msgid ""
-"When you set your status to <em>Invisible</em>, you will appear as offline "
-"to your contacts. You will still be connected to your accounts, and you "
-"still see your contacts’ statuses and start conversations with them."
-msgstr ""
-"Zure egoera <em>Ikusezina</em> gisa ezartzean, zure kontaktuek lineaz kanpo "
-"ikusiko zaituzte. Zure kontuekin konektatuta egongo zara, zure kontaktuen "
-"egoerak ikusi ahal izango dituzu, edota haiekin solasaldiak izan."
-
-#: C/status-icons.page:70(gui)
-msgid "Offline"
-msgstr "Lineaz kanpo"
-
-#: C/status-icons.page:71(p)
-msgid ""
-"Setting your status to <em>Offline</em> disconnects you from all of your "
-"accounts."
-msgstr ""
-"Zure egoeran <em>Lineaz kanpo</em> ezarriz gero, zure kontu guztietatik "
-"deskonektatuko zara."
-
-#: C/share-desktop.page:7(desc)
-msgid "Share the desktop with your contacts."
-msgstr "Partekatu mahaigaina zure kontaktuekin."
-
-#: C/share-desktop.page:28(title)
-msgid "Share your desktop"
-msgstr "Partekatu zure mahaigaina"
-
-#: C/share-desktop.page:30(p)
-msgid ""
-"It is possible, with some of your contacts, to share your desktop with them, "
-"or to start using your contacts desktop. You can use this functionality to "
-"show your desktop to your contacts, to ask for help or to help your contacts "
-"resolve a problem."
-msgstr ""
-"Zure kontaktu batzuekin mahaigaina partekatu ahal izango duzu, edo zure "
-"kontaktuen mahaigaina erabiltzen hasi ahal izango zara. Funtzionaltasun hau "
-"erabil dezakezu zure mahaigaina kontaktuei erakusteko, haiei laguntza "
-"eskatzeko nahiz zuk haiei laguntzeko, arazoren batekin."
-
-#: C/share-desktop.page:38(p)
-msgid ""
-"In order to be able to share your desktop or to remotely use your contacts "
-"desktop, it is necessary to have a remote desktop viewer application "
-"installed in your system."
-msgstr ""
-"Zure mahaigaina partekatzeko gai izateko edo zure kontaktuen mahaigaina "
-"urrunetik erabili ahal izateko, urruneko mahaigainaren ikustaile-aplikazio "
-"bat eduki behar duzu."
-
-#: C/share-desktop.page:46(p)
-#: C/send-file.page:40(p)
-#: C/favorite-rooms.page:66(p)
-msgid "From the <gui>Contact List</gui> window, perform one of the following:"
-msgstr "<gui>Kontaktu-zerrenda</gui> leihoan, egin hauetako bat:"
-
-#: C/share-desktop.page:51(p)
-msgid ""
-"Select the contact you want to share your desktop with, and choose "
-"<guiseq><gui>Edit</gui><gui>Contact</gui><gui>Share my "
-"desktop</gui></guiseq>."
-msgstr ""
-"Hautatu mahaigaina zein kontakturekin partekatu nahi duzun, eta aukeratu "
-"<guiseq><gui>Editatu</gui><gui>Kontaktua</gui><gui>Partekatu nire "
-"mahaigaina</gui></guiseq>."
-
-#: C/share-desktop.page:57(p)
-msgid ""
-"Right-click on the name of the contact you want to share your desktop with, "
-"and select <gui>Share my desktop</gui>."
-msgstr ""
-"Egin klik eskuin-botoiarekin mahaigaina partekatu nahi duzun kontaktuaren "
-"izenean, eta hautatu <gui>Partekatu nire mahaigaina</gui>."
-
-#: C/share-desktop.page:65(p)
-msgid ""
-"A request will be sent to the contact you want to share your desktop with. "
-"If they accept, the default remote desktop viewer application will be "
-"launched in order to permit you to disconnect the user that is controlling "
-"your desktop."
-msgstr ""
-"Eskaera bidaliko zaio mahaigaina partekatu nahi duzun kontaktuari. Onartzen "
-"badute, urruneko mahaigainaren ikustaile-aplikazio lehenetsia abiaraziko da, "
-"zuri aukera emateko zure mahaigaina kontrolatzen ari den erabiltzailea "
-"deskonektatzeko."
-
-#: C/share-desktop.page:70(p)
-msgid ""
-"For more information about how to use the remote desktop viewer application, "
-"refer to its help."
-msgstr ""
-"Urruneko mahaigainaren ikustaile-aplikazio lehenetsiari buruzko informazio "
-"gehiago lortzeko, ikus hari buruzko Laguntza."
-
-#: C/share-desktop.page:77(p)
-msgid ""
-"When you share your desktop with someone else, it is possible to experience "
-"system performance slowdown and low Internet speed."
-msgstr ""
-"Mahaigaina beste norbaitekin partekatzen duzunean, baliteke sistemaren "
-"errendimendua moteltzea eta Interneten abiadura baxuagoa izatea."
-
-#: C/share-desktop.page:83(p)
-msgid ""
-"Not all your contacts might be able to support this functionality. It is "
-"necessary for them to have at least the 2.28 version of <app>Empathy</app> "
-"and a remote desktop viewer application installed in their system."
-msgstr ""
-"Balite zure kontakturen batek funtzionaltasun hau ez onartzea. "
-"<app>Empathy</app>-ren 2.28 bertsioa edo berriagoa eduki behar dute, eta "
-"urruneko mahaigainaren ikustaile-aplikazioa sisteman instalatuta."
-
-#: C/set-custom-status.page:9(desc)
-msgid "Add, edit or delete personal messages for your status."
-msgstr "Gehitu, editatu edo ezabatu mezu pertsonalak zure egoerarako."
-
-#: C/set-custom-status.page:15(name)
-msgid "Jim Campbell"
-msgstr "Jim Campbell"
-
-#: C/set-custom-status.page:16(email)
-msgid "jwcampbell@gmail.com"
-msgstr "jwcampbell@gmail.com"
-
-#: C/set-custom-status.page:34(title)
-msgid "Set a custom message"
-msgstr "Ezarri mezu pertsonalizatua"
-
-#: C/set-custom-status.page:36(p)
-msgid ""
-"Sometimes you may want to set a custom message for your status, for example "
-"to let people know that you will be unavailable for a certain period of "
-"time."
-msgstr ""
-"Batzuetan mezu pertsonalizatu bat ezarri nahiko duzu zure egoeran, esate "
-"baterako, jendeari denbora jakin batean ez zarela egongo jakinarazteko."
-
-#: C/set-custom-status.page:40(p)
-msgid ""
-"It is possible to set a custom message based on the different statuses "
-"available."
-msgstr ""
-"Mezu pertsonalizatu bat ezar daiteke, erabilgarri dauden egoeretan "
-"oinarrituta."
-
-#: C/set-custom-status.page:46(p)
-#: C/set-custom-status.page:82(p)
-msgid ""
-"From the <gui>Contact List</gui> window, click on the drop-down list at the "
-"top."
-msgstr ""
-"<gui>Kontaktu-zerrenda</gui> leihoan, egin klik goian goitibeherako "
-"zerrendan."
-
-#: C/set-custom-status.page:52(p)
-msgid ""
-"Select the status you want to add a custom message to. You have to select "
-"the one identified with the label <gui>Custom Message</gui>."
-msgstr ""
-"Hautatu mezu pertsonalizatua gehitu nahi diozun egoera. <gui>Mezu "
-"pertsonalizatua</gui> etiketa duena hautatu behar duzu."
-
-#: C/set-custom-status.page:58(p)
-msgid ""
-"Enter your custom message in the text box at the top of the window, and "
-"press <key>Enter</key> to set the message."
-msgstr ""
-"Sartu zure mezu pertsonalizatua leihoaren goialdeko testu-koadroan, eta "
-"sakatu <key>Sartu</key> tekla, mezua ezartzeko."
-
-#: C/set-custom-status.page:64(p)
-msgid ""
-"If you want to set the custom message as a favorite, saving it in order to "
-"use it again, click on the little star on the right of the text box where "
-"you wrote your custom message."
-msgstr ""
-"Mezu pertsonalizatua gogoko gisa ezarri nahi baduzu, eta berriro erabiltzeko "
-"gorde nahi baduzu, egin klik mezu pertsonalizatua idatzi duzun testu-"
-"koadroaren eskuinaldeko izartxoan."
-
-#: C/set-custom-status.page:69(p)
-msgid ""
-"If you do not do it, the custom message will not be available the next time "
-"you use <app>Empathy</app>. It will be saved only for the current session."
-msgstr ""
-"Hala egiten ez baduzu, mezu pertsonalizatua ez da erabilgarri egongo "
-"<app>Empathy</app> erabiltzen duzun hurrengoan. Uneko saiorako bakarrik "
-"gordeko da."
-
-#: C/set-custom-status.page:78(title)
-msgid "Edit, remove and add a custom message"
-msgstr "Editatu, kendu eta gehitu mezu pertsonalizatua"
-
-#: C/set-custom-status.page:88(p)
-msgid "Select <gui>Edit Custom Message</gui>."
-msgstr "Hautatu <gui>Editatu mezu pertsonalizatua</gui>."
-
-#: C/set-custom-status.page:95(p)
-msgid "To edit a custom message:"
-msgstr "Mezu pertsonalizatu bat editatzeko:"
-
-#: C/set-custom-status.page:100(p)
-msgid ""
-"From the <gui>Saved Presets</gui> box, select the status message you want to "
-"edit and double-click on it."
-msgstr ""
-"<gui>Gordetako aurrezarpenak</gui> koadroan, hautatu editatu nahi duzun "
-"egoera-mezua, eta egin klik bikoitza bertan."
-
-#: C/set-custom-status.page:106(p)
-msgid "Type the new custom message and press <key>Enter</key> to modify it."
-msgstr "Idatzi mezu pertsonalizatu berria, eta sakatu <key>Sartu</key>, editatzeko."
-
-#: C/set-custom-status.page:113(p)
-msgid "To remove a custom message:"
-msgstr "Mezu pertsonalizatu bat kentzeko:"
-
-#: C/set-custom-status.page:118(p)
-msgid ""
-"From the <gui>Saved Presets</gui> box, select the status message you want to "
-"remove."
-msgstr ""
-"<gui>Gordetako aurrezarpenak</gui> koadroan, hautatu kendu nahi duzun "
-"egoera-mezua."
-
-#: C/set-custom-status.page:124(p)
-msgid "Click on the <gui>Remove</gui> button."
-msgstr "Egin klik <gui>Kendu</gui> botoian."
-
-#: C/set-custom-status.page:131(p)
-msgid "To add a new custom message, from the <gui>Add New Preset</gui> section:"
-msgstr ""
-"Mezu pertsonalizatu bat gehitzeko, <gui>Gehitu aurrezarpen berria</gui> "
-"atalean:"
-
-#: C/set-custom-status.page:136(p)
-msgid ""
-"Click on the drop-down list to select the status you want to set a custom "
-"message to."
-msgstr ""
-"Egin klik goitibeherako zerrendan mezu pertsonalizatua ezarri nahi diozun "
-"egoera hautatzeko."
-
-#: C/set-custom-status.page:142(p)
-msgid "Click on the text box, and type the new custom message."
-msgstr "Egin klik testu-koadroan, eta idatzi mezu pertsonalizatua."
-
-#: C/set-custom-status.page:147(p)
-msgid "Click on <gui>Add</gui> to add the new message to the presets ones."
-msgstr "Egin klik <gui>Gehitu</gui> botoian, mezu berria aurrezarritakoei gehitzeko."
-
-#: C/set-custom-status.page:156(p)
-msgid "When finished, click on <gui>Close</gui>."
-msgstr "Amaitutakoan, egin klik <gui>Itxi</gui> botoian."
-
-#: C/set-custom-status.page:163(p)
-msgid ""
-"When you edit or add a new custom message, it will not be set as the current "
-"status message. You will need to select it from the <gui>Contact List</gui> "
-"window."
-msgstr ""
-"Mezu pertsonalizatu berri bat editatzen edo gehitzen duzunean, ez da "
-"ezarriko uneko egoera-mezu gisa. Hautatu egin beharko duzu <gui>Kontaktu-"
-"zerrenda</gui> leihoan."
-
-#: C/send-message.page:8(desc)
-msgid "Send a message to one of your contacts."
-msgstr "Bidali mezu bat zure kontaktuetako bati."
-
-#: C/send-message.page:17(name)
-#: C/send-file.page:17(name)
-#: C/prob-conn.page:14(name)
-#: C/prob-conn-neterror.page:14(name)
-#: C/prob-conn-auth.page:17(name)
-#: C/prob-conn-acctdisabled.page:14(name)
-#: C/change-status.page:19(name)
-#: C/add-contact.page:18(name)
-msgid "Phil Bull"
-msgstr "Phil Bull"
-
-#: C/send-message.page:18(email)
-#: C/send-file.page:18(email)
-#: C/prob-conn.page:15(email)
-#: C/prob-conn-neterror.page:15(email)
-#: C/prob-conn-auth.page:18(email)
-#: C/prob-conn-acctdisabled.page:15(email)
-#: C/change-status.page:20(email)
-#: C/add-contact.page:19(email)
-msgid "philbull@gmail.com"
-msgstr "philbull@gmail.com"
-
-#: C/send-message.page:32(title)
-msgid "Send a message to someone"
-msgstr "Bidali mezu bat norbaiti"
-
-#: C/send-message.page:36(p)
-msgid ""
-"From the <gui>Contact List</gui> window, double-click the name of the "
-"contact that you want to have a conversation with."
-msgstr ""
-"<gui>Kontaktu-zerrenda</gui> leihoan, egin klik bikoitza solasaldia izan "
-"beharreko kontaktuaren izenean."
-
-#: C/send-message.page:42(p)
-msgid ""
-"A new window will open. Type a message into the box at the bottom of the "
-"window and press <key>Enter</key> to send it."
-msgstr ""
-"Leiho berria irekiko da. Idatzi mezu bat leihoaren behealdeko koadroan, eta "
-"sakatu <key>Sartu</key>, bidaltzeko."
-
-#: C/send-message.page:50(title)
-msgid "Send a message to a meta-contact"
-msgstr "Bidali mezu bat metakontaktu bati"
-
-#: C/send-message.page:58(p)
-msgid ""
-"Select the contact you want to have the conversation, and from the menu "
-"select <gui style=\"menuitem\">Chat</gui>."
-msgstr ""
-"Hautatu zein kontakturekin eduki nahi duzun solasaldia, eta hautatu menuan "
-"<gui style=\"menuitem\">Berriketa</gui>."
-
-#: C/send-file.page:8(desc)
-msgid "Send a file from your computer to one of your contacts."
-msgstr "Bidali fitxategi bat zure ordenagailutik zure kontaktuetako bati."
-
-#: C/send-file.page:36(title)
-msgid "Send files"
-msgstr "Bidali fitxategiak"
-
-#: C/send-file.page:45(p)
-msgid ""
-"Right click on the contact you want to send a file to, and choose <gui>Send "
-"file</gui>."
-msgstr ""
-"Egin klik eskuin-botoiarekin fitxategia bidali nahi diozun kontaktuan, eta "
-"aukeratu <gui>Bidali fitxategia</gui>."
-
-#: C/send-file.page:50(p)
-msgid ""
-"Click on the contact you want to send a file, and choose "
-"<guiseq><gui>Edit</gui><gui>Contact</gui><gui>Send file</gui></guiseq>."
-msgstr ""
-"Egin klik fitxategia bidali nahi diozun kontaktuan, eta aukeratu "
-"<guiseq><gui>Editatu</gui><gui>Kontaktua</gui><gui>Bidali "
-"fitxategia</gui></guiseq>."
-
-#: C/send-file.page:58(p)
-msgid "Select the file to send, and click on <gui>Send</gui>."
-msgstr "Hautau bidali beharreko fitxategia, eta egin klik <gui>Bidali</gui> botoian."
-
-#: C/send-file.page:63(p)
-msgid "The <gui>File Transfers</gui> window will appear."
-msgstr "<gui>Fitxategi-transferentziak</gui> leihoa azalduko da."
-
-#: C/send-file.page:66(p)
-msgid ""
-"Wait for your contact to accept the file transfer, or click <gui>Stop</gui> "
-"to halt the transfer."
-msgstr ""
-"Itxaron kontaktuak fitxategi-transferentzia onartu arte, edo aukeratu "
-"<gui>Gelditu</gui>, transferentzia gelditzeko."
-
-#: C/send-file.page:72(p)
-msgid ""
-"Once the transfer is finished, it is possible to close the <gui>File "
-"Transfers</gui> window."
-msgstr ""
-"Behin transferentzia amaituta, <gui>Fitxategi-transferentziak</gui> leihoa "
-"itxi daiteke."
-
-#: C/send-file.page:80(p)
-msgid ""
-"If you have multiple finished transfers listed in the window, click on "
-"<gui>Clear</gui> to empty the list. This will only remove the files from the "
-"list and will not delete them from your computer."
-msgstr ""
-"Leihoan amaitutako transferentzia bat baino gehiago badaude, egin klik "
-"<gui>Garbitu</gui> botoian zerrenda husteko. Horrekin, fitxategiak "
-"zerrendatik kenduko dira, eta ez dira ezabatuko ordenagailutik."
-
-#: C/send-file.page:87(p)
-msgid ""
-"It is possible to send files only using the following services: "
-"<em>Jabber</em>, <em>Google Talk</em> and <em>People Nearby</em>."
-msgstr ""
-"Ondoko zerbitzuen bidez bakarrik bidal daitezke fitxategiak: "
-"<em>Jabber</em>, <em>Google Talk</em> eta <em>People Nearby</em>."
-
-#: C/send-file.page:93(p)
-msgid ""
-"In order to send a file to someone, you need to be connected to the "
-"Internet, or to a local area network."
-msgstr ""
-"Fitxategi bat norbaiti bidali ahal izateko, Internetekin nahiz sare lokal "
-"batekin konektatuta egon behar duzu."
-
-#: C/salut-protocol.page:8(desc)
-msgid "Understanding the People Nearby feature."
-msgstr "Hurbileko jendea eginbidea ulertzea."
-
-#: C/salut-protocol.page:33(title)
-msgid "What is People Nearby?"
-msgstr "Zer da Hurbileko jendea?"
-
-#: C/salut-protocol.page:37(p)
-msgid "I'd like to see this played up a bit more."
-msgstr "Horri buruzko azalpen gehiago ikusi nahiko nituzke."
-
-#: C/salut-protocol.page:40(p)
-msgid ""
-"The People Nearby service is a serverless communication service: you do not "
-"need to connect and authenticate to a central server in order to use it."
-msgstr ""
-"Hurbileko jendea eginbidea zerbitzaririk gabeko komunikazio-zerbitzu bat da: "
-"ez duzu zerbitzari zentral batekin konektatu eta autentifikatu behar, "
-"erabili ahal izateko."
-
-#: C/salut-protocol.page:45(p)
-msgid ""
-"This kind of serverless messaging system is restricted to a local area "
-"network and an active Internet connection is not necessary."
-msgstr ""
-"Halako zerbitzaririk gabeko mezularitza-sistemak sare lokaletara mugatzen "
-"dira, eta ez da Interneteko konexio aktiborik behar."
-
-#: C/salut-protocol.page:49(p)
-msgid ""
-"The people that use this service inside the same local area network will be "
-"auto-discovered, and it will be possible to send them messages and files as "
-"with other services."
-msgstr ""
-"Sare lokal berean zerbitzu hau erabiltzen duen jendea automatikoki "
-"detektatuko da, eta mezuak nahiz fitxategiak bidali ahal izango zaizkie, "
-"beste zerbitzu batzuekin batera."
-
-#: C/salut-protocol.page:54(p)
-msgid ""
-"All the modern local area networks should be able to support this kind of "
-"service."
-msgstr ""
-"Sare lokal moderno guztiek gai izan beharko lukete halako zerbitzuak "
-"onartzeko."
-
-#: C/remove-account.page:8(desc)
-msgid "Completely remove an account from <app>Empathy</app>."
-msgstr "Kendu kontu bat betiko <app>Empathy</app>-tik."
-
-#: C/remove-account.page:33(title)
-msgid "Remove an account"
-msgstr "Kendu kontu bat"
-
-#: C/remove-account.page:35(p)
-msgid ""
-"You can completely remove an account from <app>Empathy</app> if you no "
-"longer wish to use the account. If you wish to use the account in "
-"<app>Empathy</app> again in the future, you will have to add your account "
-"details again."
-msgstr ""
-"Kontu bat erabat ken dezakezu <app>Empathy</app>-tik, ez baduzu berriro "
-"erabili nahi. Etorkizunean kontu hori <app>Empathy</app>-n berriro erabili "
-"nahi baduzu, kontu-xehetasunak gehitu beharko dituzu berriro."
-
-#: C/remove-account.page:42(p)
-#: C/irc-nick-password.page:50(p)
-#: C/disable-account.page:48(p)
-#: C/add-account.page:48(p)
-msgid ""
-"From the <gui>Contact List</gui> window, choose "
-"<guiseq><gui>Edit</gui><gui>Accounts</gui></guiseq>, or press <key>F4</key>."
-msgstr ""
-"<gui>Kontaktu-zerrenda</gui> leihoan, aukeratu "
-"<guiseq><gui>Editatu</gui><gui>Kontuak</gui></guiseq>, edo sakatu "
-"<key>F4</key>."
-
-#: C/remove-account.page:46(p)
-msgid ""
-"Select the account you wish to remove from the accounts list on the left "
-"side of the window."
-msgstr "Hautatu kontuen zerrendan kendu nahi duzun kontua, leihoaren ezkerraldean."
-
-#: C/remove-account.page:50(p)
-msgid "Click on <gui style=\"button\">Remove</gui>."
-msgstr "Egin klik <gui style=\"button\">Kendu</gui> botoian."
-
-#: C/remove-account.page:53(p)
-msgid ""
-"A dialog will be shown asking for confirmation. Click the <gui>Remove</gui> "
-"button to permanently remove the account."
-msgstr ""
-"Elkarrizketa-koadro bat azalduko da, berrets dezazun. Egin klik <gui>Kendu</gui> "
-"botoian, kontua betiko kentzeko."
-
-#: C/remove-account.page:59(p)
-msgid ""
-"Even after removing an account, <app>Empathy</app> does not delete your "
-"conversation history for that account."
-msgstr ""
-"Kontu bat kendu ondoren, <app>Empathy</app>-k ez du kontu horretako zure "
-"solasaldi-historia ezabatzen."
-
-#: C/prob-conn.page:7(desc)
-msgid "Diagnose common problems connecting to an instant messaging service."
-msgstr ""
-"Diagnostikatu berehalako mezularitzako zerbitzu batekin konektatzeko arazorik "
-"ohikoenak."
-
-#: C/prob-conn.page:29(title)
-msgid "Problems connecting to an instant messaging service"
-msgstr "Arazoak berehalako mezularitzako zerbitzu batekin konektatzeko"
-
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/prob-conn-neterror.page:58(None)
-#: C/prob-conn-name.page:43(None)
-#: C/prob-conn-auth.page:58(None)
-#: C/account-irc.page:109(None)
-msgid "@@image: 'figures/gtk-edit.png'; md5=4f21b451732817be0604fe3e2c8da98b"
-msgstr "@@image: 'figures/gtk-edit.png'; md5=4f21b451732817be0604fe3e2c8da98b"
-
-#: C/prob-conn-neterror.page:7(desc)
-msgid ""
-"An error message which says “<gui>Network error</gui>” appears in the main "
-"window."
-msgstr ""
-"“<gui>Sareko errorea</gui>” dioen errore-mezu bat azalduko da leiho "
-"nagusian."
-
-#: C/prob-conn-neterror.page:33(title)
-msgid "I get a message that says “Network error”"
-msgstr "“Sareko errorea” dioen mezu bat jaso dut"
-
-#: C/prob-conn-neterror.page:36(cite)
-msgid "shaunm"
-msgstr "shaunm"
-
-#: C/prob-conn-neterror.page:37(p)
-msgid ""
-"Empathy no longer allows you to create an IRC account without a valid nick. "
-"I've removed the guide link. Remove the text."
-msgstr ""
-"Empathy-k ez du onartzen IRC konturik sortzea baliozko goitizenik gabe. "
-"Gida-esteka kendu dut. Kendu testua."
-
-#: C/prob-conn-neterror.page:41(p)
-msgid ""
-"This kind of error happens when <app>Empathy</app> cannot communicate with "
-"the instant messaging service for some reason."
-msgstr ""
-"Halako erroreak gertatzen dira <app>Empathy</app> ezin denean komunikatu "
-"berehalako mezularitzako zerbitzuarekin arrazoiren bat dela-eta."
-
-#: C/prob-conn-neterror.page:45(p)
-msgid ""
-"Also, this kind of error happens when you try to use an IRC account without "
-"setting a nickname."
-msgstr ""
-"Era berean, errore horiek gertatzen dira saiatzen zarenean IRC kontu bat "
-"erabiltzen goitizenik ezarri gabe."
-
-#: C/prob-conn-neterror.page:52(p)
-#: C/prob-conn-auth.page:45(p)
-#: C/prob-conn-acctdisabled.page:43(p)
-msgid ""
-"Make sure that you are connected to the Internet, or to a local area "
-"network."
-msgstr "Ziurtatu Internetekin konektatuta zaudela, edo sare lokal batekin."
-
-#: C/prob-conn-neterror.page:57(p)
-#: C/prob-conn-name.page:42(p)
-#: C/prob-conn-auth.page:57(p)
-msgid ""
-"Click the <media type=\"image\" mime=\"image/png\" src=\"figures/gtk-"
-"edit.png\">edit</media> icon in the error message."
-msgstr ""
-"Egin klik <media type=\"image\" mime=\"image/png\" src=\"figures/gtk-"
-"edit.png\">editatu</media> ikonoan, errore-mezuan."
-
-#: C/prob-conn-neterror.page:65(p)
-#: C/prob-conn-acctdisabled.page:59(p)
-msgid ""
-"Check in the <gui>Advanced</gui> section that all the details are correct. "
-"You should be able to find these details from the website of the messaging "
-"service."
-msgstr ""
-"Egiaztatu <gui>Aurreratua</gui> atalean xehetasun guztiak ondo dauden ala "
-"ez. Mezularitza-zerbitzuaren webgunean ere badaude xehetasun horiek."
-
-#: C/prob-conn-neterror.page:82(p)
-#: C/prob-conn-auth.page:68(p)
-msgid ""
-"Deselect the <gui>Enabled</gui>, and then select it again to try to "
-"reconnect to the service."
-msgstr ""
-"Desautatu <gui>Gaituta</gui> koadroa, eta hautatu berriro, zerbitzuarekin "
-"berriro konektatzen saiatzeko."
-
-#: C/prob-conn-neterror.page:90(title)
-msgid "Proxy support"
-msgstr "Proxy euskarria"
-
-#: C/prob-conn-neterror.page:91(p)
-msgid "At the moment <app>Empathy</app> can not be configured to work with a proxy."
-msgstr "Une honetan,<app>Empathy</app> ezin da konfiguratu proxy-rekin lan egiteko."
-
-#: C/prob-conn-name.page:9(title)
-msgid "“Name in use”"
-msgstr "“Izena hartuta dago”"
-
-#: C/prob-conn-name.page:10(desc)
-msgid ""
-"An error message which says “<gui>Name in use</gui>” appears in the main "
-"window."
-msgstr ""
-"“<gui>Izena hartuta dago</gui>” dioen errore-mezu bat azalduko da leiho "
-"nagusian."
-
-#: C/prob-conn-name.page:32(title)
-msgid "I get a message that says “Name in use”"
-msgstr "“Izena hartuta dago” dioen mezu bat jaso dut"
-
-#: C/prob-conn-name.page:34(p)
-msgid ""
-"This kind of error happens when you try to connect to your IRC account and "
-"you are using a nickname that is already being used by someone else on that "
-"particular network."
-msgstr ""
-"Halako erroreak gertatzen dira saiatzen zarenean zure IRC kontuarekin "
-"konektatzen beste norbaitek sare horretan bertan erabiltzen duen "
-"goitizenarekin."
-
-#: C/prob-conn-name.page:50(p)
-msgid "In the <gui>Nickname</gui> text box, type a new nickname."
-msgstr "<gui>Goitizena</gui> testu-koadroan, idatzi goitizen berria."
-
-#: C/prob-conn-name.page:55(p)
-msgid ""
-"If you have registered that nickname within the network you are using, set "
-"the password for that nickname. For more information, see <link xref=\"irc-"
-"nick-password\"/>."
-msgstr ""
-"Pasahitz hori erabiltzen ari zaren sarean erregistratu baduzu, ezarri "
-"goitizen horren pasahitza. Informazio gehiago lortzeko, ikus <link xref"
-"=\"irc-nick-password\"/>."
-
-#: C/prob-conn-name.page:64(p)
-msgid ""
-"Deselect the <gui>Enabled</gui> check-box next to the name of your account, "
-"and then select it again to try to reconnect to the service."
-msgstr ""
-"Desautatu zure kontuaren izenaren ondoko <gui>Gaituta</gui> kontrol-laukia, "
-"eta hautatu berriro zerbitzuarekin berriro konektatzeko."
-
-#: C/prob-conn-auth.page:8(desc)
-msgid ""
-"An error message which says “<gui>Authentication failed</gui>” appears in "
-"the main window."
-msgstr ""
-"“<gui>Autentifikazioak huts egin du</gui>” dioen errore-mezu bat azalduko da "
-"leiho nagusian."
-
-#: C/prob-conn-auth.page:36(title)
-msgid "I get a message that says “Authentication failed”"
-msgstr "“Autentifikazioak huts egin du” dioen mezu bat jaso dut"
-
-#: C/prob-conn-auth.page:38(p)
-msgid ""
-"This kind of error happens when your instant messaging service is not "
-"allowing you to connect because it does not recognize your username or "
-"password for some reason."
-msgstr ""
-"Horrelako erroreak gertatzen dira zure berehalako mezularitzako zerbitzuak ez "
-"dizunean konektatzen uzten ez duelako ezagutzen zure erabiltzaile-izena edo "
-"pasahitza, arrazoiren bat dela-eta."
-
-#: C/prob-conn-auth.page:50(p)
-msgid ""
-"Make sure that you have registered an account with the service you are "
-"trying to connect to. If you do not have an account, most services will not "
-"allow you to connect."
-msgstr ""
-"Ziurtatu kontu bat erregistratu duzula konektatzen saiatzen ari zaren "
-"zerbitzuarekin. Konturik ez baduzu, zerbitzu gehienek ez dizute konektatzen "
-"utziko."
-
-#: C/prob-conn-auth.page:63(p)
-#: C/prob-conn-acctdisabled.page:54(p)
-msgid "Type your username and password again to make sure that they are correct."
-msgstr ""
-"Idatzi berriro zure erabiltzaile-izena eta pasahitza, zuzenak direla "
-"ziurtatzeko."
-
-#: C/prob-conn-acctdisabled.page:7(desc)
-msgid ""
-"The instant messaging account that you want to use is not enabled in the "
-"list of accounts."
-msgstr ""
-"Erabili nahi duzun berehalako mezularitzako kontua ez dago gaituta kontuen "
-"zerrendan."
-
-#: C/prob-conn-acctdisabled.page:33(title)
-msgid "My account is not enabled"
-msgstr "Nire kontua ez dago gaituta"
-
-#: C/prob-conn-acctdisabled.page:35(p)
-msgid ""
-"If the instant messaging account that you want to use is not enabled in the "
-"drop-down account list when you try to start a new conversation or join a "
-"room, your account details may not be correct."
-msgstr ""
-"Erabili nahi duzun berehalako mezularitzako kontua ez badago gaituta "
-"goitibeherako kontu-zerrendan solasaldi berri bat hasten edo gela batean "
-"sartzen saiatzen zarenean, agian kontuaren xehetasunak ez dira zuzenak "
-"izango."
-
-#: C/prob-conn-acctdisabled.page:48(p)
-msgid ""
-"Choose <guiseq><gui>Edit</gui><gui>Accounts</gui></guiseq> and select the "
-"account that is not working."
-msgstr ""
-"Aukeratu <guiseq><gui>Editatu</gui><gui>Kontuak</gui></guiseq>, eta hautatu "
-"ondo ez dabilen kontua."
-
-#: C/prob-conn-acctdisabled.page:65(p)
-msgid ""
-"Check that the <gui style=\"checkbox\">Enabled</gui> check-box is selected. If "
-"it is not, select the check-box to enable the account."
-msgstr ""
-"Ziurtatu <gui style=\"checkbox\">Gaituta</gui> kontrol-laukia hautatuta "
-"dagoela. Hautatuta ez badago, hauta ezazu kontrol-laukia, kontua gaitzeko."
-
-#: C/prev-conv.page:8(desc)
-msgid "Browse or search your previous conversations."
-msgstr "Arakatu edo bilatu lehenagoko zure solasaldiak."
-
-#: C/prev-conv.page:35(title)
-msgid "View previous conversations"
-msgstr "Ikusi lehenagoko solasaldiak"
-
-#: C/prev-conv.page:39(p)
-msgid ""
-"Highlighting text is quirky: <link "
-"href=\"http://bugzilla.gnome.org/show_bug.cgi?id=593733\">#593733</link>. If "
-"there's an actual highlighting going on, independent of the selection (like "
-"in yellow or something), we can use the term \"highlight\". Otherwise we need "
-"to use the term \"select\". Watch that bug."
-msgstr ""
-"Testua nabarmentzea ez dabil ondo: <link "
-"href=\"http://bugzilla.gnome.org/show_bug.cgi?id=593733\">#593733</link>. "
-"Nabarmentzeren bat badago, hautapenetik kanpo (horiz edo horrelako zerbait), "
-"\"nabarmendu\" terminoa erabil dezakegu. Bestela, \"hautatu\" terminoa erabili "
-"behar dugu. Ikus akatsa."
-
-#: C/prev-conv.page:46(p)
-msgid ""
-"<app>Empathy</app> automatically saves all your text conversations you have "
-"with your contacts. You can <link xref=\"#search\">search through all of your "
-"previous conversations</link> or <link xref=\"#browse\">browse previous "
-"conversations</link> by contact and date."
-msgstr ""
-"<app>Empathy</app>-k automatikoki gordetzen ditu zuk kontaktuekin dituzun "
-"testu-solasaldi guztiak. <link xref=\"#search\">Lehenagoko zure solasaldi "
-"guztiak bila ditzakezu</link>, edo <link xref=\"#browse\">lehenagoko "
-"solasaldiak araka ditzakezu</link> kontaktuaren eta dataren arabera."
-
-#: C/prev-conv.page:54(p)
-msgid ""
-"You do not need to be connected to the Internet to view and search your "
-"previous conversations."
-msgstr ""
-"Ez duzu Internetekin konektatu beharrik lehenagoko zure solasaldiak ikusteko "
-"eta bilatzeko."
-
-#: C/prev-conv.page:61(title)
-msgid "Search previous conversations"
-msgstr "Bilatu lehenagoko solasaldiak"
-
-#: C/prev-conv.page:63(p)
-msgid ""
-"You can perform a full-text search through all of your previous "
-"conversations."
-msgstr "Testu osoko bilaketa egin dezakezu lehenagoko zure solasaldi guztietan."
-
-#: C/prev-conv.page:67(p)
-#: C/prev-conv.page:96(p)
-msgid ""
-"From the <gui>Contact List</gui> window, choose "
-"<guiseq><gui>View</gui><gui>Previous Conversations</gui></guiseq>. "
-"Alternatively, press <key>F3</key>."
-msgstr ""
-"<gui>Kontaktu-zerrenda</gui> leihoan, aukeratu "
-"<guiseq><gui>Ikusi</gui><gui>Lehenagoko solasaldiak</gui></guiseq>. Bestela, "
-"sakatu <key>F3</key>."
-
-#: C/prev-conv.page:71(p)
-msgid "Select the <gui>Search</gui> tab."
-msgstr "Hautatu <gui>Bilatu</gui> fitxa."
-
-#: C/prev-conv.page:74(p)
-msgid ""
-"In the <gui>For</gui> field, type the text you want to search for. Click "
-"<gui>Find</gui> or press <key>Enter</key>."
-msgstr ""
-"<gui>Bilatu hau</gui> eremuan, idatzi bilatu nahi duzun testua. Egin klik "
-"<gui>Bilatu</gui> botoian, eta sakatu <key>Sartu</key>."
-
-#: C/prev-conv.page:78(p)
-msgid ""
-"Any conversations that matched your search terms will be shown in the list "
-"below the search field. By default, conversations are ordered by date."
-msgstr ""
-"Zure bilaketa-terminoekin bat datozen solasaldi guztiak beheko zerrendan "
-"azalduko dira, bilaketa-eremuaren azpian. Modu lehenetsian, solasaldiak "
-"dataren arabera ordenatzen dira."
-
-#: C/prev-conv.page:82(p)
-msgid ""
-"Click on a conversation to view it. <app>Empathy</app> will select the text "
-"in the conversation that matched your search terms."
-msgstr ""
-"Egin klik solasaldi batean, ikusteko. <app>Empathy</app>-k zure bilaketa-"
-"terminoekin bat datorren solasaldiko testua hautatuko du."
-
-#: C/prev-conv.page:89(title)
-msgid "Browse previous conversations"
-msgstr "Arakatu lehenagoko solasaldiak"
-
-#: C/prev-conv.page:91(p)
-msgid ""
-"You can browse your previous conversations with your contacts or in chat "
-"rooms by date."
-msgstr ""
-"Zure kontaktuekin nahiz berriketa-geletan izandako lehenagoko solasaldiak "
-"araka ditzakezu dataren arabera."
-
-#: C/prev-conv.page:100(p)
-msgid "Select the <gui>Conversations</gui> tab."
-msgstr "Hautatu <gui>Solasaldiak</gui> fitxa."
-
-#: C/prev-conv.page:103(p)
-msgid ""
-"Select an account from the drop-down list in the top left. A list of "
-"contacts and chat room for that account will be shown below."
-msgstr ""
-"Hautatu kontu bat goi-ezkerraldeko goitibeherako zerrendan. Kontu horren "
-"kontaktuen eta berriketa-gelen zerrenda bat azalduko da behean."
-
-#: C/prev-conv.page:107(p)
-msgid ""
-"Select a contact or chat room to view your previous conversations from. By "
-"default the most recent conversation will be shown."
-msgstr ""
-"Hautatu kontaktua edo berriketa-gela zure lehenagoko solasaldiak ikusteko. "
-"Modu lehenetsian, azken solasaldiak azalduko dira."
-
-#: C/prev-conv.page:111(p)
-msgid ""
-"You can browse your conversations by date. Days on which you had a "
-"conversation with the selected contact will be shown in bold text. Click a "
-"date to select it. Click the arrows next to the month and year to browse "
-"earlier dates."
-msgstr ""
-"Dataren arabera araka ditzakezu solasaldiak. Hautatutako kontaktuarekin "
-"solasaldi bat izandako egunak letra lodiz bistaratuko dira. Egin klik data "
-"batean, hautatzeko. Egin klik hilabetearen eta urtearen ondoko gezietan "
-"lehenagoko datak arakatzeko."
-
-#: C/prev-conv.page:117(p)
-msgid ""
-"You can search for text in the displayed conversation by typing into the "
-"search field at the top. The matching text will be highlighted."
-msgstr ""
-"Bistaratutako solasaldian testua bilatzeko, idatz ezazu goiko bilaketa-"
-"eremuan. Bat datorren testua nabarmenduko da."
-
-#: C/prev-conv.page:121(p)
-msgid ""
-"You can quickly view the previous conversations with one of your contacts "
-"from the <gui>Contact List</gui> window. Simply right click the contact and "
-"choose <gui>View Previous Conversations</gui>. The <gui>Previous "
-"Conversations</gui> window will open with that contact already selected."
-msgstr ""
-"Lehenagoko solasaldiak bizkor ikusteko, joan <gui>Kontaktu-zerrenda</gui> "
-"leihora. Egin klik eskuin-botoiarekin kontaktuan, eta aukeratu <gui>Ikusi "
-"lehenagoko solasaldiak</gui>. <gui>Lehenagoko solasaldiak</gui> leihoa "
-"irekiko da, kontaktu hori hautatuta dagoela."
-
-#: C/link-contacts.page:11(desc)
-msgid "Merge and separate different contacts into a single one."
-msgstr "Batu eta bereizi hainbat kontaktu bakar batean."
-
-#: C/link-contacts.page:25(title)
-msgid "Combine and separate contacts"
-msgstr "Konbinatu eta bereizi kontaktuak"
-
-#: C/link-contacts.page:26(p)
-msgid ""
-"If one, or more, of your contacts has multiple accounts with different "
-"messaging services, you can combine these contacts into a single one."
-msgstr ""
-"Zure kontakturen batek hainbat kontu baditu mezularitza-zerbitzu batekin "
-"baino gehiagorekin, kontaktu horiek bakar batean konbina ditzakezu."
-
-#: C/link-contacts.page:30(p)
-msgid ""
-"The resulting contact is called a <em>meta-contact</em>: a contact composed "
-"from different single contacts."
-msgstr ""
-"Horren emaitza <em>metakontaktua</em> izango da: hainbat kontaktuk osatutako "
-"kontaktu bat."
-
-#: C/link-contacts.page:34(p)
-msgid ""
-"If you have a Jane Smith contact that is using three different messaging "
-"services like:"
-msgstr ""
-"Baldin baduzu Jane Smith izeneko kontaktu bat, hiru mezularitza-zerbitzu "
-"erabiltzen dituena, esate baterako:"
-
-#: C/link-contacts.page:40(p)
-msgid "janes@facebook"
-msgstr "janes@facebook"
-
-#: C/link-contacts.page:45(p)
-msgid "jane.smith@gmail"
-msgstr "jane.smith@gmail"
-
-#: C/link-contacts.page:50(p)
-msgid "jane_smith@hotmail"
-msgstr "jane_smith@hotmail"
-
-#: C/link-contacts.page:55(p)
-msgid "You can combine these contacts into a single Jane Smith one."
-msgstr "Kontaktu horiek konbina ditzakezu Jane Smith izeneko kontaktu bakar batean."
-
-#: C/link-contacts.page:60(title)
-msgid "Combining contacts"
-msgstr "Kontaktuak konbinatzea"
-
-#: C/link-contacts.page:63(p)
-msgid ""
-"From the <gui>Contact List</gui> window, right-click one of the contact that "
-"has different accounts, and select <gui style=\"menuitem\">Link "
-"Contacts...</gui>."
-msgstr ""
-"<gui>Kontaktu-zerrenda</gui> leihoan, egin klik eskuin-botoiarekin kontu bat "
-"baino gehiago dituen kontaktu batean, eta hautatu <gui "
-"style=\"menuitem\">Estekatu kontaktuak...</gui>."
-
-#: C/link-contacts.page:70(p)
-msgid ""
-"From the left pane in the <gui>Link Contacts</gui> window, select the "
-"contacts you want to combine."
-msgstr ""
-"<gui>Estekatu kontaktuak</gui> leihoaren ezkerraldeko panelean, hautatu "
-"konbinatu nahi dituzun kontaktuak."
-
-#: C/link-contacts.page:76(p)
-msgid "Click <gui style=\"button\">Link</gui>."
-msgstr "Egin klik <gui style=\"button\">Estekatu</gui> botoian."
-
-#: C/link-contacts.page:82(p)
-msgid ""
-"When a meta-contact has been created, the default contact that will be used "
-"to have a conversation with when you double-click on it, is the contact with "
-"the highest presence on-line."
-msgstr ""
-"Metakontaktu bat sortu ondoren, zuk klik bikoitza kontaktuan egitean "
-"solasaldia harekin edukitzeko erabiliko den kontaktu lehenetsia linean "
-"presentzia handiena duen kontaktua izango da."
-
-#: C/link-contacts.page:91(title)
-msgid "Separating contacts"
-msgstr "Kontaktuak bereiztea"
-
-#: C/link-contacts.page:94(p)
-msgid ""
-"From the <gui>Contact List</gui>, right-click the contact to separate, and "
-"select <gui style=\"menuitem\">Link Contacts...</gui>."
-msgstr ""
-"<gui>Kontaktu-zerrendan</gui>, egin klik eskuin-botoiarekin bereizi "
-"beharreko kontaktuan, eta hautatu <gui style=\"menuitem\">Estekatu "
-"kontaktuak...</gui>."
-
-#: C/link-contacts.page:100(p)
-msgid "Click <gui style=\"button\">Unlink</gui>."
-msgstr "Egin klik <gui style=\"button\">Desestekatu</gui> botoian."
-
-#: C/license.page:8(desc)
-msgid "Legal information."
-msgstr "Lege-informazioa."
-
-#: C/license.page:11(title)
-msgid "License"
-msgstr "Lizentzia"
-
-#: C/license.page:12(p)
-msgid ""
-"This work is distributed under a CreativeCommons Attribution-Share Alike 3.0 "
-"Unported license."
-msgstr ""
-"CreativeCommons Aitortu-PartekatuBerdin 3.0 Unported lizentziapean banatzen "
-"da lan hau."
-
-#: C/license.page:20(p)
-msgid "You are free:"
-msgstr "Aske zara:"
-
-#: C/license.page:25(em)
-msgid "To share"
-msgstr "Partekatzeko"
-
-#: C/license.page:26(p)
-msgid "To copy, distribute and transmit the work."
-msgstr "Lana kopiatu, banatu eta jendaurrean hedatzeko."
-
-#: C/license.page:29(em)
-msgid "To remix"
-msgstr "Nahasteko"
-
-#: C/license.page:30(p)
-msgid "To adapt the work."
-msgstr "Lana egokitzeko."
-
-#: C/license.page:33(p)
-msgid "Under the following conditions:"
-msgstr "Baldintza hauetan:"
-
-#: C/license.page:38(em)
-msgid "Attribution"
-msgstr "Aitortu"
-
-#: C/license.page:39(p)
-msgid ""
-"You must attribute the work in the manner specified by the author or "
-"licensor (but not in any way that suggests that they endorse you or your use "
-"of the work)."
-msgstr ""
-"Lanaren kredituak aitortu behar dituzu, egileak edo baimendunak zehaztutako "
-"eran (baina ez aditzera emanez haien babesa duzunik edo haiek lanaren "
-"erabilera hori babesten dutenik)."
-
-#: C/license.page:46(em)
-msgid "Share Alike"
-msgstr "Partekatu baimen beraren arabera"
-
-#: C/license.page:47(p)
-msgid ""
-"If you alter, transform, or build upon this work, you may distribute the "
-"resulting work only under the same, similar or a compatible license."
-msgstr ""
-"Lan hau aldatzen baldin baduzu, edo lan eratorri bat sortzen baduzu, "
-"sortutako lana bana dezakezu soil-soilik baimen beraren edo antzeko nahiz "
-"bateragarri baten mende."
-
-#: C/license.page:53(p)
-msgid ""
-"For the full text of the license, see the <link "
-"href=\"http://creativecommons.org/licenses/by-"
-"sa/3.0/legalcode\">CreativeCommons website</link>, or read the full <link "
-"href=\"http://creativecommons.org/licenses/by-sa/3.0/\">Commons Deed</link>."
-msgstr ""
-"Lizentziaren testu osoa irakurtzeko, ikus <link "
-"href=\"http://creativecommons.org/licenses/by-"
-"sa/3.0/legalcode\">CreativeCommons webgunea</link>, edo irakurri <link "
-"href=\"http://creativecommons.org/licenses/by-sa/3.0/\">Commons Deed</link>."
-
-#: C/irc-start-conversation.page:8(desc)
-msgid "Start a conversation witn an IRC contact."
-msgstr "Hasi solasaldi bat IRC kontaktu batekin."
-
-#: C/irc-start-conversation.page:30(title)
-msgid "Chat with somebody on IRC"
-msgstr "Egin berriketan IRCko norbaitekin"
-
-#: C/irc-start-conversation.page:32(p)
-msgid ""
-"You can hold private conversations with other IRC users, outside of the "
-"public IRC chat rooms. To start a conversation with another IRC user:"
-msgstr ""
-"Solasaldi pribatuak izan ditzakezu IRC erabiltzaileekin, IRC berriketa-gela "
-"publikoetatik kanpo. Solasaldi bat hasteko beste IRC erabiltzaile batekin:"
-
-#: C/irc-start-conversation.page:37(p)
-msgid ""
-"In the contact list for an IRC chat room, double click the name of the user "
-"you want to chat with. Alternatively, right click the name of the user and "
-"choose <gui>Chat</gui>."
-msgstr ""
-"IRC berriketa-gela bateko kontaktu-zerrendan, egin klik bikoitza berriketan "
-"egin nahi duzun erabiltzailean. Bestela, egin klik eskuin-botoiarekin "
-"erabiltzailean, eta aukeratu <gui>Berriketa</gui>."
-
-#: C/irc-start-conversation.page:45(p)
-msgid ""
-"The IRC room contact list is not the same as <app>Empathy</app> contact "
-"list. It contains a list of users in the IRC chat room you joined. Different "
-"rooms can have different contacts listed."
-msgstr ""
-"IRC gelako kontaktu-zerrenda ez da <app>Empathy</app>-ren kontaktu-zerrenda "
-"bera. Zu sartu zaren IRC berriketa-gelako erabiltzaileen zerrenda dauka. "
-"Gela bakoitzak kontaktu desberdinak izan ditzake zerrendan."
-
-#: C/irc-start-conversation.page:52(p)
-msgid ""
-"The IRC room contact list is usually on the right side of the IRC room "
-"window. If you do not see it, choose "
-"<guiseq><gui>Conversation</gui><gui>Show Contact List</gui></guiseq>."
-msgstr ""
-"IRC gelako kontaktu-zerrenda IRC gelaren leihoaren eskuinaldean egoten da "
-"normalean. Ez baduzu ikusten, aukeratu "
-"<guiseq><gui>Solasaldia</gui><gui>Erakutsi kontaktu-zerrenda</gui></guiseq>."
-
-#: C/irc-send-file.page:9(desc)
-msgid "<app>Empathy</app> does not currently support sending files using IRC."
-msgstr ""
-"<app>Empathy</app>-k ez du onartzen gaur egun fitxategiak IRC bidez "
-"bidaltzea."
-
-#: C/irc-send-file.page:31(title)
-msgid "Send files over IRC"
-msgstr "Bidali fitxategiak IRC bidez"
-
-#: C/irc-send-file.page:33(p)
-msgid "It is not currently possible to send files using IRC."
-msgstr "Gaur egun, ezin da fitxategirik bidali IRC bidez."
-
-#: C/irc-nick-password.page:10(desc)
-msgid "Protect your nickname to prevent other IRC users from using it."
-msgstr "Babestu zure goitizena beste IRC erabiltzaileek erabil ez dezaten."
-
-#: C/irc-nick-password.page:33(title)
-msgid "Use a nickname password on IRC"
-msgstr "Erabili goitizen-pasahitz bat IRCn"
-
-#: C/irc-nick-password.page:35(p)
-msgid ""
-"On some IRC networks, you can register your nickname with a service called "
-"NickServ. By sending special messages to NickServ, you can set your password "
-"and identify yourself. Some IRC chat rooms may not allow you to join "
-"without a registered nickname."
-msgstr ""
-"IRC sare batzuetan, zure goitizena erregistra dezakezu, NickServ izeneko "
-"zerbitzuarekin. NickServ-i mezu bereziak bidaliz gero, zure pasahitza ezarri "
-"eta zure burua identifikatu ahal izango duzu. Baliteke IRC berriketa-gela "
-"batzuek ez onartzea zu erregistratutako goitizenik gabe sartzea."
-
-#: C/irc-nick-password.page:40(p)
-msgid ""
-"<app>Empathy</app> does not currently support nickname registration. Some "
-"IRC networks, however, will automatically forward a <em>server password</em> "
-"to NickServ. On these networks, you can use the IRC password in "
-"<app>Empathy</app> to identify yourself to NickServ. The popular freenode "
-"network is known to have this feature."
-msgstr ""
-"<app>Empathy</app>-k gaur egun ez du onartzen goitizen-erregistrorik. IRC "
-"sare batzuek, nolanahi ere, automatikoki bidaliko dute <em>zerbitzariko "
-"pasahitz</em> bat NickServ-era. Sare horietan, IRC pasahitza erabil dezakezu "
-"<app>Empathy</app>-n, zure burua identifikatzeko NickServ-en. Freenode sare "
-"ezagunak badu eginbide hori."
-
-#: C/irc-nick-password.page:46(p)
-msgid "To set an IRC server password:"
-msgstr "IRC zerbitzariaren pasahitza ezartzeko:"
-
-#: C/irc-nick-password.page:54(p)
-msgid "Select the IRC account from the list on the left of the dialog."
-msgstr "Hautatu IRC kontua elkarrizketa-koadroaren ezkerraldeko zerrendan."
-
-#: C/irc-nick-password.page:57(p)
-msgid ""
-"In the <gui>Password</gui> field, type the password you used to register "
-"your nikcname."
-msgstr ""
-"<gui>Pasahitza</gui> eremuan, idatzi zure goitizena erregistratzeko erabili "
-"duzun pasahitza."
-
-#: C/irc-nick-password.page:63(p)
-#: C/import-account.page:61(p)
-msgid "Click <gui style=\"button\">Apply</gui>."
-msgstr "Egin klik <gui style=\"button\">Aplikatu</gui> botoian."
-
-#: C/irc-nick-password.page:69(p)
-msgid ""
-"These instructions only allow you to use a password-protected nickname on "
-"certain IRC networks. It is not currently possible to register an IRC "
-"nickname or change your nickname password using <app>Empathy</app>."
-msgstr ""
-"Jarraibide horiek pasahitzez babestutako goitizena IRC sare batzuetan "
-"bakarrik erabiltzeko aukera ematen dizute. Gaur egun, ezin da IRC goitizenik "
-"erregistratu edo goitizenik aldatu <app>Empathy</app>-rekin."
-
-#: C/irc-manage.page:9(desc)
-msgid "How to use IRC with <app>Empathy</app>."
-msgstr "Nola erabili IRC <app>Empathy</app>-rekin."
-
-#: C/irc-manage.page:34(title)
-msgid "Internet Relay Chat (IRC)"
-msgstr "Interneteko berriketa-zerbitzua (Internet Relay Chat: IRC)"
-
-#: C/irc-manage.page:37(p)
-#: C/account-irc.page:39(p)
-msgid ""
-"You must have the <sys>telepathy-idle</sys> package installed to use IRC in "
-"<app>Empathy</app>."
-msgstr ""
-"<sys>telepathy-idle</sys> paketea instalatuta eduki behar duzu IRC "
-"<app>Empathy</app>-n erabili ahal izateko."
-
-#: C/irc-manage.page:43(title)
-msgid "IRC Chat Rooms and Conversations"
-msgstr "IRC berriketa-gelak eta solasaldiak"
-
-#: C/irc-manage.page:45(title)
-msgid "Chat Rooms and Conversations"
-msgstr "Berriketa-gelak eta solasaldiak"
-
-#: C/irc-manage.page:50(title)
-msgid "Common IRC Problems"
-msgstr "IRC arazorik ohikoenak"
-
-#: C/irc-manage.page:52(title)
-#: C/index.page:55(title)
-msgid "Common Problems"
-msgstr "Arazorik ohikoenak"
-
-#: C/irc-join-room.page:8(desc)
-msgid "Join an IRC channel."
-msgstr "Sartu IRC kanal batean."
-
-#: C/irc-join-room.page:31(title)
-msgid "Join an IRC chat room"
-msgstr "Sartu IRC berriketa-gela batean"
-
-#: C/irc-join-room.page:33(p)
-msgid ""
-"You can join IRC chat rooms (also known as IRC channels) on any IRC network "
-"you’re connected to. To connect to an IRC network, see <link xref=\"add-"
-"account\"/> and <link xref=\"account-irc\"/>."
-msgstr ""
-"IRC berriketa-geletan (IRC kanal gisa ere ezagutzendira) sar zaitezke "
-"konektatuta zauden IRC sare guztietan. IRC sare batekin konektatzeko, ikus "
-"<link xref=\"add-account\"/> eta <link xref=\"account-irc\"/>."
-
-#: C/irc-join-room.page:39(p)
-#: C/group-conversations.page:58(p)
-#: C/group-conversations.page:122(p)
-msgid ""
-"From the <gui>Contact List</gui> window, choose "
-"<guiseq><gui>Room</gui><gui>Join</gui></guiseq>."
-msgstr ""
-"<gui>Kontaktu-zerrenda</gui> leihoan, aukeratu "
-"<guiseq><gui>Gela</gui><gui>Sartu</gui></guiseq>."
-
-#: C/irc-join-room.page:45(p)
-msgid ""
-"From the <gui>Account</gui> drop-down list, select the IRC account that "
-"corresponds to the network you want to use."
-msgstr ""
-"Goitibeherako <gui>Kontua</gui> zerrendan, hautatu erabili nahi duzun "
-"sareari dagokion IRC kontua."
-
-#: C/irc-join-room.page:51(p)
-msgid ""
-"In the <gui>Room</gui> text box, type the name of the channel you want to "
-"join. IRC channel names start with the hash character (<sys>#</sys>)."
-msgstr ""
-"<gui>Gela</gui> testu-koadroan, idatzi sartu nahi duzun kanalaren izena. IRC "
-"kanal-izenak traolarekin (<sys>#</sys>) hasten dira."
-
-#: C/irc-join-room.page:57(p)
-msgid "Click <gui>Join</gui> to enter the room."
-msgstr "Egin klik <gui>Sartu</gui> botoian, gelan sartzeko."
-
-#: C/irc-join-room.page:64(p)
-msgid "To join multiple rooms, you need to repeat the steps above for each room."
-msgstr ""
-"Hainbat gelatan sartzeko, goiko urratsak errepikatu behar dituzu gela "
-"bakoitzean."
-
-#: C/irc-join-pwd.page:9(desc)
-msgid "Enter password-protected IRC chat rooms."
-msgstr "Sartu pasahitzez babestutako IRC berriketa-gelak."
-
-#: C/irc-join-pwd.page:25(title)
-msgid "Join a protected IRC chat room"
-msgstr "Sartu babestutako IRC berriketa-gela batean"
-
-#: C/irc-join-pwd.page:27(p)
-msgid ""
-"On some IRC networks, private IRC rooms may be protected with a password. If "
-"you know the password, use the following steps to join:"
-msgstr ""
-"IRC sare batzuetan, IRC gela pribatuak pasahitz batez babestuta egon "
-"daitezke. Pasahitza badakizu, erabili hurrengo urratsak sartzeko:"
-
-#: C/irc-join-pwd.page:33(p)
-msgid "<link xref=\"irc-join-room\">Join the room</link> as normal."
-msgstr "<link xref=\"irc-join-room\">Sartu gelan</link> normalean bezala."
-
-#: C/irc-join-pwd.page:38(p)
-msgid ""
-"Empathy will prompt you for a password. Enter the password for the IRC chat "
-"room and click <gui style=\"button\">Join</gui>."
-msgstr ""
-"Empathy-k pasahitza eskatuko dizu. Sartu IRC berriketa-gelaren pasahitza, "
-"eta egin klik <gui style=\"button\">Sartu</gui> botoian."
-
-#: C/irc-commands.page:7(desc)
-msgid "The supported IRC commands."
-msgstr "Onartutako IRC komandoak."
-
-#: C/irc-commands.page:18(title)
-msgid "Supported IRC commands"
-msgstr "Onartutako IRC komandoak"
-
-#: C/irc-commands.page:19(p)
-msgid ""
-"To see the list of the supported IRC commands, in a chat room type "
-"<input>/help</input> and press <key>Enter</key>."
-msgstr ""
-"Onartutako IRC komandoen zerrenda ikusteko, idatzi <input>/help</input> "
-"berriketa-gela batean, eta sakatu <key>Sartu</key>."
-
-#: C/irc-commands.page:24(p)
-msgid "All commands available have a small description on their usage."
-msgstr ""
-"Komando erabilgarri guztiek beren erabilerari buruzko azalpen laburra "
-"daukate."
-
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/introduction.page:41(None)
-msgid ""
-"@@image: 'figures/empathy-main-window.png'; "
-"md5=489ba00b0fc377aba4c691210b6e0650"
-msgstr ""
-"@@image: 'figures/empathy-main-window.png'; "
-"md5=489ba00b0fc377aba4c691210b6e0650"
-
-#: C/introduction.page:9(desc)
-msgid "Introduction to the <app>Empathy</app> instant messenger."
-msgstr "<app>Empathy</app> berehalako mezulariaren sarrera."
-
-#: C/introduction.page:21(title)
-msgid "Introduction"
-msgstr "Sarrera"
-
-#: C/introduction.page:23(p)
-msgid ""
-"<app>Empathy</app> is an instant messaging application for the GNOME "
-"Desktop. It supports text messaging, voice &amp; video calls, file "
-"transfers, and all the most used messaging systems such as MSN and Google "
-"Talk."
-msgstr ""
-"<app>Empathy</app> berehalako mezularitza-aplikazioa da GNOME mahaigainerako. "
-"Testu-mezularitza, ahots- eta bideo-deiak, fitxategi-transferentziak, eta "
-"gehien erabilitako mezularitza-sistemak, MSN eta Google Talk, esate "
-"baterako."
-
-#: C/introduction.page:28(p)
-msgid ""
-"<app>Empathy</app> includes features that help you better collaborate while "
-"at work, and that let you easily keep in touch with your friends."
-msgstr ""
-"<app>Empathy</app>-k lanean zaudenean elkarlanean aritzen lagunduko dizuten "
-"eginbideak dauzka, lagunekin harremanetan errazago egoteko."
-
-#: C/introduction.page:32(p)
-msgid ""
-"Using <app>Empathy</app>, you can group all the conversations in a single "
-"window, have multiple windows for different kind of conversations, easily "
-"search through your previous conversations, and share your desktop in just "
-"two clicks."
-msgstr ""
-"<app>Empathy</app> erabiliz gero, solasaldi guztiak leiho bakar batean "
-"taldeka ditzakezu, hainbat leiho eduki hainbat solasaldi motatarako, "
-"lehenagoko solasaldietan erraz bilatu, eta zure mahaigaina partekatu bi klik "
-"bakarrik eginez."
-
-#: C/introduction.page:39(title)
-msgid "<gui>Contact List</gui> window"
-msgstr "<gui>Kontaktu-zerrenda</gui> leihoa"
-
-#: C/introduction.page:40(desc)
-msgid "<app>Empathy</app> main window"
-msgstr "<app>Empathy</app> leiho nagusia"
-
-#: C/introduction.page:42(p)
-msgid "<app>Empathy</app> main window."
-msgstr "<app>Empathy</app> leiho nagusia."
-
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/index.page:28(None)
-msgid "@@image: 'figures/empathy-logo.png'; md5=14568248b11d2cfe7992c5edd7e157e8"
-msgstr "@@image: 'figures/empathy-logo.png'; md5=14568248b11d2cfe7992c5edd7e157e8"
-
-#: C/index.page:7(title)
-#: C/index.page:8(title)
-msgid "Empathy Internet Messenger"
-msgstr "Empathy Internet mezularitza"
-
-#: C/index.page:27(title)
-msgid ""
-"<media type=\"image\" mime=\"image/png\" src=\"figures/empathy-logo.png\"> Empathy "
-"Internet Messenger logo </media> Empathy Internet Messenger"
-msgstr ""
-"<media type=\"image\" mime=\"image/png\" src=\"figures/empathy-logo.png\"> Empathy "
-"Internet mezularitzaren logotipoa </media> Empathy Internet mezularitza"
-
-#: C/index.page:35(title)
-msgid "Account Management"
-msgstr "Kontuaren kudeaketa"
-
-#: C/index.page:39(title)
-msgid "Contact Management"
-msgstr "Kontaktuak kudeatzea"
-
-#: C/index.page:43(title)
-msgid "Text Conversations"
-msgstr "Testu-solasaldiak"
-
-#: C/index.page:47(title)
-msgid "Audio and Video Conversations"
-msgstr "Audio- eta bideo-solasaldiak"
-
-#: C/index.page:51(title)
-msgid "Advanced Actions"
-msgstr "Ekintza aurreratuak"
-
-#: C/import-account.page:10(desc)
-msgid "Import an account from another instant messaging application."
-msgstr "Inportatu kontu bat berehalako mezularitzako beste aplikazio batetik."
-
-#: C/import-account.page:19(name)
-msgid "Peter Haslam"
-msgstr "Peter Haslam"
-
-#: C/import-account.page:20(email)
-msgid "peter.haslam@freenet.de"
-msgstr "peter.haslam@freenet.de"
-
-#: C/import-account.page:42(title)
-msgid "Import an existing account"
-msgstr "Inportatu lehendik dagoen kontu bat"
-
-#: C/import-account.page:44(p)
-msgid ""
-"The first time you run <app>Empathy</app>, it will offer to import your "
-"accounts from other instant messaging applications. Currently, the only "
-"supported application is <app>Pidgin</app>."
-msgstr ""
-"<app>Empathy</app> exekutatzen duzun lehen aldian, aukera emango dizu zure "
-"kontuak beste berehalako mezularitzako aplikazioetatik inportatzeko. Une "
-"honetan, onartzen den aplikazio bakarra <app>Pidgin</app> da."
-
-#: C/import-account.page:50(p)
-msgid ""
-"Run <app>Empathy</app> for the first time. An assistant will offer you a "
-"number of options to create new accounts."
-msgstr ""
-"Exekutatu <app>Empathy</app> lehen aldiz. Laguntzaile batek hainbat aukera "
-"emango dizkizu kontu berriak sortzeko."
-
-#: C/import-account.page:54(p)
-msgid ""
-"Select <gui>Yes, import my account details from</gui> and click "
-"<gui>Forward</gui>."
-msgstr ""
-"Hautatu <gui>Bai, inportatu nire kontu-xehetasunak hemendik</gui>, eta egin "
-"klik <gui>Aurrera</gui> botoian."
-
-#: C/import-account.page:58(p)
-msgid "Select the check box next to each account you wish to import."
-msgstr "Hautatu inportatu nahi duzun kontu bakoitzaren ondoko kontrol-laukia."
-
-#: C/import-account.page:66(p)
-msgid ""
-"It is not currently possible to import accounts after you have completed the "
-"first-run assistant."
-msgstr "Gaur egun ezin da konturik inportatu lehen aldiko laguntzailea osatu arte."
-
-#: C/hide-contacts.page:8(desc)
-msgid "Hide the offline contacts from your <gui>Contact List</gui>."
-msgstr "Ezkutatu lineaz kanpoko kontaktuak <gui>Kontaktu-zerrendan</gui>."
-
-#: C/hide-contacts.page:19(title)
-msgid "Hide offline contacts"
-msgstr "Ezkutatu lineaz kanpoko kontaktuak"
-
-#: C/hide-contacts.page:21(p)
-msgid ""
-"Normally, <app>Empathy</app> shows all your contacts: those that are online, "
-"with which you can have a conversation, and also those that are offline."
-msgstr ""
-"Normalean, <app>Empathy</app>-k zure kontaktu guztiak erakusten ditu: linean "
-"daudenak (horiekin solasaldi bat izan dezakezu), eta lineaz kanpo daudenak."
-
-#: C/hide-contacts.page:25(p)
-msgid "To hide the contacts that are offline:"
-msgstr "Lineaz kanpo dauden kontaktuak ezkutatzeko:"
-
-#: C/hide-contacts.page:31(p)
-msgid ""
-"From the <gui>Contact List</gui> window, choose "
-"<guiseq><gui>View</gui><gui>Offline Contacts</gui></guiseq>, or press "
-"<keyseq><key>Ctrl</key><key>H</key></keyseq>."
-msgstr ""
-"<gui>Kontaktu-zerrenda</gui> leihoan, aukeratu "
-"<guiseq><gui>Ikusi</gui><gui>Lineaz kanpoko kontaktuak</gui></guiseq>, edo "
-"sakatu <keyseq><key>Ktrl</key><key>H</key></keyseq>."
-
-#: C/hide-contacts.page:36(p)
-msgid "To show the offline contacts again, repeat the same procedure above."
-msgstr "Lineaz kanpoko kontaktuak berriro erakusteko, errepikatu goiko prozedura."
-
-#: C/group-conversations.page:8(desc)
-msgid "Start or join a group conversation with your contacts."
-msgstr "Hasi edo sartu talde-solasaldi batean zure kontaktuekin."
-
-#: C/group-conversations.page:34(title)
-msgid "Group conversations"
-msgstr "Talde-solasaldiak"
-
-#: C/group-conversations.page:36(p)
-msgid ""
-"Group conversations permits you to have text conversations with more than "
-"one contact at the same time."
-msgstr ""
-"Talde-solasaldiek aukera ematen dizute testu-solasaldiak edukitzeko kontaktu "
-"batekin baino gehiagorekin batera."
-
-#: C/group-conversations.page:40(p)
-msgid ""
-"To have a group conversation you need to have a registered account with "
-"either Jabber or Google Talk, or a People Nearby account."
-msgstr ""
-"Talde-solasaldi bat edukitzeko, Jabber edo Google Talk-en erregistratutako "
-"kontu bat eduki behar duzu, edo Hurbileko jendea zerbitzuaren kontu bat."
-
-#: C/group-conversations.page:46(p)
-msgid ""
-"You can have a group conversation only with the contacts that are using the "
-"same service as yours."
-msgstr ""
-"Talde-solasaldi bat edukitzeko, kontaktuek zure zerbitzu bera erabili behar "
-"dute."
-
-#: C/group-conversations.page:54(title)
-msgid "Start a group conversation"
-msgstr "Hasi talde-solasaldi bat"
-
-#: C/group-conversations.page:63(p)
-msgid ""
-"From the <gui>Account</gui> drop-down list, select the account you want to "
-"use for the group conversation."
-msgstr ""
-"Goitibeherako <gui>Kontua</gui> zerrendan, hautatu talde-solasaldirako "
-"erabili nahi duzun kontua."
-
-#: C/group-conversations.page:69(p)
-msgid ""
-"In the <gui>Server</gui> text box, type the name of server in which the "
-"conversation will be hosted."
-msgstr ""
-"<gui>Zerbitzaria</gui> testu-koadroan, idatzi solasaldiaren ostalaria izango "
-"den zerbitzariaren izena."
-
-#: C/group-conversations.page:73(p)
-msgid "Leave it empty if it will be on the current server."
-msgstr "Utzi hutsik, uneko zerbitzarian balitz."
-
-#: C/group-conversations.page:78(p)
-msgid ""
-"In the <gui>Room</gui> text box, type the name you want to give to the "
-"conversation."
-msgstr "<gui>Gela</gui> testu-koadroan, idatzi solasaldiari eman nahi diozun izena."
-
-#: C/group-conversations.page:82(p)
-msgid ""
-"This will be the name of the room you are going to have a conversation. This "
-"name will be publicly available for other people to join. It is not "
-"possible to create a private room."
-msgstr ""
-"Solasaldia izango duzun gelaren izena izango da. Izen hori publikoki "
-"erabilgarria izango da sartzen diren besteentzat. Ezin da gela pribaturik "
-"sortu."
-
-#: C/group-conversations.page:90(p)
-msgid ""
-"To invite other contacts to join the group conversation, from the "
-"<gui>Contact List</gui> window, select the contact you want to invite, and "
-"perform one of the following:"
-msgstr ""
-"Beste kontaktuak talde-solasaldian sartzeko gonbidatzeko, <gui>Kontaktu-"
-"zerrenda</gui> leihoan, hautatu gonbidatu nahi duzun kontaktua, eta egin "
-"hauetako bat:"
-
-#: C/group-conversations.page:97(p)
-msgid "Right-click on the contact and choose <gui>Invite to chatroom</gui>."
-msgstr ""
-"Egin klik eskuin-botoiarekin kontaktuan, eta aukeratu <gui>Gonbidatu "
-"berriketa-gelara</gui>."
-
-#: C/group-conversations.page:102(p)
-msgid ""
-"Choose <guiseq><gui>Edit</gui><gui>Contact</gui><gui>Invite to "
-"chatroom</gui></guiseq>."
-msgstr ""
-"Aukeratu <guiseq><gui>Editatu</gui><gui>Kontaktua</gui><gui>Gonbidatu "
-"berriketa-gelara</gui></guiseq>."
-
-#: C/group-conversations.page:107(p)
-msgid ""
-"If you have more than one group conversation open, select the one you want "
-"to invite your contacts."
-msgstr ""
-"Talde-solasaldi bat baino gehiago irekita badauzkazu, hautatu kontaktuak "
-"gonbidatu nahi dituzuna."
-
-#: C/group-conversations.page:118(title)
-msgid "Join a group conversation"
-msgstr "Sartu talde-solasaldi batean"
-
-#: C/group-conversations.page:128(p)
-msgid "Expand the <gui>Room List</gui> section to see all the existing rooms."
-msgstr "Zabaldu <gui>Gelen zerrenda</gui> atala, dauden gela guztiak ikusteko."
-
-#: C/group-conversations.page:133(p)
-msgid "Double-click on the name of a room to join it."
-msgstr "Egin klik bikoitza gela baten izenean, bertan sartzeko."
-
-#: C/group-conversations.page:139(p)
-msgid ""
-"It is not possible to join all existing rooms. Some of the rooms might "
-"require a password, or might be invitation only. <app>Empathy</app> does not "
-"support these kind of rooms."
-msgstr ""
-"Ezin da sartu dauden gela guztietan. Gela batzuek pasahitza behar dezakete, "
-"edo gonbidapenarekin nahikoa izan daiteke agian. <app>Empathy</app>-k ez "
-"ditu horrelako gelak onartzen."
-
-#: C/geolocation-what-is.page:9(desc)
-msgid "Understanding geolocation."
-msgstr "Geokokalekua ulertzea."
-
-#: C/geolocation-what-is.page:33(title)
-msgid "What is geolocation"
-msgstr "Zer da geokokalekua?"
-
-#: C/geolocation-what-is.page:35(p)
-msgid ""
-"Geolocation allows you to identify the real geographical location of a "
-"computer or a device connected to the Internet."
-msgstr ""
-"Geokokalekuak aukera ematen dizu Internetekin konektatutako ordenagailu "
-"nahiz gailu baten benetako kokaleku geografikoa identifikatzeko."
-
-#: C/geolocation-what-is.page:37(p)
-msgid "With geolocation in <app>Empathy</app> you can:"
-msgstr "Geokokalekuari esker, hau dena egin dezakezu <app>Empathy</app>-n:"
-
-#: C/geolocation-what-is.page:42(p)
-msgid "Publish your geographical location to your contacts."
-msgstr "Zure kokaleku geografikoa zure kontaktuei argitaratu."
-
-#: C/geolocation-what-is.page:47(p)
-msgid "See your contacts’ geographical location and quickly contact them."
-msgstr ""
-"Ikusi zure kontaktuen kokaleku geografikoa, eta jarri haiekin bizkor "
-"harremanetan."
-
-#: C/geolocation-what-is.page:52(p)
-msgid ""
-"Set the accuracy of your location and the device used to discover your "
-"location."
-msgstr ""
-"Ezarri zure kokalekuaren zehaztasuna, eta zure kokalekua aurkitzeko "
-"erabilitako gailua."
-
-#: C/geolocation-what-is.page:60(p)
-msgid ""
-"In order to see your contacts’ geographical locations, they need to use a "
-"service and an application that supports geolocation."
-msgstr ""
-"Zure kontaktuen kokaleku geografikoak ikusi ahal izateko, geokokalekua "
-"onartzen duten zerbitzua eta aplikazioa erabili behar dituzte."
-
-#: C/geolocation-turn.page:9(desc)
-msgid "How to activate and deactivate geolocation in <app>Empathy</app>."
-msgstr "Nola aktibatu eta desaktibatu geokokalekua <app>Empathy</app>-n?"
-
-#: C/geolocation-turn.page:33(title)
-msgid "Activate/Deactivate geolocation"
-msgstr "Aktibatu/desaktibatu geokokalekua"
-
-#: C/geolocation-turn.page:37(p)
-msgid "Choose <guiseq><gui>Edit</gui><gui>Preferences</gui></guiseq>."
-msgstr "Aukeratu <guiseq><gui>Editatu</gui><gui>Hobespenak</gui></guiseq>."
-
-#: C/geolocation-turn.page:42(p)
-msgid "Select the <gui>Location</gui> tab."
-msgstr "Hautatu <gui>Kokalekua</gui> fitxa."
-
-#: C/geolocation-turn.page:47(p)
-msgid "Select <gui>Publish location to my contacts</gui> to activate geolocation."
-msgstr ""
-"Hautatu <gui>Argitaratu kokalekua nire kontaktuei</gui> geokokalekua "
-"aktibatzeko."
-
-#: C/geolocation-turn.page:50(p)
-msgid "To deactivate geolocation, deselect it."
-msgstr "Geokokalekua desaktibatzeko, desauta ezazu."
-
-#: C/geolocation-turn.page:55(p)
-msgid ""
-"To increase the accuracy of your position, deselect <gui>Reduce location "
-"accuracy</gui>."
-msgstr ""
-"Zure kokalekuaren zehaztasuna handiagotzeko, desautatu <gui>Txikiagotu "
-"kokalekuaren zehaztasuna</gui>."
-
-#: C/geolocation-turn.page:61(p)
-msgid ""
-"If you have an external device like a GPS or want to send a more accurate "
-"position, select the appropriate option in the <gui>Geoclue Settings</gui> "
-"section."
-msgstr ""
-"Kanpoko gailu bat badaukazu (GPS bat, esate baterako), edo kokaleku "
-"zehatzago bat bidali nahi baduzu, hautatu dagokion aukera <gui>Geoclue "
-"ezarpenak</gui> atalean."
-
-#: C/geolocation-supported.page:7(desc)
-msgid "Services that supports geolocation and compatibility."
-msgstr "Geokokalekua eta bateragarritasuna onartzen dituzten zerbitzuak."
-
-#: C/geolocation-supported.page:31(title)
-msgid "Supported services"
-msgstr "Onartutako zerbitzuak"
-
-#: C/geolocation-supported.page:33(p)
-msgid ""
-"The geolocation feature at the moment is compatible only with the Jabber "
-"service. In order to use it, you and your contacts need to have a Jabber "
-"account."
-msgstr ""
-"Geokokalekuaren eginbidea Jabber zerbitzuarekin bakarrik erabil daiteke gaur "
-"egun. Erabili ahal izateko, bai zuk eta bai zure kontaktuek Jabber kontu "
-"bat eduki behar duzue."
-
-#: C/geolocation-supported.page:39(p)
-msgid ""
-"It is necessary that also the server you are using supports the geolocation "
-"feature. Most of the Jabber servers support it. See your service website "
-"documentation for more information."
-msgstr ""
-"Erabiltzen ari zaren zerbitzariak ere onartu behar du geokokalekuaren "
-"eginbidea. Jabber zerbitzari gehienek onartzen dute. Ikus zure zerbitzuaren "
-"webguneko dokumentazioa informazio gehiago izateko."
-
-#: C/geolocation-supported.page:47(title)
-msgid "Compatibility"
-msgstr "Bateragarritasuna"
-
-#: C/geolocation-supported.page:49(p)
-msgid ""
-"<app>Empathy</app> geolocation feature is not compatible with other "
-"geographical position services such as <em>Google Latitude</em>, <em>Yahoo "
-"Fire Eagle</em> or <em>Brightkite</em>."
-msgstr ""
-"<app>Empathy</app>-ren geokokalekuaren eginbidea ez da bateragarria beste "
-"zerbitzuekin (<em>Google Latitude</em>, <em>Yahoo Fire Eagle</em>, "
-"<em>Brightkite</em>...)."
-
-#: C/geolocation-privacy.page:8(desc)
-msgid "What information are sent and to who."
-msgstr "Zein informazio bidaltzen da, eta nori?"
-
-#: C/geolocation-privacy.page:32(title)
-msgid "Geolocation Privacy"
-msgstr "Geokokalekuaren pribatutasuna"
-
-#: C/geolocation-privacy.page:35(title)
-msgid "What information is sent"
-msgstr "Zein informazio bidaltzen da?"
-
-#: C/geolocation-privacy.page:36(p)
-msgid ""
-"What is possible to send is: your country, region, locality, area, street, "
-"building, floor, room, and postal code, longitude, latitude and altitude, "
-"speed and bearing."
-msgstr ""
-"Hau dena bidal daiteke: zure herrialdea, eskualdea, hiria edo herria, area, "
-"kalea, eraikina, solairua, letra, eta posta-kodea, longitudea, latitudea, "
-"altitudea, abiadura eta orientazioa."
-
-#: C/geolocation-privacy.page:40(p)
-msgid ""
-"The accuracy and the quantity of information about your geographical "
-"position are based on the software or on the infrastructure used to discover "
-"your position."
-msgstr ""
-"Zure kokaleku geografikoari buruzko informazioaren kopurua eta zehaztasuna "
-"oinarrituta daude zure kokalekua aurkitzeko erabilitako azpiegituraren "
-"softwarean."
-
-#: C/geolocation-privacy.page:44(p)
-msgid ""
-"Different kind of networks may have different accuracy settings, and may "
-"send different information. The use of external devices such as GPS or "
-"mobile phone will increase the accuracy of the information sent."
-msgstr ""
-"Hainbat sare motak zehaztasun-ezarpen desberdinak eduki ditzakete, eta "
-"informazio desberdina bidal dezakete. Kanpoko gailuak erabiltzea, GPSak edo "
-"telefono mugikorrak esate baterako, bidalitako informazioaren zehaztasuna "
-"handiagotuko dute."
-
-#: C/geolocation-privacy.page:49(p)
-msgid ""
-"When the privacy mode is enabled, nothing more precise than your city will "
-"be sent, even if you are using an external device."
-msgstr ""
-"Pribatutasun modua gaituta dagoenean, hiria besterik ez da bidaliko, kanpoko "
-"gailu bat erabiltzen ari bazara ere."
-
-#: C/geolocation-privacy.page:56(title)
-msgid "Who can see the information sent"
-msgstr "Nork ikus dezake bidalitako informazioa?"
-
-#: C/geolocation-privacy.page:57(p)
-msgid "Only your contacts can see your geographical position."
-msgstr "Zure kontaktuek bakarrik ikusi ahal izango dute zure kokaleku geografikoa."
-
-#: C/geolocation-privacy.page:63(title)
-msgid "What is the privacy mode"
-msgstr "Zer da pribatutasun modua?"
-
-#: C/geolocation-privacy.page:64(p)
-msgid ""
-"The privacy mode, enabled by default, is a reduced accuracy mode that will "
-"decrease the accuracy of the geographical position sent to your contacts."
-msgstr ""
-"Pribatutasun modua modu lehenetsian gaitua dago, eta zure kontaktuei "
-"bidalitako kokaleku geografikoaren zehaztasuna txikiagotuko du."
-
-#: C/geolocation-privacy.page:71(title)
-msgid "Privacy overview"
-msgstr "Pribatutasunaren sarrera"
-
-#: C/geolocation-privacy.page:72(p)
-msgid "Overview of the various geolocation privacy settings in <app>Empathy</app>."
-msgstr ""
-"<app>Empathy</app>-ren geokokalekuaren pribatutasun-ezarpenen ikuspegi "
-"orokorra."
-
-#: C/geolocation-privacy.page:77(p)
-msgid "Geolocation is not enabled by default."
-msgstr "Geokokalekua ez dago gaituta modu lehenetsian."
-
-#: C/geolocation-privacy.page:82(p)
-msgid "Privacy mode is enabled by default."
-msgstr "Pribatutasun modua dago modu lehenetsian gaituta."
-
-#: C/geolocation-privacy.page:87(p)
-msgid "Privacy mode prevails even when using external and more precise devices."
-msgstr ""
-"Pribatutasun modua aplikatuko da, kanpoko gailuak nahiz gailu zehatzagoak "
-"erabili arren."
-
-#: C/geolocation-privacy.page:92(p)
-msgid "Only your contacts can see your position."
-msgstr "Zure kontaktuek bakarrik ikusi ahal izango dute zure kokalekua."
-
-#: C/geolocation-not-showing.page:8(desc)
-msgid "<app>Empathy</app> does not publish my geographical position."
-msgstr "<app>Empathy</app>-k ez du argitaratzen nire kokaleku geografikoa."
-
-#: C/geolocation-not-showing.page:32(title)
-msgid "Geographical position not published"
-msgstr "Kokaleku geografikoa ez da argitaratu"
-
-#: C/geolocation-not-showing.page:34(p)
-msgid ""
-"If your contacts cannot see your location, <app>Empathy</app> might not be "
-"able to discover with a good margin of precision your geographical position."
-msgstr ""
-"Zure kontaktuek ezin badute zure kokalekua ikusi, agian <app>Empathy</app>-k "
-"ezingo du aurkitu zure kokaleku geografikoa zehaztasun-marjina on batekin."
-
-#: C/geolocation-not-showing.page:38(p)
-msgid ""
-"In this case, your position will not be published, but you are still able to "
-"see the location of your contacts."
-msgstr ""
-"Kasu horretan, zure kokalekua ez da argitaratuko, baina zure kontaktuen "
-"kokalekua ikusi ahal izango duzu."
-
-#: C/geolocation-not-showing.page:42(p)
-msgid ""
-"If you want to publish your geographical position, you can try to use an "
-"external device such as a GPS."
-msgstr ""
-"Zure kokaleku geografikoa argitaratu nahi baduzu, saiatu kanpoko gailu bat "
-"erabiltzen, GPS bat, esate baterako."
-
-#: C/geolocation-not-showing.page:48(p)
-msgid ""
-"In order to publish your geographical location, your Jabber server needs to "
-"support the Personal Eventing Protocal (PEP). A list of <link "
-"href=\"http://coccinella.im/servers/servers_by_pubsub_pep.html\">servers which "
-"support PEP</link> is maintained online. Google Talk does not support this "
-"feature at this time."
-msgstr ""
-"Zure kokaleku geografikoa argitaratu ahal izateko, zure Jabber zerbitzariak "
-"Personal Eventing Protocol (PEP) onartu behar du. <link "
-"href=\"http://coccinella.im/servers/servers_by_pubsub_pep.html\">PEP onartzen "
-"duten zerbitzarien</link> zerrenda bat mantentzen da linean. Google Talk-ek "
-"ez du, gaur egun, eginbide hau onartzen."
-
-#: C/geolocation.page:8(desc)
-msgid "Use and understand geolocation in <app>Empathy</app>."
-msgstr "Erabili eta ulertu geokokalekua <app>Empathy</app>-n."
-
-#: C/geolocation.page:32(title)
-msgid "Geographical position"
-msgstr "Kokaleku geografikoa"
-
-#: C/geolocation.page:35(title)
-msgid "Geolocation"
-msgstr "Geokokalekua"
-
-#: C/geolocation.page:39(title)
-msgid "Fix common problems"
-msgstr "Konpondu arazorik ohikoenak"
-
-#: C/favorite-rooms.page:10(desc)
-msgid "Set, join and manage favorite rooms."
-msgstr "Ezarri, sartu eta kudeatu gela gogokoenak."
-
-#: C/favorite-rooms.page:29(title)
-msgid "Favorite rooms"
-msgstr "Gela gogokoenak"
-
-#: C/favorite-rooms.page:32(title)
-msgid "Set a room as a favorite"
-msgstr "Ezarri gela bat gogoko gisa"
-
-#: C/favorite-rooms.page:35(p)
-msgid "Join a room."
-msgstr "Sartu gela batean."
-
-#: C/favorite-rooms.page:40(p)
-msgid ""
-"See <link xref=\"irc-join-room\"/> for more information on how to join an IRC "
-"room."
-msgstr "Ikus <link xref=\"irc-join-room\"/>, IRC gela batean nola sartu jakiteko."
-
-#: C/favorite-rooms.page:46(p)
-msgid ""
-"See <link xref=\"group-conversations\"/> for more information on how to start "
-"or join a group conversation."
-msgstr ""
-"Ikus <link xref=\"group-conversations\"/>, talde-solasaldi bat nola hasi edo "
-"bertan nola sartu jakiteko."
-
-#: C/favorite-rooms.page:54(p)
-msgid ""
-"From the conversation window, choose "
-"<guiseq><gui>Conversation</gui><gui>Favorite Chat Room</gui></guiseq>."
-msgstr ""
-"Solasaldiaren leihoan, hautatu <guiseq><gui>Solasaldia</gui><gui>Berriketa-"
-"gela gogokoena</gui></guiseq>."
-
-#: C/favorite-rooms.page:63(title)
-msgid "Join favorite rooms"
-msgstr "Sartu gela gogokoenetan"
-
-#: C/favorite-rooms.page:71(p)
-msgid "Press <key>F5</key>."
-msgstr "Sakatu <key>F5</key>."
-
-#: C/favorite-rooms.page:76(p)
-msgid ""
-"Choose <guiseq><gui>Room</gui><gui>Join Favorites</gui></guiseq>, to join "
-"all your favorite rooms."
-msgstr ""
-"Aukeratu <guiseq><gui>Gela</gui><gui>Sartu gogokoetan</gui></guiseq>, zure "
-"gela gogoko guztietan sartzeko."
-
-#: C/favorite-rooms.page:82(p)
-msgid "Choose <gui>Room</gui>, and select the favorite room you want to join."
-msgstr "Aukeratu <gui>Gela</gui>, eta hautatu zein gela gogokotan sartu nahi duzun."
-
-#: C/favorite-rooms.page:90(p)
-msgid ""
-"To join a favorite room, you need to be connected to the Internet and to "
-"your account."
-msgstr ""
-"Gela gogoko batean sartzeko, Internetekin eta zure kontuarekin konektatuta "
-"egon behar duzu."
-
-#: C/favorite-rooms.page:98(title)
-msgid "Manage favorite rooms"
-msgstr "Kudeatu gela gogokoak"
-
-#: C/favorite-rooms.page:101(p)
-msgid ""
-"From the <gui>Contact List</gui> window, choose "
-"<guiseq><gui>Room</gui><gui>Manage Favorites</gui></guiseq>."
-msgstr ""
-"<gui>Kontaktu-zerrenda</gui> leihoan, aukeratu "
-"<guiseq><gui>Gela</gui><gui>Kudeatu gogokoak</gui></guiseq>."
-
-#: C/favorite-rooms.page:107(p)
-msgid ""
-"From the <gui>Account</gui> drop-down list, select the account you want to "
-"manage the favorite rooms of."
-msgstr ""
-"Goitibeherako <gui>Kontua</gui> zerrendan, hautatu zein kontutan kudeatu "
-"nahi dituzun gela gogokoak."
-
-#: C/favorite-rooms.page:111(p)
-msgid "Select <gui>All</gui> to see all you favorite rooms."
-msgstr "Hautatu <gui>Denak</gui> zure gela gogoko guztiak ikusteko."
-
-#: C/favorite-rooms.page:116(p)
-msgid "Select the favorite room you want to manage:"
-msgstr "Hautatu kudeatu nahi duzun gela gogokoa:"
-
-#: C/favorite-rooms.page:121(p)
-msgid ""
-"Select the <gui>Auto-Connect</gui> check-box in order to automatically join "
-"that room when you connect to your account."
-msgstr ""
-"Hautatu <gui>Automatikoki konektatu</gui> kontrol-laukia, kontu horrekin "
-"konektatzen zarenean automatikoki gela horretan sartzeko."
-
-#: C/favorite-rooms.page:127(p)
-msgid "Click on <gui>Remove</gui> to remove the room from your favorites."
-msgstr "Egin klik <gui>Kendu</gui> botoian, gela gogokoetatik kentzeko."
-
-#: C/favorite-rooms.page:134(p)
-msgid "When done, click <gui>Close</gui>."
-msgstr "Amaitutakoan, egin klik <gui>Itxi</gui> botoian."
-
-#: C/disable-account.page:9(desc)
-msgid "Prevent <app>Empathy</app> from automatically logging in to an account."
-msgstr "Eragotzi <app>Empathy</app>-k kontu batean saioa automatikoki hastea."
-
-#: C/disable-account.page:39(title)
-msgid "Disable an account"
-msgstr "Desgaitu kontu bat"
-
-#: C/disable-account.page:41(p)
-msgid ""
-"You can disable an account to prevent <app>Empathy</app> from logging in to "
-"it without removing the account entirely. You may wish to disable and re-"
-"enable an account if you only want to be logged in to the account at certain "
-"times, but you still want to use <app>Empathy</app> for other accounts."
-msgstr ""
-"Kontu bat desgaitu dezakezu, <app>Empathy</app> kontu horretan saioa has ez "
-"dezan baina kontua guztiz kendu gabe. Agian kontua desgaitu eta birgaitu "
-"nahi izango duzu, hainbatetan bakarrik hasi nahi baduzu saioa kontu "
-"horretan, baina <app>Empathy</app> erabili nahi baduzu beste kontu "
-"batzuekin."
-
-#: C/disable-account.page:52(p)
-msgid ""
-"Select the account you wish to disable from the accounts list on the left "
-"side of the window."
-msgstr ""
-"Hautatu kontuen zerrendan desgaitu nahi duzun kontua, leihoaren "
-"ezkerraldean."
-
-#: C/disable-account.page:56(p)
-msgid ""
-"Deselect <gui style=\"checkbox\">Enabled</gui> on the right side of the "
-"window."
-msgstr "Desautatu <gui style=\"checkbox\">Gaituta</gui>, leihoaren eskuinaldean."
-
-#: C/disable-account.page:62(p)
-msgid "To re-enable the account, simply select <gui style=\"checkbox\">Enabled</gui>."
-msgstr "Kontua berriro gaitzeko, hautatu <gui style=\"checkbox\">Gaituta</gui>."
-
-#: C/create-account.page:9(desc)
-msgid "Register for an account with one of the supported messaging services."
-msgstr "Erregistratu kontu baterako onartutako mezularitza-zerbitzuetako batekin."
-
-#: C/create-account.page:33(title)
-msgid "Register for a new account"
-msgstr "Erregistratu kontu berri baterako"
-
-#: C/create-account.page:35(p)
-msgid ""
-"Most account types require you to create an account with a account provider "
-"before you can connect using instant messaging applications like "
-"<app>Empathy</app>. With some account providers, you can use "
-"<app>Empathy</app> to register for a new account, using the same steps as "
-"you would to <link xref=\"add-account\">add an account</link>."
-msgstr ""
-"Kontu mota gehienek zuk kontu-hornitzaile batekin kontu bat sortzea eskatzen "
-"dute, <app>Empathy</app> bezalako berehalako mezularitzako aplikazioak "
-"erabiliz konektatu ahal izateko. Kontu-hornitzaile batzuekin "
-"<app>Empathy</app> erabil dezakezu kontu berri batean erregistratzeko, <link "
-"xref=\"add-account\">kontu bat gehitzeko</link> erabiliko zenituzkeen urrats "
-"berekin."
-
-#: C/create-account.page:41(p)
-msgid ""
-"This page provides information on creating a new account for various types "
-"of accounts. Your account provider should give you a login ID and a "
-"password, as well as any additional information you need to connect using "
-"<app>Empathy</app>."
-msgstr ""
-"Orri honetan hainbat kontu mota berri nola sortu azaltzen da. Zure kontu-"
-"hornitzaileak saio-hasierako ID eta pasahitz bat eman beharko lizkizuke, "
-"baita <app>Empathy</app> erabiliz konektatzeko behar duzun edozein "
-"informazio gehigarri."
-
-#: C/create-account.page:46(title)
-msgid "Facebook"
-msgstr "Facebook"
-
-#: C/create-account.page:47(p)
-msgid ""
-"Facebook is one of the most-used social networks. It allows users to create "
-"their own profile and to communicate with their friends."
-msgstr ""
-"Facebook gehien erabiltzen diren sare sozialetako bat da. Aukera ematen die "
-"erabiltzaileei beren profil propioa sortzeko, eta beren lagunekin "
-"komunikatzeko."
-
-#: C/create-account.page:51(p)
-msgid ""
-"To use Facebook to communicate with your friends, you will need to create a "
-"new account from the website: <link "
-"href=\"http://www.facebook.com\">www.facebook.com</link>."
-msgstr ""
-"Zure lagunekin komunikatzeko Facebook erabili ahal izateko, kontu berri bat "
-"sortu beharko duzu webgune honetan: <link "
-"href=\"http://www.facebook.com\">www.facebook.com</link>."
-
-#: C/create-account.page:59(title)
-#: C/audio-video.page:170(p)
-msgid "Jabber"
-msgstr "Jabber"
-
-#: C/create-account.page:61(p)
-msgid ""
-"Jabber is an open instant messaging system. Like email, Jabber allows you to "
-"choose your account provider and communicate with all other Jabber users, "
-"regardless of their account provider."
-msgstr ""
-"Jabber berehalako mezularitzako sistema irekia da. Postarako bezala, Jabber-"
-"ek aukera ematen dizu kontu-hornitzailea aukeratu eta beste Jabber "
-"erabiltzaileekin komunikatzeko, haien kontu-hornitzailea kontuan hartu gabe."
-
-#: C/create-account.page:65(p)
-msgid ""
-"You will need to create a new account with a Jabber provider. There are many "
-"free providers; one popular provider is <link "
-"href=\"http://register.jabber.org/\">Jabber.org</link>."
-msgstr ""
-"Kontu berri bat sortu beharko duzu Jabber hornitzaile batekin. Doako "
-"hornitzaile bat baino gehiago daude; ezagunetako bat <link "
-"href=\"http://register.jabber.org/\">Jabber.org</link> da."
-
-#: C/create-account.page:70(p)
-msgid ""
-"If you use Google Mail or Google Talk, you already have a Jabber account. "
-"Google Talk is a Jabber service. Simply use your Google Mail address and "
-"password in <app>Empathy</app> to connect."
-msgstr ""
-"Google Mail edo Google Talk erabiltzen baduzu, baduzu Jabber kontu bat. "
-"Google Talk Jabber zerbitzu bat da. Besterik gabe, erabili zure Google Mail "
-"helbidea eta pasahitza <app>Empathy</app>-n, konektatzeko"
-
-#: C/create-account.page:77(title)
-#: C/audio-video.page:190(p)
-msgid "People Nearby"
-msgstr "Hurbileko jendea"
-
-#: C/create-account.page:79(p)
-msgid ""
-"You do not need to create an account with a service provider to use this "
-"feature. This service works whenever you are connected to a local network, "
-"such as a wireless hotspot. It automatically finds all other users on the "
-"network who are also using this service."
-msgstr ""
-"Ez duzu zerbitzu-hornitzaile batekin konturik sortu behar eginbide hau "
-"erabili ahal izateko. Zerbitzuak sare lokal batekin konektatuta zauden "
-"guztietan funtzionatuko du, haririk gabeko wifigune gisa. Automatikoki "
-"aurkitzen ditu zerbitzu hau erabiltzen duten sareko beste erabiltzaileak."
-
-#: C/create-account.page:84(p)
-msgid "For more information, see <link xref=\"salut-protocol\"/>."
-msgstr "Informazio gehiago lortzeko, ikus <link xref=\"salut-protocol\"/>."
-
-#: C/create-account.page:88(title)
-#: C/audio-video.page:205(p)
-msgid "SIP"
-msgstr "SIP"
-
-#: C/create-account.page:90(p)
-msgid ""
-"SIP is an open system which allows users to have audio and video "
-"conversations over the Internet. You need to create an account with a SIP "
-"provider. You can communicate with all other SIP users, regardless of which "
-"SIP provider they use."
-msgstr ""
-"SIP sistema irekiak aukera ematen die erabiltzaileei audio- eta bideo-"
-"solasaldiak edukitzeko Internet bidez. Kontu bat sortu behar duzu SIP "
-"hornitzaile batekin. Beste SIP erabiltzaile guztiekin komunika zaitezke, "
-"erabiltzen duten SIP hornitzailea kontuan hartu gabe."
-
-#: C/create-account.page:95(p)
-msgid ""
-"There are a number of popular free SIP account providers; one popular "
-"provider is <link href=\"https://signup.sipphone.com/new-"
-"users/app?class=NewUser;proc=start\">Sipphone</link>."
-msgstr ""
-"Hainbat doako SIP kontu-hornitzaile daude; ezagunenetako bat <link "
-"href=\"https://signup.sipphone.com/new-"
-"users/app?class=NewUser;proc=start\">Sipphone</link> da."
-
-#: C/create-account.page:100(p)
-msgid ""
-"Due to technical differences, the free <link "
-"href=\"https://www.ekiga.net/index.php?page=register\">Ekiga.net</link> "
-"service does not currently work with <app>Empathy</app>."
-msgstr ""
-"Arazo teknikoak direla-eta, doako <link "
-"href=\"https://www.ekiga.net/index.php?page=register\">Ekiga.net</link> "
-"zerbitzua ez dabil gaur egun <app>Empathy</app>-rekin."
-
-#: C/create-account.page:105(p)
-msgid ""
-"Some SIP providers allow you to call normal phones from your computer. "
-"Generally, you will need to subscribe to a paid service for this feature."
-msgstr ""
-"SIP hornitzaile batzuek aukera ematen dizute telefono normaletara deitzeko "
-"zure ordenagailutik. Normalean, ordaindu beharreko zerbitzu batean harpidetu "
-"beharko duzu eginbide hau erabili ahal izateko."
-
-#: C/create-account.page:110(title)
-#: C/audio-video.page:165(p)
-msgid "IRC"
-msgstr "IRC"
-
-#: C/create-account.page:112(p)
-msgid ""
-"You do not need to register for an account to use IRC. Although you specify "
-"a nickname when you add an IRC account to <app>Empathy</app>, this nickname "
-"is only established each time you connect. If another user is using the "
-"nickname, you will need to choose a new nickname."
-msgstr ""
-"Ez duzu kontu batean erregistratu behar IRC erabili ahal izateko. IRC kontua "
-"<app>Empathy</app>-n gehitzean goitizena zehaztu duzun arren, goitizen hori "
-"konektatzen zaren bakoitzean ezartzen da. Beste erabiltzaile bat goitizen "
-"hori erabiltzen ari bada, goitizen berria aukeratu beharko duzu."
-
-#: C/create-account.page:117(p)
-msgid ""
-"Some IRC networks use a service called NickServ to allow users to protect "
-"their nicknames. See <link xref=\"irc-nick-password\"/> for more information."
-msgstr ""
-"IRC sare batzuek NickServ izeneko zerbitzua erabiltzen dute, erabiltzaileei "
-"beren goitizenak babesten laguntzeko. Informazio gehiago lortzeko, ikus "
-"<link xref=\"irc-nick-password\"/>."
-
-#: C/create-account.page:120(p)
-msgid ""
-"Some IRC servers are password protected. You will need to know the password "
-"to connect to these servers. Generally, these are private IRC networks."
-msgstr ""
-"IRC zerbitzari batzuk pasahitzez babestuta daude. Pasahitza jakin behar duzu "
-"zerbitzari horiekin konektatu ahal izateko. Normalean, IRC sare pribatuak "
-"dira."
-
-#: C/create-account.page:125(title)
-msgid "Proprietary Services"
-msgstr "Zerbitzu pribatuak"
-
-#: C/create-account.page:127(p)
-msgid ""
-"There are many proprietary instant messaging services that have been "
-"developed by different companies or organizations. <app>Empathy</app> allows "
-"you to connect to an existing account for most popular services. To create "
-"a new account with one of these services, you will need to visit the "
-"service’s web site and agree to its terms of use."
-msgstr ""
-"Hainbat konpainiak edo erakundek garatutako berehalako mezularitzako zerbitzu "
-"pribatu ugari daude. <app>Empathy</app>-k aukera ematen dizu zerbitzu "
-"ezagunenetako kontuekin konektatzeko. Zerbitzu hauetako batekin kontu berria "
-"sortzeko, zerbitzuaren webgunea bisitatu beharko duzu, eta bertako "
-"erabilera-baldintzekin bat egin."
-
-#: C/create-account.page:136(link)
-#: C/audio-video.page:135(p)
-msgid "AIM"
-msgstr "AIM"
-
-#: C/create-account.page:141(link)
-#: C/audio-video.page:160(p)
-msgid "ICQ"
-msgstr "ICQ"
-
-#: C/create-account.page:146(link)
-#: C/audio-video.page:175(p)
-msgid "MSN"
-msgstr "MSN"
-
-#: C/create-account.page:151(link)
-#: C/audio-video.page:210(p)
-msgid "Yahoo!"
-msgstr "Yahoo!"
-
-#: C/change-status.page:9(desc)
-msgid "Change your status to advertise your availability to your contacts."
-msgstr "Aldatu zure egoera kontaktuei erabilgarri zauden ala ez jakinarazteko."
-
-#: C/change-status.page:34(title)
-msgid "Change your status"
-msgstr "Aldatu zure egoera"
-
-#: C/change-status.page:36(p)
-msgid ""
-"You can set your status to indicate your availability to your contacts. "
-"<app>Empathy</app> allows you to select from a list of defined statuses."
-msgstr ""
-"Egoera ezar dezakezu, zure kontaktuei erabilgarri zauden ala ez "
-"jakinarazteko. <app>Empathy</app>-k aukera ematen dizu definitutako egoeren "
-"zerrenda batean hautatzeko."
-
-#: C/change-status.page:41(p)
-msgid ""
-"Click on the drop-down list at the top of the <gui>Contact List</gui> "
-"window."
-msgstr ""
-"Egin klik goitibeherako zerrrendan, <gui>Kontaktu-zerrenda</gui> leihoaren "
-"goialdean."
-
-#: C/change-status.page:46(p)
-msgid "Select a status from the list."
-msgstr "Hautatu egoera zerrendan."
-
-#: C/change-status.page:52(p)
-msgid ""
-"See <link xref=\"status-icons\"/> for a list of the built-in statuses and what "
-"they mean. You can also <link xref=\"set-custom-message\">add custom status "
-"messages</link> to provide more information about your availability to your "
-"contacts."
-msgstr ""
-"Ikus <link xref=\"status-icons\"/> egoera inkorporatuen zerrenda eta haien "
-"esanahia ikusteko. Era berean, <link xref=\"set-custom-message\">egoera-mezu "
-"pertsonalizatuak gehi ditzakezu</link>, zure kontaktuei zure "
-"erabilgarritasunari buruzko informazio gehiago emateko."
-
-#: C/change-status.page:58(p)
-msgid ""
-"If you do not use your computer for a while, or if the screensaver is on, "
-"the status will be automatically set to Away."
-msgstr ""
-"Ez baduzu ordenagailua denboraldi batez erabiltzen, edo pantaila-babeslea "
-"aktibatuta badago, 'Kanpoan' egoera ezarriko da automatikoki."
-
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/audio-video.page:58(None)
-msgid ""
-"@@image: 'figures/audio-input-microphone.png'; "
-"md5=8d89026b66a263a3bc5b1f0665948567"
-msgstr ""
-"@@image: 'figures/audio-input-microphone.png'; "
-"md5=8d89026b66a263a3bc5b1f0665948567"
-
-#: C/audio-video.page:8(desc)
-msgid "Information on when it is possible to have an audio or video conversation."
-msgstr "Audio- nahiz bideo-solasaldi bat noiz eduki daitekeen jakinarazten du."
-
-#: C/audio-video.page:32(title)
-msgid "Audio and video support"
-msgstr "Audio- eta bideo-euskarria"
-
-#: C/audio-video.page:34(p)
-msgid ""
-"You can only have audio and video conversation with contacts who are using "
-"an application which also supports this feature. When your contacts support "
-"audio or video conversations, you will see the following icons next to their "
-"names in the contact list:"
-msgstr ""
-"Eginbide hau onartzen duen aplikazioa darabilten kontaktuekin bakarrik izan "
-"ditzakezu audio- eta bideo-solasdaldiak. Zure kontaktuek audio- edo bideo-"
-"solasaldiak onartzen dituztenean, ikono hauek ikusiko dituzu kontaktu-"
-"zerrendako haien izenen ondoan:"
-
-#: C/audio-video.page:43(p)
-msgid "Icon"
-msgstr "Ikonoa"
-
-#: C/audio-video.page:48(p)
-msgid "Description"
-msgstr "Azalpena"
-
-#: C/audio-video.page:58(media)
-msgid "Icon for audio conversation"
-msgstr "Audio-solasaldiaren ikonoa"
-
-#: C/audio-video.page:64(p)
-msgid "The contact is able to have an audio conversation."
-msgstr "Kontaktuak audio-solasaldiak izan ditzake."
-
-#: C/audio-video.page:70(media)
-msgid "Icon for video conversation"
-msgstr "Bideo-solasaldiaren ikonoa"
-
-#: C/audio-video.page:76(p)
-msgid "The contact is able to have a video conversation."
-msgstr "Kontaktuak bideo-solasaldiak izan ditzake."
-
-#: C/audio-video.page:83(p)
-msgid ""
-"In order to have an audio conversation, you need to have a sound card that "
-"is supported by your operating system, and a working microphone."
-msgstr ""
-"Audio-solasaldi bat eduki ahal izateko, zure sistema eragileak onartutako "
-"soinu-txartela eta ondo dabilen mikrofonoa behar dituzu."
-
-#: C/audio-video.page:87(p)
-msgid ""
-"In order to have a video conversation, you need to have a webcam that is "
-"supported by your operating system, and a working microphone."
-msgstr ""
-"Bideo-solasaldi bat eduki ahal izateko, zure sistema eragileak onartutako "
-"web-kamera eta ondo dabilen mikrofonoa behar dituzu."
-
-#: C/audio-video.page:95(title)
-msgid "Supported Account Types"
-msgstr "Onartutako kontu motak"
-
-#: C/audio-video.page:97(p)
-msgid ""
-"You can only have audio and video conversations using accounts on certain "
-"supported services. The following table lists whether audio and video is "
-"supported for each type of account."
-msgstr ""
-"Onartutako hainbat zerbitzutako kontuak izan behar dituzu audio- eta bideo-"
-"solasaldiak eduki ahal izateko. Ondoko taulako zerrendan kontu mota "
-"bakoitzak audioa eta bideoa onartzen dituen ala ez zehazten da."
-
-#: C/audio-video.page:102(p)
-msgid ""
-"Account types are provided by plugins. Your system may not have all of the "
-"following types available, or it may have types not listed here. Updated "
-"plugins may make audio or video conversations possible on account types that "
-"are listed as unsupported here."
-msgstr ""
-"Kontu motak pluginek hornitzen dituzte. Agian zure sistemak ez ditu izango "
-"mota erabilgarri guztiak, edo agian mota guztiak ez dira zerrendan azaltzen. "
-"Bestalde, plugin eguneratuek posible egin ditzakete audio- eta bideo-"
-"solasaldiak zerrendan ez onartutako gisa azeltzen diren kontu motekin."
-
-#: C/audio-video.page:110(p)
-msgid ""
-"I'd like to do tables like this using nothing for No and ✔ for Yes, but we "
-"need to look at the accessibility impact. I've <link "
-"href=\"http://mail.gnome.org/archives/gnome-doc-"
-"list/2009-September/msg00006.html\">asked the accessibility team</link> for "
-"input."
-msgstr ""
-"Egin nahiko nituzke taula batzuk ezer ez jartzeko Ez denean eta ✔ Bai "
-"denean, baina erabilerraztasun-inpaktuari begiratu behar zaio. <link "
-"href=\"http://mail.gnome.org/archives/gnome-doc-"
-"list/2009-September/msg00006.html\">Erabilerraztasun-taldeari</link> galdetu "
-"diot."
-
-#: C/audio-video.page:118(p)
-msgid ""
-"There's recent work on telepathy-butterfly and papyon to support audio and "
-"video for MSN. It might be released in time for 2.28, but since it doesn't "
-"follow the Gnome release schedule, I can't be sure. If it looks like it's "
-"going to ship, let's mark it Yes."
-msgstr ""
-"Azkenaldian telepathy-butterfly eta papyon-ekin lan egin da, audio- eta "
-"bideo-euskarria lortzeko MSNrako. 2.28 bertsiorako argitaratuta egon behar "
-"zuen, baina ez duenez jarraitzen Gnome-ren bertsioaren programazioa, ez "
-"dakit seguru. Aterako dela ematen badu, marka dezagun Bai."
-
-#: C/audio-video.page:128(p)
-msgid "Service"
-msgstr "Zerbitzua"
-
-#: C/audio-video.page:129(p)
-msgid "Audio"
-msgstr "Audioa"
-
-#: C/audio-video.page:130(p)
-msgid "Video"
-msgstr "Bideoa"
-
-#: C/audio-video.page:136(p)
-#: C/audio-video.page:137(p)
-#: C/audio-video.page:141(p)
-#: C/audio-video.page:142(p)
-#: C/audio-video.page:146(p)
-#: C/audio-video.page:147(p)
-#: C/audio-video.page:156(p)
-#: C/audio-video.page:157(p)
-#: C/audio-video.page:161(p)
-#: C/audio-video.page:162(p)
-#: C/audio-video.page:166(p)
-#: C/audio-video.page:167(p)
-#: C/audio-video.page:181(p)
-#: C/audio-video.page:182(p)
-#: C/audio-video.page:186(p)
-#: C/audio-video.page:187(p)
-#: C/audio-video.page:191(p)
-#: C/audio-video.page:192(p)
-#: C/audio-video.page:196(p)
-#: C/audio-video.page:197(p)
-#: C/audio-video.page:201(p)
-#: C/audio-video.page:202(p)
-#: C/audio-video.page:211(p)
-#: C/audio-video.page:212(p)
-#: C/audio-video.page:216(p)
-#: C/audio-video.page:217(p)
-msgid "No"
-msgstr "Ez"
-
-#: C/audio-video.page:140(p)
-msgid "Facebook Chat"
-msgstr "Facebook berriketa"
-
-#: C/audio-video.page:145(p)
-msgid "gadugadu"
-msgstr "gadugadu"
-
-#: C/audio-video.page:150(p)
-msgid "Google Talk"
-msgstr "Google Talk"
-
-#: C/audio-video.page:151(p)
-#: C/audio-video.page:152(p)
-#: C/audio-video.page:171(p)
-#: C/audio-video.page:172(p)
-#: C/audio-video.page:176(p)
-#: C/audio-video.page:177(p)
-#: C/audio-video.page:206(p)
-#: C/audio-video.page:207(p)
-msgid "Yes"
-msgstr "Bai"
-
-#: C/audio-video.page:155(p)
-msgid "Groupwise"
-msgstr "Groupwise"
-
-#: C/audio-video.page:180(p)
-msgid "myspace"
-msgstr "myspace"
-
-#: C/audio-video.page:185(p)
-msgid "qq"
-msgstr "qq"
-
-#: C/audio-video.page:195(p)
-msgid "sametime"
-msgstr "sametime"
-
-#: C/audio-video.page:200(p)
-msgid "silc"
-msgstr "silc"
-
-#: C/audio-video.page:215(p)
-msgid "zephyr"
-msgstr "zephyr"
-
-#: C/audio-call.page:9(desc)
-msgid "Call your contacts over the Internet."
-msgstr "Deitu zure kontaktuei Internet bidez."
-
-#: C/audio-call.page:27(title)
-msgid "Start an audio conversation"
-msgstr "Hasi audio-solasaldi bat"
-
-#: C/audio-call.page:29(p)
-msgid ""
-"You can call your contacts and have an audio conversation with them. This "
-"features only works with certain types of accounts, and it requires the "
-"other person to have an application that supports audio calls."
-msgstr ""
-"Kontaktuei dei diezaiekezu eta audio-solasaldiak izan beraiekin. Eginbide "
-"honek kontu mota jakin batzuekin bakarrik funtzionatzen du, eta beste "
-"pertsonak audio-deiak onartzen dituen aplikazio bat eduki behar du."
-
-#: C/audio-call.page:34(p)
-msgid ""
-"From the <gui>Contact List</gui> window, click the <media type=\"image\" "
-"mime=\"image/png\" src=\"figures/camera-web.png\">video call</media> icon next "
-"to the name of the contact you wish to call and choose <gui "
-"style=\"menuitem\">Audio Call</gui>."
-msgstr ""
-"<gui>Kontaktu-zerrenda</gui> leihoan, egin klik deitu nahi diozun "
-"kontaktuaren ondoko <media type=\"image\" mime=\"image/png\" src=\"figures"
-"/camera-web.png\">bideo-deia</media> ikonoan, eta aukeratu <gui "
-"style=\"menuitem\">Audio-deia</gui>."
-
-#: C/audio-call.page:55(p)
-msgid ""
-"To turn an audio conversation into a video conversation, choose <guiseq><gui "
-"style=\"menu\">Video</gui><gui style=\"menuitem\">Video On</gui></guiseq>."
-msgstr ""
-"Audio-solasaldi bat bideo-solasaldi bihurtzeko, aukeratu <guiseq><gui "
-"style=\"menu\">Bideoa</gui><gui style=\"menuitem\">Aktibatu "
-"bideoa</gui></guiseq>."
-
-#: C/audio-call.page:63(title)
-msgid "Start an audio conversation with a meta-contact"
-msgstr "Hasi audio-solasaldi bat metakontaktu batekin"
-
-#: C/audio-call.page:71(p)
-msgid ""
-"Select the contact you want to have the conversation, and from the menu "
-"select <gui style=\"menuitem\">Audio Call</gui>."
-msgstr ""
-"Hautatu zein kontakturekin eduki nahi duzun solasaldia, eta hautatu menuan "
-"<gui style=\"menuitem\">Audio-deia</gui>."
-
-#: C/add-contact.page:9(desc)
-msgid "Add someone to the contact list."
-msgstr "Gehitu norbait kontaktu-zerrendari."
-
-#: C/add-contact.page:33(title)
-msgid "Add someone to your list of contacts"
-msgstr "Gehitu norbait zure kontaktuen zerrendari"
-
-#: C/add-contact.page:37(p)
-msgid "Choose <guiseq><gui>Chat</gui><gui>Add Contact</gui></guiseq>."
-msgstr "Aukeratu <guiseq><gui>Berriketa</gui><gui>Gehitu kontaktua</gui></guiseq>."
-
-#: C/add-contact.page:40(p)
-msgid ""
-"From the <gui>Account</gui> drop-down list, select the account you wish to "
-"use to connect to your contact. Your contact will need to be using the same "
-"service as the account you select."
-msgstr ""
-"Goitibeherako <gui>Kontua</gui> zerrendan, hautatu kontaktuarekin "
-"konektatzeko erabili nahi duzun kontua. Zure kontaktuak zuk hautatutako "
-"kontuaren zerbitzu bera erabili beharko du."
-
-#: C/add-contact.page:45(p)
-msgid ""
-"In the <gui>Identifier</gui> field, enter your contact’s login ID, username, "
-"screen name, or other appropriate identifier for the service type."
-msgstr ""
-"<gui>Identifikatzailea</gui> eremuan, sartu zure kontaktuaren saioa hasteko "
-"IDa, erabiltzaile-izena, pantaila-izena, edo zerbitzu motaren beste "
-"identifikatzaile egokiren bat."
-
-#: C/add-contact.page:49(p)
-msgid ""
-"In the <gui>Alias</gui> field, type your contact’s name as you would like it "
-"to appear in your contact list."
-msgstr ""
-"<gui>Aliasa</gui> eremuan, idatzi zure kontaktuaren izena, zure kontaktu-"
-"zerrendan azaltzea nahiko zenukeen bezala."
-
-#: C/add-contact.page:53(p)
-msgid "Click <gui>Add</gui> to add the person to your list of contacts."
-msgstr ""
-"Egin klik <gui>Gehitu</gui> botoian, pertsona zure kontaktu-zerrendan "
-"gehitzeko."
-
-#: C/add-contact.page:61(p)
-msgid ""
-"To add a new person to your list of contacts, you need to be connected to "
-"the Internet and to your account."
-msgstr ""
-"Pertsona berri bat kontaktu-zerrendan gehitzeko, Internetekin eta zure "
-"kontuarekin konektatuta egon behar duzu."
-
-#: C/add-account.page:9(desc)
-msgid "Add a new account to <app>Empathy</app>."
-msgstr "Gehitu kontu berri bat <app>Empathy</app>-ri."
-
-#: C/add-account.page:39(title)
-msgid "Add a new account"
-msgstr "Gehitu kontu berria"
-
-#: C/add-account.page:41(p)
-msgid ""
-"You can add instant messaging accounts from any supported service to "
-"communicate with all of your contacts in <app>Empathy</app>. For some "
-"account providers, these steps will also allow you to register for a new "
-"account. For more details, see <link xref=\"create-account\"/>."
-msgstr ""
-"Berehalako mezularitzako kontuak gehi ditzakezu onartutako edozein "
-"zerbitzutatik, zure kontaktu guztiekin komunikatzeko <app>Empathy</app>-n. "
-"Kontu-hornitzaile batzuen kasuan, urrats hauek kontu berri batean "
-"erregistratzeko ere balioko dizute. Xehetasun gehiago lortzeko, ikus <link "
-"xref=\"create-account\"/>."
-
-#: C/add-account.page:52(p)
-msgid "Click <gui style=\"button\">Add</gui>."
-msgstr "Egin klik <gui style=\"button\">Gehitu</gui> botoian."
-
-#: C/add-account.page:57(p)
-msgid ""
-"From the <gui>Protocol</gui> drop-down list, select the type of account you "
-"wish to add."
-msgstr ""
-"Goitibeherako <gui>Protokoloa</gui> zerrendan, hautatu gehitu nahi duzun "
-"kontu mota."
-
-#: C/add-account.page:61(p)
-msgid ""
-"If you do not already have a registered account, select <gui>Create a new "
-"account on the server</gui>. This feature is not available for all account "
-"types, and may not work with some account providers. See <link xref=\"create-"
-"account\"/> for more information."
-msgstr ""
-"Ez badaukazu konturik erregistratuta, hautatu <gui>Sortu kontu bat "
-"zerbitzarian</gui>. Eginbide hau ez dago erabilgarri kontu mota "
-"guztietarako, eta baliteke ez funtzionatzea kontu-hornitzaile batzuekin. "
-"Ikus <link xref=\"create-account\"/> informazio gehiago lortzeko."
-
-#: C/add-account.page:66(p)
-msgid ""
-"Enter the required information. For most accounts, you will only need a "
-"login ID and a password. Some accounts may require additional information. "
-"See <link xref=\"accounts-window#details\"/> for more information."
-msgstr ""
-"Sartu eskatutako informazioa. Kontu gehienekin, saioa hasteko IDa eta "
-"pasahitza bakarrik beharko dituzu. Kontu batzuek informazio gehigarria behar "
-"dezakete. Ikus <link xref=\"accounts-window#details\"/> informazio gehiago "
-"lortzeko."
-
-#: C/add-account.page:71(p)
-msgid "Click <gui style=\"button\">Log in</gui>."
-msgstr "Egin klik <gui style=\"button\">Saio-hasiera</gui> botoian."
-
-#: C/add-account.page:78(p)
-msgid ""
-"To change the name that identifies the account in the <gui>Accounts</gui> "
-"window, select the account from the list on the left and either click on the "
-"name or press the space bar. Edit the account name and press "
-"<key>Enter</key> when you’re finished."
-msgstr ""
-"Kontua identifikatzen duen izena aldatzeko <gui>Kontuak</gui> leihoan, "
-"hautatu kontua ezkerraldeko zerrendan, eta egin klik izenean edo sakatu "
-"zuriune-barra. Editatu kontuaren izena, eta, amaitutakoan, sakatu "
-"<key>Sartu</key>."
-
-#: C/accounts-window.page:11(desc)
-msgid "Add, modify, and delete accounts."
-msgstr "Gehitu, aldatu eta ezabatu kontuak."
-
-#: C/accounts-window.page:33(title)
-msgid "Accounts Window"
-msgstr "Kontuen leihoa"
-
-#: C/accounts-window.page:35(p)
-msgid ""
-"The <gui>Accounts</gui> window allows you to add, modify, and delete "
-"accounts."
-msgstr ""
-"<gui>Kontuak</gui> leihoak aukera ematen dizu kontuak gehitzeko, aldatzeko "
-"eta ezabatzeko."
-
-#: C/accounts-window.page:43(title)
-msgid "Account Details"
-msgstr "Kontuaren xehetasunak"
-
-#: C/accounts-window.page:44(p)
-msgid ""
-"For most types of accounts, you can simply enter a login ID and a password. "
-"Certain accounts or account types, however, may require additional "
-"information."
-msgstr ""
-"Kontu gehienen kasuan, nahikoa da saioa hasteko IDa eta pasahitza sartzea. "
-"Kontu edo kontu mota gutxi batzuek, berriz, informazio gehigarria behar "
-"dezakete."
-
-#: C/account-jabber.page:7(desc)
-msgid "Advanced options for Jabber and Google Talk accounts."
-msgstr "Jabber eta Google Talk kontuen aukera aurreratuak."
-
-#: C/account-jabber.page:29(title)
-msgid "Jabber account details"
-msgstr "Jabber kontuen xehetasunak"
-
-#: C/account-jabber.page:31(p)
-msgid ""
-"Most Jabber accounts will require only a login ID and a password to connect. "
-"For some accounts or on certain types of networks, you may need to enter "
-"additional information in the <gui>Advanced</gui> section. Normally, you "
-"will not need to use the advanced options below. For general instructions on "
-"adding an account, see <link xref=\"add-account\"/>."
-msgstr ""
-"Jabber kontu gehienek saioa hasteko ID bat eta pasahitz bat bakarrik behar "
-"dute konektatzeko. Beste sare mota batzuetako kontuen kasuan, informazio "
-"gehigarria sartu beharko duzu <gui>Aurreratua</gui> atalean. Normalean, ez "
-"dituzu erabili beharko beheko aukera aurreratuak. Kontu bat gehitzeko "
-"jarraibide orokorrak lortzeko, ikus <link xref=\"add-account\"/>."
-
-#: C/account-jabber.page:39(p)
-msgid ""
-"Google Talk is a type of Jabber account. These instructions hold for Google "
-"Talk accounts as well."
-msgstr ""
-"Google Talk Jabber kontu mota bat da. Jarraibide hau Google Talk "
-"kontuetarako ere balio dute."
-
-#: C/account-jabber.page:45(gui)
-msgid "Encryption required (TLS/SSL)"
-msgstr "Enkriptatzea beharrezkoa da (TLS/SSL)"
-
-#: C/account-jabber.page:46(gui)
-msgid "Ignore SSL certificate errors"
-msgstr "Ez ikusi egin SSL ziurtagiri-erroreei"
-
-#: C/account-jabber.page:47(p)
-msgid ""
-"Whenever possible, communication between <app>Empathy</app> and the Jabber "
-"server is encrypted. If encrypted communication is not possible, messages "
-"may be sent unencrypted. Select <gui>Encryption required</gui> to prevent "
-"<app>Empathy</app> from communicating with the Jabber server when encryption "
-"is not possible."
-msgstr ""
-"Posible denean, <app>Empathy</app>ren eta Jabber zerbitzuaren komunikazioa "
-"enkriptatua da. Ezin bada enkriptatutako komunikaziorik erabili, mezuak "
-"enkriptatu gabe bidaliko dira. Hautatu <gui>Enkriptatzea beharrezkoa "
-"da</gui> <app>Empathy</app> Jabber zerbitzariarekin komunikatzea "
-"eragozteko, enkriptatu ezin denean."
-
-#: C/account-jabber.page:52(p)
-msgid ""
-"Some Jabber servers may encrypt data using invalid certificates, or using "
-"certificates from unknown authorities. If you trust the server you are "
-"connecting to, you can select <gui>Ignore SSL certificate errors</gui> to "
-"allow encrypted communication with invalid certificates."
-msgstr ""
-"Jabber zerbitzari batzuek baliogabeko ziurtagiriekin edo autoritate "
-"ezezagunen ziurtagiriekin enkripta ditzakete datuak. Konektatzen ari zaren "
-"zerbitzaria fidagarria dela uste baduzu, <gui>Ez ikusi egin SSL ziurtagiri-"
-"erroreei</gui> baliogabeko ziurtagiriekiko komunikazioa onartzeko."
-
-#: C/account-jabber.page:59(gui)
-msgid "Resource"
-msgstr "Baliabidea"
-
-#: C/account-jabber.page:60(gui)
-msgid "Priority"
-msgstr "Lehentasuna"
-
-#: C/account-jabber.page:61(p)
-msgid ""
-"If you have multiple applications (for instance, on separate computers) "
-"connected to your account at the same time, you can set a resource to "
-"uniquely identify each one. By default, <app>Empathy</app> will use "
-"<input>Telepathy</input> as the resource."
-msgstr ""
-"Kontuarekin aldi berean hainbat aplikazio badituzu instalatuta (hainbat "
-"ordenagailutan, esate baterako), iturburu bat ezar dezakezu bakoitza banan "
-"bana identifikatzeko. Modu lehenetsian, <app>Empathy</app>-k "
-"<input>Telepathy</input> erabiliko du iturburu gisa."
-
-#: C/account-jabber.page:65(p)
-msgid ""
-"You can set the priority to specify which application should receive "
-"incoming messages from your contacts. New messages will be sent to the "
-"application with the highest priority."
-msgstr ""
-"Lehentasuna ezar dezakezu zure kontaktuen sarrerako mezuak zein aplikaziok "
-"jaso beharko lituzkeen zehazteko. Mezu berriak lehentasunik altuenarekin "
-"bidaliko dira aplikaziora."
-
-#: C/account-jabber.page:70(gui)
-msgid "Override server settings"
-msgstr "Gainidatzi zerbitzariaren ezarpenak"
-
-#: C/account-jabber.page:71(p)
-msgid ""
-"<app>Empathy</app> will use default settings to connect to the Jabber server "
-"based on your login ID. For some Jabber servers, you will need to enter "
-"custom server settings manually. These settings should be provided for you "
-"by your Jabber provider."
-msgstr ""
-"<app>Empathy</app>-k ezarpen lehenetsiak erabiliko ditu Jabber "
-"zerbitzariarekin konektatzeko, saioa hasteko zure IDan oinarrituta. Hainbat "
-"Jabber zerbitzaritan, berriz, eskuz sartu beharko dituzu zerbitzari-ezarpen "
-"pertsonalizatuak. Zure Jabber hornitzaileak hornitu beharko lizkizuke "
-"ezarpen horiek."
-
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/account-irc.page:106(None)
-msgid "@@image: 'figures/gtk-add.png'; md5=a856b499d8d4681b70b5ce6f25bc5c6d"
-msgstr "@@image: 'figures/gtk-add.png'; md5=a856b499d8d4681b70b5ce6f25bc5c6d"
-
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/account-irc.page:112(None)
-msgid "@@image: 'figures/gtk-remove.png'; md5=215e3a325a3dd619874e35c30a018bb6"
-msgstr "@@image: 'figures/gtk-remove.png'; md5=215e3a325a3dd619874e35c30a018bb6"
-
-#: C/account-irc.page:8(desc)
-msgid "Additional information necessary for connecting to IRC networks."
-msgstr "IRC sareekin konektatzeko behar den informazio gehigarria."
-
-#: C/account-irc.page:31(title)
-msgid "IRC account details"
-msgstr "IRC kontuen xehetasunak"
-
-#: C/account-irc.page:33(p)
-msgid ""
-"IRC accounts require different information than many other types of "
-"accounts. To create an IRC account, you must specify at least an IRC network "
-"and a nickname. This page details the information you can provide for an "
-"IRC account."
-msgstr ""
-"IRC kontuek beste kontu mota batzuek eskatzen ez duten informazioa eskatzen "
-"dute. IRC kontu bat sortzeko, IRC sare bat eta goitizen bat gutxienez "
-"zehaztu behar dituzu. Orri honetan IRC kontu baterako horni dezakezun "
-"informazioaren xehetasunak ematen dira."
-
-#: C/account-irc.page:45(gui)
-#: C/account-irc.page:120(gui)
-msgid "Network"
-msgstr "Sarea"
-
-#: C/account-irc.page:46(p)
-msgid ""
-"IRC is an open system that allows people to run separate IRC networks. Each "
-"network is distinct and has its own users and chat rooms. <app>Empathy</app> "
-"lists the most popular networks in the <gui>Network</gui> drop-down list. "
-"You can add additional networks. See <link xref=\"#networks\"/> below."
-msgstr ""
-"IRC sareak bakoitza bere aldetik exekutatzeko aukera ematen duen sistema "
-"irekia da IRC. Sare bakoitza desberdina da, eta bere erabiltzaileak eta "
-"berriketa-gelak ditu. <app>Empathy</app>-n sarerik ezagunenak goitibeherako "
-"<gui>Sarea</gui> zerrendan azaltzen dira. Sare gehigarriak gehi ditzakezu. "
-"Ikus <link xref=\"#networks\"/> behean."
-
-#: C/account-irc.page:53(gui)
-msgid "Nickname"
-msgstr "Goitizena"
-
-#: C/account-irc.page:54(p)
-msgid ""
-"Your nickname is your unique name on the IRC network. Only one person on a "
-"network may use a given nickname. If you get an error message that says "
-"<link xref=\"prob-conn-name\" role=\"error-msg\"/> you will need to change your "
-"nickname."
-msgstr ""
-"Zure goitizena zure izen bakarra da IRC sarean. Sareko pertsona bakar batek "
-"erabil dezake goitizen bat. <link xref=\"prob-conn-name\" role=\"error-msg\"/> "
-"dioen errore-mezua jasotzen baduzu, goitizena aldatu beharko duzu."
-
-#: C/account-irc.page:60(gui)
-msgid "Password"
-msgstr "Pasahitza"
-
-#: C/account-irc.page:61(p)
-msgid ""
-"Some servers, particularly those on private networks, require a password to "
-"connect. If you are authorized to use the network, the network "
-"administrators should provide you with a password."
-msgstr ""
-"Zerbitzari batzuek, sare pribatuetakoek batez ere, pasahitza eskatzen dute "
-"konektatzeko. Sarea erabiltzeko baimena baduzu, sare-administratzaileek "
-"pasahitz bat eman beharko lizukete."
-
-#: C/account-irc.page:65(title)
-msgid "NickServ Passwords"
-msgstr "NickServ pasahitzak"
-
-#: C/account-irc.page:66(p)
-msgid ""
-"On some networks, nicknames can be registered using a service known as "
-"NickServ. <app>Empathy</app> does not directly support nickname passwords. "
-"On some networks, including the popular freenode network, server passwords "
-"are automatically forwarded to NickServ, allowing you to set this field to "
-"identify yourself with NickServ. See <link xref=\"irc-nick-password\"/> for "
-"more details."
-msgstr ""
-"Sare batzuetan, goitizenak NickServ zerbitzuarekin erregistra daitezke. "
-"<app>Empathy</app>-k gaur egun ez du zuzenean onartzen goitizen-pasahitzik. "
-"Sare batzuetan, freenode sare ezagunean besteak beste, zerbitzari-pasahitzak "
-"automatikoki birbidaltzen dira NickServ-era, zuri aukera emateko eremu hau "
-"ezartzeko NickServ-ekin zure burua identifikatzeko. Xehetasun gehiago "
-"lortzeko, ikus <link xref=\"irc-nick-password\"/>."
-
-#: C/account-irc.page:76(gui)
-msgid "Real name"
-msgstr "Benetako izena"
-
-#: C/account-irc.page:77(p)
-msgid ""
-"You can provide your real name in addition to your nickname. Other users "
-"will be able to see this when they view your information."
-msgstr ""
-"Zure benetako izena eman dezakezu, goitizenaz gain. Beste erabiltzaileek "
-"ikusi ahal izango dute, zure informazioa ikustean."
-
-#: C/account-irc.page:81(gui)
-msgid "Quit message"
-msgstr "Irteteko mezua"
-
-#: C/account-irc.page:82(p)
-msgid ""
-"When you go offline, a quit message is sent to all the chat rooms you’re in "
-"and to all the users you’re having a private conversation with. Use this "
-"field to provide a custom quit message."
-msgstr ""
-"Lineatik kanpora zoazenean, irteteko mezu bat bidaltzen da zu zauden "
-"berriketa-gela guztietara, baita solasaldi pribatua izan duzun erabiltzaile "
-"guztiei ere. Erabili eremu hau irteteko mezu pertsonalizatua ezartzeko."
-
-#: C/account-irc.page:94(title)
-msgid "IRC Networks"
-msgstr "IRC sareak"
-
-#: C/account-irc.page:97(title)
-msgid "Networks"
-msgstr "Sareak"
-
-#: C/account-irc.page:99(p)
-msgid ""
-"<app>Empathy</app> includes a list of popular IRC networks. If you wish to "
-"another IRC network, you can add it to the list. You can also modify "
-"networks and remove them from the list."
-msgstr ""
-"<app>Empathy</app>-k IRC sare ezagunen zerrenda dauka. Beste IRC sare bat "
-"nahi baduzu, gehitu zerrendari. Era berean, sareak aldatu eta zerrendatik ken "
-"ditzakezu."
-
-#: C/account-irc.page:104(p)
-msgid ""
-"To add a network to the list, click <media type=\"image\" mime=\"image/png\" "
-"src=\"figures/gtk-add.png\" width=\"16\" height=\"16\">Add</media>."
-msgstr ""
-"Zerrendan sare bat gehitzeko, egin klik <media type=\"image\" mime=\"image/png\" "
-"src=\"figures/gtk-add.png\" width=\"16\" height=\"16\">Gehitu</media> botoian."
-
-#: C/account-irc.page:107(p)
-msgid ""
-"To modify a network in the list, select the network and click <media "
-"type=\"image\" mime=\"image/png\" src=\"figures/gtk-edit.png\" width=\"16\" "
-"height=\"16\">Edit</media>."
-msgstr ""
-"Sare bat zerrendan gehitzeko, egin klik <media type=\"image\" mime=\"image/png\" "
-"src=\"figures/gtk-add.png\" width=\"16\" height=\"16\">Gehitu</media> botoian."
-
-#: C/account-irc.page:110(p)
-msgid ""
-"To remove a network from the list, select the network and click <media "
-"type=\"image\" mime=\"image/png\" src=\"figures/gtk-remove.png\" width=\"16\" "
-"height=\"16\">Remove</media>."
-msgstr ""
-"Sare bat zerrendatik kentzeko, hautatu sarea, eta egin klik <media "
-"type=\"image\" mime=\"image/png\" src=\"figures/gtk-remove.png\" width=\"16\" "
-"height=\"16\">Kendu</media> botoian."
-
-#: C/account-irc.page:115(p)
-msgid "When adding or modifying a network, you can enter the following information:"
-msgstr "Sare bat gehitzean edo aldatzean, informazio hau sar dezakezu:"
-
-#: C/account-irc.page:121(p)
-msgid ""
-"This is the name of the network as you want it to appear in the list of "
-"networks."
-msgstr "Hau da sareak sareen zerrendan edukitzea nahi duzun izena."
-
-#: C/account-irc.page:125(gui)
-msgid "Charset"
-msgstr "Karaktere-jokoa"
-
-#: C/account-irc.page:126(p)
-msgid ""
-"This specifies the character encoding that is typically used on this "
-"network. A character encoding is a specific way of recording characters "
-"internally in a computer. There are many character encodings, and you need "
-"to use the same character encoding as other users to see their messages "
-"correctly."
-msgstr ""
-"Sare honetan normalean erabiltzen den karaktere-kodeketa zehazten du honek. "
-"Karaktere-kodeketa karaktereak ordenagailuaren barruan erregistratzeko modu "
-"zehatza da. Karaktere-kodeketa ugari daude, eta zuk beste erabiltzaileen "
-"karaktere-kodeketa bera erabili behar duzu mezuak ondo ikusi ahal izateko."
-
-#. Translators: Recommend character encodings that are common
-#. for your language.
-#: C/account-irc.page:135(p)
-msgid ""
-"By default, <app>Empathy</app> uses UTF-8, a modern character encoding that "
-"can handle text from most of the world's languages. Another common encoding "
-"for English and some other Western languages is ISO-8859-1."
-msgstr ""
-"Modu lehenetsian, <app>Empathy</app>-k UTF-8 erabiltzen du, munduko "
-"hizkuntza gehienetako testua kudea dezakeen karaktere-kodeketa modernoa. "
-"Ingeleserako eta mendebaldeko beste hizkuntza batzuetarako asko erabiltzen "
-"den kodeketa ISO-8859-1 da."
-
-#: C/account-irc.page:141(gui)
-msgid "Servers"
-msgstr "Zerbitzariak"
-
-#: C/account-irc.page:142(p)
-msgid ""
-"An IRC network may have many servers you can connect to. When you are "
-"connected to a server on a particular network, you can communicate with all "
-"users on all other servers on that network. You can add and remove servers "
-"for this network using the <gui>Add</gui> and <gui>Remove</gui> buttons."
-msgstr ""
-"IRC sare batek zerbitzari ugari eduki ditzake zu konektatzeko moduan. Sare "
-"zehatz bateko zerbitzari batekin konektatuta zaudenean, sare horretako beste "
-"zerbitzari guztieen erabiltzaile guztiekin komunika zaitezke. Zerbitzariak "
-"gehitzeko eta kentzeko saretik, erabili <gui>Gehitu</gui> eta "
-"<gui>Kendu</gui> botoiak."
-
-#: C/account-irc.page:147(p)
-msgid ""
-"When a server is selected, click the field under <gui>Server</gui> or "
-"<gui>Port</gui> to edit it. Alternatively, use the left and right arrow keys "
-"to focus the field, and press the space bar to begin editing."
-msgstr ""
-"Zerbitzari bat hautatuta dagoenean, egin klik <gui>Zerbitzaria</gui> edo "
-"<gui>Ataka</gui> ataletan, editatzeko. Bestela, erabili ezker- eta eskuin-"
-"geziak eremua fokuratzeko, eta sakatu zuriune-barra editatzen hasteko."
-
-#: C/account-irc.page:151(p)
-msgid ""
-"Select the check box in the <gui>SSL</gui> column to encrypt all "
-"communication with a server. Note that this does not prevent other users on "
-"the network from seeing what you write on public chat rooms."
-msgstr ""
-"Hautatu zutabeko <gui>SSL</gui> kontrol-laukia, zerbitzari batekiko "
-"komunikazio guztia enkriptatzeko. Kontuan hartu horrek ez diela sareko beste "
-"erabiltzaileei eragozten zuk berriketa-gela publikoetan idatzitakoa ikusi "
-"ahal izatea."
-
-#. Put one translator per line, in the form of NAME <EMAIL>, YEAR1, YEAR2
-#: C/index.page:0(None)
-msgid "translator-credits"
-msgstr "Hizkuntza Politikarako Sailburuordetza <hizkpol@ej-gv.es>, 2008."
-
diff --git a/help/eu/figures/empathy-main-window.png b/help/eu/figures/empathy-main-window.png
deleted file mode 100644
index d277e70c..00000000
--- a/help/eu/figures/empathy-main-window.png
+++ /dev/null
Binary files differ
diff --git a/help/fi/fi.po b/help/fi/fi.po
deleted file mode 100644
index 8653af1b..00000000
--- a/help/fi/fi.po
+++ /dev/null
@@ -1,672 +0,0 @@
-# Finnish help for file-roller package.
-# Copyright (C) 2009 Valto Wirkola.
-# This file is distributed under the same license as the package.
-# Valto Wirkola <valto [dot] wirkola [at] yahoo [dot] com>, 2009.
-# (very small changes by Timo Jyrinki <timo.jyrinki@iki.fi>)
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: empathy\n"
-"POT-Creation-Date: 2009-02-18 07:04+0000\n"
-"PO-Revision-Date: 2009-02-23 16:00+0200\n"
-"Last-Translator: Valto Wirkola <valto [dot] wirkola [at] yahoo [dot] com>\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"
-"Plural-Forms: nplurals=2; plural=(n !=1);\n"
-
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/empathy.xml:238(None)
-msgid "@@image: 'figures/empathy-main-window.png'; md5=38259a866f38ff1f754828e46d2b0e5c"
-msgstr "@@image: 'figures/empathy-main-window.png'; md5=38259a866f38ff1f754828e46d2b0e5c"
-
-#: C/empathy.xml:27(title)
-msgid "<application>Empathy</application> Manual V2.1"
-msgstr "<application>Empathy</application> - Käyttöopas V2.1"
-
-#: C/empathy.xml:30(year)
-msgid "2008, 2009"
-msgstr "2008, 2009"
-
-#: C/empathy.xml:31(holder)
-#: C/empathy.xml:37(publishername)
-#: C/empathy.xml:48(orgname)
-#: C/empathy.xml:56(orgname)
-#: C/empathy.xml:87(para)
-#: C/empathy.xml:101(para)
-msgid "Ubuntu Documentation Project"
-msgstr "Ubuntun dokumentaatioprojekti"
-
-#: 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 "Tätä asiakirjaa saa kopioida, jakaa edelleen ja/tai muokata Free Software Foundationin julkaiseman GNU Free Documentation Licensen (GFDL) version 1.1 tai valinnaisesti myöhemmän version mukaisesti, ilman vaatimuksia muuttamattomista osioista ja etu- tai takakansiteksteistä. Kopion GFDL:stä voi nähdä napsauttamalla <ulink type=\"help\" url=\"ghelp:fdl\">tätä linkkiä</ulink>, tai lukemalla ohjeen mukana toimitetun COPYING-DOCS-nimisen tiedoston."
-
-#: 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 "Tämä käyttöohje on osa Gnomen käyttöohjekokoelmaa ja levitetään GFDL-lisenssin alaisena. Jos haluat levittää tätä käyttöohjetta erillään kokoelmasta, voit tehdä sen liittämällä lisenssin kopion ohjeen mukaan, kuten lisenssin luku 6 sanelee."
-
-#: 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 "Monet tuotteiden ja palveluiden nimet ovat tuotemerkkejä. Gnomen dokumentointiprojektissa nämä nimet pyritään kirjoittamaan suuraakkosin tai isolla alkukirjaimella, sikäli kun projektin jäsenet tietävät kyseisistä tuotemerkeistä."
-
-#: 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 "ASIAKIRJA TARJOTAAN SELLAISENAAN, ILMAN MINKÄÄNLAISTA KIRJATTUA TAI KONKLUDENTTISTA RAJATONTA TAKUUTA ASIAKIRJAN TAI SEN MUOKATUN VERSION VIRHEETTÖMYYDESTÄ, SOPIVUUDESTA KAUPALLISEEN KÄYTTÖÖN TAI TIETTYYN KÄYTTÖTARKOITUKSEEN TAI LOUKKAAMATTOMUUDESTA. TÄYSI VASTUU ASIAKIRJAN TAI SEN MUOKATUN VERSION LAADUSTA, TARKKUUDESTA JA TOIMIVUUDESTA ON KÄYTTÄJÄLLÄ. JOS ASIAKIRJA TAI SEN MUOKATTU VERSIO OSOITTAUTUU JOLLAKIN TAVALLA VIRHEELLISEKSI, KÄYTTÄJÄ (EI ALKUPERÄINEN KIRJOITTAJA TAI MUU TEKIJÄ) VASTAA PALVELUJEN, KORJAUSTEN TAI OIKAISUJEN KUSTANNUKSISTA. TÄMÄ VASTUUVAPAUSLAUSEKE ON EROTTAMATON OSA LISENSSIÄ. ASIAKIRJAN TAI SEN MUOKATTUJEN VERSIOIDEN KÄYTTÖ ON SALLITTUA VAIN TÄMÄN VASTUUVAPAUSLAUSEKKEEN NOJALLA; SEKÄ"
-
-#: 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 "MISSÄÄN OLOSUHTEISSA TAI MINKÄÄN OIKEUSLAITOKSEN ALAISUUDESSA, NIIN OIKEUSLOUKKAUKSISSA (MUKAAN LUKIEN HUOLIMATTOMUUS), SOPIMUS TAI MUUTOIN, ASIAKIRJAN TAI SEN MUOKATUN VERSION TEKIJÄ, ALKUPERÄINEN KIRJOITTAJA, KUKAAN AVUSTAJISTA, KUKAAN LEVITTÄJÄ TAIKKA KUKAAN TARJOAJA EI OLE VASTUUSSA KENELLEKÄÄN SUORASTA, EPÄSUORASTA, ERITYISESTÄ, TAPATURMAISESTA TAI VÄLILLISESTÄ VAHINGOSTA SISÄLTÄEN RAJOITUKSETTA VAHINGOT LIIKEARVON MENETYKSESTÄ, TYÖN KESKEYTYMISESTÄ, TIETOKONEVIRHEESTÄ TAI -HÄIRIÖSTÄ TAIKKA MISTÄÄN MUUSTA VAHINGOSTA TAI MENETYKSESTÄ, JOKA ILMENEE TAI LIITTYY ASIAKIRJAN TAI SEN MUOKATUN VERSION KÄYTTÖÖN EDES SILLOIN KUN OSAPUOLTA ON OLLUT TIETOINEN TÄLLAISEN VAHINGON MAHDOLLISUUDESTA."
-
-#: 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 "ASIAKIRJA SEKÄ MUOKATUT VERSIOT ASIAKIRJASTA TARJOTAAN GNU FREE DOCUMENTATION LICENSEN EHDOIN SEKÄ YMMÄRTÄEN ETTÄ: <placeholder-1/>"
-
-#: C/empathy.xml:45(firstname)
-msgid "Milo"
-msgstr "Milo"
-
-#: C/empathy.xml:46(surname)
-msgid "Casagrande"
-msgstr "Casagrande"
-
-#: C/empathy.xml:49(email)
-msgid "milo@ubuntu.com"
-msgstr "milo@ubuntu.com"
-
-#: C/empathy.xml:53(firstname)
-msgid "Seth"
-msgstr "Seth"
-
-#: C/empathy.xml:54(surname)
-msgid "Dudenhofer"
-msgstr "Dudenhofer"
-
-#: C/empathy.xml:57(email)
-msgid "sdudenhofer@gmail.com"
-msgstr "sdudenhofer@gmail.com"
-
-#: C/empathy.xml:81(revnumber)
-msgid "Empathy Manual V2.1"
-msgstr "Empathy - Käyttöopas V2.1"
-
-#: C/empathy.xml:82(date)
-msgid "January 2009"
-msgstr "Tammikuu 2009"
-
-#: C/empathy.xml:84(para)
-#: C/empathy.xml:95(para)
-msgid "Milo Casagrande <email>milo@ubuntu.com</email>"
-msgstr "Milo Casagrande <email>milo@ubuntu.com</email>"
-
-#: C/empathy.xml:92(revnumber)
-msgid "Empathy Manual V2.0"
-msgstr "Empathy - Käyttöopas V2.0"
-
-#: C/empathy.xml:93(date)
-msgid "April 2008"
-msgstr "Huhtikuu 2008"
-
-#: C/empathy.xml:98(para)
-msgid "Seth Dudenhofer <email>sdudenhofer@gmail.com</email>"
-msgstr "Seth Dudenhofer <email>sdudenhofer@gmail.com</email>"
-
-#: C/empathy.xml:106(releaseinfo)
-msgid "This manual describes version 2.26 of Empathy."
-msgstr "Tämä käyttöopas käsittelee Empathyn versiota 2.26."
-
-#: C/empathy.xml:110(title)
-msgid "Feedback"
-msgstr "Palaute"
-
-#: C/empathy.xml:111(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 "Raportoidaksesi bugin tai tehdäksesi ehdotuksen <application>Empathy</application>-sovellukseen tai tähän käyttöoppaaseen, seuraa linkkiä <ulink url=\"ghelp:gnome-feedback\" type=\"help\">Gnomen palautesivulle</ulink>."
-
-#: C/empathy.xml:119(para)
-msgid "Empathy is an application for instant messaging."
-msgstr "Empathy on pikaviestinsovellus."
-
-#: C/empathy.xml:127(primary)
-#: C/empathy.xml:0(application)
-msgid "Empathy"
-msgstr "Empathy"
-
-#: C/empathy.xml:130(primary)
-msgid "empathy"
-msgstr "empathy"
-
-#: C/empathy.xml:131(secondary)
-msgid "istant messaging"
-msgstr "pikaviestintä"
-
-#: C/empathy.xml:135(title)
-msgid "Introduction"
-msgstr "Esittely"
-
-#: C/empathy.xml:136(para)
-msgid "<application>Empathy</application> is a multi-protocol instant messaging program for the GNOME Desktop. With <application>Empathy</application> you can keep in touch with all of your friends through lots of supported instant messaging services."
-msgstr "<application>Empathy</application> on useita pikaviestintäpalvelujen yhteystyyppejä tukeva ohjelma GNOME-työpöydälle. <application>Empathy</application>:lla voit pitää yhteyttä kaikkiin ystäviisi useiden tuettujen pikaviestintäpalvelujen kautta."
-
-#: C/empathy.xml:146(acronym)
-msgid "AIM"
-msgstr "AIM"
-
-#: C/empathy.xml:150(para)
-msgid "Google Talk"
-msgstr "Google Talk"
-
-#: C/empathy.xml:155(para)
-msgid "ICQ"
-msgstr "ICQ"
-
-#: C/empathy.xml:161(acronym)
-msgid "IRC"
-msgstr "IRC"
-
-#: C/empathy.xml:165(para)
-msgid "Jabber (or <acronym>XMPP</acronym>)"
-msgstr "Jabber (tai <acronym>XMPP</acronym>)"
-
-#: C/empathy.xml:171(acronym)
-msgid "MSN"
-msgstr "MSN"
-
-#: C/empathy.xml:175(para)
-#: C/empathy.xml:442(para)
-msgid "Salut"
-msgstr "Salut"
-
-#: C/empathy.xml:181(acronym)
-msgid "SIP"
-msgstr "SIP"
-
-#: C/empathy.xml:185(para)
-msgid "Yahoo"
-msgstr "Yahoo"
-
-#: C/empathy.xml:190(para)
-msgid "And many others..."
-msgstr "sekä monia muita..."
-
-#: C/empathy.xml:141(para)
-msgid "<application>Empathy</application> supports the following services: <placeholder-1/>"
-msgstr "<application>Empathy</application> tukee seuraavia palveluita: <placeholder-1/>"
-
-#: C/empathy.xml:199(title)
-msgid "Getting Started"
-msgstr "Aloittaminen"
-
-#: C/empathy.xml:202(title)
-msgid "Starting Empathy"
-msgstr "Empathyn käynnistäminen"
-
-#: C/empathy.xml:203(para)
-msgid "You can start <application>Empathy</application> in the following ways:"
-msgstr "Voit käynnistää <application>Empathyn</application> seuraavin tavoin:"
-
-#: C/empathy.xml:207(term)
-msgid "<guimenu>Applications</guimenu> menu"
-msgstr "<guimenu>Sovellukset</guimenu>-valikosta"
-
-#: C/empathy.xml:209(para)
-msgid "Choose <menuchoice><guisubmenu>Internet</guisubmenu><guimenuitem>Empathy Instant Messenger</guimenuitem></menuchoice>."
-msgstr "Valitse <menuchoice><guisubmenu>Internet</guisubmenu><guimenuitem>Empathy-pikaviestin</guimenuitem></menuchoice>."
-
-#: C/empathy.xml:218(term)
-msgid "Command line"
-msgstr "Komentoriviltä"
-
-#: C/empathy.xml:220(para)
-msgid "Type <command>empathy</command> and then press <keycap>Enter</keycap>."
-msgstr "Kirjoita <command>empathy</command> ja paina <keycap>Enter</keycap>."
-
-#: C/empathy.xml:229(title)
-msgid "When You Start Empathy"
-msgstr "Kun käynnistät Empathyn"
-
-#: C/empathy.xml:234(title)
-msgid "<application>Empathy</application> Main Window"
-msgstr "<application>Empathy</application>-pääikkuna"
-
-#: C/empathy.xml:241(phrase)
-msgid "Shows <placeholder-1/> main window. Contains the titlebar, the menubar, contact list, status icon and status arrow button list."
-msgstr "Näyttää <placeholder-1/> pääikkunan, joka sisältää osoitepalkin, valikkopalkin, tuttavaluettelon, tilakuvakkeen ja tilapudotuslaatikon."
-
-#: C/empathy.xml:230(para)
-msgid "When you start <application>Empathy</application> the following window is shown. <placeholder-1/>"
-msgstr "Kun käynnistät <application>Empathyn</application>, seuraavanlainen ikkuna ilmestyy. <placeholder-1/>"
-
-#: C/empathy.xml:256(title)
-msgid "<application>Empathy</application> Main Components"
-msgstr "<application>Empathy</application>-pääkomponentit"
-
-#: C/empathy.xml:263(para)
-msgid "Component"
-msgstr "Komponentti"
-
-#: C/empathy.xml:266(para)
-msgid "Description"
-msgstr "Kuvaus"
-
-#: C/empathy.xml:273(para)
-msgid "Menubar"
-msgstr "Valikkopalkki"
-
-#: C/empathy.xml:276(para)
-msgid "Contains menus used to perform actions in <application>Empathy</application>."
-msgstr "Sisältää valikoita toimintojen suorittamiseen <application>Empathy</application>:ssa."
-
-#: C/empathy.xml:283(para)
-msgid "Status Drop-Down List"
-msgstr "Tilapudotusvalikko"
-
-#: C/empathy.xml:286(para)
-msgid "Allows to update the status."
-msgstr "Mahdollistaa tilan päivittämisen."
-
-#: C/empathy.xml:293(para)
-msgid "Account Button"
-msgstr "Tilipainike"
-
-#: C/empathy.xml:296(para)
-msgid "Opens the <guilabel>Accounts</guilabel> dialog."
-msgstr "Avaa <guilabel>Tilit</guilabel>-valintaikkunan."
-
-#: C/empathy.xml:303(para)
-msgid "Contact List"
-msgstr "Tuttavaluettelo"
-
-#: C/empathy.xml:306(para)
-msgid "Shows all the available contacts and their associated status."
-msgstr "Näyttää kaikki saatavilla olevat tuttavat ja heidän tilansa."
-
-#: C/empathy.xml:252(para)
-msgid "<xref linkend=\"empathy-TBL-1\"/> describes the components of <application>Empathy</application>'s main 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 "<xref linkend=\"empathy-TBL-1\"/> käsittelee <application>Empathyn</application> pääikkunan komponentteja. <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>"
-
-#: C/empathy.xml:320(title)
-msgid "Accounts"
-msgstr "Tilit"
-
-#: C/empathy.xml:321(para)
-msgid "To use <application>Empathy</application> you need at least one account of the supported services."
-msgstr "Käyttääksesi <application>Empathy</application>:a, tarvitset ainakin yhden tilin tuetuista palveluista."
-
-#: C/empathy.xml:324(para)
-msgid "If you don't already have an account and you don't have your <emphasis>user name</emphasis> and <emphasis>password</emphasis>, you need to register a new account (see <xref linkend=\"empathy-register-account\"/>)."
-msgstr "Jos et vielä omista tiliä, eikä sinulla ole vielä omaa <emphasis>käyttäjätunnusta</emphasis> ja <emphasis>salasanaa</emphasis>, sinun täytyy rekisteröidä uusi tili (kts. <xref linkend=\"empathy-register-account\"/>)."
-
-#: C/empathy.xml:329(para)
-msgid "In order to talk with other users, also called <emphasis>contacts</emphasis>, you need to use the same service they are using. If, for example, one contact is using the <emphasis role=\"strong\">Jabber</emphasis> service, you need to have an account registered with that service."
-msgstr "Puhuaksesi muiden käyttäjien (eli <emphasis>tuttavien</emphasis) kanssa, teidän täytyy käyttää samaa palvelua. Esimerkiksi, jos tuttava käyttää <emphasis role=\"strong \">Jabber</emphasis>-palvelua, sinulla täytyy olla tili kyseiseen palveluun."
-
-#: C/empathy.xml:336(para)
-msgid "<application>Empathy</application> can handle as many accounts on any supported services as you want and you can have them all open at the same time."
-msgstr "<application>Empathy</application> voi käsitellä niin montaa tiliä kuin haluat kaikilla tuetuilla palveluilla ja voit pitää niitä kaikkia auki samanaikaisesti."
-
-#: C/empathy.xml:342(title)
-msgid "Registering an Account"
-msgstr "Tilin rekisteröinti"
-
-#: C/empathy.xml:343(para)
-msgid "You can freely register an account on any of the following services. Follow the instructions reported on each website on how to register your new account. At the end of the registration process you should have a <emphasis>user name</emphasis> (or an <emphasis>account ID</emphasis>) and a <emphasis>password</emphasis> that you will use to create the account in <application>Empathy</application>."
-msgstr "Voit vapaasti rekisteröidä tilin mihin tahansa seuraavista palveluista. Seuraa sivustolla annettuja ohjeita tilin rekisteröintiin. Rekisteröinnin jälkeen sinulla tulisi olla <emphasis>käyttäjänimi (tai <emphasis>käyttäjä-ID</emphasis>) ja <emphasis>salasana</emphasis>, jota voit käyttää luodaksesi tilin <application>Empathyyn</application>."
-
-#. Translators: try to find a localized version of the
-#. registration service website
-#: C/empathy.xml:361(para)
-msgid "The <ulink type=\"http\" url=\"http://dashboard.aim.com/aim\">AIM</ulink> service."
-msgstr "<ulink type=\"http\" url=\"http://dashboard.aim.com/aim\">AIM</ulink>-palvelu."
-
-#. Translators: try to find a localized version of the
-#. registration service website
-#: C/empathy.xml:368(para)
-msgid "The <ulink type=\"http\" url=\"http://www.google.com/talk/\">Google Talk</ulink> service."
-msgstr "<ulink type=\"http\" url=\"http://www.google.com/talk/\">Google Talk</ulink>-palvelu."
-
-#. Translators: try to find a localized version of the
-#. registration service website
-#: C/empathy.xml:376(para)
-msgid "The <ulink type=\"http\" url=\"https://www.icq.com/register/\">ICQ</ulink> service."
-msgstr "<ulink type=\"http\" url=\"https://www.icq.com/register/\">ICQ</ulink>-palvelu."
-
-#. Translators: try to find a localized version of the
-#. registration service website
-#: C/empathy.xml:383(para)
-msgid "The <ulink type=\"http\" url=\"https://accountservices.passport.net\">MSN</ulink> service."
-msgstr "<ulink type=\"http\" url=\"https://accountservices.passport.net\">MSN</ulink>-palvelu."
-
-#. Translators: try to find a localized version of the
-#. registration service website
-#: C/empathy.xml:390(para)
-msgid "The <ulink type=\"http\" url=\"https://login.yahoo.com/config/login\">Yahoo</ulink> service."
-msgstr "<ulink type=\"http\" url=\"https://login.yahoo.com/config/login\">Yahoo</ulink>-palvelu."
-
-#: C/empathy.xml:352(para)
-msgid "Click on the name of the service to visit its website: <placeholder-1/>"
-msgstr "Napsauta nimeä käydäksesi palvelun sivustolla: <placeholder-1/>"
-
-#: C/empathy.xml:396(para)
-msgid "For registering a <acronym>SIP</acronym> account, you can use one of the following service:"
-msgstr "Rekisteröidäksesi <acronym>SIP</acronym>-tilin, voit käyttää yhtä seuraavista palveluista:"
-
-#. Translators: try to find a localized version of the
-#. registration service website
-#: C/empathy.xml:405(para)
-msgid "The <ulink type=\"http\" url=\"https://www.ekiga.net/index.php?page=register\">Ekiga</ulink> service."
-msgstr "<ulink type=\"http\" url=\"https://www.ekiga.net/index.php?page=register\">Ekiga</ulink>-palvelu."
-
-#. Translators: try to find a localized version of the
-#. registration service website
-#: C/empathy.xml:412(para)
-msgid "The <ulink type=\"http\" url=\"http://account2.freeworlddialup.com/index.php?section_id=94\"><acronym>FWD</acronym></ulink> (Free World Dialup) service."
-msgstr "<ulink type=\"http\" url=\"http://account2.freeworlddialup.com/index.php?section_id=94\"><acronym>FWD</acronym></ulink> (Free World Dialup)-palvelu."
-
-#. Translators: try to find a localized version of the
-#. registration service website
-#: C/empathy.xml:420(para)
-msgid "The <ulink type=\"http\" url=\"https://signup.sipphone.com/new-users/app?class=NewUser;proc=start\">Sipphone</ulink> service."
-msgstr "<ulink type=\"http\" url=\"https://signup.sipphone.com/new-users/app?class=NewUser;proc=start\">Sipphone</ulink>-palvelu."
-
-#: C/empathy.xml:426(para)
-msgid "For registering a <emphasis role=\"strong\">Jabber</emphasis> account, you can use the automatic account creation of <application>Empathy</application>. Not all Jabber service providers support the automatic creation of accounts, one service provider known to work with <application>Empathy</application> is <ulink type=\"http\" url=\"http://www.jabber.org/web/Jabber.org\">jabber.org</ulink>."
-msgstr "Voit käyttää <emphasis role=\"strong\">Jabber</emphasis>-tilin rekisteröintiin <application>Empathyn</application> automaattista tilinluontitoimintoa . Kaikki Jabber-palveluntarjoajat eivät tue automaattista käyttäjätilin luontia, mutta ainakin <ulink type=\"http\" url=\"http://www.jabber.org/web/Jabber.org\">jabber.org</ulink>:n tiedetään toimivan <application>Empathy</application>:ssä."
-
-#: C/empathy.xml:434(para)
-msgid "If you already have a <emphasis role=\"strong\">Jabber</emphasis> account, you can use one of the following services:"
-msgstr "Rekisteröidäksesi <emphasis role=\"strong\">Jabber</emphasis>-tilin, voit käyttää yhtä seuraavista palveluista:"
-
-#: C/empathy.xml:451(title)
-msgid "Adding your Account to <application>Empathy</application>"
-msgstr "Tilin lisääminen <application>Empathyyn</application>"
-
-#: C/empathy.xml:456(para)
-#: C/empathy.xml:534(para)
-#: C/empathy.xml:586(para)
-#: C/empathy.xml:619(para)
-#: C/empathy.xml:649(para)
-#: C/empathy.xml:672(para)
-msgid "From the <link linkend=\"empathy-FIG-mainwindow\">main window </link> (<guilabel>Contact List</guilabel>) click on the account button or press <keycap>F4</keycap> to open the <guilabel>Accounts</guilabel> dialog."
-msgstr "Napsauta <link linkend=\"empathy-FIG-mainwindow\">Pääikkunassa</link> (<guilabel>Tuttavaluettelo</guilabel>) tilipainiketta tai paina <keycap>F4</keycap> avataksesi <guilabel>Tilit</guilabel>-valintaikkunan."
-
-#: C/empathy.xml:468(para)
-#: C/empathy.xml:485(para)
-msgid "From the <guilabel>Type</guilabel> drop-down list choose the service you wish to add an account for, then click on the <guibutton>Create</guibutton> button."
-msgstr "Valitse <guilabel>Tyyppi</guilabel>-pudotusvalikosta lisättävän tilin palvelu ja napsauta <guibutton>Luo</guibutton>-painiketta."
-
-#: C/empathy.xml:464(para)
-msgid "If it is the first time you launch <application>Empathy</application>: <placeholder-1/>"
-msgstr "Jos käynnistät <application>Empathyn</application> ensimmäistä kertaa: <placeholder-1/>"
-
-#: C/empathy.xml:480(para)
-msgid "Click on the <guilabel>Add</guilabel> button."
-msgstr "Napsauta <guibutton>Lisää</guibutton>-painiketta."
-
-#: C/empathy.xml:476(para)
-msgid "Otherwise: <placeholder-1/>"
-msgstr "Muussa tapauksessa: <placeholder-1/>"
-
-#: C/empathy.xml:495(para)
-msgid "Fill the required fields with your <emphasis>user name</emphasis> and <emphasis>password</emphasis>. Optionally, you can modify some advanced options. For more information, see <xref linkend=\"empathy-advanced-options\"/>."
-msgstr "Täytä vaaditut kentät <emphasis>käyttäjänimelläsi</emphasis> ja <emphasis>salasanallasi</emphasis>. Lisäksi voit muokata myös joitakin lisäasetuksia. Lisätietoa: <xref linkend=\"empathy-advanced-options\"/>."
-
-#: C/empathy.xml:504(para)
-#: C/empathy.xml:567(para)
-msgid "To enable the new account, select the <guilabel>Enabled</guilabel> check-box next to the name of the account in the box on the left."
-msgstr "Ota käyttäjätili käyttöön valitsemalla käyttäjätilin nimen vasemmalla puolella oleva <guilabel>Käytössä</guilabel>-valintaruutu."
-
-#: C/empathy.xml:452(para)
-msgid "To add your account to <application>Empathy</application>, proceed as follows: <placeholder-1/>"
-msgstr "Lisätäksesi tilin <application>Empathyyn</application>, toimi seuraavasti. <placeholder-1/>"
-
-#: C/empathy.xml:514(title)
-msgid "Importing Accounts"
-msgstr "Tilin tuonti"
-
-#: C/empathy.xml:515(para)
-msgid "If you use another instant messaging program, you can import the accounts from that program into <application>Empathy</application>"
-msgstr "Jos käytät toista pikaviestintäohjelmaa, voit tuoda siitä tilisi <application>Empathyyn</application>."
-
-#: C/empathy.xml:521(para)
-msgid "At the moment <application>Empathy</application> can import the accounts only from the instant messaging program <application>Pidgin</application>. For more information about <application>Pidgin</application>, see the <ulink type=\"http\" url=\"http://www.pidgin.im/\">Pidgin website</ulink>."
-msgstr "Tällä hetkellä <application>Empathyyn</application> voi tuoda tilejä vain <application>Pidgin</application>-pikaviestintäohjelmasta. Lisätietoa <application>Pidgin</application> löydät <ulink type=\"http\" url=\"http://www.pidgin.im/\">Pidginin web-sivustolta</ulink>."
-
-#: C/empathy.xml:542(para)
-msgid "Click on the <guibutton>Import Accounts...</guibutton> button to open the <guilabel>Import Accounts</guilabel> dialog."
-msgstr "Napsauta <guibutton>Tuo tilejä...</guibutton>-painiketta avataksesi <guilabel>Tuo tilejä</guilabel>-valintaikkunan."
-
-#: C/empathy.xml:549(para)
-msgid "Select the accounts you would like to import by clicking on the <guilabel>Import</guilabel> check-box."
-msgstr "Valitse käyttäjätilit, jotka haluat tuoda napsauttamalla <guilabel>Tuo</guilabel>-valintaruutu."
-
-#: C/empathy.xml:555(para)
-msgid "When you have selected all the desired accounts, click <guibutton>OK</guibutton> to import them. If you don't want to import the accounts, click <guibutton>Cancel</guibutton>."
-msgstr "Kun olet valinnut kaikki haluamasi tilit, napsauta <guibutton>OK</guibutton> tuodaksesi ne. Jos et halua tuoda tilejä, napsauta <guibutton>Peruuta</guibutton>."
-
-#: C/empathy.xml:563(para)
-msgid "When you import a new account into <application>Empathy</application>, it will not be enabled by default."
-msgstr "Kun käynnistät <application>Empathyn</application>, seuraavanlainen ikkuna ilmestyy. <placeholder-1/>"
-
-#: C/empathy.xml:530(para)
-msgid "To import the accounts into <application>Empathy</application>, proceed as follows: <placeholder-1/>"
-msgstr "Kun käynnistät <application>Empathyn</application>, seuraavanlainen ikkuna ilmestyy. <placeholder-1/>"
-
-#: C/empathy.xml:579(title)
-msgid "Editing an Account"
-msgstr "Tilin muokkaus"
-
-#: C/empathy.xml:594(para)
-msgid "Select the account you wish to edit in the box on the left."
-msgstr "Valitse vasemmalla olevasta laatikosta tilit, joita haluat muokata."
-
-#: C/empathy.xml:600(para)
-msgid "Modify the desired data."
-msgstr "Muokkaa haluamasi tiedot."
-
-#: C/empathy.xml:580(para)
-msgid "To edit one of your accounts, i.e. to change the <emphasis>password</emphasis> or your <emphasis>user name</emphasis>, proceed as follows: <placeholder-1/>"
-msgstr "Jos haluat muuttaa jotakin käyttäjätiliä, esim. vaihtaa <emphasis>salasanaa</emphasis> tai <emphasis>käyttäjänimeäsi</emphasis>, toimi seuraavasti: <placeholder-1/>"
-
-#: C/empathy.xml:608(para)
-msgid "Based on the type of the account, it is possibile to edit different settings."
-msgstr "Muutettavien asetusten määrä riippuu tilin tyypistä."
-
-#: C/empathy.xml:627(para)
-msgid "Select the account you wish to edit in the box on the left and double-click on it's name."
-msgstr "Valitse muokattava tili laatikosta ja kaksoisnapsauta sen nimeä."
-
-#: C/empathy.xml:633(para)
-msgid "Change the name of the account as you desire."
-msgstr "Vaihda tilisi nimi haluamaksesi."
-
-#: C/empathy.xml:614(para)
-msgid "To modify the identifier of an account, how <application>Empathy</application> identifies an account, proceed as follows: <placeholder-1/>"
-msgstr "Muokataksesi tilin tunnistetta, jolla <application>Empathy</application> tunnistaa tilin, toimi seuraavasti: <placeholder-1/>"
-
-#: C/empathy.xml:642(title)
-msgid "Disabling and Removing an Account"
-msgstr "Tilin käytöstä pois kytkeminen ja poistaminen"
-
-#: C/empathy.xml:643(para)
-msgid "To disable an account, proceed as follows:"
-msgstr "Voit kytkeä tilin pois päältä seuraavasti:"
-
-#: C/empathy.xml:658(para)
-msgid "Select the account you wish to disable in the box on the left of the dialog and deselect the <guilabel>Enabled</guilabel> check-box."
-msgstr "Valitse valintaikkunan vasemman reunan laatikosta tili, jonka haluat kytkeä pois päältä ja poista valinta <guilabel>Käytössä</guilabel>-valintaruudusta."
-
-#: C/empathy.xml:666(para)
-msgid "To remove an account, proceed as follows:"
-msgstr "Voit poistaa tilin seuraavasti:"
-
-#: C/empathy.xml:681(para)
-msgid "Select the account you wish to disable in the box on the left of the dialog."
-msgstr "Valitse valintaikkunan vasemman puolen laatikosta tili, jonka haluat poistaa."
-
-#: C/empathy.xml:687(para)
-msgid "Click on the <guibutton>Remove</guibutton> button."
-msgstr "Napsauta <guibutton>Remove</guibutton>-painiketta."
-
-#: C/empathy.xml:692(para)
-msgid "A dialog will be shown asking for confirmation. Click on the <guibutton>Remove</guibutton> button to remove the account."
-msgstr "Valintaikkuna pyytä sinulta vahvistusta. Napsauta <guibutton>Remove</guibutton>-painiketta poistaaksesi tilin."
-
-#: C/empathy.xml:702(title)
-msgid "Editing Personal Information"
-msgstr "Henkilökohtaisten tietojen muokkaus"
-
-#: C/empathy.xml:703(para)
-msgid "To change your personal information, your alias and your icon (the image that other contacts will see of you), for each of your accounts, proceed as follows:"
-msgstr "Muuttaaksesi henkilökohtaisia tietojasi, kuten näyttönimeäsi ja kuvakettasi (asettamasi kuva, jonka tuttavasi näkevät) erikseen jokaiselle tilille, toimi seuraavasti:"
-
-#: C/empathy.xml:711(para)
-msgid "From the <link linkend=\"empathy-FIG-mainwindow\">main window</link>, select <menuchoice><guimenu>Edit</guimenu><guimenuitem>Personal Information</guimenuitem></menuchoice>."
-msgstr "Valitse <link linkend=\"empathy-FIG-mainwindow\">pääikkunassa</link> <menuchoice><guimenu>Muokkaa</guimenu><guimenuitem>Henkilötiedot</guimenuitem></menuchoice>."
-
-#: C/empathy.xml:720(para)
-msgid "From the <guilabel>Account</guilabel> drop-down list, choose the account you want to edit."
-msgstr "Valitse muokattava tili <guilabel>Tili</guilabel>-pudotusvalikosta."
-
-#: C/empathy.xml:726(para)
-msgid "In the <guilabel>Alias</guilabel> text box, write your new alias."
-msgstr "Kirjoita <guilabel>Nimimerkki</guilabel>-tekstikenttään uusi nimimerkki."
-
-#: C/empathy.xml:732(para)
-msgid "To change your icon, click on the person-looking button and choose an image file."
-msgstr "Kuvaketta voit vaihtaa napsauttamalla henkilön näköistä painiketta ja valitsemalla kuvatiedoston."
-
-#: C/empathy.xml:738(para)
-#: C/empathy.xml:919(para)
-#: C/empathy.xml:953(para)
-msgid "When done, click <guibutton>Close</guibutton>."
-msgstr "Kun olet valmis, napsauta <guibutton>Sulje</guibutton>-painiketta."
-
-#: C/empathy.xml:746(para)
-msgid "An <emphasis>alias</emphasis> is an alternative way you can identify yourself. You can use your real name or your nickname."
-msgstr "<emphasis>Näyttönimi</emphasis> on vaihtoehtoinen tapa, jolla voit tunnistautua. Voit käyttää oikeaa nimeä tai nimimerkkiä."
-
-#: C/empathy.xml:756(title)
-msgid "Advanced Options"
-msgstr "Lisäasetukset"
-
-#: C/empathy.xml:757(para)
-msgid "TODO"
-msgstr "TODO"
-
-#: C/empathy.xml:765(title)
-msgid "Contacts and Groups"
-msgstr "Tuttavat ja ryhmät"
-
-#: C/empathy.xml:766(para)
-msgid "All the contacts are handled within <application>Empathy</application>'s <link linkend=\"empathy-FIG-mainwindow\">main window</link>."
-msgstr "Kaikki tuttavat käsitellään <application>Empathyn</application> <link linkend=\"empathy-FIG-mainwindow\">pääikkunassa</link>."
-
-#: C/empathy.xml:770(para)
-msgid "You can add or remove a contact or you can edit the information of a particular contact. It is also possibile to arrange contacts in groups. You can have a group for your work contacts, one for you family contacts, and so on."
-msgstr "Voit lisätä tai poistaa tuttavan tai voit muuttaa yksittäisen henkilön tietoja. Voit myös järjestellä niitä ryhmiin, esim. työhenkilöihin ja perheenjäseniin."
-
-#: C/empathy.xml:777(title)
-msgid "Adding and Removing a Contact"
-msgstr "Tuttavan lisääminen ja poistaminen"
-
-#: C/empathy.xml:778(para)
-msgid "To add a new contact, proceed as follows:"
-msgstr "Lisätäksesi uuden tuttavan, toimi seuraavasti:"
-
-#: C/empathy.xml:784(para)
-msgid "From the <link linkend=\"empathy-FIG-mainwindow\">main window</link> choose <menuchoice><guimenu>Chat</guimenu><guimenuitem>Add Contact...</guimenuitem></menuchoice>. The <guilabel>New Contact</guilabel> dialog will be shown."
-msgstr "Valitse <link linkend=\"empathy-FIG-mainwindow\">pääikkunassa</link> <menuchoice><guimenu>Keskustele</guimenu><guimenuitem>Lisää tuttava...</guimenuitem></menuchoice> ja <guilabel>Uusi tuttava</guilabel>-valintaikkuna aukeaa."
-
-#: C/empathy.xml:794(para)
-msgid "From the <guilabel>Account</guilabel> drop-down list, choose the service used by the contact you are adding."
-msgstr "Valitse <guilabel>Käyttäjätili</guilabel>-pudotusvalikosta tili, jolle tuttava lisätään."
-
-#: C/empathy.xml:800(para)
-msgid ""
-"In the <guilabel>Identifier</guilabel> text box type the <emphasis>address</emphasis> of the contact in the form of <userinput><replaceable>user name</replaceable>@<replaceable>service\n"
-"\t domain</replaceable></userinput>."
-msgstr ""
-"Kirjoita <guilabel>Tunniste</guilabel>-tekstikenttään tuttavan <emphasis>osoite</emphasis> muodossa <userinput><replaceable>käyttäjänimi</replaceable>@<replaceable>palvelin\n"
-"\t domain</replaceable></userinput>."
-
-#: C/empathy.xml:809(para)
-msgid "In the <guilabel>Alias</guilabel> text box type the name you want to give at the the new contact."
-msgstr "Voit kirjoittaa <guilabel>Nimimerkki</guilabel>-tekstikenttään nimen uudelle tuttavallesi."
-
-#: C/empathy.xml:815(para)
-msgid "Click on <guibutton>Add</guibutton> to add the new contact."
-msgstr "Napsauta <guibutton>Lisää</guibutton>-painiketta lisätäksesi tuttavan."
-
-#: C/empathy.xml:821(para)
-msgid "To remove a contact, proceed as follows:"
-msgstr "Voit poistaa tuttavan seuraavasti:"
-
-#: C/empathy.xml:827(para)
-msgid "From the <link linkend=\"empathy-FIG-mainwindow\">main window</link>, select the contact you would like to remove and right-click on it."
-msgstr "Valitse <link linkend=\"empathy-FIG-mainwindow\">pääikkunasta</link> tuttava, jonka haluat poistaa ja napsauta sitä oikealla hiirenpainikkeella."
-
-#: C/empathy.xml:834(para)
-msgid "From the popup menu, choose <guilabel>Remove</guilabel> to remove the contact."
-msgstr "Valitse ponnahdusvalikosta <guilabel>Poista</guilabel> poistaaksesi tuttavan."
-
-#: C/empathy.xml:843(para)
-#: C/empathy.xml:879(para)
-msgid "An <emphasis>alias</emphasis> is an alternative way you can identify that particular contact. You can use the real name or the nickname of that person."
-msgstr "<emphasis>nimimerkki</emphasis> on vaihtoehtoinen tapa, jolla voit tunnistaa tuttavan. Voit käyttää henkilön oikeaa nimeä tai nimimerkkiä."
-
-#: C/empathy.xml:852(title)
-msgid "Editing a Contact"
-msgstr "Tuttavan muokkaus"
-
-#: C/empathy.xml:853(para)
-msgid "To edit a contact, proceed as follows:"
-msgstr "Voit muokata tuttavaa seuraavasti:"
-
-#: C/empathy.xml:859(para)
-#: C/empathy.xml:901(para)
-msgid "From the <link linkend=\"empathy-FIG-mainwindow\">main window</link>, select the contact you would like to modify and choose <menuchoice><guimenu>Edit</guimenu><guisubmenu>Account</guisubmenu><guimenuitem>Modify</guimenuitem></menuchoice>, or right-click on it and choose <guilabel>Modify</guilabel>."
-msgstr "Valitse <link linkend=\"empathy-FIG-mainwindow\">pääikkunassa</link> tuttava, jota haluat muokata ja valitse <menuchoice><guimenu>Muokkaa</guimenu><guisubmenu>Tuttava</guisubmenu><guimenuitem>Muokkaa</guimenuitem></menuchoice>, tai napsauta tuttavaa oikealla hiirenpainikkeella ja valitse ponnahdusvalikosta <guilabel>Muokkaa</guilabel>."
-
-#: C/empathy.xml:872(para)
-msgid "From the <guilabel>Edit Contact Information</guilabel> dialog, you can modify the <emphasis>alias</emphasis> and the <emphasis>group</emphasis> of the contact."
-msgstr "<guilabel>Muokkaa yhteystietoja</guilabel>-valintaikkunassa voit muokata tuttavan <emphasis>nimimerkkiä</emphasis> ja <emphasis>ryhmiä</emphasis>."
-
-#: C/empathy.xml:886(para)
-msgid "For more information about groups, see <xref linkend=\"empathy-add-contact-group\"/> and <xref linkend=\"empathy-add-group\"/>."
-msgstr "Lisätietoa ryhmistä: <xref linkend=\"empathy-add-contact-group\"/> ja <xref linkend=\"empathy-add-group\"/>."
-
-#: C/empathy.xml:894(title)
-msgid "Adding a Contact to a Group"
-msgstr "Tuttavan lisääminen ryhmään"
-
-#: C/empathy.xml:895(para)
-msgid "To add a contact to one or more groups, proceed as follows:"
-msgstr "Voit lisätä tuttavan yhteen tai useampaan ryhmään seuraavasti:"
-
-#: C/empathy.xml:913(para)
-msgid "From the <guilabel>Groups</guilabel> section, select the group, or groups, you want to add the contact to."
-msgstr "Valitse <guilabel>Ryhmät</guilabel>-osiosta ryhmä tai ryhmät, joihin haluat lisätä tuttavan."
-
-#: C/empathy.xml:928(title)
-msgid "Adding a New Group"
-msgstr "Uuden ryhmän lisääminen"
-
-#: C/empathy.xml:929(para)
-msgid "To add a new group, proceed as follows:"
-msgstr "Voit lisätä uuden ryhmän seuraavasti:"
-
-#: C/empathy.xml:935(para)
-msgid "From the <link linkend=\"empathy-FIG-mainwindow\">main window</link>, select one contact and choose <menuchoice><guimenu>Edit</guimenu><guisubmenu>Account</guisubmenu><guimenuitem>Modify</guimenuitem></menuchoice>, or right-click on it and choose <guilabel>Modify</guilabel>."
-msgstr "Valitse <link linkend=\"empathy-FIG-mainwindow\">pääikkunasta</link> tuttava ja valitse valikkopalkista <menuchoice><guimenu>Muokkaa</guimenu><guisubmenu>Tuttava</guisubmenu><guimenuitem>Muokkaa</guimenuitem></menuchoice> tai napsauta oikealla hiirenpainikkeella ja valitse pudotusvalikosta <guilabel>Muokkaa</guilabel>."
-
-#: C/empathy.xml:946(para)
-msgid "In the <guilabel>Groups</guilabel> section, write the name of the group you want to add and then click on <guibutton>Add Group</guibutton>."
-msgstr "Kirjoita <guilabel>Ryhmät</guilabel>-osioon lisättävän ryhmän nimi ja napsauta <guibutton>Lisää ryhmä</guibutton>."
-
-#. Put one translator per line, in the form of NAME <EMAIL>, YEAR1, YEAR2.
-#: C/empathy.xml:0(None)
-msgid "translator-credits"
-msgstr "Valto Wirkola <valto.wirkola@yahoo.com> 2009"
-
diff --git a/help/fi/figures/empathy-main-window.png b/help/fi/figures/empathy-main-window.png
deleted file mode 100644
index 0db8ead2..00000000
--- a/help/fi/figures/empathy-main-window.png
+++ /dev/null
Binary files differ
diff --git a/help/fi/figures/empathy-new-account.png b/help/fi/figures/empathy-new-account.png
deleted file mode 100644
index e5c70455..00000000
--- a/help/fi/figures/empathy-new-account.png
+++ /dev/null
Binary files differ
diff --git a/help/fr/figures/empathy-main-window.png b/help/fr/figures/empathy-main-window.png
deleted file mode 100644
index 61dd25b8..00000000
--- a/help/fr/figures/empathy-main-window.png
+++ /dev/null
Binary files differ
diff --git a/help/fr/fr.po b/help/fr/fr.po
deleted file mode 100644
index 4b2718f1..00000000
--- a/help/fr/fr.po
+++ /dev/null
@@ -1,3634 +0,0 @@
-# French translation of empathy documentation.
-# Copyright (C) 2008-2012 Free Software Foundation, Inc.
-# This file is distributed under the same license as the empathy
-# package.
-#
-# Bruno Brouard <annoa.b@gmail.com>, 2008-2012
-# Claude Paroz <claude@2xlibre.net>, 2008-2010
-# Yannick Tailliez <ytdispatch-libre@yahoo.com>, 2008.
-# Laurent Coudeur <laurentc@iol.ie>, 2009.
-# Baptiste Mille-Matthias <bmm80@free.fr>, 2009 (figures)
-# Luc Pionchon <pionchon.luc@gmail.com>, 2011
-# Luc Guillemin <luc.guillemin@gmail.com>, 2011
-# Andre Matuch <andre.matuch@videotron.ca>, 2012
-# Ajmir BUSGEETH <Ajmir.Busgeeth@gmail.com>, 2012
-# Alain Lojewski <allomervan@gmail.com>, 2012-2013
-# Mickael Albertus <mickael.albertus@gmail.com>, 2013.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: empathy 3.2.2\n"
-"POT-Creation-Date: 2013-03-23 17:33+0000\n"
-"PO-Revision-Date: 2013-03-24 07:57+0100\n"
-"Last-Translator: Mickael Albertus <mickael.albertus@gmail.com>\n"
-"Language-Team: GNOME French Team <gnomefr@traduc.org>\n"
-"Language: \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"
-
-#. Put one translator per line, in the form NAME <EMAIL>, YEAR1, YEAR2
-msgctxt "_"
-msgid "translator-credits"
-msgstr ""
-"Bruno Brouard <annoa.b@gmail.com>, 2008-2012\n"
-"Claude Paroz <claude@2xlibre.net>, 2008-2010\n"
-"Yannick Tailliez <ytdispatch-libre@yahoo.com>, 2008\n"
-"Laurent Coudeur <laurentc@iol.ie>, 2009\n"
-"Luc Pionchon <pionchon.luc@gmail.com>, 2011\n"
-"Luc Guillemin <luc.guillemin@gmail.com>, 2012\n"
-"Ajmir BUSGEETH <Ajmir.Busgeeth@gmail.com>, 2012\n"
-"Andre Matuch <andre.matuch@videotron.ca>, 2012\n"
-"Alain Lojewski <allomervan@gmail.com>, 2012-2013\n"
-"Mickael Albertus <mickael.albertus@gmail.com>, 2012"
-
-#. This is a reference to an external file such as an image or video. When
-#. the file changes, the md5 hash will change to let you know you need to
-#. update your localized copy. The msgstr is not used at all. Set it to
-#. whatever you like once you have updated your copy of the file.
-#.
-#. This is a reference to an external file such as an image or video. When
-#. the file changes, the md5 hash will change to let you know you need to
-#. update your localized copy. The msgstr is not used at all. Set it to
-#. whatever you like once you have updated your copy of the file.
-#: C/index.page:28(media)
-msgctxt "_"
-msgid ""
-"external ref='figures/empathy-logo.png' "
-"md5='1afc419a644e90b16393807e35cb5cb2'"
-msgstr ""
-"external ref='figures/empathy-logo.png' "
-"md5='1afc419a644e90b16393807e35cb5cb2'"
-
-#: C/index.page:7(info/title)
-msgctxt "link"
-msgid "Empathy Internet Messenger"
-msgstr "Messagerie instantanée Empathy"
-
-#: C/index.page:8(info/title)
-msgctxt "text"
-msgid "Empathy Internet Messenger"
-msgstr "Messagerie instantanée Empathy"
-
-#: C/index.page:19(credit/name) C/add-account.page:21(credit/name)
-#: C/audio-call.page:19(credit/name) C/audio-video.page:17(credit/name)
-#: C/create-account.page:19(credit/name)
-#: C/disable-account.page:21(credit/name)
-#: C/favorite-rooms.page:14(credit/name) C/geolocation.page:17(credit/name)
-#: C/geolocation-not-showing.page:17(credit/name)
-#: C/geolocation-privacy.page:17(credit/name)
-#: C/geolocation-supported.page:16(credit/name)
-#: C/geolocation-turn.page:18(credit/name)
-#: C/geolocation-what-is.page:18(credit/name)
-#: C/group-conversations.page:19(credit/name)
-#: C/hide-contacts.page:11(credit/name) C/import-account.page:23(credit/name)
-#: C/introduction.page:13(credit/name) C/irc-commands.page:10(credit/name)
-#: C/irc-join-pwd.page:17(credit/name) C/irc-join-room.page:16(credit/name)
-#: C/irc-manage.page:19(credit/name) C/irc-nick-password.page:18(credit/name)
-#: C/irc-send-file.page:16(credit/name)
-#: C/irc-start-conversation.page:15(credit/name)
-#: C/link-contacts.page:15(credit/name) C/prev-conv.page:17(credit/name)
-#: C/prob-conn-acctdisabled.page:19(credit/name)
-#: C/prob-conn-auth.page:21(credit/name) C/prob-conn-name.page:18(credit/name)
-#: C/prob-conn-neterror.page:19(credit/name)
-#: C/remove-account.page:19(credit/name) C/salut-protocol.page:18(credit/name)
-#: C/send-file.page:21(credit/name) C/set-custom-status.page:19(credit/name)
-#: C/share-desktop.page:14(credit/name) C/status-icons.page:16(credit/name)
-#: C/video-call.page:22(credit/name)
-msgid "Milo Casagrande"
-msgstr "Milo Casagrande"
-
-#: C/index.page:23(license/p) C/account-irc.page:20(license/p)
-#: C/account-jabber.page:18(license/p) C/accounts-window.page:22(license/p)
-#: C/add-account.page:29(license/p) C/add-contact.page:22(license/p)
-#: C/audio-call.page:23(license/p) C/audio-video.page:21(license/p)
-#: C/change-status.page:28(license/p) C/create-account.page:23(license/p)
-#: C/disable-account.page:29(license/p) C/favorite-rooms.page:18(license/p)
-#: C/geolocation.page:21(license/p)
-#: C/geolocation-not-showing.page:21(license/p)
-#: C/geolocation-privacy.page:21(license/p)
-#: C/geolocation-supported.page:20(license/p)
-#: C/geolocation-turn.page:22(license/p)
-#: C/geolocation-what-is.page:22(license/p)
-#: C/group-conversations.page:23(license/p) C/hide-contacts.page:15(license/p)
-#: C/import-account.page:31(license/p) C/introduction.page:17(license/p)
-#: C/irc-commands.page:14(license/p) C/irc-join-pwd.page:21(license/p)
-#: C/irc-join-room.page:20(license/p) C/irc-manage.page:28(license/p)
-#: C/irc-nick-password.page:22(license/p) C/irc-send-file.page:20(license/p)
-#: C/irc-start-conversation.page:19(license/p)
-#: C/link-contacts.page:19(license/p) C/overview.page:20(license/p)
-#: C/prev-conv.page:25(license/p) C/prob-conn-acctdisabled.page:23(license/p)
-#: C/prob-conn-auth.page:25(license/p) C/prob-conn-name.page:22(license/p)
-#: C/prob-conn-neterror.page:23(license/p) C/prob-conn.page:18(license/p)
-#: C/remove-account.page:23(license/p) C/salut-protocol.page:22(license/p)
-#: C/send-file.page:25(license/p) C/send-message.page:21(license/p)
-#: C/set-custom-status.page:23(license/p) C/share-desktop.page:22(license/p)
-#: C/status-icons.page:24(license/p) C/video-call.page:26(license/p)
-msgid "Creative Commons Share Alike 3.0"
-msgstr ""
-"Creative Commons Paternité - Partage des Conditions Initiales à l'Identique "
-"3.0"
-
-#: C/index.page:27(page/title)
-msgid ""
-"<media type=\"image\" mime=\"image/png\" src=\"figures/empathy-logo.png\"> "
-"Empathy Internet Messenger logo </media> Empathy Internet Messenger"
-msgstr ""
-"<media type=\"image\" mime=\"image/png\" src=\"figures/empathy-logo.png\"> "
-"Logo de la messagerie instantanée Empathy </media> Messagerie instantanée "
-"Empathy"
-
-#: C/index.page:35(section/title)
-msgid "Account Management"
-msgstr "Gestion du compte"
-
-#: C/index.page:39(section/title)
-msgid "Contact Management"
-msgstr "Gestion des contacts"
-
-#: C/index.page:43(section/title)
-msgid "Text Conversations"
-msgstr "Conversations en mode texte"
-
-#: C/index.page:47(section/title)
-msgid "Audio and Video Conversations"
-msgstr "Conversations audio et vidéo"
-
-#: C/index.page:51(section/title)
-msgid "Advanced Actions"
-msgstr "Actions avancées"
-
-#: C/index.page:55(section/title) C/irc-manage.page:64(section/title)
-msgid "Common Problems"
-msgstr "Problèmes courants"
-
-#. This is a reference to an external file such as an image or video. When
-#. the file changes, the md5 hash will change to let you know you need to
-#. update your localized copy. The msgstr is not used at all. Set it to
-#. whatever you like once you have updated your copy of the file.
-#: C/account-irc.page:106(media)
-msgctxt "_"
-msgid ""
-"external ref='figures/gtk-add.png' md5='a856b499d8d4681b70b5ce6f25bc5c6d'"
-msgstr ""
-"external ref='figures/gtk-add.png' md5='a856b499d8d4681b70b5ce6f25bc5c6d'"
-
-#. This is a reference to an external file such as an image or video. When
-#. the file changes, the md5 hash will change to let you know you need to
-#. update your localized copy. The msgstr is not used at all. Set it to
-#. whatever you like once you have updated your copy of the file.
-#.
-#. This is a reference to an external file such as an image or video. When
-#. the file changes, the md5 hash will change to let you know you need to
-#. update your localized copy. The msgstr is not used at all. Set it to
-#. whatever you like once you have updated your copy of the file.
-#.
-#. This is a reference to an external file such as an image or video. When
-#. the file changes, the md5 hash will change to let you know you need to
-#. update your localized copy. The msgstr is not used at all. Set it to
-#. whatever you like once you have updated your copy of the file.
-#.
-#. This is a reference to an external file such as an image or video. When
-#. the file changes, the md5 hash will change to let you know you need to
-#. update your localized copy. The msgstr is not used at all. Set it to
-#. whatever you like once you have updated your copy of the file.
-#: C/account-irc.page:109(media) C/prob-conn-auth.page:58(media)
-#: C/prob-conn-name.page:44(media) C/prob-conn-neterror.page:59(media)
-msgctxt "_"
-msgid ""
-"external ref='figures/gtk-edit.png' md5='4f21b451732817be0604fe3e2c8da98b'"
-msgstr ""
-"external ref='figures/gtk-edit.png' md5='4f21b451732817be0604fe3e2c8da98b'"
-
-#. This is a reference to an external file such as an image or video. When
-#. the file changes, the md5 hash will change to let you know you need to
-#. update your localized copy. The msgstr is not used at all. Set it to
-#. whatever you like once you have updated your copy of the file.
-#: C/account-irc.page:112(media)
-msgctxt "_"
-msgid ""
-"external ref='figures/gtk-remove.png' md5='215e3a325a3dd619874e35c30a018bb6'"
-msgstr ""
-"external ref='figures/gtk-remove.png' md5='215e3a325a3dd619874e35c30a018bb6'"
-
-#: C/account-irc.page:8(info/desc)
-msgid "Additional information necessary for connecting to IRC networks."
-msgstr ""
-"Informations supplémentaires nécessaires pour se connecter aux réseaux IRC."
-
-#: C/account-irc.page:16(credit/name) C/account-jabber.page:14(credit/name)
-#: C/accounts-window.page:18(credit/name) C/add-account.page:25(credit/name)
-#: C/disable-account.page:25(credit/name)
-#: C/import-account.page:27(credit/name) C/prev-conv.page:21(credit/name)
-#: C/status-icons.page:20(credit/name)
-msgid "Shaun McCance"
-msgstr "Shaun McCance"
-
-#: C/account-irc.page:31(page/title)
-msgid "IRC account details"
-msgstr "Détails du compte IRC"
-
-# Alias = Nickname ? NON c'est différent (Bruno)
-#: C/account-irc.page:33(page/p)
-msgid ""
-"IRC accounts require different information than many other types of "
-"accounts. To create an IRC account, you must specify at least an IRC network "
-"and a nickname. This page details the information you can provide for an IRC "
-"account."
-msgstr ""
-"Les comptes IRC nécessitent des informations qui diffèrent beaucoup d'autres "
-"types de comptes. Pour créer un compte IRC, vous devez spécifier au moins un "
-"nom de réseau IRC et un pseudonyme. Cette page énumère les informations que "
-"vous pouvez fournir pour un compte IRC."
-
-#: C/account-irc.page:39(note/p) C/irc-manage.page:42(note/p)
-msgid ""
-"You must have the <sys>telepathy-idle</sys> package installed to use IRC in "
-"<app>Empathy</app>."
-msgstr ""
-"Vous devez avoir installé le paquet <sys>telepathy-idle</sys> pour pouvoir "
-"utiliser IRC avec <app>Empathy</app>."
-
-#: C/account-irc.page:45(item/title) C/account-irc.page:120(item/title)
-msgid "<gui>Network</gui>"
-msgstr "<gui>Réseau</gui>"
-
-#: C/account-irc.page:46(item/p)
-msgid ""
-"IRC is an open system that allows people to run separate IRC networks. Each "
-"network is distinct and has its own users and chat rooms. <app>Empathy</app> "
-"lists the most popular networks in the <gui>Network</gui> drop-down list. "
-"You can add additional networks. See <link xref=\"#networks\"/> below."
-msgstr ""
-"IRC est un système ouvert qui permet aux utilisateurs de faire fonctionner "
-"des réseaux IRC séparés. Chaque réseau est distinct et possède ses propres "
-"utilisateurs et salons de discussions. <app>Empathy</app> dresse une liste "
-"des réseaux les plus populaires dans la liste déroulante <gui>Réseaux</gui>. "
-"Vous pouvez ajouter des réseaux supplémentaires. Consultez <link xref="
-"\"#networks\"/> ci-dessous."
-
-#: C/account-irc.page:53(item/title)
-msgid "<gui>Nickname</gui>"
-msgstr "<gui>Pseudonyme</gui>"
-
-#: C/account-irc.page:54(item/p)
-msgid ""
-"Your nickname is your unique name on the IRC network. Only one person on a "
-"network may use a given nickname. If you get an error message that says "
-"<link xref=\"prob-conn-name\" role=\"error-msg\"/> you will need to change "
-"your nickname."
-msgstr ""
-"Votre pseudonyme est votre unique nom sur le réseau IRC. Un pseudonyme donné "
-"ne peut être utilisé que par une seule personne sur un même réseau. Si vous "
-"voyez apparaître ce message d'erreur <link xref=\"prob-conn-name\" role="
-"\"error-msg\"/>, c'est que vous devez changer de pseudonyme."
-
-#: C/account-irc.page:60(item/title)
-msgid "<gui>Password</gui>"
-msgstr "<gui>Mot de passe</gui>"
-
-#: C/account-irc.page:61(item/p)
-msgid ""
-"Some servers, particularly those on private networks, require a password to "
-"connect. If you are authorized to use the network, the network "
-"administrators should provide you with a password."
-msgstr ""
-"Quelques serveurs, en particulier ceux des réseau privés, nécessitent un mot "
-"de passe pour vous y connecter. Si vous êtes autorisé à utiliser le réseau, "
-"son administrateur doit vous fournir un mot de passe."
-
-#: C/account-irc.page:65(note/title)
-msgid "NickServ Passwords"
-msgstr "Mots de passe NickServ"
-
-#: C/account-irc.page:66(note/p)
-msgid ""
-"On some networks, nicknames can be registered using a service known as "
-"NickServ. <app>Empathy</app> does not directly support nickname passwords. "
-"On some networks, including the popular freenode network, server passwords "
-"are automatically forwarded to NickServ, allowing you to set this field to "
-"identify yourself with NickServ. See <link xref=\"irc-nick-password\"/> for "
-"more details."
-msgstr ""
-"Sur certains réseaux, les pseudonymes peuvent être enregistrés en utilisant "
-"un service nommé NickServ. <app>Empathy</app> ne prend pas directement en "
-"charge les mots de passe de pseudonyme. Sur certains réseaux, incluant le "
-"populaire Freenode, les mots de passe du serveur sont automatiquement "
-"transférés vers NickServ, vous permettant ainsi de vous authentifier. "
-"Consultez <link xref=\"irc-nick-password\"/> pour plus de détails."
-
-#: C/account-irc.page:76(item/title)
-msgid "<gui>Real name</gui>"
-msgstr "<gui>Nom réel</gui>"
-
-#: C/account-irc.page:77(item/p)
-msgid ""
-"You can provide your real name in addition to your nickname. Other users "
-"will be able to see this when they view your information."
-msgstr ""
-"Vous pouvez fournir votre vrai nom en plus de votre pseudonyme. Les autres "
-"utilisateurs peuvent ainsi le voir lorsqu'ils affichent vos informations."
-
-#: C/account-irc.page:81(item/title)
-msgid "<gui>Quit message</gui>"
-msgstr "<gui>Message de départ</gui>"
-
-#: C/account-irc.page:82(item/p)
-msgid ""
-"When you go offline, a quit message is sent to all the chat rooms you’re in "
-"and to all the users you’re having a private conversation with. Use this "
-"field to provide a custom quit message."
-msgstr ""
-"Lorsque vous vous déconnectez, un message de départ est envoyé dans tous les "
-"salons de discussion où vous êtes présent et à tous les utilisateurs avec "
-"qui vous êtes en conversation. Renseignez ce champ pour personnaliser votre "
-"message de déconnexion."
-
-#: C/account-irc.page:94(info/title)
-msgctxt "link"
-msgid "IRC Networks"
-msgstr "Réseaux IRC"
-
-#: C/account-irc.page:97(section/title)
-msgid "Networks"
-msgstr "Réseaux"
-
-#: C/account-irc.page:99(section/p)
-msgid ""
-"<app>Empathy</app> includes a list of popular IRC networks. If you wish to "
-"another IRC network, you can add it to the list. You can also modify "
-"networks and remove them from the list."
-msgstr ""
-"<app>Empathy</app> comprend une liste des réseaux IRC les plus populaires. "
-"Si vous souhaitez vous connecter à un autre réseau IRC, vous pouvez "
-"l'ajouter à la liste. Vous pouvez aussi modifier les réseaux existants et "
-"les supprimer de la liste."
-
-#: C/account-irc.page:104(item/p)
-msgid ""
-"To add a network to the list, click <media type=\"image\" mime=\"image/png\" "
-"src=\"figures/gtk-add.png\" width=\"16\" height=\"16\">Add</media>."
-msgstr ""
-"Pour ajouter un réseau à la liste, cliquez sur <media type=\"image\" mime="
-"\"image/png\" src=\"figures/gtk-add.png\" width=\"16\" height="
-"\"16\">Ajouter</media>."
-
-#: C/account-irc.page:107(item/p)
-msgid ""
-"To modify a network in the list, select the network and click <media type="
-"\"image\" mime=\"image/png\" src=\"figures/gtk-edit.png\" width=\"16\" "
-"height=\"16\">Edit</media>."
-msgstr ""
-"Pour modifier un réseau de la liste, sélectionnez le réseau et cliquez sur "
-"<media type=\"image\" mime=\"image/png\" src=\"figures/gtk-edit.png\" width="
-"\"16\" height=\"16\">Modifier</media>."
-
-#: C/account-irc.page:110(item/p)
-msgid ""
-"To remove a network from the list, select the network and click <media type="
-"\"image\" mime=\"image/png\" src=\"figures/gtk-remove.png\" width=\"16\" "
-"height=\"16\">Remove</media>."
-msgstr ""
-"Pour supprimer un réseau de la liste, sélectionnez le réseau et cliquez sur "
-"<media type=\"image\" mime=\"image/png\" src=\"figures/gtk-remove.png\" "
-"width=\"16\" height=\"16\">Supprimer</media>."
-
-#: C/account-irc.page:115(section/p)
-msgid ""
-"When adding or modifying a network, you can enter the following information:"
-msgstr ""
-"Lorsque vous ajoutez ou modifiez un réseau, vous pouvez saisir les "
-"informations suivantes :"
-
-#: C/account-irc.page:121(item/p)
-msgid ""
-"This is the name of the network as you want it to appear in the list of "
-"networks."
-msgstr ""
-"C'est le nom du réseau tel que vous voulez qu'il apparaisse dans la liste "
-"des réseaux."
-
-#: C/account-irc.page:125(item/title)
-msgid "<gui>Charset</gui>"
-msgstr "<gui>Codage de caractères</gui>"
-
-#: C/account-irc.page:126(item/p)
-msgid ""
-"This specifies the character encoding that is typically used on this "
-"network. A character encoding is a specific way of recording characters "
-"internally in a computer. There are many character encodings, and you need "
-"to use the same character encoding as other users to see their messages "
-"correctly."
-msgstr ""
-"Ceci définit le codage de caractères qui est généralement utilisé sur ce "
-"réseau. Un codage de caractères est une façon spécifique d'enregistrer les "
-"caractères dans un ordinateur. Il existe de nombreux codages de caractères "
-"et vous devez utiliser le même que ceux des autres utilisateurs pour pouvoir "
-"afficher leurs messages correctement."
-
-#: C/account-irc.page:135(item/p)
-msgid ""
-"By default, <app>Empathy</app> uses UTF-8, a modern character encoding that "
-"can handle text from most of the world's languages. Another common encoding "
-"for English and some other Western languages is ISO-8859-1."
-msgstr ""
-"Par défaut, <app>Empathy</app> utilise l'UTF-8, un codage de caractères "
-"moderne qui peut traiter le texte de la plupart des langues du monde. Un "
-"autre codage commun pour l'anglais et quelques autres langues occidentales "
-"est le codage ISO-8859-1."
-
-#: C/account-irc.page:141(item/title)
-msgid "<gui>Servers</gui>"
-msgstr "<gui>Serveurs</gui>"
-
-#: C/account-irc.page:142(item/p)
-msgid ""
-"An IRC network may have many servers you can connect to. When you are "
-"connected to a server on a particular network, you can communicate with all "
-"users on all other servers on that network. You can add and remove servers "
-"for this network using the <gui>Add</gui> and <gui>Remove</gui> buttons."
-msgstr ""
-"Un réseau IRC peut avoir plusieurs serveurs auxquels vous pouvez vous "
-"connecter. Lorsque vous êtes connecté à un serveur sur un réseau en "
-"particulier, vous pouvez communiquer avec tous les utilisateurs de tous les "
-"autres serveurs sur ce réseau. Vous pouvez ajouter et enlever des serveurs "
-"de ce réseau avec les boutons <gui>Ajouter</gui> et <gui>Enlever</gui>."
-
-#: C/account-irc.page:147(item/p)
-msgid ""
-"When a server is selected, click the field under <gui>Server</gui> or "
-"<gui>Port</gui> to edit it. Alternatively, use the left and right arrow keys "
-"to focus the field, and press the space bar to begin editing."
-msgstr ""
-"Lorsqu'un serveur est sélectionné, cliquez sur le champ au-dessous de "
-"<gui>Serveur</gui> ou <gui>Port</gui> pour le modifier. Vous pouvez aussi "
-"utiliser les flèches droite et gauche pour sélectionner le champ et ensuite "
-"appuyer sur la barre d'espace pour commencer l'édition."
-
-#: C/account-irc.page:151(item/p)
-msgid ""
-"Select the check box in the <gui>SSL</gui> column to encrypt all "
-"communication with a server. Note that this does not prevent other users on "
-"the network from seeing what you write on public chat rooms."
-msgstr ""
-"Sélectionnez la case à cocher dans la colonne <gui>SSL</gui> pour chiffrer "
-"toutes les communications avec un serveur. Il est à noter que ceci n'empêche "
-"pas les autres utilisateurs de voir ce que vous écrivez dans les salons de "
-"discussion publics."
-
-#: C/account-jabber.page:7(info/desc)
-msgid "Advanced options for Jabber and Google Talk accounts."
-msgstr "Options avancées pour les comptes Jabber et Google Talk."
-
-#: C/account-jabber.page:29(page/title)
-msgid "Jabber account details"
-msgstr "Détails du compte Jabber"
-
-#: C/account-jabber.page:31(page/p)
-msgid ""
-"Most Jabber accounts will require only a login ID and a password to connect. "
-"For some accounts or on certain types of networks, you may need to enter "
-"additional information in the <gui>Advanced</gui> section. Normally, you "
-"will not need to use the advanced options below. For general instructions on "
-"adding an account, see <link xref=\"add-account\"/>."
-msgstr ""
-"La plupart des comptes Jabber n'ont besoin que d'un identifiant de connexion "
-"et d'un mot de passe pour se connecter. Pour certains comptes ou sur "
-"certains types de réseaux, il vous faudra peut-être saisir des informations "
-"supplémentaires dans la section <gui>Avancé</gui>. Normalement, vous n'avez "
-"pas à utiliser les options avancées ci-dessous. Pour des instructions "
-"générales sur la façon d'ajouter un compte, consultez <link xref=\"add-"
-"account\"/>."
-
-#: C/account-jabber.page:39(note/p)
-msgid ""
-"Google Talk is a type of Jabber account. These instructions hold for Google "
-"Talk accounts as well."
-msgstr ""
-"Google Talk est un type de compte Jabber. Ces instructions sont donc aussi "
-"valables pour les comptes Google Talk."
-
-#: C/account-jabber.page:45(item/title)
-msgid "<gui>Encryption required (TLS/SSL)</gui>"
-msgstr "<gui>Chiffrement requis (TLS/SSL)</gui>"
-
-#: C/account-jabber.page:46(item/title)
-msgid "<gui>Ignore SSL certificate errors</gui>"
-msgstr "<gui>Ignorer les erreurs de certificat SSL</gui>"
-
-#: C/account-jabber.page:47(item/p)
-msgid ""
-"Whenever possible, communication between <app>Empathy</app> and the Jabber "
-"server is encrypted. If encrypted communication is not possible, messages "
-"may be sent unencrypted. Select <gui>Encryption required</gui> to prevent "
-"<app>Empathy</app> from communicating with the Jabber server when encryption "
-"is not possible."
-msgstr ""
-"Chaque fois que possible, la communication entre <app>Empathy</app> et le "
-"serveur Jabber est chiffrée. Si le chiffrement n'est pas possible, le "
-"message sera envoyé en clair. Sélectionnez <gui>Chiffrement requis</gui> "
-"pour empêcher <app>Empathy</app> de communiquer avec le serveur Jabber "
-"lorsque le chiffrement n'est pas possible."
-
-#: C/account-jabber.page:52(item/p)
-msgid ""
-"Some Jabber servers may encrypt data using invalid certificates, or using "
-"certificates from unknown authorities. If you trust the server you are "
-"connecting to, you can select <gui>Ignore SSL certificate errors</gui> to "
-"allow encrypted communication with invalid certificates."
-msgstr ""
-"Certains serveurs Jabber peuvent chiffrer les données en utilisant des "
-"certificats non valides ou provenant d'autorités non reconnues. Si vous "
-"faites confiance au serveur sur lequel vous êtes connecté, vous pouvez "
-"sélectionner <gui>Ignorer les erreurs de certificat SSL</gui> pour autoriser "
-"les communications chiffrées avec des certificats non valides."
-
-#: C/account-jabber.page:59(item/title)
-msgid "<gui>Resource</gui>"
-msgstr "<gui>Ressource</gui>"
-
-#: C/account-jabber.page:60(item/title)
-msgid "<gui>Priority</gui>"
-msgstr "<gui>Priorité</gui>"
-
-#: C/account-jabber.page:61(item/p)
-msgid ""
-"If you have multiple applications (for instance, on separate computers) "
-"connected to your account at the same time, you can set a resource to "
-"uniquely identify each one. By default, <app>Empathy</app> will use "
-"<input>Telepathy</input> as the resource."
-msgstr ""
-"Si vous avez plusieurs applications (par exemple à partir d'ordinateurs "
-"différents) connectées à votre compte en même temps, vous pouvez définir une "
-"ressource pour identifier chacune d'elles. Par défaut, <app>Empathy</app> "
-"utilise <input>Telepathy</input> en tant que ressource."
-
-#: C/account-jabber.page:65(item/p)
-msgid ""
-"You can set the priority to specify which application should receive "
-"incoming messages from your contacts. New messages will be sent to the "
-"application with the highest priority."
-msgstr ""
-"Vous pouvez définir la priorité pour spécifier quelle application doit "
-"recevoir les messages entrants de vos contacts. Les nouveaux messages sont "
-"envoyés à l'application possédant la plus haute priorité."
-
-#: C/account-jabber.page:70(item/title)
-msgid "<gui>Override server settings</gui>"
-msgstr "<gui>Outrepasser les paramètres du serveur</gui>"
-
-#: C/account-jabber.page:71(item/p)
-msgid ""
-"<app>Empathy</app> will use default settings to connect to the Jabber server "
-"based on your login ID. For some Jabber servers, you will need to enter "
-"custom server settings manually. These settings should be provided for you "
-"by your Jabber provider."
-msgstr ""
-"<app>Empathy</app> utilise les paramètres par défaut pour se connecter au "
-"serveur Jabber selon vos informations de connexions. Pour certains serveurs "
-"Jabber, vous devez saisir manuellement des paramètres personnalisés. Ces "
-"paramètres doivent vous être remis par votre fournisseur Jabber."
-
-#: C/accounts-window.page:11(info/desc)
-msgid "Add, modify, and delete accounts."
-msgstr "Ajouter, modifier et supprimer des comptes."
-
-#: C/accounts-window.page:33(page/title)
-msgid "Accounts Window"
-msgstr "Fenêtre des comptes"
-
-#: C/accounts-window.page:35(page/p)
-msgid ""
-"The <gui>Accounts</gui> window allows you to add, modify, and delete "
-"accounts."
-msgstr ""
-"La fenêtre des <gui>Comptes</gui> vous permet d'ajouter, de modifier et de "
-"supprimer des comptes."
-
-#: C/accounts-window.page:43(section/title)
-msgid "Account Details"
-msgstr "Détails du compte"
-
-#: C/accounts-window.page:44(section/p)
-msgid ""
-"For most types of accounts, you can simply enter a login ID and a password. "
-"Certain accounts or account types, however, may require additional "
-"information."
-msgstr ""
-"Pour la plupart des types de comptes, la saisie d'un identifiant de "
-"connexion et d'un mot de passe suffit. Cependant, certains comptes ou types "
-"de comptes nécessitent des informations supplémentaires."
-
-#: C/add-account.page:9(info/desc)
-msgid "Add a new account to <app>Empathy</app>."
-msgstr "Ajouter un nouveau compte à <app>Empathy</app>."
-
-#: C/add-account.page:40(page/title)
-msgid "Add a new account"
-msgstr "Ajout d'un nouveau compte"
-
-#: C/add-account.page:42(page/p)
-msgid ""
-"You can add instant messaging accounts from any supported service to "
-"communicate with all of your contacts in <app>Empathy</app>. For some "
-"account providers, these steps will also allow you to register for a new "
-"account. For more details, see <link xref=\"create-account\"/>."
-msgstr ""
-"Vous pouvez ajouter des comptes de messagerie instantanée à partir de "
-"n'importe quel service pris en charge pour communiquer avec tous vos "
-"contacts dans <app>Empathy</app>. Pour certains fournisseurs de comptes, ces "
-"étapes vous permettent aussi d'enregistrer un nouveau compte. Pour plus de "
-"détails, consultez <link xref=\"create-account\"/>."
-
-#: C/add-account.page:49(item/p) C/disable-account.page:49(item/p)
-#: C/irc-nick-password.page:50(item/p) C/remove-account.page:43(item/p)
-msgid ""
-"From the <gui>Contact List</gui> window, choose <guiseq><gui>Edit</gui> "
-"<gui>Accounts</gui></guiseq>, or press <key>F4</key>."
-msgstr ""
-"À partir de la fenêtre <gui>Liste des contacts</gui>, choisissez "
-"<guiseq><gui>Édition</gui> <gui>Comptes</gui></guiseq>, ou appuyez sur "
-"<key>F4</key>."
-
-#: C/add-account.page:53(item/p)
-msgid "Click <gui style=\"button\">+</gui>."
-msgstr "Cliquez sur <gui style=\"button\">+</gui>."
-
-#: C/add-account.page:58(item/p)
-msgid ""
-"From the <gui>Protocol</gui> drop-down list, select the type of account you "
-"wish to add."
-msgstr ""
-"À partir de la liste déroulante <gui>Protocole</gui>, sélectionnez le type "
-"de compte que vous souhaitez ajouter."
-
-#: C/add-account.page:62(item/p)
-msgid ""
-"If you do not already have a registered account, select <gui>Create a new "
-"account on the server</gui>. This feature is not available for all account "
-"types, and may not work with some account providers. See <link xref=\"create-"
-"account\"/> for more information."
-msgstr ""
-"Si vous n'avez pas encore de compte enregistré, sélectionnez <gui>Créer un "
-"nouveau compte sur le serveur</gui>. Cette fonction n'est pas disponible "
-"pour tous les types de compte et peut ne pas fonctionner avec certains "
-"fournisseurs de comptes. Consultez <link xref=\"create-account\"/> pour plus "
-"d'informations."
-
-#: C/add-account.page:69(item/p)
-msgid ""
-"Enter the required information. For most accounts, you will only need a "
-"login ID and a password. Some accounts may require additional information. "
-"See <link xref=\"accounts-window#details\"/>for more information."
-msgstr ""
-"Saisissez les informations requises. Pour la plupart des comptes, vous "
-"n'avez besoin que d'un identifiant de connexion et d'un mot de passe. "
-"D'autres comptes peuvent demander plus d'informations. Consultez <link xref="
-"\"accounts-window#details\"/> pour plus d'informations."
-
-#: C/add-account.page:74(item/p) C/import-account.page:61(item/p)
-#: C/irc-nick-password.page:63(item/p)
-msgid "Click <gui style=\"button\">Apply</gui>."
-msgstr "Cliquez sur <gui style=\"button\">Appliquer</gui>."
-
-#: C/add-account.page:81(note/p)
-msgid ""
-"To change the name that identifies the account in the <gui>Accounts</gui> "
-"window, select the account from the list on the left and either click on the "
-"name or press the space bar. Edit the account name and press <key>Enter</"
-"key> when you’re finished."
-msgstr ""
-"Pour modifier le nom qui identifie le compte dans la fenêtre des "
-"<gui>Comptes</gui>, sélectionnez le compte à partir de la liste de gauche et "
-"cliquez sur le nom ou appuyez sur la barre d'espace. Modifiez le nom du "
-"compte et appuyez sur <key>Entrée</key> lorsque vous avez terminé."
-
-#: C/add-contact.page:9(info/desc)
-msgid "Add someone to the contact list."
-msgstr "Ajouter une personne à la liste des contacts."
-
-#: C/add-contact.page:18(credit/name) C/change-status.page:24(credit/name)
-#: C/prob-conn-acctdisabled.page:15(credit/name)
-#: C/prob-conn-auth.page:17(credit/name)
-#: C/prob-conn-neterror.page:15(credit/name) C/prob-conn.page:14(credit/name)
-#: C/send-file.page:17(credit/name) C/send-message.page:17(credit/name)
-msgid "Phil Bull"
-msgstr "Phil Bull"
-
-#: C/add-contact.page:33(page/title)
-msgid "Add someone to your list of contacts"
-msgstr "Ajout d'une personne à votre liste de contacts"
-
-#: C/add-contact.page:37(item/p)
-msgid "Choose <guiseq><gui>Chat</gui><gui>Add Contact</gui></guiseq>."
-msgstr ""
-"Sélectionnez <guiseq><gui>Discussion</gui><gui>Ajouter un contact</gui></"
-"guiseq>."
-
-#: C/add-contact.page:40(item/p)
-msgid ""
-"From the <gui>Account</gui> drop-down list, select the account you wish to "
-"use to connect to your contact. Your contact will need to be using the same "
-"service as the account you select."
-msgstr ""
-"À partir de la liste déroulante <gui>Compte</gui>, sélectionnez le compte "
-"que vous voulez utiliser pour vous connecter à votre contact. Votre contact "
-"doit utiliser le même service que celui que vous avez sélectionné."
-
-#: C/add-contact.page:45(item/p)
-msgid ""
-"In the <gui>Identifier</gui> field, enter your contact’s login ID, username, "
-"screen name, or other appropriate identifier for the service type."
-msgstr ""
-"Dans le champ <gui>Identifiant</gui>, saisissez l'identifiant de connexion "
-"de votre contact, son nom d'utilisateur, son pseudonyme ou tout autre "
-"identifiant approprié à ce type de service."
-
-#: C/add-contact.page:49(item/p)
-msgid ""
-"In the <gui>Alias</gui> field, type your contact’s name as you would like it "
-"to appear in your contact list."
-msgstr ""
-"Dans le champ <gui>Alias</gui>, saisissez le nom de votre contact tel que "
-"vous voulez le voir apparaître dans votre liste des contacts."
-
-#: C/add-contact.page:53(item/p)
-msgid "Click <gui>Add</gui> to add the person to your list of contacts."
-msgstr ""
-"Cliquez sur <gui>Ajouter</gui> pour ajouter cette personne à votre liste de "
-"contacts."
-
-#: C/add-contact.page:61(note/p)
-msgid ""
-"To add a new person to your list of contacts, you need to be connected to "
-"the Internet and to your account."
-msgstr ""
-"Pour ajouter une nouvelle personne à votre liste de contacts, vous devez "
-"être connecté à Internet et à votre compte."
-
-#. This is a reference to an external file such as an image or video. When
-#. the file changes, the md5 hash will change to let you know you need to
-#. update your localized copy. The msgstr is not used at all. Set it to
-#. whatever you like once you have updated your copy of the file.
-#.
-#. This is a reference to an external file such as an image or video. When
-#. the file changes, the md5 hash will change to let you know you need to
-#. update your localized copy. The msgstr is not used at all. Set it to
-#. whatever you like once you have updated your copy of the file.
-#.
-#. This is a reference to an external file such as an image or video. When
-#. the file changes, the md5 hash will change to let you know you need to
-#. update your localized copy. The msgstr is not used at all. Set it to
-#. whatever you like once you have updated your copy of the file.
-#: C/audio-call.page:36(media) C/audio-video.page:70(media)
-#: C/video-call.page:39(media)
-msgctxt "_"
-msgid ""
-"external ref='figures/camera-web.png' md5='8166b4372f25b78cbf5a64fe2eac2ce5'"
-msgstr ""
-"external ref='figures/camera-web.png' md5='8166b4372f25b78cbf5a64fe2eac2ce5'"
-
-#: C/audio-call.page:9(info/desc)
-msgid "Call your contacts over the Internet."
-msgstr "Appeler vos contacts sur Internet."
-
-#: C/audio-call.page:27(page/title)
-msgid "Start an audio conversation"
-msgstr "Démarrage d'une conversation audio"
-
-#: C/audio-call.page:29(page/p)
-msgid ""
-"You can call your contacts and have an audio conversation with them. This "
-"features only works with certain types of accounts, and it requires the "
-"other person to have an application that supports audio calls."
-msgstr ""
-"Vous pouvez appeler vos contacts et avoir une conversation audio avec eux. "
-"Cette option n'est disponible qu'avec certains types de comptes et il faut "
-"que l'autre personne possède une application compatible avec les appels "
-"audio."
-
-#: C/audio-call.page:34(item/p)
-msgid ""
-"From the <gui>Contact List</gui> window, click the <media type=\"image\" "
-"mime=\"image/png\" src=\"figures/camera-web.png\">video call</media> icon "
-"next to the name of the contact you wish to call and choose <gui style="
-"\"menuitem\">Audio Call</gui>."
-msgstr ""
-"Dans la fenêtre <gui>Liste des contacts</gui>, cliquez sur <media type="
-"\"image\" mime=\"image/png\" src=\"figures/camera-web.png\">appel vidéo</"
-"media> à côté du nom de la personne que vous souhaitez contacter et "
-"sélectionnez <gui style=\"menuitem\">Appel audio</gui>."
-
-#: C/audio-call.page:42(item/p) C/video-call.page:44(item/p)
-msgid ""
-"A new window will open. When the connection is established, you will see "
-"<gui>Connected</gui> at the bottom of the window, along with the total "
-"conversation time."
-msgstr ""
-"Une nouvelle fenêtre s'ouvre. Lorsque la connexion est établie, vous voyez "
-"s'afficher <gui>Connecté</gui> au bas de la fenêtre, à côté du temps de "
-"conversation total."
-
-#: C/audio-call.page:48(item/p) C/video-call.page:49(item/p)
-msgid "To end the conversation, click on <gui style=\"button\">Hang up</gui>."
-msgstr ""
-"Pour mettre fin à la conversation, cliquez sur <gui style=\"button"
-"\">Raccrocher</gui>."
-
-#: C/audio-call.page:55(note/p)
-msgid ""
-"To turn an audio conversation into a video conversation, choose <guiseq><gui "
-"style=\"menu\">Video</gui> <gui style=\"menuitem\">Video On</gui></guiseq>."
-msgstr ""
-"Pour passer d'une conversation audio à une conversation vidéo, sélectionnez "
-"<guiseq><gui style=\"menu\">Vidéo</gui> <gui style=\"menuitem\">Vidéo "
-"activée</gui></guiseq>."
-
-#: C/audio-call.page:63(section/title)
-msgid "Start an audio conversation with a meta-contact"
-msgstr "Démarrage d'une conversation audio avec un méta-contact"
-
-# meta-contact
-#: C/audio-call.page:66(item/p) C/send-message.page:53(item/p)
-#: C/video-call.page:64(item/p)
-msgid ""
-"From the <gui>Contact List</gui> window, right-click on the meta-contact."
-msgstr ""
-"Dans la fenêtre <gui>Liste des contacts</gui>, faites un clic droit sur le "
-"méta-contact."
-
-#: C/audio-call.page:71(item/p)
-msgid ""
-"Select the contact you want to have the conversation, and from the menu "
-"select <gui style=\"menuitem\">Audio Call</gui>."
-msgstr ""
-"Sélectionnez le contact avec lequel vous voulez avoir une conversation et "
-"sélectionnez <gui style=\"menuitem\">Appel audio</gui> à partir du menu."
-
-#: C/audio-call.page:78(note/p) C/send-message.page:65(note/p)
-#: C/video-call.page:76(note/p)
-msgid ""
-"To recognize if a contact is a <em>meta-contact</em>, move your mouse on a "
-"contact in the <gui>Contact List</gui> window, and stop over it for a "
-"second: a small pop-up message will appear showing the number of the "
-"contacts that form the meta-contact."
-msgstr ""
-"Pour savoir si un contact est un <em>méta-contact</em>, placez le curseur de "
-"votre souris sur un contact dans votre fenêtre <gui>Liste des contacts</gui> "
-"et attendez pendant environ une seconde : un petit message indiquant le "
-"nombre de contacts composant le méta-contact apparaît."
-
-#. This is a reference to an external file such as an image or video. When
-#. the file changes, the md5 hash will change to let you know you need to
-#. update your localized copy. The msgstr is not used at all. Set it to
-#. whatever you like once you have updated your copy of the file.
-#: C/audio-video.page:58(media)
-msgctxt "_"
-msgid ""
-"external ref='figures/audio-input-microphone.png' "
-"md5='8d89026b66a263a3bc5b1f0665948567'"
-msgstr ""
-"external ref='figures/audio-input-microphone.png' "
-"md5='8d89026b66a263a3bc5b1f0665948567'"
-
-#: C/audio-video.page:8(info/desc)
-msgid ""
-"Information on when it is possible to have an audio or video conversation."
-msgstr ""
-"Information pour savoir quand il est possible d'avoir une conversation audio "
-"ou vidéo."
-
-#: C/audio-video.page:32(page/title)
-msgid "Audio and video support"
-msgstr "Prise en charge audio et vidéo"
-
-#: C/audio-video.page:34(page/p)
-msgid ""
-"You can only have audio and video conversation with contacts who are using "
-"an application which also supports this feature. When your contacts support "
-"audio or video conversations, you will see the following icons next to their "
-"names in the contact list:"
-msgstr ""
-"Vous ne pouvez avoir des conversations audio et vidéo qu'avec des contacts "
-"qui utilisent une application prenant aussi en charge cette fonction. "
-"Lorsque c'est le cas, les icônes suivantes s'affichent à côté de leur nom "
-"dans la liste des contacts :"
-
-#: C/audio-video.page:43(td/p)
-msgid "Icon"
-msgstr "Icône"
-
-#: C/audio-video.page:48(td/p)
-msgid "Description"
-msgstr "Description"
-
-#: C/audio-video.page:57(td/p)
-msgid ""
-"<media type=\"image\" mime=\"image/png\" src=\"figures/audio-input-"
-"microphone.png\"> Icon for audio conversation </media>"
-msgstr ""
-"<media type=\"image\" mime=\"image/png\" src=\"figures/audio-input-"
-"microphone.png\"> Icône de conversation audio </media>"
-
-#: C/audio-video.page:64(td/p)
-msgid "The contact is able to have an audio conversation."
-msgstr "Le contact est en mesure d'avoir une conversation audio."
-
-#: C/audio-video.page:69(td/p)
-msgid ""
-"<media type=\"image\" mime=\"image/png\" src=\"figures/camera-web.png\"> "
-"Icon for video conversation </media>"
-msgstr ""
-"<media type=\"image\" mime=\"image/png\" src=\"figures/camera-web.png\"> "
-"Icône de conversation vidéo </media>"
-
-#: C/audio-video.page:76(td/p)
-msgid "The contact is able to have a video conversation."
-msgstr "Le contact est en mesure d'avoir une conversation vidéo."
-
-# Est ce nécessaire d'indiquer que le microphone doit être fonctionnel?
-#: C/audio-video.page:83(note/p)
-msgid ""
-"In order to have an audio conversation, you need to have a sound card that "
-"is supported by your operating system, and a working microphone."
-msgstr ""
-"Pour avoir une conversation audio, il vous faut une carte son prise en "
-"charge par votre système d'exploitation et un microphone opérationnel."
-
-# idem
-#: C/audio-video.page:87(note/p)
-msgid ""
-"In order to have a video conversation, you need to have a webcam that is "
-"supported by your operating system, and a working microphone."
-msgstr ""
-"Pour avoir une conversation vidéo, il vous faut une webcam prise en charge "
-"par votre système d'exploitation et un microphone opérationnel."
-
-#: C/audio-video.page:95(section/title)
-msgid "Supported Account Types"
-msgstr "Types de comptes pris en charge"
-
-# négation?
-#: C/audio-video.page:97(section/p)
-msgid ""
-"You can only have audio and video conversations using accounts on certain "
-"supported services. The following table lists whether audio and video is "
-"supported for each type of account."
-msgstr ""
-"Vous ne pouvez avoir des conversations audio et vidéo qu'avec les comptes de "
-"certains services pris en charge. Le tableau suivant indique si l'audio et "
-"la vidéo sont pris en charge pour chaque type de compte."
-
-#: C/audio-video.page:102(note/p)
-msgid ""
-"Account types are provided by plugins. Your system may not have all of the "
-"following types available, or it may have types not listed here. Updated "
-"plugins may make audio or video conversations possible on account types that "
-"are listed as unsupported here."
-msgstr ""
-"Les types de comptes sont fournis par des greffons. Il est possible que "
-"votre système n'ait pas tous les types suivants disponibles, ou il se peut "
-"que certains types ne soient pas présentés ici. La mise à jour des greffons "
-"peut permettre des conversations audio ou vidéo sur des types de comptes qui "
-"sont répertoriés ici comme incompatibles."
-
-#: C/audio-video.page:128(td/p)
-msgid "Service"
-msgstr "Service"
-
-#: C/audio-video.page:129(td/p)
-msgid "Audio"
-msgstr "Audio"
-
-#: C/audio-video.page:130(td/p)
-msgid "Video"
-msgstr "Vidéo"
-
-#: C/audio-video.page:135(td/p)
-msgid "AIM"
-msgstr "AIM"
-
-#: C/audio-video.page:136(td/p) C/audio-video.page:137(td/p)
-#: C/audio-video.page:141(td/p) C/audio-video.page:142(td/p)
-#: C/audio-video.page:146(td/p) C/audio-video.page:147(td/p)
-#: C/audio-video.page:156(td/p) C/audio-video.page:157(td/p)
-#: C/audio-video.page:161(td/p) C/audio-video.page:162(td/p)
-#: C/audio-video.page:166(td/p) C/audio-video.page:167(td/p)
-#: C/audio-video.page:181(td/p) C/audio-video.page:182(td/p)
-#: C/audio-video.page:186(td/p) C/audio-video.page:187(td/p)
-#: C/audio-video.page:191(td/p) C/audio-video.page:192(td/p)
-#: C/audio-video.page:196(td/p) C/audio-video.page:197(td/p)
-#: C/audio-video.page:201(td/p) C/audio-video.page:202(td/p)
-#: C/audio-video.page:211(td/p) C/audio-video.page:212(td/p)
-#: C/audio-video.page:216(td/p) C/audio-video.page:217(td/p)
-msgid "No"
-msgstr "Non"
-
-#: C/audio-video.page:140(td/p)
-msgid "Facebook Chat"
-msgstr "Discussion Facebook"
-
-#: C/audio-video.page:145(td/p)
-msgid "gadugadu"
-msgstr "gadugadu"
-
-#: C/audio-video.page:150(td/p)
-msgid "Google Talk"
-msgstr "Google Talk"
-
-#: C/audio-video.page:151(td/p) C/audio-video.page:152(td/p)
-#: C/audio-video.page:171(td/p) C/audio-video.page:172(td/p)
-#: C/audio-video.page:176(td/p) C/audio-video.page:177(td/p)
-#: C/audio-video.page:206(td/p) C/audio-video.page:207(td/p)
-msgid "Yes"
-msgstr "Oui"
-
-#: C/audio-video.page:155(td/p)
-msgid "Groupwise"
-msgstr "Groupwise"
-
-#: C/audio-video.page:160(td/p)
-msgid "ICQ"
-msgstr "ICQ"
-
-#: C/audio-video.page:165(td/p) C/create-account.page:107(section/title)
-msgid "IRC"
-msgstr "IRC"
-
-#: C/audio-video.page:170(td/p) C/create-account.page:60(section/title)
-msgid "Jabber"
-msgstr "Jabber"
-
-#: C/audio-video.page:175(td/p)
-msgid "MSN"
-msgstr "MSN"
-
-#: C/audio-video.page:180(td/p)
-msgid "myspace"
-msgstr "myspace"
-
-#: C/audio-video.page:185(td/p)
-msgid "qq"
-msgstr "qq"
-
-#: C/audio-video.page:190(td/p) C/create-account.page:78(section/title)
-msgid "People Nearby"
-msgstr "Personnes à proximité"
-
-# Type de compte?
-#: C/audio-video.page:195(td/p)
-msgid "sametime"
-msgstr "sametime"
-
-#: C/audio-video.page:200(td/p)
-msgid "silc"
-msgstr "silc"
-
-#: C/audio-video.page:205(td/p) C/create-account.page:89(section/title)
-msgid "SIP"
-msgstr "SIP"
-
-#: C/audio-video.page:210(td/p)
-msgid "Yahoo!"
-msgstr "Yahoo!"
-
-#: C/audio-video.page:215(td/p)
-msgid "zephyr"
-msgstr "zephyr"
-
-#: C/change-status.page:9(info/desc)
-msgid "Change your status to advertise your availability to your contacts."
-msgstr ""
-"Modifier votre état pour informer vos contacts sur votre disponibilité."
-
-#: C/change-status.page:39(page/title)
-msgid "Change your status"
-msgstr "Modification de votre état"
-
-#: C/change-status.page:41(page/p)
-msgid ""
-"You can set your status to indicate your availability to your contacts. "
-"<app>Empathy</app> allows you to select from a list of defined statuses."
-msgstr ""
-"Vous pouvez définir votre état pour informer vos contacts sur votre "
-"disponibilité. <app>Empathy</app> vous permet de choisir à partir d'une "
-"liste d'états prédéfinis."
-
-#: C/change-status.page:46(item/p)
-msgid ""
-"Click on the drop-down list at the top of the <gui>Contact List</gui> window."
-msgstr ""
-"Cliquez sur la liste déroulante en haut de la fenêtre <gui>Liste des "
-"contacts</gui>."
-
-#: C/change-status.page:51(item/p)
-msgid "Select a status from the list."
-msgstr "Sélectionnez un état dans la liste."
-
-#: C/change-status.page:57(page/p)
-msgid ""
-"See <link xref=\"status-icons\"/> for a list of the built-in statuses and "
-"what they mean. You can also <link xref=\"set-custom-status\">add custom "
-"status messages</link> to provide more information about your availability "
-"to your contacts."
-msgstr ""
-"Consultez <link xref=\"status-icons\"/> pour voir la liste des états "
-"prédéfinis et leur signification. Vous pouvez aussi <link xref=\"set-custom-"
-"status\">ajouter des états personnalisés</link> pour informer davantage vos "
-"contacts sur votre disponibilité."
-
-#: C/change-status.page:63(note/p)
-msgid ""
-"If you do not use your computer for a while, or if the screensaver is on, "
-"the status will be automatically set to Away."
-msgstr ""
-"Si vous n'utilisez pas votre ordinateur pendant un certain laps de temps, ou "
-"si l'économiseur d'écran est actif, votre état est automatiquement défini à "
-"Absent."
-
-#: C/create-account.page:9(info/desc)
-msgid "Register for an account with one of the supported messaging services."
-msgstr ""
-"Enregistrer un compte avec un des services de messagerie instantanée pris en "
-"charge."
-
-#: C/create-account.page:34(page/title)
-msgid "Register for a new account"
-msgstr "Enregistrement d'un nouveau compte"
-
-# types de compte(S) ??
-#: C/create-account.page:36(page/p)
-msgid ""
-"Most account types require you to create an account with a account provider "
-"before you can connect using instant messaging applications like "
-"<app>Empathy</app>. With some account providers, you can use <app>Empathy</"
-"app> to register for a new account, using the same steps as you would to "
-"<link xref=\"add-account\">add an account</link>."
-msgstr ""
-"Dans la plupart des cas, un compte doit être créé chez un fournisseur de "
-"compte avant de pouvoir vous connecter sur une application de messagerie "
-"instantanée comme <app>Empathy</app>. Avec certains fournisseurs de comptes, "
-"vous pouvez utiliser <app>Empathy</app> pour enregistrer un nouveau compte "
-"en suivant les mêmes étapes qu'en passant par <link xref=\"add-account"
-"\">Ajouter un compte</link>."
-
-#: C/create-account.page:42(page/p)
-msgid ""
-"This page provides information on creating a new account for various types "
-"of accounts. Your account provider should give you a login ID and a "
-"password, as well as any additional information you need to connect using "
-"<app>Empathy</app>."
-msgstr ""
-"Cette page vous informe sur la création d'un nouveau compte pour divers "
-"types de comptes. Votre fournisseur de compte doit vous fournir un "
-"identifiant de connexion et un mot de passe, ainsi que toutes les "
-"informations supplémentaires nécessaires pour vous connecter en utilisant "
-"<app>Empathy</app>."
-
-#: C/create-account.page:47(section/title)
-msgid "Facebook"
-msgstr "Facebook"
-
-#: C/create-account.page:48(section/p)
-msgid ""
-"Facebook is one of the most-used social networks. It allows users to create "
-"their own profile and to communicate with their friends."
-msgstr ""
-"Facebook est l'un des réseaux sociaux les plus utilisés. Il permet aux "
-"utilisateurs de créer leur propre profil et de communiquer avec leurs amis."
-
-#: C/create-account.page:52(section/p)
-msgid ""
-"To use Facebook to communicate with your friends, you will need to create a "
-"new account from the website: <link href=\"http://www.facebook.com\">www."
-"facebook.com</link>."
-msgstr ""
-"Pour communiquer avec vos amis en utilisant Facebook, vous devrez créer un "
-"nouveau compte sur leur site Web : <link href=\"http://www.facebook.com"
-"\">www.facebook.com</link>."
-
-#: C/create-account.page:62(section/p)
-msgid ""
-"Jabber is an open instant messaging system. Like email, Jabber allows you to "
-"choose your account provider and communicate with all other Jabber users, "
-"regardless of their account provider."
-msgstr ""
-"Jabber est un système de messagerie instantanée libre. Tout comme avec les "
-"courriels, Jabber vous permet de choisir votre fournisseur de compte et de "
-"communiquer avec tous les autres utilisateurs de Jabber, indépendamment de "
-"leur fournisseur de compte."
-
-#: C/create-account.page:66(section/p)
-msgid ""
-"You will need to create a new account with a Jabber provider. There are many "
-"free providers; one popular provider is <link href=\"http://register.jabber."
-"org/\">Jabber.org</link>."
-msgstr ""
-"Vous devez créer un nouveau compte avec un fournisseur Jabber. Il y a "
-"plusieurs fournisseurs gratuits ; un des plus populaires est <link href="
-"\"http://register.jabber.org/\">Jabber.org</link>."
-
-#: C/create-account.page:71(note/p)
-msgid ""
-"If you use Google Mail or Google Talk, you already have a Jabber account. "
-"Google Talk is a Jabber service. Simply use your Google Mail address and "
-"password in <app>Empathy</app> to connect."
-msgstr ""
-"Si vous utilisez Google Mail ou Google Talk, vous avez déjà un compte "
-"Jabber. Google Talk est un service Jabber. Utilisez simplement votre adresse "
-"Google Mail et son mot de passe associé dans <app>Empathy</app> pour vous y "
-"connecter."
-
-#: C/create-account.page:80(section/p)
-msgid ""
-"You do not need to create an account with a service provider to use this "
-"feature. This service works whenever you are connected to a local network, "
-"such as a wireless hotspot. It automatically finds all other users on the "
-"network who are also using this service."
-msgstr ""
-"Vous n'avez pas besoin de créer un compte avec un fournisseur de service "
-"pour utiliser cette fonctionnalité. Ce service fonctionne dès que vous êtes "
-"connecté à un réseau local, comme un réseau sans fil. Il trouve "
-"automatiquement les autres utilisateurs sur le réseau qui utilisent déjà ce "
-"service."
-
-#: C/create-account.page:85(section/p)
-msgid "For more information, see <link xref=\"salut-protocol\"/>."
-msgstr "Pour plus d'informations, consultez <link xref=\"salut-protocol\"/>."
-
-#: C/create-account.page:91(section/p)
-msgid ""
-"SIP is an open system which allows users to have audio and video "
-"conversations over the Internet. You need to create an account with a SIP "
-"provider. You can communicate with all other SIP users, regardless of which "
-"SIP provider they use."
-msgstr ""
-"SIP est un système libre qui permet aux utilisateurs d'avoir des "
-"conversations audio et vidéo par Internet. Vous devez créer un compte chez "
-"un fournisseur SIP. Vous pouvez communiquer avec tous les autres "
-"utilisateurs SIP, indépendamment du fournisseur SIP qu'ils utilisent."
-
-#: C/create-account.page:97(note/p)
-msgid ""
-"Due to technical differences, the free <link href=\"https://www.ekiga.net/"
-"index.php?page=register\">Ekiga.net</link> service does not currently work "
-"with <app>Empathy</app>."
-msgstr ""
-"En raison de différences techniques, le service gratuit <link href=\"https://"
-"www.ekiga.net/index.php?page=register\">Ekiga.net</link> ne fonctionne "
-"actuellement pas avec <app>Empathy</app>."
-
-#: C/create-account.page:102(section/p)
-msgid ""
-"Some SIP providers allow you to call normal phones from your computer. "
-"Generally, you will need to subscribe to a paid service for this feature."
-msgstr ""
-"Certains fournisseurs SIP vous permettent de faire des appels vers des "
-"téléphones fixes à partir de votre ordinateur. Généralement, vous devez "
-"souscrire à un service payant pour utiliser cette fonction."
-
-#: C/create-account.page:109(section/p)
-msgid ""
-"You do not need to register for an account to use IRC. Although you specify "
-"a nickname when you add an IRC account to <app>Empathy</app>, this nickname "
-"is only established each time you connect. If another user is using the "
-"nickname, you will need to choose a new nickname."
-msgstr ""
-"Vous n'avez pas besoin d'enregistrer un compte pour utiliser IRC. Même si "
-"vous devez spécifier un pseudonyme lorsque vous ajoutez un compte IRC sur "
-"<app>Empathy</app>, celui-ci n'est valide que pour la durée de la connexion. "
-"Si le même pseudonyme est déjà utilisé, vous devez en choisir un autre."
-
-#: C/create-account.page:114(section/p)
-msgid ""
-"Some IRC networks use a service called NickServ to allow users to protect "
-"their nicknames. See <link xref=\"irc-nick-password\"/> for more information."
-msgstr ""
-"Certains réseaux IRC utilisent un service appelé NickServ qui permet aux "
-"utilisateurs de protéger leurs pseudonymes. Consultez <link xref=\"irc-nick-"
-"password\"/> pour plus d'information."
-
-#: C/create-account.page:117(section/p)
-msgid ""
-"Some IRC servers are password protected. You will need to know the password "
-"to connect to these servers. Generally, these are private IRC networks."
-msgstr ""
-"Certains serveurs IRC sont protégés par mot de passe. Vous devez connaître "
-"ce mot de passe pour vous y connecter. En général, ce sont des réseaux IRC "
-"privés."
-
-#: C/create-account.page:122(section/title)
-msgid "Proprietary Services"
-msgstr "Services propriétaires"
-
-#: C/create-account.page:124(section/p)
-msgid ""
-"There are many proprietary instant messaging services that have been "
-"developed by different companies or organizations. <app>Empathy</app> allows "
-"you to connect to an existing account for most popular services. To create a "
-"new account with one of these services, you will need to visit the service’s "
-"web site and agree to its terms of use."
-msgstr ""
-"Il existe plusieurs services de messagerie instantanée propriétaires qui ont "
-"été développés par différentes sociétés ou organisations. <app>Empathy</app> "
-"vous permet de vous connecter à un compte existant pour la plupart des "
-"services. Pour créer un nouveau compte avec un de ces services, vous devez "
-"visiter le site Web du service et accepter ses conditions d'utilisation."
-
-#: C/create-account.page:132(item/p)
-msgid "<link href=\"http://dashboard.aim.com/aim\">AIM</link>"
-msgstr "<link href=\"http://dashboard.aim.com/aim\">AIM</link>"
-
-#: C/create-account.page:137(item/p)
-msgid "<link href=\"https://www.icq.com/register/\">ICQ</link>"
-msgstr "<link href=\"https://www.icq.com/register/\">ICQ</link>"
-
-#: C/create-account.page:142(item/p)
-msgid "<link href=\"https://accountservices.passport.net\">MSN</link>"
-msgstr "<link href=\"https://accountservices.passport.net\">MSN</link>"
-
-#: C/create-account.page:147(item/p)
-msgid "<link href=\"https://login.yahoo.com/config/login\">Yahoo!</link>"
-msgstr "<link href=\"https://login.yahoo.com/config/login\">Yahoo!</link>"
-
-#: C/disable-account.page:9(info/desc)
-msgid "Prevent <app>Empathy</app> from automatically logging in to an account."
-msgstr ""
-"Empêcher <app>Empathy</app> de se connecter automatiquement à un compte."
-
-#: C/disable-account.page:40(page/title)
-msgid "Disable an account"
-msgstr "Désactivation d'un compte"
-
-#: C/disable-account.page:42(page/p)
-msgid ""
-"You can disable an account to prevent <app>Empathy</app> from logging in to "
-"it without removing the account entirely. You may wish to disable and re-"
-"enable an account if you only want to be logged in to the account at certain "
-"times, but you still want to use <app>Empathy</app> for other accounts."
-msgstr ""
-"Vous pouvez désactiver un compte pour empêcher <app>Empathy</app> de s'y "
-"connecter sans avoir à le supprimer complètement. Vous pouvez activer et "
-"désactiver un compte que vous ne voulez pas utiliser en permanence tout en "
-"continuant d'utiliser <app>Empathy</app> avec les autres comptes."
-
-#: C/disable-account.page:53(item/p)
-msgid ""
-"Select the account you wish to disable from the accounts list on the left "
-"side of the window."
-msgstr ""
-"Sélectionnez le compte que vous voulez désactiver dans la liste des comptes "
-"à gauche de la fenêtre."
-
-# À revoir...
-#: C/disable-account.page:57(item/p)
-msgid "On the right side of the window, switch it off."
-msgstr "Désactivez-le dans la partie droite de la fenêtre."
-
-#: C/disable-account.page:62(page/p)
-msgid "To re-enable the account, switch it on."
-msgstr "Réactivez-le à partir du même endroit."
-
-#: C/favorite-rooms.page:10(info/desc)
-msgid "Set, join and manage favorite rooms."
-msgstr "Définir, rejoindre et gérer les salons favoris."
-
-#: C/favorite-rooms.page:29(page/title)
-msgid "Favorite rooms"
-msgstr "Salons favoris"
-
-#: C/favorite-rooms.page:32(section/title)
-msgid "Set a room as a favorite"
-msgstr "Définition d'un salon comme favori"
-
-#: C/favorite-rooms.page:35(item/p)
-msgid "Join a room."
-msgstr "Rejoindre un salon."
-
-#: C/favorite-rooms.page:40(item/p)
-msgid ""
-"See <link xref=\"irc-join-room\"/> for more information on how to join an "
-"IRC room."
-msgstr ""
-"Consultez <link xref=\"irc-join-room\"/> pour plus d'informations sur "
-"comment rejoindre un salon IRC."
-
-#: C/favorite-rooms.page:46(item/p)
-msgid ""
-"See <link xref=\"group-conversations\"/> for more information on how to "
-"start or join a group conversation."
-msgstr ""
-"Consultez <link xref=\"group-conversations\"/> pour plus d'informations sur "
-"comment démarrer ou rejoindre une discussion de groupe."
-
-#: C/favorite-rooms.page:54(item/p)
-msgid ""
-"From the conversation window, choose <guiseq><gui>Conversation</"
-"gui><gui>Favorite Chat Room</gui></guiseq>."
-msgstr ""
-"À partir de la fenêtre de conversation, choisir <guiseq><gui>Conversation</"
-"gui><gui>Salon de discussion favori</gui></guiseq>."
-
-#: C/favorite-rooms.page:63(section/title)
-msgid "Join favorite rooms"
-msgstr "Rejoindre les salons favoris"
-
-#: C/favorite-rooms.page:66(item/p) C/send-file.page:40(item/p)
-msgid "From the <gui>Contact List</gui> window, perform one of the following:"
-msgstr ""
-"Dans la fenêtre <gui>Liste des contacts</gui>, effectuez une des actions "
-"suivantes :"
-
-#: C/favorite-rooms.page:71(item/p)
-msgid "Press <key>F5</key>."
-msgstr "appuyez sur <key>F5</key>,"
-
-#: C/favorite-rooms.page:76(item/p)
-msgid ""
-"Choose <guiseq><gui>Room</gui><gui>Join Favorites</gui></guiseq>, to join "
-"all your favorite rooms."
-msgstr ""
-"choisissez <guiseq><gui>Salon</gui><gui>Rejoindre les favoris</gui></guiseq> "
-"pour rejoindre tous les salons favoris,"
-
-#: C/favorite-rooms.page:82(item/p)
-msgid "Choose <gui>Room</gui>, and select the favorite room you want to join."
-msgstr ""
-"choisissez <gui>Salon</gui> et sélectionnez le salon favori que vous voulez "
-"rejoindre."
-
-#: C/favorite-rooms.page:90(note/p)
-msgid ""
-"To join a favorite room, you need to be connected to the Internet and to "
-"your account."
-msgstr ""
-"Pour rejoindre un salon favori, vous devez être connecté à Internet et à "
-"votre compte."
-
-#: C/favorite-rooms.page:98(section/title)
-msgid "Manage favorite rooms"
-msgstr "Gestion des salons favoris"
-
-#: C/favorite-rooms.page:101(item/p)
-msgid ""
-"From the <gui>Contact List</gui> window, choose <guiseq><gui>Room</"
-"gui><gui>Manage Favorites</gui></guiseq>."
-msgstr ""
-"Dans la fenêtre <gui>Liste des contacts</gui>, choisissez "
-"<guiseq><gui>Salon</gui><gui>Gérer les favoris</gui></guiseq>."
-
-# ouf...
-#: C/favorite-rooms.page:107(item/p)
-msgid ""
-"From the <gui>Account</gui> drop-down list, select the account you want to "
-"manage the favorite rooms of."
-msgstr ""
-"Dans la liste déroulante <gui>Compte</gui>, sélectionnez le compte où se "
-"trouve le salon à gérer."
-
-#: C/favorite-rooms.page:111(item/p)
-msgid "Select <gui>All</gui> to see all you favorite rooms."
-msgstr ""
-"Sélectionnez <gui>Tous les comptes</gui> pour afficher tous vos salons "
-"favoris."
-
-#: C/favorite-rooms.page:116(item/p)
-msgid "Select the favorite room you want to manage:"
-msgstr "Sélectionnez le salon favori que vous voulez gérer :"
-
-#: C/favorite-rooms.page:121(item/p)
-msgid ""
-"Select the <gui>Auto-Connect</gui> check-box in order to automatically join "
-"that room when you connect to your account."
-msgstr ""
-"Cochez la case <gui>Connexion automatique</gui> pour rejoindre "
-"automatiquement ce salon lorsque vous vous connectez à votre compte."
-
-#: C/favorite-rooms.page:127(item/p)
-msgid "Click on <gui>Remove</gui> to remove the room from your favorites."
-msgstr ""
-"Cliquez sur <gui>Supprimer</gui> pour supprimer le salon de vos favoris."
-
-#: C/favorite-rooms.page:134(item/p)
-msgid "When done, click <gui>Close</gui>."
-msgstr "Lorsque que vous avez terminé, cliquez sur <gui>Fermer</gui>."
-
-#: C/geolocation.page:8(info/desc)
-msgid "Use and understand geolocation in <app>Empathy</app>."
-msgstr "Utiliser et comprendre la géolocalisation dans <app>Empathy</app>."
-
-#: C/geolocation.page:32(page/title)
-msgid "Geographical position"
-msgstr "Position géographique"
-
-#: C/geolocation.page:35(section/title)
-msgid "Geolocation"
-msgstr "Géolocalisation"
-
-#: C/geolocation.page:39(section/title)
-msgid "Fix common problems"
-msgstr "Résolution de problèmes courants"
-
-#: C/geolocation-not-showing.page:8(info/desc)
-msgid "<app>Empathy</app> does not publish my geographical position."
-msgstr "<app>Empathy</app> ne publie pas ma position géographique."
-
-#: C/geolocation-not-showing.page:32(page/title)
-msgid "Geographical position not published"
-msgstr "Position géographique non publiée"
-
-#: C/geolocation-not-showing.page:34(page/p)
-msgid ""
-"If your contacts cannot see your location, <app>Empathy</app> might not be "
-"able to discover with a good margin of precision your geographical position."
-msgstr ""
-"Si vos contacts ne peuvent pas voir votre position, c'est peut-être "
-"qu'<app>Empathy</app> n'arrive pas à localiser précisément votre position "
-"géographique."
-
-#: C/geolocation-not-showing.page:38(page/p)
-msgid ""
-"In this case, your position will not be published, but you are still able to "
-"see the location of your contacts."
-msgstr ""
-"Dans ce cas, votre position ne sera pas publiée, mais vous pourrez toujours "
-"voir la position de vos contacts."
-
-#: C/geolocation-not-showing.page:42(page/p)
-msgid ""
-"If you want to publish your geographical position, you can try to use an "
-"external device such as a GPS."
-msgstr ""
-"Si vous voulez publier votre position géographique, vous pouvez essayer "
-"d'utiliser un périphérique externe tel qu'un GPS."
-
-#: C/geolocation-not-showing.page:48(note/p)
-msgid ""
-"In order to publish your geographical location, your Jabber server needs to "
-"support the Personal Eventing Protocal (PEP). A list of <link href=\"http://"
-"coccinella.im/servers/servers_by_pubsub_pep.html\">servers which support "
-"PEP</link> is maintained online. Google Talk does not support this feature "
-"at this time."
-msgstr ""
-"Afin de publier votre position géographique, votre serveur Jabber doit "
-"prendre en charge le protocole PEP (Personal Eventing Protocol). Une liste "
-"des <link href=\"http://coccinella.im/servers/servers_by_pubsub_pep.html"
-"\">serveurs qui supportent le PEP</link> est tenue à jour en ligne. Google "
-"Talk ne prend pas en charge cette fonctionnalité pour l'instant."
-
-#: C/geolocation-privacy.page:8(info/desc)
-msgid "What information are sent and to who."
-msgstr "Quelles informations sont envoyées et à qui."
-
-# Je vois pas vraiment autre chose...
-#: C/geolocation-privacy.page:32(page/title)
-msgid "Geolocation Privacy"
-msgstr "Confidentialité de la géolocalisation"
-
-#: C/geolocation-privacy.page:35(section/title)
-msgid "What information is sent"
-msgstr "Informations envoyées"
-
-#: C/geolocation-privacy.page:36(section/p)
-msgid ""
-"What is possible to send is: your country, region, locality, area, street, "
-"building, floor, room, and postal code, longitude, latitude and altitude, "
-"speed and bearing."
-msgstr ""
-"Ce qu'il est possible d'envoyer : votre pays, votre région, votre "
-"département, votre ville, votre rue, votre numéro de bâtiment, votre numéro "
-"d'étage, votre numéro de chambre, votre code postal, la longitude, la "
-"latitude, l'altitude, la vitesse et le relèvement."
-
-#: C/geolocation-privacy.page:40(section/p)
-msgid ""
-"The accuracy and the quantity of information about your geographical "
-"position are based on the software or on the infrastructure used to discover "
-"your position."
-msgstr ""
-"La précision et la quantité d'informations sur votre position géographique "
-"sont basés sur le logiciel ou sur le matériel utilisés pour trouver votre "
-"position."
-
-#: C/geolocation-privacy.page:44(section/p)
-msgid ""
-"Different kind of networks may have different accuracy settings, and may "
-"send different information. The use of external devices such as GPS or "
-"mobile phone will increase the accuracy of the information sent."
-msgstr ""
-"Des types de réseaux différents peuvent avoir des paramètres de précision "
-"différents et peuvent envoyer des informations différentes. L'utilisation de "
-"périphériques externes tels qu'un GPS ou qu'un téléphone cellulaire augmente "
-"la précision des informations envoyées."
-
-#: C/geolocation-privacy.page:49(section/p)
-msgid ""
-"When the privacy mode is enabled, nothing more precise than your city will "
-"be sent, even if you are using an external device."
-msgstr ""
-"Lorsque le mode confidentiel est activé, seul le nom de votre ville est "
-"envoyé, même si vous utilisez un périphérique externe."
-
-#: C/geolocation-privacy.page:56(section/title)
-msgid "Who can see the information sent"
-msgstr "Destinataires de l'information envoyée"
-
-#: C/geolocation-privacy.page:57(section/p)
-msgid "Only your contacts can see your geographical position."
-msgstr "Seuls vos contacts peuvent voir votre position géographique."
-
-#: C/geolocation-privacy.page:63(section/title)
-msgid "What is the privacy mode"
-msgstr "Mode confidentiel"
-
-#: C/geolocation-privacy.page:64(section/p)
-msgid ""
-"The privacy mode, enabled by default, is a reduced accuracy mode that will "
-"decrease the accuracy of the geographical position sent to your contacts."
-msgstr ""
-"Le mode confidentiel, activé par défaut, est un mode de précision réduite "
-"qui diminue la précision de la position géographique envoyée à vos contacts."
-
-#: C/geolocation-privacy.page:71(section/title)
-msgid "Privacy overview"
-msgstr "Vue d'ensemble sur la confidentialité"
-
-#: C/geolocation-privacy.page:72(section/p)
-msgid ""
-"Overview of the various geolocation privacy settings in <app>Empathy</app>."
-msgstr ""
-"Vue d'ensemble des différents paramètres de confidentialité de "
-"géolocalisation dans <app>Empathy</app>."
-
-#: C/geolocation-privacy.page:77(item/p)
-msgid "Geolocation is not enabled by default."
-msgstr "La géolocalisation n'est pas activée par défaut."
-
-#: C/geolocation-privacy.page:82(item/p)
-msgid "Privacy mode is enabled by default."
-msgstr "Le mode confidentiel est activé par défaut."
-
-#: C/geolocation-privacy.page:87(item/p)
-msgid ""
-"Privacy mode prevails even when using external and more precise devices."
-msgstr ""
-"Le mode confidentiel prévaut même lorsque vous utilisez des périphériques "
-"externes plus précis."
-
-#: C/geolocation-privacy.page:92(item/p)
-msgid "Only your contacts can see your position."
-msgstr "Seuls vos contacts peuvent connaître votre position."
-
-#: C/geolocation-supported.page:7(info/desc)
-msgid "Services that supports geolocation and compatibility."
-msgstr ""
-"Les services qui prennent en charge la géolocalisation et la compatibilité."
-
-#: C/geolocation-supported.page:31(page/title)
-msgid "Supported services"
-msgstr "Services pris en charge"
-
-#: C/geolocation-supported.page:33(page/p)
-msgid ""
-"The geolocation feature at the moment is compatible only with the Jabber "
-"service. In order to use it, you and your contacts need to have a Jabber "
-"account."
-msgstr ""
-"La fonctionnalité de géolocalisation n'est actuellement compatible qu'avec "
-"le service Jabber. Pour l'utiliser, vous et vos contacts devez posséder un "
-"compte Jabber."
-
-#: C/geolocation-supported.page:39(note/p)
-msgid ""
-"It is necessary that also the server you are using supports the geolocation "
-"feature. Most of the Jabber servers support it. See your service website "
-"documentation for more information."
-msgstr ""
-"Il est aussi nécessaire que le serveur que vous utilisez supporte la "
-"fonctionnalité de géolocalisation. La plupart des serveurs Jabber la "
-"supportent. Pour plus d'informations, consultez la documentation Web de "
-"votre service."
-
-#: C/geolocation-supported.page:47(section/title)
-msgid "Compatibility"
-msgstr "Compatibilité"
-
-#: C/geolocation-supported.page:49(section/p)
-msgid ""
-"<app>Empathy</app> geolocation feature is not compatible with other "
-"geographical position services such as <em>Google Latitude</em>, <em>Yahoo "
-"Fire Eagle</em> or <em>Brightkite</em>."
-msgstr ""
-"La fonctionnalité de géolocalisation d'<app>Empathy</app> n'est pas "
-"compatible avec d'autres services tels que <em>Google Latitude</em>, "
-"<em>Yahoo Fire Eagle</em> ou <em>Brightkite</em>."
-
-#: C/geolocation-turn.page:9(info/desc)
-msgid "How to activate and deactivate geolocation in <app>Empathy</app>."
-msgstr ""
-"Comment activer et désactiver la géolocalisation dans <app>Empathy</app>."
-
-#: C/geolocation-turn.page:33(page/title)
-msgid "Activate/Deactivate geolocation"
-msgstr "Activation/Désactivation de la géolocalisation"
-
-#: C/geolocation-turn.page:37(item/p)
-msgid "Choose <guiseq><gui>Edit</gui><gui>Preferences</gui></guiseq>."
-msgstr "Choisissez <guiseq><gui>Édition</gui><gui>Préférences</gui></guiseq>."
-
-#: C/geolocation-turn.page:42(item/p)
-msgid "Select the <gui>Location</gui> tab."
-msgstr "Sélectionnez l'onglet <gui>Position</gui>."
-
-#: C/geolocation-turn.page:47(item/p)
-msgid ""
-"Select <gui>Publish location to my contacts</gui> to activate geolocation."
-msgstr ""
-"Sélectionnez <gui>Publier ma position pour mes contacts</gui> pour activer "
-"la géolocalisation."
-
-#: C/geolocation-turn.page:50(item/p)
-msgid "To deactivate geolocation, deselect it."
-msgstr "Pour désactiver la géolocalisation, désélectionnez-la."
-
-#: C/geolocation-turn.page:55(item/p)
-msgid ""
-"To increase the accuracy of your position, deselect <gui>Reduce location "
-"accuracy</gui>."
-msgstr ""
-"Pour augmenter la précision de votre position, désélectionnez <gui>Réduire "
-"la précision de la position</gui>."
-
-#: C/geolocation-turn.page:61(item/p)
-msgid ""
-"If you have an external device like a GPS or want to send a more accurate "
-"position, select the appropriate option in the <gui>Location sources</gui> "
-"section."
-msgstr ""
-"Si vous avez un périphérique externe comme un GPS, ou si vous voulez donner "
-"une plus grande précision sur votre position, sélectionnez l'option "
-"appropriée dans la section <gui>Sources de positionnement</gui>."
-
-#: C/geolocation-what-is.page:9(info/desc)
-msgid "Understanding geolocation."
-msgstr "Comprendre la géolocalisation."
-
-#: C/geolocation-what-is.page:33(page/title)
-msgid "What is geolocation"
-msgstr "La géolocalisation"
-
-#: C/geolocation-what-is.page:35(page/p)
-msgid ""
-"Geolocation allows you to identify the real geographical location of a "
-"computer or a device connected to the Internet."
-msgstr ""
-"La géolocalisation vous permet d'identifier la véritable position "
-"géographique d'un ordinateur ou d'un périphérique connecté à Internet."
-
-#: C/geolocation-what-is.page:37(page/p)
-msgid "With geolocation in <app>Empathy</app> you can:"
-msgstr "Avec la géolocalisation dans <app>Empathy</app>, vous pouvez :"
-
-#: C/geolocation-what-is.page:42(item/p)
-msgid "Publish your geographical location to your contacts."
-msgstr "communiquer votre position géographique à vos contacts,"
-
-#: C/geolocation-what-is.page:47(item/p)
-msgid "See your contacts’ geographical location and quickly contact them."
-msgstr "connaître leur position géographique et les contacter rapidement,"
-
-#: C/geolocation-what-is.page:52(item/p)
-msgid ""
-"Set the accuracy of your location and the device used to discover your "
-"location."
-msgstr ""
-"définir la précision de votre position et le périphérique utilisé pour la "
-"trouver."
-
-#: C/geolocation-what-is.page:60(note/p)
-msgid ""
-"In order to see your contacts’ geographical locations, they need to use a "
-"service and an application that supports geolocation."
-msgstr ""
-"Pour connaître les positions géographiques de vos contacts, ils doivent "
-"utiliser un service et une application qui prenne en charge la "
-"géolocalisation."
-
-#: C/group-conversations.page:8(info/desc)
-msgid "Start or join a group conversation with your contacts."
-msgstr "Démarrer ou rejoindre une discussion de groupe avec vos contacts."
-
-#: C/group-conversations.page:34(page/title)
-msgid "Group conversations"
-msgstr "Discussion de groupe"
-
-#: C/group-conversations.page:36(page/p)
-msgid ""
-"Group conversations permits you to have text conversations with more than "
-"one contact at the same time."
-msgstr ""
-"Les discussions de groupe vous permettent de discuter par écrit avec "
-"plusieurs contacts à la fois."
-
-#: C/group-conversations.page:40(page/p)
-msgid ""
-"To have a group conversation you need to have a registered account with "
-"either Jabber or Google Talk, or a People Nearby account."
-msgstr ""
-"Pour accéder à une discussion de groupe, vous devez posséder un compte "
-"enregistré sur Jabber ou Google Talk ou un compte de Personnes à proximité."
-
-#: C/group-conversations.page:46(note/p)
-msgid ""
-"You can have a group conversation only with the contacts that are using the "
-"same service as yours."
-msgstr ""
-"Vous ne pouvez participer à une discussion de groupe qu'avec les contacts "
-"qui utilisent le même service que le vôtre."
-
-#: C/group-conversations.page:54(section/title)
-msgid "Start a group conversation"
-msgstr "Lancement d'une discussion de groupe"
-
-#: C/group-conversations.page:58(item/p)
-#: C/group-conversations.page:122(item/p) C/irc-join-room.page:39(item/p)
-msgid ""
-"From the <gui>Contact List</gui> window, choose <guiseq><gui>Room</"
-"gui><gui>Join</gui></guiseq>."
-msgstr ""
-"Dans la fenêtre <gui>Liste des contacts</gui>, choisissez "
-"<guiseq><gui>Salon</gui><gui>Rejoindre...</gui></guiseq>."
-
-#: C/group-conversations.page:63(item/p)
-msgid ""
-"From the <gui>Account</gui> drop-down list, select the account you want to "
-"use for the group conversation."
-msgstr ""
-"Dans la liste déroulante <gui>Compte</gui> , sélectionnez le compte que vous "
-"souhaitez utiliser pour la discussion de groupe."
-
-#: C/group-conversations.page:69(item/p)
-msgid ""
-"In the <gui>Server</gui> text box, type the name of server in which the "
-"conversation will be hosted."
-msgstr ""
-"Dans le champ <gui>Serveur</gui>, saisissez le nom du serveur qui héberge la "
-"discussion."
-
-#: C/group-conversations.page:73(item/p)
-msgid "Leave it empty if it will be on the current server."
-msgstr "Laissez-le vide si vous utilisez le serveur en cours."
-
-#: C/group-conversations.page:78(item/p)
-msgid ""
-"In the <gui>Room</gui> text box, type the name you want to give to the "
-"conversation."
-msgstr ""
-"Dans le champ <gui>Salon</gui>, saisissez le nom que vous souhaitez donner à "
-"la discussion."
-
-#: C/group-conversations.page:82(note/p)
-msgid ""
-"This will be the name of the room you are going to have a conversation. This "
-"name will be publicly available for other people to join. It is not possible "
-"to create a private room."
-msgstr ""
-"Ce sera le nom du salon où vous discuterez. Ce nom sera publiquement "
-"accessible aux autres personnes pour qu'elles puissent y accéder. Il est "
-"impossible de créer un salon privé."
-
-#: C/group-conversations.page:90(item/p)
-msgid ""
-"To invite other contacts to join the group conversation, from the "
-"<gui>Contact List</gui> window, select the contact you want to invite, and "
-"perform one of the following:"
-msgstr ""
-"Pour inviter d'autres contacts à rejoindre la discussion de groupe, "
-"sélectionnez le contact que vous désirez inviter dans la fenêtre <gui>Liste "
-"des contacts</gui> et effectuez une des actions suivantes :"
-
-#: C/group-conversations.page:97(item/p)
-msgid "Right-click on the contact and choose <gui>Invite to chatroom</gui>."
-msgstr ""
-"faites un clic droit sur l'un de vos contacts et sélectionnez <gui>Inviter à "
-"un salon de discussion</gui>,"
-
-#: C/group-conversations.page:102(item/p)
-msgid ""
-"Choose <guiseq><gui>Edit</gui><gui>Contact</gui><gui>Invite to chatroom</"
-"gui></guiseq>."
-msgstr ""
-"choisissez <guiseq><gui>Édition</gui><gui>Contact</gui><gui>Inviter à un "
-"salon de discussion</gui></guiseq>."
-
-#: C/group-conversations.page:107(item/p)
-msgid ""
-"If you have more than one group conversation open, select the one you want "
-"to invite your contacts."
-msgstr ""
-"Si vous avez plus d'une discussion de groupe ouverte, sélectionnez celle où "
-"vous voulez inviter vos contacts."
-
-#: C/group-conversations.page:118(section/title)
-msgid "Join a group conversation"
-msgstr "Rejoindre une discussion de groupe"
-
-#: C/group-conversations.page:128(item/p)
-msgid "Expand the <gui>Room List</gui> section to see all the existing rooms."
-msgstr ""
-"Déroulez la <gui>Liste des salons</gui> pour afficher tous les salons "
-"existants."
-
-#: C/group-conversations.page:133(item/p)
-msgid "Double-click on the name of a room to join it."
-msgstr "Faites un double clic sur le nom d'un salon pour le rejoindre."
-
-#: C/group-conversations.page:139(section/p)
-msgid ""
-"It is not possible to join all existing rooms. Some of the rooms might "
-"require a password, or might be invitation only. <app>Empathy</app> does not "
-"support these kind of rooms."
-msgstr ""
-"Il n'est pas possible de rejoindre tous les salons existants. Certains "
-"salons nécessitent un mot de passe ou une invitation. <app>Empathy</app> ne "
-"prend pas en charge ce genre de salon."
-
-#: C/hide-contacts.page:8(info/desc)
-msgid "Hide the offline contacts from your <gui>Contact List</gui>."
-msgstr ""
-"Masquer les contacts déconnectés de votre <gui>liste des contacts</gui>."
-
-#: C/hide-contacts.page:19(page/title)
-msgid "Hide offline contacts"
-msgstr "Masquage des contacts déconnectés "
-
-#: C/hide-contacts.page:21(page/p)
-msgid ""
-"Normally, <app>Empathy</app> shows all your contacts: those that are online, "
-"with which you can have a conversation, and also those that are offline."
-msgstr ""
-"Normalement, <app>Empathy</app> affiche tous vos contacts : ceux qui sont "
-"connectés, avec qui vous pouvez avoir une discussion et aussi ceux qui sont "
-"déconnectés."
-
-#: C/hide-contacts.page:25(page/p)
-msgid "To hide the contacts that are offline:"
-msgstr "Pour masquer les contacts qui sont déconnectés :"
-
-#: C/hide-contacts.page:31(item/p)
-msgid ""
-"From the <gui>Contact List</gui> window, choose <guiseq><gui>View</gui> "
-"<gui>Offline Contacts</gui></guiseq>, or press <keyseq><key>Ctrl</key> "
-"<key>H</key></keyseq>."
-msgstr ""
-"Dans la fenêtre <gui>Liste des contacts</gui>, choisissez "
-"<guiseq><gui>Affichage</gui> <gui>Contacts déconnectés</gui></guiseq>, ou "
-"appuyez sur <keyseq><key>Ctrl</key> <key>H</key></keyseq>."
-
-#: C/hide-contacts.page:36(item/p)
-msgid "To show the offline contacts again, repeat the same procedure above."
-msgstr ""
-"Pour afficher à nouveau les contacts déconnectés, répétez la même procédure "
-"ci-dessus."
-
-#: C/import-account.page:10(info/desc)
-msgid "Import an account from another instant messaging application."
-msgstr "Importer un compte d'une autre application de messagerie instantanée."
-
-#: C/import-account.page:19(credit/name)
-msgid "Peter Haslam"
-msgstr "Peter Haslam"
-
-#: C/import-account.page:42(page/title)
-msgid "Import an existing account"
-msgstr "Importation d'un compte existant"
-
-#: C/import-account.page:44(page/p)
-msgid ""
-"The first time you run <app>Empathy</app>, it will offer to import your "
-"accounts from other instant messaging applications. Currently, the only "
-"supported application is <app>Pidgin</app>."
-msgstr ""
-"La première fois que vous lancez <app>Empathy</app>, il vous propose "
-"d'importer vos comptes à partir d'autres applications de messagerie "
-"instantanée. Actuellement, la seule application prise en charge est "
-"<app>Pidgin</app>."
-
-#: C/import-account.page:50(item/p)
-msgid ""
-"Run <app>Empathy</app> for the first time. An assistant will offer you a "
-"number of options to create new accounts."
-msgstr ""
-"Lancez <app>Empathy</app> pour la première fois. Un assistant vous propose "
-"un certain nombre d'options pour créer de nouveaux comptes."
-
-#: C/import-account.page:54(item/p)
-msgid ""
-"Select <gui>Yes, import my account details from</gui> and click "
-"<gui>Forward</gui>."
-msgstr ""
-"Sélectionnez <gui>Oui, importer les détails de mes comptes à partir de</gui> "
-"et cliquez sur <gui>Suivant</gui>."
-
-#: C/import-account.page:58(item/p)
-msgid "Select the check box next to each account you wish to import."
-msgstr "Cochez la case à côté de chaque compte à importer."
-
-#: C/import-account.page:66(note/p)
-msgid ""
-"It is not currently possible to import accounts after you have completed the "
-"first-run assistant."
-msgstr ""
-"Pour l'instant, vous ne pouvez plus importer de comptes après avoir utilisé "
-"l'assistant de première utilisation."
-
-#. This is a reference to an external file such as an image or video. When
-#. the file changes, the md5 hash will change to let you know you need to
-#. update your localized copy. The msgstr is not used at all. Set it to
-#. whatever you like once you have updated your copy of the file.
-#: C/introduction.page:41(media)
-msgctxt "_"
-msgid ""
-"external ref='figures/empathy-main-window.png' "
-"md5='54908dcb2588beddb15ef0968d2c2582'"
-msgstr ""
-"external ref='figures/empathy-main-window.png' "
-"md5='54908dcb2588beddb15ef0968d2c2582'"
-
-#: C/introduction.page:9(info/desc)
-msgid "Introduction to the <app>Empathy</app> instant messenger."
-msgstr "Introduction à la messagerie instantanée <app>Empathy</app>."
-
-#: C/introduction.page:21(page/title)
-msgid "Introduction"
-msgstr "Introduction"
-
-#: C/introduction.page:23(page/p)
-msgid ""
-"<app>Empathy</app> is an instant messaging application for the GNOME "
-"Desktop. It supports text messaging, voice &amp; video calls, file "
-"transfers, and all the most used messaging systems such as MSN and Google "
-"Talk."
-msgstr ""
-"<app>Empathy</app> est un client de messagerie instantanée pour "
-"l'environnement de bureau GNOME. Il prend en charge la messagerie textuelle, "
-"les appels audio et vidéo, le transfert de fichiers et tous les systèmes de "
-"messagerie les plus utilisés comme MSN et Google Talk."
-
-#: C/introduction.page:28(page/p)
-msgid ""
-"<app>Empathy</app> includes features that help you better collaborate while "
-"at work, and that let you easily keep in touch with your friends."
-msgstr ""
-"<app>Empathy</app> inclut des fonctionnalités qui vous aident à mieux "
-"collaborer au travail et qui vous permettent de rester facilement en contact "
-"avec vos amis."
-
-#: C/introduction.page:32(page/p)
-msgid ""
-"Using <app>Empathy</app>, you can group all the conversations in a single "
-"window, have multiple windows for different kind of conversations, easily "
-"search through your previous conversations, and share your desktop in just "
-"two clicks."
-msgstr ""
-"En utilisant <app>Empathy</app>, vous pouvez grouper toutes vos "
-"conversations dans une seule fenêtre, avoir plusieurs fenêtres pour "
-"différents types de conversations, faire facilement une recherche dans vos "
-"conversations précédentes et partager votre bureau en seulement deux clics."
-
-#: C/introduction.page:39(figure/title)
-msgid "<gui>Contact List</gui> window"
-msgstr "Fenêtre <gui>Liste des contacts</gui>"
-
-#: C/introduction.page:40(figure/desc)
-msgid "<app>Empathy</app> main window"
-msgstr "Fenêtre principale d'<app>Empathy</app>"
-
-#: C/introduction.page:42(media/p)
-msgid "<app>Empathy</app> main window."
-msgstr "Fenêtre principale d' <app>Empathy</app>."
-
-#: C/irc-commands.page:7(info/desc)
-msgid "The supported IRC commands."
-msgstr "Les commandes IRC prises en charge."
-
-#: C/irc-commands.page:18(page/title)
-msgid "Supported IRC commands"
-msgstr "Commandes IRC prises en charge"
-
-#: C/irc-commands.page:19(page/p)
-msgid ""
-"To see the list of the supported IRC commands, in a chat room type <input>/"
-"help</input> and press <key>Enter</key>."
-msgstr ""
-"Pour voir la liste des commandes IRC prises en charge dans un salon de "
-"discussion, saisissez <input>/help</input> et appuyez sur <key>Entrée</key>."
-
-#: C/irc-commands.page:24(note/p)
-msgid "All commands available have a small description on their usage."
-msgstr ""
-"Toutes les commandes disponibles disposent d'une courte description de leur "
-"mode d'emploi."
-
-#: C/irc-join-pwd.page:9(info/desc)
-msgid "Enter password-protected IRC chat rooms."
-msgstr "Entrer dans les salons de discussions IRC protégés par mot de passe."
-
-#: C/irc-join-pwd.page:25(page/title)
-msgid "Join a protected IRC chat room"
-msgstr "Rejoindre un salon de discussion protégé IRC"
-
-#: C/irc-join-pwd.page:27(page/p)
-msgid ""
-"On some IRC networks, private IRC rooms may be protected with a password. If "
-"you know the password, use the following steps to join:"
-msgstr ""
-"Sur certains réseaux IRC, des salons privés IRC peuvent être protégés par un "
-"mot de passe. Si vous connaissez le mot de passe, suivez les étapes "
-"suivantes pour le rejoindre :"
-
-#: C/irc-join-pwd.page:33(item/p)
-msgid "<link xref=\"irc-join-room\">Join the room</link> as normal."
-msgstr ""
-"<link xref=\"irc-join-room\">Rejoindre le salon</link> comme d'habitude."
-
-#: C/irc-join-pwd.page:38(item/p)
-msgid ""
-"Empathy will prompt you for a password. Enter the password for the IRC chat "
-"room and click <gui style=\"button\">Join</gui>."
-msgstr ""
-"Empathy vous demandera un mot de passe. Saisissez le mot de passe du salon "
-"de discussion IRC et cliquez sur <gui style=\"button\">Rejoindre</gui>."
-
-#: C/irc-join-room.page:8(info/desc)
-msgid "Join an IRC channel."
-msgstr "Rejoindre un canal IRC."
-
-#: C/irc-join-room.page:31(page/title)
-msgid "Join an IRC chat room"
-msgstr "Rejoindre un salon de discussion IRC"
-
-#: C/irc-join-room.page:33(page/p)
-msgid ""
-"You can join IRC chat rooms (also known as IRC channels) on any IRC network "
-"you’re connected to. To connect to an IRC network, see <link xref=\"add-"
-"account\"/> and <link xref=\"account-irc\"/>."
-msgstr ""
-"Vous pouvez rejoindre un salon de discussion IRC (aussi connu comme canaux "
-"IRC) sur n'importe quel réseau IRC auquel vous êtes connecté. Pour vous "
-"connecter à un réseau IRC, consultez <link xref=\"add-account\"/> et <link "
-"xref=\"account-irc\"/>."
-
-#: C/irc-join-room.page:45(item/p)
-msgid ""
-"From the <gui>Account</gui> drop-down list, select the IRC account that "
-"corresponds to the network you want to use."
-msgstr ""
-"À partir de la liste déroulante <gui>Compte</gui>, sélectionnez le compte "
-"IRC qui correspond au réseau que vous voulez utiliser."
-
-#: C/irc-join-room.page:51(item/p)
-msgid ""
-"In the <gui>Room</gui> text box, type the name of the channel you want to "
-"join. IRC channel names start with the hash character (<sys>#</sys>)."
-msgstr ""
-"Dans la zone de texte <gui>Salon</gui>, saisissez le nom du canal que vous "
-"voulez rejoindre. Les noms d'un canal IRC commencent par un caractère dièse "
-"(<sys>#</sys>)."
-
-#: C/irc-join-room.page:57(item/p)
-msgid "Click <gui>Join</gui> to enter the room."
-msgstr "Cliquez sur <gui>Rejoindre</gui> pour entrer dans le salon."
-
-#: C/irc-join-room.page:64(note/p)
-msgid ""
-"To join multiple rooms, you need to repeat the steps above for each room."
-msgstr ""
-"Pour rejoindre plusieurs salons, vous devez reproduire les étapes ci-dessus "
-"pour chaque salon."
-
-#: C/irc-manage.page:9(info/desc)
-msgid "How to use IRC with <app>Empathy</app>."
-msgstr "Comment utiliser IRC avec <app>Empathy</app>."
-
-#: C/irc-manage.page:23(credit/name)
-msgid "Sindhu S"
-msgstr "Sindhu S"
-
-#: C/irc-manage.page:39(page/title)
-msgid "Internet Relay Chat (IRC)"
-msgstr "Relais de discussion internet (IRC)"
-
-#: C/irc-manage.page:47(when/p)
-msgid ""
-"<link action=\"install:telepathy-idle\" xref=\"index\"> Install telepathy-"
-"idle</link>"
-msgstr ""
-"<link action=\"install:telepathy-idle\" xref=\"index\"> Installer telepathy-"
-"idle</link>"
-
-#: C/irc-manage.page:55(info/title)
-msgctxt "link"
-msgid "IRC Chat Rooms and Conversations"
-msgstr "Salons de discussions et conversations IRC"
-
-#: C/irc-manage.page:57(section/title)
-msgid "Chat Rooms and Conversations"
-msgstr "Salons de discussions et conversations"
-
-#: C/irc-manage.page:62(info/title)
-msgctxt "link"
-msgid "Common IRC Problems"
-msgstr "Problèmes IRC courants"
-
-#: C/irc-nick-password.page:10(info/desc)
-msgid "Protect your nickname to prevent other IRC users from using it."
-msgstr ""
-"Protéger votre pseudonyme pour éviter son utilisation par d'autres "
-"utilisateurs IRC."
-
-#: C/irc-nick-password.page:33(page/title)
-msgid "Use a nickname password on IRC"
-msgstr "Utilisation d'un mot de passe de pseudonyme sur IRC"
-
-#: C/irc-nick-password.page:35(page/p)
-msgid ""
-"On some IRC networks, you can register your nickname with a service called "
-"NickServ. By sending special messages to NickServ, you can set your password "
-"and identify yourself. Some IRC chat rooms may not allow you to join without "
-"a registered nickname."
-msgstr ""
-"Sur certains réseaux IRC, vous pouvez enregistrer votre pseudonyme par le "
-"biais d'un service nommé NickServ. En envoyant un message spécifique à "
-"NickServ, vous pouvez définir votre mot de passe et vous identifier. "
-"Certains salons de discussion IRC ne vous autorisent pas à les rejoindre "
-"sans pseudonyme enregistré."
-
-#: C/irc-nick-password.page:40(page/p)
-msgid ""
-"<app>Empathy</app> does not currently support nickname registration. Some "
-"IRC networks, however, will automatically forward a <em>server password</em> "
-"to NickServ. On these networks, you can use the IRC password in "
-"<app>Empathy</app> to identify yourself to NickServ. The popular freenode "
-"network is known to have this feature."
-msgstr ""
-"<app>Empathy</app> ne prend pas encore en charge l'enregistrement de "
-"pseudonymes. Cependant, certains réseaux IRC redirigent automatiquement un "
-"<em>mot de passe de serveur</em> vers NickServ. Sur ces réseaux, vous pouvez "
-"utiliser le mot de passe IRC d'<app>Empathy</app> pour vous identifier sur "
-"NickServ. Le réseau très répandu freenode est connu pour posséder cette "
-"fonctionnalité."
-
-#: C/irc-nick-password.page:46(page/p)
-msgid "To set an IRC server password:"
-msgstr "Pour définir un mot de passe de serveur IRC :"
-
-#: C/irc-nick-password.page:54(item/p)
-msgid "Select the IRC account from the list on the left of the dialog."
-msgstr ""
-"Sélectionnez le compte IRC dans la liste à gauche dans la boîte de dialogue,"
-
-#: C/irc-nick-password.page:57(item/p)
-msgid ""
-"In the <gui>Password</gui> field, type the password you used to register "
-"your nikcname."
-msgstr ""
-"dans le champ <gui>Mot de Passe</gui>, saisissez le mot de passe que vous "
-"avez utilisé pour enregistrer votre pseudonyme."
-
-#: C/irc-nick-password.page:69(note/p)
-msgid ""
-"These instructions only allow you to use a password-protected nickname on "
-"certain IRC networks. It is not currently possible to register an IRC "
-"nickname or change your nickname password using <app>Empathy</app>."
-msgstr ""
-"Ces instructions ne vous autorisent à utiliser un pseudonyme protégé par un "
-"mot de passe que sur certains réseaux IRC. Il est actuellement impossible "
-"d'enregistrer un pseudonyme IRC ou de modifier le mot de passe de votre "
-"pseudonyme avec <app>Empathy</app>."
-
-#: C/irc-send-file.page:9(info/desc)
-msgid "<app>Empathy</app> does not currently support sending files using IRC."
-msgstr ""
-"<app>Empathy</app> ne prend pas pour l'instant en charge l'envoi de fichiers "
-"par IRC."
-
-#: C/irc-send-file.page:31(page/title)
-msgid "Send files over IRC"
-msgstr "Envoi de fichiers sur IRC"
-
-#: C/irc-send-file.page:33(page/p)
-msgid "It is not currently possible to send files using IRC."
-msgstr ""
-"Il est actuellement impossible d'envoyer des fichiers en utilisant IRC."
-
-#: C/irc-start-conversation.page:8(info/desc)
-msgid "Start a conversation with an IRC contact."
-msgstr "Démarrer une conversation avec un contact IRC."
-
-#: C/irc-start-conversation.page:30(page/title)
-msgid "Chat with somebody on IRC"
-msgstr "Discussion avec quelqu'un sur IRC"
-
-#: C/irc-start-conversation.page:32(page/p)
-msgid ""
-"You can hold private conversations with other IRC users, outside of the "
-"public IRC chat rooms. To start a conversation with another IRC user:"
-msgstr ""
-"Vous pouvez entretenir des conversations privées avec d'autres utilisateurs "
-"IRC, en dehors des salons de discussions publics IRC. Pour démarrer une "
-"conversation avec un autre utilisateur IRC :"
-
-#: C/irc-start-conversation.page:37(item/p)
-msgid ""
-"In the contact list for an IRC chat room, double click the name of the user "
-"you want to chat with. Alternatively, right click the name of the user and "
-"choose <gui>Chat</gui>."
-msgstr ""
-"Dans la liste des contacts d'un salon de discussion IRC, double-cliquez sur "
-"le nom de l'utilisateur avec qui vous voulez discuter. Vous pouvez aussi "
-"faire un clic droit sur le nom de l'utilisateur et sélectionner "
-"<gui>Discuter</gui>."
-
-#: C/irc-start-conversation.page:45(item/p)
-msgid ""
-"The IRC room contact list is not the same as <app>Empathy</app> contact "
-"list. It contains a list of users in the IRC chat room you joined. Different "
-"rooms can have different contacts listed."
-msgstr ""
-"La liste des contacts d'un salon IRC est différente de celle d'<app>Empathy</"
-"app>. Elle contient la liste des utilisateurs du salon de discussion IRC que "
-"vous avez rejoint. Des salons de discussion différents peuvent avoir "
-"différents contacts répertoriés."
-
-#: C/irc-start-conversation.page:52(item/p)
-msgid ""
-"The IRC room contact list is usually on the right side of the IRC room "
-"window. If you do not see it, choose <guiseq><gui>Conversation</"
-"gui><gui>Show Contact List</gui></guiseq>."
-msgstr ""
-"La liste des contacts du salon IRC est généralement sur la partie droite de "
-"la fenêtre du salon. Si vous ne la voyez pas, choisissez "
-"<guiseq><gui>Conversation</gui><gui>Afficher la liste des contacts</gui></"
-"guiseq>."
-
-#: C/license.page:8(info/desc)
-msgid "Legal information."
-msgstr "Informations légales."
-
-#: C/license.page:11(page/title)
-msgid "License"
-msgstr "Licence"
-
-#: C/license.page:12(page/p)
-msgid ""
-"This work is distributed under a CreativeCommons Attribution-Share Alike 3.0 "
-"Unported license."
-msgstr ""
-"Cette œuvre est distribuée sous licence Creative Commons Paternité-Partage "
-"des Conditions Initiales à l'Identique 3.0 Unported."
-
-#: C/license.page:20(page/p)
-msgid "You are free:"
-msgstr "Vous êtes libre :"
-
-#: C/license.page:25(item/title)
-msgid "<em>To share</em>"
-msgstr "<em>de partager</em>"
-
-#: C/license.page:26(item/p)
-msgid "To copy, distribute and transmit the work."
-msgstr "de reproduire, distribuer et communiquer cette création."
-
-#: C/license.page:29(item/title)
-msgid "<em>To remix</em>"
-msgstr "<em>de modifier</em>"
-
-#: C/license.page:30(item/p)
-msgid "To adapt the work."
-msgstr "d'adapter cette création,"
-
-#: C/license.page:33(page/p)
-msgid "Under the following conditions:"
-msgstr "selon les conditions suivantes :"
-
-#: C/license.page:38(item/title)
-msgid "<em>Attribution</em>"
-msgstr "<em>Paternité</em>"
-
-#: C/license.page:39(item/p)
-msgid ""
-"You must attribute the work in the manner specified by the author or "
-"licensor (but not in any way that suggests that they endorse you or your use "
-"of the work)."
-msgstr ""
-"Vous devez citer le nom de l'auteur original de la manière indiquée par "
-"l'auteur de l'œuvre ou le titulaire des droits qui vous confère cette "
-"autorisation (mais pas d'une manière qui suggérerait qu'ils vous soutiennent "
-"ou approuvent votre utilisation de l'œuvre)."
-
-#: C/license.page:46(item/title)
-msgid "<em>Share Alike</em>"
-msgstr "<em>Partage des conditions initiales à l'identique</em>"
-
-#: C/license.page:47(item/p)
-msgid ""
-"If you alter, transform, or build upon this work, you may distribute the "
-"resulting work only under the same, similar or a compatible license."
-msgstr ""
-"Si vous modifiez, transformez ou adaptez cette création, vous n'avez le "
-"droit de distribuer la création qui en résulte que sous un contrat identique "
-"à celui-ci."
-
-#: C/license.page:53(page/p)
-msgid ""
-"For the full text of the license, see the <link href=\"http://"
-"creativecommons.org/licenses/by-sa/3.0/legalcode\">CreativeCommons website</"
-"link>, or read the full <link href=\"http://creativecommons.org/licenses/by-"
-"sa/3.0/\">Commons Deed</link>."
-msgstr ""
-"Pour prendre connaissance du texte complet de la licence, consultez le <link "
-"href=\"http://creativecommons.org/licenses/by-sa/3.0/legalcode\">site Web "
-"CreativeCommons</link> ou lisez in extenso le <link href=\"http://"
-"creativecommons.org/licenses/by-sa/3.0/\">contrat Commons</link>."
-
-#: C/link-contacts.page:11(info/desc)
-msgid "Merge and separate different contacts into a single one."
-msgstr "Lier et séparer des contacts différents en un seul."
-
-#: C/link-contacts.page:25(page/title)
-msgid "Combine and separate contacts"
-msgstr "Union et séparation de contacts"
-
-#: C/link-contacts.page:26(page/p)
-msgid ""
-"If one, or more, of your contacts has multiple accounts with different "
-"messaging services, you can combine these contacts into a single one."
-msgstr ""
-"Si un ou plusieurs de vos contacts possèdent plusieurs comptes sur des "
-"services de messagerie différents, vous pouvez lier ces contacts en un seul."
-
-#: C/link-contacts.page:30(page/p)
-msgid ""
-"The resulting contact is called a <em>meta-contact</em>: a contact composed "
-"from different single contacts."
-msgstr ""
-"La liaison crée un contact appelé <em>méta-contact</em> : un contact composé "
-"de plusieurs contacts distincts."
-
-#: C/link-contacts.page:34(page/p)
-msgid ""
-"If you have a Jane Smith contact that is using three different messaging "
-"services like:"
-msgstr ""
-"Si vous avez un contact Jean Bonneau qui utilise trois services de "
-"messagerie différents comme :"
-
-#: C/link-contacts.page:40(item/p)
-msgid "janes@facebook"
-msgstr "jean@facebook"
-
-#: C/link-contacts.page:45(item/p)
-msgid "jane.smith@gmail"
-msgstr "jean.bonneau@gmail"
-
-#: C/link-contacts.page:50(item/p)
-msgid "jane_smith@hotmail"
-msgstr "jean_bonneau@hotmail"
-
-#: C/link-contacts.page:55(page/p)
-msgid "You can combine these contacts into a single Jane Smith one."
-msgstr "vous pouvez lier ces contacts en un seul Jean Bonneau."
-
-#: C/link-contacts.page:60(section/title)
-msgid "Combining contacts"
-msgstr "Lien entre contacts"
-
-#: C/link-contacts.page:63(item/p)
-msgid ""
-"From the <gui>Contact List</gui> window, right-click one of the contact that "
-"has different accounts, and select <gui style=\"menuitem\">Link Contacts...</"
-"gui>."
-msgstr ""
-"Dans la fenêtre <gui>Liste des contacts</gui>, faites un clic droit sur l'un "
-"des contacts qui possède différents comptes et sélectionnez <gui style="
-"\"menuitem\">Lier les contacts</gui>."
-
-#: C/link-contacts.page:70(item/p)
-msgid ""
-"From the left pane in the <gui>Link Contacts</gui> window, select the "
-"contacts you want to combine."
-msgstr ""
-"Dans le panneau de gauche de la fenêtre <gui>Lier des contacts</gui>, "
-"sélectionnez les contacts que vous voulez lier."
-
-#: C/link-contacts.page:76(item/p)
-msgid "Click <gui style=\"button\">Link</gui>."
-msgstr "Cliquez sur <gui style=\"button\">Lier</gui>."
-
-#: C/link-contacts.page:82(note/p)
-msgid ""
-"When a meta-contact has been created, the default contact that will be used "
-"to have a conversation with when you double-click on it, is the contact with "
-"the highest presence on-line."
-msgstr ""
-"Par défaut, quand un méta contact a été créé et que vous faites un double "
-"clic dessus, vous êtes mis en ligne avec le contact qui a la plus forte "
-"présence sur le réseau."
-
-#: C/link-contacts.page:91(section/title)
-msgid "Separating contacts"
-msgstr "Séparation de contacts"
-
-#: C/link-contacts.page:94(item/p)
-msgid ""
-"From the <gui>Contact List</gui>, right-click the contact to separate, and "
-"select <gui style=\"menuitem\">Link Contacts...</gui>."
-msgstr ""
-"Dans la fenêtre <gui>Liste des contacts</gui>, faites un clic droit sur le "
-"contact à séparer et sélectionnez <gui style=\"menuitem\">Lier des "
-"contacts...</gui>."
-
-#: C/link-contacts.page:100(item/p)
-msgid "Click <gui style=\"button\">Unlink</gui>."
-msgstr "Cliquez sur <gui style=\"button\">Séparer</gui>."
-
-#. This is a reference to an external file such as an image or video. When
-#. the file changes, the md5 hash will change to let you know you need to
-#. update your localized copy. The msgstr is not used at all. Set it to
-#. whatever you like once you have updated your copy of the file.
-#: C/overview.page:37(media)
-msgctxt "_"
-msgid ""
-"external ref='figures/video_overview.png' "
-"md5='6cfcfbd833bf2234537d402185c40596'"
-msgstr ""
-"external ref='figures/video_overview.png' "
-"md5='6cfcfbd833bf2234537d402185c40596'"
-
-#. This is a reference to an external file such as an image or video. When
-#. the file changes, the md5 hash will change to let you know you need to
-#. update your localized copy. The msgstr is not used at all. Set it to
-#. whatever you like once you have updated your copy of the file.
-#: C/overview.page:38(media)
-msgctxt "_"
-msgid ""
-"external ref='figures/conf_overview.png' "
-"md5='74c58668fe89c84060f12f6b70a6b903'"
-msgstr ""
-"external ref='figures/conf_overview.png' "
-"md5='74c58668fe89c84060f12f6b70a6b903'"
-
-#. This is a reference to an external file such as an image or video. When
-#. the file changes, the md5 hash will change to let you know you need to
-#. update your localized copy. The msgstr is not used at all. Set it to
-#. whatever you like once you have updated your copy of the file.
-#: C/overview.page:39(media)
-msgctxt "_"
-msgid ""
-"external ref='figures/croom_overview.png' "
-"md5='e9619d2c8420bc48a880c03dbc1ae084'"
-msgstr ""
-"external ref='figures/croom_overview.png' "
-"md5='e9619d2c8420bc48a880c03dbc1ae084'"
-
-#: C/overview.page:8(info/desc)
-msgid "What instant messaging is and how you can use it."
-msgstr "Qu'est-ce qu'une messagerie instantanée et comment l'utiliser ?"
-
-#: C/overview.page:12(credit/name)
-msgid "Aruna S"
-msgstr "Aruna S"
-
-#: C/overview.page:16(credit/name) C/share-desktop.page:18(credit/name)
-msgid "Ekaterina Gerasimova"
-msgstr "Ekaterina Gerasimova"
-
-#: C/overview.page:24(page/title)
-msgid "Overview of instant messaging"
-msgstr "Présentation de la messagerie instantanée"
-
-#: C/overview.page:26(page/p)
-msgid ""
-"Instant messaging, sometimes abbreviated to IM, is a text-based means to "
-"communicate instantly over the internet and the local network. While some IM "
-"applications work with only one type of account, others, including <link "
-"xref=\"introduction\">Empathy</link>, provide IM facilities by using <link "
-"xref=\"add-account\">accounts</link> from different service providers. Some "
-"of these even support audio and video calling."
-msgstr ""
-"La messagerie instantanée, parfois abrégée « IM », est un moyen textuel de "
-"communiquer instantanément sur Internet et sur le réseau local. Alors que "
-"certaines applications de messagerie fonctionnent avec un seul type de "
-"compte, d'autres, y compris <link xref=\"introduction\">Empathy</link>, "
-"facilitent la communication instantanée en utilisant des <link xref=\"add-"
-"account\">comptes</link> de différents fournisseurs de services. Certains "
-"d'entre eux prennent même en charge les appels audio et vidéo."
-
-#: C/overview.page:42(td/p)
-msgid "Video Conference"
-msgstr "Visioconférence"
-
-#: C/overview.page:43(td/p)
-msgid "Group chats"
-msgstr "Groupes de discussion"
-
-#: C/overview.page:44(td/p)
-msgid "Chat rooms"
-msgstr "Salons de discussion"
-
-#: C/overview.page:48(page/p)
-msgid ""
-"Some instant messaging applications can be used to connect to chat rooms, "
-"online places where like-minded people meet to talk. One popular means to "
-"connect to several chat rooms is the Internet Relay Chat, also known as "
-"<link xref=\"irc-manage\">IRC</link>. IRC provides <link xref=\"irc-join-room"
-"\">public</link> chat rooms, which are open to anyone who creates an account "
-"on the IRC Server, and private chat rooms, which are <link xref=\"irc-join-"
-"pwd\">password protected</link> and open only to a select few."
-msgstr ""
-"Certaines applications de messagerie instantanée peuvent être utilisées pour "
-"se connecter à des salons de discussions où des gens se retrouvent en ligne "
-"pour parler. Une des façons les plus populaires de se connecter aux salons "
-"de discussion est l'Internet Relay Chat, aussi connu sous le nom d'<link "
-"xref=\"irc-manage\">IRC</link>. L'IRC met à disposition des salons de "
-"discussion <link xref=\"irc-join-room\">publics</link> ouverts à toute "
-"personne ayant un compte sur le serveur IRC, ainsi que des salons de "
-"discussion privés qui sont <link xref=\"irc-join-pwd\">protégés par un mot "
-"de passe</link> et ouverts uniquement à certains privilégiés."
-
-#: C/prev-conv.page:8(info/desc)
-msgid "Browse or search your previous conversations."
-msgstr "Parcourir ou rechercher ses conversations précédentes."
-
-#: C/prev-conv.page:36(page/title)
-msgid "View previous conversations"
-msgstr "Affichage des conversations précédentes"
-
-#: C/prev-conv.page:38(page/p)
-msgid ""
-"<app>Empathy</app> automatically saves all your text conversations you have "
-"with your contacts. You can <link xref=\"#search\">search through all of "
-"your previous conversations</link> or <link xref=\"#browse\">browse previous "
-"conversations</link> by contact and date."
-msgstr ""
-"<app>Empathy</app> sauvegarde automatiquement toutes les conversations "
-"textuelles que vous avez eu avec vos contacts. Vous pouvez <link xref="
-"\"#search\">rechercher dans toutes vos conversations précédentes</link> ou "
-"<link xref=\"#browse\">consultez vos conversations précédentes</link> par "
-"contact et par date."
-
-#: C/prev-conv.page:46(note/p)
-msgid ""
-"You do not need to be connected to the Internet to view and search your "
-"previous conversations."
-msgstr ""
-"Vous n'avez pas besoin d'être connecté à Internet pour afficher et "
-"rechercher parmi vos conversations précédentes."
-
-#: C/prev-conv.page:53(section/title)
-msgid "Search previous conversations"
-msgstr "Recherche de conversations précédentes"
-
-#: C/prev-conv.page:55(section/p)
-msgid ""
-"You can perform a full-text search through all of your previous "
-"conversations."
-msgstr ""
-"Vous pouvez lancer une recherche textuelle dans toutes vos conversations "
-"précédentes."
-
-#: C/prev-conv.page:59(item/p) C/prev-conv.page:87(item/p)
-msgid ""
-"From the <gui>Contact List</gui> window, choose <guiseq><gui>View</gui> "
-"<gui>Previous Conversations</gui></guiseq>. Alternatively, press <key>F3</"
-"key>."
-msgstr ""
-"Dans la fenêtre <gui>Liste des contacts</gui>, choisissez "
-"<guiseq><gui>Affichage</gui> <gui>Conversations précédentes</gui></guiseq>, "
-"ou appuyez sur <key>F3</key>."
-
-#: C/prev-conv.page:63(item/p)
-msgid ""
-"Select an account from the drop-down list in the top. A list of contacts and "
-"chat room for that account will be shown below."
-msgstr ""
-"Sélectionnez un compte dans la liste déroulante située en haut de la "
-"fenêtre. Une liste des contacts et des salons de discussion pour ce compte "
-"s'affiche en dessous."
-
-#: C/prev-conv.page:67(item/p)
-msgid ""
-"Type the text you want to search for in the <gui>Search</gui> text field."
-msgstr ""
-"Saisissez le texte que vous voulez rechercher dans le champ <gui>Rechercher</"
-"gui>."
-
-#: C/prev-conv.page:71(item/p)
-msgid ""
-"Any conversations that matched your search terms will be shown. By default, "
-"conversations are ordered by date."
-msgstr ""
-"Toutes les conversations qui correspondent à vos critères de recherche "
-"s'affichent. Par défaut, elles sont classées par date."
-
-#: C/prev-conv.page:80(section/title)
-msgid "Browse previous conversations"
-msgstr "Consultation des conversations précédentes"
-
-#: C/prev-conv.page:82(section/p)
-msgid ""
-"You can browse your previous conversations with your contacts or in chat "
-"rooms by date."
-msgstr ""
-"Vous pouvez parcourir vos conversations précédentes avec vos contacts ou "
-"dans les salons de discussion en fonction de la date."
-
-#: C/prev-conv.page:91(item/p)
-msgid ""
-"Select an account from the drop-down list in the top left. A list of "
-"contacts and chat room for that account will be shown below."
-msgstr ""
-"Sélectionnez un compte dans la liste déroulante en haut à gauche de la "
-"fenêtre. Une liste de contacts et salon de discussion pour ce compte "
-"s'affichent en dessous."
-
-#: C/prev-conv.page:95(item/p)
-msgid ""
-"Select a contact or chat room to view your previous conversations from. By "
-"default the most recent conversation will be shown."
-msgstr ""
-"Sélectionnez un contact ou un salon de discussion pour en afficher vos "
-"conversations précédentes. La conversation la plus récente s'affiche par "
-"défaut."
-
-#: C/prev-conv.page:99(item/p)
-msgid ""
-"You can browse your conversations by date. Days on which you had a "
-"conversation with the selected contact will be shown in bold text. Click a "
-"date to select it. Click the arrows next to the month and year to browse "
-"earlier dates."
-msgstr ""
-"Vous pouvez parcourir vos conversations par date. Les jours où vous avez eu "
-"une conversation avec le contact sélectionné sont affichés en gras. Cliquez "
-"sur une date pour la sélectionner. Cliquez sur les flèches à côté du mois et "
-"de l'année pour parcourir des dates antérieures."
-
-#: C/prev-conv.page:105(section/p)
-msgid ""
-"You can search for text in the conversations by typing into the search field "
-"at the top. The matching conversations will be showed."
-msgstr ""
-"Pour rechercher du texte dans les conversations, saisissez-le dans le champ "
-"de recherche en haut. Les conversations correspondantes s'affichent."
-
-#: C/prev-conv.page:111(note/p)
-msgid ""
-"You can quickly view the previous conversations with one of your contacts "
-"from the <gui>Contact List</gui> window. Simply right click the contact and "
-"choose <gui>Previous Conversations</gui>. The <gui>Previous Conversations</"
-"gui> window will open with that contact already selected."
-msgstr ""
-"Vous pouvez afficher rapidement les conversations précédentes avec l'un de "
-"vos contacts dans la fenêtre <gui>Liste des contacts</gui>. Faites un clic "
-"droit sur le contact puis choisissez <gui>Conversations précédentes</gui>. "
-"La fenêtre <gui>Conversations Précédentes</gui> s'ouvre avec ce contact déjà "
-"sélectionné."
-
-#: C/prob-conn-acctdisabled.page:7(info/desc)
-msgid ""
-"The instant messaging account that you want to use is not enabled in the "
-"list of accounts."
-msgstr ""
-"Le compte de messagerie instantanée que vous souhaitez utiliser est "
-"désactivé dans la liste des comptes."
-
-#: C/prob-conn-acctdisabled.page:34(page/title)
-msgid "My account is not enabled"
-msgstr "Mon compte est désactivé"
-
-#: C/prob-conn-acctdisabled.page:36(page/p)
-msgid ""
-"If the instant messaging account that you want to use is not enabled in the "
-"drop-down account list when you try to start a new conversation or join a "
-"room, your account details may not be correct."
-msgstr ""
-"Si le compte de messagerie instantanée que vous souhaitez utiliser est "
-"désactivé dans la liste déroulante des comptes lorsque vous essayez de "
-"démarrer une nouvelle conversation ou de rejoindre un salon, il se peut que "
-"les détails de votre compte soient incorrects."
-
-#: C/prob-conn-acctdisabled.page:44(item/p) C/prob-conn-auth.page:45(item/p)
-#: C/prob-conn-neterror.page:53(item/p)
-msgid ""
-"Make sure that you are connected to the Internet, or to a local area network."
-msgstr "Assurez-vous que vous êtes connecté à Internet ou à un réseau local."
-
-#: C/prob-conn-acctdisabled.page:49(item/p)
-msgid ""
-"Choose <guiseq><gui>Edit</gui><gui>Accounts</gui></guiseq> and select the "
-"account that is not working."
-msgstr ""
-"Choisissez <guiseq><gui>Édition</gui><gui>Comptes</gui></guiseq> et "
-"sélectionnez le compte qui ne fonctionne pas."
-
-#: C/prob-conn-acctdisabled.page:55(item/p) C/prob-conn-auth.page:63(item/p)
-msgid ""
-"Type your username and password again to make sure that they are correct."
-msgstr ""
-"Saisissez de nouveau votre identifiant de connexion et votre mot de passe "
-"pour vous assurer qu'ils sont corrects."
-
-#: C/prob-conn-acctdisabled.page:60(item/p)
-#: C/prob-conn-neterror.page:64(item/p)
-msgid ""
-"Check in the <gui>Advanced</gui> section that all the details are correct. "
-"You should be able to find these details from the website of the messaging "
-"service."
-msgstr ""
-"Vérifiez dans la partie <gui>Avancé</gui> que tous les détails sont "
-"corrects. Vous devriez être en mesure de trouver ces détails sur le site Web "
-"du service de messagerie."
-
-#: C/prob-conn-acctdisabled.page:66(item/p)
-msgid "Check that the account is switched on."
-msgstr "Vérifiez que le compte est activé."
-
-#: C/prob-conn-auth.page:8(info/desc)
-msgid ""
-"An error message which says “<gui>Authentication failed</gui>” appears in "
-"the main window."
-msgstr ""
-"Le message d'erreur <gui>L'authentification a échoué</gui> apparaît dans la "
-"fenêtre principale."
-
-#: C/prob-conn-auth.page:36(page/title)
-msgid "I get a message that says “Authentication failed”"
-msgstr "Affichage du message « L'authentification a échoué »"
-
-#: C/prob-conn-auth.page:38(page/p)
-msgid ""
-"This kind of error happens when your instant messaging service is not "
-"allowing you to connect because it does not recognize your username or "
-"password for some reason."
-msgstr ""
-"Ce genre d'erreur se produit lorsque votre service de messagerie instantanée "
-"ne vous autorise pas à vous connecter parce qu'il ne reconnaît pas votre "
-"identifiant de connexion ou votre mot de passe pour une certaine raison."
-
-#: C/prob-conn-auth.page:50(item/p)
-msgid ""
-"Make sure that you have registered an account with the service you are "
-"trying to connect to. If you do not have an account, most services will not "
-"allow you to connect."
-msgstr ""
-"Assurez-vous que vous avez enregistré un compte pour le service auquel vous "
-"essayez de vous connecter. Si vous n'avez pas de compte, la plupart des "
-"services ne vous permettent pas de vous connecter."
-
-#: C/prob-conn-auth.page:57(item/p) C/prob-conn-name.page:43(item/p)
-#: C/prob-conn-neterror.page:58(item/p)
-msgid ""
-"Click the <media type=\"image\" mime=\"image/png\" src=\"figures/gtk-edit.png"
-"\">edit</media> icon in the error message."
-msgstr ""
-"Cliquez sur <media type=\"image\" mime=\"image/png\" src=\"figures/gtk-edit."
-"png\">éditer</media> dans le message d'erreur."
-
-#: C/prob-conn-auth.page:68(item/p)
-msgid ""
-"Deselect the <gui>Enabled</gui>, and then select it again to try to "
-"reconnect to the service."
-msgstr ""
-"Déconnectez puis reconnectez-vous pour essayer de vous reconnecter au "
-"service."
-
-#: C/prob-conn-name.page:9(info/title)
-msgctxt "link:error-msg"
-msgid "“Name in use”"
-msgstr "« Nom déjà utilisé »"
-
-#: C/prob-conn-name.page:10(info/desc)
-msgid ""
-"An error message which says “<gui>Name in use</gui>” appears in the main "
-"window."
-msgstr ""
-"Le message d'erreur <gui>Nom déjà utilisé</gui> s'affiche dans la fenêtre "
-"principale."
-
-#: C/prob-conn-name.page:33(page/title)
-msgid "I get a message that says “Name in use”"
-msgstr "Affichage du message « Nom utilisé »"
-
-#: C/prob-conn-name.page:35(page/p)
-msgid ""
-"This kind of error happens when you try to connect to your IRC account and "
-"you are using a nickname that is already being used by someone else on that "
-"particular network."
-msgstr ""
-"Ce type d'erreur s'affiche quand vous essayez de vous connecter à votre "
-"compte IRC avec un pseudonyme déjà utilisé par quelqu'un d'autre sur ce "
-"réseau."
-
-#: C/prob-conn-name.page:51(item/p)
-msgid "In the <gui>Nickname</gui> text box, type a new nickname."
-msgstr "Saisissez un nouveau <gui>Pseudonyme</gui> dans le champ texte."
-
-#: C/prob-conn-name.page:56(item/p)
-msgid ""
-"If you have registered that nickname within the network you are using, set "
-"the password for that nickname. For more information, see <link xref=\"irc-"
-"nick-password\"/>."
-msgstr ""
-"Si vous aviez enregistré ce pseudonyme sur ce réseau, saisissez le mot de "
-"passe adéquat. Consultez <link xref=\"irc-nick-password\"/> pour plus "
-"d'informations."
-
-#: C/prob-conn-name.page:65(item/p) C/prob-conn-neterror.page:79(item/p)
-msgid ""
-"Switch the account off, and then switch it on to try to reconnect to the "
-"service."
-msgstr ""
-"Déconnectez puis reconnectez-vous pour essayer de vous reconnecter au "
-"service."
-
-#: C/prob-conn-neterror.page:7(info/desc)
-msgid ""
-"An error message which says “<gui>Network error</gui>” appears in the main "
-"window."
-msgstr ""
-"Le message d'erreur <gui>Erreur réseau</gui> s'affiche dans la fenêtre "
-"principale."
-
-#: C/prob-conn-neterror.page:34(page/title)
-msgid "I get a message that says “Network error”"
-msgstr "Affichage du message « Erreur réseau »"
-
-#: C/prob-conn-neterror.page:42(page/p)
-msgid ""
-"This kind of error happens when <app>Empathy</app> cannot communicate with "
-"the instant messaging service for some reason."
-msgstr ""
-"Ce genre d'erreur se produit lorsque <app>Empathy</app> ne peut pas "
-"communiquer avec le service de messagerie instantanée pour une quelconque "
-"raison."
-
-#: C/prob-conn-neterror.page:46(page/p)
-msgid ""
-"Also, this kind of error happens when you try to use an IRC account without "
-"setting a nickname."
-msgstr ""
-"Ce type d'erreur se produit également lorsque vous essayez d'utiliser un "
-"compte IRC sans définir un pseudonyme."
-
-#: C/prob-conn-neterror.page:87(section/title)
-msgid "Proxy support"
-msgstr "Prise en charge d'un serveur mandataire"
-
-#: C/prob-conn-neterror.page:88(section/p)
-msgid ""
-"At the moment <app>Empathy</app> can not be configured to work with a proxy."
-msgstr ""
-"Pour le moment, <app>Empathy</app> ne peut pas être configuré pour "
-"fonctionner avec un serveur mandataire."
-
-#: C/prob-conn.page:7(info/desc)
-msgid "Diagnose common problems connecting to an instant messaging service."
-msgstr ""
-"Diagnostiquer les problèmes de connexion à un service de messagerie "
-"instantanée."
-
-#: C/prob-conn.page:29(page/title)
-msgid "Problems connecting to an instant messaging service"
-msgstr "Problèmes de connexion à un service de messagerie instantanée"
-
-#: C/remove-account.page:8(info/desc)
-msgid "Completely remove an account from <app>Empathy</app>."
-msgstr "Supprimer complètement un compte d'<app>Empathy</app>."
-
-#: C/remove-account.page:34(page/title)
-msgid "Remove an account"
-msgstr "Suppression d'un compte"
-
-#: C/remove-account.page:36(page/p)
-msgid ""
-"You can completely remove an account from <app>Empathy</app> if you no "
-"longer wish to use the account. If you wish to use the account in "
-"<app>Empathy</app> again in the future, you will have to add your account "
-"details again."
-msgstr ""
-"Vous pouvez supprimer complètement un compte d'<app>Empathy</app> si vous ne "
-"souhaitez plus l'utiliser. Si vous souhaitez l'utiliser de nouveau sur "
-"<app>Empathy</app> à l'avenir, vous devrez ajouter votre compte à nouveau."
-
-#: C/remove-account.page:47(item/p)
-msgid ""
-"Select the account you wish to remove from the accounts list on the left "
-"side of the window."
-msgstr ""
-"Sélectionnez le compte que vous souhaitez supprimer de la liste des comptes "
-"dans la partie gauche de la fenêtre."
-
-#: C/remove-account.page:51(item/p)
-msgid "Click <gui style=\"button\">-</gui>."
-msgstr "Cliquez sur <gui style=\"button\">-</gui>."
-
-#: C/remove-account.page:54(item/p)
-msgid ""
-"A dialog will be shown asking for confirmation. Click the <gui>Remove</gui> "
-"button to permanently remove the account."
-msgstr ""
-"Une boîte de dialogue s'affiche pour vous demander confirmation. Cliquez sur "
-"le bouton <gui>Supprimer</gui> pour supprimer définitivement le compte."
-
-#: C/remove-account.page:60(note/p)
-msgid ""
-"Even after removing an account, <app>Empathy</app> does not delete your "
-"conversation history for that account."
-msgstr ""
-"Même après la suppression d'un compte, <app>Empathy</app> ne supprime pas "
-"les historiques de conversation qui lui sont associés."
-
-#: C/salut-protocol.page:8(info/desc)
-msgid "Understanding the People Nearby feature."
-msgstr "Comprendre la fonction « Personnes à proximité »."
-
-#: C/salut-protocol.page:33(page/title)
-msgid "What is People Nearby?"
-msgstr "Personnes à proximité"
-
-#: C/salut-protocol.page:40(page/p)
-msgid ""
-"The People Nearby service is a serverless communication service: you do not "
-"need to connect and authenticate to a central server in order to use it."
-msgstr ""
-"Le service « Personnes à proximité » est un service de communication sans "
-"serveur : vous n'avez pas besoin de vous connecter et de vous authentifier "
-"auprès d'un serveur central pour l'utiliser."
-
-#: C/salut-protocol.page:45(page/p)
-msgid ""
-"This kind of serverless messaging system is restricted to a local area "
-"network and an active Internet connection is not necessary."
-msgstr ""
-"Ce type de système de messagerie sans serveur est limité à un réseau local "
-"et donc une connexion active à Internet n'est pas nécessaire."
-
-#: C/salut-protocol.page:49(page/p)
-msgid ""
-"The people that use this service inside the same local area network will be "
-"auto-discovered, and it will be possible to send them messages and files as "
-"with other services."
-msgstr ""
-"Les personnes utilisant ce service à l'intérieur d'un même réseau local sont "
-"découvertes automatiquement et il est possible de leur envoyer des messages "
-"et des fichiers comme avec d'autres services."
-
-#: C/salut-protocol.page:54(page/p)
-msgid ""
-"All the modern local area networks should be able to support this kind of "
-"service."
-msgstr ""
-"Tous les réseaux locaux modernes devraient être en mesure de prendre en "
-"charge ce genre de service."
-
-#: C/send-file.page:8(info/desc)
-msgid "Send a file from your computer to one of your contacts."
-msgstr "Envoyer un fichier de votre ordinateur à l'un de vos contacts."
-
-#: C/send-file.page:36(page/title)
-msgid "Send files"
-msgstr "Envoi de fichiers"
-
-#: C/send-file.page:45(item/p)
-msgid ""
-"Right click on the contact you want to send a file to, and choose <gui>Send "
-"file</gui>."
-msgstr ""
-"Faites un clic droit sur le contact à qui vous voulez envoyer un fichier et "
-"sélectionnez <gui>Envoyer un fichier</gui>."
-
-#: C/send-file.page:50(item/p)
-msgid ""
-"Click on the contact you want to send a file, and choose <guiseq><gui>Edit</"
-"gui> <gui>Contact</gui><gui>Send file</gui></guiseq>."
-msgstr ""
-"Cliquez sur le contact à qui vous voulez envoyer un fichier et choisissez "
-"<guiseq><gui>Édition</gui><gui>Contact</gui><gui>Envoyer un fichier</gui></"
-"guiseq>."
-
-#: C/send-file.page:58(item/p)
-msgid "Select the file to send, and click on <gui>Send</gui>."
-msgstr "Sélectionnez le fichier à envoyer et cliquez sur <gui>Envoyer</gui>."
-
-#: C/send-file.page:63(item/p)
-msgid "The <gui>File Transfers</gui> window will appear."
-msgstr "La fenêtre <gui>Transferts de fichiers</gui> s'affiche."
-
-#: C/send-file.page:66(item/p)
-msgid ""
-"Wait for your contact to accept the file transfer, or click <gui>Stop</gui> "
-"to halt the transfer."
-msgstr ""
-"Attendez que votre contact accepte le transfert de fichier, ou cliquez sur "
-"<gui>Arrêter</gui> pour stopper le transfert."
-
-#: C/send-file.page:72(item/p)
-msgid ""
-"Once the transfer is finished, it is possible to close the <gui>File "
-"Transfers</gui> window."
-msgstr ""
-"Une fois que le transfert est terminé, vous pouvez fermer la fenêtre "
-"<gui>Transferts de fichiers</gui>."
-
-#: C/send-file.page:80(note/p)
-msgid ""
-"If you have multiple finished transfers listed in the window, click on "
-"<gui>Clear</gui> to empty the list. This will only remove the files from the "
-"list and will not delete them from your computer."
-msgstr ""
-"Si vous avez plusieurs transferts terminés listés dans la fenêtre, cliquez "
-"sur <gui>Effacer</gui> pour vider la liste. Cela supprimera les fichiers "
-"uniquement dans la liste mais pas de votre ordinateur."
-
-#: C/send-file.page:87(note/p)
-msgid ""
-"It is possible to send files only using the following services: <em>Jabber</"
-"em>, <em>Google Talk</em> and <em>People Nearby</em>."
-msgstr ""
-"Il est possible d'envoyer des fichiers uniquement en utilisant les services "
-"suivants : <em>Jabber</em>, <em>Google Talk</em> et <em>Personnes à "
-"proximité</em>."
-
-#: C/send-file.page:93(note/p)
-msgid ""
-"In order to send a file to someone, you need to be connected to the "
-"Internet, or to a local area network."
-msgstr ""
-"Pour envoyer un fichier à quelqu'un, vous devez être connecté à Internet ou "
-"à un réseau local."
-
-#: C/send-message.page:8(info/desc)
-msgid "Send a message to one of your contacts."
-msgstr "Envoyer un message à l'un de ses contacts."
-
-#: C/send-message.page:32(page/title)
-msgid "Send a message to someone"
-msgstr "Envoi d'un message à quelqu'un"
-
-#: C/send-message.page:36(item/p)
-msgid ""
-"From the <gui>Contact List</gui> window, double-click the name of the "
-"contact that you want to have a conversation with."
-msgstr ""
-"Dans la fenêtre <gui>Liste des contacts</gui>, faites un double clic sur le "
-"nom du contact avec qui vous voulez entamer une conversation."
-
-#: C/send-message.page:42(item/p)
-msgid ""
-"A new window will open. Type a message into the box at the bottom of the "
-"window and press <key>Enter</key> to send it."
-msgstr ""
-"Une nouvelle fenêtre s'ouvre. Saisissez le message dans la boîte de dialogue "
-"en bas de la fenêtre et appuyez sur <key>Entrée</key> pour l'envoyer."
-
-#: C/send-message.page:50(section/title)
-msgid "Send a message to a meta-contact"
-msgstr "Envoi d'un message à un méta-contact"
-
-#: C/send-message.page:58(item/p)
-msgid ""
-"Select the contact you want to have the conversation, and from the menu "
-"select <gui style=\"menuitem\">Chat</gui>."
-msgstr ""
-"Sélectionnez le contact avec qui vous voulez entamer une conversation et à "
-"partir du menu, sélectionnez <gui style=\"menuitem\">Discussion</gui>."
-
-#: C/set-custom-status.page:9(info/desc)
-msgid "Add, edit or delete personal messages for your status."
-msgstr ""
-"Ajouter, modifier ou supprimer les messages personnalisés pour votre état."
-
-#: C/set-custom-status.page:15(credit/name)
-msgid "Jim Campbell"
-msgstr "Jim Campbell"
-
-#: C/set-custom-status.page:34(page/title)
-msgid "Set a custom message"
-msgstr "Définition d'un message personnalisé"
-
-#: C/set-custom-status.page:36(page/p)
-msgid ""
-"Sometimes you may want to set a custom message for your status, for example "
-"to let people know that you will be unavailable for a certain period of time."
-msgstr ""
-"Parfois vous souhaitez définir un message personnalisé pour votre état, par "
-"exemple pour que les gens sachent que vous ne serez pas disponible pendant "
-"une certaine période de temps."
-
-#: C/set-custom-status.page:40(page/p)
-msgid ""
-"It is possible to set a custom message based on the different statuses "
-"available."
-msgstr ""
-"Il est possible d'associer un message personnalisé à chaque état disponible."
-
-#: C/set-custom-status.page:46(item/p) C/set-custom-status.page:82(item/p)
-msgid ""
-"From the <gui>Contact List</gui> window, click on the drop-down list at the "
-"top."
-msgstr ""
-"Dans la fenêtre <gui>Liste des contacts</gui>, cliquez sur la liste "
-"déroulante du haut."
-
-#: C/set-custom-status.page:52(item/p)
-msgid ""
-"Select the status you want to add a custom message to. You have to select "
-"the one identified with the label <gui>Custom Message</gui>."
-msgstr ""
-"Sélectionnez l'état auquel vous voulez ajouter un message personnalisé. Vous "
-"devez sélectionner celui qui est identifié par l'étiquette <gui>Message "
-"personnalisé</gui>."
-
-#: C/set-custom-status.page:58(item/p)
-msgid ""
-"Enter your custom message in the text box at the top of the window, and "
-"press <key>Enter</key> to set the message."
-msgstr ""
-"Saisissez votre message personnalisé dans la boîte de dialogue en haut de la "
-"fenêtre et appuyez sur <key>Entrée</key> pour définir le message."
-
-#: C/set-custom-status.page:64(item/p)
-msgid ""
-"If you want to set the custom message as a favorite, saving it in order to "
-"use it again, click on the little heart on the right of the text box where "
-"you wrote your custom message."
-msgstr ""
-"Si vous voulez définir le message personnalisé comme un favori et "
-"l'enregistrer pour pouvoir le réutiliser, cliquez sur le petit cœur à droite "
-"de la boîte de dialogue où vous avez saisi votre message personnalisé."
-
-#: C/set-custom-status.page:69(item/p)
-msgid ""
-"If you do not do it, the custom message will not be available the next time "
-"you use <app>Empathy</app>. It will be saved only for the current session."
-msgstr ""
-"Si vous ne le faites pas, le message personnalisé ne sera pas disponible à "
-"la prochaine ouverture d'<app>Empathy</app>. Il n'est conservé que pour la "
-"session actuelle."
-
-#: C/set-custom-status.page:78(section/title)
-msgid "Edit and remove a custom message"
-msgstr "Modification et suppression d'un message personnalisé"
-
-#: C/set-custom-status.page:88(item/p)
-msgid "Select <gui>Edit Custom Message</gui>."
-msgstr "Sélectionnez <gui>Édition des messages personnalisés</gui>."
-
-#: C/set-custom-status.page:95(item/p)
-msgid "To edit a custom message:"
-msgstr "Pour modifier un message personnalisé :"
-
-#: C/set-custom-status.page:100(item/p)
-msgid ""
-"From the <gui>Saved Presets</gui> box, select the status message you want to "
-"edit and double-click on it."
-msgstr ""
-"Dans la fenêtre <gui>Édition des messages personnalisés</gui>, sélectionnez "
-"le message d'état que vous voulez modifier et faites un double clic dessus."
-
-#: C/set-custom-status.page:106(item/p)
-msgid "Type the new custom message and press <key>Enter</key> to modify it."
-msgstr ""
-"Saisissez le nouveau message personnalisé et appuyez sur <key>Entrée</key> "
-"pour le modifier."
-
-#: C/set-custom-status.page:113(item/p)
-msgid "To remove a custom message:"
-msgstr "Pour supprimer un message personnalisé :"
-
-#: C/set-custom-status.page:118(item/p)
-msgid ""
-"From the <gui>Saved Presets</gui> box, select the status message you want to "
-"remove."
-msgstr ""
-"Dans la fenêtre <gui>Édition des messages personnalisés</gui>, sélectionnez "
-"le message d'état que vous voulez supprimer."
-
-#: C/set-custom-status.page:124(item/p)
-msgid "Click on the <gui>Remove</gui> button."
-msgstr "Cliquez sur le bouton <gui>Enlever</gui>."
-
-#: C/set-custom-status.page:133(item/p)
-msgid "When finished, click on <gui>Close</gui>."
-msgstr "Quand vous avez terminé, cliquez sur <gui>Fermer</gui>."
-
-#: C/set-custom-status.page:140(note/p)
-msgid ""
-"When you edit a custom message, it will not be set as the current status "
-"message. You will need to select it from the <gui>Contact List</gui> window."
-msgstr ""
-"Quand vous modifiez un message personnalisé, il n'est pas défini comme "
-"message de l'état actuel. Vous devez le sélectionner à partir de la fenêtre "
-"<gui>Liste des contacts</gui>."
-
-#: C/share-desktop.page:7(info/desc)
-msgid "Show your desktop to your contacts."
-msgstr "Montrer son bureau à ses contacts."
-
-#: C/share-desktop.page:33(page/title)
-msgid "Share your desktop"
-msgstr "Partage de votre bureau"
-
-#: C/share-desktop.page:35(page/p)
-msgid ""
-"It is possible to share your desktop with some of your contacts. You can use "
-"this functionality to show your desktop to your contacts to, for example, "
-"ask for help or help your contacts resolve a problem."
-msgstr ""
-"Il est possible de partager votre bureau avec certains de vos contacts. Vous "
-"pouvez utiliser cette fonctionnalité pour montrer votre bureau à vos "
-"contacts pour, par exemple, demander de l'aide ou aider vos contacts à "
-"résoudre un problème."
-
-#: C/share-desktop.page:42(note/p)
-msgid ""
-"To be able to share your desktop, you need to have a VNC server, which has "
-"support for the feature, installed on your system. <app>Vino</app>, the "
-"GNOME VNC server, has the required support."
-msgstr ""
-"Pour pouvoir partager votre bureau, vous devez avoir un serveur VNC qui "
-"prend en charge cette fonctionnalité, installé sur votre système. <app>Vino</"
-"app>, le serveur VNC de GNOME, dispose du support nécessaire."
-
-#: C/share-desktop.page:51(item/p)
-msgid "From the <gui>Contact List</gui> window, do one of the following:"
-msgstr ""
-"Dans la fenêtre <gui>Liste des contacts</gui>, faites l'une des actions "
-"suivantes :"
-
-#: C/share-desktop.page:56(item/p)
-msgid ""
-"Select the contact you want to share your desktop with and choose "
-"<guiseq><gui>Edit</gui><gui>Contact</gui> <gui>Share My Desktop</gui></"
-"guiseq>."
-msgstr ""
-"Sélectionnez le contact avec qui vous voulez partager votre bureau et "
-"choisissez <guiseq><gui>Édition</gui><gui>Contact</gui><gui>Partager mon "
-"bureau</gui></guiseq>."
-
-#: C/share-desktop.page:63(item/p)
-msgid ""
-"Right-click on the name of the contact you want to share your desktop with "
-"and select <gui>Share My Desktop</gui>."
-msgstr ""
-"Faites un clic droit sur le nom du contact avec qui vous voulez partager "
-"votre bureau et sélectionnez <gui>Partager mon bureau</gui>."
-
-#: C/share-desktop.page:71(item/p)
-msgid ""
-"An invitation to view your desktop will be sent to the contact you have "
-"selected. To view your desktop, they will need to accept it."
-msgstr ""
-"Une invitation à voir votre bureau est envoyée au contact que vous avez "
-"sélectionné. Pour afficher votre bureau, il doit accepter l'invitation."
-
-#: C/share-desktop.page:77(item/p)
-msgid ""
-"You can disconnect the contact from your computer using your desktop sharing "
-"application."
-msgstr ""
-"Vous pouvez déconnecter le contact depuis votre ordinateur en utilisant "
-"votre application de partage de bureau."
-
-#: C/share-desktop.page:82(note/p)
-msgid ""
-"For more information about how to use the remote desktop sharing "
-"application, refer to its help."
-msgstr ""
-"Pour plus d'informations sur la façon d'utiliser l'application de partage de "
-"bureau distant, référez-vous à son manuel d'aide."
-
-#: C/share-desktop.page:90(page/p)
-msgid ""
-"When you share your desktop with someone else, it is possible to experience "
-"system performance slowdown and low Internet speed."
-msgstr ""
-"Lorsque vous partagez votre bureau avec quelqu'un d'autre, il est possible "
-"de constater un ralentissement des performances du système et du réseau."
-
-#: C/share-desktop.page:96(note/p)
-msgid ""
-"Some of your contacts may not be able to use this feature. It is necessary "
-"for them to have version 2.28, or newer, of <app>Empathy</app> and a "
-"compatible remote desktop viewer application installed in their system."
-msgstr ""
-"Certains de vos contacts peuvent ne pas être en mesure d'utiliser cette "
-"fonctionnalité. Il leur est nécessaire de disposer au minimum de la version "
-"2.28 d'<app>Empathy</app> et d'une application compatible avec l'affichage "
-"de bureau distant, installée sur leur système."
-
-#. This is a reference to an external file such as an image or video. When
-#. the file changes, the md5 hash will change to let you know you need to
-#. update your localized copy. The msgstr is not used at all. Set it to
-#. whatever you like once you have updated your copy of the file.
-#: C/status-icons.page:39(media)
-msgctxt "_"
-msgid ""
-"external ref='figures/available.png' md5='2196b2f0ad4ce26fdb7b9d48e75d1947'"
-msgstr ""
-"external ref='figures/available.png' md5='2196b2f0ad4ce26fdb7b9d48e75d1947'"
-
-#. This is a reference to an external file such as an image or video. When
-#. the file changes, the md5 hash will change to let you know you need to
-#. update your localized copy. The msgstr is not used at all. Set it to
-#. whatever you like once you have updated your copy of the file.
-#: C/status-icons.page:45(media)
-msgctxt "_"
-msgid "external ref='figures/busy.png' md5='15eb2adff5faedf97b0cb9105d09410a'"
-msgstr "external ref='figures/busy.png' md5='15eb2adff5faedf97b0cb9105d09410a'"
-
-#. This is a reference to an external file such as an image or video. When
-#. the file changes, the md5 hash will change to let you know you need to
-#. update your localized copy. The msgstr is not used at all. Set it to
-#. whatever you like once you have updated your copy of the file.
-#: C/status-icons.page:53(media)
-msgctxt "_"
-msgid "external ref='figures/away.png' md5='9c504d6ffa0cf1a9cc8933d16e1bea33'"
-msgstr "external ref='figures/away.png' md5='9c504d6ffa0cf1a9cc8933d16e1bea33'"
-
-#. This is a reference to an external file such as an image or video. When
-#. the file changes, the md5 hash will change to let you know you need to
-#. update your localized copy. The msgstr is not used at all. Set it to
-#. whatever you like once you have updated your copy of the file.
-#.
-#. This is a reference to an external file such as an image or video. When
-#. the file changes, the md5 hash will change to let you know you need to
-#. update your localized copy. The msgstr is not used at all. Set it to
-#. whatever you like once you have updated your copy of the file.
-#: C/status-icons.page:62(media) C/status-icons.page:69(media)
-msgctxt "_"
-msgid ""
-"external ref='figures/offline.png' md5='c5b0c21181cbd6e13f8909243c0fa964'"
-msgstr ""
-"external ref='figures/offline.png' md5='c5b0c21181cbd6e13f8909243c0fa964'"
-
-#: C/status-icons.page:7(info/desc)
-msgid "Understanding the various statuses and status icons."
-msgstr "Comprendre les différents états et leurs icônes respectives."
-
-#: C/status-icons.page:35(page/title)
-msgid "Status Types and Icons"
-msgstr "Types d'états et icônes"
-
-#: C/status-icons.page:39(item/title)
-msgid ""
-"<media type=\"image\" mime=\"image/png\" src=\"figures/available.png"
-"\">Available icon</media> <gui>Available</gui>"
-msgstr ""
-"<media type=\"image\" mime=\"image/png\" src=\"figures/available.png\">Icône "
-"Disponible</media> <gui>Disponible</gui>"
-
-#: C/status-icons.page:41(item/p)
-msgid ""
-"Use the <em>Available</em> status when you are at your computer and able to "
-"chat with your contacts. You can set a custom message for this status."
-msgstr ""
-"Utilisez l'état <em>Disponible</em> quand vous êtes sur votre ordinateur et "
-"enclin à discuter avec vos contacts. Vous pouvez définir un message "
-"personnalisé pour cet état."
-
-#: C/status-icons.page:45(item/title)
-msgid ""
-"<media type=\"image\" mime=\"image/png\" src=\"figures/busy.png\">Busy icon</"
-"media> <gui>Busy</gui>"
-msgstr ""
-"<media type=\"image\" mime=\"image/png\" src=\"figures/busy.png\">icône "
-"Occupé</media> <gui>Occupé</gui>"
-
-#: C/status-icons.page:47(item/p)
-msgid ""
-"Use the <em>Busy</em> status to let your contacts know that you don’t want "
-"to chat right now. They can still contact you, for instance if they have "
-"something urgent they need to discuss. By default, <app>Empathy</app> will "
-"not use notification bubbles and sounds when you are busy. You can set a "
-"custom message for this status."
-msgstr ""
-"Utilisez l'état <em>Occupé</em> quand vous souhaitez informer vos contacts "
-"que vous ne pouvez pas discuter pour le moment. Ils peuvent toujours vous "
-"contacter, par exemple s'ils ont besoin de discuter de quelque chose "
-"d'urgent. Par défaut, <app>Empathy</app> ne fait pas usage de bulles de "
-"notification et de sons lorsque vous êtes occupé. Vous pouvez définir un "
-"message personnalisé pour cet état."
-
-#: C/status-icons.page:53(item/title)
-msgid ""
-"<media type=\"image\" mime=\"image/png\" src=\"figures/away.png\">Away icon</"
-"media> <gui>Away</gui>"
-msgstr ""
-"<media type=\"image\" mime=\"image/png\" src=\"figures/away.png\">icône "
-"Absent</media> <gui>Absent</gui>"
-
-#: C/status-icons.page:55(item/p)
-msgid ""
-"Use the <em>Away</em> status when you are going away from your computer. "
-"<app>Empathy</app> automatically sets your status to Away if you do not use "
-"your computer for a while, or if your screensaver is on. By default, "
-"<app>Empathy</app> will not use notification bubbles and sounds when you are "
-"away. You can set a custom message for this status."
-msgstr ""
-"Utilisez l'état <em>Absent</em> quand vous n'êtes pas à portée de votre "
-"ordinateur. <app>Empathy</app> définit automatiquement votre état à Absent "
-"si vous n'utilisez pas votre ordinateur pendant un certain temps ou si votre "
-"écran de veille est actif. Par défaut, <app>Empathy</app> ne fait pas usage "
-"de bulles de notification et de sons lorsque vous êtes absent. Vous pouvez "
-"définir un message personnalisé pour cet état."
-
-#: C/status-icons.page:62(item/title)
-msgid ""
-"<media type=\"image\" mime=\"image/png\" src=\"figures/offline.png\">Offline "
-"icon</media> <gui>Invisible</gui>"
-msgstr ""
-"<media type=\"image\" mime=\"image/png\" src=\"figures/offline.png\">icône "
-"Hors-ligne</media> <gui>Invisible</gui>"
-
-#: C/status-icons.page:64(item/p)
-msgid ""
-"When you set your status to <em>Invisible</em>, you will appear as offline "
-"to your contacts. You will still be connected to your accounts, and you "
-"still see your contacts’ statuses and start conversations with them."
-msgstr ""
-"Quand vous définissez votre état à <em>Invisible</em>, vous apparaissez "
-"comme hors-ligne à vos contacts. Vous êtes encore connecté à vos comptes, et "
-"vous pouvez encore voir les états de vos contacts et engager des "
-"conversations avec eux."
-
-#: C/status-icons.page:69(item/title)
-msgid ""
-"<media type=\"image\" mime=\"image/png\" src=\"figures/offline.png\">Offline "
-"icon</media> <gui>Offline</gui>"
-msgstr ""
-"<media type=\"image\" mime=\"image/png\" src=\"figures/offline.png\">Hors-"
-"ligne icon</media> <gui>Déconnecté</gui>"
-
-#: C/status-icons.page:71(item/p)
-msgid ""
-"Setting your status to <em>Offline</em> disconnects you from all of your "
-"accounts."
-msgstr ""
-"Définissez votre état à <em>Déconnecté</em> pour vous déconnecter de tous "
-"vos comptes."
-
-#: C/video-call.page:10(info/desc)
-msgid "Start a video conversation with one of your contacts."
-msgstr "Démarrer une conversation vidéo avec l'un de ses contacts."
-
-#: C/video-call.page:29(page/title)
-msgid "Start a video conversation"
-msgstr "Démarrage d'une conversation vidéo"
-
-#: C/video-call.page:31(page/p)
-msgid ""
-"If you have a webcam, you can call your contacts and have a video "
-"conversation with them. This feature only works with certain types of "
-"accounts, and it requires the other person to have an application that "
-"supports video calls."
-msgstr ""
-"Si vous avez une webcam, vous pouvez appeler vos contacts et avoir une "
-"conversation vidéo avec eux. Cette fonctionnalité fonctionne uniquement avec "
-"certains types de compte et il est nécessaire que l'autre personne possède "
-"également une application qui prenne en charge les appels vidéo."
-
-#: C/video-call.page:38(item/p)
-msgid ""
-"From the <gui>Contact List</gui> window, click the <media type=\"image\" "
-"mime=\"image/png\" src=\"figures/camera-web.png\">video call</media> icon "
-"next to the name of the contact you wish to call and choose <gui style="
-"\"menuitem\">Video Call</gui>."
-msgstr ""
-"Dans la fenêtre <gui>Liste des contacts</gui>, cliquez sur l'icône <media "
-"type=\"image\" mime=\"image/png\" src=\"figures/camera-web.png\">appel "
-"vidéo</media> à côté du nom du contact que vous voulez appeler et choisissez "
-"<gui style=\"menuitem\">Appel vidéo</gui>."
-
-#: C/video-call.page:55(note/p)
-msgid ""
-"To turn a video conversation into an audio conversation, choose <guiseq><gui "
-"style=\"menu\">Video</gui><gui style=\"menuitem\">Video Off</gui></guiseq>."
-msgstr ""
-"Pour basculer une conversation vidéo en conversation audio, sélectionnez "
-"<guiseq><gui style=\"menu\">Vidéo</gui><gui style=\"menuitem\">Vidéo "
-"désactivée</gui></guiseq>."
-
-#: C/video-call.page:61(section/title)
-msgid "Start a video conversation with a meta-contact"
-msgstr "Démarrage d'une conversation vidéo avec un méta-contact"
-
-#: C/video-call.page:69(item/p)
-msgid ""
-"Select the contact you want to have the conversation, and from the menu "
-"select <gui style=\"menuitem\">Video Call</gui>."
-msgstr ""
-"Sélectionnez le contact avec qui vous voulez avoir la conversation, et "
-"sélectionnez <gui style=\"menuitem\">Appel vidéo</gui> dans le menu."
diff --git a/help/gl/gl.po b/help/gl/gl.po
deleted file mode 100644
index 179f84f5..00000000
--- a/help/gl/gl.po
+++ /dev/null
@@ -1,4269 +0,0 @@
-# Galician translation for tomboy.
-# Copyright (C) 2011 tomboy's COPYRIGHT HOLDER
-# This file is distributed under the same license as the tomboy package.
-# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
-# Fran Diéguez <frandieguez@gnome.org>, 2011.
-# Fran Dieguez <frandieguez@gnome.org>, 2011, 2012.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: tomboy gnome-2-28\n"
-"POT-Creation-Date: 2012-02-17 15:08+0000\n"
-"PO-Revision-Date: 2012-02-25 15:54+0100\n"
-"Last-Translator: Fran Dieguez <frandieguez@gnome.org>\n"
-"Language-Team: Galician <gnome-l10n-gl@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"
-
-#. Put one translator per line, in the form NAME <EMAIL>, YEAR1, YEAR2
-#| msgid "translator-credits"
-msgctxt "_"
-msgid "translator-credits"
-msgstr "Fran Dieguez <frandieguez@gnome.org>, 2011-2012."
-
-#. This is a reference to an external file such as an image or video. When
-#. the file changes, the md5 hash will change to let you know you need to
-#. update your localized copy. The msgstr is not used at all. Set it to
-#. whatever you like once you have updated your copy of the file.
-#.
-#. This is a reference to an external file such as an image or video. When
-#. the file changes, the md5 hash will change to let you know you need to
-#. update your localized copy. The msgstr is not used at all. Set it to
-#. whatever you like once you have updated your copy of the file.
-#: C/index.page:28(media)
-#| msgid ""
-#| "@@image: 'figures/empathy-logo.png'; md5=1afc419a644e90b16393807e35cb5cb2"
-msgctxt "_"
-msgid ""
-"external ref='figures/empathy-logo.png' "
-"md5='1afc419a644e90b16393807e35cb5cb2'"
-msgstr ""
-"external ref='figures/empathy-logo.png' "
-"md5='1afc419a644e90b16393807e35cb5cb2'"
-
-#: C/index.page:7(info/title)
-#| msgid "Empathy Internet Messenger"
-msgctxt "link"
-msgid "Empathy Internet Messenger"
-msgstr "Mensaxaría da Internet Empathy"
-
-#: C/index.page:8(info/title)
-#| msgid "Empathy Internet Messenger"
-msgctxt "text"
-msgid "Empathy Internet Messenger"
-msgstr "Mensaxaría da Internet Empathy"
-
-#: C/index.page:19(credit/name) C/add-account.page:21(credit/name)
-#: C/audio-call.page:19(credit/name) C/audio-video.page:17(credit/name)
-#: C/create-account.page:19(credit/name)
-#: C/disable-account.page:21(credit/name)
-#: C/favorite-rooms.page:14(credit/name) C/geolocation.page:17(credit/name)
-#: C/geolocation-not-showing.page:17(credit/name)
-#: C/geolocation-privacy.page:17(credit/name)
-#: C/geolocation-supported.page:16(credit/name)
-#: C/geolocation-turn.page:18(credit/name)
-#: C/geolocation-what-is.page:18(credit/name)
-#: C/group-conversations.page:19(credit/name)
-#: C/hide-contacts.page:11(credit/name) C/import-account.page:23(credit/name)
-#: C/introduction.page:13(credit/name) C/irc-commands.page:10(credit/name)
-#: C/irc-join-pwd.page:17(credit/name) C/irc-join-room.page:16(credit/name)
-#: C/irc-manage.page:19(credit/name) C/irc-nick-password.page:18(credit/name)
-#: C/irc-send-file.page:16(credit/name)
-#: C/irc-start-conversation.page:15(credit/name)
-#: C/link-contacts.page:15(credit/name) C/prev-conv.page:17(credit/name)
-#: C/prob-conn-acctdisabled.page:19(credit/name)
-#: C/prob-conn-auth.page:21(credit/name) C/prob-conn-name.page:18(credit/name)
-#: C/prob-conn-neterror.page:19(credit/name)
-#: C/remove-account.page:19(credit/name) C/salut-protocol.page:18(credit/name)
-#: C/send-file.page:21(credit/name) C/set-custom-status.page:19(credit/name)
-#: C/share-desktop.page:14(credit/name) C/status-icons.page:16(credit/name)
-#: C/video-call.page:22(credit/name)
-msgid "Milo Casagrande"
-msgstr "Milo Casagrande"
-
-#: C/index.page:23(license/p) C/account-irc.page:20(license/p)
-#: C/account-jabber.page:18(license/p) C/accounts-window.page:22(license/p)
-#: C/add-account.page:29(license/p) C/add-contact.page:22(license/p)
-#: C/audio-call.page:23(license/p) C/audio-video.page:21(license/p)
-#: C/change-status.page:28(license/p) C/create-account.page:23(license/p)
-#: C/disable-account.page:29(license/p) C/favorite-rooms.page:18(license/p)
-#: C/geolocation.page:21(license/p)
-#: C/geolocation-not-showing.page:21(license/p)
-#: C/geolocation-privacy.page:21(license/p)
-#: C/geolocation-supported.page:20(license/p)
-#: C/geolocation-turn.page:22(license/p)
-#: C/geolocation-what-is.page:22(license/p)
-#: C/group-conversations.page:23(license/p) C/hide-contacts.page:15(license/p)
-#: C/import-account.page:31(license/p) C/introduction.page:17(license/p)
-#: C/irc-commands.page:14(license/p) C/irc-join-pwd.page:21(license/p)
-#: C/irc-join-room.page:20(license/p) C/irc-manage.page:23(license/p)
-#: C/irc-nick-password.page:22(license/p) C/irc-send-file.page:20(license/p)
-#: C/irc-start-conversation.page:19(license/p)
-#: C/link-contacts.page:19(license/p) C/prev-conv.page:25(license/p)
-#: C/prob-conn-acctdisabled.page:23(license/p)
-#: C/prob-conn-auth.page:25(license/p) C/prob-conn-name.page:22(license/p)
-#: C/prob-conn-neterror.page:23(license/p) C/prob-conn.page:18(license/p)
-#: C/remove-account.page:23(license/p) C/salut-protocol.page:22(license/p)
-#: C/send-file.page:25(license/p) C/send-message.page:21(license/p)
-#: C/set-custom-status.page:23(license/p) C/share-desktop.page:22(license/p)
-#: C/status-icons.page:24(license/p) C/video-call.page:26(license/p)
-msgid "Creative Commons Share Alike 3.0"
-msgstr "Creative Commons Compartir Igual 3.0"
-
-#: C/index.page:27(page/title)
-msgid ""
-"<media type=\"image\" mime=\"image/png\" src=\"figures/empathy-logo.png\"> "
-"Empathy Internet Messenger logo </media> Empathy Internet Messenger"
-msgstr ""
-"<media type=\"image\" mime=\"image/png\" src=\"figures/empathy-logo.png"
-"\">Logotipo da mensaxaría instantánea Empathy</media>Mensaxeiro da Internet "
-"Empathy"
-
-#: C/index.page:35(section/title)
-msgid "Account Management"
-msgstr "Xestión da cona"
-
-#: C/index.page:39(section/title)
-msgid "Contact Management"
-msgstr "Xestión de contactos"
-
-#: C/index.page:43(section/title)
-msgid "Text Conversations"
-msgstr "Conversas de texto"
-
-#: C/index.page:47(section/title)
-msgid "Audio and Video Conversations"
-msgstr "Conversas de son e vídeo"
-
-#: C/index.page:51(section/title)
-msgid "Advanced Actions"
-msgstr "Accións avanzadas"
-
-#: C/index.page:55(section/title) C/irc-manage.page:57(section/title)
-msgid "Common Problems"
-msgstr "Problemas comúns."
-
-#. This is a reference to an external file such as an image or video. When
-#. the file changes, the md5 hash will change to let you know you need to
-#. update your localized copy. The msgstr is not used at all. Set it to
-#. whatever you like once you have updated your copy of the file.
-#: C/account-irc.page:106(media)
-#| msgid "@@image: 'figures/gtk-add.png'; md5=a856b499d8d4681b70b5ce6f25bc5c6d"
-msgctxt "_"
-msgid ""
-"external ref='figures/gtk-add.png' md5='a856b499d8d4681b70b5ce6f25bc5c6d'"
-msgstr ""
-"external ref='figures/gtk-add.png' md5='a856b499d8d4681b70b5ce6f25bc5c6d'"
-
-#. This is a reference to an external file such as an image or video. When
-#. the file changes, the md5 hash will change to let you know you need to
-#. update your localized copy. The msgstr is not used at all. Set it to
-#. whatever you like once you have updated your copy of the file.
-#.
-#. This is a reference to an external file such as an image or video. When
-#. the file changes, the md5 hash will change to let you know you need to
-#. update your localized copy. The msgstr is not used at all. Set it to
-#. whatever you like once you have updated your copy of the file.
-#.
-#. This is a reference to an external file such as an image or video. When
-#. the file changes, the md5 hash will change to let you know you need to
-#. update your localized copy. The msgstr is not used at all. Set it to
-#. whatever you like once you have updated your copy of the file.
-#.
-#. This is a reference to an external file such as an image or video. When
-#. the file changes, the md5 hash will change to let you know you need to
-#. update your localized copy. The msgstr is not used at all. Set it to
-#. whatever you like once you have updated your copy of the file.
-#: C/account-irc.page:109(media) C/prob-conn-auth.page:58(media)
-#: C/prob-conn-name.page:44(media) C/prob-conn-neterror.page:59(media)
-#| msgid ""
-#| "@@image: 'figures/gtk-edit.png'; md5=4f21b451732817be0604fe3e2c8da98b"
-msgctxt "_"
-msgid ""
-"external ref='figures/gtk-edit.png' md5='4f21b451732817be0604fe3e2c8da98b'"
-msgstr ""
-"external ref='figures/gtk-edit.png' md5='4f21b451732817be0604fe3e2c8da98b'"
-
-#. This is a reference to an external file such as an image or video. When
-#. the file changes, the md5 hash will change to let you know you need to
-#. update your localized copy. The msgstr is not used at all. Set it to
-#. whatever you like once you have updated your copy of the file.
-#: C/account-irc.page:112(media)
-#| msgid ""
-#| "@@image: 'figures/gtk-remove.png'; md5=215e3a325a3dd619874e35c30a018bb6"
-msgctxt "_"
-msgid ""
-"external ref='figures/gtk-remove.png' md5='215e3a325a3dd619874e35c30a018bb6'"
-msgstr ""
-"external ref='figures/gtk-remove.png' md5='215e3a325a3dd619874e35c30a018bb6'"
-
-#: C/account-irc.page:8(info/desc)
-msgid "Additional information necessary for connecting to IRC networks."
-msgstr "Información adicional necesaria para conectarse a redes IRC."
-
-#: C/account-irc.page:16(credit/name) C/account-jabber.page:14(credit/name)
-#: C/accounts-window.page:18(credit/name) C/add-account.page:25(credit/name)
-#: C/disable-account.page:25(credit/name)
-#: C/import-account.page:27(credit/name) C/prev-conv.page:21(credit/name)
-#: C/status-icons.page:20(credit/name)
-msgid "Shaun McCance"
-msgstr "Shaun McCance"
-
-#: C/account-irc.page:31(page/title)
-msgid "IRC account details"
-msgstr "Detalles da conta IRC"
-
-#: C/account-irc.page:33(page/p)
-msgid ""
-"IRC accounts require different information than many other types of "
-"accounts. To create an IRC account, you must specify at least an IRC network "
-"and a nickname. This page details the information you can provide for an IRC "
-"account."
-msgstr ""
-"As contas de IRC requiren información diferente que outros tipos de contas. "
-"Para crear unha conta IRC debe especificar cando menos a rede IRC e o "
-"alcume. Esta páxina detalla a información que pode fornecer para unha conta "
-"de IRC."
-
-#: C/account-irc.page:39(note/p) C/irc-manage.page:37(note/p)
-msgid ""
-"You must have the <sys>telepathy-idle</sys> package installed to use IRC in "
-"<app>Empathy</app>."
-msgstr ""
-"Vostede debe ter instalado o paquete <placeholder-1/> para usar o IRC en "
-"<placeholder-2/>."
-
-#: C/account-irc.page:45(item/title) C/account-irc.page:120(item/title)
-msgid "<gui>Network</gui>"
-msgstr "<gui>Rede</gui>"
-
-#: C/account-irc.page:46(item/p)
-msgid ""
-"IRC is an open system that allows people to run separate IRC networks. Each "
-"network is distinct and has its own users and chat rooms. <app>Empathy</app> "
-"lists the most popular networks in the <gui>Network</gui> drop-down list. "
-"You can add additional networks. See <link xref=\"#networks\"/> below."
-msgstr ""
-"IRC é un sistema aberto que permite á xente estar en diferentes redes IRC. "
-"Cada rede é distinta e ten os seus propios usuarios e salas de chat. "
-"<app>Empathy</app> lista as redes máis populares na lista despregábel "
-"<gui>Rede</gui>. Aínda así engadir máis redes. Consulte embaixo a <link xref="
-"\"#networks\"/>."
-
-#: C/account-irc.page:53(item/title)
-msgid "<gui>Nickname</gui>"
-msgstr "<gui>Alcume</gui>"
-
-#: C/account-irc.page:54(item/p)
-msgid ""
-"Your nickname is your unique name on the IRC network. Only one person on a "
-"network may use a given nickname. If you get an error message that says "
-"<link xref=\"prob-conn-name\" role=\"error-msg\"/> you will need to change "
-"your nickname."
-msgstr ""
-"O seu alcume é un nome único na rede IRC. Só unha persoa nunha rede pode "
-"usar certo alcume. Se obtén unha mensaxe que dí <link xref=\"prob-conn-name"
-"\" role=\"error-msg\"/> deberá cambiar o seu alcume."
-
-#: C/account-irc.page:60(item/title)
-msgid "<gui>Password</gui>"
-msgstr "<gui>Contrasinal</gui>"
-
-#: C/account-irc.page:61(item/p)
-msgid ""
-"Some servers, particularly those on private networks, require a password to "
-"connect. If you are authorized to use the network, the network "
-"administrators should provide you with a password."
-msgstr ""
-"Algúns servidores, particularmente aqueles en redes privadas, requiren un "
-"contrasinal para a conexión. Se está autorizado a usar a rede, os "
-"administradores da rede forneceranlle un contrasinal."
-
-#: C/account-irc.page:65(note/title)
-msgid "NickServ Passwords"
-msgstr "Contrasinais NickServ"
-
-#: C/account-irc.page:66(note/p)
-msgid ""
-"On some networks, nicknames can be registered using a service known as "
-"NickServ. <app>Empathy</app> does not directly support nickname passwords. "
-"On some networks, including the popular freenode network, server passwords "
-"are automatically forwarded to NickServ, allowing you to set this field to "
-"identify yourself with NickServ. See <link xref=\"irc-nick-password\"/> for "
-"more details."
-msgstr ""
-"Nalgunhas redes pode rexistrar os alcumes con un servizo coñecido como "
-"«NickServ». <app>Empathy</app> non admite directamente contrasinais para "
-"alcumes. Nalgunhas redes, incluíndo a popular rede freenode, os contrasinais "
-"do servidor redirecciónanse automaticamente a NickServ, permitíndolle usar "
-"este campo para identificarse con NickServ. Para obter máis información "
-"contacte a <link xref=\"irc-nick-password\"/>."
-
-#: C/account-irc.page:76(item/title)
-#| msgid "Real name"
-msgid "<gui>Real name</gui>"
-msgstr "<gui>Nome real</gui>"
-
-#: C/account-irc.page:77(item/p)
-msgid ""
-"You can provide your real name in addition to your nickname. Other users "
-"will be able to see this when they view your information."
-msgstr ""
-"Pode fornecer o seu nome real ademais do seu alcume. Outros usuarios poderán "
-"velo ao ver a súa información."
-
-#: C/account-irc.page:81(item/title)
-#| msgid "Select <gui>Edit Custom Message</gui>."
-msgid "<gui>Quit message</gui>"
-msgstr "<gui>Mensaxe de saída</gui>"
-
-#: C/account-irc.page:82(item/p)
-msgid ""
-"When you go offline, a quit message is sent to all the chat rooms you’re in "
-"and to all the users you’re having a private conversation with. Use this "
-"field to provide a custom quit message."
-msgstr ""
-"Cando se desconecta enviase unha mensaxe de saída todas as salas de conversa "
-"nas que está e a todos os usuarios cos que ten unha conversa privada. Use "
-"este campo para fornecer unha mensaxe personalizada."
-
-#: C/account-irc.page:94(info/title)
-#| msgid "IRC Networks"
-msgctxt "link"
-msgid "IRC Networks"
-msgstr "Redes IRC"
-
-#: C/account-irc.page:97(section/title)
-msgid "Networks"
-msgstr "Redes"
-
-#: C/account-irc.page:99(section/p)
-msgid ""
-"<app>Empathy</app> includes a list of popular IRC networks. If you wish to "
-"another IRC network, you can add it to the list. You can also modify "
-"networks and remove them from the list."
-msgstr ""
-"<app>Empathy</app> inclúe unha lista de redes IRC populares. Se quere usar "
-"outra rede IRC pode engadila á lista. Tamén pode modificar e eliminar redes "
-"da lista."
-
-#: C/account-irc.page:104(item/p)
-msgid ""
-"To add a network to the list, click <media type=\"image\" mime=\"image/png\" "
-"src=\"figures/gtk-add.png\" width=\"16\" height=\"16\">Add</media>."
-msgstr ""
-"Para engadir unha rede á lista prema <media type=\"image\" mime=\"image/png"
-"\" src=\"figures/gtk-add.png\" width=\"16\" height=\"16\">Engadir</media>."
-
-#: C/account-irc.page:107(item/p)
-msgid ""
-"To modify a network in the list, select the network and click <media type="
-"\"image\" mime=\"image/png\" src=\"figures/gtk-edit.png\" width=\"16\" "
-"height=\"16\">Edit</media>."
-msgstr ""
-"Para modificar unha rede da lista seleccione a rede e prema <media type="
-"\"image\" mime=\"image/png\" src=\"figures/gtk-edit.png\" width=\"16\" "
-"height=\"16\">Editar</media>."
-
-#: C/account-irc.page:110(item/p)
-msgid ""
-"To remove a network from the list, select the network and click <media type="
-"\"image\" mime=\"image/png\" src=\"figures/gtk-remove.png\" width=\"16\" "
-"height=\"16\">Remove</media>."
-msgstr ""
-"Para eliminar unha rede da lista seleccione e prema <media type=\"image\" "
-"mime=\"image/png\" src=\"figures/gtk-remove.png\" width=\"16\" height="
-"\"16\">Eliminar</media>."
-
-#: C/account-irc.page:115(section/p)
-msgid ""
-"When adding or modifying a network, you can enter the following information:"
-msgstr ""
-"Ao engadir ou modificar unha rede pode introducir a seguinte información:"
-
-#: C/account-irc.page:121(item/p)
-msgid ""
-"This is the name of the network as you want it to appear in the list of "
-"networks."
-msgstr "Este é o nome da rede como quere que apareza na lista de redes."
-
-#: C/account-irc.page:125(item/title)
-#| msgid "<gui>Contact List</gui> window"
-msgid "<gui>Charset</gui>"
-msgstr "<gui>Codificación de caracteres</gui>"
-
-#: C/account-irc.page:126(item/p)
-msgid ""
-"This specifies the character encoding that is typically used on this "
-"network. A character encoding is a specific way of recording characters "
-"internally in a computer. There are many character encodings, and you need "
-"to use the same character encoding as other users to see their messages "
-"correctly."
-msgstr ""
-"Isto especifica a codificación de caracteres usada xeralmente nesta rede. "
-"Unha codificación de caracteres é unha forma específica de gravar os "
-"caracteres internamente nun computador. Existen moitas configuracións de "
-"caracteres e debe usar a mesma configuración de caracteres que o resto de "
-"usuarios para poder ver as súas mensaxes correctamente."
-
-#: C/account-irc.page:135(item/p)
-msgid ""
-"By default, <app>Empathy</app> uses UTF-8, a modern character encoding that "
-"can handle text from most of the world's languages. Another common encoding "
-"for English and some other Western languages is ISO-8859-1."
-msgstr ""
-"De forma predefinida <app>Empathy</app> usa UTF-8, unha codificación de "
-"caracteres moderna que pode xestionar texto na maioría dos idiomas do mundo. "
-"Outra configuración de caracteres común para inglés e outros idiomas "
-"occidentais é ISO-8859-1."
-
-#: C/account-irc.page:141(item/title)
-msgid "<gui>Servers</gui>"
-msgstr "<gui>Servidores</gui>"
-
-#: C/account-irc.page:142(item/p)
-msgid ""
-"An IRC network may have many servers you can connect to. When you are "
-"connected to a server on a particular network, you can communicate with all "
-"users on all other servers on that network. You can add and remove servers "
-"for this network using the <gui>Add</gui> and <gui>Remove</gui> buttons."
-msgstr ""
-"Unha rede IRC pode ter moitos servidores aos que se pode conectar. Cando "
-"está conectado a un servidor nunha rede en particular, pode comunicarse con "
-"todos os usuarios en todos os servidores desa rede. Pode engadir e quitar "
-"servidores para esa rede usando os botóns <gui>Engadir</gui> e "
-"<gui>Eliminar</gui>."
-
-#: C/account-irc.page:147(item/p)
-msgid ""
-"When a server is selected, click the field under <gui>Server</gui> or "
-"<gui>Port</gui> to edit it. Alternatively, use the left and right arrow keys "
-"to focus the field, and press the space bar to begin editing."
-msgstr ""
-"Cando un servidor estea seleccionado prema o campo baixo <gui>Servidor</gui> "
-"ou <gui>Porto</gui> para editalo. De forma alternativa, use as frechas "
-"esquerda e dereita para dar o foco ao campo e prema a barra espazadora para "
-"comezar a editalo."
-
-#: C/account-irc.page:151(item/p)
-msgid ""
-"Select the check box in the <gui>SSL</gui> column to encrypt all "
-"communication with a server. Note that this does not prevent other users on "
-"the network from seeing what you write on public chat rooms."
-msgstr ""
-"Seleccione a caixa de verificación na columna <gui>SSL</gui> para cifrar "
-"toda a comunicación co servidor. Note que isto non prevén que outros "
-"usuarios na rede vexan o que escribe en salas de conversa públicas."
-
-#: C/account-jabber.page:7(info/desc)
-msgid "Advanced options for Jabber and Google Talk accounts."
-msgstr "Opcións avanzadas para contas Jabber e Google Talk."
-
-#: C/account-jabber.page:29(page/title)
-msgid "Jabber account details"
-msgstr "Detalles da conta Jabber"
-
-#: C/account-jabber.page:31(page/p)
-msgid ""
-"Most Jabber accounts will require only a login ID and a password to connect. "
-"For some accounts or on certain types of networks, you may need to enter "
-"additional information in the <gui>Advanced</gui> section. Normally, you "
-"will not need to use the advanced options below. For general instructions on "
-"adding an account, see <link xref=\"add-account\"/>."
-msgstr ""
-"A maioría das contas Jabber, para conectarse, só requiren un ID de inicio de "
-"sesión e un contrasinal. Para algunhas contas en certo tipo de redes, pode "
-"necesitar introducir información adicional na sección <gui>Avanzadas</gui>. "
-"Xeralmente non necesita usar as opcións avanzadas de embaixo. Consulte a "
-"<link xref=\"add-account\"/> para obter instrucións xerais para engadir unha "
-"conta."
-
-#: C/account-jabber.page:39(note/p)
-msgid ""
-"Google Talk is a type of Jabber account. These instructions hold for Google "
-"Talk accounts as well."
-msgstr ""
-"Google Talk é un tipo de conta Jabber. Estas instrucións tamén funcionan "
-"para contas de Google Talk."
-
-#: C/account-jabber.page:45(item/title)
-#| msgid "Encryption required (TLS/SSL)"
-msgid "<gui>Encryption required (TLS/SSL)</gui>"
-msgstr "<gui>Requírese cifrado (TLS/SSL)</gui>"
-
-#: C/account-jabber.page:46(item/title)
-#| msgid "Ignore SSL certificate errors"
-msgid "<gui>Ignore SSL certificate errors</gui>"
-msgstr "<gui>Ignorar os erros de certificados SSL</gui>"
-
-#: C/account-jabber.page:47(item/p)
-msgid ""
-"Whenever possible, communication between <app>Empathy</app> and the Jabber "
-"server is encrypted. If encrypted communication is not possible, messages "
-"may be sent unencrypted. Select <gui>Encryption required</gui> to prevent "
-"<app>Empathy</app> from communicating with the Jabber server when encryption "
-"is not possible."
-msgstr ""
-"Sempre que sexa posíbel, a comunicación entre <app>Empathy</app> e o "
-"servidor Jabber está cifrada. Se a comunicación cifrada non é posíbel, pode "
-"que as mensaxes se envíen sen cifrar. Seleccione <gui>Require cifrado</gui> "
-"para evitar que <app>Empathy</app> se comunique co servidor Jabber cando non "
-"é posíbel cifrar a comunicación."
-
-#: C/account-jabber.page:52(item/p)
-msgid ""
-"Some Jabber servers may encrypt data using invalid certificates, or using "
-"certificates from unknown authorities. If you trust the server you are "
-"connecting to, you can select <gui>Ignore SSL certificate errors</gui> to "
-"allow encrypted communication with invalid certificates."
-msgstr ""
-"Algúns servidores Jabber poden cifrar datos usando certificados non válidos "
-"ou usando certificados de autoridades descoñecidas. Se confía no servidor ao "
-"que se está conectando pode seleccionar <gui>Ignorar os erros de "
-"certificados SSL</gui> para permitir comunicacións cifradas con certificados "
-"non válidos."
-
-#: C/account-jabber.page:59(item/title)
-msgid "<gui>Resource</gui>"
-msgstr "<gui>Recurso</gui>"
-
-#: C/account-jabber.page:60(item/title)
-msgid "<gui>Priority</gui>"
-msgstr "<gui>Prioridade</gui>"
-
-#: C/account-jabber.page:61(item/p)
-msgid ""
-"If you have multiple applications (for instance, on separate computers) "
-"connected to your account at the same time, you can set a resource to "
-"uniquely identify each one. By default, <app>Empathy</app> will use "
-"<input>Telepathy</input> as the resource."
-msgstr ""
-"Se ten múltiples aplicativos (en equipos diferentes, por exemplo) conectados "
-"á súa conta ao mesmo tempo, pode configurar un recurso para identificar "
-"univocamente cada unha. De forma predefinida <app>Empathy</app> usará "
-"<input>Telepathy</input> como recurso."
-
-#: C/account-jabber.page:65(item/p)
-msgid ""
-"You can set the priority to specify which application should receive "
-"incoming messages from your contacts. New messages will be sent to the "
-"application with the highest priority."
-msgstr ""
-"Pode estabelecer a prioridade para especificar que aplicativo debería "
-"recibir mensaxes entrantes dos seus contactos. As mensaxes novas enviaranse "
-"ao aplicativo coa prioridade máis alta."
-
-#: C/account-jabber.page:70(item/title)
-#| msgid "Override server settings"
-msgid "<gui>Override server settings</gui>"
-msgstr "<gui>Ignorar as configuracións do servidor</gui>"
-
-#: C/account-jabber.page:71(item/p)
-msgid ""
-"<app>Empathy</app> will use default settings to connect to the Jabber server "
-"based on your login ID. For some Jabber servers, you will need to enter "
-"custom server settings manually. These settings should be provided for you "
-"by your Jabber provider."
-msgstr ""
-"<app>Empathy</app> usará a configuración predeterminada para conectarse ao "
-"servidor Jabber en función do seu ID de inicio de sesión. Para algúns "
-"servidores Jabber precisará introducir manualmente os axustes do servidor. O "
-"seu fornecedor de Jabber deberíalle fornecer ditos axustes."
-
-#: C/accounts-window.page:11(info/desc)
-msgid "Add, modify, and delete accounts."
-msgstr "Engadir, modificar e borrar contas."
-
-#: C/accounts-window.page:33(page/title)
-msgid "Accounts Window"
-msgstr "Xanela de contas"
-
-#: C/accounts-window.page:35(page/p)
-msgid ""
-"The <gui>Accounts</gui> window allows you to add, modify, and delete "
-"accounts."
-msgstr ""
-"A xanela <gui>Contas</gui> permítelle engadir, modificar e eliminar contas."
-
-#: C/accounts-window.page:43(section/title)
-msgid "Account Details"
-msgstr "Detalles da conta"
-
-#: C/accounts-window.page:44(section/p)
-msgid ""
-"For most types of accounts, you can simply enter a login ID and a password. "
-"Certain accounts or account types, however, may require additional "
-"information."
-msgstr ""
-"Para a maioría dos tipos de conta pode, simplemente, introducir un ID de "
-"inicio de sesión e un contrasinal. Porén, algúns tipos de conta poden "
-"requirir información adicional."
-
-#: C/add-account.page:9(info/desc)
-msgid "Add a new account to <app>Empathy</app>."
-msgstr "Engadir unha nova conta en <app>Empathy</app>."
-
-#: C/add-account.page:40(page/title)
-msgid "Add a new account"
-msgstr "Engadir unha nova conta"
-
-#: C/add-account.page:42(page/p)
-msgid ""
-"You can add instant messaging accounts from any supported service to "
-"communicate with all of your contacts in <app>Empathy</app>. For some "
-"account providers, these steps will also allow you to register for a new "
-"account. For more details, see <link xref=\"create-account\"/>."
-msgstr ""
-"Pode engadir contas de mensaxaría instantánea de calquera servizo admitido "
-"para comunicarse con todos os seus contactos no <app>Empathy</app>. Para "
-"algúns fornecedores de contas estes pasos permitiranlle rexistrar unha nova "
-"conta. Para obter máis información consulte a <link xref=\"create-account\"/"
-">."
-
-#: C/add-account.page:49(item/p) C/disable-account.page:49(item/p)
-#: C/irc-nick-password.page:50(item/p) C/remove-account.page:43(item/p)
-#| msgid ""
-#| "From the <gui>Contact List</gui> window, choose <guiseq><gui>Edit</"
-#| "gui><gui>Accounts</gui></guiseq>, or press <key>F4</key>."
-msgid ""
-"From the <gui>Contact List</gui> window, choose <guiseq><gui>Edit</gui> "
-"<gui>Accounts</gui></guiseq>, or press <key>F4</key>."
-msgstr ""
-"Desde a xanela <gui>Lista de contactos</gui> seleccione <guiseq><gui>Editar</"
-"gui><gui>Contas</gui></guiseq> ou prema <key>F4</key>."
-
-#: C/add-account.page:53(item/p)
-msgid "Click <gui style=\"button\">+</gui>."
-msgstr "Prema <gui style=\"button\">+</gui>."
-
-#: C/add-account.page:58(item/p)
-msgid ""
-"From the <gui>Protocol</gui> drop-down list, select the type of account you "
-"wish to add."
-msgstr ""
-"Desde a lista despregábel <gui>Protocolo</gui>seleccione o tipo de conta que "
-"quere engadir."
-
-#: C/add-account.page:62(item/p)
-msgid ""
-"If you do not already have a registered account, select <gui>Create a new "
-"account on the server</gui>. This feature is not available for all account "
-"types, and may not work with some account providers. See <link xref=\"create-"
-"account\"/> for more information."
-msgstr ""
-"Se aínda non ten unha conta rexistrada seleccione <gui>Crear unha nova conta "
-"no servidor</gui>. Esta característica non está dispoñíbel para todos os "
-"tipos de contas e pode non funcionar con algúns fornecedores de contas. Para "
-"obter máis información consulte a <link xref=\"create-account\"/>."
-
-#: C/add-account.page:69(item/p)
-msgid ""
-"Enter the required information. For most accounts, you will only need a "
-"login ID and a password. Some accounts may require additional information. "
-"See <link xref=\"accounts-window#details\"/>for more information."
-msgstr ""
-"Escriba a información requirida. Para a maioría das contas só precisa un ID "
-"de inicio de sesión e un contrasinal. Algunhas contas poden requirir "
-"información adicional. Para obter maís información consulte a <link xref="
-"\"accounts-window#details\"/>."
-
-#: C/add-account.page:74(item/p) C/import-account.page:61(item/p)
-#: C/irc-nick-password.page:63(item/p)
-msgid "Click <gui style=\"button\">Apply</gui>."
-msgstr "Prema <gui style=\"button\">Aplicar</gui>."
-
-#: C/add-account.page:81(note/p)
-msgid ""
-"To change the name that identifies the account in the <gui>Accounts</gui> "
-"window, select the account from the list on the left and either click on the "
-"name or press the space bar. Edit the account name and press <key>Enter</"
-"key> when you’re finished."
-msgstr ""
-"Para cambiar o nome que identifica a conta na xanela <gui>Contas</gui>, "
-"seleccione a conta da lista á esquerda e prema no nome ou a barra "
-"espaciadora. Edite o nome da conta e prema <key>Intro</key> cando remate."
-
-#: C/add-contact.page:9(info/desc)
-msgid "Add someone to the contact list."
-msgstr "Engadir a alguén á lista de contactos."
-
-#: C/add-contact.page:18(credit/name) C/change-status.page:24(credit/name)
-#: C/prob-conn-acctdisabled.page:15(credit/name)
-#: C/prob-conn-auth.page:17(credit/name)
-#: C/prob-conn-neterror.page:15(credit/name) C/prob-conn.page:14(credit/name)
-#: C/send-file.page:17(credit/name) C/send-message.page:17(credit/name)
-msgid "Phil Bull"
-msgstr "Phil Bull"
-
-#: C/add-contact.page:33(page/title)
-msgid "Add someone to your list of contacts"
-msgstr "Engadir a alguén á súa lista de contactos."
-
-#: C/add-contact.page:37(item/p)
-msgid "Choose <guiseq><gui>Chat</gui><gui>Add Contact</gui></guiseq>."
-msgstr ""
-"Seleccione<guiseq><gui>Conversa</gui><gui>Engadir contacto</gui></guiseq>."
-
-#: C/add-contact.page:40(item/p)
-msgid ""
-"From the <gui>Account</gui> drop-down list, select the account you wish to "
-"use to connect to your contact. Your contact will need to be using the same "
-"service as the account you select."
-msgstr ""
-"Desde a lista despregábel <gui>Conta</gui> seleccione a conta que quere usar "
-"par conectar co seu contacto. O seu contacto deberá usar o mesmo servizo que "
-"a conta que estea seleccionando."
-
-#: C/add-contact.page:45(item/p)
-msgid ""
-"In the <gui>Identifier</gui> field, enter your contact’s login ID, username, "
-"screen name, or other appropriate identifier for the service type."
-msgstr ""
-"No campo <gui>Identificador</gui> introduza o ID de inicio de sesión do seu "
-"contacto, o seu nome en pantalla ou outro identificador axeitado para o tipo "
-"de servizo."
-
-#: C/add-contact.page:49(item/p)
-msgid ""
-"In the <gui>Alias</gui> field, type your contact’s name as you would like it "
-"to appear in your contact list."
-msgstr ""
-"No campo <gui>Alcume</gui>escriba o nome do seu contacto tal e como lle "
-"gustaría que aparecese na súa lista de contactos."
-
-#: C/add-contact.page:53(item/p)
-msgid "Click <gui>Add</gui> to add the person to your list of contacts."
-msgstr ""
-"Prema <gui>Engadir</gui> para engadir a persoa á súa lista de contactos."
-
-#: C/add-contact.page:61(note/p)
-msgid ""
-"To add a new person to your list of contacts, you need to be connected to "
-"the Internet and to your account."
-msgstr ""
-"Par engadir unha nova persoa á súa lista de contactos necesita estar "
-"conectado a Internet e á súa conta."
-
-#. This is a reference to an external file such as an image or video. When
-#. the file changes, the md5 hash will change to let you know you need to
-#. update your localized copy. The msgstr is not used at all. Set it to
-#. whatever you like once you have updated your copy of the file.
-#.
-#. This is a reference to an external file such as an image or video. When
-#. the file changes, the md5 hash will change to let you know you need to
-#. update your localized copy. The msgstr is not used at all. Set it to
-#. whatever you like once you have updated your copy of the file.
-#.
-#. This is a reference to an external file such as an image or video. When
-#. the file changes, the md5 hash will change to let you know you need to
-#. update your localized copy. The msgstr is not used at all. Set it to
-#. whatever you like once you have updated your copy of the file.
-#: C/audio-call.page:36(media) C/audio-video.page:70(media)
-#: C/video-call.page:39(media)
-#| msgid ""
-#| "@@image: 'figures/camera-web.png'; md5=8166b4372f25b78cbf5a64fe2eac2ce5"
-msgctxt "_"
-msgid ""
-"external ref='figures/camera-web.png' md5='8166b4372f25b78cbf5a64fe2eac2ce5'"
-msgstr ""
-"external ref='figures/camera-web.png' md5='8166b4372f25b78cbf5a64fe2eac2ce5'"
-
-#: C/audio-call.page:9(info/desc)
-msgid "Call your contacts over the Internet."
-msgstr "Chamar aos seus contactos a través de Internet."
-
-#: C/audio-call.page:27(page/title)
-msgid "Start an audio conversation"
-msgstr "Comezar unha conversa de son"
-
-#: C/audio-call.page:29(page/p)
-msgid ""
-"You can call your contacts and have an audio conversation with them. This "
-"features only works with certain types of accounts, and it requires the "
-"other person to have an application that supports audio calls."
-msgstr ""
-"Pode chamar aos seus contactos e ter conversas de son con eles. Esta "
-"característica só funciona con certo tipo de contas e require que a outra "
-"persoa teña un aplicativo que admita chamadas de son."
-
-#: C/audio-call.page:34(item/p)
-msgid ""
-"From the <gui>Contact List</gui> window, click the <media type=\"image\" "
-"mime=\"image/png\" src=\"figures/camera-web.png\">video call</media> icon "
-"next to the name of the contact you wish to call and choose <gui style="
-"\"menuitem\">Audio Call</gui>."
-msgstr ""
-"Desde a xanela <gui>Lista de contactos</gui>, prema a icona <media type="
-"\"image\" mime=\"image/png\" src=\"figures/camera-web.png\">chamada de "
-"vídeo</media> ao lado do nome do contacto ao que quere chamar e seleccione "
-"<gui style=\"menuitem\">Chamada de son</gui>."
-
-#: C/audio-call.page:42(item/p) C/video-call.page:44(item/p)
-msgid ""
-"A new window will open. When the connection is established, you will see "
-"<gui>Connected</gui> at the bottom of the window, along with the total "
-"conversation time."
-msgstr ""
-"Abrirase unha nova xanela. Cando a conexión se estabeleza verá "
-"<placeholder-2/> na parte inferior da xanela, ao carón do tempo de conversa "
-"total."
-
-#: C/audio-call.page:48(item/p) C/video-call.page:49(item/p)
-msgid "To end the conversation, click on <gui style=\"button\">Hang up</gui>."
-msgstr "Para rematar a conversa, prema sobre <placeholder-1/>"
-
-#: C/audio-call.page:55(note/p)
-#| msgid ""
-#| "To turn an audio conversation into a video conversation, choose "
-#| "<guiseq><gui style=\"menu\">Video</gui><gui style=\"menuitem\">Video On</"
-#| "gui></guiseq>."
-msgid ""
-"To turn an audio conversation into a video conversation, choose <guiseq><gui "
-"style=\"menu\">Video</gui> <gui style=\"menuitem\">Video On</gui></guiseq>."
-msgstr ""
-"Para trocar unha conversa de son nunha conversa de vídeo, seleccione "
-"<guiseq><gui style=\"menu\">Vídeo</gui><gui style=\"menuitem\">Vídeo "
-"activado</gui></guiseq>."
-
-#: C/audio-call.page:63(section/title)
-msgid "Start an audio conversation with a meta-contact"
-msgstr "Comezar unha conversa de son con un metacontacto."
-
-#: C/audio-call.page:66(item/p) C/send-message.page:53(item/p)
-#: C/video-call.page:64(item/p)
-msgid ""
-"From the <gui>Contact List</gui> window, right-click on the meta-contact."
-msgstr ""
-"Desde a xanela <gui>Lista de contactos</gui>, prema co botón dereito sobre "
-"un metacontacto."
-
-#: C/audio-call.page:71(item/p)
-msgid ""
-"Select the contact you want to have the conversation, and from the menu "
-"select <gui style=\"menuitem\">Audio Call</gui>."
-msgstr ""
-"Seleccione o contacto co que desexe ter unha conversa e desde o menú "
-"seleccione <gui style=\"menuitem\">Audiochamada</gui>."
-
-#: C/audio-call.page:78(note/p) C/send-message.page:65(note/p)
-#: C/video-call.page:76(note/p)
-msgid ""
-"To recognize if a contact is a <em>meta-contact</em>, move your mouse on a "
-"contact in the <gui>Contact List</gui> window, and stop over it for a "
-"second: a small pop-up message will appear showing the number of the "
-"contacts that form the meta-contact."
-msgstr ""
-"Para recoñecer se un contacto é un <em>metacontacto</em>, mova o rato sobre "
-"o contacto na xanela <gui>Lista de contactos</gui> e deteñase sobre el un "
-"segundo: aparecerá unha pequena mensaxe emerxente que mostra o número de "
-"contactos que forman o metacontacto."
-
-#. This is a reference to an external file such as an image or video. When
-#. the file changes, the md5 hash will change to let you know you need to
-#. update your localized copy. The msgstr is not used at all. Set it to
-#. whatever you like once you have updated your copy of the file.
-#: C/audio-video.page:58(media)
-#| msgid ""
-#| "@@image: 'figures/audio-input-microphone.png'; "
-#| "md5=8d89026b66a263a3bc5b1f0665948567"
-msgctxt "_"
-msgid ""
-"external ref='figures/audio-input-microphone.png' "
-"md5='8d89026b66a263a3bc5b1f0665948567'"
-msgstr ""
-"external ref='figures/audio-input-microphone.png' "
-"md5='8d89026b66a263a3bc5b1f0665948567'"
-
-#: C/audio-video.page:8(info/desc)
-msgid ""
-"Information on when it is possible to have an audio or video conversation."
-msgstr "Información sobre cando é posíbel ter unha conversa de vídeo ou son."
-
-#: C/audio-video.page:32(page/title)
-msgid "Audio and video support"
-msgstr "Compatibilidade de son e vídeo"
-
-#: C/audio-video.page:34(page/p)
-msgid ""
-"You can only have audio and video conversation with contacts who are using "
-"an application which also supports this feature. When your contacts support "
-"audio or video conversations, you will see the following icons next to their "
-"names in the contact list:"
-msgstr ""
-"Só pode ter conversas de son e vídeo con contactos que estean usando un "
-"aplicativo que tamén admita esta característica. Cando os aplicativos dos "
-"seus contactos admitan conversas de son ou vídeo poderá velo mediante unha "
-"icona xunto aos seus nomes, na lista de contactos:"
-
-#: C/audio-video.page:43(td/p)
-msgid "Icon"
-msgstr "Icona"
-
-#: C/audio-video.page:48(td/p)
-msgid "Description"
-msgstr "Descrición"
-
-#: C/audio-video.page:57(td/p)
-#| msgid ""
-#| "Click the <media type=\"image\" mime=\"image/png\" src=\"figures/gtk-edit."
-#| "png\">edit</media> icon in the error message."
-msgid ""
-"<media type=\"image\" mime=\"image/png\" src=\"figures/audio-input-"
-"microphone.png\"> Icon for audio conversation </media>"
-msgstr ""
-"<media type=\"image\" mime=\"image/png\" src=\"figures/audio-input-"
-"microphone.png\"> Icona para conversa de son </media>"
-
-#: C/audio-video.page:64(td/p)
-msgid "The contact is able to have an audio conversation."
-msgstr "O contacto pode ter conversas de son."
-
-#: C/audio-video.page:69(td/p)
-#| msgid ""
-#| "Click the <media type=\"image\" mime=\"image/png\" src=\"figures/gtk-edit."
-#| "png\">edit</media> icon in the error message."
-msgid ""
-"<media type=\"image\" mime=\"image/png\" src=\"figures/camera-web.png\"> "
-"Icon for video conversation </media>"
-msgstr ""
-"<media type=\"image\" mime=\"image/png\" src=\"figures/camera-web.png\"> "
-"Icona para conversa de vídeo </media>"
-
-#: C/audio-video.page:76(td/p)
-msgid "The contact is able to have a video conversation."
-msgstr "O contacto pode ter conversas de vídeo."
-
-#: C/audio-video.page:83(note/p)
-msgid ""
-"In order to have an audio conversation, you need to have a sound card that "
-"is supported by your operating system, and a working microphone."
-msgstr ""
-"Para poder ter unha conversa de son debe ter unha tarxeta de son admitida "
-"polo sistema operativo e un micrófono que funcione."
-
-#: C/audio-video.page:87(note/p)
-msgid ""
-"In order to have a video conversation, you need to have a webcam that is "
-"supported by your operating system, and a working microphone."
-msgstr ""
-"Para poder ter unha conversa de vídeo debe ter unha cámara web compatíbel "
-"polo sistema operativo e un micrófono que funcione."
-
-#: C/audio-video.page:95(section/title)
-msgid "Supported Account Types"
-msgstr "Tipos de contas admitidas"
-
-#: C/audio-video.page:97(section/p)
-msgid ""
-"You can only have audio and video conversations using accounts on certain "
-"supported services. The following table lists whether audio and video is "
-"supported for each type of account."
-msgstr ""
-"Só pode ter conversas de son e vídeo usando contas en certos servizos "
-"compatíbeis. A seguinte táboa mostra se o son ou vídeo están admitidos para "
-"cada tipo de conta."
-
-#: C/audio-video.page:102(note/p)
-msgid ""
-"Account types are provided by plugins. Your system may not have all of the "
-"following types available, or it may have types not listed here. Updated "
-"plugins may make audio or video conversations possible on account types that "
-"are listed as unsupported here."
-msgstr ""
-"Os tipos de contas son fornecidos por engadidos. Pode que o seu sistema non "
-"teña dispoñíbel todos os seguintes tipos, ou pode ter tipos non mostrados "
-"aquí. As actualizacións de engadidos pode facer posíbel conversas de son ou "
-"vídeo en tipos de contas que aquí móstranse como non compatíbeis."
-
-#: C/audio-video.page:128(td/p)
-msgid "Service"
-msgstr "Servizo"
-
-#: C/audio-video.page:129(td/p)
-msgid "Audio"
-msgstr "Audio"
-
-#: C/audio-video.page:130(td/p)
-msgid "Video"
-msgstr "V_ídeo"
-
-#: C/audio-video.page:135(td/p)
-msgid "AIM"
-msgstr "AIM"
-
-#: C/audio-video.page:136(td/p) C/audio-video.page:137(td/p)
-#: C/audio-video.page:141(td/p) C/audio-video.page:142(td/p)
-#: C/audio-video.page:146(td/p) C/audio-video.page:147(td/p)
-#: C/audio-video.page:156(td/p) C/audio-video.page:157(td/p)
-#: C/audio-video.page:161(td/p) C/audio-video.page:162(td/p)
-#: C/audio-video.page:166(td/p) C/audio-video.page:167(td/p)
-#: C/audio-video.page:181(td/p) C/audio-video.page:182(td/p)
-#: C/audio-video.page:186(td/p) C/audio-video.page:187(td/p)
-#: C/audio-video.page:191(td/p) C/audio-video.page:192(td/p)
-#: C/audio-video.page:196(td/p) C/audio-video.page:197(td/p)
-#: C/audio-video.page:201(td/p) C/audio-video.page:202(td/p)
-#: C/audio-video.page:211(td/p) C/audio-video.page:212(td/p)
-#: C/audio-video.page:216(td/p) C/audio-video.page:217(td/p)
-msgid "No"
-msgstr "No"
-
-#: C/audio-video.page:140(td/p)
-msgid "Facebook Chat"
-msgstr "Chat de Facebook"
-
-#: C/audio-video.page:145(td/p)
-msgid "gadugadu"
-msgstr "gadugadu"
-
-#: C/audio-video.page:150(td/p)
-msgid "Google Talk"
-msgstr "Google Talk"
-
-#: C/audio-video.page:151(td/p) C/audio-video.page:152(td/p)
-#: C/audio-video.page:171(td/p) C/audio-video.page:172(td/p)
-#: C/audio-video.page:176(td/p) C/audio-video.page:177(td/p)
-#: C/audio-video.page:206(td/p) C/audio-video.page:207(td/p)
-msgid "Yes"
-msgstr "Si"
-
-#: C/audio-video.page:155(td/p)
-msgid "Groupwise"
-msgstr "Groupwise"
-
-#: C/audio-video.page:160(td/p)
-msgid "ICQ"
-msgstr "ICQ"
-
-#: C/audio-video.page:165(td/p) C/create-account.page:107(section/title)
-msgid "IRC"
-msgstr "IRC"
-
-#: C/audio-video.page:170(td/p) C/create-account.page:60(section/title)
-msgid "Jabber"
-msgstr "Jabber"
-
-#: C/audio-video.page:175(td/p)
-msgid "MSN"
-msgstr "MSN"
-
-#: C/audio-video.page:180(td/p)
-msgid "myspace"
-msgstr "myspace"
-
-#: C/audio-video.page:185(td/p)
-msgid "qq"
-msgstr "qq"
-
-#: C/audio-video.page:190(td/p) C/create-account.page:78(section/title)
-msgid "People Nearby"
-msgstr "Persoas próximas"
-
-#: C/audio-video.page:195(td/p)
-msgid "sametime"
-msgstr "sametime"
-
-#: C/audio-video.page:200(td/p)
-msgid "silc"
-msgstr "silc"
-
-#: C/audio-video.page:205(td/p) C/create-account.page:89(section/title)
-msgid "SIP"
-msgstr "SIP"
-
-#: C/audio-video.page:210(td/p)
-msgid "Yahoo!"
-msgstr "Yahoo!"
-
-#: C/audio-video.page:215(td/p)
-msgid "zephyr"
-msgstr "zephyr"
-
-#: C/change-status.page:9(info/desc)
-msgid "Change your status to advertise your availability to your contacts."
-msgstr ""
-"Cambie o seu estado para avisar da súa dispoñibilidade aos seus contactos."
-
-#: C/change-status.page:39(page/title)
-msgid "Change your status"
-msgstr "Cambiar o seu estado"
-
-#: C/change-status.page:41(page/p)
-msgid ""
-"You can set your status to indicate your availability to your contacts. "
-"<app>Empathy</app> allows you to select from a list of defined statuses."
-msgstr ""
-"Pode estabelecer o seu estado para indicar a súa dispoñibilidade aos seus "
-"contactos <app>Empathy</app> permítelle seleccionar unha lista de estados "
-"predefinidos."
-
-#: C/change-status.page:46(item/p)
-msgid ""
-"Click on the drop-down list at the top of the <gui>Contact List</gui> window."
-msgstr ""
-"Prema na lista despregábel na parte superior da xanela da <gui>Lista de "
-"contactos</gui>."
-
-#: C/change-status.page:51(item/p)
-msgid "Select a status from the list."
-msgstr "Seleccione o estado desde a lista."
-
-#: C/change-status.page:57(page/p)
-msgid ""
-"See <link xref=\"status-icons\"/> for a list of the built-in statuses and "
-"what they mean. You can also <link xref=\"set-custom-status\">add custom "
-"status messages</link> to provide more information about your availability "
-"to your contacts."
-msgstr ""
-"Consulte a <link xref=\"status-icons\"/> para obter unha lista de estados "
-"predefinidos e o que significan. Tamén pode <link xref=\"set-custom-message"
-"\">engadir mensaxes de estado personalizados</link> para fornecerlle aos "
-"seus contactos maís información sobre a sú dispoñibilidade."
-
-#: C/change-status.page:63(note/p)
-msgid ""
-"If you do not use your computer for a while, or if the screensaver is on, "
-"the status will be automatically set to Away."
-msgstr ""
-"Se non usa o seu equipo durante un tempo ou se se activa o protector de "
-"pantallas, o estado cambiarase automaticamente a Ausente."
-
-#: C/create-account.page:9(info/desc)
-msgid "Register for an account with one of the supported messaging services."
-msgstr "Rexistre unha conta con un dos servizos de mensaxería admitidos."
-
-#: C/create-account.page:34(page/title)
-msgid "Register for a new account"
-msgstr "Rexistrar unha nova conta"
-
-#: C/create-account.page:36(page/p)
-msgid ""
-"Most account types require you to create an account with a account provider "
-"before you can connect using instant messaging applications like "
-"<app>Empathy</app>. With some account providers, you can use <app>Empathy</"
-"app> to register for a new account, using the same steps as you would to "
-"<link xref=\"add-account\">add an account</link>."
-msgstr ""
-"Moitos tipos de conta requiren que cree unha conta cun fornecedor de contas "
-"antes de poder conectarse e usar aplicativos de mensaxaría instantánea como "
-"<app>Empathy</app>. Con algúns fornecedores de contas pode usar "
-"<app>Empathy</app> para rexistrar una nova conta, usando os mesmos pasos que "
-"seguiría en <link xref=\"add-account\">engadir unha conta</link>."
-
-#: C/create-account.page:42(page/p)
-msgid ""
-"This page provides information on creating a new account for various types "
-"of accounts. Your account provider should give you a login ID and a "
-"password, as well as any additional information you need to connect using "
-"<app>Empathy</app>."
-msgstr ""
-"Esta páxina fornece información sobre crear unha nova conta para varios "
-"tipos de conta. O seu fornecedor de contas debería fornecerlle un ID de "
-"inicio de sesión e un contrasinal, así como outra información adicional que "
-"pode necesitar para conectarse con <app>Empathy</app>."
-
-#: C/create-account.page:47(section/title)
-msgid "Facebook"
-msgstr "Facebook"
-
-#: C/create-account.page:48(section/p)
-msgid ""
-"Facebook is one of the most-used social networks. It allows users to create "
-"their own profile and to communicate with their friends."
-msgstr ""
-"Facebook é unha das redes sociais máis usadas. Permite aos usuarios crear o "
-"seu propio perfil e comunicarse cos seus amigos."
-
-#: C/create-account.page:52(section/p)
-msgid ""
-"To use Facebook to communicate with your friends, you will need to create a "
-"new account from the website: <link href=\"http://www.facebook.com\">www."
-"facebook.com</link>."
-msgstr ""
-"Para usar Facebook para comunicarse cos seus amigos necesita crear unha nova "
-"conta desde o sitio web: <link href=\"http://www.facebook.com\">www.facebook."
-"com</link>."
-
-#: C/create-account.page:62(section/p)
-msgid ""
-"Jabber is an open instant messaging system. Like email, Jabber allows you to "
-"choose your account provider and communicate with all other Jabber users, "
-"regardless of their account provider."
-msgstr ""
-"Jabber é un sistema de mensaxaría instantánea abeto. Como o correo "
-"electrónico, Jabber permítelle seleccionar o seu fornecedor de conta e "
-"comunicarse cos ouros usuarios de Jabber, independentemente do fornecedor da "
-"conta."
-
-#: C/create-account.page:66(section/p)
-msgid ""
-"You will need to create a new account with a Jabber provider. There are many "
-"free providers; one popular provider is <link href=\"http://register.jabber."
-"org/\">Jabber.org</link>."
-msgstr ""
-"Deberá crear unha nova conta con un fornecedor Jabber. Existen moitos "
-"fornecedores libres; un fornecedor popular é <link href=\"http://register."
-"jabber.org/\">Jabber.org</link>."
-
-#: C/create-account.page:71(note/p)
-msgid ""
-"If you use Google Mail or Google Talk, you already have a Jabber account. "
-"Google Talk is a Jabber service. Simply use your Google Mail address and "
-"password in <app>Empathy</app> to connect."
-msgstr ""
-"Se usa Google Mail ou Google Talk xa ten unha conta Jabber. Talk é un "
-"servizo Jabber. Simplemente use o seu enderezo de Google Mail e o seu "
-"contrasinal para conectarse."
-
-#: C/create-account.page:80(section/p)
-msgid ""
-"You do not need to create an account with a service provider to use this "
-"feature. This service works whenever you are connected to a local network, "
-"such as a wireless hotspot. It automatically finds all other users on the "
-"network who are also using this service."
-msgstr ""
-"Para usar esta característica non precisa crear unha conta con un fornecedor "
-"de servizos. Este servizo funciona sempre que esté conectado a unha rede "
-"local, tal como un punto sen fíos. Automaticamente encontra outros usuarios "
-"na rede que estean usando este servizo."
-
-#: C/create-account.page:85(section/p)
-msgid "For more information, see <link xref=\"salut-protocol\"/>."
-msgstr ""
-"Para obter máis información consulte a <link xref=\"salut-protocol\"/>."
-
-#: C/create-account.page:91(section/p)
-msgid ""
-"SIP is an open system which allows users to have audio and video "
-"conversations over the Internet. You need to create an account with a SIP "
-"provider. You can communicate with all other SIP users, regardless of which "
-"SIP provider they use."
-msgstr ""
-"SIP é un sistema aberto que permite aos usuarios realizar conversas de son e "
-"vídeo en Internet. Debe crear unha conta cun fornecedor SIP. Pode "
-"comunicarse con tódolos usuarios SIP, independentemente do fornecedor SIP "
-"que usen."
-
-#: C/create-account.page:97(note/p)
-msgid ""
-"Due to technical differences, the free <link href=\"https://www.ekiga.net/"
-"index.php?page=register\">Ekiga.net</link> service does not currently work "
-"with <app>Empathy</app>."
-msgstr ""
-"Debido a algunhas diferencias técnicas, actualmente o servizo libre <link "
-"href=\"https://www.ekiga.net/index.php?page=register\">Ekiga.net</link> non "
-"funciona con <app>Empathy</app>."
-
-#: C/create-account.page:102(section/p)
-msgid ""
-"Some SIP providers allow you to call normal phones from your computer. "
-"Generally, you will need to subscribe to a paid service for this feature."
-msgstr ""
-"Algúns fornecedores SIP permítenlle chamar a teléfonos normais desde o seu "
-"equipo. Xeralmente deberá subscribirse a un servizo de pago para usar esta "
-"característica."
-
-#: C/create-account.page:109(section/p)
-msgid ""
-"You do not need to register for an account to use IRC. Although you specify "
-"a nickname when you add an IRC account to <app>Empathy</app>, this nickname "
-"is only established each time you connect. If another user is using the "
-"nickname, you will need to choose a new nickname."
-msgstr ""
-"Non necesita rexistrar unha conta para usar o IRC. Aínda que especifique un "
-"alcume ao engadir unha conta IRC en <app>Empathy</app>, este alcume só se "
-"estabelece cada vez que se conecta. Se outro usuario está usando o nome, "
-"deberá elixir un alcume novo."
-
-#: C/create-account.page:114(section/p)
-msgid ""
-"Some IRC networks use a service called NickServ to allow users to protect "
-"their nicknames. See <link xref=\"irc-nick-password\"/> for more information."
-msgstr ""
-"Algunhas redes IRC usan un servizo chamado NickServ para permitir aos "
-"usuarios protexer os seus alcumes. Para obter máis información consulte a "
-"<link xref=\"irc-nick-password\"/>."
-
-#: C/create-account.page:117(section/p)
-msgid ""
-"Some IRC servers are password protected. You will need to know the password "
-"to connect to these servers. Generally, these are private IRC networks."
-msgstr ""
-"Algúns servidores de IRC están protexidos con contrasinal. Necesitará "
-"coñecer o contrasinal para conectarse a eses servidores. Xeralmente son "
-"redes de IRC privadas."
-
-#: C/create-account.page:122(section/title)
-msgid "Proprietary Services"
-msgstr "Servizos privativos"
-
-#: C/create-account.page:124(section/p)
-msgid ""
-"There are many proprietary instant messaging services that have been "
-"developed by different companies or organizations. <app>Empathy</app> allows "
-"you to connect to an existing account for most popular services. To create a "
-"new account with one of these services, you will need to visit the service’s "
-"web site and agree to its terms of use."
-msgstr ""
-"Existen moitos servizos privativos de mensaxaría instantánea desenvolvidos "
-"por diferentes empresas e organizacións, <app>Empathy</app> permítelle "
-"conectarse a unha conta existente dos servizos máis populares. Para crear "
-"unha nova conta con un destes servizos, debe visitar a páxina web do servizo "
-"e aceptar os termos de uso."
-
-#: C/create-account.page:132(item/p)
-msgid "<link href=\"http://dashboard.aim.com/aim\">AIM</link>"
-msgstr "<link href=\"http://dashboard.aim.com/aim\">AIM</link>"
-
-#: C/create-account.page:137(item/p)
-msgid "<link href=\"https://www.icq.com/register/\">ICQ</link>"
-msgstr "<link href=\"https://www.icq.com/register/\">ICQ</link>"
-
-#: C/create-account.page:142(item/p)
-msgid "<link href=\"https://accountservices.passport.net\">MSN</link>"
-msgstr "<link href=\"https://accountservices.passport.net\">MSN</link>"
-
-#: C/create-account.page:147(item/p)
-msgid "<link href=\"https://login.yahoo.com/config/login\">Yahoo!</link>"
-msgstr "<link href=\"https://login.yahoo.com/config/login\">Yahoo!</link>"
-
-#: C/disable-account.page:9(info/desc)
-msgid "Prevent <app>Empathy</app> from automatically logging in to an account."
-msgstr "Evitar que <app>Empathy</app> inicie sesión automaticamente na conta."
-
-#: C/disable-account.page:40(page/title)
-msgid "Disable an account"
-msgstr "Desactivar unha conta"
-
-#: C/disable-account.page:42(page/p)
-msgid ""
-"You can disable an account to prevent <app>Empathy</app> from logging in to "
-"it without removing the account entirely. You may wish to disable and re-"
-"enable an account if you only want to be logged in to the account at certain "
-"times, but you still want to use <app>Empathy</app> for other accounts."
-msgstr ""
-"Pode desactivar unha conta para evitar que <app>Empathy</app> inicie sesión "
-"nela, sen ter que quitar a conta completamente. Pode querer desactivar unha "
-"conta e reactivala se só quere iniciar sesión na conta de vez en cando, pero "
-"segue querendo usar <app>Empathy</app> para outras contas."
-
-#: C/disable-account.page:53(item/p)
-msgid ""
-"Select the account you wish to disable from the accounts list on the left "
-"side of the window."
-msgstr ""
-"Seleccione a conta que quere desactivar desde a lista de contas na parte "
-"esquerda da xanela."
-
-#: C/disable-account.page:57(item/p)
-msgid "On the right side of the window, switch it off."
-msgstr "Na parte dereita da xanela, desactíveo."
-
-#: C/disable-account.page:62(page/p)
-msgid "To re-enable the account, switch it on."
-msgstr "Para reactivar a conta simplemente actíveo."
-
-#: C/favorite-rooms.page:10(info/desc)
-msgid "Set, join and manage favorite rooms."
-msgstr "Configurar, unirse e xestionar salas favoritas."
-
-#: C/favorite-rooms.page:29(page/title)
-msgid "Favorite rooms"
-msgstr "Salas favoritas"
-
-#: C/favorite-rooms.page:32(section/title)
-msgid "Set a room as a favorite"
-msgstr "Estabelecer unha sala como favorita"
-
-#: C/favorite-rooms.page:35(item/p)
-msgid "Join a room."
-msgstr "Unirse a unha sala."
-
-#: C/favorite-rooms.page:40(item/p)
-msgid ""
-"See <link xref=\"irc-join-room\"/> for more information on how to join an "
-"IRC room."
-msgstr ""
-"Para obter máis información sobre como unirse a unha sala de chat IRC, "
-"consulte a <link xref=\"irc-join-room\"/>."
-
-#: C/favorite-rooms.page:46(item/p)
-msgid ""
-"See <link xref=\"group-conversations\"/> for more information on how to "
-"start or join a group conversation."
-msgstr ""
-"Para obter máis información sobre como unirse a unha conversa en grupo, "
-"consulte a <link xref=\"group-conversations\"/>."
-
-#: C/favorite-rooms.page:54(item/p)
-msgid ""
-"From the conversation window, choose <guiseq><gui>Conversation</"
-"gui><gui>Favorite Chat Room</gui></guiseq>."
-msgstr ""
-"Desde a xanela de conversa, elixa <guiseq><gui>Conversa</gui><gui>Sala de "
-"chat favorita</gui></guiseq>."
-
-#: C/favorite-rooms.page:63(section/title)
-msgid "Join favorite rooms"
-msgstr "Unirse ás salas favoritas"
-
-#: C/favorite-rooms.page:66(item/p) C/send-file.page:40(item/p)
-msgid "From the <gui>Contact List</gui> window, perform one of the following:"
-msgstr ""
-"Desde a xanela <gui>Lista de contactos</gui> leve a cabo unha das seguintes "
-"opcións:"
-
-#: C/favorite-rooms.page:71(item/p)
-msgid "Press <key>F5</key>."
-msgstr "Prema <key>F5</key>."
-
-#: C/favorite-rooms.page:76(item/p)
-msgid ""
-"Choose <guiseq><gui>Room</gui><gui>Join Favorites</gui></guiseq>, to join "
-"all your favorite rooms."
-msgstr ""
-"Seleccione <guiseq><gui>Salas</gui><gui>Unirse ás favoritas</gui></guiseq> "
-"para unirse a todas as súas salas favoritas."
-
-#: C/favorite-rooms.page:82(item/p)
-msgid "Choose <gui>Room</gui>, and select the favorite room you want to join."
-msgstr "Seleccione a sala favorita que quere xestionar:"
-
-#: C/favorite-rooms.page:90(note/p)
-msgid ""
-"To join a favorite room, you need to be connected to the Internet and to "
-"your account."
-msgstr ""
-"Para unirse a unha sala favorita debe estar conectado a Internet e coa conta."
-
-#: C/favorite-rooms.page:98(section/title)
-msgid "Manage favorite rooms"
-msgstr "Xestionar as salas favoritas"
-
-#: C/favorite-rooms.page:101(item/p)
-msgid ""
-"From the <gui>Contact List</gui> window, choose <guiseq><gui>Room</"
-"gui><gui>Manage Favorites</gui></guiseq>."
-msgstr ""
-"Dese a xanela <gui>Lista de contactos</gui> elixa <guiseq><gui>Sala</"
-"gui><gui>Xestionar salas favoritas</gui></guiseq>."
-
-#: C/favorite-rooms.page:107(item/p)
-msgid ""
-"From the <gui>Account</gui> drop-down list, select the account you want to "
-"manage the favorite rooms of."
-msgstr ""
-"Desde a lista despregábel <gui>Conta</gui> seleccione a conta da que quere "
-"xestionar as salas favoritas."
-
-#: C/favorite-rooms.page:111(item/p)
-msgid "Select <gui>All</gui> to see all you favorite rooms."
-msgstr "Seleccione <placeholder-1/> para ver todas as súas salas favoritas."
-
-#: C/favorite-rooms.page:116(item/p)
-msgid "Select the favorite room you want to manage:"
-msgstr "Seleccione a sala favorita que quere xestionar:"
-
-#: C/favorite-rooms.page:121(item/p)
-msgid ""
-"Select the <gui>Auto-Connect</gui> check-box in order to automatically join "
-"that room when you connect to your account."
-msgstr ""
-"Seleccione a caixa de verificación <gui>Autoconectar</gui> para unirse a esa "
-"sala automaticamente ao conectarse coa conta."
-
-#: C/favorite-rooms.page:127(item/p)
-msgid "Click on <gui>Remove</gui> to remove the room from your favorites."
-msgstr "Prema <gui>Eliminar</gui> para elimianr a sala das súas favoritas."
-
-#: C/favorite-rooms.page:134(item/p)
-msgid "When done, click <gui>Close</gui>."
-msgstr "Cando remate prema <placeholder-1/>."
-
-#: C/geolocation.page:8(info/desc)
-msgid "Use and understand geolocation in <app>Empathy</app>."
-msgstr "Usar e entender a xeolocalizacón en <app>Empathy</app>."
-
-#: C/geolocation.page:32(page/title)
-msgid "Geographical position"
-msgstr "Posición xeográfica"
-
-#: C/geolocation.page:35(section/title)
-msgid "Geolocation"
-msgstr "Xeolocalización"
-
-#: C/geolocation.page:39(section/title)
-msgid "Fix common problems"
-msgstr "Solucionar problemas comúns"
-
-#: C/geolocation-not-showing.page:8(info/desc)
-msgid "<app>Empathy</app> does not publish my geographical position."
-msgstr "<app>Empathy</app> non publica a miña posición xeográfica."
-
-#: C/geolocation-not-showing.page:32(page/title)
-msgid "Geographical position not published"
-msgstr "Posición xeográfica non publicada"
-
-#: C/geolocation-not-showing.page:34(page/p)
-msgid ""
-"If your contacts cannot see your location, <app>Empathy</app> might not be "
-"able to discover with a good margin of precision your geographical position."
-msgstr ""
-"Se os contactos non poden ver a súa posición, <app>Empathy</app> pode non "
-"ser capaz de descubrir a súa posición xeográfica con unha boa marxe de "
-"precisión."
-
-#: C/geolocation-not-showing.page:38(page/p)
-msgid ""
-"In this case, your position will not be published, but you are still able to "
-"see the location of your contacts."
-msgstr ""
-"Neste caso non se publicará a súa posición pero aínda así poderá ver a "
-"posición dos seus contactos."
-
-#: C/geolocation-not-showing.page:42(page/p)
-msgid ""
-"If you want to publish your geographical position, you can try to use an "
-"external device such as a GPS."
-msgstr ""
-"Se quere publicar a súa posición xeográfica pode intentar usar un "
-"dispositivo externo tal como un GPS."
-
-#: C/geolocation-not-showing.page:48(note/p)
-msgid ""
-"In order to publish your geographical location, your Jabber server needs to "
-"support the Personal Eventing Protocal (PEP). A list of <link href=\"http://"
-"coccinella.im/servers/servers_by_pubsub_pep.html\">servers which support "
-"PEP</link> is maintained online. Google Talk does not support this feature "
-"at this time."
-msgstr ""
-"Para publicar a súa localización xeográfica o seu servidor Jabber debe ser "
-"compatíbel co protocolo de eventos persoais (PEP). Mantense en liña unha "
-"lista dos <link href=\"http://coccinella.im/servers/servers_by_pubsub_pep."
-"html\">servidores que admiten PEP</link>. Polo momento Google Talk non é "
-"compatíbel con esta característica."
-
-#: C/geolocation-privacy.page:8(info/desc)
-msgid "What information are sent and to who."
-msgstr "Que información se envía e a quén."
-
-#: C/geolocation-privacy.page:32(page/title)
-msgid "Geolocation Privacy"
-msgstr "Privacidade na xeolocalización"
-
-#: C/geolocation-privacy.page:35(section/title)
-msgid "What information is sent"
-msgstr "Que información se envía"
-
-#: C/geolocation-privacy.page:36(section/p)
-msgid ""
-"What is possible to send is: your country, region, locality, area, street, "
-"building, floor, room, and postal code, longitude, latitude and altitude, "
-"speed and bearing."
-msgstr ""
-"É posíbel enviar: o seu país, rexión, localidade, área, calle, edificio, "
-"planta, habitación, código postal, lonxitude e latitude, velocidade e "
-"orientación."
-
-#: C/geolocation-privacy.page:40(section/p)
-msgid ""
-"The accuracy and the quantity of information about your geographical "
-"position are based on the software or on the infrastructure used to discover "
-"your position."
-msgstr ""
-"A precisión e cantidade de información sobre a súa posición xeográfica "
-"basease no software ou na infraestrutura usada para descubrir a súa posición."
-
-#: C/geolocation-privacy.page:44(section/p)
-msgid ""
-"Different kind of networks may have different accuracy settings, and may "
-"send different information. The use of external devices such as GPS or "
-"mobile phone will increase the accuracy of the information sent."
-msgstr ""
-"Diferentes tipos de redes poden ter diferentes axustes de precisión e poden "
-"enviar información diferente. O uso de dispositivos externos tales como un "
-"GPS ou teléfono móbil pode incrementar a precisión da información enviada."
-
-#: C/geolocation-privacy.page:49(section/p)
-msgid ""
-"When the privacy mode is enabled, nothing more precise than your city will "
-"be sent, even if you are using an external device."
-msgstr ""
-"Cando o modo de privacidade está activo non se enviará nada máis preciso que "
-"a súa cidade, incluso se está usando un dispositivo externo."
-
-#: C/geolocation-privacy.page:56(section/title)
-msgid "Who can see the information sent"
-msgstr "Quen pode ver a información enviada"
-
-#: C/geolocation-privacy.page:57(section/p)
-msgid "Only your contacts can see your geographical position."
-msgstr "Só os seus contactos poden ver a súa posición xeográfica."
-
-#: C/geolocation-privacy.page:63(section/title)
-msgid "What is the privacy mode"
-msgstr "Que é o modo de privacidade"
-
-#: C/geolocation-privacy.page:64(section/p)
-msgid ""
-"The privacy mode, enabled by default, is a reduced accuracy mode that will "
-"decrease the accuracy of the geographical position sent to your contacts."
-msgstr ""
-"O modo de privacidade, activado por omisión, é un modo de precisión reducida "
-"da información de posición xeográfica enviada aos seus contactos."
-
-#: C/geolocation-privacy.page:71(section/title)
-msgid "Privacy overview"
-msgstr "Vista previa da privacidade"
-
-#: C/geolocation-privacy.page:72(section/p)
-msgid ""
-"Overview of the various geolocation privacy settings in <app>Empathy</app>."
-msgstr ""
-"Visión xeral dos axustes de privacidade na xeolocalización de <app>Empathy</"
-"app>."
-
-#: C/geolocation-privacy.page:77(item/p)
-msgid "Geolocation is not enabled by default."
-msgstr "De forma predefinida a xeolocalización non está activada."
-
-#: C/geolocation-privacy.page:82(item/p)
-msgid "Privacy mode is enabled by default."
-msgstr "De forma predefinida o modo de privacidade está activado."
-
-#: C/geolocation-privacy.page:87(item/p)
-msgid ""
-"Privacy mode prevails even when using external and more precise devices."
-msgstr ""
-"O modo de privacidade prevalece incluso cando se está usando dispositivos "
-"externos máis precisos."
-
-#: C/geolocation-privacy.page:92(item/p)
-msgid "Only your contacts can see your position."
-msgstr "Só os seus contactos poden ver a súa posición."
-
-#: C/geolocation-supported.page:7(info/desc)
-msgid "Services that supports geolocation and compatibility."
-msgstr "Servizos que admiten xeolocalización e compatibilidade."
-
-#: C/geolocation-supported.page:31(page/title)
-msgid "Supported services"
-msgstr "Servizos admitidos"
-
-#: C/geolocation-supported.page:33(page/p)
-msgid ""
-"The geolocation feature at the moment is compatible only with the Jabber "
-"service. In order to use it, you and your contacts need to have a Jabber "
-"account."
-msgstr ""
-"Polo momento a opción de xeolocalización só'é compatíbel co servizo Jabber. "
-"Para poder usala, vostede e os seus contactos deben ter unha conta de Jabber."
-
-#: C/geolocation-supported.page:39(note/p)
-msgid ""
-"It is necessary that also the server you are using supports the geolocation "
-"feature. Most of the Jabber servers support it. See your service website "
-"documentation for more information."
-msgstr ""
-"Tamén é necesario que o servidor que está usando sexa compatíbel coa opción "
-"de xeolocalización. A maioría dos servidores teñen compatibilidade. Vexa a "
-"páxina web de documentación do seu servizo para obter máis información."
-
-#: C/geolocation-supported.page:47(section/title)
-msgid "Compatibility"
-msgstr "Compatibilidade"
-
-#: C/geolocation-supported.page:49(section/p)
-msgid ""
-"<app>Empathy</app> geolocation feature is not compatible with other "
-"geographical position services such as <em>Google Latitude</em>, <em>Yahoo "
-"Fire Eagle</em> or <em>Brightkite</em>."
-msgstr ""
-"A característica de xeolocalización de <app>Empathy</app> non é compatíbel "
-"con outros servizos de posición xeográfica tales como <em>Google Latitude</"
-"em>, <em>Yahoo Fire Eagle</em> ou <em>Brightkite</em>."
-
-#: C/geolocation-turn.page:9(info/desc)
-msgid "How to activate and deactivate geolocation in <app>Empathy</app>."
-msgstr "Como activar e desactivar a xeolocalización en <placeholder-1/>."
-
-#: C/geolocation-turn.page:33(page/title)
-msgid "Activate/Deactivate geolocation"
-msgstr "Activar e desactivar a xeolocalización"
-
-#: C/geolocation-turn.page:37(item/p)
-msgid "Choose <guiseq><gui>Edit</gui><gui>Preferences</gui></guiseq>."
-msgstr "Elixa <guiseq><gui>Editar</gui><gui>Preferencias</gui></guiseq>."
-
-#: C/geolocation-turn.page:42(item/p)
-msgid "Select the <gui>Location</gui> tab."
-msgstr "Seleccione o separador <gui>Localización</gui>."
-
-#: C/geolocation-turn.page:47(item/p)
-msgid ""
-"Select <gui>Publish location to my contacts</gui> to activate geolocation."
-msgstr ""
-"Seleccione <gui>Publicar a miña localización aos meus contactos</gui> para "
-"activar a xeolocalización."
-
-#: C/geolocation-turn.page:50(item/p)
-msgid "To deactivate geolocation, deselect it."
-msgstr "Para desactivar a xeolocalización, deselecciónea."
-
-#: C/geolocation-turn.page:55(item/p)
-msgid ""
-"To increase the accuracy of your position, deselect <gui>Reduce location "
-"accuracy</gui>."
-msgstr ""
-"Para aumentar a precisión da súa posición, deseleccione <gui>Reducir a "
-"precisión da localización</gui>."
-
-#: C/geolocation-turn.page:61(item/p)
-msgid ""
-"If you have an external device like a GPS or want to send a more accurate "
-"position, select the appropriate option in the <gui>Location sources</gui> "
-"section."
-msgstr ""
-"Se ten un dispositivo externo como un GPS e quere enviar unha posición máis "
-"exacta, seleccione a opción axeitada na sección <gui>Orixes das "
-"localizacións</gui>."
-
-#: C/geolocation-what-is.page:9(info/desc)
-msgid "Understanding geolocation."
-msgstr "Entender a xeolocalización."
-
-#: C/geolocation-what-is.page:33(page/title)
-msgid "What is geolocation"
-msgstr "Que é a xeolocalización"
-
-#: C/geolocation-what-is.page:35(page/p)
-msgid ""
-"Geolocation allows you to identify the real geographical location of a "
-"computer or a device connected to the Internet."
-msgstr ""
-"A xeolocalización permítelle identificar a localización xeográfica real dun "
-"equipo ou un dispositivo conectado a Internet."
-
-#: C/geolocation-what-is.page:37(page/p)
-msgid "With geolocation in <app>Empathy</app> you can:"
-msgstr "Coa xeolocalización en <app>Empathy</app> vostede pode:"
-
-#: C/geolocation-what-is.page:42(item/p)
-msgid "Publish your geographical location to your contacts."
-msgstr "Publicar a súa información xeográfica aos seus contactos."
-
-#: C/geolocation-what-is.page:47(item/p)
-msgid "See your contacts’ geographical location and quickly contact them."
-msgstr ""
-"Vexa a localización xeográfica dos seus contactos e contacte con eles "
-"rapidamente."
-
-#: C/geolocation-what-is.page:52(item/p)
-msgid ""
-"Set the accuracy of your location and the device used to discover your "
-"location."
-msgstr ""
-"Estabeleza a precisión da súa localización e o dispositivo que usar para "
-"descubrir a súa localización."
-
-#: C/geolocation-what-is.page:60(note/p)
-msgid ""
-"In order to see your contacts’ geographical locations, they need to use a "
-"service and an application that supports geolocation."
-msgstr ""
-"Para poder ver as localizacións xeográficas dos seus contactos, estes deben "
-"usan un servizo e un aplicativo que admita a xeolocalización."
-
-#: C/group-conversations.page:8(info/desc)
-msgid "Start or join a group conversation with your contacts."
-msgstr "Iniciar ou unirse a un grupo de conversa cos seus contactos."
-
-#: C/group-conversations.page:34(page/title)
-msgid "Group conversations"
-msgstr "Conversas en grupo"
-
-#: C/group-conversations.page:36(page/p)
-msgid ""
-"Group conversations permits you to have text conversations with more than "
-"one contact at the same time."
-msgstr ""
-"As conversas en grupo permítenlle manter conversas de texto con máis dun "
-"contacto ao mesmo tempo."
-
-#: C/group-conversations.page:40(page/p)
-msgid ""
-"To have a group conversation you need to have a registered account with "
-"either Jabber or Google Talk, or a People Nearby account."
-msgstr ""
-"Para ter unha conversa en grupo debe ter rexistrado unha conta en Jabber ou "
-"Google Talk, ou en Persoas próximas."
-
-#: C/group-conversations.page:46(note/p)
-msgid ""
-"You can have a group conversation only with the contacts that are using the "
-"same service as yours."
-msgstr ""
-"Pode ter conversas en grupo só cos contactos que usan o mesmo servizo que o "
-"seu."
-
-#: C/group-conversations.page:54(section/title)
-msgid "Start a group conversation"
-msgstr "Iniciar unha conversa en grupo"
-
-#: C/group-conversations.page:58(item/p)
-#: C/group-conversations.page:122(item/p) C/irc-join-room.page:39(item/p)
-msgid ""
-"From the <gui>Contact List</gui> window, choose <guiseq><gui>Room</"
-"gui><gui>Join</gui></guiseq>."
-msgstr ""
-"Desde a xanela <gui>Lista de contactos</gui> elixa <guiseq><gui>Sala</"
-"gui><gui>Unirse</gui></guiseq>."
-
-#: C/group-conversations.page:63(item/p)
-msgid ""
-"From the <gui>Account</gui> drop-down list, select the account you want to "
-"use for the group conversation."
-msgstr ""
-"Desde a lista despregábel <gui>Conta</gui> seleccione a conta que queira "
-"usar para a conversa en grupo."
-
-#: C/group-conversations.page:69(item/p)
-msgid ""
-"In the <gui>Server</gui> text box, type the name of server in which the "
-"conversation will be hosted."
-msgstr ""
-"Na caixa de texto <gui>Servidor</gui> escriba o nome do servidor no que se "
-"hospedará a conversa."
-
-#: C/group-conversations.page:73(item/p)
-msgid "Leave it empty if it will be on the current server."
-msgstr "Déixeo baleiro se será no servidor actual."
-
-#: C/group-conversations.page:78(item/p)
-msgid ""
-"In the <gui>Room</gui> text box, type the name you want to give to the "
-"conversation."
-msgstr ""
-"Na caixa de texto <gui>Sala</gui> escriba o nome que quere darlle á conversa."
-
-#: C/group-conversations.page:82(note/p)
-msgid ""
-"This will be the name of the room you are going to have a conversation. This "
-"name will be publicly available for other people to join. It is not possible "
-"to create a private room."
-msgstr ""
-"Este será o nome da sala na que vai ter unha conversa. Este nome estará "
-"publicamente dispoñíbel para que outras persoas poidan unirse. Non é posíbel "
-"crear unha sala privada."
-
-#: C/group-conversations.page:90(item/p)
-msgid ""
-"To invite other contacts to join the group conversation, from the "
-"<gui>Contact List</gui> window, select the contact you want to invite, and "
-"perform one of the following:"
-msgstr ""
-"Para invitar a outros contactos a unirse á conversa en grupo, desde a xanela "
-"<gui>Lista de contactos</gui> seleccione o contacto que quere invitar e "
-"realice unha das seguintes accións:"
-
-#: C/group-conversations.page:97(item/p)
-msgid "Right-click on the contact and choose <gui>Invite to chatroom</gui>."
-msgstr ""
-"Prema co botón dereito do rato sobre o contacto e elixa <gui>Invitar á sala "
-"de conversa</gui>."
-
-#: C/group-conversations.page:102(item/p)
-msgid ""
-"Choose <guiseq><gui>Edit</gui><gui>Contact</gui><gui>Invite to chatroom</"
-"gui></guiseq>."
-msgstr ""
-"Seleccione <guiseq><gui>Editar</gui><gui>Contacto</gui><gui>Invitar á sala "
-"de conversa</gui></guiseq>."
-
-#: C/group-conversations.page:107(item/p)
-msgid ""
-"If you have more than one group conversation open, select the one you want "
-"to invite your contacts."
-msgstr ""
-"Se ten máis dunha conversa en grupo aberta seleccione na que quere invitar "
-"aos seus contactos."
-
-#: C/group-conversations.page:118(section/title)
-msgid "Join a group conversation"
-msgstr "Unirse a unha conversa en grupo"
-
-#: C/group-conversations.page:128(item/p)
-msgid "Expand the <gui>Room List</gui> section to see all the existing rooms."
-msgstr ""
-"Expanda a sección <gui>Lista de salas</gui> para ver todas as salas "
-"existentes."
-
-#: C/group-conversations.page:133(item/p)
-msgid "Double-click on the name of a room to join it."
-msgstr "Prema dúas veces sobre o nome dunha sala á que queira unirse."
-
-#: C/group-conversations.page:139(section/p)
-msgid ""
-"It is not possible to join all existing rooms. Some of the rooms might "
-"require a password, or might be invitation only. <app>Empathy</app> does not "
-"support these kind of rooms."
-msgstr ""
-"Non é posíbel unirse a todas as salas existentes. Algunhas salas poden "
-"requirir un contrasinal ou poden ser de só invitación. <app>Empathy</app> "
-"non é compatíbel este tipo de salas."
-
-#: C/hide-contacts.page:8(info/desc)
-msgid "Hide the offline contacts from your <gui>Contact List</gui>."
-msgstr ""
-"Ocultar os contactos desconectados da súa <gui>Lista de contactos</gui>."
-
-#: C/hide-contacts.page:19(page/title)
-msgid "Hide offline contacts"
-msgstr "Ocultar os contactos desconectados"
-
-#: C/hide-contacts.page:21(page/p)
-msgid ""
-"Normally, <app>Empathy</app> shows all your contacts: those that are online, "
-"with which you can have a conversation, and also those that are offline."
-msgstr ""
-"Normalmente <app>Empathy</app> mostra todos os contactos: os que están "
-"conectados, cos que pode estabelecer unha conversa, e tamén os que están "
-"desconectados."
-
-#: C/hide-contacts.page:25(page/p)
-msgid "To hide the contacts that are offline:"
-msgstr "Para agochar os contactos desconectados."
-
-#: C/hide-contacts.page:31(item/p)
-#| msgid ""
-#| "From the <gui>Contact List</gui> window, choose <guiseq><gui>View</"
-#| "gui><gui>Offline Contacts</gui></guiseq>, or press <keyseq><key>Ctrl</"
-#| "key><key>H</key></keyseq>."
-msgid ""
-"From the <gui>Contact List</gui> window, choose <guiseq><gui>View</gui> "
-"<gui>Offline Contacts</gui></guiseq>, or press <keyseq><key>Ctrl</key> "
-"<key>H</key></keyseq>."
-msgstr ""
-"Desde a xanela <gui>Lista de contactos</gui> elixa <guiseq><gui>Ver</"
-"gui><gui>Contactos desconectados</gui></guiseq> ou prema <keyseq><key>Ctrl</"
-"key><key>H</key></keyseq>."
-
-#: C/hide-contacts.page:36(item/p)
-msgid "To show the offline contacts again, repeat the same procedure above."
-msgstr ""
-"Para mostrar os contactos desconectados de novo, repita o mesmo proceso."
-
-#: C/import-account.page:10(info/desc)
-msgid "Import an account from another instant messaging application."
-msgstr "Importar unha conta de outro aplicativo de mensaxaría instantánea."
-
-#: C/import-account.page:19(credit/name)
-msgid "Peter Haslam"
-msgstr "Peter Haslam"
-
-#: C/import-account.page:42(page/title)
-msgid "Import an existing account"
-msgstr "Importar unha conta existente"
-
-#: C/import-account.page:44(page/p)
-msgid ""
-"The first time you run <app>Empathy</app>, it will offer to import your "
-"accounts from other instant messaging applications. Currently, the only "
-"supported application is <app>Pidgin</app>."
-msgstr ""
-"A primeira vez que executa <app>Empathy</app> ofreceráselle importar as súas "
-"contas de outros aplicativos de mensaxaría instantánea. Actualmente a única "
-"aplicación compatíbel é <app>Pidgin</app>."
-
-#: C/import-account.page:50(item/p)
-msgid ""
-"Run <app>Empathy</app> for the first time. An assistant will offer you a "
-"number of options to create new accounts."
-msgstr ""
-"Execute <app>Empathy</app> por primeira vez. Aparecerá un asistente que lle "
-"permitirá crear novas contas de distintos servizos."
-
-#: C/import-account.page:54(item/p)
-msgid ""
-"Select <gui>Yes, import my account details from</gui> and click "
-"<gui>Forward</gui>."
-msgstr ""
-"Seleccione <gui>Si, importar os detalles da miña conta desde </gui>e prema "
-"en <gui>Seguinte</gui>."
-
-#: C/import-account.page:58(item/p)
-msgid "Select the check box next to each account you wish to import."
-msgstr "Marque a caixa de verificación xunto a cada conta que queira importar"
-
-#: C/import-account.page:66(note/p)
-msgid ""
-"It is not currently possible to import accounts after you have completed the "
-"first-run assistant."
-msgstr ""
-"Actualmente non é posíbel importar contas despois de ter completado o "
-"asistente de primeira execución."
-
-#. This is a reference to an external file such as an image or video. When
-#. the file changes, the md5 hash will change to let you know you need to
-#. update your localized copy. The msgstr is not used at all. Set it to
-#. whatever you like once you have updated your copy of the file.
-#: C/introduction.page:41(media)
-#| msgid ""
-#| "@@image: 'figures/empathy-main-window.png'; "
-#| "md5=54908dcb2588beddb15ef0968d2c2582"
-msgctxt "_"
-msgid ""
-"external ref='figures/empathy-main-window.png' "
-"md5='54908dcb2588beddb15ef0968d2c2582'"
-msgstr ""
-"external ref='figures/empathy-main-window.png' "
-"md5='54908dcb2588beddb15ef0968d2c2582'"
-
-#: C/introduction.page:9(info/desc)
-msgid "Introduction to the <app>Empathy</app> instant messenger."
-msgstr "Introdución ao programa de mensaxaría instantánea <app>Empathy</app>."
-
-#: C/introduction.page:21(page/title)
-msgid "Introduction"
-msgstr "Introducción"
-
-#: C/introduction.page:23(page/p)
-msgid ""
-"<app>Empathy</app> is an instant messaging application for the GNOME "
-"Desktop. It supports text messaging, voice &amp; video calls, file "
-"transfers, and all the most used messaging systems such as MSN and Google "
-"Talk."
-msgstr ""
-"<app>Empathy</app> é un aplicativo de mensaxaría instantánea para o "
-"Escritorio GNOME. É compatíbel con mensaxes de texto, chamas de voz e "
-"vídeochamadas, transferencia de ficheiro e os sistemas de mensaxaría máis "
-"populares como MSN e Google Talk."
-
-#: C/introduction.page:28(page/p)
-msgid ""
-"<app>Empathy</app> includes features that help you better collaborate while "
-"at work, and that let you easily keep in touch with your friends."
-msgstr ""
-"<app>Empathy</app> inclúe características que lle axudarán a colaborar "
-"mellor no traballo e permitiranlle manterse en contacto cos seus amigos de "
-"forma sinxela."
-
-#: C/introduction.page:32(page/p)
-msgid ""
-"Using <app>Empathy</app>, you can group all the conversations in a single "
-"window, have multiple windows for different kind of conversations, easily "
-"search through your previous conversations, and share your desktop in just "
-"two clicks."
-msgstr ""
-"Usando <app>Empathy</app> pode agrupar as conversas nunha única xanela ou "
-"ter múltiples xanelas para os diferentes tipos de conversas; busca sinxela "
-"das súas conversas anteriores e compartición do seu escritorio con un só un "
-"par de clics de rato."
-
-#: C/introduction.page:39(figure/title)
-msgid "<gui>Contact List</gui> window"
-msgstr "Xanela de <gui>Lista de contactos</gui>"
-
-#: C/introduction.page:40(figure/desc)
-msgid "<app>Empathy</app> main window"
-msgstr "Xanela principal de <app>Empathy</app>"
-
-#: C/introduction.page:42(media/p)
-msgid "<app>Empathy</app> main window."
-msgstr "Xanela principal de <app>Empathy</app>."
-
-#: C/irc-commands.page:7(info/desc)
-msgid "The supported IRC commands."
-msgstr "As ordes de IRC admitidas."
-
-#: C/irc-commands.page:18(page/title)
-msgid "Supported IRC commands"
-msgstr "Ordes IRC admitidas"
-
-#: C/irc-commands.page:19(page/p)
-msgid ""
-"To see the list of the supported IRC commands, in a chat room type <input>/"
-"help</input> and press <key>Enter</key>."
-msgstr ""
-"Para ver unha lista de ordes de IRC admitidos, nunha sala de conversa "
-"escriba <input>/help</input> e prema <key>Intro</key>."
-
-#: C/irc-commands.page:24(note/p)
-msgid "All commands available have a small description on their usage."
-msgstr ""
-"Todos as ordes dispoñíbeis teñen unha pequena descrición sobre o se uso."
-
-#: C/irc-join-pwd.page:9(info/desc)
-msgid "Enter password-protected IRC chat rooms."
-msgstr "Introduza o contrasinal para as salas de char IRC protexidas."
-
-#: C/irc-join-pwd.page:25(page/title)
-msgid "Join a protected IRC chat room"
-msgstr "Unirse a unha sala de chat IRC protexida"
-
-#: C/irc-join-pwd.page:27(page/p)
-msgid ""
-"On some IRC networks, private IRC rooms may be protected with a password. If "
-"you know the password, use the following steps to join:"
-msgstr ""
-"Nalgunhas redes IRC as salas privadas de IRC poden estar protexidas por "
-"contrasinal. Se sabe o contrasinal, realice os seguintes pasos para unirse:"
-
-#: C/irc-join-pwd.page:33(item/p)
-msgid "<link xref=\"irc-join-room\">Join the room</link> as normal."
-msgstr "<link xref=\"irc-join-room\">Unirse á sala</link> de forma normal."
-
-#: C/irc-join-pwd.page:38(item/p)
-msgid ""
-"Empathy will prompt you for a password. Enter the password for the IRC chat "
-"room and click <gui style=\"button\">Join</gui>."
-msgstr ""
-"Empathy preguntaralle o contrasinal. Introduza o contrasinal para a sala de "
-"conversa IRC e prema <gui style=\"button\">Unirse</gui>."
-
-#: C/irc-join-room.page:8(info/desc)
-msgid "Join an IRC channel."
-msgstr "Entrar nunha canle IRC."
-
-#: C/irc-join-room.page:31(page/title)
-msgid "Join an IRC chat room"
-msgstr "Unirse a unha sala de conversa IRC"
-
-#: C/irc-join-room.page:33(page/p)
-msgid ""
-"You can join IRC chat rooms (also known as IRC channels) on any IRC network "
-"you’re connected to. To connect to an IRC network, see <link xref=\"add-"
-"account\"/> and <link xref=\"account-irc\"/>."
-msgstr ""
-"Pode unirse a salas de chat IRC (tamén coñecidas como canles de IRC) en "
-"calquera rede de IRC á que estea conectado. Para conectarse a unha rede de "
-"IRC consulte a <link xref=\"add-account\"/> e a <link xref=\"account-irc\"/>."
-
-#: C/irc-join-room.page:45(item/p)
-msgid ""
-"From the <gui>Account</gui> drop-down list, select the IRC account that "
-"corresponds to the network you want to use."
-msgstr ""
-"Desde a lista despregábel <gui>Conta</gui> elixa a conta IRC que corresponda "
-"coa rede que quere usar."
-
-#: C/irc-join-room.page:51(item/p)
-msgid ""
-"In the <gui>Room</gui> text box, type the name of the channel you want to "
-"join. IRC channel names start with the hash character (<sys>#</sys>)."
-msgstr ""
-"Na caixa de texto <gui>Sala</gui>, escriba o nome da canle de IRC á que "
-"quere unirse. Preceda o nome co carácter almohadilla (<sys>#</sys>)."
-
-#: C/irc-join-room.page:57(item/p)
-msgid "Click <gui>Join</gui> to enter the room."
-msgstr "Prema <gui>Unirse</gui> para entrar na sala."
-
-#: C/irc-join-room.page:64(note/p)
-msgid ""
-"To join multiple rooms, you need to repeat the steps above for each room."
-msgstr ""
-"Para entrar en varias salas, debe repetir os pasos anteriores para cada sala."
-
-#: C/irc-manage.page:9(info/desc)
-msgid "How to use IRC with <app>Empathy</app>."
-msgstr "Como usar IRC con <placeholder-1/>."
-
-#: C/irc-manage.page:34(page/title)
-msgid "Internet Relay Chat (IRC)"
-msgstr "Internet Relay Chat (IRC)"
-
-#: C/irc-manage.page:41(when/p)
-msgid ""
-"<link action=\"install:telepathy-idle\" xref=\"index\" style=\"button"
-"\">Install telepathy-idle</link>"
-msgstr ""
-"<link action=\"install:telepathy-idle\" xref=\"index\" style=\"button"
-"\">Instalar telepathy-idle</link>"
-
-#: C/irc-manage.page:48(info/title)
-#| msgid "IRC Chat Rooms and Conversations"
-msgctxt "link"
-msgid "IRC Chat Rooms and Conversations"
-msgstr "Salas de chat e conversas de IRC."
-
-#: C/irc-manage.page:50(section/title)
-msgid "Chat Rooms and Conversations"
-msgstr "Salas de char e conversas"
-
-#: C/irc-manage.page:55(info/title)
-#| msgid "Common IRC Problems"
-msgctxt "link"
-msgid "Common IRC Problems"
-msgstr "Problemas comúns no IRC"
-
-#: C/irc-nick-password.page:10(info/desc)
-msgid "Protect your nickname to prevent other IRC users from using it."
-msgstr "Protexa o seu alcume para previr que outros usuarios do IRC o usen."
-
-#: C/irc-nick-password.page:33(page/title)
-msgid "Use a nickname password on IRC"
-msgstr "Usar un contrasinal para un alcume no IRC"
-
-#: C/irc-nick-password.page:35(page/p)
-msgid ""
-"On some IRC networks, you can register your nickname with a service called "
-"NickServ. By sending special messages to NickServ, you can set your password "
-"and identify yourself. Some IRC chat rooms may not allow you to join without "
-"a registered nickname."
-msgstr ""
-"Nalgunhas redes IRC pode rexistrar o seu alcume con un servizo chamado "
-"NickServ. Enviando mensaxes especiais a NickServ pode configurar o seu "
-"contrasinal e identificarse. Pode que algunhas salas de conversa IRC non lle "
-"permitan unirse sen un nome rexistrado."
-
-#: C/irc-nick-password.page:40(page/p)
-msgid ""
-"<app>Empathy</app> does not currently support nickname registration. Some "
-"IRC networks, however, will automatically forward a <em>server password</em> "
-"to NickServ. On these networks, you can use the IRC password in "
-"<app>Empathy</app> to identify yourself to NickServ. The popular freenode "
-"network is known to have this feature."
-msgstr ""
-"Actualmente <app>Empathy</app> non é compatíbel co rexistro de alcumes. "
-"Porén algúns servidores de IRC reenviarán automaticamente un <em>contrasinal "
-"de servidor</em> a NickServ. Nesas redes poderá usar contrasinais de IRC en "
-"<app>Empathy</app> para identificarse contra NickServ. É coñecido que a "
-"popular rede freenode dispón desta característica."
-
-#: C/irc-nick-password.page:46(page/p)
-msgid "To set an IRC server password:"
-msgstr "Para estabelecer un contrasinal de servidor de IRC:"
-
-#: C/irc-nick-password.page:54(item/p)
-msgid "Select the IRC account from the list on the left of the dialog."
-msgstr "Seleccione a conta de IRC da lista na parte esquerda do diálogo."
-
-#: C/irc-nick-password.page:57(item/p)
-msgid ""
-"In the <gui>Password</gui> field, type the password you used to register "
-"your nikcname."
-msgstr ""
-"Na caixa de texto <gui>Contrasinal</gui> escriba o contrasinal que quere "
-"usar para rexistrar o seu alcume."
-
-#: C/irc-nick-password.page:69(note/p)
-msgid ""
-"These instructions only allow you to use a password-protected nickname on "
-"certain IRC networks. It is not currently possible to register an IRC "
-"nickname or change your nickname password using <app>Empathy</app>."
-msgstr ""
-"Estas instrucións só lle permiten usar un alcume protexido por contrasinal "
-"en certas redes IRC. Actualmente non é posíbel rexistrar un alcume IRC ou "
-"cambiar o seu contrasinal de alcume usando <placeholder-1/>."
-
-#: C/irc-send-file.page:9(info/desc)
-msgid "<app>Empathy</app> does not currently support sending files using IRC."
-msgstr "Actualmente non é posíbel enviar ficheiros mediante o IRC."
-
-#: C/irc-send-file.page:31(page/title)
-msgid "Send files over IRC"
-msgstr "Enviar ficheiros mediante o IRC"
-
-#: C/irc-send-file.page:33(page/p)
-msgid "It is not currently possible to send files using IRC."
-msgstr "Actualmente non é posíbel enviar ficheiros mediante o IRC."
-
-#: C/irc-start-conversation.page:8(info/desc)
-msgid "Start a conversation with an IRC contact."
-msgstr "Iniciar unha conversa con un contacto do IRC."
-
-#: C/irc-start-conversation.page:30(page/title)
-msgid "Chat with somebody on IRC"
-msgstr "Conversar con alguén no IRC"
-
-#: C/irc-start-conversation.page:32(page/p)
-msgid ""
-"You can hold private conversations with other IRC users, outside of the "
-"public IRC chat rooms. To start a conversation with another IRC user:"
-msgstr ""
-"Pode manter conversas privadas con outros usuarios do IRC, fora das salas "
-"públicas do IRC. Para iniciar unha conversa con outro usuario do IRC:"
-
-#: C/irc-start-conversation.page:37(item/p)
-msgid ""
-"In the contact list for an IRC chat room, double click the name of the user "
-"you want to chat with. Alternatively, right click the name of the user and "
-"choose <gui>Chat</gui>."
-msgstr ""
-"Na lista de contactos para a sala de chat do IRC, prema dúas veces no nome "
-"do usuario co que quere falar. De forma alternativa, prema co botón dereito "
-"sobre o nome de usuario e elixa <gui>Conversa</gui>."
-
-#: C/irc-start-conversation.page:45(item/p)
-msgid ""
-"The IRC room contact list is not the same as <app>Empathy</app> contact "
-"list. It contains a list of users in the IRC chat room you joined. Different "
-"rooms can have different contacts listed."
-msgstr ""
-"A lista de contactos da sala IRC non é igual que a lista de contactos de "
-"<app>Empathy</app>. Contén unha lista de usuarios na sala de chat do IRC á "
-"que se uniu. Salas diferentes poden ter diferentes listados de contactos."
-
-#: C/irc-start-conversation.page:52(item/p)
-msgid ""
-"The IRC room contact list is usually on the right side of the IRC room "
-"window. If you do not see it, choose <guiseq><gui>Conversation</"
-"gui><gui>Show Contact List</gui></guiseq>."
-msgstr ""
-"A lista de contactos dunha sala de IRC xeralmente está na parte dereita da "
-"xanela da sala de IRC. Se non a ve elixa <guiseq><gui>Conversa</"
-"gui><gui>Mostrar a lista de contactos</gui></guiseq>."
-
-#: C/license.page:8(info/desc)
-msgid "Legal information."
-msgstr "Información legal."
-
-#: C/license.page:11(page/title)
-msgid "License"
-msgstr "Licenza"
-
-#: C/license.page:12(page/p)
-msgid ""
-"This work is distributed under a CreativeCommons Attribution-Share Alike 3.0 "
-"Unported license."
-msgstr ""
-"Este traballo está licenciado baixo una Licenza Creative Commons Atribución "
-"- Compartir igual 3.0 sen asistencia."
-
-#: C/license.page:20(page/p)
-msgid "You are free:"
-msgstr "É libre de:"
-
-#: C/license.page:25(item/title)
-#| msgid "To share"
-msgid "<em>To share</em>"
-msgstr "<em>Compartir</em>"
-
-#: C/license.page:26(item/p)
-msgid "To copy, distribute and transmit the work."
-msgstr "Copiar, distribuír e comunicar publicamente a obra"
-
-#: C/license.page:29(item/title)
-#| msgid "To remix"
-msgid "<em>To remix</em>"
-msgstr "<em>Facer obras derivadas</em>"
-
-#: C/license.page:30(item/p)
-msgid "To adapt the work."
-msgstr "Adaptar o traballo."
-
-#: C/license.page:33(page/p)
-msgid "Under the following conditions:"
-msgstr "Baixo as seguintes condicións:"
-
-#: C/license.page:38(item/title)
-#| msgid "Attribution"
-msgid "<em>Attribution</em>"
-msgstr "<em>Atribución</em>"
-
-#: C/license.page:39(item/p)
-msgid ""
-"You must attribute the work in the manner specified by the author or "
-"licensor (but not in any way that suggests that they endorse you or your use "
-"of the work)."
-msgstr ""
-"Debe recoñecer os créditos da obra da maneira especificada polo autor ou o "
-"licenciatario (pero non dunha maneira que suxira que ten o seu apoio ou "
-"apoian o uso que fai da súa obra)."
-
-#: C/license.page:46(item/title)
-#| msgid "Share Alike"
-msgid "<em>Share Alike</em>"
-msgstr "<em>Compartir igual</em>"
-
-#: C/license.page:47(item/p)
-msgid ""
-"If you alter, transform, or build upon this work, you may distribute the "
-"resulting work only under the same, similar or a compatible license."
-msgstr ""
-"Se modifica, transforma ou constrúe sobre este traballo debe distribuír o "
-"traballo resultando baixo unha licenza igual, similar ou compatíbel."
-
-#: C/license.page:53(page/p)
-msgid ""
-"For the full text of the license, see the <link href=\"http://"
-"creativecommons.org/licenses/by-sa/3.0/legalcode\">CreativeCommons website</"
-"link>, or read the full <link href=\"http://creativecommons.org/licenses/by-"
-"sa/3.0/\">Commons Deed</link>."
-msgstr ""
-"Pode encontrar o texto completo da licenza vexa o <link href=\"http://"
-"creativecommons.org/licenses/by-sa/3.0/legalcode\">sitio web de "
-"CreativeCommons</link>, ou lea o <link href=\"http://creativecommons.org/"
-"licenses/by-sa/3.0/\">Escrito de Commons</link> completo."
-
-#: C/link-contacts.page:11(info/desc)
-msgid "Merge and separate different contacts into a single one."
-msgstr "Unir e separar diferentes contactos nun só."
-
-#: C/link-contacts.page:25(page/title)
-msgid "Combine and separate contacts"
-msgstr "Combinar e separar contactos"
-
-#: C/link-contacts.page:26(page/p)
-msgid ""
-"If one, or more, of your contacts has multiple accounts with different "
-"messaging services, you can combine these contacts into a single one."
-msgstr ""
-"Se un, ou máis, dos seus contactos ten múltiples contas con diferentes "
-"servizos de mensaxaría, pode combinar estes contactos nun único."
-
-#: C/link-contacts.page:30(page/p)
-msgid ""
-"The resulting contact is called a <em>meta-contact</em>: a contact composed "
-"from different single contacts."
-msgstr ""
-"O contacto resultante chámase un <em>meta-contacto</em>: un contacto "
-"composto por diferentes contactos sinxelos."
-
-#: C/link-contacts.page:34(page/p)
-msgid ""
-"If you have a Jane Smith contact that is using three different messaging "
-"services like:"
-msgstr ""
-"Se ten un contacto Xoán Souto que está usando tres servizos de mensaxaría "
-"como:"
-
-#: C/link-contacts.page:40(item/p)
-msgid "janes@facebook"
-msgstr "xoan@facebook"
-
-#: C/link-contacts.page:45(item/p)
-msgid "jane.smith@gmail"
-msgstr "xoan.souto@gmail"
-
-#: C/link-contacts.page:50(item/p)
-msgid "jane_smith@hotmail"
-msgstr "xoan_souto@hotmail"
-
-#: C/link-contacts.page:55(page/p)
-msgid "You can combine these contacts into a single Jane Smith one."
-msgstr "Pode combinar estes contactos nun só Xoán Souto"
-
-#: C/link-contacts.page:60(section/title)
-msgid "Combining contacts"
-msgstr "Combinar contactos"
-
-#: C/link-contacts.page:63(item/p)
-msgid ""
-"From the <gui>Contact List</gui> window, right-click one of the contact that "
-"has different accounts, and select <gui style=\"menuitem\">Link Contacts...</"
-"gui>."
-msgstr ""
-"Desde a xanela <gui>Lista de contactos</gui>, prema co botón dereito un dos "
-"contactos que ten diferentes contas, e seleccione <gui style=\"menuitem"
-"\">Ligar contactos...</gui>."
-
-#: C/link-contacts.page:70(item/p)
-msgid ""
-"From the left pane in the <gui>Link Contacts</gui> window, select the "
-"contacts you want to combine."
-msgstr ""
-"Desde o panel lateral na xanela <gui>Contactos ligados</gui> seleccione os "
-"contactos que quere combinar."
-
-#: C/link-contacts.page:76(item/p)
-msgid "Click <gui style=\"button\">Link</gui>."
-msgstr "Prema <gui style=\"button\">Ligar</gui>."
-
-#: C/link-contacts.page:82(note/p)
-msgid ""
-"When a meta-contact has been created, the default contact that will be used "
-"to have a conversation with when you double-click on it, is the contact with "
-"the highest presence on-line."
-msgstr ""
-"Cando se cree un meta-contacto, o contacto predeterminado usarase para ter "
-"unha conversa con el ao premer dúas veces sobre el, este contacto terá a "
-"presencia en liña máis alta."
-
-#: C/link-contacts.page:91(section/title)
-msgid "Separating contacts"
-msgstr "Separar contactos"
-
-#: C/link-contacts.page:94(item/p)
-msgid ""
-"From the <gui>Contact List</gui>, right-click the contact to separate, and "
-"select <gui style=\"menuitem\">Link Contacts...</gui>."
-msgstr ""
-"Desde a <gui>Lista de contactos</gui>, prema co botón dereito para contactar "
-"con el de forma separada, e seleccione <gui style=\"menuitem\">Ligar "
-"contactos...</gui>."
-
-#: C/link-contacts.page:100(item/p)
-msgid "Click <gui style=\"button\">Unlink</gui>."
-msgstr "Prema <gui style=\"button\">Desligar</gui>."
-
-#: C/prev-conv.page:8(info/desc)
-msgid "Browse or search your previous conversations."
-msgstr "Explorar ou buscar nas súas mensaxes anteriores."
-
-#: C/prev-conv.page:36(page/title)
-msgid "View previous conversations"
-msgstr "Ver as conversas anteriores"
-
-#: C/prev-conv.page:38(page/p)
-msgid ""
-"<app>Empathy</app> automatically saves all your text conversations you have "
-"with your contacts. You can <link xref=\"#search\">search through all of "
-"your previous conversations</link> or <link xref=\"#browse\">browse previous "
-"conversations</link> by contact and date."
-msgstr ""
-"<app>Empathy</app> garda automaticamente todas as conversas de texto que ten "
-"cos seus contactos. Pode <link xref=\"#search\">buscar a través de todas as "
-"súas conversas anteriores</link> ou <link xref=\"#browse\">buscar conversas "
-"anteriores</link> por contacto e data."
-
-#: C/prev-conv.page:46(note/p)
-msgid ""
-"You do not need to be connected to the Internet to view and search your "
-"previous conversations."
-msgstr ""
-"Non necesita estar conectado a Internet para ver e buscar nas súas conversas "
-"anteriores."
-
-#: C/prev-conv.page:53(section/title)
-msgid "Search previous conversations"
-msgstr "Buscar conversas anteriores"
-
-#: C/prev-conv.page:55(section/p)
-msgid ""
-"You can perform a full-text search through all of your previous "
-"conversations."
-msgstr ""
-"Pode realizar unha busca de texto completo sobre todas as súas conversas "
-"anteriores."
-
-#: C/prev-conv.page:59(item/p) C/prev-conv.page:87(item/p)
-#| msgid ""
-#| "From the <gui>Contact List</gui> window, choose <guiseq><gui>View</"
-#| "gui><gui>Previous Conversations</gui></guiseq>. Alternatively, press "
-#| "<key>F3</key>."
-msgid ""
-"From the <gui>Contact List</gui> window, choose <guiseq><gui>View</gui> "
-"<gui>Previous Conversations</gui></guiseq>. Alternatively, press <key>F3</"
-"key>."
-msgstr ""
-"Desde a xanela <gui>Lista de contactos</gui> seleccione <guiseq><gui>Ver</"
-"gui><gui>Conversas previas</gui></guiseq>. De forma alternativa prema "
-"<key>F3</key>."
-
-#: C/prev-conv.page:63(item/p)
-msgid ""
-"Select an account from the drop-down list in the top. A list of contacts and "
-"chat room for that account will be shown below."
-msgstr ""
-"Seleccione unha conta desde a lista despregábel na parte superior. "
-"Mostrarase unha lista de contactos e salas de conversa para dita conta."
-
-#: C/prev-conv.page:67(item/p)
-msgid ""
-"Type the text you want to search for in the <gui>Search</gui> text field."
-msgstr "Escriba o texto que quere buscar no campo de texto <gui>Buscar</gui>."
-
-#: C/prev-conv.page:71(item/p)
-msgid ""
-"Any conversations that matched your search terms will be shown. By default, "
-"conversations are ordered by date."
-msgstr ""
-"Mostrarase calquera conversa que coincida cos seus termos de busca. Por "
-"omisión, as conversas ordénanse por data."
-
-#: C/prev-conv.page:80(section/title)
-msgid "Browse previous conversations"
-msgstr "Explorar as conversas anteriores"
-
-#: C/prev-conv.page:82(section/p)
-msgid ""
-"You can browse your previous conversations with your contacts or in chat "
-"rooms by date."
-msgstr ""
-"Pode examinar por data as conversas previas cos seus contactos ou en salas "
-"de conversa."
-
-#: C/prev-conv.page:91(item/p)
-msgid ""
-"Select an account from the drop-down list in the top left. A list of "
-"contacts and chat room for that account will be shown below."
-msgstr ""
-"Seleccione unha conta desde a lista despregábel na parte superior esquerda. "
-"Mostrarase unha lista de contactos e salas de conversa para dita conta."
-
-#: C/prev-conv.page:95(item/p)
-msgid ""
-"Select a contact or chat room to view your previous conversations from. By "
-"default the most recent conversation will be shown."
-msgstr ""
-"Seleccione un contacto ou sala de conversa desde a que ver as anteriores "
-"conversas. Por omisión mostrarase a conversa máis recente."
-
-#: C/prev-conv.page:99(item/p)
-msgid ""
-"You can browse your conversations by date. Days on which you had a "
-"conversation with the selected contact will be shown in bold text. Click a "
-"date to select it. Click the arrows next to the month and year to browse "
-"earlier dates."
-msgstr ""
-"Pode explorar as súas conversas por data. Mostraranse os días nos que tipo "
-"unha conversa co contacto seleccionado en texto en negriña. Prema na data "
-"para seleccionala e prema nas frechas ao lado do mes e ano para explorar as "
-"datas máis cercanas."
-
-#: C/prev-conv.page:105(section/p)
-msgid ""
-"You can search for text in the conversations by typing into the search field "
-"at the top. The matching conversations will be showed."
-msgstr ""
-"Pode buscar dentro do texto das conversas escribindo no campo de texto de "
-"busca na parte superior. O texto coincidente resaltarase."
-
-#: C/prev-conv.page:111(note/p)
-msgid ""
-"You can quickly view the previous conversations with one of your contacts "
-"from the <gui>Contact List</gui> window. Simply right click the contact and "
-"choose <gui>Previous Conversations</gui>. The <gui>Previous Conversations</"
-"gui> window will open with that contact already selected."
-msgstr ""
-"Pode ver rapidamente as conversas anteriores con un dos seus contactos desde "
-"a xanela <gui>Lista de contactos</gui>. Simplemente prema co botón dereito "
-"do rato sobre o contacto e seleccione <gui>Conversas anteriores</gui>. "
-"Abrirase a xanela <gui>Conversas anteriores</gui> co contacto seleccionado."
-
-#: C/prob-conn-acctdisabled.page:7(info/desc)
-msgid ""
-"The instant messaging account that you want to use is not enabled in the "
-"list of accounts."
-msgstr ""
-"A conta de mensaxaría instantánea que quere usar non está activada na lista "
-"de contas."
-
-#: C/prob-conn-acctdisabled.page:34(page/title)
-msgid "My account is not enabled"
-msgstr "A miña conta non está activada"
-
-#: C/prob-conn-acctdisabled.page:36(page/p)
-msgid ""
-"If the instant messaging account that you want to use is not enabled in the "
-"drop-down account list when you try to start a new conversation or join a "
-"room, your account details may not be correct."
-msgstr ""
-"Se a conta de mensaxaría instantánea que quere usar non está activada na "
-"lista despregábel de contas, cando tenta iniciar unha conversa nova ou "
-"unirse a unha charla, pode que os detalles da súa conta non sexa correctos."
-
-#: C/prob-conn-acctdisabled.page:44(item/p) C/prob-conn-auth.page:45(item/p)
-#: C/prob-conn-neterror.page:53(item/p)
-msgid ""
-"Make sure that you are connected to the Internet, or to a local area network."
-msgstr ""
-"Asegúrese de que está conectado a Internet ou a unha rede de área local."
-
-#: C/prob-conn-acctdisabled.page:49(item/p)
-msgid ""
-"Choose <guiseq><gui>Edit</gui><gui>Accounts</gui></guiseq> and select the "
-"account that is not working."
-msgstr ""
-"Elixa <guiseq><gui>Editar</gui><gui>Contas</gui></guiseq> e seleccione a "
-"conta que non está funcionando."
-
-#: C/prob-conn-acctdisabled.page:55(item/p) C/prob-conn-auth.page:63(item/p)
-msgid ""
-"Type your username and password again to make sure that they are correct."
-msgstr ""
-"Escriba o seu nome de usuario e contrasinal de novo e asegúrese de que son "
-"correctos."
-
-#: C/prob-conn-acctdisabled.page:60(item/p)
-#: C/prob-conn-neterror.page:64(item/p)
-msgid ""
-"Check in the <gui>Advanced</gui> section that all the details are correct. "
-"You should be able to find these details from the website of the messaging "
-"service."
-msgstr ""
-"Comprobe na sección <placeholder-1/> que todos os detalles son correctos. "
-"Vostede poderá encontrar estes detalles no sitio web do seu servizo de "
-"mensaxería."
-
-#: C/prob-conn-acctdisabled.page:66(item/p)
-msgid "Check that the account is switched on."
-msgstr "Comprobe que a conta está activada."
-
-#: C/prob-conn-auth.page:8(info/desc)
-msgid ""
-"An error message which says “<gui>Authentication failed</gui>” appears in "
-"the main window."
-msgstr ""
-"Aparece unha mensaxe de erro na xanela principal que mostra «<gui>Fallo de "
-"autenticación</gui>»."
-
-#: C/prob-conn-auth.page:36(page/title)
-msgid "I get a message that says “Authentication failed”"
-msgstr "Obteño unha mensaxe que di «Produciuse un fallo na autenticación»"
-
-#: C/prob-conn-auth.page:38(page/p)
-msgid ""
-"This kind of error happens when your instant messaging service is not "
-"allowing you to connect because it does not recognize your username or "
-"password for some reason."
-msgstr ""
-"Este tipo de erro prodúcese cando o seu servizo de mensaxaría intantánea non "
-"lle está permitindo conectar porque por algunha razón non recoñece o seu "
-"nome de usuario ou contrasinal."
-
-#: C/prob-conn-auth.page:50(item/p)
-msgid ""
-"Make sure that you have registered an account with the service you are "
-"trying to connect to. If you do not have an account, most services will not "
-"allow you to connect."
-msgstr ""
-"Asegúrese de que rexistrou unha conta co servizo ao que está tentando "
-"conectarse. Se non ten unha conta a maioría dos servizos non lle permitirán "
-"que se conecte."
-
-#: C/prob-conn-auth.page:57(item/p) C/prob-conn-name.page:43(item/p)
-#: C/prob-conn-neterror.page:58(item/p)
-msgid ""
-"Click the <media type=\"image\" mime=\"image/png\" src=\"figures/gtk-edit.png"
-"\">edit</media> icon in the error message."
-msgstr ""
-"<media type=\"image\" mime=\"image/png\" src=\"figures/empathy-logo.png"
-"\">Logotipo da mensaxaría instantánea Empathy</media>Mensaxaría instantánea "
-"Empathy"
-
-#: C/prob-conn-auth.page:68(item/p)
-msgid ""
-"Deselect the <gui>Enabled</gui>, and then select it again to try to "
-"reconnect to the service."
-msgstr ""
-"Deseleccione <placeholder-1/>, e seleccióneo de novo para tentar "
-"reconectarse ao servizo."
-
-#: C/prob-conn-name.page:9(info/title)
-#| msgid "“Name in use”"
-msgctxt "link:error-msg"
-msgid "“Name in use”"
-msgstr "«Nome en uso»"
-
-#: C/prob-conn-name.page:10(info/desc)
-msgid ""
-"An error message which says “<gui>Name in use</gui>” appears in the main "
-"window."
-msgstr ""
-"Aparecen na xanela principal unha mensaxe de erro que dice «<gui>Nome en "
-"uso</gui>»"
-
-#: C/prob-conn-name.page:33(page/title)
-msgid "I get a message that says “Name in use”"
-msgstr "Obteño unha mensaxe de erro que mostra «Nome en uso»"
-
-#: C/prob-conn-name.page:35(page/p)
-msgid ""
-"This kind of error happens when you try to connect to your IRC account and "
-"you are using a nickname that is already being used by someone else on that "
-"particular network."
-msgstr ""
-"Este tipo de erro sucede cando tenta conectarse á súa conta de IRC e está "
-"usando un alcume que xa está usando outra persoa nesa rede en particular."
-
-#: C/prob-conn-name.page:51(item/p)
-msgid "In the <gui>Nickname</gui> text box, type a new nickname."
-msgstr "Na caixa de texto <gui>Alcume</gui> escriba un alcume novo."
-
-#: C/prob-conn-name.page:56(item/p)
-msgid ""
-"If you have registered that nickname within the network you are using, set "
-"the password for that nickname. For more information, see <link xref=\"irc-"
-"nick-password\"/>."
-msgstr ""
-"Se rexistrou ese alcume na rede que está usando, estabeleza o contrasinal "
-"para ese alcume. Para obter máis información consulte a <link xref=\"irc-"
-"nick-password\"/>."
-
-#: C/prob-conn-name.page:65(item/p) C/prob-conn-neterror.page:79(item/p)
-msgid ""
-"Switch the account off, and then switch it on to try to reconnect to the "
-"service."
-msgstr ""
-"Deseleccione a conta, e selecciónea de novo para tentar reconectarse ao "
-"servizo."
-
-#: C/prob-conn-neterror.page:7(info/desc)
-msgid ""
-"An error message which says “<gui>Network error</gui>” appears in the main "
-"window."
-msgstr ""
-"Aparecerá a mensaxe de erro «<gui>Erro de rede</gui>» na xanela principal."
-
-#: C/prob-conn-neterror.page:34(page/title)
-msgid "I get a message that says “Network error”"
-msgstr "Obteño unha mensaxe que mostra «Erro de rede»"
-
-#: C/prob-conn-neterror.page:42(page/p)
-msgid ""
-"This kind of error happens when <app>Empathy</app> cannot communicate with "
-"the instant messaging service for some reason."
-msgstr ""
-"Este tipo de mensaxe sucede cando <app>Empathy</app> non se pode comunicar "
-"co servizo de mensaxaría instantánea por algunha razón."
-
-#: C/prob-conn-neterror.page:46(page/p)
-msgid ""
-"Also, this kind of error happens when you try to use an IRC account without "
-"setting a nickname."
-msgstr ""
-"Este tipo de erro tamén sucede cando intenta usar unha conta de IRC sen ter "
-"configurado o alcume"
-
-#: C/prob-conn-neterror.page:87(section/title)
-msgid "Proxy support"
-msgstr "Compatibilidade de proxy"
-
-#: C/prob-conn-neterror.page:88(section/p)
-msgid ""
-"At the moment <app>Empathy</app> can not be configured to work with a proxy."
-msgstr ""
-"Polo momento <app>Empathy</app> non se pode configurar para que funcione cun "
-"proxy."
-
-#: C/prob-conn.page:7(info/desc)
-msgid "Diagnose common problems connecting to an instant messaging service."
-msgstr ""
-"Diagnosticar problemas comúns ao conectarse a un servizo de mensaxaría "
-"instantánea."
-
-#: C/prob-conn.page:29(page/title)
-msgid "Problems connecting to an instant messaging service"
-msgstr "Problemas ao conectarse a un servizo de mensaxaría instantánea"
-
-#: C/remove-account.page:8(info/desc)
-msgid "Completely remove an account from <app>Empathy</app>."
-msgstr "Quitar completamente unha conta en <app>Empathy</app>."
-
-#: C/remove-account.page:34(page/title)
-msgid "Remove an account"
-msgstr "Eliminar unha conta"
-
-#: C/remove-account.page:36(page/p)
-msgid ""
-"You can completely remove an account from <app>Empathy</app> if you no "
-"longer wish to use the account. If you wish to use the account in "
-"<app>Empathy</app> again in the future, you will have to add your account "
-"details again."
-msgstr ""
-"Pode quitar completamente unha conta de <app>Empathy</app> se non quere "
-"seguir usándoa. Se quere usar de novo a conta en <app>Empathy</app> no "
-"futuro, deberá engadir os detalles da conta de novo."
-
-#: C/remove-account.page:47(item/p)
-msgid ""
-"Select the account you wish to remove from the accounts list on the left "
-"side of the window."
-msgstr ""
-"Seleccione a conta que desexa eliminar desde a lista de contas na parte "
-"esquerda da xanela."
-
-#: C/remove-account.page:51(item/p)
-msgid "Click <gui style=\"button\">-</gui>."
-msgstr "Prema <gui style=\"button\">-</gui>."
-
-#: C/remove-account.page:54(item/p)
-msgid ""
-"A dialog will be shown asking for confirmation. Click the <gui>Remove</gui> "
-"button to permanently remove the account."
-msgstr ""
-"Mostrarase un diálogo preguntando por unha confirmación. Prema no botón "
-"<gui>Eliminar</gui> para quitar a conta permanentemente."
-
-#: C/remove-account.page:60(note/p)
-msgid ""
-"Even after removing an account, <app>Empathy</app> does not delete your "
-"conversation history for that account."
-msgstr ""
-"Incluso despois de eliminar unha conta <app>Empathy</app> non borra o seu "
-"historial de conversas para esa conta."
-
-#: C/salut-protocol.page:8(info/desc)
-msgid "Understanding the People Nearby feature."
-msgstr "Entender a característica de Persoas próximas."
-
-#: C/salut-protocol.page:33(page/title)
-msgid "What is People Nearby?"
-msgstr "Que é Persoas próximas"
-
-#: C/salut-protocol.page:40(page/p)
-msgid ""
-"The People Nearby service is a serverless communication service: you do not "
-"need to connect and authenticate to a central server in order to use it."
-msgstr ""
-"O servizo de Xente próxima é un servizo de comunicación sen servidores: non "
-"precisa conectarse e autenticarse contra un servidor central para poder "
-"usalo."
-
-#: C/salut-protocol.page:45(page/p)
-msgid ""
-"This kind of serverless messaging system is restricted to a local area "
-"network and an active Internet connection is not necessary."
-msgstr ""
-"Este tipo de sistemas de mensaxería sen servidores está restrinxido a redes "
-"de área local e non se necesita unha conexión activa con Internet."
-
-#: C/salut-protocol.page:49(page/p)
-msgid ""
-"The people that use this service inside the same local area network will be "
-"auto-discovered, and it will be possible to send them messages and files as "
-"with other services."
-msgstr ""
-"A xente que usa o servizo dentro da mesma rede de área local autodestruirase "
-"e será posíbel enviarlles mensaxes e ficheiros ao igual que con outros "
-"servizos"
-
-#: C/salut-protocol.page:54(page/p)
-msgid ""
-"All the modern local area networks should be able to support this kind of "
-"service."
-msgstr ""
-"Todas as redes modernas de área local deberían poder admitir este tipo de "
-"servizos."
-
-#: C/send-file.page:8(info/desc)
-msgid "Send a file from your computer to one of your contacts."
-msgstr "Enviar un ficheiro desde o seu computador a un dos seus contactos."
-
-#: C/send-file.page:36(page/title)
-msgid "Send files"
-msgstr "Enviar ficheiros"
-
-#: C/send-file.page:45(item/p)
-msgid ""
-"Right click on the contact you want to send a file to, and choose <gui>Send "
-"file</gui>."
-msgstr ""
-"Prema co botón dereito sobre o nome do contacto co que quere manter unha "
-"conversa e seleccione <placeholder-1/>."
-
-#: C/send-file.page:50(item/p)
-#| msgid ""
-#| "Click on the contact you want to send a file, and choose "
-#| "<guiseq><gui>Edit</gui><gui>Contact</gui><gui>Send file</gui></guiseq>."
-msgid ""
-"Click on the contact you want to send a file, and choose <guiseq><gui>Edit</"
-"gui> <gui>Contact</gui><gui>Send file</gui></guiseq>."
-msgstr ""
-"Prema sobre o contacto ao que quere enviar un ficheiro e elixa "
-"<guiseq><gui>Editar</gui><gui>Contacto</gui><gui>Enviar ficheiro</gui></"
-"guiseq>."
-
-#: C/send-file.page:58(item/p)
-msgid "Select the file to send, and click on <gui>Send</gui>."
-msgstr "Seleccione o ficheiro para enviar e prema <gui>Enviar</gui>."
-
-#: C/send-file.page:63(item/p)
-msgid "The <gui>File Transfers</gui> window will appear."
-msgstr "Aparecerá a xanela <gui>Transferencia de ficheiros</gui>."
-
-#: C/send-file.page:66(item/p)
-msgid ""
-"Wait for your contact to accept the file transfer, or click <gui>Stop</gui> "
-"to halt the transfer."
-msgstr ""
-"Agarde a que o seu contacto acepte a transferencia de ficheiro e prema "
-"<gui>Deter</gui> para deter a transferencia."
-
-#: C/send-file.page:72(item/p)
-msgid ""
-"Once the transfer is finished, it is possible to close the <gui>File "
-"Transfers</gui> window."
-msgstr ""
-"Cano remate a transferencia é posíbel pechar a xanela <gui>Transferencia de "
-"ficheiro</gui>."
-
-#: C/send-file.page:80(note/p)
-msgid ""
-"If you have multiple finished transfers listed in the window, click on "
-"<gui>Clear</gui> to empty the list. This will only remove the files from the "
-"list and will not delete them from your computer."
-msgstr ""
-"Se ten múltiples transferencias finalizadas listas na xanela prema "
-"<gui>Limpar</gui> para baleirar a lista. Isto só quitará os ficheiros da "
-"lista e non os borrará do computador."
-
-#: C/send-file.page:87(note/p)
-msgid ""
-"It is possible to send files only using the following services: <em>Jabber</"
-"em>, <em>Google Talk</em> and <em>People Nearby</em>."
-msgstr ""
-"So é posíbel enviar ficheiros ao usar os seguintes servizos: <em>Jabber</"
-"em>, <em>Google Talk</em> e <em>Personas próximas</em>."
-
-#: C/send-file.page:93(note/p)
-msgid ""
-"In order to send a file to someone, you need to be connected to the "
-"Internet, or to a local area network."
-msgstr ""
-"Para enviarlle un ficheiro a unha persoa debe estar conectado a Internet ou "
-"á rede local."
-
-#: C/send-message.page:8(info/desc)
-msgid "Send a message to one of your contacts."
-msgstr "Enviar unha mensaxe a un dos seus contactos."
-
-#: C/send-message.page:32(page/title)
-msgid "Send a message to someone"
-msgstr "Enviar unha mensaxe a alguén"
-
-#: C/send-message.page:36(item/p)
-msgid ""
-"From the <gui>Contact List</gui> window, double-click the name of the "
-"contact that you want to have a conversation with."
-msgstr ""
-"Desde a xanela <gui>Lista de contactos</gui>, prema dúas veces sobre o nome "
-"do contacto co que quere ter unha conversa."
-
-#: C/send-message.page:42(item/p)
-msgid ""
-"A new window will open. Type a message into the box at the bottom of the "
-"window and press <key>Enter</key> to send it."
-msgstr ""
-"Abrirase unha nova xanela. Escriba a mensaxe na caixa na parte inferior da "
-"xanela e prema <placeholder-1/> para enviala."
-
-#: C/send-message.page:50(section/title)
-msgid "Send a message to a meta-contact"
-msgstr "Enviar unha mensaxe a un metacontacto"
-
-#: C/send-message.page:58(item/p)
-msgid ""
-"Select the contact you want to have the conversation, and from the menu "
-"select <gui style=\"menuitem\">Chat</gui>."
-msgstr ""
-"Prema co botón dereito sobre o nome do contacto co que quere manter unha "
-"conversa e desde o menú seleccione <gui style=\"menuitem\">Conversa</gui>."
-
-#: C/set-custom-status.page:9(info/desc)
-msgid "Add, edit or delete personal messages for your status."
-msgstr "Engadir, editar e borrar un mensaxe persoal para o seu estado."
-
-#: C/set-custom-status.page:15(credit/name)
-msgid "Jim Campbell"
-msgstr "Jim Campbell"
-
-#: C/set-custom-status.page:34(page/title)
-msgid "Set a custom message"
-msgstr "Estabelecer unha mensaxe personalizada"
-
-#: C/set-custom-status.page:36(page/p)
-msgid ""
-"Sometimes you may want to set a custom message for your status, for example "
-"to let people know that you will be unavailable for a certain period of time."
-msgstr ""
-"En ocasións pode querer usar unha mensaxe persoal para o seu escritorio, por "
-"exemplo, para facer saber aos seus contactos que non estará dispoñíbel por "
-"un período de tempo."
-
-#: C/set-custom-status.page:40(page/p)
-msgid ""
-"It is possible to set a custom message based on the different statuses "
-"available."
-msgstr ""
-"É posíbel estabelecer unha mensaxe personalizada baseada nos diferentes "
-"estados dispoñíbeis."
-
-#: C/set-custom-status.page:46(item/p) C/set-custom-status.page:82(item/p)
-msgid ""
-"From the <gui>Contact List</gui> window, click on the drop-down list at the "
-"top."
-msgstr ""
-"Desde a xanela <gui>Lista de contactos</gui>, prema na lista despregábel na "
-"parte superior."
-
-#: C/set-custom-status.page:52(item/p)
-msgid ""
-"Select the status you want to add a custom message to. You have to select "
-"the one identified with the label <gui>Custom Message</gui>."
-msgstr ""
-"Seleccione un estado ao que quere engadir a mensaxe personalizada. Ten que "
-"seleccionar o identificado coa etiqueta <gui>Mensaxe personalizada</gui>."
-
-#: C/set-custom-status.page:58(item/p)
-msgid ""
-"Enter your custom message in the text box at the top of the window, and "
-"press <key>Enter</key> to set the message."
-msgstr ""
-"Introduza a súa mensaxe personalizada na caixa de texto da parte superior da "
-"xanela e prema <key>Intro</key> para estabelecer a mensaxe."
-
-#: C/set-custom-status.page:64(item/p)
-#| msgid ""
-#| "If you want to set the custom message as a favorite, saving it in order "
-#| "to use it again, click on the little star on the right of the text box "
-#| "where you wrote your custom message."
-msgid ""
-"If you want to set the custom message as a favorite, saving it in order to "
-"use it again, click on the little heart on the right of the text box where "
-"you wrote your custom message."
-msgstr ""
-"Se quere estabelecer a mensaxe personalizada como un favorito, gardándoo "
-"para usalo de novo, prema na pequena estrela á dereita da caixa de texto "
-"onde escribiu a súa mensaxe personalizada."
-
-#: C/set-custom-status.page:69(item/p)
-msgid ""
-"If you do not do it, the custom message will not be available the next time "
-"you use <app>Empathy</app>. It will be saved only for the current session."
-msgstr ""
-"Se non o fai a mensaxe personalizada non estará dispoñíbel a próxima vez que "
-"use <app>Empathy</app>. Só se gardará durante a sesión actual."
-
-#: C/set-custom-status.page:78(section/title)
-#| msgid "To remove a custom message:"
-msgid "Edit and remove a custom message"
-msgstr "Editar e quitar unha mensaxe personalizada"
-
-#: C/set-custom-status.page:88(item/p)
-msgid "Select <gui>Edit Custom Message</gui>."
-msgstr "Editar a mensaxe personalizada"
-
-#: C/set-custom-status.page:95(item/p)
-msgid "To edit a custom message:"
-msgstr "Para editar unha mensaxe personalizada:"
-
-#: C/set-custom-status.page:100(item/p)
-msgid ""
-"From the <gui>Saved Presets</gui> box, select the status message you want to "
-"edit and double-click on it."
-msgstr ""
-"Desde a caixa <gui>Estados gardados</gui>, seleccione a mensaxe de estado "
-"que quere editar e prema dúas veces sobre el."
-
-#: C/set-custom-status.page:106(item/p)
-msgid "Type the new custom message and press <key>Enter</key> to modify it."
-msgstr ""
-"Escriba a mensaxe personalizada nova e prema <key>Intro</key> para "
-"modificalo."
-
-#: C/set-custom-status.page:113(item/p)
-msgid "To remove a custom message:"
-msgstr "Para eliminar unha mensaxe personalizada:"
-
-#: C/set-custom-status.page:118(item/p)
-msgid ""
-"From the <gui>Saved Presets</gui> box, select the status message you want to "
-"remove."
-msgstr ""
-"Desde a caixa <gui>Estados gardados</gui>, seleccione a mensaxe de estado "
-"que quere editar."
-
-#: C/set-custom-status.page:124(item/p)
-msgid "Click on the <gui>Remove</gui> button."
-msgstr "Prema sobre o botón <placeholder-1/>"
-
-#: C/set-custom-status.page:133(item/p)
-msgid "When finished, click on <gui>Close</gui>."
-msgstr "Ao rematar, prema en <placeholder-/>"
-
-#: C/set-custom-status.page:140(note/p)
-#| msgid ""
-#| "When you edit or add a new custom message, it will not be set as the "
-#| "current status message. You will need to select it from the <gui>Contact "
-#| "List</gui> window."
-msgid ""
-"When you edit a custom message, it will not be set as the current status "
-"message. You will need to select it from the <gui>Contact List</gui> window."
-msgstr ""
-"Cando edita unha mensaxe personalizada nova non se estabelece como a mensaxe "
-"de estado actual. Ten que seleccionalo na xanela <gui>Lista de contactos</"
-"gui>."
-
-#: C/share-desktop.page:7(info/desc)
-msgid "Show your desktop to your contacts."
-msgstr "Compartir o escritorio cos seus contactos."
-
-#: C/share-desktop.page:18(credit/name)
-msgid "Ekaterina Gerasimova"
-msgstr "Ekaterina Gerasimova"
-
-#: C/share-desktop.page:33(page/title)
-msgid "Share your desktop"
-msgstr "Compartir o seu escritorio"
-
-#: C/share-desktop.page:35(page/p)
-msgid ""
-"It is possible to share your desktop with some of your contacts. You can use "
-"this functionality to show your desktop to your contacts to, for example, "
-"ask for help or help your contacts resolve a problem."
-msgstr ""
-"É posíbel compartir o escritorio con algúns dos seus contactos. Pode usar "
-"esta funcionalidade para mostrarlle o seu escritorio aos seus contactos "
-"para, por exemplo, pedirlle axuda ou axudar aos seus contactos a solucionar "
-"un problema."
-
-#: C/share-desktop.page:42(note/p)
-msgid ""
-"To be able to share your desktop, you need to have a VNC server, which has "
-"support for the feature, installed on your system. <app>Vino</app>, the "
-"GNOME VNC server, has the required support."
-msgstr ""
-"Para poder compartir o seu escritorio, precisa ter un servidor VNC, que é o "
-"que fornece esta funcionalidade. Instale no seu sistema <app>Vino</app>, o "
-"servidor VNC de GNOME, para fornecer esta compatibilidade."
-
-#: C/share-desktop.page:51(item/p)
-msgid "From the <gui>Contact List</gui> window, do one of the following:"
-msgstr "Desde a xanela <gui>Lista de contactos</gui> leve a cabo o seguinte:"
-
-#: C/share-desktop.page:56(item/p)
-#| msgid ""
-#| "Select the contact you want to share your desktop with and choose "
-#| "<guiseq><gui>Edit</gui><gui>Contact</gui><gui>Share My Desktop</gui></"
-#| "guiseq>."
-msgid ""
-"Select the contact you want to share your desktop with and choose "
-"<guiseq><gui>Edit</gui><gui>Contact</gui> <gui>Share My Desktop</gui></"
-"guiseq>."
-msgstr ""
-"Seleccione o contacto co que quere compartir o seu escritorio e seleccione "
-"<guiseq><gui>Editar</gui><gui>Contacto</gui><gui>Compartir o meu escritorio</"
-"gui></guiseq>."
-
-#: C/share-desktop.page:63(item/p)
-msgid ""
-"Right-click on the name of the contact you want to share your desktop with "
-"and select <gui>Share My Desktop</gui>."
-msgstr ""
-"Prema co botón dereito sobre o nome do contacto que quere compartir o seu "
-"escritorio e seleccione <gui>Compartir o meu escritorio</gui>."
-
-#: C/share-desktop.page:71(item/p)
-msgid ""
-"An invitation to view your desktop will be sent to the contact you have "
-"selected. To view your desktop, they will need to accept it."
-msgstr ""
-"Enviarase un convite para ver o seu escritorio ao contacto que seleccionou. "
-"Para ver o seu escritorio, terá que aceptalo."
-
-#: C/share-desktop.page:77(item/p)
-msgid ""
-"You can disconnect the contact from your computer using your desktop sharing "
-"application."
-msgstr ""
-"Pode desconectar o contacto do seu computador empregando o aplicativo de "
-"compartición de escritorio."
-
-#: C/share-desktop.page:82(note/p)
-msgid ""
-"For more information about how to use the remote desktop sharing "
-"application, refer to its help."
-msgstr ""
-"Para obter máis información sobre como usar o aplicativo de compartición de "
-"escritorio remoto conxulte a súa axuda."
-
-#: C/share-desktop.page:90(page/p)
-msgid ""
-"When you share your desktop with someone else, it is possible to experience "
-"system performance slowdown and low Internet speed."
-msgstr ""
-"Cando comparte o seu escritorio con outros, e posíbel que experimente unha "
-"ralentización de rendemento de sistema e unha baixa velocidade de Internet."
-
-#: C/share-desktop.page:96(note/p)
-msgid ""
-"Some of your contacts may not be able to use this feature. It is necessary "
-"for them to have version 2.28, or newer, of <app>Empathy</app> and a "
-"compatible remote desktop viewer application installed in their system."
-msgstr ""
-"Algúns dos seus contactos non poderán usar esta funcionalidade. É preciso "
-"ter a versión 2.28 ou superior do <app>Empathy</app> e un visor de "
-"escritorio remoto compatíbel instalado no seu sistema."
-
-#. This is a reference to an external file such as an image or video. When
-#. the file changes, the md5 hash will change to let you know you need to
-#. update your localized copy. The msgstr is not used at all. Set it to
-#. whatever you like once you have updated your copy of the file.
-#: C/status-icons.page:39(media)
-#| msgid ""
-#| "@@image: 'figures/available.png'; md5=2196b2f0ad4ce26fdb7b9d48e75d1947"
-msgctxt "_"
-msgid ""
-"external ref='figures/available.png' md5='2196b2f0ad4ce26fdb7b9d48e75d1947'"
-msgstr ""
-"external ref='figures/available.png' md5='2196b2f0ad4ce26fdb7b9d48e75d1947'"
-
-#. This is a reference to an external file such as an image or video. When
-#. the file changes, the md5 hash will change to let you know you need to
-#. update your localized copy. The msgstr is not used at all. Set it to
-#. whatever you like once you have updated your copy of the file.
-#: C/status-icons.page:45(media)
-#| msgid "@@image: 'figures/busy.png'; md5=15eb2adff5faedf97b0cb9105d09410a"
-msgctxt "_"
-msgid "external ref='figures/busy.png' md5='15eb2adff5faedf97b0cb9105d09410a'"
-msgstr "external ref='figures/busy.png' md5='15eb2adff5faedf97b0cb9105d09410a'"
-
-#. This is a reference to an external file such as an image or video. When
-#. the file changes, the md5 hash will change to let you know you need to
-#. update your localized copy. The msgstr is not used at all. Set it to
-#. whatever you like once you have updated your copy of the file.
-#: C/status-icons.page:53(media)
-#| msgid "@@image: 'figures/away.png'; md5=9c504d6ffa0cf1a9cc8933d16e1bea33"
-msgctxt "_"
-msgid "external ref='figures/away.png' md5='9c504d6ffa0cf1a9cc8933d16e1bea33'"
-msgstr "external ref='figures/away.png' md5='9c504d6ffa0cf1a9cc8933d16e1bea33'"
-
-#. This is a reference to an external file such as an image or video. When
-#. the file changes, the md5 hash will change to let you know you need to
-#. update your localized copy. The msgstr is not used at all. Set it to
-#. whatever you like once you have updated your copy of the file.
-#.
-#. This is a reference to an external file such as an image or video. When
-#. the file changes, the md5 hash will change to let you know you need to
-#. update your localized copy. The msgstr is not used at all. Set it to
-#. whatever you like once you have updated your copy of the file.
-#: C/status-icons.page:62(media) C/status-icons.page:69(media)
-#| msgid "@@image: 'figures/offline.png'; md5=c5b0c21181cbd6e13f8909243c0fa964"
-msgctxt "_"
-msgid ""
-"external ref='figures/offline.png' md5='c5b0c21181cbd6e13f8909243c0fa964'"
-msgstr ""
-"external ref='figures/offline.png' md5='c5b0c21181cbd6e13f8909243c0fa964'"
-
-#: C/status-icons.page:7(info/desc)
-msgid "Understanding the various statuses and status icons."
-msgstr "Entendendo os diferentes estados e iconas de estado."
-
-#: C/status-icons.page:35(page/title)
-msgid "Status Types and Icons"
-msgstr "Tipos de estados e iconas"
-
-#: C/status-icons.page:39(item/title)
-#| msgid ""
-#| "Click the <media type=\"image\" mime=\"image/png\" src=\"figures/gtk-edit."
-#| "png\">edit</media> icon in the error message."
-msgid ""
-"<media type=\"image\" mime=\"image/png\" src=\"figures/available.png"
-"\">Available icon</media> <gui>Available</gui>"
-msgstr ""
-"<media type=\"image\" mime=\"image/png\" src=\"figures/available.png\">Icona "
-"de «dispoñíbel»</media> <gui>Dispoñíbel</gui>"
-
-#: C/status-icons.page:41(item/p)
-msgid ""
-"Use the <em>Available</em> status when you are at your computer and able to "
-"chat with your contacts. You can set a custom message for this status."
-msgstr ""
-"Use o estado <em>Dispoñíbel</em> cando está no seu computador e pode falar "
-"cos seus contactos. Vostede pode estabelecer unha mensaxe personalizada para "
-"este estado."
-
-#: C/status-icons.page:45(item/title)
-#| msgid ""
-#| "Click the <media type=\"image\" mime=\"image/png\" src=\"figures/gtk-edit."
-#| "png\">edit</media> icon in the error message."
-msgid ""
-"<media type=\"image\" mime=\"image/png\" src=\"figures/busy.png\">Busy icon</"
-"media> <gui>Busy</gui>"
-msgstr ""
-"<media type=\"image\" mime=\"image/png\" src=\"figures/busy.png\">Icona de "
-"«ocupado»</media> <gui>Ocupado</gui>"
-
-#: C/status-icons.page:47(item/p)
-msgid ""
-"Use the <em>Busy</em> status to let your contacts know that you don’t want "
-"to chat right now. They can still contact you, for instance if they have "
-"something urgent they need to discuss. By default, <app>Empathy</app> will "
-"not use notification bubbles and sounds when you are busy. You can set a "
-"custom message for this status."
-msgstr "Use o estado <em>Ocupado</em> para dicirlle aos seus contactos"
-
-#: C/status-icons.page:53(item/title)
-#| msgid ""
-#| "Click the <media type=\"image\" mime=\"image/png\" src=\"figures/gtk-edit."
-#| "png\">edit</media> icon in the error message."
-msgid ""
-"<media type=\"image\" mime=\"image/png\" src=\"figures/away.png\">Away icon</"
-"media> <gui>Away</gui>"
-msgstr ""
-"<media type=\"image\" mime=\"image/png\" src=\"figures/away.png\">Icona de "
-"«ausente»</media> <gui>Ausente</gui>"
-
-#: C/status-icons.page:55(item/p)
-msgid ""
-"Use the <em>Away</em> status when you are going away from your computer. "
-"<app>Empathy</app> automatically sets your status to Away if you do not use "
-"your computer for a while, or if your screensaver is on. By default, "
-"<app>Empathy</app> will not use notification bubbles and sounds when you are "
-"away. You can set a custom message for this status."
-msgstr ""
-"Use o estado <em>Ausente</em> cando non está no seu computador. "
-"<app>Empathy</app> automaticamente estabelecer o seu estado a Ausente se non "
-"usa o seu computador por un anaco, ou se o seu protector de pantalla está "
-"activado. Por omisión, <app>Empathy</app> non usa as notificacións e sons "
-"cando está Ausente. Vostede pode estabelecer unha mensaxe personalizada para "
-"este estado."
-
-#: C/status-icons.page:62(item/title)
-#| msgid ""
-#| "Click the <media type=\"image\" mime=\"image/png\" src=\"figures/gtk-edit."
-#| "png\">edit</media> icon in the error message."
-msgid ""
-"<media type=\"image\" mime=\"image/png\" src=\"figures/offline.png\">Offline "
-"icon</media> <gui>Invisible</gui>"
-msgstr ""
-"<media type=\"image\" mime=\"image/png\" src=\"figures/offline.png\">Icona "
-"de «desconectado»</media> <gui>Desconectado</gui>"
-
-#: C/status-icons.page:64(item/p)
-msgid ""
-"When you set your status to <em>Invisible</em>, you will appear as offline "
-"to your contacts. You will still be connected to your accounts, and you "
-"still see your contacts’ statuses and start conversations with them."
-msgstr ""
-"Ao estabelecer o seu estado <em>Invisíbel</em>, aparecerá como desconectado "
-"para os seus contactos. Aínda así vostede estará conectado aos seus "
-"contactos e poderá ver os estados dos seus contactos e iniciar unha conversa "
-"con eles."
-
-#: C/status-icons.page:69(item/title)
-#| msgid ""
-#| "Click the <media type=\"image\" mime=\"image/png\" src=\"figures/gtk-edit."
-#| "png\">edit</media> icon in the error message."
-msgid ""
-"<media type=\"image\" mime=\"image/png\" src=\"figures/offline.png\">Offline "
-"icon</media> <gui>Offline</gui>"
-msgstr ""
-"<media type=\"image\" mime=\"image/png\" src=\"figures/offline.png\">Icona "
-"de «desconectado»</media> <gui>Desconectado</gui>"
-
-#: C/status-icons.page:71(item/p)
-msgid ""
-"Setting your status to <em>Offline</em> disconnects you from all of your "
-"accounts."
-msgstr ""
-"Estabelecer o seu estado a <em>Desconectado</em> desconectaralle de todas as "
-"súas contas."
-
-#: C/video-call.page:10(info/desc)
-msgid "Start a video conversation with one of your contacts."
-msgstr "Comezar unha conversa de vídeo con un dos seus contactos."
-
-#: C/video-call.page:29(page/title)
-msgid "Start a video conversation"
-msgstr "Comezar unha conversa de vídeo"
-
-#: C/video-call.page:31(page/p)
-msgid ""
-"If you have a webcam, you can call your contacts and have a video "
-"conversation with them. This feature only works with certain types of "
-"accounts, and it requires the other person to have an application that "
-"supports video calls."
-msgstr ""
-"Se ten unha cámara web poderá facer chamadas aos seus contactos e ter unha "
-"conversa con vídeo con eles. Estas funcionalidades só funcionan en certos "
-"tipos de contas, e require que outra persoa teña un aplicativo que admita as "
-"videochamadas."
-
-#: C/video-call.page:38(item/p)
-msgid ""
-"From the <gui>Contact List</gui> window, click the <media type=\"image\" "
-"mime=\"image/png\" src=\"figures/camera-web.png\">video call</media> icon "
-"next to the name of the contact you wish to call and choose <gui style="
-"\"menuitem\">Video Call</gui>."
-msgstr ""
-"Desde a xanela <gui>Lista de contactos</gui>, prema a icona <media type="
-"\"image\" mime=\"image/png\" src=\"figures/camera-web.png\">videochamada</"
-"media> ao lado do nome do contacto ao que quere chamar e seleccione <gui "
-"style=\"menuitem\">Videochamada</gui>."
-
-#: C/video-call.page:55(note/p)
-msgid ""
-"To turn a video conversation into an audio conversation, choose <guiseq><gui "
-"style=\"menu\">Video</gui><gui style=\"menuitem\">Video Off</gui></guiseq>."
-msgstr ""
-"Para trocar unha conversa de vídeo nunha conversa de son, seleccione "
-"<guiseq><gui style=\"menu\">Vídeo</gui><gui style=\"menuitem\">Desactivar "
-"vídeo</gui></guiseq>."
-
-#: C/video-call.page:61(section/title)
-msgid "Start a video conversation with a meta-contact"
-msgstr "Comezar unha conversa de vídeo con un metacontacto."
-
-#: C/video-call.page:69(item/p)
-msgid ""
-"Select the contact you want to have the conversation, and from the menu "
-"select <gui style=\"menuitem\">Video Call</gui>."
-msgstr ""
-"Seleccione o contacto co que desexe ter unha conversa e desde o menú "
-"seleccione <gui style=\"menuitem\">Vídeochamada</gui>."
-
-#~ msgid "milo@ubuntu.com"
-#~ msgstr "milo@ubuntu.com"
-
-#~ msgid "shaunm@gnome.org"
-#~ msgstr "shaunm@gnome.org"
-
-#~ msgid "Available icon"
-#~ msgstr "Icona de dispoñíbel"
-
-#~ msgid "Available"
-#~ msgstr "Dispoñible"
-
-#~ msgid "Busy icon"
-#~ msgstr "Icona de ocupado"
-
-#~ msgid "Busy"
-#~ msgstr "Ocupado"
-
-#~ msgid "Away icon"
-#~ msgstr "Icona de ausente"
-
-#~ msgid "Away"
-#~ msgstr "Ausente"
-
-#~ msgid "Offline icon"
-#~ msgstr "Icona de desconectado"
-
-#~ msgid "Invisible"
-#~ msgstr "Invisíbel"
-
-#~ msgid "Offline"
-#~ msgstr "Desconectada"
-
-#~ msgid "kittykat3756@gmail.com"
-#~ msgstr "kittykat3756@gmail.com"
-
-#~ msgid "jwcampbell@gmail.com"
-#~ msgstr "jwcampbell@gmail.com"
-
-#~ msgid "Edit, remove and add a custom message"
-#~ msgstr "Editar, quitar e engadir unha mensaxe personalizada"
-
-#~ msgid ""
-#~ "To add a new custom message, from the <gui>Add New Preset</gui> section:"
-#~ msgstr ""
-#~ "Para engadir unha mensaxe personalizada nova, desde a sección "
-#~ "<gui>Engadir estado gardado</gui>."
-
-#~ msgid ""
-#~ "Click on the drop-down list to select the status you want to set a custom "
-#~ "message to."
-#~ msgstr ""
-#~ "Prema na lista despregábel para seleccionar o estado no que quere "
-#~ "estabelecer unha mensaxe personalizada."
-
-#~ msgid "Click on the text box, and type the new custom message."
-#~ msgstr ""
-#~ "Prema sobre a caixa de texto e escriba a nova mensaxe personalizada."
-
-#~ msgid "Click on <gui>Add</gui> to add the new message to the presets ones."
-#~ msgstr ""
-#~ "Prema <gui>Engadir</gui> para engadir unha mensaxe nova aos gardados."
-
-#~ msgid "philbull@gmail.com"
-#~ msgstr "philbull@gmail.com"
-
-#~ msgid "I'd like to see this played up a bit more."
-#~ msgstr "Gustaríame ver isto explicado un pouco máis."
-
-#~ msgid "shaunm"
-#~ msgstr "shaunm"
-
-#~ msgid ""
-#~ "Empathy no longer allows you to create an IRC account without a valid "
-#~ "nick. I've removed the guide link. Remove the text."
-#~ msgstr ""
-#~ "Empathy xa non lle permite crear unha conta de IRC sen un alcume válido. "
-#~ "Quitouse a ligazón da guía. Quitar o texto."
-
-#~ msgid "Install telepathy-idle"
-#~ msgstr "Instalar telepathy-idle"
-
-#~ msgid "peter.haslam@freenet.de"
-#~ msgstr "peter.haslam@freenet.de"
-
-#~ msgid "Icon for audio conversation"
-#~ msgstr "Icona para a conversa de son"
-
-#~ msgid "Icon for video conversation"
-#~ msgstr "Icona para a conversa de vídeo"
-
-#~ msgid ""
-#~ "I'd like to do tables like this using nothing for No and ✔ for Yes, but "
-#~ "we need to look at the accessibility impact. I've <link href=\"http://"
-#~ "mail.gnome.org/archives/gnome-doc-list/2009-September/msg00006.html"
-#~ "\">asked the accessibility team</link> for input."
-#~ msgstr ""
-#~ "Gustariame poñer táboas como ésta sen usar nada para Non e ✔ para Sí, "
-#~ "pero débese tener en conta o impacto na accesibilidade. Xa <link href="
-#~ "\"http://mail.gnome.org/archives/gnome-doc-list/2009-September/msg00006."
-#~ "html\">preguntei ao equipo de accesibilidade</link>."
-
-#~ msgid ""
-#~ "There's recent work on telepathy-butterfly and papyon to support audio "
-#~ "and video for MSN. It might be released in time for 2.28, but since it "
-#~ "doesn't follow the Gnome release schedule, I can't be sure. If it looks "
-#~ "like it's going to ship, let's mark it Yes."
-#~ msgstr ""
-#~ "Existe traballo recente en telepathy-butterfly e papyon para admitir son "
-#~ "e vídeo para MSN. Pode que se publique a tempo para 2.28 pero xa non "
-#~ "serve a planificación de publicacións de GNOME non se pode estar seguro. "
-#~ "Se parece que vai dar tempo incluirase."
-
-#~ msgid "Resource"
-#~ msgstr "Recurso"
-
-#~ msgid "Priority"
-#~ msgstr "Prioridad"
-
-#~ msgid "Network"
-#~ msgstr "Rede"
-
-#~ msgid "Nickname"
-#~ msgstr "Alcume"
-
-#~ msgid "Password"
-#~ msgstr "Contrasinal"
-
-#~ msgid "Quit message"
-#~ msgstr "Mensaxe de saída"
-
-#~ msgid "Charset"
-#~ msgstr "Conxunto de caracteres"
-
-#~ msgid "Servers"
-#~ msgstr "Servidores"
-
-#~ msgid "Click on <gui style=\"button\">Remove</gui>."
-#~ msgstr "Prema <gui style=\"button\">Quitar</gui>."
-
-#~ msgid ""
-#~ "Deselect the <gui>Enabled</gui> check-box next to the name of your "
-#~ "account, and then select it again to try to reconnect to the service."
-#~ msgstr ""
-#~ "Deseleccione <placeholder-1/>, e seleccióneo de novo para tentar "
-#~ "reconectarse ao servizo."
-
-#~ msgid ""
-#~ "Check that the <gui style=\"checkbox\">Enabled</gui> check-box is "
-#~ "selected. If it is not, select the check-box to enable the account."
-#~ msgstr ""
-#~ "Comprobe que a casilla de verificación <gui style=\"checkbox\">Activada</"
-#~ "gui> está seleccionada. Se non o está marque a casilla de verificación "
-#~ "para activar a conta."
-
-#~ msgid ""
-#~ "Highlighting text is quirky: <link href=\"http://bugzilla.gnome.org/"
-#~ "show_bug.cgi?id=593733\">#593733</link>. If there's an actual "
-#~ "highlighting going on, independent of the selection (like in yellow or "
-#~ "something), we can use the term \"highlight\". Otherwise we need to use "
-#~ "the term \"select\". Watch that bug."
-#~ msgstr ""
-#~ "Resaltar texto é estraño <link href=\"http://bugzilla.gnome.org/show_bug."
-#~ "cgi?id=593733\">#59733</link>. Se existe un resaltado actualmente, "
-#~ "independente da selección (en amarelo, por exemplo), pódese usar o termo "
-#~ "«resaltar». De outra forma débese usar o termo «seleccionado». Siga o "
-#~ "proceso do erro."
-
-#~ msgid "Select the <gui>Search</gui> tab."
-#~ msgstr "Seleccione o separador <gui>Buscar</gui>."
-
-#~ msgid ""
-#~ "In the <gui>For</gui> field, type the text you want to search for. Click "
-#~ "<gui>Find</gui> or press <key>Enter</key>."
-#~ msgstr ""
-#~ "No campo <gui>Para</gui> escriba o texto que quere buscar. Prema "
-#~ "<gui>Buscar</gui> ou prema <key>Intro</key>."
-
-#~ msgid ""
-#~ "Click on a conversation to view it. <app>Empathy</app> will select the "
-#~ "text in the conversation that matched your search terms."
-#~ msgstr ""
-#~ "Prema sobre unha conversa para vela. <app>Empathy</app> seleccionará o "
-#~ "texto na conversa que coincida cos seus termos de busca."
-
-#~ msgid "Select the <gui>Conversations</gui> tab."
-#~ msgstr "Seleccione o separador <gui>Conversas</gui>."
-
-#~ msgid ""
-#~ "Deselect <gui style=\"checkbox\">Enabled</gui> on the right side of the "
-#~ "window."
-#~ msgstr ""
-#~ "Deseleccione <gui style=\"checkbox\">Activada</gui> na parte dereita da "
-#~ "xanela."
-
-#~ msgid "Click <gui style=\"button\">Log in</gui>."
-#~ msgstr "Prema <gui style=\"button\">Iniciar sesión</gui>."
-
-#~ msgid ""
-#~ "@@image: 'figures/tomboy-new-note.png'; "
-#~ "md5=ba337ad3ae256f3fdf79afeef82d7883"
-#~ msgstr ""
-#~ "@@image: 'figures/tomboy-new-note.png'; "
-#~ "md5=ba337ad3ae256f3fdf79afeef82d7883"
-
-#~ msgid ""
-#~ "@@image: 'figures/add-notebook-search.png'; "
-#~ "md5=8a98d72edc3c4351a632889c5edbb81f"
-#~ msgstr ""
-#~ "@@image: 'figures/add-notebook-search.png'; "
-#~ "md5=8a98d72edc3c4351a632889c5edbb81f"
-
-#~ msgid ""
-#~ "@@image: 'figures/tomboy-preferences-synchronization.png'; "
-#~ "md5=68e7a980720d8e9e1384cab9960a7adc"
-#~ msgstr ""
-#~ "@@image: 'figures/tomboy-preferences-synchronization.png'; "
-#~ "md5=68e7a980720d8e9e1384cab9960a7adc"
-
-#~ msgid ""
-#~ "@@image: 'figures/tomboy-preferences-editing.png'; "
-#~ "md5=288184a8d9645881eaf3173892583d73"
-#~ msgstr ""
-#~ "@@image: 'figures/tomboy-preferences-editing.png'; "
-#~ "md5=288184a8d9645881eaf3173892583d73"
-
-#~ msgid ""
-#~ "@@image: 'figures/tomboy-preferences-hotkeys.png'; "
-#~ "md5=57510249057a144dbb81ae35e15c694c"
-#~ msgstr ""
-#~ "@@image: 'figures/tomboy-preferences-hotkeys.png'; "
-#~ "md5=57510249057a144dbb81ae35e15c694c"
-
-#~ msgid ""
-#~ "@@image: 'figures/tomboy-preferences-add-ins.png'; "
-#~ "md5=bb3114a219b8bfdf31549fced9618245"
-#~ msgstr ""
-#~ "@@image: 'figures/tomboy-preferences-add-ins.png'; "
-#~ "md5=bb3114a219b8bfdf31549fced9618245"
-
-#~ msgid "Tomboy Notes Manual"
-#~ msgstr "Manual de Notas de Tomboy"
-
-#~ msgid ""
-#~ "Tomboy is a simple desktop note-taking application, with many features "
-#~ "designed to help organize ideas, such as spell checking, highlighting, "
-#~ "auto-linking URLs, lists, font stylizing, quick access with a table of "
-#~ "contents for notes, and add-ins to extend Tomboy's capabilities. ."
-#~ msgstr ""
-#~ "Tomboy é un aplicativo de escritorio sinxelo de creación de notas, con "
-#~ "algunhas funcionalidades deseñadas para axudarlle a organizar ideas, como "
-#~ "a corrección ortográfica, realzado, autoligado de URL, listas, estilos de "
-#~ "tipos de letra, acceso rápido con unha táboa de contidos para as notas e "
-#~ "engadidos para extender as capacidades de Tomboy."
-
-#~ msgid "2009"
-#~ msgstr "2009"
-
-#~ msgid "Alex Graveley"
-#~ msgstr "Alex Graveley"
-
-#~ msgid "Brent Smith"
-#~ msgstr "Brent Smith"
-
-#~ msgid "Free Software Foundation"
-#~ msgstr "Free Software Foundation"
-
-#~ msgid "Boyd Timothy"
-#~ msgstr "Boyd Timothy"
-
-#~ msgid "Sandy Armstrong"
-#~ msgstr "Sandy Armstrong"
-
-#~ msgid "Paul Cutler"
-#~ msgstr "Paul Cutler"
-
-#~ msgid "GNOME Documentation Project"
-#~ msgstr "Proxecto de documentación de GNOME"
-
-#~ msgid "Alex"
-#~ msgstr "Alex"
-
-#~ msgid "Graveley"
-#~ msgstr "Agraveley"
-
-#~ msgid "alex@beatniksoftware.com"
-#~ msgstr "alex@beatniksoftware.com"
-
-#~ msgid "Brent"
-#~ msgstr "Brent"
-
-#~ msgid "Smith"
-#~ msgstr "Smith"
-
-#~ msgid "gnome@nextreality.net"
-#~ msgstr "gnome@nextreality.net"
-
-#~ msgid "Boyd"
-#~ msgstr "Boyd"
-
-#~ msgid "Timothy"
-#~ msgstr "Timothy"
-
-#~ msgid "Sandy"
-#~ msgstr "Sandy"
-
-#~ msgid "Armstrong"
-#~ msgstr "Armstrong"
-
-#~ msgid "sanfordarmstrong@gmail.com"
-#~ msgstr "sanfordarmstrong@gmail.com"
-
-#~ msgid "Paul"
-#~ msgstr "Paul"
-
-#~ msgid "Cutler"
-#~ msgstr "Cutler"
-
-#~ msgid "pcutler@foresightlinux.org"
-#~ msgstr "pcutler@foresightlinux.org"
-
-#~ msgid "Tomboy Manual 2.1"
-#~ msgstr "Manual de Tomboy 2.1"
-
-#~ msgid "2009-03-23"
-#~ msgstr "23-03-2009"
-
-#~ msgid "Tomboy Manual 4.0"
-#~ msgstr "Manual de Tomboy 4.0"
-
-#~ msgid "2008-03-07"
-#~ msgstr "07-03-2008"
-
-#~ msgid "Tomboy Manual 3.0"
-#~ msgstr "Manual de Tomboy 3.0"
-
-#~ msgid "2007-09-13"
-#~ msgstr "13-09-2007"
-
-#~ msgid "Tomboy Manual 2.0"
-#~ msgstr "Manual de Tomboy 2.0"
-
-#~ msgid "2007-02-28"
-#~ msgstr "28-02-2007"
-
-#~ msgid "This manual describes version 0.14.0 of Tomboy"
-#~ msgstr "Este manual describe a versión 0.14.0 de Tomboy"
-
-#~ msgid "Feedback"
-#~ msgstr "Comentarios e suxestións"
-
-#~ msgid ""
-#~ "To report a bug or make a suggestion regarding the Tomboy application or "
-#~ "this manual, follow the directions in the <ulink type=\"help\" url="
-#~ "\"ghelp:gnome-feedback\">GNOME Feedback Page</ulink>."
-#~ msgstr ""
-#~ "Para informar dun erro ou facer unha suxestión sobre o aplicativo "
-#~ "<application>Brasero</application> ou este manual, siga os consellos da "
-#~ "<ulink url=\"ghelp:gnome-feedback\" type=\"help\">Páxina de Feedback de "
-#~ "GNOME</ulink>."
-
-#~ msgid "Tomboy Notes"
-#~ msgstr "Notas de Tomboy"
-
-#~ msgid "Tomboy"
-#~ msgstr "Tomboy"
-
-#~ msgid "notes"
-#~ msgstr "notas"
-
-#~ msgid "Notes Application"
-#~ msgstr "Notas do aplicativo"
-
-#~ msgid ""
-#~ "Tomboy is a desktop note-taking application for GNOME, Microsoft Windows, "
-#~ "and Mac OS X. It is simple and easy to use, and allows you to organize "
-#~ "the ideas and information you deal with every day. Tomboy has some very "
-#~ "useful editing features to help you customize your notes, including:"
-#~ msgstr ""
-#~ "Tomboy é un aplicativo de creación de notas para o escritorio GNOME, "
-#~ "Microsoft Windows e Mac OS X. É moi sinxelo e doado de usar e permítelle "
-#~ "organizar as súas ideas e información que xestiona cada día. Tomoby ten "
-#~ "algunhas características de edición moi útiles para axudarlle a "
-#~ "personalizar as súas notas, incluíndo:"
-
-#~ msgid "Highlighting Search Text"
-#~ msgstr "Busca de texto con realce"
-
-#~ msgid "Inline Spell Checking"
-#~ msgstr "Comprobación ortográfica en liña"
-
-#~ msgid "Auto-linking Web &amp; Email Addresses"
-#~ msgstr "Autoligado de enderezos web e correo electrónico"
-
-#~ msgid "Undo/Redo Support"
-#~ msgstr "Compatibilidade para desfacer/refacer"
-
-#~ msgid "Font Styling &amp; Sizing"
-#~ msgstr "Estilos de tipo de letra e tamaño"
-
-#~ msgid ""
-#~ "Tomboy is accessed through the GNOME panel, the taskbar in Microsoft "
-#~ "Windows, or the dock in Mac OS X. To startup Tomboy automatically when "
-#~ "you log into GNOME, see <xref linkend=\"add-to-panel\"/>."
-#~ msgstr ""
-#~ "Pode acceder a Tomboy dese o panel de GNOME, a barra de tarefas de "
-#~ "Microsoft Windows ou o Dock en Mac OS X. Para iniciar automaticamente "
-#~ "Tomboy ao iniciar sesión en GNOME vexa <xref linkend=\"add-to-panel\"/>."
-
-#~ msgid "Getting Started"
-#~ msgstr "Comezando"
-
-#~ msgid "Adding Tomboy to the GNOME Panel"
-#~ msgstr "Engadir Tomboy ao panel de GNOME"
-
-#~ msgid "To create a new note using the mouse:"
-#~ msgstr "Para crear unha nova usando o rato:"
-
-#~ msgid ""
-#~ "Click on the Tomboy note icon present in the GNOME Panel or Windows "
-#~ "taskbar. A menu will appear."
-#~ msgstr ""
-#~ "Prema na icona de nota de Tomboy presente no panel de GNOME ou na barra "
-#~ "de tarefas de Windows e aparecerá un menú."
-
-#~ msgid ""
-#~ "Select the <menuchoice><guimenuitem>Create New Note</guimenuitem></"
-#~ "menuchoice> option in the menu."
-#~ msgstr ""
-#~ "Seleccione a opción <menuchoice><guimenuitem>Crear nova nota</"
-#~ "guimenuitem></menuchoice> desde o menú."
-
-#~ msgid "To create a new note using the keyboard:"
-#~ msgstr "Para crear unha nota usando o teclado:"
-
-#~ msgid ""
-#~ "Open the Tomboy menu using the key combination <keycombo><keycap>Alt</"
-#~ "keycap><keycap>F12</keycap></keycombo>."
-#~ msgstr ""
-#~ "Abra o menú de Tomboy usando a combinación de teclas "
-#~ "<keycombo><keycap>Alt</keycap><keycap>F12</keycap></keycombo>."
-
-#~ msgid ""
-#~ "Use the <keycap>N</keycap> key to select the menu option "
-#~ "<menuchoice><guimenuitem>Create New Note</guimenuitem></menuchoice>."
-#~ msgstr ""
-#~ "Use a tecla <keycap>N</keycap> para seleccionar a opción de menú "
-#~ "<menuchoice><guimenuitem>Crear nova nota</guimenuitem></menuchoice>."
-
-#~ msgid "Editing Notes"
-#~ msgstr "Editar notas"
-
-#~ msgid ""
-#~ "After creating a new note, a new window will appear with the title "
-#~ "<literal>New Note <replaceable>N</replaceable></literal>. At the top of "
-#~ "the note is a toolbar with several buttons and text. Directly below this "
-#~ "toolbar is the content area of the note. This is illustrated in <xref "
-#~ "linkend=\"new-note\"/>."
-#~ msgstr ""
-#~ "Logo de crear unha nova nota, aparecerá unha nova xanela co título "
-#~ "<literal>Nova nota <replaceable>N</replaceable></literal>. Na parte "
-#~ "superior da nota está a barra de ferramentas con varios botóns e texto. "
-#~ "Xusto embaixo da barra de ferramentas está a área de contido da nota. "
-#~ "Isto está ilustrado en <xref linkend=\"new-note\"/>."
-
-#~ msgid "The default window for a New Note"
-#~ msgstr "A xanela predeterminada para a Nova nota"
-
-#~ msgid "Table of Contents"
-#~ msgstr "Táboa de contidos"
-
-#~ msgid "Working With Notes"
-#~ msgstr "Traballar con notas"
-
-#~ msgid "Link"
-#~ msgstr "Ligazón"
-
-#~ msgid "Text"
-#~ msgstr "Texto"
-
-#~ msgid "Undo"
-#~ msgstr "Desfacer"
-
-#~ msgid "Redo"
-#~ msgstr "Refacer"
-
-#~ msgid "Bold"
-#~ msgstr "Negra"
-
-#~ msgid "Italic"
-#~ msgstr "Cursiva"
-
-#~ msgid "Strikeout"
-#~ msgstr "Riscado"
-
-#~ msgid "Highlight"
-#~ msgstr "Realzar"
-
-#~ msgid "Fixed Width"
-#~ msgstr "Largura fixa"
-
-#~ msgid "Font size"
-#~ msgstr "Tamaño do tipo de letra"
-
-#~ msgid "Small"
-#~ msgstr "Pequeno"
-
-#~ msgid "Normal"
-#~ msgstr "Normal"
-
-#~ msgid "Large"
-#~ msgstr "Grande"
-
-#~ msgid "Huge"
-#~ msgstr "Enorme"
-
-#~ msgid "Bullets"
-#~ msgstr "Viñetas"
-
-#~ msgid "Increase Indent"
-#~ msgstr "Aumentar sangría"
-
-#~ msgid "Decrease Indent"
-#~ msgstr "Diminuír sangría"
-
-#~ msgid "Find in This Note"
-#~ msgstr "Buscar nesta nota"
-
-#~ msgid ""
-#~ "To close the find bar, click <guibutton>X</guibutton> (Close Button) on "
-#~ "the far left or press the <keycap>Escape</keycap> key."
-#~ msgstr ""
-#~ "Para pechar a barra de busca, prema <guibutton>X</guibutton> (botón de "
-#~ "pechar) na parte esquerda ou prema a tecla <keycap>Escape</keycap>."
-
-#~ msgid "Synchronize Notes"
-#~ msgstr "Sincronizar notas"
-
-#~ msgid "Export to HTML"
-#~ msgstr "Exportar a HTML"
-
-#~ msgid ""
-#~ "Select this option to print the current note. You will be presented with "
-#~ "the standard GNOME print dialog."
-#~ msgstr ""
-#~ "Seleccione esta opción para imprimir a nota actual. Mostraráselle o "
-#~ "diálogo estándar de impresión de GNOME."
-
-#~ msgid "Delete"
-#~ msgstr "Borrar"
-
-#~ msgid "Panel Menu"
-#~ msgstr "Panel de menú"
-
-#~ msgid "Tomboy Panel Menu"
-#~ msgstr "Menú do panel de Tomboy"
-
-#~ msgid "Begin a bulleted list"
-#~ msgstr "Iniciar unha lista con viñetas"
-
-#~ msgid "End a bulleted list"
-#~ msgstr "Rematar unha lista con viñetas"
-
-#~ msgid "Increase Indentation"
-#~ msgstr "Aumentar a sangría"
-
-#~ msgid "To increase the line indentation in a bulleted list with the mouse:"
-#~ msgstr "Para incrementar a sangría da liña nunha lista de viñetas co rato:"
-
-#~ msgid ""
-#~ "Select <menuchoice><guimenuitem>Increase Indent</guimenuitem></"
-#~ "menuchoice> from the <guibutton>Text</guibutton> menu."
-#~ msgstr ""
-#~ "Seleccione <menuchoice><guimenuitem>Incrementar sangría</guimenuitem></"
-#~ "menuchoice> desde o menú <guibutton>Texto</guibutton>."
-
-#~ msgid ""
-#~ "To increase the line indentation in a bulleted list with the keyboard:"
-#~ msgstr "Para incrementar a sangría da liña nunha lista de viñetas co rato:"
-
-#~ msgid "Decrease Indentation"
-#~ msgstr "Diminuír a sangría"
-
-#~ msgid "To decrease the line indentation in a bulleted list with the mouse:"
-#~ msgstr "Para reducir a sangría da liña nunha lista de viñetas co rato:"
-
-#~ msgid "Working with Notebooks"
-#~ msgstr "Traballar con cadernos"
-
-#~ msgid ""
-#~ "Notebooks allow you to group related notes together. You can add a note "
-#~ "to a notebook in the Search All Notes window or directly inside of a Note."
-#~ msgstr ""
-#~ "Os cadernos de notas permítenlle agrupar notas relacionadas. Pode engadir "
-#~ "unha nota a un caderno de notas na xanela Buscar en todas as notas ou "
-#~ "directamente dentro dunha nota."
-
-#~ msgid "Creating Notebooks"
-#~ msgstr "Crear cadernos"
-
-#~ msgid "You can create new notebooks using one of the following methods:"
-#~ msgstr "Pode crear novos cadernos usando un dos seguintes métodos:"
-
-#~ msgid "Enter a name for the new notebook."
-#~ msgstr "Escriba un nome para o novo caderno."
-
-#~ msgid "To create a new notebook from the Search All Notes dialog:"
-#~ msgstr "Para crear un novo caderno desde o diálogo Buscar en tódalas notas:"
-
-#~ msgid "Create a new notebook from Search All Notes"
-#~ msgstr "Crear un novo caderno desde Buscar en tódalas notas"
-
-#~ msgid "Adding Notes to a Notebook"
-#~ msgstr "Engadir notas a un caderno"
-
-#~ msgid ""
-#~ "To add notes to a notebook, you can add a note from the <guilabel>Search "
-#~ "All Notes</guilabel> dialog or directly within a note."
-#~ msgstr ""
-#~ "Para engadir notas a un caderno, pode engadir unha nota desde o diálogo "
-#~ "<guilabel>Buscar en tódalas notas</guilabel> ou directamente na mesma "
-#~ "nota."
-
-#~ msgid "To move an existing note from the Search All Notes dialog:"
-#~ msgstr ""
-#~ "Para mover unha nova existente desde o diálogo Buscar en tódalas notas:"
-
-#~ msgid "Using your mouse, drag the note(s) onto a notebook on the left."
-#~ msgstr ""
-#~ "Usando o seu rato, arrastre a(s) nota(s) sobre o caderno na esquerda."
-
-#~ msgid "Adding a note to a notebook"
-#~ msgstr "Engadir unha nota a un caderno"
-
-#~ msgid "Creating Notebook Templates"
-#~ msgstr "Crear plantillas de caderno"
-
-#~ msgid "Creating a Notebook Template"
-#~ msgstr "Crear unha plantilla de caderno"
-
-#~ msgid "Deleting a Notebook"
-#~ msgstr "Eliminar un caderno"
-
-#~ msgid "To delete a notebook using your mouse:"
-#~ msgstr "Para eliminar un caderno usando o seu rato:"
-
-#~ msgid ""
-#~ "Using your mouse, right click on a Notebook that you have created and "
-#~ "choose <menuchoice><guimenuitem>Delete Notebook</guimenuitem></"
-#~ "menuchoice>."
-#~ msgstr ""
-#~ "Usando o seu rato, prema co botón dereito sobre un caderno que teña "
-#~ "creado e seleccione <menuchoice><guimenuitem>Eliminar caderno</"
-#~ "guimenuitem></menuchoice>."
-
-#~ msgid "Using your mouse, left click on the Notebook you want to delete."
-#~ msgstr ""
-#~ "Usando o rato, prema co botón esquerdo sobre o caderno que quere eliminar."
-
-#~ msgid ""
-#~ "From the menu, choose <menuchoice><guimenuitem>Edit</"
-#~ "guimenuitem><guimenuitem>Delete Notebook</guimenuitem></menuchoice>"
-#~ msgstr ""
-#~ "Desde o menú, seleccione <menuchoice><guimenuitem>Editar</"
-#~ "guimenuitem><guimenuitem>Eliminar caderno</guimenuitem></menuchoice>"
-
-#~ msgid "Note Synchronization"
-#~ msgstr "Sincronización de notas"
-
-#~ msgid ""
-#~ "Tomboy can now keep your notes synchronized between multiple computers by "
-#~ "relying on a central server."
-#~ msgstr ""
-#~ "Tomboy pode manter as súas notas sincronizadas entre varios computadores "
-#~ "mediante un servidor central."
-
-#~ msgid "Configure note synchronization"
-#~ msgstr "Configurar a sincronización de notas"
-
-#~ msgid "Tomboy Synchronization Preferences"
-#~ msgstr "Preferencias de sincronización de Tomboy"
-
-#~ msgid "Configure note synchronization service (WebDAV)"
-#~ msgstr "Configurar o servizo de sincronización de notas (WebDAV)"
-
-#~ msgid "Configure note synchronization service (SSH)"
-#~ msgstr "Configurar o servizo de sincronización de notas (SSH)"
-
-#~ msgid "Configure note synchronization service (Local Folder)"
-#~ msgstr "Configurar o servizo de sincronización de notas (Cartafol local)"
-
-#~ msgid "Handling synchronization conflicts"
-#~ msgstr "Xestionar conflitos de sincronización"
-
-#~ msgid "Preferences"
-#~ msgstr "Preferencias"
-
-#~ msgid "Editing"
-#~ msgstr "Editar"
-
-#~ msgid "Spellcheck While Typing"
-#~ msgstr "Comprobar ortografía mentres se escribe"
-
-#~ msgid ""
-#~ "The spellcheck option is only available if you have the "
-#~ "<application>GtkSpell</application> package installed."
-#~ msgstr ""
-#~ "A opción de comprobación ortográfica só está dispoñíbel se ten o paquete "
-#~ "<application>GtkSpell</application> instalado."
-
-#~ msgid "Highlight WikiWords"
-#~ msgstr "Realzar as palabras wiki"
-
-#~ msgid "Use Custom Font"
-#~ msgstr "Usar un tipo de letra personalizado"
-
-#~ msgid "Tomboy Editing Preferences"
-#~ msgstr "Preferencias de edición de Tomboy"
-
-#~ msgid "Hotkeys"
-#~ msgstr "Teclas rápidas"
-
-#~ msgid "Show notes menu"
-#~ msgstr "Mostrar o menú de notas"
-
-#~ msgid "Enter the key combination to open the notes menu."
-#~ msgstr "Prema a combinación de teclas para abrir o menú de notas."
-
-#~ msgid "Open \"Start Here\""
-#~ msgstr "Abrir \"Comezar aquí\""
-
-#~ msgid "Create new note"
-#~ msgstr "Crear unha nova nota"
-
-#~ msgid "Search notes"
-#~ msgstr "Buscar notas"
-
-#~ msgid "Tomboy Hotkey Preferences"
-#~ msgstr "Preferencias das teclas rápidas de Tomboy"
-
-#~ msgid "Synchronization"
-#~ msgstr "Sincronización"
-
-#~ msgid "Add-ins"
-#~ msgstr "Engadidos"
-
-#~ msgid "Backlinks"
-#~ msgstr "Retroligazóns"
-
-#~ msgid "Print Notes"
-#~ msgstr "Imprimir notas"
-
-#~ msgid "and Sticky Notes Import."
-#~ msgstr "e importar notas adhesivas."
-
-#~ msgid "Backlinks (What links here?)"
-#~ msgstr "Retroligazóns (Que liga aquí?)"
-
-#~ msgid "Sticky Notes Import"
-#~ msgstr "Importar notas adhesivas"
-
-#~ msgid ""
-#~ "When this add-in is installed, the <link linkend=\"tools\">Tools</link> "
-#~ "menu will have the <guimenuitem>Import from Sticky Notes</guimenuitem> "
-#~ "option available."
-#~ msgstr ""
-#~ "Cando este engadido está instalado, o menú <link linkend=\"tools"
-#~ "\">Ferramentas</link> terá unha nova opción dispoñíbel "
-#~ "<guimenuitem>Importar desde notas adhesivas</guimenuitem>."
diff --git a/help/hu/hu.po b/help/hu/hu.po
deleted file mode 100644
index de4f7978..00000000
--- a/help/hu/hu.po
+++ /dev/null
@@ -1,3747 +0,0 @@
-# Hungarian translation of empathy-docs
-# Copyright (C) 2010, 2011. Free Software Foundation, Inc.
-# This file is distributed under the same license as the empathy package.
-#
-# Gabor Kelemen <kelemeng at gnome dot hu>, 2010, 2011, 2012, 2013.
-msgid ""
-msgstr ""
-"Project-Id-Version: empathy-docs master\n"
-"POT-Creation-Date: 2013-02-03 12:24+0000\n"
-"PO-Revision-Date: 2013-03-21 09:41+0100\n"
-"Last-Translator: Gabor Kelemen <kelemeng at gnome dot hu>\n"
-"Language-Team: Hungarian <gnome-hu-list at gnome dot org>\n"
-"Language: hu\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: Lokalize 1.4\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-
-#. Put one translator per line, in the form NAME <EMAIL>, YEAR1, YEAR2
-msgctxt "_"
-msgid "translator-credits"
-msgstr "Kelemen Gábor <kelemeng at gnome dot hu>, 2010, 2011, 2012, 2013"
-
-#. This is a reference to an external file such as an image or video. When
-#. the file changes, the md5 hash will change to let you know you need to
-#. update your localized copy. The msgstr is not used at all. Set it to
-#. whatever you like once you have updated your copy of the file.
-#.
-#. This is a reference to an external file such as an image or video. When
-#. the file changes, the md5 hash will change to let you know you need to
-#. update your localized copy. The msgstr is not used at all. Set it to
-#. whatever you like once you have updated your copy of the file.
-#: C/index.page:28(media)
-msgctxt "_"
-msgid ""
-"external ref='figures/empathy-logo.png' "
-"md5='1afc419a644e90b16393807e35cb5cb2'"
-msgstr ""
-"external ref='figures/empathy-logo.png' "
-"md5='1afc419a644e90b16393807e35cb5cb2'"
-
-#: C/index.page:7(info/title)
-msgctxt "link"
-msgid "Empathy Internet Messenger"
-msgstr "Empathy üzenetküldő"
-
-#: C/index.page:8(info/title)
-msgctxt "text"
-msgid "Empathy Internet Messenger"
-msgstr "Empathy üzenetküldő"
-
-#: C/index.page:19(credit/name) C/add-account.page:21(credit/name)
-#: C/audio-call.page:19(credit/name) C/audio-video.page:17(credit/name)
-#: C/create-account.page:19(credit/name)
-#: C/disable-account.page:21(credit/name)
-#: C/favorite-rooms.page:14(credit/name) C/geolocation.page:17(credit/name)
-#: C/geolocation-not-showing.page:17(credit/name)
-#: C/geolocation-privacy.page:17(credit/name)
-#: C/geolocation-supported.page:16(credit/name)
-#: C/geolocation-turn.page:18(credit/name)
-#: C/geolocation-what-is.page:18(credit/name)
-#: C/group-conversations.page:19(credit/name)
-#: C/hide-contacts.page:11(credit/name) C/import-account.page:23(credit/name)
-#: C/introduction.page:13(credit/name) C/irc-commands.page:10(credit/name)
-#: C/irc-join-pwd.page:17(credit/name) C/irc-join-room.page:16(credit/name)
-#: C/irc-manage.page:19(credit/name) C/irc-nick-password.page:18(credit/name)
-#: C/irc-send-file.page:16(credit/name)
-#: C/irc-start-conversation.page:15(credit/name)
-#: C/link-contacts.page:15(credit/name) C/prev-conv.page:17(credit/name)
-#: C/prob-conn-acctdisabled.page:19(credit/name)
-#: C/prob-conn-auth.page:21(credit/name) C/prob-conn-name.page:18(credit/name)
-#: C/prob-conn-neterror.page:19(credit/name)
-#: C/remove-account.page:19(credit/name) C/salut-protocol.page:18(credit/name)
-#: C/send-file.page:21(credit/name) C/set-custom-status.page:19(credit/name)
-#: C/share-desktop.page:14(credit/name) C/status-icons.page:16(credit/name)
-#: C/video-call.page:22(credit/name)
-msgid "Milo Casagrande"
-msgstr "Milo Casagrande"
-
-#: C/index.page:23(license/p) C/account-irc.page:20(license/p)
-#: C/account-jabber.page:18(license/p) C/accounts-window.page:22(license/p)
-#: C/add-account.page:29(license/p) C/add-contact.page:22(license/p)
-#: C/audio-call.page:23(license/p) C/audio-video.page:21(license/p)
-#: C/change-status.page:28(license/p) C/create-account.page:23(license/p)
-#: C/disable-account.page:29(license/p) C/favorite-rooms.page:18(license/p)
-#: C/geolocation.page:21(license/p)
-#: C/geolocation-not-showing.page:21(license/p)
-#: C/geolocation-privacy.page:21(license/p)
-#: C/geolocation-supported.page:20(license/p)
-#: C/geolocation-turn.page:22(license/p)
-#: C/geolocation-what-is.page:22(license/p)
-#: C/group-conversations.page:23(license/p) C/hide-contacts.page:15(license/p)
-#: C/import-account.page:31(license/p) C/introduction.page:17(license/p)
-#: C/irc-commands.page:14(license/p) C/irc-join-pwd.page:21(license/p)
-#: C/irc-join-room.page:20(license/p) C/irc-manage.page:28(license/p)
-#: C/irc-nick-password.page:22(license/p) C/irc-send-file.page:20(license/p)
-#: C/irc-start-conversation.page:19(license/p)
-#: C/link-contacts.page:19(license/p) C/overview.page:20(license/p)
-#: C/prev-conv.page:25(license/p) C/prob-conn-acctdisabled.page:23(license/p)
-#: C/prob-conn-auth.page:25(license/p) C/prob-conn-name.page:22(license/p)
-#: C/prob-conn-neterror.page:23(license/p) C/prob-conn.page:18(license/p)
-#: C/remove-account.page:23(license/p) C/salut-protocol.page:22(license/p)
-#: C/send-file.page:25(license/p) C/send-message.page:21(license/p)
-#: C/set-custom-status.page:23(license/p) C/share-desktop.page:22(license/p)
-#: C/status-icons.page:24(license/p) C/video-call.page:26(license/p)
-msgid "Creative Commons Share Alike 3.0"
-msgstr "Creative Commons Share Alike 3.0"
-
-#: C/index.page:27(page/title)
-msgid ""
-"<media type=\"image\" mime=\"image/png\" src=\"figures/empathy-logo.png\"> "
-"Empathy Internet Messenger logo </media> Empathy Internet Messenger"
-msgstr ""
-"<media type=\"image\" mime=\"image/png\" src=\"figures/empathy-logo.png\"> "
-"Empathy üzenetküldő logója </media> Empathy üzenetküldő"
-
-#: C/index.page:35(section/title)
-msgid "Account Management"
-msgstr "Fiókkezelés"
-
-#: C/index.page:39(section/title)
-msgid "Contact Management"
-msgstr "Partnerkezelés"
-
-#: C/index.page:43(section/title)
-msgid "Text Conversations"
-msgstr "Szöveges csevegések"
-
-#: C/index.page:47(section/title)
-msgid "Audio and Video Conversations"
-msgstr "Hang- és videocsevegések"
-
-#: C/index.page:51(section/title)
-msgid "Advanced Actions"
-msgstr "Speciális műveletek"
-
-#: C/index.page:55(section/title) C/irc-manage.page:64(section/title)
-msgid "Common Problems"
-msgstr "Gyakori problémák"
-
-#. This is a reference to an external file such as an image or video. When
-#. the file changes, the md5 hash will change to let you know you need to
-#. update your localized copy. The msgstr is not used at all. Set it to
-#. whatever you like once you have updated your copy of the file.
-#: C/account-irc.page:106(media)
-msgctxt "_"
-msgid ""
-"external ref='figures/gtk-add.png' md5='a856b499d8d4681b70b5ce6f25bc5c6d'"
-msgstr ""
-"external ref='figures/gtk-add.png' md5='a856b499d8d4681b70b5ce6f25bc5c6d'"
-
-#. This is a reference to an external file such as an image or video. When
-#. the file changes, the md5 hash will change to let you know you need to
-#. update your localized copy. The msgstr is not used at all. Set it to
-#. whatever you like once you have updated your copy of the file.
-#.
-#. This is a reference to an external file such as an image or video. When
-#. the file changes, the md5 hash will change to let you know you need to
-#. update your localized copy. The msgstr is not used at all. Set it to
-#. whatever you like once you have updated your copy of the file.
-#.
-#. This is a reference to an external file such as an image or video. When
-#. the file changes, the md5 hash will change to let you know you need to
-#. update your localized copy. The msgstr is not used at all. Set it to
-#. whatever you like once you have updated your copy of the file.
-#.
-#. This is a reference to an external file such as an image or video. When
-#. the file changes, the md5 hash will change to let you know you need to
-#. update your localized copy. The msgstr is not used at all. Set it to
-#. whatever you like once you have updated your copy of the file.
-#: C/account-irc.page:109(media) C/prob-conn-auth.page:58(media)
-#: C/prob-conn-name.page:44(media) C/prob-conn-neterror.page:59(media)
-msgctxt "_"
-msgid ""
-"external ref='figures/gtk-edit.png' md5='4f21b451732817be0604fe3e2c8da98b'"
-msgstr ""
-"external ref='figures/gtk-edit.png' md5='4f21b451732817be0604fe3e2c8da98b'"
-
-#. This is a reference to an external file such as an image or video. When
-#. the file changes, the md5 hash will change to let you know you need to
-#. update your localized copy. The msgstr is not used at all. Set it to
-#. whatever you like once you have updated your copy of the file.
-#: C/account-irc.page:112(media)
-msgctxt "_"
-msgid ""
-"external ref='figures/gtk-remove.png' md5='215e3a325a3dd619874e35c30a018bb6'"
-msgstr ""
-"external ref='figures/gtk-remove.png' md5='215e3a325a3dd619874e35c30a018bb6'"
-
-#: C/account-irc.page:8(info/desc)
-msgid "Additional information necessary for connecting to IRC networks."
-msgstr "IRC-hálózatokhoz való csatlakozáshoz szükséges további információk"
-
-#: C/account-irc.page:16(credit/name) C/account-jabber.page:14(credit/name)
-#: C/accounts-window.page:18(credit/name) C/add-account.page:25(credit/name)
-#: C/disable-account.page:25(credit/name)
-#: C/import-account.page:27(credit/name) C/prev-conv.page:21(credit/name)
-#: C/status-icons.page:20(credit/name)
-msgid "Shaun McCance"
-msgstr "Shaun McCance"
-
-#: C/account-irc.page:31(page/title)
-msgid "IRC account details"
-msgstr "IRC-fiók részletei"
-
-#: C/account-irc.page:33(page/p)
-msgid ""
-"IRC accounts require different information than many other types of "
-"accounts. To create an IRC account, you must specify at least an IRC network "
-"and a nickname. This page details the information you can provide for an IRC "
-"account."
-msgstr ""
-"Az IRC-fiókok sok más fióktípustól eltérő információkat igényelnek. IRC-fiók "
-"létrehozásához meg kell adnia legalább az IRC-hálózatot és egy becenevet. Ez "
-"az oldal részletesen leírja az IRC-fiókhoz megadható információkat."
-
-#: C/account-irc.page:39(note/p) C/irc-manage.page:42(note/p)
-msgid ""
-"You must have the <sys>telepathy-idle</sys> package installed to use IRC in "
-"<app>Empathy</app>."
-msgstr ""
-"Az IRC protokoll <app>Empathyban</app> való használatához telepíteni kell a "
-"<sys>telepathy-idle</sys> csomagot."
-
-#: C/account-irc.page:45(item/title) C/account-irc.page:120(item/title)
-msgid "<gui>Network</gui>"
-msgstr "<gui>Hálózat</gui>"
-
-#: C/account-irc.page:46(item/p)
-msgid ""
-"IRC is an open system that allows people to run separate IRC networks. Each "
-"network is distinct and has its own users and chat rooms. <app>Empathy</app> "
-"lists the most popular networks in the <gui>Network</gui> drop-down list. "
-"You can add additional networks. See <link xref=\"#networks\"/> below."
-msgstr ""
-"Az IRC egy nyílt rendszer, amely lehetővé teszi független IRC-hálózatok "
-"futtatását. Az egyes hálózatok egyediek, és saját felhasználókkal és "
-"csevegőszobákkal rendelkeznek. Az <app>Empathy</app> a <gui>Hálózat</gui> "
-"legördülő listában felsorolja a legnépszerűbb hálózatokat. Ezen kívül "
-"továbbiakat is felvehet. Részletekért lásd a <link xref=\"#networks\"/> "
-"részt lentebb."
-
-#: C/account-irc.page:53(item/title)
-msgid "<gui>Nickname</gui>"
-msgstr "<gui>Becenév</gui>"
-
-#: C/account-irc.page:54(item/p)
-msgid ""
-"Your nickname is your unique name on the IRC network. Only one person on a "
-"network may use a given nickname. If you get an error message that says "
-"<link xref=\"prob-conn-name\" role=\"error-msg\"/> you will need to change "
-"your nickname."
-msgstr ""
-"Beceneve az Ön egyedi neve az IRC-hálózaton. A hálózaton csak egy személy "
-"rendelkezhet egy adott becenévvel. Ha az <link xref=\"prob-conn-name\" role="
-"\"error-msg\"/> hibaüzenetet kapja, akkor módosítania kell becenevét."
-
-#: C/account-irc.page:60(item/title)
-msgid "<gui>Password</gui>"
-msgstr "<gui>Jelszó</gui>"
-
-#: C/account-irc.page:61(item/p)
-msgid ""
-"Some servers, particularly those on private networks, require a password to "
-"connect. If you are authorized to use the network, the network "
-"administrators should provide you with a password."
-msgstr ""
-"Egyes kiszolgálók, különösen a magánhálózatokon lévők, jelszót igényelnek a "
-"csatlakozáshoz. Ha jogosult a hálózat használatára, akkor a hálózat "
-"rendszergazdái megadják a jelszót."
-
-#: C/account-irc.page:65(note/title)
-msgid "NickServ Passwords"
-msgstr "NickServ jelszavak"
-
-#: C/account-irc.page:66(note/p)
-msgid ""
-"On some networks, nicknames can be registered using a service known as "
-"NickServ. <app>Empathy</app> does not directly support nickname passwords. "
-"On some networks, including the popular freenode network, server passwords "
-"are automatically forwarded to NickServ, allowing you to set this field to "
-"identify yourself with NickServ. See <link xref=\"irc-nick-password\"/> for "
-"more details."
-msgstr ""
-"Egyes hálózatokon a becenevek regisztrálhatók a NickServ néven ismert "
-"szolgáltatással. Az <app>Empathy</app> közvetlenül nem támogatja a becenevek "
-"jelszavait. Egyes hálózatokon, beleértve a népszerű FreeNode-ot, a "
-"kiszolgálójelszavak automatikusan továbbításra kerülnek a NickServnek, így "
-"ezen mező beállításával azonosíthatja magát a NickServ felé. További "
-"részletekért lásd a <link xref=\"irc-nick-password\"/> oldalt."
-
-#: C/account-irc.page:76(item/title)
-msgid "<gui>Real name</gui>"
-msgstr "<gui>Valódi név</gui>"
-
-#: C/account-irc.page:77(item/p)
-msgid ""
-"You can provide your real name in addition to your nickname. Other users "
-"will be able to see this when they view your information."
-msgstr ""
-"Beceneve mellett megadhatja valódi nevét is. Más felhasználók láthatják ezt "
-"az Ön információinak megjelenítésekor."
-
-#: C/account-irc.page:81(item/title)
-msgid "<gui>Quit message</gui>"
-msgstr "<gui>Kilépési üzenet</gui>"
-
-#: C/account-irc.page:82(item/p)
-msgid ""
-"When you go offline, a quit message is sent to all the chat rooms you’re in "
-"and to all the users you’re having a private conversation with. Use this "
-"field to provide a custom quit message."
-msgstr ""
-"Amikor kilép, egy kilépési üzenet kerül elküldésre minden csevegőszobába, "
-"amelyben jelen van, és minden felhasználónak, akivel éppen társalog. Ebben a "
-"mezőben megadhat egy egyéni kilépési üzenetet."
-
-#: C/account-irc.page:94(info/title)
-msgctxt "link"
-msgid "IRC Networks"
-msgstr "IRC-hálózatok"
-
-#: C/account-irc.page:97(section/title)
-msgid "Networks"
-msgstr "Hálózatok"
-
-#: C/account-irc.page:99(section/p)
-msgid ""
-"<app>Empathy</app> includes a list of popular IRC networks. If you wish to "
-"another IRC network, you can add it to the list. You can also modify "
-"networks and remove them from the list."
-msgstr ""
-"Az <app>Empathy</app> tartalmazza a népszerű IRC-hálózatok listáját. Ha "
-"másik IRC-hálózathoz szeretne csatlakozni, akkor hozzá kell adnia a "
-"listához. A hálózatokat módosíthatja is, és a listából is eltávolíthatja "
-"azokat."
-
-#: C/account-irc.page:104(item/p)
-msgid ""
-"To add a network to the list, click <media type=\"image\" mime=\"image/png\" "
-"src=\"figures/gtk-add.png\" width=\"16\" height=\"16\">Add</media>."
-msgstr ""
-"Hálózat listához adásához nyomja meg a <media type=\"image\" mime=\"image/png"
-"\" src=\"figures/gtk-add.png\" width=\"16\" height=\"16\">Hozzáadás</media> "
-"gombot."
-
-#: C/account-irc.page:107(item/p)
-msgid ""
-"To modify a network in the list, select the network and click <media type="
-"\"image\" mime=\"image/png\" src=\"figures/gtk-edit.png\" width=\"16\" "
-"height=\"16\">Edit</media>."
-msgstr ""
-"A módosításhoz válassza ki a hálózatot, és nyomja meg a <media type=\"image"
-"\" mime=\"image/png\" src=\"figures/gtk-edit.png\" width=\"16\" height="
-"\"16\">Szerkesztés</media> gombot."
-
-#: C/account-irc.page:110(item/p)
-msgid ""
-"To remove a network from the list, select the network and click <media type="
-"\"image\" mime=\"image/png\" src=\"figures/gtk-remove.png\" width=\"16\" "
-"height=\"16\">Remove</media>."
-msgstr ""
-"Az eltávolításhoz válassza ki a hálózatot, és nyomja meg a <media type="
-"\"image\" mime=\"image/png\" src=\"figures/gtk-remove.png\" width=\"16\" "
-"height=\"16\">z Eltávolítás</media> gombot."
-
-#: C/account-irc.page:115(section/p)
-msgid ""
-"When adding or modifying a network, you can enter the following information:"
-msgstr ""
-"Hálózat hozzáadásakor vagy módosításakor a következő információkat adhatja "
-"meg:"
-
-#: C/account-irc.page:121(item/p)
-msgid ""
-"This is the name of the network as you want it to appear in the list of "
-"networks."
-msgstr ""
-"Ez a hálózat neve, ahogyan a hálózatok listájában meg szeretné jeleníteni."
-
-#: C/account-irc.page:125(item/title)
-msgid "<gui>Charset</gui>"
-msgstr "<gui>Karakterkészlet</gui>"
-
-#: C/account-irc.page:126(item/p)
-msgid ""
-"This specifies the character encoding that is typically used on this "
-"network. A character encoding is a specific way of recording characters "
-"internally in a computer. There are many character encodings, and you need "
-"to use the same character encoding as other users to see their messages "
-"correctly."
-msgstr ""
-"Itt megadhatja a hálózaton általában használt karakterkódolást. A "
-"karakterkódolás a karakterek egy adott, számítógépen belüli tárolási módja. "
-"Számos karakterkódolás van, és az üzenetek megfelelő megjelenítéséhez "
-"ugyanazt a karakterkódolást kell használnia, mint a többi felhasználó."
-
-#: C/account-irc.page:135(item/p)
-msgid ""
-"By default, <app>Empathy</app> uses UTF-8, a modern character encoding that "
-"can handle text from most of the world's languages. Another common encoding "
-"for English and some other Western languages is ISO-8859-1."
-msgstr ""
-"Alapértelmezésben az <app>Empathy</app> az UTF-8-at használja, ez a modern "
-"karakterkódolás képes a világ sok nyelvének kezelésére, így a magyaréra is. "
-"A magyar nyelv gyakori kódolása még az ISO-8859-2."
-
-#: C/account-irc.page:141(item/title)
-msgid "<gui>Servers</gui>"
-msgstr "<gui>Kiszolgálók</gui>"
-
-#: C/account-irc.page:142(item/p)
-msgid ""
-"An IRC network may have many servers you can connect to. When you are "
-"connected to a server on a particular network, you can communicate with all "
-"users on all other servers on that network. You can add and remove servers "
-"for this network using the <gui>Add</gui> and <gui>Remove</gui> buttons."
-msgstr ""
-"Az IRC-hálózat több kiszolgálóval rendelkezhet. Ha egy adott hálózat egy "
-"kiszolgálójához csatlakozik, a hálózat többi kiszolgálójához csatlakozó "
-"összes felhasználóval is képes kommunikálni. A hálózathoz a <gui>Hozzáadás</"
-"gui> gombbal vehet fel kiszolgálókat, és az <gui>Eltávolítás</gui> gombbal "
-"törölheti azokat."
-
-#: C/account-irc.page:147(item/p)
-msgid ""
-"When a server is selected, click the field under <gui>Server</gui> or "
-"<gui>Port</gui> to edit it. Alternatively, use the left and right arrow keys "
-"to focus the field, and press the space bar to begin editing."
-msgstr ""
-"Amikor egy kiszolgáló ki van választva, kattintson a <gui>Kiszolgáló</gui> "
-"vagy a <gui>Port</gui> alatti mezőre annak szerkesztéséhez. Ennek "
-"alternatívájaként a balra és jobbra nyilakkal is átviheti a fókuszt a mezők "
-"közt, és a szóköz megnyomásával szerkesztheti azokat."
-
-#: C/account-irc.page:151(item/p)
-msgid ""
-"Select the check box in the <gui>SSL</gui> column to encrypt all "
-"communication with a server. Note that this does not prevent other users on "
-"the network from seeing what you write on public chat rooms."
-msgstr ""
-"Jelölje be az <gui>SSL</gui> oszlop alatti jelölőnégyzetet a kiszolgálóval "
-"történő összes kommunikáció titkosításához. Ne feledje, hogy ez nem "
-"akadályoz meg senkit a hálózaton a nyilvános csevegőszobákba írt szavai "
-"elolvasásában."
-
-#: C/account-jabber.page:7(info/desc)
-msgid "Advanced options for Jabber and Google Talk accounts."
-msgstr "Speciális beállítások Jabber és Google Talk fiókokhoz."
-
-#: C/account-jabber.page:29(page/title)
-msgid "Jabber account details"
-msgstr "Jabber fiókok részletei"
-
-#: C/account-jabber.page:31(page/p)
-msgid ""
-"Most Jabber accounts will require only a login ID and a password to connect. "
-"For some accounts or on certain types of networks, you may need to enter "
-"additional information in the <gui>Advanced</gui> section. Normally, you "
-"will not need to use the advanced options below. For general instructions on "
-"adding an account, see <link xref=\"add-account\"/>."
-msgstr ""
-"A legtöbb Jabber fiók csak bejelentkezési azonosítót és jelszót igényel a "
-"csatlakozáshoz. Egyes fiókokhoz, vagy bizonyos hálózattípusokon további "
-"információk megadására lehet szükség a <gui>Speciális</gui> szakaszban. "
-"Általában nincs szükség a lentebbi speciális beállítások használatára. Fiók "
-"hozzáadásával kapcsolatban lásd az <link xref=\"add-account\"/> oldalt."
-
-#: C/account-jabber.page:39(note/p)
-msgid ""
-"Google Talk is a type of Jabber account. These instructions hold for Google "
-"Talk accounts as well."
-msgstr ""
-"A Google Talk a Jabber fiókok egy fajtája. Ezek az utasítások Google Talk "
-"fiókokra is érvényesek."
-
-#: C/account-jabber.page:45(item/title)
-msgid "<gui>Encryption required (TLS/SSL)</gui>"
-msgstr "<gui>Titkosítás szükséges (TLS/SSL)</gui>"
-
-#: C/account-jabber.page:46(item/title)
-msgid "<gui>Ignore SSL certificate errors</gui>"
-msgstr "<gui>SSL-tanúsítványhibák figyelmen kívül hagyása</gui>"
-
-#: C/account-jabber.page:47(item/p)
-msgid ""
-"Whenever possible, communication between <app>Empathy</app> and the Jabber "
-"server is encrypted. If encrypted communication is not possible, messages "
-"may be sent unencrypted. Select <gui>Encryption required</gui> to prevent "
-"<app>Empathy</app> from communicating with the Jabber server when encryption "
-"is not possible."
-msgstr ""
-"Amikor csak lehetséges, az <app>Empathy</app> és a Jabber kiszolgáló közötti "
-"kommunikáció titkosított. Ha a titkosított kommunikáció nem lehetséges, az "
-"üzenetek titkosítatlanul kerülhetnek elküldésre. Válassza ki a "
-"<gui>Titkosítás szükséges</gui> négyzetet a Jabber kiszolgálóval való "
-"kommunikáció megtiltásához az <app>Empathynak</app>, ha a titkosítás nem "
-"lehetséges."
-
-#: C/account-jabber.page:52(item/p)
-msgid ""
-"Some Jabber servers may encrypt data using invalid certificates, or using "
-"certificates from unknown authorities. If you trust the server you are "
-"connecting to, you can select <gui>Ignore SSL certificate errors</gui> to "
-"allow encrypted communication with invalid certificates."
-msgstr ""
-"Egyes Jabber kiszolgálók az adatokat érvénytelen, vagy ismeretlen "
-"hitelesítésszolgáltatóktól származó tanúsítványokkal titkosíthatják. Ha "
-"megbízik a kiszolgálóban, amelyhez csatlakozik, akkor kiválaszthatja az "
-"<gui>SSL-tanúsítványhibák figyelmen kívül hagyása</gui> négyzetet az "
-"érvénytelen tanúsítvánnyal történő titkosított kommunikáció engedélyezéséhez."
-
-#: C/account-jabber.page:59(item/title)
-msgid "<gui>Resource</gui>"
-msgstr "<gui>Erőforrás</gui>"
-
-#: C/account-jabber.page:60(item/title)
-msgid "<gui>Priority</gui>"
-msgstr "<gui>Prioritás</gui>"
-
-#: C/account-jabber.page:61(item/p)
-msgid ""
-"If you have multiple applications (for instance, on separate computers) "
-"connected to your account at the same time, you can set a resource to "
-"uniquely identify each one. By default, <app>Empathy</app> will use "
-"<input>Telepathy</input> as the resource."
-msgstr ""
-"Ha több alkalmazással (például más számítógépekről) kapcsolódik egyidejűleg "
-"fiókjához, akkor beállíthat egy erőforrást ezek egyedi azonosításához. "
-"Alapértelmezésben az <app>Empathy</app> erőforrásként a <input>Telepathy</"
-"input> értéket használja."
-
-#: C/account-jabber.page:65(item/p)
-msgid ""
-"You can set the priority to specify which application should receive "
-"incoming messages from your contacts. New messages will be sent to the "
-"application with the highest priority."
-msgstr ""
-"Beállíthatja a prioritást annak megadásához, hogy melyik alkalmazás kapja "
-"partnereitől a bejövő üzeneteket. Az új üzenetek a legmagasabb prioritású "
-"alkalmazásnak kerülnek elküldésre."
-
-#: C/account-jabber.page:70(item/title)
-msgid "<gui>Override server settings</gui>"
-msgstr "<gui>Kiszolgáló beállításainak felülbírálása</gui>"
-
-#: C/account-jabber.page:71(item/p)
-msgid ""
-"<app>Empathy</app> will use default settings to connect to the Jabber server "
-"based on your login ID. For some Jabber servers, you will need to enter "
-"custom server settings manually. These settings should be provided for you "
-"by your Jabber provider."
-msgstr ""
-"Az <app>Empathy</app> az alapértelmezett beállításokat használja a Jabber "
-"kiszolgálóhoz való kapcsolódáshoz a bejelentkezési azonosítója alapján. "
-"Egyes Jabber kiszolgálókhoz saját kezűleg kell egyéni "
-"kiszolgálóbeállításokat megadnia. Ezeket a beállításokat a Jabber "
-"szolgáltatója biztosítja."
-
-#: C/accounts-window.page:11(info/desc)
-msgid "Add, modify, and delete accounts."
-msgstr "Fiókok hozzáadása, módosítása és törlése."
-
-#: C/accounts-window.page:33(page/title)
-msgid "Accounts Window"
-msgstr "Fiókok ablak"
-
-#: C/accounts-window.page:35(page/p)
-msgid ""
-"The <gui>Accounts</gui> window allows you to add, modify, and delete "
-"accounts."
-msgstr ""
-"A <gui>Fiókok</gui> ablak lehetővé teszi fiókok hozzáadását, módosítását és "
-"törlését."
-
-#: C/accounts-window.page:43(section/title)
-msgid "Account Details"
-msgstr "Fiók részletei"
-
-#: C/accounts-window.page:44(section/p)
-msgid ""
-"For most types of accounts, you can simply enter a login ID and a password. "
-"Certain accounts or account types, however, may require additional "
-"information."
-msgstr ""
-"A legtöbb fióktípushoz csak a bejelentkezési azonosítót és a jelszót kell "
-"megadnia. Bizonyos fiókok vagy fióktípusok azonban további információkat is "
-"igényelhetnek."
-
-#: C/add-account.page:9(info/desc)
-msgid "Add a new account to <app>Empathy</app>."
-msgstr "Új fiók felvétele az <app>Empathyba</app>."
-
-#: C/add-account.page:40(page/title)
-msgid "Add a new account"
-msgstr "Új fiók hozzáadása"
-
-#: C/add-account.page:42(page/p)
-msgid ""
-"You can add instant messaging accounts from any supported service to "
-"communicate with all of your contacts in <app>Empathy</app>. For some "
-"account providers, these steps will also allow you to register for a new "
-"account. For more details, see <link xref=\"create-account\"/>."
-msgstr ""
-"Az <app>Empathyba</app> bármely támogatott szolgáltatás azonnaliüzenő-"
-"fiókjait felveheti, hogy kommunikálhasson partnereivel. Egyes szolgáltatók "
-"esetén ezekkel a lépésekkel egy új fiók regisztrálását is elvégezheti. "
-"További részletekért lásd az <link xref=\"create-account\"/> oldalt."
-
-#: C/add-account.page:49(item/p) C/disable-account.page:49(item/p)
-#: C/irc-nick-password.page:50(item/p) C/remove-account.page:43(item/p)
-msgid ""
-"From the <gui>Contact List</gui> window, choose <guiseq><gui>Edit</gui> "
-"<gui>Accounts</gui></guiseq>, or press <key>F4</key>."
-msgstr ""
-"A <gui>Partnerlista</gui> ablakban válassza a <guiseq><gui>Szerkesztés</"
-"gui><gui>Fiókok</gui></guiseq> menüpontot, vagy nyomja meg az <key>F4</key> "
-"billentyűt."
-
-#: C/add-account.page:53(item/p)
-msgid "Click <gui style=\"button\">+</gui>."
-msgstr "Nyomja meg a <gui style=\"button\">+</gui> gombot."
-
-#: C/add-account.page:58(item/p)
-msgid ""
-"From the <gui>Protocol</gui> drop-down list, select the type of account you "
-"wish to add."
-msgstr ""
-"A <gui>Protokoll</gui> legördülő listából válassza ki a felvenni kívánt fiók "
-"típusát."
-
-#: C/add-account.page:62(item/p)
-msgid ""
-"If you do not already have a registered account, select <gui>Create a new "
-"account on the server</gui>. This feature is not available for all account "
-"types, and may not work with some account providers. See <link xref=\"create-"
-"account\"/> for more information."
-msgstr ""
-"Ha még nincs regisztrált fiókja, válassza az <gui>Új fiók létrehozása a "
-"kiszolgálón</gui> lehetőséget. Ez a szolgáltatás nem érhető el minden "
-"fióktípushoz, és egyes szolgáltatók esetén lehet hogy nem működik. További "
-"információkért lásd az <link xref=\"create-account\"/> oldalt."
-
-#: C/add-account.page:69(item/p)
-msgid ""
-"Enter the required information. For most accounts, you will only need a "
-"login ID and a password. Some accounts may require additional information. "
-"See <link xref=\"accounts-window#details\"/>for more information."
-msgstr ""
-"Adja meg a szükséges információkat. A legtöbb fiókhoz csak egy "
-"bejelentkezési azonosító és jelszó kell. Egyes fiókok további információkat "
-"igényelhetnek, lásd: <link xref=\"accounts-window#details\"/>."
-
-#: C/add-account.page:74(item/p) C/import-account.page:61(item/p)
-#: C/irc-nick-password.page:63(item/p)
-msgid "Click <gui style=\"button\">Apply</gui>."
-msgstr "Nyomja meg az <gui style=\"button\">Alkalmaz</gui> gombot."
-
-#: C/add-account.page:81(note/p)
-msgid ""
-"To change the name that identifies the account in the <gui>Accounts</gui> "
-"window, select the account from the list on the left and either click on the "
-"name or press the space bar. Edit the account name and press <key>Enter</"
-"key> when you’re finished."
-msgstr ""
-"A fiókot a <gui>Fiókok</gui> ablakban azonosító név módosításához válassza "
-"ki a fiókot a bal oldali listából, és kattintson a nevére, vagy nyomja meg a "
-"szóköz billentyűt. Módosítsa a fiók nevét, és nyomja meg az <key>Enter</key> "
-"billentyűt ha befejezte."
-
-#: C/add-contact.page:9(info/desc)
-msgid "Add someone to the contact list."
-msgstr "A partnerlista bővítése."
-
-#: C/add-contact.page:18(credit/name) C/change-status.page:24(credit/name)
-#: C/prob-conn-acctdisabled.page:15(credit/name)
-#: C/prob-conn-auth.page:17(credit/name)
-#: C/prob-conn-neterror.page:15(credit/name) C/prob-conn.page:14(credit/name)
-#: C/send-file.page:17(credit/name) C/send-message.page:17(credit/name)
-msgid "Phil Bull"
-msgstr "Phil Bull"
-
-#: C/add-contact.page:33(page/title)
-msgid "Add someone to your list of contacts"
-msgstr "Egy személy felvétele a partnerlistájára"
-
-#: C/add-contact.page:37(item/p)
-msgid "Choose <guiseq><gui>Chat</gui><gui>Add Contact</gui></guiseq>."
-msgstr ""
-"Válassza a <guiseq><gui>Csevegés</gui><gui>Partner felvétele</gui></guiseq> "
-"menüpontot."
-
-#: C/add-contact.page:40(item/p)
-msgid ""
-"From the <gui>Account</gui> drop-down list, select the account you wish to "
-"use to connect to your contact. Your contact will need to be using the same "
-"service as the account you select."
-msgstr ""
-"A <gui>Felhasználói fiók</gui> legördülő listából válassza ki a "
-"csatlakozáshoz használandó fiókot. A partnerének az itt kiválasztott "
-"fiókéval egyező szolgáltatást kell használnia."
-
-#: C/add-contact.page:45(item/p)
-msgid ""
-"In the <gui>Identifier</gui> field, enter your contact’s login ID, username, "
-"screen name, or other appropriate identifier for the service type."
-msgstr ""
-"Az <gui>Azonosító</gui> mezőben adja meg partnere bejelentkezési "
-"azonosítóját, felhasználónevét, becenevét, vagy a szolgáltatástípushoz "
-"megfelelő egyéb azonosítóját."
-
-#: C/add-contact.page:49(item/p)
-msgid ""
-"In the <gui>Alias</gui> field, type your contact’s name as you would like it "
-"to appear in your contact list."
-msgstr ""
-"Az <gui>Álnév</gui> mezőben adja meg a partner nevét, ahogyan azt a "
-"partnerlistában szeretné látni."
-
-#: C/add-contact.page:53(item/p)
-msgid "Click <gui>Add</gui> to add the person to your list of contacts."
-msgstr ""
-"Kattintson a <gui>Hozzáadás</gui> gombra a személy felvételéhez a "
-"partnerlistájára."
-
-#: C/add-contact.page:61(note/p)
-msgid ""
-"To add a new person to your list of contacts, you need to be connected to "
-"the Internet and to your account."
-msgstr ""
-"Új személy partnerlistára való felvételéhez csatlakoznia kell az internethez "
-"és fiókjához."
-
-#. This is a reference to an external file such as an image or video. When
-#. the file changes, the md5 hash will change to let you know you need to
-#. update your localized copy. The msgstr is not used at all. Set it to
-#. whatever you like once you have updated your copy of the file.
-#.
-#. This is a reference to an external file such as an image or video. When
-#. the file changes, the md5 hash will change to let you know you need to
-#. update your localized copy. The msgstr is not used at all. Set it to
-#. whatever you like once you have updated your copy of the file.
-#.
-#. This is a reference to an external file such as an image or video. When
-#. the file changes, the md5 hash will change to let you know you need to
-#. update your localized copy. The msgstr is not used at all. Set it to
-#. whatever you like once you have updated your copy of the file.
-#: C/audio-call.page:36(media) C/audio-video.page:70(media)
-#: C/video-call.page:39(media)
-msgctxt "_"
-msgid ""
-"external ref='figures/camera-web.png' md5='8166b4372f25b78cbf5a64fe2eac2ce5'"
-msgstr ""
-"external ref='figures/camera-web.png' md5='8166b4372f25b78cbf5a64fe2eac2ce5'"
-
-#: C/audio-call.page:9(info/desc)
-msgid "Call your contacts over the Internet."
-msgstr "Hívja fel partnereit az interneten."
-
-#: C/audio-call.page:27(page/title)
-msgid "Start an audio conversation"
-msgstr "Hanghívás kezdeményezése"
-
-#: C/audio-call.page:29(page/p)
-msgid ""
-"You can call your contacts and have an audio conversation with them. This "
-"features only works with certain types of accounts, and it requires the "
-"other person to have an application that supports audio calls."
-msgstr ""
-"Felhívhatja partnereit, és beszélgethet velük. Ez a szolgáltatás csak "
-"bizonyos fióktípusokkal működik, és a másik személynek is a hanghívásokat "
-"támogató alkalmazást kell használnia."
-
-#: C/audio-call.page:34(item/p)
-msgid ""
-"From the <gui>Contact List</gui> window, click the <media type=\"image\" "
-"mime=\"image/png\" src=\"figures/camera-web.png\">video call</media> icon "
-"next to the name of the contact you wish to call and choose <gui style="
-"\"menuitem\">Audio Call</gui>."
-msgstr ""
-"A <gui>Partnerlista</gui> ablakban kattintson a <media type=\"image\" mime="
-"\"image/png\" src=\"figures/camera-web.png\">videohívás</media> ikonra a "
-"felhívni kívánt partner neve mellett, és válassza a <gui style=\"menuitem"
-"\">Hanghívás</gui> lehetőséget."
-
-#: C/audio-call.page:42(item/p) C/video-call.page:44(item/p)
-msgid ""
-"A new window will open. When the connection is established, you will see "
-"<gui>Connected</gui> at the bottom of the window, along with the total "
-"conversation time."
-msgstr ""
-"Egy új ablak nyílik meg. A kapcsolat létrejöttekor az ablak alján a "
-"<gui>Kapcsolódva</gui> felirat jelenik meg, a beszélgetés teljes idejével "
-"együtt."
-
-#: C/audio-call.page:48(item/p) C/video-call.page:49(item/p)
-msgid "To end the conversation, click on <gui style=\"button\">Hang up</gui>."
-msgstr ""
-"A beszélgetés befejezéséhez kattintson a <gui style=\"button\">Befejezés</"
-"gui> gombra."
-
-#: C/audio-call.page:55(note/p)
-msgid ""
-"To turn an audio conversation into a video conversation, choose <guiseq><gui "
-"style=\"menu\">Video</gui> <gui style=\"menuitem\">Video On</gui></guiseq>."
-msgstr ""
-"Hanghívás videohívássá változtatásához válassza a <guiseq><gui style=\"menu"
-"\">Videó</gui><gui style=\"menuitem\">Videó be</gui></guiseq> menüpontot."
-
-#: C/audio-call.page:63(section/title)
-msgid "Start an audio conversation with a meta-contact"
-msgstr "Hanghívás indítása metapartnerrel"
-
-#: C/audio-call.page:66(item/p) C/send-message.page:53(item/p)
-#: C/video-call.page:64(item/p)
-msgid ""
-"From the <gui>Contact List</gui> window, right-click on the meta-contact."
-msgstr ""
-"A <gui>Partnerlista</gui> ablakban kattintson a jobb egérgombbal a "
-"metapartnerre."
-
-#: C/audio-call.page:71(item/p)
-msgid ""
-"Select the contact you want to have the conversation, and from the menu "
-"select <gui style=\"menuitem\">Audio Call</gui>."
-msgstr ""
-"Válassza ki a felhívni kívánt partnert, majd a menüből a <gui style="
-"\"menuitem\">Hanghívás</gui> menüpontot."
-
-#: C/audio-call.page:78(note/p) C/send-message.page:65(note/p)
-#: C/video-call.page:76(note/p)
-msgid ""
-"To recognize if a contact is a <em>meta-contact</em>, move your mouse on a "
-"contact in the <gui>Contact List</gui> window, and stop over it for a "
-"second: a small pop-up message will appear showing the number of the "
-"contacts that form the meta-contact."
-msgstr ""
-"Annak eldöntéséhez, hogy egy partner <em>metapartner</em>-e, vigye "
-"egérmutatóját a partnerre a <gui>Partnerlista</gui> ablakban, és a megjelenő "
-"üzenet megadja a metapartnert alkotó partnerek számát."
-
-#. This is a reference to an external file such as an image or video. When
-#. the file changes, the md5 hash will change to let you know you need to
-#. update your localized copy. The msgstr is not used at all. Set it to
-#. whatever you like once you have updated your copy of the file.
-#: C/audio-video.page:58(media)
-msgctxt "_"
-msgid ""
-"external ref='figures/audio-input-microphone.png' "
-"md5='8d89026b66a263a3bc5b1f0665948567'"
-msgstr ""
-"external ref='figures/audio-input-microphone.png' "
-"md5='8d89026b66a263a3bc5b1f0665948567'"
-
-#: C/audio-video.page:8(info/desc)
-msgid ""
-"Information on when it is possible to have an audio or video conversation."
-msgstr "Információk arról, hogy mikor kezdhet hang- vagy videohívást."
-
-#: C/audio-video.page:32(page/title)
-msgid "Audio and video support"
-msgstr "Hang- és videotámogatás"
-
-#: C/audio-video.page:34(page/p)
-msgid ""
-"You can only have audio and video conversation with contacts who are using "
-"an application which also supports this feature. When your contacts support "
-"audio or video conversations, you will see the following icons next to their "
-"names in the contact list:"
-msgstr ""
-"Csak olyan partnerekkel folytathat hang- és videohívást, akik maguk is ezt a "
-"szolgáltatást támogató klienst használnak. Ha a partner kliense támogatja a "
-"hang- vagy videohívást, akkor a partnerlistában a neve mellett a következő "
-"ikont láthatja:"
-
-#: C/audio-video.page:43(td/p)
-msgid "Icon"
-msgstr "Ikon"
-
-#: C/audio-video.page:48(td/p)
-msgid "Description"
-msgstr "Leírás"
-
-#: C/audio-video.page:57(td/p)
-msgid ""
-"<media type=\"image\" mime=\"image/png\" src=\"figures/audio-input-"
-"microphone.png\"> Icon for audio conversation </media>"
-msgstr ""
-"<media type=\"image\" mime=\"image/png\" src=\"figures/audio-input-"
-"microphone.png\">Hanghívások ikonja</media>"
-
-#: C/audio-video.page:64(td/p)
-msgid "The contact is able to have an audio conversation."
-msgstr "A partner képes hanghívás fogadására."
-
-#: C/audio-video.page:69(td/p)
-msgid ""
-"<media type=\"image\" mime=\"image/png\" src=\"figures/camera-web.png\"> "
-"Icon for video conversation </media>"
-msgstr ""
-"<media type=\"image\" mime=\"image/png\" src=\"figures/camera-web.png"
-"\">Videohívások ikonja</media>"
-
-#: C/audio-video.page:76(td/p)
-msgid "The contact is able to have a video conversation."
-msgstr "A partner képes videohívás fogadására."
-
-#: C/audio-video.page:83(note/p)
-msgid ""
-"In order to have an audio conversation, you need to have a sound card that "
-"is supported by your operating system, and a working microphone."
-msgstr ""
-"Hanghíváshoz az operációs rendszer által támogatott hangkártyára, és működő "
-"mikrofonra van szüksége."
-
-#: C/audio-video.page:87(note/p)
-msgid ""
-"In order to have a video conversation, you need to have a webcam that is "
-"supported by your operating system, and a working microphone."
-msgstr ""
-"Videohíváshoz az operációs rendszer által támogatott webkamerára, és működő "
-"mikrofonra van szüksége."
-
-#: C/audio-video.page:95(section/title)
-msgid "Supported Account Types"
-msgstr "Támogatott fióktípusok"
-
-#: C/audio-video.page:97(section/p)
-msgid ""
-"You can only have audio and video conversations using accounts on certain "
-"supported services. The following table lists whether audio and video is "
-"supported for each type of account."
-msgstr ""
-"Csak bizonyos támogatott szolgáltatások fiókjainak használatakor van "
-"lehetősége hang- és videohívásokra. A következő táblázat felsorolja, hogy a "
-"hang és videó támogatott-e az egyes fióktípusokban."
-
-#: C/audio-video.page:102(note/p)
-msgid ""
-"Account types are provided by plugins. Your system may not have all of the "
-"following types available, or it may have types not listed here. Updated "
-"plugins may make audio or video conversations possible on account types that "
-"are listed as unsupported here."
-msgstr ""
-"A fióktípusokat bővítmények biztosítják. Rendszerén lehet, hogy a következő "
-"típusok nem mindegyike érhető el, de rendelkezhet itt fel nem sorolt "
-"típusokkal is. A frissített bővítmények lehetővé tehetik a hang- és "
-"videohívásokat az itt nem támogatottként felsorolt fióktípusokkal."
-
-#: C/audio-video.page:128(td/p)
-msgid "Service"
-msgstr "Szolgáltatás"
-
-#: C/audio-video.page:129(td/p)
-msgid "Audio"
-msgstr "Hang"
-
-#: C/audio-video.page:130(td/p)
-msgid "Video"
-msgstr "Videó"
-
-#: C/audio-video.page:135(td/p)
-msgid "AIM"
-msgstr "AIM"
-
-#: C/audio-video.page:136(td/p) C/audio-video.page:137(td/p)
-#: C/audio-video.page:141(td/p) C/audio-video.page:142(td/p)
-#: C/audio-video.page:146(td/p) C/audio-video.page:147(td/p)
-#: C/audio-video.page:156(td/p) C/audio-video.page:157(td/p)
-#: C/audio-video.page:161(td/p) C/audio-video.page:162(td/p)
-#: C/audio-video.page:166(td/p) C/audio-video.page:167(td/p)
-#: C/audio-video.page:181(td/p) C/audio-video.page:182(td/p)
-#: C/audio-video.page:186(td/p) C/audio-video.page:187(td/p)
-#: C/audio-video.page:191(td/p) C/audio-video.page:192(td/p)
-#: C/audio-video.page:196(td/p) C/audio-video.page:197(td/p)
-#: C/audio-video.page:201(td/p) C/audio-video.page:202(td/p)
-#: C/audio-video.page:211(td/p) C/audio-video.page:212(td/p)
-#: C/audio-video.page:216(td/p) C/audio-video.page:217(td/p)
-msgid "No"
-msgstr "Nem"
-
-#: C/audio-video.page:140(td/p)
-msgid "Facebook Chat"
-msgstr "Facebook csevegés"
-
-#: C/audio-video.page:145(td/p)
-msgid "gadugadu"
-msgstr "Gadu-Gadu"
-
-#: C/audio-video.page:150(td/p)
-msgid "Google Talk"
-msgstr "Google Talk"
-
-#: C/audio-video.page:151(td/p) C/audio-video.page:152(td/p)
-#: C/audio-video.page:171(td/p) C/audio-video.page:172(td/p)
-#: C/audio-video.page:176(td/p) C/audio-video.page:177(td/p)
-#: C/audio-video.page:206(td/p) C/audio-video.page:207(td/p)
-msgid "Yes"
-msgstr "Igen"
-
-#: C/audio-video.page:155(td/p)
-msgid "Groupwise"
-msgstr "Groupwise"
-
-#: C/audio-video.page:160(td/p)
-msgid "ICQ"
-msgstr "ICQ"
-
-#: C/audio-video.page:165(td/p) C/create-account.page:107(section/title)
-msgid "IRC"
-msgstr "IRC"
-
-#: C/audio-video.page:170(td/p) C/create-account.page:60(section/title)
-msgid "Jabber"
-msgstr "Jabber"
-
-#: C/audio-video.page:175(td/p)
-msgid "MSN"
-msgstr "MSN"
-
-#: C/audio-video.page:180(td/p)
-msgid "myspace"
-msgstr "MySpace"
-
-#: C/audio-video.page:185(td/p)
-msgid "qq"
-msgstr "QQ"
-
-#: C/audio-video.page:190(td/p) C/create-account.page:78(section/title)
-msgid "People Nearby"
-msgstr "Közeli emberek"
-
-#: C/audio-video.page:195(td/p)
-msgid "sametime"
-msgstr "Sametime"
-
-#: C/audio-video.page:200(td/p)
-msgid "silc"
-msgstr "Silc"
-
-#: C/audio-video.page:205(td/p) C/create-account.page:89(section/title)
-msgid "SIP"
-msgstr "SIP"
-
-#: C/audio-video.page:210(td/p)
-msgid "Yahoo!"
-msgstr "Yahoo!"
-
-#: C/audio-video.page:215(td/p)
-msgid "zephyr"
-msgstr "Zephyr"
-
-#: C/change-status.page:9(info/desc)
-msgid "Change your status to advertise your availability to your contacts."
-msgstr ""
-"Módosítsa állapotát elérhetőségének közzétételéhez a partnerei számára."
-
-#: C/change-status.page:39(page/title)
-msgid "Change your status"
-msgstr "Módosítsa állapotát"
-
-#: C/change-status.page:41(page/p)
-msgid ""
-"You can set your status to indicate your availability to your contacts. "
-"<app>Empathy</app> allows you to select from a list of defined statuses."
-msgstr ""
-"Beállíthatja állapotát az elérhetőségének jelzéséhez partnerei felé. Az "
-"<app>Empathy</app> lehetővé teszi a mentett állapotok listából való "
-"kiválasztását."
-
-#: C/change-status.page:46(item/p)
-msgid ""
-"Click on the drop-down list at the top of the <gui>Contact List</gui> window."
-msgstr ""
-"Kattintson a <gui>Partnerlista</gui> ablak tetején lévő legördülő listára."
-
-#: C/change-status.page:51(item/p)
-msgid "Select a status from the list."
-msgstr "Válasszon egy állapotot a listából."
-
-#: C/change-status.page:57(page/p)
-msgid ""
-"See <link xref=\"status-icons\"/> for a list of the built-in statuses and "
-"what they mean. You can also <link xref=\"set-custom-status\">add custom "
-"status messages</link> to provide more information about your availability "
-"to your contacts."
-msgstr ""
-"A beépített állapotok listájával és jelentésével kapcsolatban lásd az <link "
-"xref=\"status-icons\"/> oldalt. Felvehet <link xref=\"set-custom-status"
-"\">egyéni állapotüzeneteket</link> további információk közléséhez "
-"partnereivel az elérhetőségéről."
-
-#: C/change-status.page:63(note/p)
-msgid ""
-"If you do not use your computer for a while, or if the screensaver is on, "
-"the status will be automatically set to Away."
-msgstr ""
-"Ha egy ideig nem használja a számítógépet, vagy a képernyővédő bekapcsol, az "
-"állapot automatikusan „Távol” lesz."
-
-#: C/create-account.page:9(info/desc)
-msgid "Register for an account with one of the supported messaging services."
-msgstr "Fiók regisztrálása valamelyik támogatott üzenetküldő szolgáltatással."
-
-#: C/create-account.page:34(page/title)
-msgid "Register for a new account"
-msgstr "Új fiók regisztrálása"
-
-#: C/create-account.page:36(page/p)
-msgid ""
-"Most account types require you to create an account with a account provider "
-"before you can connect using instant messaging applications like "
-"<app>Empathy</app>. With some account providers, you can use <app>Empathy</"
-"app> to register for a new account, using the same steps as you would to "
-"<link xref=\"add-account\">add an account</link>."
-msgstr ""
-"A legtöbb fióktípus megköveteli fiók létrehozását egy szolgáltatónál ahhoz, "
-"hogy az <app>Empathyhoz</app> hasonló azonnaliüzenő alkalmazásokkal "
-"csatlakozhatna. Egyes szolgáltatók esetén használhatja az <app>Empathyt</"
-"app> új fiók regisztrálására, a <link xref=\"add-account\">fiók "
-"hozzáadásánál</link> használt lépéseket követve."
-
-#: C/create-account.page:42(page/p)
-msgid ""
-"This page provides information on creating a new account for various types "
-"of accounts. Your account provider should give you a login ID and a "
-"password, as well as any additional information you need to connect using "
-"<app>Empathy</app>."
-msgstr ""
-"Ez az oldal új fiók létrehozásával kapcsolatos információkat biztosít "
-"különböző fióktípusokhoz. A szolgáltatónak meg kell adnia a bejelentkezési "
-"azonosítót és jelszót, valamint az <app>Empathy</app> használatával való "
-"csatlakozáshoz esetleg szükséges további információkat."
-
-#: C/create-account.page:47(section/title)
-msgid "Facebook"
-msgstr "Facebook"
-
-#: C/create-account.page:48(section/p)
-msgid ""
-"Facebook is one of the most-used social networks. It allows users to create "
-"their own profile and to communicate with their friends."
-msgstr ""
-"A Facebook az egyik legtöbbet használt közösségi hálózat. Segítségével a "
-"felhasználók saját profilt hozhatnak létre, és kommunikálhatnak barátaikkal."
-
-#: C/create-account.page:52(section/p)
-msgid ""
-"To use Facebook to communicate with your friends, you will need to create a "
-"new account from the website: <link href=\"http://www.facebook.com\">www."
-"facebook.com</link>."
-msgstr ""
-"A Facebook használatához a <link href=\"http://www.facebook.com\">www."
-"facebook.com</link> weboldalon kell létrehoznia egy új fiókot."
-
-#: C/create-account.page:62(section/p)
-msgid ""
-"Jabber is an open instant messaging system. Like email, Jabber allows you to "
-"choose your account provider and communicate with all other Jabber users, "
-"regardless of their account provider."
-msgstr ""
-"A Jabber egy nyílt azonnaliüzenő-rendszer. Az e-mailhez hasonlóan a Jabber "
-"lehetővé teszi a szolgáltató megválasztását, és az összes Jabber "
-"felhasználóval való kommunikációt a szolgáltatótól függetlenül."
-
-#: C/create-account.page:66(section/p)
-msgid ""
-"You will need to create a new account with a Jabber provider. There are many "
-"free providers; one popular provider is <link href=\"http://register.jabber."
-"org/\">Jabber.org</link>."
-msgstr ""
-"Egy Jabber szolgáltatónál létre kell hoznia az új fiókot. Számos ingyenes "
-"szolgáltató van, az egyik népszerű a <link href=\"http://register.jabber.org/"
-"\">Jabber.org</link>."
-
-#: C/create-account.page:71(note/p)
-msgid ""
-"If you use Google Mail or Google Talk, you already have a Jabber account. "
-"Google Talk is a Jabber service. Simply use your Google Mail address and "
-"password in <app>Empathy</app> to connect."
-msgstr ""
-"Ha a Google Mail vagy a Google Talk szolgáltatást használja, akkor már van "
-"Jabber fiókja. A Google Talk egy Jabber szolgáltatás. Google Mail címét és "
-"jelszavát használhatja az <app>Empathyban</app> a kapcsolódáshoz."
-
-#: C/create-account.page:80(section/p)
-msgid ""
-"You do not need to create an account with a service provider to use this "
-"feature. This service works whenever you are connected to a local network, "
-"such as a wireless hotspot. It automatically finds all other users on the "
-"network who are also using this service."
-msgstr ""
-"Ezen szolgáltatás használatához nem szükséges fiókot létrehoznia egy "
-"szolgáltatónál. A szolgáltatás akkor működik, amikor helyi hálózathoz, "
-"például vezeték nélküli hotspothoz kapcsolódik, és képes automatikusan "
-"megtalálni a szolgáltatás többi felhasználóját az adott hálózaton."
-
-#: C/create-account.page:85(section/p)
-msgid "For more information, see <link xref=\"salut-protocol\"/>."
-msgstr "További információkért lásd a <link xref=\"salut-protocol\"/> oldalt."
-
-#: C/create-account.page:91(section/p)
-msgid ""
-"SIP is an open system which allows users to have audio and video "
-"conversations over the Internet. You need to create an account with a SIP "
-"provider. You can communicate with all other SIP users, regardless of which "
-"SIP provider they use."
-msgstr ""
-"A SIP egy nyílt rendszer, amely lehetővé teszi felhasználóinak hang- és "
-"videohívások bonyolítását az interneten. Létre kell hoznia egy fiókot egy "
-"SIP-szolgáltatónál. Az összes SIP-felhasználóval kommunikálhat, függetlenül "
-"az általuk használt szolgáltatótól."
-
-#: C/create-account.page:97(note/p)
-msgid ""
-"Due to technical differences, the free <link href=\"https://www.ekiga.net/"
-"index.php?page=register\">Ekiga.net</link> service does not currently work "
-"with <app>Empathy</app>."
-msgstr ""
-"Technikai nehézségek miatt az ingyenes <link href=\"https://www.ekiga.net/"
-"index.php?page=register\">Ekiga.net</link> szolgáltatás jelenleg nem működik "
-"az <app>Empathyval</app>."
-
-#: C/create-account.page:102(section/p)
-msgid ""
-"Some SIP providers allow you to call normal phones from your computer. "
-"Generally, you will need to subscribe to a paid service for this feature."
-msgstr ""
-"Egyes SIP-szolgáltatók lehetővé teszik normál telefonok hívását a "
-"számítógépéről. Az ilyen szolgáltatásra általában elő kell fizetni."
-
-#: C/create-account.page:109(section/p)
-msgid ""
-"You do not need to register for an account to use IRC. Although you specify "
-"a nickname when you add an IRC account to <app>Empathy</app>, this nickname "
-"is only established each time you connect. If another user is using the "
-"nickname, you will need to choose a new nickname."
-msgstr ""
-"Az IRC használatához nem kell fiókot regisztrálni. Noha meg kell adnia egy "
-"becenevet az IRC-fiók felvételekor az <app>Empathyba</app>, ez a becenév "
-"csak az egyes csatlakozásokkor jön létre. Ha másik felhasználó használja a "
-"becenevet, akkor újat kell választania."
-
-#: C/create-account.page:114(section/p)
-msgid ""
-"Some IRC networks use a service called NickServ to allow users to protect "
-"their nicknames. See <link xref=\"irc-nick-password\"/> for more information."
-msgstr ""
-"Egyes IRC-hálózatok egy NickServ nevű szolgáltatást használnak, amely "
-"lehetővé teszi felhasználóiknak beceneveik megvédését. További "
-"információkért lásd a <link xref=\"irc-nick-password\"/> oldalt."
-
-#: C/create-account.page:117(section/p)
-msgid ""
-"Some IRC servers are password protected. You will need to know the password "
-"to connect to these servers. Generally, these are private IRC networks."
-msgstr ""
-"Egyes IRC-kiszolgálók jelszóval védettek. Az ilyen kiszolgálókhoz "
-"csatlakozáskor ismernie kell a jelszót. Ezek általában privát IRC-hálózatok."
-
-#: C/create-account.page:122(section/title)
-msgid "Proprietary Services"
-msgstr "Zárt szolgáltatások"
-
-#: C/create-account.page:124(section/p)
-msgid ""
-"There are many proprietary instant messaging services that have been "
-"developed by different companies or organizations. <app>Empathy</app> allows "
-"you to connect to an existing account for most popular services. To create a "
-"new account with one of these services, you will need to visit the service’s "
-"web site and agree to its terms of use."
-msgstr ""
-"Számos zárt azonnaliüzenő-szolgáltatást fejlesztettek különböző cégek és "
-"szervezetek. Az <app>Empathy</app> lehetővé teszi a kapcsolódást meglévő "
-"fiókjával a legnépszerűbb szolgáltatásokhoz. Új fiók létrehozásához fel kell "
-"keresnie a szolgáltató weboldalát, és el kell fogadnia a felhasználási "
-"feltételeket."
-
-#: C/create-account.page:132(item/p)
-msgid "<link href=\"http://dashboard.aim.com/aim\">AIM</link>"
-msgstr "<link href=\"http://dashboard.aim.com/aim\">AIM</link>"
-
-#: C/create-account.page:137(item/p)
-msgid "<link href=\"https://www.icq.com/register/\">ICQ</link>"
-msgstr "<link href=\"https://www.icq.com/register/\">ICQ</link>"
-
-#: C/create-account.page:142(item/p)
-msgid "<link href=\"https://accountservices.passport.net\">MSN</link>"
-msgstr "<link href=\"https://accountservices.passport.net\">MSN</link>"
-
-#: C/create-account.page:147(item/p)
-msgid "<link href=\"https://login.yahoo.com/config/login\">Yahoo!</link>"
-msgstr "<link href=\"https://login.yahoo.com/config/login\">Yahoo!</link>"
-
-#: C/disable-account.page:9(info/desc)
-msgid "Prevent <app>Empathy</app> from automatically logging in to an account."
-msgstr ""
-"A fiókba való automatikus bejelentkezés megtiltása az <app>Empathynak</app>."
-
-#: C/disable-account.page:40(page/title)
-msgid "Disable an account"
-msgstr "Fiók letiltása"
-
-#: C/disable-account.page:42(page/p)
-msgid ""
-"You can disable an account to prevent <app>Empathy</app> from logging in to "
-"it without removing the account entirely. You may wish to disable and re-"
-"enable an account if you only want to be logged in to the account at certain "
-"times, but you still want to use <app>Empathy</app> for other accounts."
-msgstr ""
-"A fiókok letilthatók, ekkor az <app>Empathy</app> nem fog bejelentkezni, de "
-"a fiók sem kerül eltávolításra. Bizonyos helyzetekben szükség lehet a fiók "
-"letiltására és újraengedélyezésére, ha csak néha szeretne bejelentkezni a "
-"fiókba, de más fiókokhoz továbbra is az <app>Empathyt</app> szeretné "
-"használni."
-
-#: C/disable-account.page:53(item/p)
-msgid ""
-"Select the account you wish to disable from the accounts list on the left "
-"side of the window."
-msgstr ""
-"Az ablak bal oldalán lévő fióklistában válassza ki a letiltani kívánt fiókot."
-
-#: C/disable-account.page:57(item/p)
-msgid "On the right side of the window, switch it off."
-msgstr "Az ablak jobb oldalán kapcsolja ki."
-
-#: C/disable-account.page:62(page/p)
-msgid "To re-enable the account, switch it on."
-msgstr "A fiók újraengedélyezéséhez kapcsolja be azt."
-
-#: C/favorite-rooms.page:10(info/desc)
-msgid "Set, join and manage favorite rooms."
-msgstr "Kedvenc szobák beállítása, kezelése és csatlakozás azokhoz."
-
-#: C/favorite-rooms.page:29(page/title)
-msgid "Favorite rooms"
-msgstr "Kedvenc szobák"
-
-#: C/favorite-rooms.page:32(section/title)
-msgid "Set a room as a favorite"
-msgstr "Szoba beállítása kedvencként"
-
-#: C/favorite-rooms.page:35(item/p)
-msgid "Join a room."
-msgstr "Csatlakozás szobához."
-
-#: C/favorite-rooms.page:40(item/p)
-msgid ""
-"See <link xref=\"irc-join-room\"/> for more information on how to join an "
-"IRC room."
-msgstr ""
-"IRC-szobához csatlakozással kapcsolatos további információkért lásd a <link "
-"xref=\"irc-join-room\"/> oldalt."
-
-#: C/favorite-rooms.page:46(item/p)
-msgid ""
-"See <link xref=\"group-conversations\"/> for more information on how to "
-"start or join a group conversation."
-msgstr ""
-"Csoportos társalgáshoz csatlakozással kapcsolatos további információkért "
-"lásd a <link xref=\"group-conversations\"/> oldalt."
-
-#: C/favorite-rooms.page:54(item/p)
-msgid ""
-"From the conversation window, choose <guiseq><gui>Conversation</"
-"gui><gui>Favorite Chat Room</gui></guiseq>."
-msgstr ""
-"A társalgás ablakban válassza a <guiseq><gui>Társalgás</gui><gui>Kedvenc "
-"csevegőszoba</gui></guiseq> menüpontot."
-
-#: C/favorite-rooms.page:63(section/title)
-msgid "Join favorite rooms"
-msgstr "Belépés kedvenc szobákba"
-
-#: C/favorite-rooms.page:66(item/p) C/send-file.page:40(item/p)
-msgid "From the <gui>Contact List</gui> window, perform one of the following:"
-msgstr "A <gui>Partnerlista</gui> ablakban hajtsa végre a következők egyikét:"
-
-#: C/favorite-rooms.page:71(item/p)
-msgid "Press <key>F5</key>."
-msgstr "Nyomja meg az <key>F5</key> billentyűt."
-
-#: C/favorite-rooms.page:76(item/p)
-msgid ""
-"Choose <guiseq><gui>Room</gui><gui>Join Favorites</gui></guiseq>, to join "
-"all your favorite rooms."
-msgstr ""
-"Válassza a <guiseq><gui>Szoba</gui><gui>Csatlakozás a kedvencekhez</gui></"
-"guiseq> menüpontot az összes kedvenc szobába való belépéshez."
-
-#: C/favorite-rooms.page:82(item/p)
-msgid "Choose <gui>Room</gui>, and select the favorite room you want to join."
-msgstr ""
-"Válassza a <gui>Szoba</gui> menüpontot, majd a kedvenc szobát, amelybe be "
-"szeretne lépni."
-
-#: C/favorite-rooms.page:90(note/p)
-msgid ""
-"To join a favorite room, you need to be connected to the Internet and to "
-"your account."
-msgstr ""
-"Kedvenc szobába való belépéshez csatlakozva kell lennie az internethez és "
-"fiókjához."
-
-#: C/favorite-rooms.page:98(section/title)
-msgid "Manage favorite rooms"
-msgstr "Kedvenc szobák kezelése"
-
-#: C/favorite-rooms.page:101(item/p)
-msgid ""
-"From the <gui>Contact List</gui> window, choose <guiseq><gui>Room</"
-"gui><gui>Manage Favorites</gui></guiseq>."
-msgstr ""
-"A <gui>Partnerlista</gui> ablakban válassza a <guiseq><gui>Szoba</"
-"gui><gui>Kedvencek kezelése</gui></guiseq> menüpontot."
-
-#: C/favorite-rooms.page:107(item/p)
-msgid ""
-"From the <gui>Account</gui> drop-down list, select the account you want to "
-"manage the favorite rooms of."
-msgstr ""
-"A <gui>Felhasználói fiók</gui> legördülő listából válassza ki azt a fiókot, "
-"amelynek kedvenc szobáit módosítani szeretné."
-
-#: C/favorite-rooms.page:111(item/p)
-msgid "Select <gui>All</gui> to see all you favorite rooms."
-msgstr ""
-"Válassza az <gui>Összes</gui> lehetőséget az összes kedvenc szoba "
-"megjelenítéséhez."
-
-#: C/favorite-rooms.page:116(item/p)
-msgid "Select the favorite room you want to manage:"
-msgstr "Válassza ki a kezelni kívánt kedvenc szobát:"
-
-#: C/favorite-rooms.page:121(item/p)
-msgid ""
-"Select the <gui>Auto-Connect</gui> check-box in order to automatically join "
-"that room when you connect to your account."
-msgstr ""
-"Jelölje be az <gui>Automatikus kapcsolódás</gui> négyzetet a szobába való "
-"automatikus belépéshez a fiókjához kapcsolódáskor."
-
-#: C/favorite-rooms.page:127(item/p)
-msgid "Click on <gui>Remove</gui> to remove the room from your favorites."
-msgstr ""
-"Kattintson az <gui>Eltávolítás</gui> gombra a szoba eltávolításához "
-"kedvencei közül."
-
-#: C/favorite-rooms.page:134(item/p)
-msgid "When done, click <gui>Close</gui>."
-msgstr "Ha befejezte, nyomja meg a <gui>Bezárás</gui> gombot."
-
-#: C/geolocation.page:8(info/desc)
-msgid "Use and understand geolocation in <app>Empathy</app>."
-msgstr "A helymeghatározás megismerése és használata az <app>Empathyban</app>."
-
-#: C/geolocation.page:32(page/title)
-msgid "Geographical position"
-msgstr "Földrajzi hely"
-
-#: C/geolocation.page:35(section/title)
-msgid "Geolocation"
-msgstr "Helymeghatározás"
-
-#: C/geolocation.page:39(section/title)
-msgid "Fix common problems"
-msgstr "Gyakori problémák javítása"
-
-#: C/geolocation-not-showing.page:8(info/desc)
-msgid "<app>Empathy</app> does not publish my geographical position."
-msgstr "Az <app>Empathy</app> nem teszi közzé a földrajzi helyet."
-
-#: C/geolocation-not-showing.page:32(page/title)
-msgid "Geographical position not published"
-msgstr "A földrajzi hely nem kerül közzétételre"
-
-#: C/geolocation-not-showing.page:34(page/p)
-msgid ""
-"If your contacts cannot see your location, <app>Empathy</app> might not be "
-"able to discover with a good margin of precision your geographical position."
-msgstr ""
-"Ha partnerei nem látják földrajzi helyét, akkor az <app>Empathy</app> lehet, "
-"hogy nem képes elégséges pontossággal meghatározni azt."
-
-#: C/geolocation-not-showing.page:38(page/p)
-msgid ""
-"In this case, your position will not be published, but you are still able to "
-"see the location of your contacts."
-msgstr ""
-"Ebben az esetben az Ön földrajzi helye nem kerül közzétételre, de partnerei "
-"helyét továbbra is látni fogja."
-
-#: C/geolocation-not-showing.page:42(page/p)
-msgid ""
-"If you want to publish your geographical position, you can try to use an "
-"external device such as a GPS."
-msgstr ""
-"Ha közzé szeretné tenni földrajzi helyét, akkor megpróbálhat külső eszközt, "
-"például GPS-t használni."
-
-#: C/geolocation-not-showing.page:48(note/p)
-msgid ""
-"In order to publish your geographical location, your Jabber server needs to "
-"support the Personal Eventing Protocal (PEP). A list of <link href=\"http://"
-"coccinella.im/servers/servers_by_pubsub_pep.html\">servers which support "
-"PEP</link> is maintained online. Google Talk does not support this feature "
-"at this time."
-msgstr ""
-"Földrajzi helyének közzétételéhez az Ön által használt Jabber kiszolgálónak "
-"támogatnia kell a PEP specifikációt. A <link href=\"http://coccinella.im/"
-"servers/servers_by_pubsub_pep.html\">PEP-et támogató kiszolgálók</link> "
-"listája online elérhető. A Google Talk jelenleg nem támogatja ezt a "
-"szolgáltatást."
-
-#: C/geolocation-privacy.page:8(info/desc)
-msgid "What information are sent and to who."
-msgstr "Milyen információk kerülnek elküldésre és kinek."
-
-#: C/geolocation-privacy.page:32(page/title)
-msgid "Geolocation Privacy"
-msgstr "Helymeghatározás és adatvédelem"
-
-#: C/geolocation-privacy.page:35(section/title)
-msgid "What information is sent"
-msgstr "Milyen információk kerülnek elküldésre"
-
-#: C/geolocation-privacy.page:36(section/p)
-msgid ""
-"What is possible to send is: your country, region, locality, area, street, "
-"building, floor, room, and postal code, longitude, latitude and altitude, "
-"speed and bearing."
-msgstr ""
-"A következők elküldése lehetséges: ország, régió, helység, terület, utca, "
-"épület, emelet, szoba, irányítószám, hosszúság, szélesség, magasság, "
-"sebesség és irány."
-
-#: C/geolocation-privacy.page:40(section/p)
-msgid ""
-"The accuracy and the quantity of information about your geographical "
-"position are based on the software or on the infrastructure used to discover "
-"your position."
-msgstr ""
-"A földrajzi helyével kapcsolatos információk pontossága és mennyisége a "
-"szoftveren, vagy a helymeghatározásra használt infrastruktúrán alapul."
-
-#: C/geolocation-privacy.page:44(section/p)
-msgid ""
-"Different kind of networks may have different accuracy settings, and may "
-"send different information. The use of external devices such as GPS or "
-"mobile phone will increase the accuracy of the information sent."
-msgstr ""
-"A különböző hálózatok különböző pontossági beállításokkal rendelkezhetnek, "
-"és különböző információkat küldhetnek. A külső eszközök, például GPS vagy "
-"mobiltelefonok használata növeli az elküldött információk pontosságát."
-
-#: C/geolocation-privacy.page:49(section/p)
-msgid ""
-"When the privacy mode is enabled, nothing more precise than your city will "
-"be sent, even if you are using an external device."
-msgstr ""
-"Az adatvédelmi módot bekapcsolva a városnál pontosabb információ nem kerül "
-"elküldésre, még ha külső eszközt is használ."
-
-#: C/geolocation-privacy.page:56(section/title)
-msgid "Who can see the information sent"
-msgstr "Ki láthatja az elküldött információkat"
-
-#: C/geolocation-privacy.page:57(section/p)
-msgid "Only your contacts can see your geographical position."
-msgstr "Csak partnerei láthatják az Ön földrajzi helyzetét."
-
-#: C/geolocation-privacy.page:63(section/title)
-msgid "What is the privacy mode"
-msgstr "Mi az adatvédelmi mód"
-
-#: C/geolocation-privacy.page:64(section/p)
-msgid ""
-"The privacy mode, enabled by default, is a reduced accuracy mode that will "
-"decrease the accuracy of the geographical position sent to your contacts."
-msgstr ""
-"Az alapértelmezésben engedélyezett adatvédelmi mód egy csökkentett "
-"pontosságú mód, amely csökkenti a partnereinek küldött földrajzi hely "
-"pontosságát."
-
-#: C/geolocation-privacy.page:71(section/title)
-msgid "Privacy overview"
-msgstr "Adatvédelem áttekintése"
-
-#: C/geolocation-privacy.page:72(section/p)
-msgid ""
-"Overview of the various geolocation privacy settings in <app>Empathy</app>."
-msgstr ""
-"Az <app>Empathy</app> helymeghatározással kapcsolatos adatvédelmi "
-"beállításainak áttekintése."
-
-#: C/geolocation-privacy.page:77(item/p)
-msgid "Geolocation is not enabled by default."
-msgstr "A helymeghatározás alapértelmezésben nincs bekapcsolva."
-
-#: C/geolocation-privacy.page:82(item/p)
-msgid "Privacy mode is enabled by default."
-msgstr "Az adatvédelmi mód alapértelmezésben be van kapcsolva."
-
-#: C/geolocation-privacy.page:87(item/p)
-msgid ""
-"Privacy mode prevails even when using external and more precise devices."
-msgstr ""
-"Az adatvédelmi mód külső és pontosabb eszközök használata esetén is "
-"bekapcsolva marad."
-
-#: C/geolocation-privacy.page:92(item/p)
-msgid "Only your contacts can see your position."
-msgstr "Csak partnerei láthatják földrajzi helyét."
-
-#: C/geolocation-supported.page:7(info/desc)
-msgid "Services that supports geolocation and compatibility."
-msgstr "A helymeghatározást támogató szolgáltatások és kompatibilitás."
-
-#: C/geolocation-supported.page:31(page/title)
-msgid "Supported services"
-msgstr "Támogatott szolgáltatások"
-
-#: C/geolocation-supported.page:33(page/p)
-msgid ""
-"The geolocation feature at the moment is compatible only with the Jabber "
-"service. In order to use it, you and your contacts need to have a Jabber "
-"account."
-msgstr ""
-"Jelenleg a helymeghatározási szolgáltatás csak a Jabber szolgáltatással "
-"kompatibilis. Használatához Önnek és partnereinek is Jabber fiókot kell "
-"használniuk."
-
-#: C/geolocation-supported.page:39(note/p)
-msgid ""
-"It is necessary that also the server you are using supports the geolocation "
-"feature. Most of the Jabber servers support it. See your service website "
-"documentation for more information."
-msgstr ""
-"Az Ön által használt kiszolgálónak is támogatnia kell a helymeghatározási "
-"szolgáltatást. A legtöbb Jabber kiszolgáló támogatja. További információkért "
-"nézze meg a szolgáltatás webhelyének dokumentációját."
-
-#: C/geolocation-supported.page:47(section/title)
-msgid "Compatibility"
-msgstr "Kompatibilitás"
-
-#: C/geolocation-supported.page:49(section/p)
-msgid ""
-"<app>Empathy</app> geolocation feature is not compatible with other "
-"geographical position services such as <em>Google Latitude</em>, <em>Yahoo "
-"Fire Eagle</em> or <em>Brightkite</em>."
-msgstr ""
-"Az <app>Empathy</app> helymeghatározási szolgáltatása nem kompatibilis más "
-"helymeghatározási szolgáltatásokkal, mint például a <em>Google Latitude</"
-"em>, <em>Yahoo Fire Eagle</em> vagy <em>Brightkite</em>."
-
-#: C/geolocation-turn.page:9(info/desc)
-msgid "How to activate and deactivate geolocation in <app>Empathy</app>."
-msgstr "Helymeghatározás be- és kikapcsolása <app>Empathyban</app>."
-
-#: C/geolocation-turn.page:33(page/title)
-msgid "Activate/Deactivate geolocation"
-msgstr "Helymeghatározás be- és kikapcsolása"
-
-#: C/geolocation-turn.page:37(item/p)
-msgid "Choose <guiseq><gui>Edit</gui><gui>Preferences</gui></guiseq>."
-msgstr ""
-"Válassza a <guiseq><gui>Szerkesztés</gui><gui>Beállítások</gui></guiseq> "
-"menüpontot."
-
-#: C/geolocation-turn.page:42(item/p)
-msgid "Select the <gui>Location</gui> tab."
-msgstr "Válassza a <gui>Hely</gui> lapot."
-
-#: C/geolocation-turn.page:47(item/p)
-msgid ""
-"Select <gui>Publish location to my contacts</gui> to activate geolocation."
-msgstr ""
-"Jelölje be a <gui>Hely közzététele a partnereimnek</gui> négyzetet a "
-"helymeghatározás aktiválásához."
-
-#: C/geolocation-turn.page:50(item/p)
-msgid "To deactivate geolocation, deselect it."
-msgstr "A helymeghatározás kikapcsolásához törölje a négyzetet."
-
-#: C/geolocation-turn.page:55(item/p)
-msgid ""
-"To increase the accuracy of your position, deselect <gui>Reduce location "
-"accuracy</gui>."
-msgstr ""
-"A földrajzi hely pontosságának növeléséhez törölje a <gui>Hely pontosságának "
-"csökkentése</gui> négyzetet."
-
-#: C/geolocation-turn.page:61(item/p)
-msgid ""
-"If you have an external device like a GPS or want to send a more accurate "
-"position, select the appropriate option in the <gui>Location sources</gui> "
-"section."
-msgstr ""
-"Ha rendelkezik külső eszközzel, például GPS-szel, vagy pontosabb helyet "
-"szeretne küldeni, akkor válassza ki a megfelelő lehetőséget a "
-"<gui>Helyforrások</gui> szakaszban."
-
-#: C/geolocation-what-is.page:9(info/desc)
-msgid "Understanding geolocation."
-msgstr "A helymeghatározás bemutatása."
-
-#: C/geolocation-what-is.page:33(page/title)
-msgid "What is geolocation"
-msgstr "Mi az a helymeghatározás"
-
-#: C/geolocation-what-is.page:35(page/p)
-msgid ""
-"Geolocation allows you to identify the real geographical location of a "
-"computer or a device connected to the Internet."
-msgstr ""
-"A helymeghatározás lehetővé teszi egy internetre csatlakozó számítógép vagy "
-"eszköz valódi földrajzi helyét."
-
-#: C/geolocation-what-is.page:37(page/p)
-msgid "With geolocation in <app>Empathy</app> you can:"
-msgstr "Az <app>Empathy</app> helymeghatározása segítségével:"
-
-#: C/geolocation-what-is.page:42(item/p)
-msgid "Publish your geographical location to your contacts."
-msgstr "Közzéteheti földrajzi helyét partnerei számára."
-
-#: C/geolocation-what-is.page:47(item/p)
-msgid "See your contacts’ geographical location and quickly contact them."
-msgstr "Láthatja partnerei földrajzi helyét."
-
-#: C/geolocation-what-is.page:52(item/p)
-msgid ""
-"Set the accuracy of your location and the device used to discover your "
-"location."
-msgstr ""
-"Beállíthatja a földrajzi hely és a hely meghatározására használt eszköz "
-"pontosságát."
-
-#: C/geolocation-what-is.page:60(note/p)
-msgid ""
-"In order to see your contacts’ geographical locations, they need to use a "
-"service and an application that supports geolocation."
-msgstr ""
-"A partnerei földrajzi helyének megjelenítéséhez partnereinek "
-"helymeghatározást támogató szolgáltatást és alkalmazást kell használniuk."
-
-#: C/group-conversations.page:8(info/desc)
-msgid "Start or join a group conversation with your contacts."
-msgstr "Csoportos társalgás indítása partnereivel, vagy csatlakozás egyhez"
-
-#: C/group-conversations.page:34(page/title)
-msgid "Group conversations"
-msgstr "Csoportos társalgások"
-
-#: C/group-conversations.page:36(page/p)
-msgid ""
-"Group conversations permits you to have text conversations with more than "
-"one contact at the same time."
-msgstr ""
-"A csoportos társalgások lehetővé teszik a szöveges társalgást egyszerre több "
-"partnerrel."
-
-#: C/group-conversations.page:40(page/p)
-msgid ""
-"To have a group conversation you need to have a registered account with "
-"either Jabber or Google Talk, or a People Nearby account."
-msgstr ""
-"Csoportos társalgáshoz regisztrált Jabber, Google Talk vagy Közeli emberek "
-"fiókkal kell rendelkeznie."
-
-#: C/group-conversations.page:46(note/p)
-msgid ""
-"You can have a group conversation only with the contacts that are using the "
-"same service as yours."
-msgstr ""
-"Csak az Ön által is használt szolgáltatást használó partnerekkel folytathat "
-"csoportos társalgást."
-
-#: C/group-conversations.page:54(section/title)
-msgid "Start a group conversation"
-msgstr "Csoportos társalgás indítása"
-
-#: C/group-conversations.page:58(item/p)
-#: C/group-conversations.page:122(item/p) C/irc-join-room.page:39(item/p)
-msgid ""
-"From the <gui>Contact List</gui> window, choose <guiseq><gui>Room</"
-"gui><gui>Join</gui></guiseq>."
-msgstr ""
-"A <gui>Partnerlista</gui> ablakban válassza a <guiseq><gui>Szoba</"
-"gui><gui>Csatlakozás</gui></guiseq> menüpontot."
-
-#: C/group-conversations.page:63(item/p)
-msgid ""
-"From the <gui>Account</gui> drop-down list, select the account you want to "
-"use for the group conversation."
-msgstr ""
-"A <gui>Felhasználói fiók</gui> legördülő listában válassza ki a csoportos "
-"társalgáshoz használandó fiókot."
-
-#: C/group-conversations.page:69(item/p)
-msgid ""
-"In the <gui>Server</gui> text box, type the name of server in which the "
-"conversation will be hosted."
-msgstr ""
-"A <gui>Kiszolgáló</gui> szövegmezőbe írja be a kiszolgáló nevét, amelyen a "
-"társalgás helyet kap."
-
-#: C/group-conversations.page:73(item/p)
-msgid "Leave it empty if it will be on the current server."
-msgstr "Üresen hagyva az aktuális kiszolgáló lesz használatban."
-
-#: C/group-conversations.page:78(item/p)
-msgid ""
-"In the <gui>Room</gui> text box, type the name you want to give to the "
-"conversation."
-msgstr "A <gui>Szoba</gui> szövegmezőbe írja be a társalgásnak adandó nevet."
-
-#: C/group-conversations.page:82(note/p)
-msgid ""
-"This will be the name of the room you are going to have a conversation. This "
-"name will be publicly available for other people to join. It is not possible "
-"to create a private room."
-msgstr ""
-"Ez a szoba neve lesz, amelyben a társalgás folyni fog. Ez a név nyilvánosan "
-"elérhető lesz mások számára, és szabadon csatlakozhatnak. Privát szoba "
-"létrehozása nem lehetséges."
-
-#: C/group-conversations.page:90(item/p)
-msgid ""
-"To invite other contacts to join the group conversation, from the "
-"<gui>Contact List</gui> window, select the contact you want to invite, and "
-"perform one of the following:"
-msgstr ""
-"A <gui>Partnerlista</gui> ablakban válassza ki a meghívni kívánt partnert "
-"más partnerek meghívásához a csoportos társalgásba, és tegye a következők "
-"egyikét:"
-
-#: C/group-conversations.page:97(item/p)
-msgid "Right-click on the contact and choose <gui>Invite to chatroom</gui>."
-msgstr ""
-"Kattintson a jobb egérgombbal a partnerre, és válassza a <gui>Meghívás "
-"csevegőszobába</gui> menüpontot."
-
-#: C/group-conversations.page:102(item/p)
-msgid ""
-"Choose <guiseq><gui>Edit</gui><gui>Contact</gui><gui>Invite to chatroom</"
-"gui></guiseq>."
-msgstr ""
-"Válassza a <guiseq><gui>Szerkesztés</gui><gui>Partner</gui><gui>Meghívás "
-"csevegőszobába</gui></guiseq> menüpontot."
-
-#: C/group-conversations.page:107(item/p)
-msgid ""
-"If you have more than one group conversation open, select the one you want "
-"to invite your contacts."
-msgstr ""
-"Ha több csoportos társalgás is meg van nyitva, akkor válassza ki azt, "
-"amelyikbe meg szeretné hívni partnereit."
-
-#: C/group-conversations.page:118(section/title)
-msgid "Join a group conversation"
-msgstr "Csatlakozás csoportos társalgáshoz"
-
-#: C/group-conversations.page:128(item/p)
-msgid "Expand the <gui>Room List</gui> section to see all the existing rooms."
-msgstr ""
-"Nyissa ki a <gui>Szobalista</gui> fejezetet az összes létező szoba "
-"megjelenítéséhez."
-
-#: C/group-conversations.page:133(item/p)
-msgid "Double-click on the name of a room to join it."
-msgstr "Kattintson duplán a szoba nevére a belépéshez."
-
-#: C/group-conversations.page:139(section/p)
-msgid ""
-"It is not possible to join all existing rooms. Some of the rooms might "
-"require a password, or might be invitation only. <app>Empathy</app> does not "
-"support these kind of rooms."
-msgstr ""
-"Nem feltétlenül lehet minden létező szobába belépni. Egyes szobák jelszót "
-"kérhetnek, vagy csak meghívással lehetnek láthatók. Az <app>Empathy</app> "
-"nem támogatja az ilyen szobákat."
-
-#: C/hide-contacts.page:8(info/desc)
-msgid "Hide the offline contacts from your <gui>Contact List</gui>."
-msgstr "A kilépett partnerek elrejtése a <gui>Partnerlistáról</gui>."
-
-#: C/hide-contacts.page:19(page/title)
-msgid "Hide offline contacts"
-msgstr "Kilépett partnerek elrejtése"
-
-#: C/hide-contacts.page:21(page/p)
-msgid ""
-"Normally, <app>Empathy</app> shows all your contacts: those that are online, "
-"with which you can have a conversation, and also those that are offline."
-msgstr ""
-"Általában az <app>Empathy</app> megjeleníti az összes partnert: az "
-"elérhetőket, akikkel társalgást kezdhet, és a kilépetteket is."
-
-#: C/hide-contacts.page:25(page/p)
-msgid "To hide the contacts that are offline:"
-msgstr "A kilépett partnerek elrejtése:"
-
-#: C/hide-contacts.page:31(item/p)
-msgid ""
-"From the <gui>Contact List</gui> window, choose <guiseq><gui>View</gui> "
-"<gui>Offline Contacts</gui></guiseq>, or press <keyseq><key>Ctrl</key> "
-"<key>H</key></keyseq>."
-msgstr ""
-"A <gui>Partnerlista</gui> ablakban válassza a <guiseq><gui>Nézet</"
-"gui><gui>Kilépett partnerek</gui></guiseq> menüpontot, vagy nyomja meg a "
-"<keyseq><key>Ctrl</key><key>H</key></keyseq> billentyűkombinációt."
-
-#: C/hide-contacts.page:36(item/p)
-msgid "To show the offline contacts again, repeat the same procedure above."
-msgstr ""
-"A kilépett partnerek ismételt megjelenítéséhez ismételje meg a fenti "
-"eljárást."
-
-#: C/import-account.page:10(info/desc)
-msgid "Import an account from another instant messaging application."
-msgstr "Felhasználói fiók importálása másik azonnaliüzenő alkalmazásból."
-
-#: C/import-account.page:19(credit/name)
-msgid "Peter Haslam"
-msgstr "Peter Haslam"
-
-#: C/import-account.page:42(page/title)
-msgid "Import an existing account"
-msgstr "Meglévő fiók importálása"
-
-#: C/import-account.page:44(page/p)
-msgid ""
-"The first time you run <app>Empathy</app>, it will offer to import your "
-"accounts from other instant messaging applications. Currently, the only "
-"supported application is <app>Pidgin</app>."
-msgstr ""
-"Az <app>Empathy</app> első futtatásakor felajánlja felhasználói fiókjainak "
-"importálását más azonnaliüzenő alkalmazásokból. Jelenleg az egyetlen "
-"támogatott ilyen alkalmazás a <app>Pidgin</app>."
-
-#: C/import-account.page:50(item/p)
-msgid ""
-"Run <app>Empathy</app> for the first time. An assistant will offer you a "
-"number of options to create new accounts."
-msgstr ""
-"Az <app>Empathy</app> első futtatásakor egy asszisztens számos lehetőséget "
-"kínál fel új felhasználói fiókok létrehozásához."
-
-#: C/import-account.page:54(item/p)
-msgid ""
-"Select <gui>Yes, import my account details from</gui> and click "
-"<gui>Forward</gui>."
-msgstr ""
-"Válassza az <gui>Igen, fiókadatok importálása ebből:</gui> lehetőséget, és "
-"nyomja meg a <gui>Tovább</gui> gombot."
-
-#: C/import-account.page:58(item/p)
-msgid "Select the check box next to each account you wish to import."
-msgstr ""
-"Válassza ki az egyes importálni kívánt fiókok melletti jelölőnégyzeteket."
-
-#: C/import-account.page:66(note/p)
-msgid ""
-"It is not currently possible to import accounts after you have completed the "
-"first-run assistant."
-msgstr ""
-"Jelenleg nincs lehetőség fiókok importálására az első futtatáskor megjelenő "
-"asszisztens bezárása után."
-
-#. This is a reference to an external file such as an image or video. When
-#. the file changes, the md5 hash will change to let you know you need to
-#. update your localized copy. The msgstr is not used at all. Set it to
-#. whatever you like once you have updated your copy of the file.
-#: C/introduction.page:41(media)
-msgctxt "_"
-msgid ""
-"external ref='figures/empathy-main-window.png' "
-"md5='54908dcb2588beddb15ef0968d2c2582'"
-msgstr ""
-"external ref='figures/empathy-main-window.png' "
-"md5='54908dcb2588beddb15ef0968d2c2582'"
-
-#: C/introduction.page:9(info/desc)
-msgid "Introduction to the <app>Empathy</app> instant messenger."
-msgstr "Az <app>Empathy</app> üzenetküldő bemutatása."
-
-#: C/introduction.page:21(page/title)
-msgid "Introduction"
-msgstr "Bevezetés"
-
-#: C/introduction.page:23(page/p)
-msgid ""
-"<app>Empathy</app> is an instant messaging application for the GNOME "
-"Desktop. It supports text messaging, voice &amp; video calls, file "
-"transfers, and all the most used messaging systems such as MSN and Google "
-"Talk."
-msgstr ""
-"Az <app>Empathy</app> egy üzenetküldő alkalmazás a GNOME asztali "
-"környezethez. Támogatja a szöveges üzenetküldést, hang- és videohívásokat, "
-"fájlátvitelt és a legtöbbet használt üzenetküldő rendszereket, mint az MSN "
-"és a Google Talk."
-
-#: C/introduction.page:28(page/p)
-msgid ""
-"<app>Empathy</app> includes features that help you better collaborate while "
-"at work, and that let you easily keep in touch with your friends."
-msgstr ""
-"Az <app>Empathy</app> szolgáltatásai segítik a jobb együttműködést "
-"munkahelyén, és lehetővé teszik a kapcsolattartást barátaival."
-
-#: C/introduction.page:32(page/p)
-msgid ""
-"Using <app>Empathy</app>, you can group all the conversations in a single "
-"window, have multiple windows for different kind of conversations, easily "
-"search through your previous conversations, and share your desktop in just "
-"two clicks."
-msgstr ""
-"Az <app>Empathy</app> segítségével összes társalgását egyetlen ablakba "
-"csoportosíthatja, több ablakban tarthatja a különböző társalgásokat, "
-"egyszerűen kereshet a korábbi társalgásokban, és két kattintással "
-"megoszthatja asztalát."
-
-#: C/introduction.page:39(figure/title)
-msgid "<gui>Contact List</gui> window"
-msgstr "<gui>Partnerlista</gui> ablak"
-
-#: C/introduction.page:40(figure/desc)
-msgid "<app>Empathy</app> main window"
-msgstr "Az <app>Empathy</app> főablaka"
-
-#: C/introduction.page:42(media/p)
-msgid "<app>Empathy</app> main window."
-msgstr "Az <app>Empathy</app> főablaka."
-
-#: C/irc-commands.page:7(info/desc)
-msgid "The supported IRC commands."
-msgstr "A támogatott IRC-parancsok."
-
-#: C/irc-commands.page:18(page/title)
-msgid "Supported IRC commands"
-msgstr "Támogatott IRC-parancsok"
-
-#: C/irc-commands.page:19(page/p)
-msgid ""
-"To see the list of the supported IRC commands, in a chat room type <input>/"
-"help</input> and press <key>Enter</key>."
-msgstr ""
-"A támogatott IRC-parancsok listájának megjelenítéséhez a csevegőszobában "
-"írja be a <input>/help</input> utasítást, és nyomja meg az <key>Enter</key> "
-"billentyűt."
-
-#: C/irc-commands.page:24(note/p)
-msgid "All commands available have a small description on their usage."
-msgstr "Minden elérhető parancshoz tartozik egy rövid használati utasítás."
-
-#: C/irc-join-pwd.page:9(info/desc)
-msgid "Enter password-protected IRC chat rooms."
-msgstr "Belépés jelszóval védett IRC-csevegőszobákba."
-
-#: C/irc-join-pwd.page:25(page/title)
-msgid "Join a protected IRC chat room"
-msgstr "Csatlakozás védett IRC-csevegőszobához"
-
-#: C/irc-join-pwd.page:27(page/p)
-msgid ""
-"On some IRC networks, private IRC rooms may be protected with a password. If "
-"you know the password, use the following steps to join:"
-msgstr ""
-"Egyes IRC-hálózatokon a privát IRC-szobák jelszóval védettek lehetnek. Ha "
-"ismeri a jelszót, akkor tegye a következőket a csatlakozáshoz:"
-
-#: C/irc-join-pwd.page:33(item/p)
-msgid "<link xref=\"irc-join-room\">Join the room</link> as normal."
-msgstr ""
-"<link xref=\"irc-join-room\">Csatlakozzon a szobához</link> a szokásos módon."
-
-#: C/irc-join-pwd.page:38(item/p)
-msgid ""
-"Empathy will prompt you for a password. Enter the password for the IRC chat "
-"room and click <gui style=\"button\">Join</gui>."
-msgstr ""
-"Az Empathy bekéri a jelszót. Adja meg az IRC-csevegőszoba jelszavát, és "
-"nyomja meg a <gui style=\"button\">Csatlakozás</gui> gombot."
-
-#: C/irc-join-room.page:8(info/desc)
-msgid "Join an IRC channel."
-msgstr "Csatlakozás IRC-csatornához."
-
-#: C/irc-join-room.page:31(page/title)
-msgid "Join an IRC chat room"
-msgstr "Csatlakozás IRC-csevegőszobához"
-
-#: C/irc-join-room.page:33(page/p)
-msgid ""
-"You can join IRC chat rooms (also known as IRC channels) on any IRC network "
-"you’re connected to. To connect to an IRC network, see <link xref=\"add-"
-"account\"/> and <link xref=\"account-irc\"/>."
-msgstr ""
-"Az IRC-csevegőszobákba (IRC-csatornákra) bármely IRC-hálózaton beléphet, "
-"amelyhez csatlakozva van. Az IRC-hálózatokhoz való csatlakozással "
-"kapcsolatban lásd az <link xref=\"add-account\"/> és <link xref=\"account-irc"
-"\"/> témákat."
-
-#: C/irc-join-room.page:45(item/p)
-msgid ""
-"From the <gui>Account</gui> drop-down list, select the IRC account that "
-"corresponds to the network you want to use."
-msgstr ""
-"A <gui>Felhasználói fiók</gui> legördülő listában válassza ki a használni "
-"kívánt hálózatnak megfelelő IRC-fiókot."
-
-#: C/irc-join-room.page:51(item/p)
-msgid ""
-"In the <gui>Room</gui> text box, type the name of the channel you want to "
-"join. IRC channel names start with the hash character (<sys>#</sys>)."
-msgstr ""
-"A <gui>Szoba</gui> szövegmezőbe írja be a csatorna nevét, amelyhez "
-"csatlakozni kíván. Az IRC-csatornák neve a kettős kereszt karakterrel "
-"(<sys>#</sys>) kezdődik."
-
-#: C/irc-join-room.page:57(item/p)
-msgid "Click <gui>Join</gui> to enter the room."
-msgstr "Nyomja meg a <gui>Csatlakozás</gui> gombot a szobába való belépéshez."
-
-#: C/irc-join-room.page:64(note/p)
-msgid ""
-"To join multiple rooms, you need to repeat the steps above for each room."
-msgstr ""
-"Több szobához is csatlakozhat, minden szobához megismételve a fenti "
-"lépéseket."
-
-#: C/irc-manage.page:9(info/desc)
-msgid "How to use IRC with <app>Empathy</app>."
-msgstr "IRC használata az <app>Empathyval</app>."
-
-#: C/irc-manage.page:23(credit/name)
-msgid "Sindhu S"
-msgstr "Sindhu S"
-
-#: C/irc-manage.page:39(page/title)
-msgid "Internet Relay Chat (IRC)"
-msgstr "Interneten továbbított csevegés (IRC)"
-
-#: C/irc-manage.page:47(when/p)
-#| msgid ""
-#| "<link action=\"install:telepathy-idle\" xref=\"index\" style=\"button"
-#| "\">Install telepathy-idle</link>"
-msgid ""
-"<link action=\"install:telepathy-idle\" xref=\"index\"> Install telepathy-"
-"idle</link>"
-msgstr ""
-"<link action=\"install:telepathy-idle\" xref=\"index\">A telepathy-idle "
-"telepítése</link>"
-
-#: C/irc-manage.page:55(info/title)
-msgctxt "link"
-msgid "IRC Chat Rooms and Conversations"
-msgstr "IRC-csevegőszobák és társalgások"
-
-#: C/irc-manage.page:57(section/title)
-msgid "Chat Rooms and Conversations"
-msgstr "Csevegőszobák és társalgások"
-
-#: C/irc-manage.page:62(info/title)
-msgctxt "link"
-msgid "Common IRC Problems"
-msgstr "Gyakori IRC-problémák"
-
-#: C/irc-nick-password.page:10(info/desc)
-msgid "Protect your nickname to prevent other IRC users from using it."
-msgstr "Védje meg becenevét, hogy más IRC-felhasználók ne használhassák azt."
-
-#: C/irc-nick-password.page:33(page/title)
-msgid "Use a nickname password on IRC"
-msgstr "Jelszó használata IRC becenévhez"
-
-#: C/irc-nick-password.page:35(page/p)
-msgid ""
-"On some IRC networks, you can register your nickname with a service called "
-"NickServ. By sending special messages to NickServ, you can set your password "
-"and identify yourself. Some IRC chat rooms may not allow you to join without "
-"a registered nickname."
-msgstr ""
-"Egyes IRC-hálózatokon lehetősége van becenevének regisztrálására a NickServ "
-"nevű szolgáltatásnál. A NickServnek küldött speciális üzenetekkel "
-"beállíthatja jelszavát, és azonosíthatja magát. Egyes IRC-csevegőszobák nem "
-"engedik belépni regisztrált becenév nélkül."
-
-#: C/irc-nick-password.page:40(page/p)
-msgid ""
-"<app>Empathy</app> does not currently support nickname registration. Some "
-"IRC networks, however, will automatically forward a <em>server password</em> "
-"to NickServ. On these networks, you can use the IRC password in "
-"<app>Empathy</app> to identify yourself to NickServ. The popular freenode "
-"network is known to have this feature."
-msgstr ""
-"Az <app>Empathy</app> jelenleg nem támogatja a becenév regisztrálását. Egyes "
-"IRC-hálózatok azonban automatikusan továbbítanak egy <em>kiszolgálójelszót</"
-"em> a NickServnek. Ezeken a hálózatokon az IRC-jelszavát az <app>Empathy</"
-"app> segítségével használhatja azonosításra a NickServ felé. A népszerű "
-"FreeNode hálózat rendelkezik ezzel a szolgáltatással."
-
-#: C/irc-nick-password.page:46(page/p)
-msgid "To set an IRC server password:"
-msgstr "IRC-kiszolgálójelszó beállítása:"
-
-#: C/irc-nick-password.page:54(item/p)
-msgid "Select the IRC account from the list on the left of the dialog."
-msgstr "Válassza ki az IRC-fiókot az ablak bal oldalán lévő listából."
-
-#: C/irc-nick-password.page:57(item/p)
-msgid ""
-"In the <gui>Password</gui> field, type the password you used to register "
-"your nikcname."
-msgstr ""
-"A <gui>Jelszó</gui> mezőben írja be a beceneve regisztrálásához használt "
-"jelszót."
-
-#: C/irc-nick-password.page:69(note/p)
-msgid ""
-"These instructions only allow you to use a password-protected nickname on "
-"certain IRC networks. It is not currently possible to register an IRC "
-"nickname or change your nickname password using <app>Empathy</app>."
-msgstr ""
-"Ezek az utasítások csak bizonyos IRC-hálózatokon teszik lehetővé jelszóval "
-"védett becenév használatát. Jelenleg az <app>Empathy</app> használatával nem "
-"lehet IRC-becenevet regisztrálni, vagy a becenév jelszavát módosítani."
-
-#: C/irc-send-file.page:9(info/desc)
-msgid "<app>Empathy</app> does not currently support sending files using IRC."
-msgstr ""
-"Az <app>Empathy</app> jelenleg nem támogatja a fájlküldést IRC használatával."
-
-#: C/irc-send-file.page:31(page/title)
-msgid "Send files over IRC"
-msgstr "Fájlok küldése IRC használatával."
-
-#: C/irc-send-file.page:33(page/p)
-msgid "It is not currently possible to send files using IRC."
-msgstr "Jelenleg nem lehetséges a fájlok küldése IRC használatával."
-
-#: C/irc-start-conversation.page:8(info/desc)
-msgid "Start a conversation with an IRC contact."
-msgstr "Társalgás kezdése IRC-partnerrel."
-
-#: C/irc-start-conversation.page:30(page/title)
-msgid "Chat with somebody on IRC"
-msgstr "Csevegjen IRC-n"
-
-#: C/irc-start-conversation.page:32(page/p)
-msgid ""
-"You can hold private conversations with other IRC users, outside of the "
-"public IRC chat rooms. To start a conversation with another IRC user:"
-msgstr ""
-"Személyes társalgást folytathat más IRC-felhasználókkal a nyilvános IRC-"
-"csevegőszobákon kívül. Társalgás kezdeményezéséhez egy másik IRC-"
-"felhasználóval:"
-
-#: C/irc-start-conversation.page:37(item/p)
-msgid ""
-"In the contact list for an IRC chat room, double click the name of the user "
-"you want to chat with. Alternatively, right click the name of the user and "
-"choose <gui>Chat</gui>."
-msgstr ""
-"Egy IRC-csevegőszoba partnerlistájában kattintson duplán a felhasználó "
-"nevére, akivel csevegni szeretne. Ezen kívül rákattinthat a jobb egérgombbal "
-"is a felhasználó nevére, és kiválaszthatja a <gui>Csevegés</gui> menüpontot."
-
-#: C/irc-start-conversation.page:45(item/p)
-msgid ""
-"The IRC room contact list is not the same as <app>Empathy</app> contact "
-"list. It contains a list of users in the IRC chat room you joined. Different "
-"rooms can have different contacts listed."
-msgstr ""
-"Az IRC-szoba partnerlistája nem azonos az <app>Empathy</app> "
-"partnerlistájával. Ez az adott IRC-szoba felhasználóinak listáját "
-"tartalmazza. A különböző szobákban különböző partnerek vannak felsorolva."
-
-#: C/irc-start-conversation.page:52(item/p)
-msgid ""
-"The IRC room contact list is usually on the right side of the IRC room "
-"window. If you do not see it, choose <guiseq><gui>Conversation</"
-"gui><gui>Show Contact List</gui></guiseq>."
-msgstr ""
-"Az IRC-szoba partnerlistája általában az IRC-szoba ablakának jobb oldalán "
-"van. Ha nem látja, akkor válassza a <guiseq><gui>Társalgás</"
-"gui><gui>Partnerlista megjelenítése</gui></guiseq> menüpontot."
-
-#: C/license.page:8(info/desc)
-msgid "Legal information."
-msgstr "Jogi információk."
-
-#: C/license.page:11(page/title)
-msgid "License"
-msgstr "Licenc"
-
-#: C/license.page:12(page/p)
-msgid ""
-"This work is distributed under a CreativeCommons Attribution-Share Alike 3.0 "
-"Unported license."
-msgstr ""
-"Ez a mű a CreativeCommons Attribution-Share Alike 3.0 Unported licenc "
-"feltételei szerint terjeszthető."
-
-#: C/license.page:20(page/p)
-msgid "You are free:"
-msgstr "Jogodban áll:"
-
-#: C/license.page:25(item/title)
-msgid "<em>To share</em>"
-msgstr "<em>Megosztani</em>"
-
-#: C/license.page:26(item/p)
-msgid "To copy, distribute and transmit the work."
-msgstr "Másolni, terjeszteni és továbbítani a művet."
-
-#: C/license.page:29(item/title)
-msgid "<em>To remix</em>"
-msgstr "<em>Feldolgozni</em>"
-
-#: C/license.page:30(item/p)
-msgid "To adapt the work."
-msgstr "Módosítani a művet."
-
-#: C/license.page:33(page/p)
-msgid "Under the following conditions:"
-msgstr "A következő feltételek szerint:"
-
-#: C/license.page:38(item/title)
-msgid "<em>Attribution</em>"
-msgstr "<em>Nevezd meg!</em>"
-
-#: C/license.page:39(item/p)
-msgid ""
-"You must attribute the work in the manner specified by the author or "
-"licensor (but not in any way that suggests that they endorse you or your use "
-"of the work)."
-msgstr ""
-"A szerző vagy a jogosult által meghatározott módon fel kell tüntetned a "
-"műhöz kapcsolódó információkat (pl. a szerző nevét vagy álnevét, a Mű címét)."
-
-#: C/license.page:46(item/title)
-msgid "<em>Share Alike</em>"
-msgstr "<em>Így add tovább!</em>"
-
-#: C/license.page:47(item/p)
-msgid ""
-"If you alter, transform, or build upon this work, you may distribute the "
-"resulting work only under the same, similar or a compatible license."
-msgstr ""
-"Ha megváltoztatod, átalakítod, feldolgozod ezt a művet, az így létrejött "
-"alkotást csak a jelenlegivel megegyező licenc alatt terjesztheted."
-
-#: C/license.page:53(page/p)
-msgid ""
-"For the full text of the license, see the <link href=\"http://"
-"creativecommons.org/licenses/by-sa/3.0/legalcode\">CreativeCommons website</"
-"link>, or read the full <link href=\"http://creativecommons.org/licenses/by-"
-"sa/3.0/\">Commons Deed</link>."
-msgstr ""
-"A licenc teljes szövegéért lásd a <link href=\"http://creativecommons.org/"
-"licenses/by-sa/3.0/legalcode\">CreativeCommons weboldalát</link>, vagy a "
-"teljes <link href=\"http://creativecommons.org/licenses/by-sa/3.0/\">Commons "
-"összefoglalót</link>."
-
-#: C/link-contacts.page:11(info/desc)
-msgid "Merge and separate different contacts into a single one."
-msgstr "Különböző partnerek egyesítése és szétválasztása"
-
-#: C/link-contacts.page:25(page/title)
-msgid "Combine and separate contacts"
-msgstr "Partnerek egyesítése és szétválasztása"
-
-#: C/link-contacts.page:26(page/p)
-msgid ""
-"If one, or more, of your contacts has multiple accounts with different "
-"messaging services, you can combine these contacts into a single one."
-msgstr ""
-"Ha egy partnere több fiókkal is rendelkezik különböző szolgáltatóknál, akkor "
-"ezeket a partnerbejegyzéseket egyesítheti."
-
-#: C/link-contacts.page:30(page/p)
-msgid ""
-"The resulting contact is called a <em>meta-contact</em>: a contact composed "
-"from different single contacts."
-msgstr ""
-"Az eredményül kapott partnert <em>metapartnernek</em> hívjuk: ez egy több "
-"önálló partnerbejegyzésből álló partner."
-
-#: C/link-contacts.page:34(page/p)
-msgid ""
-"If you have a Jane Smith contact that is using three different messaging "
-"services like:"
-msgstr ""
-"Ha rendelkezik egy Kovács Erzsébet nevű partnerrel, aki három különböző "
-"üzenetküldő szolgáltatást használ:"
-
-#: C/link-contacts.page:40(item/p)
-msgid "janes@facebook"
-msgstr "ekovacs@facebook"
-
-#: C/link-contacts.page:45(item/p)
-msgid "jane.smith@gmail"
-msgstr "erzsebet.kovacs@gmail"
-
-#: C/link-contacts.page:50(item/p)
-msgid "jane_smith@hotmail"
-msgstr "erzsebet_kovacs@hotmail"
-
-#: C/link-contacts.page:55(page/p)
-msgid "You can combine these contacts into a single Jane Smith one."
-msgstr ""
-"Ezeket a partnerbejegyzéseket egyetlen Kovács Erzsébet bejegyzéssé "
-"egyesítheti."
-
-#: C/link-contacts.page:60(section/title)
-msgid "Combining contacts"
-msgstr "Partnerek egyesítése"
-
-#: C/link-contacts.page:63(item/p)
-msgid ""
-"From the <gui>Contact List</gui> window, right-click one of the contact that "
-"has different accounts, and select <gui style=\"menuitem\">Link Contacts...</"
-"gui>."
-msgstr ""
-"A <gui>Partnerlista</gui> ablakban kattintson a jobb egérgombbal a különböző "
-"fiókokkal rendelkező partnerére, és válassza a <gui style=\"menuitem"
-"\">Partnerek összekapcsolása…</gui> menüpontot."
-
-#: C/link-contacts.page:70(item/p)
-msgid ""
-"From the left pane in the <gui>Link Contacts</gui> window, select the "
-"contacts you want to combine."
-msgstr ""
-"A <gui>Partnerek összekapcsolása</gui> ablak bal oldalán válassza ki az "
-"egyesíteni kívánt partnereket."
-
-#: C/link-contacts.page:76(item/p)
-msgid "Click <gui style=\"button\">Link</gui>."
-msgstr "Nyomja meg az <gui style=\"button\">Összekapcsolás</gui> gombot."
-
-#: C/link-contacts.page:82(note/p)
-msgid ""
-"When a meta-contact has been created, the default contact that will be used "
-"to have a conversation with when you double-click on it, is the contact with "
-"the highest presence on-line."
-msgstr ""
-"Metapartner létrehozása esetén az alapértelmezett partner, amellyel dupla "
-"kattintással társalgást kezdeményez, a leghosszabb online jelenléttel "
-"rendelkező partnerbejegyzés lesz."
-
-#: C/link-contacts.page:91(section/title)
-msgid "Separating contacts"
-msgstr "Metapartnerek szétválasztása"
-
-#: C/link-contacts.page:94(item/p)
-msgid ""
-"From the <gui>Contact List</gui>, right-click the contact to separate, and "
-"select <gui style=\"menuitem\">Link Contacts...</gui>."
-msgstr ""
-"A <gui>Partnerlistában</gui> kattintson a jobb egérgombbal a szétválasztani "
-"kívánt metapartnerre, és válassza a <gui style=\"menuitem\">Partnerek "
-"összekapcsolása</gui> menüpontot."
-
-#: C/link-contacts.page:100(item/p)
-msgid "Click <gui style=\"button\">Unlink</gui>."
-msgstr "Nyomja meg a <gui style=\"button\">Szétválasztás</gui> gombot."
-
-#. This is a reference to an external file such as an image or video. When
-#. the file changes, the md5 hash will change to let you know you need to
-#. update your localized copy. The msgstr is not used at all. Set it to
-#. whatever you like once you have updated your copy of the file.
-#: C/overview.page:37(media)
-#| msgctxt "_"
-#| msgid ""
-#| "external ref='figures/offline.png' md5='c5b0c21181cbd6e13f8909243c0fa964'"
-msgctxt "_"
-msgid ""
-"external ref='figures/video_overview.png' "
-"md5='6cfcfbd833bf2234537d402185c40596'"
-msgstr ""
-"external ref='figures/video_overview.png' "
-"md5='6cfcfbd833bf2234537d402185c40596'"
-
-#. This is a reference to an external file such as an image or video. When
-#. the file changes, the md5 hash will change to let you know you need to
-#. update your localized copy. The msgstr is not used at all. Set it to
-#. whatever you like once you have updated your copy of the file.
-#: C/overview.page:38(media)
-#| msgctxt "_"
-#| msgid ""
-#| "external ref='figures/offline.png' md5='c5b0c21181cbd6e13f8909243c0fa964'"
-msgctxt "_"
-msgid ""
-"external ref='figures/conf_overview.png' "
-"md5='74c58668fe89c84060f12f6b70a6b903'"
-msgstr ""
-"external ref='figures/conf_overview.png' "
-"md5='74c58668fe89c84060f12f6b70a6b903'"
-
-#. This is a reference to an external file such as an image or video. When
-#. the file changes, the md5 hash will change to let you know you need to
-#. update your localized copy. The msgstr is not used at all. Set it to
-#. whatever you like once you have updated your copy of the file.
-#: C/overview.page:39(media)
-#| msgctxt "_"
-#| msgid ""
-#| "external ref='figures/gtk-remove.png' "
-#| "md5='215e3a325a3dd619874e35c30a018bb6'"
-msgctxt "_"
-msgid ""
-"external ref='figures/croom_overview.png' "
-"md5='e9619d2c8420bc48a880c03dbc1ae084'"
-msgstr ""
-"external ref='figures/croom_overview.png' "
-"md5='e9619d2c8420bc48a880c03dbc1ae084'"
-
-#: C/overview.page:8(info/desc)
-msgid "What instant messaging is and how you can use it."
-msgstr "Mi az azonnali üzenetküldés, és hogyan használhatja."
-
-#: C/overview.page:12(credit/name)
-msgid "Aruna S"
-msgstr "Aruna S"
-
-#: C/overview.page:16(credit/name) C/share-desktop.page:18(credit/name)
-msgid "Ekaterina Gerasimova"
-msgstr "Ekaterina Gerasimova"
-
-#: C/overview.page:24(page/title)
-msgid "Overview of instant messaging"
-msgstr "Azonnali üzenetküldés áttekintése"
-
-#: C/overview.page:26(page/p)
-msgid ""
-"Instant messaging, sometimes abbreviated to IM, is a text-based means to "
-"communicate instantly over the internet and the local network. While some IM "
-"applications work with only one type of account, others, including <link "
-"xref=\"introduction\">Empathy</link>, provide IM facilities by using <link "
-"xref=\"add-account\">accounts</link> from different service providers. Some "
-"of these even support audio and video calling."
-msgstr ""
-"Az azonnali üzenetküldés egy szövegalapú helyi hálózati és internetes "
-"kommunikációs módszer. Míg sok azonnali üzenő alkalmazás csak egy "
-"fióktípussal működik, addig mások, beleértve az <link xref=\"introduction\">"
-"Empathyt</link>, számos különböző szolgáltató <link xref=\"add-account\">"
-"fiókjainak</link> használatával biztosítanak azonnali üzenetküldést. Ezek "
-"közül néhány hang- és videohívást is támogat."
-
-#: C/overview.page:42(td/p)
-msgid "Video Conference"
-msgstr "Videokonferencia"
-
-#: C/overview.page:43(td/p)
-#| msgid "Group conversations"
-msgid "Group chats"
-msgstr "Csoportos társalgások"
-
-#: C/overview.page:44(td/p)
-#| msgid "Favorite rooms"
-msgid "Chat rooms"
-msgstr "Csevegőszobák"
-
-#: C/overview.page:48(page/p)
-msgid ""
-"Some instant messaging applications can be used to connect to chat rooms, "
-"online places where like-minded people meet to talk. One popular means to "
-"connect to several chat rooms is the Internet Relay Chat, also known as "
-"<link xref=\"irc-manage\">IRC</link>. IRC provides <link xref=\"irc-join-room"
-"\">public</link> chat rooms, which are open to anyone who creates an account "
-"on the IRC Server, and private chat rooms, which are <link xref=\"irc-join-"
-"pwd\">password protected</link> and open only to a select few."
-msgstr ""
-"Egyes azonnali üzenő alkalmazásokkal csevegőszobákhoz is lehet csatlakozni, "
-"amelyeket a hasonló gondolkodású emberek használnak beszélgetésre. Az egyik "
-"népszerű eszköz számos csevegőszobához csatlakozásra az <link "
-"xref=\"irc-manage\">IRC</link>. Az IRC <link xref=\"irc-join-room\">"
-"nyilvános</link> csevegőszobákat biztosít, amelyek bárki számára nyitottak, "
-"aki létrehoz egy fiókot az IRC kiszolgálón, valamint privát csevegőszobákat, "
-"amelyek <link xref=\"irc-join-pwd\">jelszóval védettek</link>, és csak a "
-"készítőjük által kiválasztott kevesek léphetnek be."
-
-#: C/prev-conv.page:8(info/desc)
-msgid "Browse or search your previous conversations."
-msgstr "Böngéssze korábbi társalgásait, vagy keressen bennük."
-
-#: C/prev-conv.page:36(page/title)
-msgid "View previous conversations"
-msgstr "Korábbi társalgások megjelenítése"
-
-#: C/prev-conv.page:38(page/p)
-msgid ""
-"<app>Empathy</app> automatically saves all your text conversations you have "
-"with your contacts. You can <link xref=\"#search\">search through all of "
-"your previous conversations</link> or <link xref=\"#browse\">browse previous "
-"conversations</link> by contact and date."
-msgstr ""
-"Az <app>Empathy</app> automatikusan menti az összes szöveges társalgását "
-"partnereivel. Lehetősége van <link xref=\"#search\">keresni az összes "
-"korábbi társalgásában</link>, vagy partner és dátum szerint <link xref="
-"\"#browse\">böngészni a korábbi társalgásokat</link>."
-
-#: C/prev-conv.page:46(note/p)
-msgid ""
-"You do not need to be connected to the Internet to view and search your "
-"previous conversations."
-msgstr ""
-"A korábbi társalgások megjelenítéséhez és az azokban való kereséshez nem "
-"kell az internethez kapcsolódni."
-
-#: C/prev-conv.page:53(section/title)
-msgid "Search previous conversations"
-msgstr "Keresés korábbi társalgásokban"
-
-#: C/prev-conv.page:55(section/p)
-msgid ""
-"You can perform a full-text search through all of your previous "
-"conversations."
-msgstr "Teljes szöveges keresést végezhet minden korábbi társalgásban."
-
-#: C/prev-conv.page:59(item/p) C/prev-conv.page:87(item/p)
-msgid ""
-"From the <gui>Contact List</gui> window, choose <guiseq><gui>View</gui> "
-"<gui>Previous Conversations</gui></guiseq>. Alternatively, press <key>F3</"
-"key>."
-msgstr ""
-"A <gui>Partnerlista</gui> ablakban válassza a <guiseq><gui>Nézet</"
-"gui><gui>Korábbi társalgások</gui></guiseq> menüpontot. Az <key>F3</key> "
-"billentyűt is megnyomhatja."
-
-#: C/prev-conv.page:63(item/p)
-msgid ""
-"Select an account from the drop-down list in the top. A list of contacts and "
-"chat room for that account will be shown below."
-msgstr ""
-"Válassza ki a fiókot a felső legördülő listából. A fiókhoz tartozó partnerek "
-"és csevegőszobák listája alul megjelenik."
-
-#: C/prev-conv.page:67(item/p)
-msgid ""
-"Type the text you want to search for in the <gui>Search</gui> text field."
-msgstr "A <gui>Keresés</gui> mezőbe írja be a keresendő szöveget."
-
-#: C/prev-conv.page:71(item/p)
-msgid ""
-"Any conversations that matched your search terms will be shown. By default, "
-"conversations are ordered by date."
-msgstr ""
-"Megjelennek azok a társalgások, amelyekben megtalálható a keresőkifejezés. A "
-"társalgások alapértelmezésben dátum szerint vannak rendezve."
-
-#: C/prev-conv.page:80(section/title)
-msgid "Browse previous conversations"
-msgstr "Korábbi társalgások tallózása"
-
-#: C/prev-conv.page:82(section/p)
-msgid ""
-"You can browse your previous conversations with your contacts or in chat "
-"rooms by date."
-msgstr ""
-"A partnereivel vagy a csevegőszobákban folytatott korábbi társalgásokat "
-"dátum szerint tallózhatja."
-
-#: C/prev-conv.page:91(item/p)
-msgid ""
-"Select an account from the drop-down list in the top left. A list of "
-"contacts and chat room for that account will be shown below."
-msgstr ""
-"Válassza ki a fiókot a bal felső legördülő listából. A fiókhoz tartozó "
-"partnerek és csevegőszobák listája alul megjelenik."
-
-#: C/prev-conv.page:95(item/p)
-msgid ""
-"Select a contact or chat room to view your previous conversations from. By "
-"default the most recent conversation will be shown."
-msgstr ""
-"Válassza ki a partnert vagy csevegőszobát a korábbi társalgások "
-"megjelenítéséhez. Alapértelmezésben a legújabb társalgás jelenik meg."
-
-#: C/prev-conv.page:99(item/p)
-msgid ""
-"You can browse your conversations by date. Days on which you had a "
-"conversation with the selected contact will be shown in bold text. Click a "
-"date to select it. Click the arrows next to the month and year to browse "
-"earlier dates."
-msgstr ""
-"A társalgásokat dátum szerint böngészheti. Azok a napok, amelyeken a "
-"kiválasztott partnerrel társalgást folytatott, félkövéren jelennek meg. "
-"Kattintson a dátumra a kiválasztásához. Kattintson a hónap és az év melletti "
-"nyilakra a korábbi dátumok böngészéséhez."
-
-#: C/prev-conv.page:105(section/p)
-msgid ""
-"You can search for text in the conversations by typing into the search field "
-"at the top. The matching conversations will be showed."
-msgstr ""
-"A társalgásokban a felső keresőmezőbe gépelve kereshet szöveget. Ezután az "
-"illeszkedő társalgások megjelennek."
-
-#: C/prev-conv.page:111(note/p)
-msgid ""
-"You can quickly view the previous conversations with one of your contacts "
-"from the <gui>Contact List</gui> window. Simply right click the contact and "
-"choose <gui>Previous Conversations</gui>. The <gui>Previous Conversations</"
-"gui> window will open with that contact already selected."
-msgstr ""
-"A <gui>Partnerlista</gui> ablakból gyorsan megjelenítheti az egyes "
-"partnereivel folytatott korábbi társalgásait. Csak kattintson a jobb "
-"egérgombbal a partnerre, és válassza a <gui>Korábbi társalgások</gui> "
-"menüpontot. Megnyílik a <gui>Korábbi társalgások</gui> ablak, és az adott "
-"partner lesz kiválasztva."
-
-#: C/prob-conn-acctdisabled.page:7(info/desc)
-msgid ""
-"The instant messaging account that you want to use is not enabled in the "
-"list of accounts."
-msgstr ""
-"A használni kívánt azonnaliüzenő-fiókja nincs engedélyezve a fióklistában."
-
-#: C/prob-conn-acctdisabled.page:34(page/title)
-msgid "My account is not enabled"
-msgstr "A fiókom nincs engedélyezve"
-
-#: C/prob-conn-acctdisabled.page:36(page/p)
-msgid ""
-"If the instant messaging account that you want to use is not enabled in the "
-"drop-down account list when you try to start a new conversation or join a "
-"room, your account details may not be correct."
-msgstr ""
-"Ha a használni kívánt azonnaliüzenő-fiók nincs engedélyezve a legördülő "
-"fióklistában, amikor új társalgást akar kezdeni vagy be akar lépni egy "
-"csevegőszobába, akkor a fiók adatai hibásak lehetnek."
-
-#: C/prob-conn-acctdisabled.page:44(item/p) C/prob-conn-auth.page:45(item/p)
-#: C/prob-conn-neterror.page:53(item/p)
-msgid ""
-"Make sure that you are connected to the Internet, or to a local area network."
-msgstr ""
-"Győződjön meg róla, hogy csatlakozik az internethez vagy helyi hálózathoz."
-
-#: C/prob-conn-acctdisabled.page:49(item/p)
-msgid ""
-"Choose <guiseq><gui>Edit</gui><gui>Accounts</gui></guiseq> and select the "
-"account that is not working."
-msgstr ""
-"Válassza a <guiseq><gui>Szerkesztés</gui><gui>Fiókok</gui></guiseq> "
-"menüpontot, majd a nem működő fiókot."
-
-#: C/prob-conn-acctdisabled.page:55(item/p) C/prob-conn-auth.page:63(item/p)
-msgid ""
-"Type your username and password again to make sure that they are correct."
-msgstr ""
-"Írja be újra felhasználónevét és jelszavát, így ellenőrizve hogy nem gépelte "
-"el azokat."
-
-#: C/prob-conn-acctdisabled.page:60(item/p)
-#: C/prob-conn-neterror.page:64(item/p)
-msgid ""
-"Check in the <gui>Advanced</gui> section that all the details are correct. "
-"You should be able to find these details from the website of the messaging "
-"service."
-msgstr ""
-"Ellenőrizze a <gui>Speciális</gui> szakaszban, hogy minden adat helyes-e. "
-"Ezeket az adatokat az üzenetküldő szolgáltatás weboldalán találhatja meg."
-
-#: C/prob-conn-acctdisabled.page:66(item/p)
-msgid "Check that the account is switched on."
-msgstr "Ellenőrizze, hogy a fiók be van-e kapcsolva."
-
-#: C/prob-conn-auth.page:8(info/desc)
-msgid ""
-"An error message which says “<gui>Authentication failed</gui>” appears in "
-"the main window."
-msgstr ""
-"A főablakban az „<gui>A hitelesítés meghiúsult</gui>” üzenet jelenik meg."
-
-#: C/prob-conn-auth.page:36(page/title)
-msgid "I get a message that says “Authentication failed”"
-msgstr "Az „A hitelesítés meghiúsult” üzenetet kapom"
-
-#: C/prob-conn-auth.page:38(page/p)
-msgid ""
-"This kind of error happens when your instant messaging service is not "
-"allowing you to connect because it does not recognize your username or "
-"password for some reason."
-msgstr ""
-"Ez a hiba akkor következik be, ha az azonnaliüzenő-szolgáltatás nem "
-"engedélyezi a csatlakozást, mert valamiért nem ismeri fel az Ön "
-"felhasználónevét vagy jelszavát."
-
-#: C/prob-conn-auth.page:50(item/p)
-msgid ""
-"Make sure that you have registered an account with the service you are "
-"trying to connect to. If you do not have an account, most services will not "
-"allow you to connect."
-msgstr ""
-"Győződjön meg róla, hogy már regisztrált fiókot annál a szolgáltatásnál, "
-"amelyhez csatlakozni próbál. Ha nincs fiókja, a legtöbb szolgáltatás nem "
-"engedélyezi a csatlakozást."
-
-#: C/prob-conn-auth.page:57(item/p) C/prob-conn-name.page:43(item/p)
-#: C/prob-conn-neterror.page:58(item/p)
-msgid ""
-"Click the <media type=\"image\" mime=\"image/png\" src=\"figures/gtk-edit.png"
-"\">edit</media> icon in the error message."
-msgstr ""
-"Kattintson a hibaüzenetben a <media type=\"image\" mime=\"image/png\" src="
-"\"figures/gtk-edit.png\">Szerkesztés</media> ikonra."
-
-#: C/prob-conn-auth.page:68(item/p)
-msgid ""
-"Deselect the <gui>Enabled</gui>, and then select it again to try to "
-"reconnect to the service."
-msgstr ""
-"Törölje az <gui>Engedélyezett</gui> jelölését, majd jelölje be újra a "
-"szolgáltatáshoz való ismételt csatlakozás megpróbálásához."
-
-#: C/prob-conn-name.page:9(info/title)
-msgctxt "link:error-msg"
-msgid "“Name in use”"
-msgstr "„A név használatban”"
-
-#: C/prob-conn-name.page:10(info/desc)
-msgid ""
-"An error message which says “<gui>Name in use</gui>” appears in the main "
-"window."
-msgstr "A főablakban az „<gui>A név használatban</gui>” üzenet jelenik meg."
-
-#: C/prob-conn-name.page:33(page/title)
-msgid "I get a message that says “Name in use”"
-msgstr "Az „A név használatban” üzenetet kapom"
-
-#: C/prob-conn-name.page:35(page/p)
-msgid ""
-"This kind of error happens when you try to connect to your IRC account and "
-"you are using a nickname that is already being used by someone else on that "
-"particular network."
-msgstr ""
-"Ez a hiba akkor következik be, ha az IRC-fiókjához próbál csatlakozni, és "
-"olyan becenevet használ, amit az adott hálózaton már valaki más használ."
-
-#: C/prob-conn-name.page:51(item/p)
-msgid "In the <gui>Nickname</gui> text box, type a new nickname."
-msgstr "A <gui>Becenév</gui> szövegdobozban adjon meg egy új becenevet."
-
-#: C/prob-conn-name.page:56(item/p)
-msgid ""
-"If you have registered that nickname within the network you are using, set "
-"the password for that nickname. For more information, see <link xref=\"irc-"
-"nick-password\"/>."
-msgstr ""
-"Ha regisztrálta a becenevet az éppen használt hálózaton, akkor adja meg a "
-"jelszót az adott becenévhez. További információkért lásd a <link xref=\"irc-"
-"nick-password\"/> részt."
-
-#: C/prob-conn-name.page:65(item/p) C/prob-conn-neterror.page:79(item/p)
-msgid ""
-"Switch the account off, and then switch it on to try to reconnect to the "
-"service."
-msgstr ""
-"Kapcsolja ki, majd újra be a fiókot a szolgáltatáshoz való ismételt "
-"csatlakozás megpróbálásához."
-
-#: C/prob-conn-neterror.page:7(info/desc)
-msgid ""
-"An error message which says “<gui>Network error</gui>” appears in the main "
-"window."
-msgstr "A főablakban a „<gui>Hálózati hiba</gui>” üzenet jelenik meg."
-
-#: C/prob-conn-neterror.page:34(page/title)
-msgid "I get a message that says “Network error”"
-msgstr "A „Hálózati hiba” üzenetet kapom"
-
-#: C/prob-conn-neterror.page:42(page/p)
-msgid ""
-"This kind of error happens when <app>Empathy</app> cannot communicate with "
-"the instant messaging service for some reason."
-msgstr ""
-"Ez a hiba akkor következik be, ha az <app>Empathy</app> valamilyen okból nem "
-"tud kommunikálni az azonnaliüzenő-szolgáltatással."
-
-#: C/prob-conn-neterror.page:46(page/p)
-msgid ""
-"Also, this kind of error happens when you try to use an IRC account without "
-"setting a nickname."
-msgstr ""
-"Ez a hiba következik be akkor is, ha becenév megadása nélkül próbál IRC-"
-"fiókot használni."
-
-#: C/prob-conn-neterror.page:87(section/title)
-msgid "Proxy support"
-msgstr "Proxytámogatás"
-
-#: C/prob-conn-neterror.page:88(section/p)
-msgid ""
-"At the moment <app>Empathy</app> can not be configured to work with a proxy."
-msgstr ""
-"Jelenleg az <app>Empathy</app> nem állítható be proxyval való használatra."
-
-#: C/prob-conn.page:7(info/desc)
-msgid "Diagnose common problems connecting to an instant messaging service."
-msgstr ""
-"Üzenetküldő-szolgáltatásokhoz való kapcsolódás általános problémáinak "
-"felismerése."
-
-#: C/prob-conn.page:29(page/title)
-msgid "Problems connecting to an instant messaging service"
-msgstr "Azonnaliüzenet-küldő szolgáltatásokhoz kapcsolódás problémái"
-
-#: C/remove-account.page:8(info/desc)
-msgid "Completely remove an account from <app>Empathy</app>."
-msgstr "Fiók teljes eltávolítása az <app>Empathyból</app>."
-
-#: C/remove-account.page:34(page/title)
-msgid "Remove an account"
-msgstr "Fiók eltávolítása"
-
-#: C/remove-account.page:36(page/p)
-msgid ""
-"You can completely remove an account from <app>Empathy</app> if you no "
-"longer wish to use the account. If you wish to use the account in "
-"<app>Empathy</app> again in the future, you will have to add your account "
-"details again."
-msgstr ""
-"Ha egy fiókot már nem kíván használni, teljesen eltávolíthatja azt az "
-"<app>Empathyból</app>. Ha a fiókot később újra használni szeretné az "
-"<app>Empathyban</app>, akkor újra meg kell adnia a fiók részleteit."
-
-#: C/remove-account.page:47(item/p)
-msgid ""
-"Select the account you wish to remove from the accounts list on the left "
-"side of the window."
-msgstr ""
-"Az ablak bal oldalán válassza ki a fióklistából eltávolítani kívánt fiókot."
-
-#: C/remove-account.page:51(item/p)
-msgid "Click <gui style=\"button\">-</gui>."
-msgstr "Nyomja meg a <gui style=\"button\">-</gui> gombot."
-
-#: C/remove-account.page:54(item/p)
-msgid ""
-"A dialog will be shown asking for confirmation. Click the <gui>Remove</gui> "
-"button to permanently remove the account."
-msgstr ""
-"Megjelenik egy megerősítést kérő ablak. Kattintson az <gui>Eltávolítás</gui> "
-"gombra a fiók végleges eltávolításához."
-
-#: C/remove-account.page:60(note/p)
-msgid ""
-"Even after removing an account, <app>Empathy</app> does not delete your "
-"conversation history for that account."
-msgstr ""
-"Az <app>Empathy</app> még a fiók eltávolítása után sem törli a fiókhoz "
-"tartozó csevegéselőzményeket."
-
-#: C/salut-protocol.page:8(info/desc)
-msgid "Understanding the People Nearby feature."
-msgstr "A Közeli emberek szolgáltatás bemutatása."
-
-#: C/salut-protocol.page:33(page/title)
-msgid "What is People Nearby?"
-msgstr "Mi az a Közeli emberek?"
-
-#: C/salut-protocol.page:40(page/p)
-msgid ""
-"The People Nearby service is a serverless communication service: you do not "
-"need to connect and authenticate to a central server in order to use it."
-msgstr ""
-"A Közeli emberek egy kiszolgáló nélküli kommunikációs szolgáltatás: "
-"használatához nincs szükség központi kiszolgálóhoz való csatlakozásra és "
-"bejelentkezésre."
-
-#: C/salut-protocol.page:45(page/p)
-msgid ""
-"This kind of serverless messaging system is restricted to a local area "
-"network and an active Internet connection is not necessary."
-msgstr ""
-"Ez a fajta kiszolgáló nélküli üzenetküldő rendszer a helyi hálózatra van "
-"korlátozva, és használatához nincs szükség internetkapcsolatra."
-
-#: C/salut-protocol.page:49(page/p)
-msgid ""
-"The people that use this service inside the same local area network will be "
-"auto-discovered, and it will be possible to send them messages and files as "
-"with other services."
-msgstr ""
-"Az azonos helyi hálózaton ezt a szolgáltatást használó embereket a program "
-"automatikusan megtalálja, és ugyanúgy küldhet nekik üzeneteket és fájlokat, "
-"mint más szolgáltatások esetén."
-
-#: C/salut-protocol.page:54(page/p)
-msgid ""
-"All the modern local area networks should be able to support this kind of "
-"service."
-msgstr ""
-"Ezt a szolgáltatástípust minden korszerű helyi hálózatnak tudnia kell "
-"támogatni."
-
-#: C/send-file.page:8(info/desc)
-msgid "Send a file from your computer to one of your contacts."
-msgstr "Fájl küldése a számítógépéről egy partnerének."
-
-#: C/send-file.page:36(page/title)
-msgid "Send files"
-msgstr "Fájlok küldése"
-
-#: C/send-file.page:45(item/p)
-msgid ""
-"Right click on the contact you want to send a file to, and choose <gui>Send "
-"file</gui>."
-msgstr ""
-"Kattintson a jobb egérgombbal a partnerre, akinek fájlt szeretne küldeni, és "
-"válassza a <gui>Fájl küldése</gui> menüpontot."
-
-#: C/send-file.page:50(item/p)
-msgid ""
-"Click on the contact you want to send a file, and choose <guiseq><gui>Edit</"
-"gui> <gui>Contact</gui><gui>Send file</gui></guiseq>."
-msgstr ""
-"Kattintson a partnerre, akinek fájlt szeretne küldeni, majd válassza a "
-"<guiseq><gui>Szerkesztés</gui><gui>Partner</gui><gui>Fájl küldése</gui></"
-"guiseq> menüpontot."
-
-#: C/send-file.page:58(item/p)
-msgid "Select the file to send, and click on <gui>Send</gui>."
-msgstr ""
-"Válassza ki az elküldeni kívánt fájlt, és kattintson a <gui>Küldés</gui> "
-"gombra."
-
-#: C/send-file.page:63(item/p)
-msgid "The <gui>File Transfers</gui> window will appear."
-msgstr "Megjelenik a <gui>Fájlátvitelek</gui> ablak."
-
-#: C/send-file.page:66(item/p)
-msgid ""
-"Wait for your contact to accept the file transfer, or click <gui>Stop</gui> "
-"to halt the transfer."
-msgstr ""
-"Várjon, amíg partnere elfogadja a fájlátvitelt, vagy kattintson a "
-"<gui>Leállítás</gui> gombra az átvitel leállításához."
-
-#: C/send-file.page:72(item/p)
-msgid ""
-"Once the transfer is finished, it is possible to close the <gui>File "
-"Transfers</gui> window."
-msgstr ""
-"Az átvitel befejeződése után bezárhatja a <gui>Fájlátvitelek</gui> ablakot."
-
-#: C/send-file.page:80(note/p)
-msgid ""
-"If you have multiple finished transfers listed in the window, click on "
-"<gui>Clear</gui> to empty the list. This will only remove the files from the "
-"list and will not delete them from your computer."
-msgstr ""
-"Ha az ablakban több befejeződött átvitel is fel van sorolva, akkor "
-"kattintson a <gui>Törlés</gui> gombra a lista kiürítéséhez. Ez a fájlokat "
-"csak a listából törli, a számítógépéről nem."
-
-#: C/send-file.page:87(note/p)
-msgid ""
-"It is possible to send files only using the following services: <em>Jabber</"
-"em>, <em>Google Talk</em> and <em>People Nearby</em>."
-msgstr ""
-"Fájlok küldése csak a következő szolgáltatások használatával lehetséges: "
-"<em>Jabber</em>, <em>Google Talk</em> és <em>Közeli emberek</em>."
-
-#: C/send-file.page:93(note/p)
-msgid ""
-"In order to send a file to someone, you need to be connected to the "
-"Internet, or to a local area network."
-msgstr ""
-"Ahhoz, hogy valakinek fájlt tudjon küldeni, csatlakoznia kell az "
-"internethez, vagy helyi hálózathoz."
-
-#: C/send-message.page:8(info/desc)
-msgid "Send a message to one of your contacts."
-msgstr "Üzenet küldése egyik partnerének."
-
-#: C/send-message.page:32(page/title)
-msgid "Send a message to someone"
-msgstr "Üzenetek küldése"
-
-#: C/send-message.page:36(item/p)
-msgid ""
-"From the <gui>Contact List</gui> window, double-click the name of the "
-"contact that you want to have a conversation with."
-msgstr ""
-"A <gui>Partnerlista</gui> ablakban kattintson duplán azon partner nevére, "
-"akivel csevegni szeretne."
-
-#: C/send-message.page:42(item/p)
-msgid ""
-"A new window will open. Type a message into the box at the bottom of the "
-"window and press <key>Enter</key> to send it."
-msgstr ""
-"Megnyílik egy új ablak. Írja be az üzenetet az ablak alján lévő "
-"szövegmezőbe, és nyomja meg az <key>Enter</key> billentyűt az elküldéséhez."
-
-#: C/send-message.page:50(section/title)
-msgid "Send a message to a meta-contact"
-msgstr "Üzenet küldése metapartnernek"
-
-#: C/send-message.page:58(item/p)
-msgid ""
-"Select the contact you want to have the conversation, and from the menu "
-"select <gui style=\"menuitem\">Chat</gui>."
-msgstr ""
-"Válassza ki a partnert, akivel csevegni szeretne, és a menüből válassza a "
-"<gui style=\"menuitem\">Csevegés</gui> pontot."
-
-#: C/set-custom-status.page:9(info/desc)
-msgid "Add, edit or delete personal messages for your status."
-msgstr "Személyes állapotüzenetek hozzáadása, szerkesztése vagy törlése."
-
-#: C/set-custom-status.page:15(credit/name)
-msgid "Jim Campbell"
-msgstr "Jim Campbell"
-
-#: C/set-custom-status.page:34(page/title)
-msgid "Set a custom message"
-msgstr "Egyéni üzenet beállítása"
-
-#: C/set-custom-status.page:36(page/p)
-msgid ""
-"Sometimes you may want to set a custom message for your status, for example "
-"to let people know that you will be unavailable for a certain period of time."
-msgstr ""
-"Egyes esetekben szüksége lehet egyéni állapotüzenet beállítására, például "
-"közölni ismerőseivel, hogy egy ideig nem lesz elérhető."
-
-#: C/set-custom-status.page:40(page/p)
-msgid ""
-"It is possible to set a custom message based on the different statuses "
-"available."
-msgstr ""
-"A különböző elérhető állapotok alapján lehetőség van egyéni üzenet "
-"beállítására."
-
-#: C/set-custom-status.page:46(item/p) C/set-custom-status.page:82(item/p)
-msgid ""
-"From the <gui>Contact List</gui> window, click on the drop-down list at the "
-"top."
-msgstr ""
-"A <gui>Partnerlista</gui> ablakban kattintson a felső legördülő listára."
-
-#: C/set-custom-status.page:52(item/p)
-msgid ""
-"Select the status you want to add a custom message to. You have to select "
-"the one identified with the label <gui>Custom Message</gui>."
-msgstr ""
-"Állítsa be azt az állapotot, amelyhez az egyéni üzenetet meg kívánja adni. "
-"Az <gui>Egyéni üzenet</gui> címkével jelöltet válassza."
-
-#: C/set-custom-status.page:58(item/p)
-msgid ""
-"Enter your custom message in the text box at the top of the window, and "
-"press <key>Enter</key> to set the message."
-msgstr ""
-"Adja meg egyéni üzenetét az ablak tetején lévő szövegdobozba, és nyomja meg "
-"az <key>Enter</key> billentyűt az üzenet beállításához."
-
-#: C/set-custom-status.page:64(item/p)
-msgid ""
-"If you want to set the custom message as a favorite, saving it in order to "
-"use it again, click on the little heart on the right of the text box where "
-"you wrote your custom message."
-msgstr ""
-"Ha az egyéni üzenetet szeretné kedvencként beállítani, így elmentve az "
-"ismételt felhasználáshoz, akkor kattintson az egyéni üzenetet tartalmazó "
-"szövegdoboz jobb oldalán lévő kis szívre."
-
-#: C/set-custom-status.page:69(item/p)
-msgid ""
-"If you do not do it, the custom message will not be available the next time "
-"you use <app>Empathy</app>. It will be saved only for the current session."
-msgstr ""
-"Ha ezt nem teszi meg, akkor az egyéni üzenet nem lesz elérhető az "
-"<app>Empathy</app> következő használatakor. Az üzenet alapértelmezésben csak "
-"az aktuális munkamenetben marad meg."
-
-#: C/set-custom-status.page:78(section/title)
-msgid "Edit and remove a custom message"
-msgstr "Egyéni üzenet szerkesztése és eltávolítása"
-
-#: C/set-custom-status.page:88(item/p)
-msgid "Select <gui>Edit Custom Message</gui>."
-msgstr "Válassza az <gui>Egyéni üzenetek szerkesztése</gui> lehetőséget."
-
-#: C/set-custom-status.page:95(item/p)
-msgid "To edit a custom message:"
-msgstr "Egyéni üzenet szerkesztéséhez:"
-
-#: C/set-custom-status.page:100(item/p)
-msgid ""
-"From the <gui>Saved Presets</gui> box, select the status message you want to "
-"edit and double-click on it."
-msgstr ""
-"A <gui>Mentett érték</gui> dobozból válassza ki a szerkeszteni kívánt "
-"állapotüzenetet, és kattintson rá duplán."
-
-#: C/set-custom-status.page:106(item/p)
-msgid "Type the new custom message and press <key>Enter</key> to modify it."
-msgstr ""
-"Írja be az új egyéni üzenetet, és nyomja meg az <key>Enter</key> billentyűt "
-"a módosításához."
-
-#: C/set-custom-status.page:113(item/p)
-msgid "To remove a custom message:"
-msgstr "Egyéni üzenet eltávolításához:"
-
-#: C/set-custom-status.page:118(item/p)
-msgid ""
-"From the <gui>Saved Presets</gui> box, select the status message you want to "
-"remove."
-msgstr ""
-"A <gui>Mentett érték</gui> dobozból válassza ki az eltávolítani kívánt "
-"állapotüzenetet."
-
-#: C/set-custom-status.page:124(item/p)
-msgid "Click on the <gui>Remove</gui> button."
-msgstr "Kattintson az <gui>Eltávolítás</gui> gombra."
-
-#: C/set-custom-status.page:133(item/p)
-msgid "When finished, click on <gui>Close</gui>."
-msgstr "Ha elkészült, kattintson a <gui>Bezárás</gui> gombra."
-
-#: C/set-custom-status.page:140(note/p)
-msgid ""
-"When you edit a custom message, it will not be set as the current status "
-"message. You will need to select it from the <gui>Contact List</gui> window."
-msgstr ""
-"Egyéni üzenet szerkesztésekor az nem kerül beállításra aktuális "
-"állapotüzenetként. Ehhez ki kell választania azt a <gui>Partnerlista</gui> "
-"ablakban."
-
-#: C/share-desktop.page:7(info/desc)
-msgid "Show your desktop to your contacts."
-msgstr "Asztalának megmutatása partnereinek."
-
-#: C/share-desktop.page:33(page/title)
-msgid "Share your desktop"
-msgstr "Asztal megosztása"
-
-#: C/share-desktop.page:35(page/p)
-msgid ""
-"It is possible to share your desktop with some of your contacts. You can use "
-"this functionality to show your desktop to your contacts to, for example, "
-"ask for help or help your contacts resolve a problem."
-msgstr ""
-"Egyes partnereivel megoszthatja asztalát, vagy elkezdheti használni az "
-"övéket. Ezt a funkciót asztala partnereinek való megmutatására használhatja, "
-"így például segítséget kérhet, vagy segíthet nekik megoldani egy problémát."
-
-#: C/share-desktop.page:42(note/p)
-msgid ""
-"To be able to share your desktop, you need to have a VNC server, which has "
-"support for the feature, installed on your system. <app>Vino</app>, the "
-"GNOME VNC server, has the required support."
-msgstr ""
-"Asztalának megosztásához rendszerére telepítve kell lennie egy VNC-"
-"kiszolgálónak, amely támogatja ezt a szolgáltatást. A <app>Vino</app>, a "
-"GNOME VNC-kiszolgálója tartalmazza a szükséges támogatást."
-
-#: C/share-desktop.page:51(item/p)
-msgid "From the <gui>Contact List</gui> window, do one of the following:"
-msgstr "A <gui>Partnerlista</gui> ablakban tegye a következők egyikét:"
-
-#: C/share-desktop.page:56(item/p)
-msgid ""
-"Select the contact you want to share your desktop with and choose "
-"<guiseq><gui>Edit</gui><gui>Contact</gui> <gui>Share My Desktop</gui></"
-"guiseq>."
-msgstr ""
-"Válassza ki a partnert, akivel meg szeretné osztani az asztalát, és válassza "
-"a <guiseq><gui>Szerkesztés</gui><gui>Partner</gui><gui>Az asztalom "
-"megosztása</gui></guiseq> menüpontot."
-
-#: C/share-desktop.page:63(item/p)
-msgid ""
-"Right-click on the name of the contact you want to share your desktop with "
-"and select <gui>Share My Desktop</gui>."
-msgstr ""
-"Kattintson a jobb egérgombbal a partner nevére, akivel meg szeretné osztani "
-"az asztalát, és válassza <gui>Az asztalom megosztása</gui> menüpontot."
-
-#: C/share-desktop.page:71(item/p)
-msgid ""
-"An invitation to view your desktop will be sent to the contact you have "
-"selected. To view your desktop, they will need to accept it."
-msgstr ""
-"A kiválasztott partner kap egy meghívást az asztala megjelenítésére. Az "
-"asztal megjelenítéséhez ezt a partnernek el kell fogadnia."
-
-#: C/share-desktop.page:77(item/p)
-msgid ""
-"You can disconnect the contact from your computer using your desktop sharing "
-"application."
-msgstr ""
-"A partnerét az asztal megosztására használt alkalmazás segítségével "
-"választhatja le a számítógépéről."
-
-#: C/share-desktop.page:82(note/p)
-msgid ""
-"For more information about how to use the remote desktop sharing "
-"application, refer to its help."
-msgstr ""
-"A távoliasztal-megosztó alkalmazás használatával kapcsolatos további "
-"információkért nézze meg annak súgóját."
-
-#: C/share-desktop.page:90(page/p)
-msgid ""
-"When you share your desktop with someone else, it is possible to experience "
-"system performance slowdown and low Internet speed."
-msgstr ""
-"Amikor megosztja asztalát, a rendszer teljesítményének romlását és az "
-"internetkapcsolat lassulását tapasztalhatja."
-
-#: C/share-desktop.page:96(note/p)
-msgid ""
-"Some of your contacts may not be able to use this feature. It is necessary "
-"for them to have version 2.28, or newer, of <app>Empathy</app> and a "
-"compatible remote desktop viewer application installed in their system."
-msgstr ""
-"Egyes partnerek lehet, hogy nem tudják ezt a szolgáltatást használni. Ehhez "
-"a rendszerükre az <app>Empathy</app> és egy kompatibilis távoliasztal-"
-"megjelenítő 2.28-as vagy újabb verziójának kell telepítve lennie."
-
-#. This is a reference to an external file such as an image or video. When
-#. the file changes, the md5 hash will change to let you know you need to
-#. update your localized copy. The msgstr is not used at all. Set it to
-#. whatever you like once you have updated your copy of the file.
-#: C/status-icons.page:39(media)
-msgctxt "_"
-msgid ""
-"external ref='figures/available.png' md5='2196b2f0ad4ce26fdb7b9d48e75d1947'"
-msgstr ""
-"external ref='figures/available.png' md5='2196b2f0ad4ce26fdb7b9d48e75d1947'"
-
-#. This is a reference to an external file such as an image or video. When
-#. the file changes, the md5 hash will change to let you know you need to
-#. update your localized copy. The msgstr is not used at all. Set it to
-#. whatever you like once you have updated your copy of the file.
-#: C/status-icons.page:45(media)
-msgctxt "_"
-msgid "external ref='figures/busy.png' md5='15eb2adff5faedf97b0cb9105d09410a'"
-msgstr "external ref='figures/busy.png' md5='15eb2adff5faedf97b0cb9105d09410a'"
-
-#. This is a reference to an external file such as an image or video. When
-#. the file changes, the md5 hash will change to let you know you need to
-#. update your localized copy. The msgstr is not used at all. Set it to
-#. whatever you like once you have updated your copy of the file.
-#: C/status-icons.page:53(media)
-msgctxt "_"
-msgid "external ref='figures/away.png' md5='9c504d6ffa0cf1a9cc8933d16e1bea33'"
-msgstr "external ref='figures/away.png' md5='9c504d6ffa0cf1a9cc8933d16e1bea33'"
-
-#. This is a reference to an external file such as an image or video. When
-#. the file changes, the md5 hash will change to let you know you need to
-#. update your localized copy. The msgstr is not used at all. Set it to
-#. whatever you like once you have updated your copy of the file.
-#.
-#. This is a reference to an external file such as an image or video. When
-#. the file changes, the md5 hash will change to let you know you need to
-#. update your localized copy. The msgstr is not used at all. Set it to
-#. whatever you like once you have updated your copy of the file.
-#: C/status-icons.page:62(media) C/status-icons.page:69(media)
-msgctxt "_"
-msgid ""
-"external ref='figures/offline.png' md5='c5b0c21181cbd6e13f8909243c0fa964'"
-msgstr ""
-"external ref='figures/offline.png' md5='c5b0c21181cbd6e13f8909243c0fa964'"
-
-#: C/status-icons.page:7(info/desc)
-msgid "Understanding the various statuses and status icons."
-msgstr "A különböző állapotok és állapotikonok ismertetése."
-
-#: C/status-icons.page:35(page/title)
-msgid "Status Types and Icons"
-msgstr "Állapottípusok és ikonok"
-
-#: C/status-icons.page:39(item/title)
-msgid ""
-"<media type=\"image\" mime=\"image/png\" src=\"figures/available.png"
-"\">Available icon</media> <gui>Available</gui>"
-msgstr ""
-"<media type=\"image\" mime=\"image/png\" src=\"figures/available.png"
-"\">Elérhető ikon</media> <gui>Elérhető</gui>"
-
-#: C/status-icons.page:41(item/p)
-msgid ""
-"Use the <em>Available</em> status when you are at your computer and able to "
-"chat with your contacts. You can set a custom message for this status."
-msgstr ""
-"Az <em>Elérhető</em> állapottal jelezheti, hogy a számítógépénél van, és "
-"ráér partnereivel csevegni. Ehhez az állapothoz beállíthat egyéni üzenetet."
-
-#: C/status-icons.page:45(item/title)
-msgid ""
-"<media type=\"image\" mime=\"image/png\" src=\"figures/busy.png\">Busy icon</"
-"media> <gui>Busy</gui>"
-msgstr ""
-"<media type=\"image\" mime=\"image/png\" src=\"figures/busy.png\">Elfoglalt "
-"ikon</media> <gui>Elfoglalt</gui>"
-
-#: C/status-icons.page:47(item/p)
-msgid ""
-"Use the <em>Busy</em> status to let your contacts know that you don’t want "
-"to chat right now. They can still contact you, for instance if they have "
-"something urgent they need to discuss. By default, <app>Empathy</app> will "
-"not use notification bubbles and sounds when you are busy. You can set a "
-"custom message for this status."
-msgstr ""
-"Az <em>Elfoglalt</em> állapottal hozhatja partnerei tudomására, hogy éppen "
-"nem szeretne csevegni velük. Ennek ellenére felvehetik Önnel a kapcsolatot, "
-"ha valami igazán sürgős megbeszélnivalójuk van. Alapértelmezésben az "
-"<app>Empathy</app> értesítési buborékokat és hangokat használ, ha Ön "
-"elfoglalt. Ehhez az állapothoz beállíthat egyéni üzenetet."
-
-#: C/status-icons.page:53(item/title)
-msgid ""
-"<media type=\"image\" mime=\"image/png\" src=\"figures/away.png\">Away icon</"
-"media> <gui>Away</gui>"
-msgstr ""
-"<media type=\"image\" mime=\"image/png\" src=\"figures/away.png\">Távol "
-"ikon</media> <gui>Távol</gui>"
-
-#: C/status-icons.page:55(item/p)
-msgid ""
-"Use the <em>Away</em> status when you are going away from your computer. "
-"<app>Empathy</app> automatically sets your status to Away if you do not use "
-"your computer for a while, or if your screensaver is on. By default, "
-"<app>Empathy</app> will not use notification bubbles and sounds when you are "
-"away. You can set a custom message for this status."
-msgstr ""
-"A <em>Távol</em> állapotot akkor használja, ha eltávolodik számítógépétől. "
-"Az <app>Empathy</app> automatikusan Távolra állítja állapotát, ha egy ideig "
-"nem használja számítógépét, vagy a képernyővédő aktiválódik. "
-"Alapértelmezésben az <app>Empathy</app> nem használ értesítő buborékokat és "
-"hangokat, ha Ön távol van. Ehhez az állapothoz beállíthat egyéni üzenetet."
-
-#: C/status-icons.page:62(item/title)
-msgid ""
-"<media type=\"image\" mime=\"image/png\" src=\"figures/offline.png\">Offline "
-"icon</media> <gui>Invisible</gui>"
-msgstr ""
-"<media type=\"image\" mime=\"image/png\" src=\"figures/offline.png"
-"\">Láthatatlan ikon</media> <gui>Láthatatlan</gui>"
-
-#: C/status-icons.page:64(item/p)
-msgid ""
-"When you set your status to <em>Invisible</em>, you will appear as offline "
-"to your contacts. You will still be connected to your accounts, and you "
-"still see your contacts’ statuses and start conversations with them."
-msgstr ""
-"Amikor állapotát <em>Láthatatlanra</em> állítja, partnerei számára "
-"kilépettként jelenik meg. Fiókjaihoz ekkor is csatlakozni fog, láthatja "
-"partnerei állapotát, és társalgásokat indíthat velük."
-
-#: C/status-icons.page:69(item/title)
-msgid ""
-"<media type=\"image\" mime=\"image/png\" src=\"figures/offline.png\">Offline "
-"icon</media> <gui>Offline</gui>"
-msgstr ""
-"<media type=\"image\" mime=\"image/png\" src=\"figures/offline.png"
-"\">Kilépett ikon</media> <gui>Kilépett</gui>"
-
-#: C/status-icons.page:71(item/p)
-msgid ""
-"Setting your status to <em>Offline</em> disconnects you from all of your "
-"accounts."
-msgstr ""
-"Állapotának <em>Kilépettre</em> állítása megszünteti kapcsolatát fiókjaihoz."
-
-#: C/video-call.page:10(info/desc)
-msgid "Start a video conversation with one of your contacts."
-msgstr "Videobeszélgetés kezdése egyik partnerével."
-
-#: C/video-call.page:29(page/title)
-msgid "Start a video conversation"
-msgstr "Videobeszélgetés kezdése"
-
-#: C/video-call.page:31(page/p)
-msgid ""
-"If you have a webcam, you can call your contacts and have a video "
-"conversation with them. This feature only works with certain types of "
-"accounts, and it requires the other person to have an application that "
-"supports video calls."
-msgstr ""
-"Ha rendelkezik webkamerával, akkor felhívhatja partnereit, és "
-"videobeszélgetést folytathat velük. Ez a szolgáltatás csak bizonyos "
-"fióktípusokkal működik, és a másik félnek is rendelkeznie kell a videohívást "
-"támogató alkalmazással."
-
-#: C/video-call.page:38(item/p)
-msgid ""
-"From the <gui>Contact List</gui> window, click the <media type=\"image\" "
-"mime=\"image/png\" src=\"figures/camera-web.png\">video call</media> icon "
-"next to the name of the contact you wish to call and choose <gui style="
-"\"menuitem\">Video Call</gui>."
-msgstr ""
-"A <gui>Partnerlista</gui> ablakban kattintson a <media type=\"image\" mime="
-"\"image/png\" src=\"figures/camera-web.png\">videohívás</media> ikonra a "
-"felhívni kívánt partner neve mellett, és válassza a <gui style=\"menuitem"
-"\">Videohívás</gui> menüpontot."
-
-#: C/video-call.page:55(note/p)
-msgid ""
-"To turn a video conversation into an audio conversation, choose <guiseq><gui "
-"style=\"menu\">Video</gui><gui style=\"menuitem\">Video Off</gui></guiseq>."
-msgstr ""
-"Videobeszélgetés hangbeszélgetéssé alakításához válassza a <guiseq><gui "
-"style=\"menu\">Videó</gui><gui style=\"menuitem\">Videó ki</gui></guiseq> "
-"menüpontot."
-
-#: C/video-call.page:61(section/title)
-msgid "Start a video conversation with a meta-contact"
-msgstr "Videobeszélgetés indítása metapartnerrel"
-
-#: C/video-call.page:69(item/p)
-msgid ""
-"Select the contact you want to have the conversation, and from the menu "
-"select <gui style=\"menuitem\">Video Call</gui>."
-msgstr ""
-"Válassza ki a partnert, akivel beszélgetni szeretne, és a menüből válassza a "
-"<gui style=\"menuitem\">Videohívás</gui> lehetőséget."
-
-#~ msgid "milo@ubuntu.com"
-#~ msgstr "milo@ubuntu.com"
-
-#~ msgid "shaunm@gnome.org"
-#~ msgstr "shaunm@gnome.org"
-
-#~ msgid "Available icon"
-#~ msgstr "Elérhető ikon"
-
-#~ msgid "Available"
-#~ msgstr "Elérhető"
-
-#~ msgid "Busy icon"
-#~ msgstr "Elfoglalt ikon"
-
-#~ msgid "Busy"
-#~ msgstr "Elfoglalt"
-
-#~ msgid "Away icon"
-#~ msgstr "Távol ikon"
-
-#~ msgid "Away"
-#~ msgstr "Távol"
-
-#~ msgid "Offline icon"
-#~ msgstr "Kilépett ikon"
-
-#~ msgid "Invisible"
-#~ msgstr "Láthatatlan"
-
-#~ msgid "Offline"
-#~ msgstr "Kilépett"
-
-#~ msgid "kittykat3756@gmail.com"
-#~ msgstr "kittykat3756@gmail.com"
-
-#~ msgid "jwcampbell@gmail.com"
-#~ msgstr "jwcampbell@gmail.com"
-
-#~ msgid "Edit, remove and add a custom message"
-#~ msgstr "Egyéni üzenet szerkesztése, eltávolítása és hozzáadása"
-
-#~ msgid ""
-#~ "To add a new custom message, from the <gui>Add New Preset</gui> section:"
-#~ msgstr ""
-#~ "Egyéni üzenet hozzáadásához az <gui>Új érték hozzáadása</gui> szakaszban:"
-
-#~ msgid ""
-#~ "Click on the drop-down list to select the status you want to set a custom "
-#~ "message to."
-#~ msgstr ""
-#~ "Kattintson a legördülő listára azon állapot kiválasztásához, amelyhez új "
-#~ "egyéni üzenetet kíván megadni."
-
-#~ msgid "Click on the text box, and type the new custom message."
-#~ msgstr "Kattintson a szövegdobozba, és írja be az új egyéni üzenetet."
-
-#~ msgid "Click on <gui>Add</gui> to add the new message to the presets ones."
-#~ msgstr ""
-#~ "Kattintson a <gui>Hozzáadás</gui> gombra az új üzenet felvételéhez a "
-#~ "Mentett értékek közé."
-
-#~ msgid "philbull@gmail.com"
-#~ msgstr "philbull@gmail.com"
-
-#~ msgid "I'd like to see this played up a bit more."
-#~ msgstr "I'd like to see this played up a bit more."
-
-#~ msgid "Click on <gui style=\"button\">Remove</gui>."
-#~ msgstr "Kattintson az <gui style=\"button\">Eltávolítás</gui> gombra."
-
-#~ msgid "shaunm"
-#~ msgstr "shaunm"
-
-#~ msgid ""
-#~ "Empathy no longer allows you to create an IRC account without a valid "
-#~ "nick. I've removed the guide link. Remove the text."
-#~ msgstr ""
-#~ "Empathy no longer allows you to create an IRC account without a valid "
-#~ "nick. I've removed the guide link. Remove the text."
-
-#~ msgid ""
-#~ "Deselect the <gui>Enabled</gui> check-box next to the name of your "
-#~ "account, and then select it again to try to reconnect to the service."
-#~ msgstr ""
-#~ "Törölje az <gui>Engedélyezett</gui> négyzet jelölését a fiók neve "
-#~ "mellett, majd jelölje be újra a szolgáltatáshoz való ismételt csatlakozás "
-#~ "megpróbálásához."
-
-#~ msgid ""
-#~ "Check that the <gui style=\"checkbox\">Enabled</gui> check-box is "
-#~ "selected. If it is not, select the check-box to enable the account."
-#~ msgstr ""
-#~ "Ellenőrizze, hogy az <gui style=\"checkbox\">Engedélyezve</gui> "
-#~ "jelölőnégyzet be van-e jelölve. Ha nincs, akkor jelölje be a négyzetet a "
-#~ "fiók engedélyezéséhez."
-
-#~ msgid ""
-#~ "Highlighting text is quirky: <link href=\"http://bugzilla.gnome.org/"
-#~ "show_bug.cgi?id=593733\">#593733</link>. If there's an actual "
-#~ "highlighting going on, independent of the selection (like in yellow or "
-#~ "something), we can use the term \"highlight\". Otherwise we need to use "
-#~ "the term \"select\". Watch that bug."
-#~ msgstr ""
-#~ "Highlighting text is quirky: <link href=\"http://bugzilla.gnome.org/"
-#~ "show_bug.cgi?id=593733\">#593733</link>. If there's an actual "
-#~ "highlighting going on, independent of the selection (like in yellow or "
-#~ "something), we can use the term \"highlight\". Otherwise we need to use "
-#~ "the term \"select\". Watch that bug."
-
-#~ msgid "Select the <gui>Search</gui> tab."
-#~ msgstr "Válassza a <gui>Keresés</gui> lapot."
-
-#~ msgid ""
-#~ "In the <gui>For</gui> field, type the text you want to search for. Click "
-#~ "<gui>Find</gui> or press <key>Enter</key>."
-#~ msgstr ""
-#~ "Az <gui>Erre</gui> mezőbe írja be a keresendő szöveget. Nyomja meg a "
-#~ "<gui>Keresés</gui> gombot, vagy az <key>Enter</key> billentyűt."
-
-#~ msgid ""
-#~ "Click on a conversation to view it. <app>Empathy</app> will select the "
-#~ "text in the conversation that matched your search terms."
-#~ msgstr ""
-#~ "Kattintson a társalgásra a megjelenítéséhez. Az <app>Empathy</app> "
-#~ "kijelöli a keresőkifejezésre illeszkedő részt a társalgás szövegében."
-
-#~ msgid "Select the <gui>Conversations</gui> tab."
-#~ msgstr "Válassza a <gui>Társalgások</gui> lapot."
-
-#~ msgid "Install telepathy-idle"
-#~ msgstr "A telepathy-idle telepítése"
-
-#~ msgid "peter.haslam@freenet.de"
-#~ msgstr "peter.haslam@freenet.de"
-
-#~ msgid ""
-#~ "Deselect <gui style=\"checkbox\">Enabled</gui> on the right side of the "
-#~ "window."
-#~ msgstr ""
-#~ "Törölje az <gui style=\"checkbox\">Engedélyezve</gui> négyzetet az ablak "
-#~ "jobb oldalán."
-
-#~ msgid "Icon for audio conversation"
-#~ msgstr "Hanghívások ikonja"
-
-#~ msgid "Icon for video conversation"
-#~ msgstr "Videohívások ikonja"
-
-#~ msgid ""
-#~ "I'd like to do tables like this using nothing for No and ✔ for Yes, but "
-#~ "we need to look at the accessibility impact. I've <link href=\"http://"
-#~ "mail.gnome.org/archives/gnome-doc-list/2009-September/msg00006.html"
-#~ "\">asked the accessibility team</link> for input."
-#~ msgstr ""
-#~ "I'd like to do tables like this using nothing for No and ✔ for Yes, but "
-#~ "we need to look at the accessibility impact. I've <link href=\"http://"
-#~ "mail.gnome.org/archives/gnome-doc-list/2009-September/msg00006.html"
-#~ "\">asked the accessibility team</link> for input."
-
-#~ msgid ""
-#~ "There's recent work on telepathy-butterfly and papyon to support audio "
-#~ "and video for MSN. It might be released in time for 2.28, but since it "
-#~ "doesn't follow the Gnome release schedule, I can't be sure. If it looks "
-#~ "like it's going to ship, let's mark it Yes."
-#~ msgstr ""
-#~ "There's recent work on telepathy-butterfly and papyon to support audio "
-#~ "and video for MSN. It might be released in time for 2.28, but since it "
-#~ "doesn't follow the Gnome release schedule, I can't be sure. If it looks "
-#~ "like it's going to ship, let's mark it Yes."
-
-#~ msgid "Click <gui style=\"button\">Log in</gui>."
-#~ msgstr "Nyomja meg a <gui style=\"button\">Bejelentkezés</gui> gombot."
-
-#~ msgid "Resource"
-#~ msgstr "Erőforrás"
-
-#~ msgid "Priority"
-#~ msgstr "Prioritás"
-
-#~ msgid "Network"
-#~ msgstr "Hálózat"
-
-#~ msgid "Nickname"
-#~ msgstr "Becenév"
-
-#~ msgid "Password"
-#~ msgstr "Jelszó"
-
-#~ msgid "Quit message"
-#~ msgstr "Kilépési üzenet"
-
-#~ msgid "Charset"
-#~ msgstr "Karakterkészlet"
-
-#~ msgid "Servers"
-#~ msgstr "Kiszolgálók"
-
-#~ msgid ""
-#~ "In order to be able to share your desktop or to remotely use your "
-#~ "contacts desktop, it is necessary to have a remote desktop viewer "
-#~ "application installed in your system."
-#~ msgstr ""
-#~ "Ahhoz, hogy megoszthassa asztalát, vagy távolról használhassa "
-#~ "partnereiét, a távoliasztal-megjelenítő alkalmazásnak telepítve kell "
-#~ "lennie rendszerén."
-
-#~ msgid ""
-#~ "A request will be sent to the contact you want to share your desktop "
-#~ "with. If they accept, the default remote desktop viewer application will "
-#~ "be launched in order to permit you to disconnect the user that is "
-#~ "controlling your desktop."
-#~ msgstr ""
-#~ "Elküldésre kerül egy kérés a partnerének, akivel meg szeretné osztani az "
-#~ "asztalát. Ha elfogadja, elindul az alapértelmezett távoliasztal-"
-#~ "megjelenítő, ezzel lehetővé téve az asztalát vezérlő felhasználó "
-#~ "kapcsolatának megszakítását."
diff --git a/help/it/figures/empathy-main-window.png b/help/it/figures/empathy-main-window.png
deleted file mode 100644
index 0752030e..00000000
--- a/help/it/figures/empathy-main-window.png
+++ /dev/null
Binary files differ
diff --git a/help/it/it.po b/help/it/it.po
deleted file mode 100644
index 83d3db10..00000000
--- a/help/it/it.po
+++ /dev/null
@@ -1,3613 +0,0 @@
-# Italian translation of empathy help.
-# Copyright (C) 2008, 2009, 2010, 2011 Free Software Foundation, Inc.
-# This package is distributed under the same license as the empathy package.
-# Milo Casagrande <milo@ubuntu.com>, 2008, 2009, 2010, 2011.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: empathy help\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-09-29 11:54+0000\n"
-"PO-Revision-Date: 2011-12-15 22:20+0100\n"
-"Last-Translator: Milo Casagrande <milo@ubuntu.com>\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: 8-bit\n"
-"Plural-Forms: nplurals=2; plural=(n!=1);\n"
-
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/video-call.page:38(None) C/audio-video.page:70(None)
-#: C/audio-call.page:36(None)
-msgid "@@image: 'figures/camera-web.png'; md5=8166b4372f25b78cbf5a64fe2eac2ce5"
-msgstr "non serve"
-
-#: C/video-call.page:10(desc)
-msgid "Start a video conversation with one of your contacts."
-msgstr "Avviare una conversazione video con i propri contatti."
-
-#: C/video-call.page:21(name) C/status-icons.page:16(name)
-#: C/share-desktop.page:13(name) C/set-custom-status.page:19(name)
-#: C/send-file.page:21(name) C/salut-protocol.page:18(name)
-#: C/remove-account.page:18(name) C/prob-conn-neterror.page:18(name)
-#: C/prob-conn-name.page:17(name) C/prob-conn-auth.page:21(name)
-#: C/prob-conn-acctdisabled.page:18(name) C/prev-conv.page:16(name)
-#: C/link-contacts.page:15(name) C/irc-start-conversation.page:15(name)
-#: C/irc-send-file.page:16(name) C/irc-nick-password.page:18(name)
-#: C/irc-manage.page:19(name) C/irc-join-room.page:16(name)
-#: C/irc-join-pwd.page:17(name) C/irc-commands.page:10(name)
-#: C/introduction.page:13(name) C/index.page:19(name)
-#: C/import-account.page:23(name) C/hide-contacts.page:11(name)
-#: C/group-conversations.page:19(name) C/geolocation-what-is.page:18(name)
-#: C/geolocation-turn.page:18(name) C/geolocation-supported.page:16(name)
-#: C/geolocation-privacy.page:17(name) C/geolocation-not-showing.page:17(name)
-#: C/geolocation.page:17(name) C/favorite-rooms.page:14(name)
-#: C/disable-account.page:20(name) C/create-account.page:18(name)
-#: C/audio-video.page:17(name) C/audio-call.page:19(name)
-#: C/add-account.page:20(name)
-msgid "Milo Casagrande"
-msgstr "Milo Casagrande"
-
-#: C/video-call.page:22(email) C/status-icons.page:17(email)
-#: C/share-desktop.page:14(email) C/set-custom-status.page:20(email)
-#: C/send-file.page:22(email) C/salut-protocol.page:19(email)
-#: C/remove-account.page:19(email) C/prob-conn-neterror.page:19(email)
-#: C/prob-conn-name.page:18(email) C/prob-conn-auth.page:22(email)
-#: C/prob-conn-acctdisabled.page:19(email) C/prev-conv.page:17(email)
-#: C/link-contacts.page:16(email) C/irc-start-conversation.page:16(email)
-#: C/irc-send-file.page:17(email) C/irc-nick-password.page:19(email)
-#: C/irc-manage.page:20(email) C/irc-join-room.page:17(email)
-#: C/irc-join-pwd.page:18(email) C/irc-commands.page:11(email)
-#: C/introduction.page:14(email) C/index.page:20(email)
-#: C/import-account.page:24(email) C/hide-contacts.page:12(email)
-#: C/group-conversations.page:20(email) C/geolocation-what-is.page:19(email)
-#: C/geolocation-turn.page:19(email) C/geolocation-supported.page:17(email)
-#: C/geolocation-privacy.page:18(email)
-#: C/geolocation-not-showing.page:18(email) C/geolocation.page:18(email)
-#: C/favorite-rooms.page:15(email) C/disable-account.page:21(email)
-#: C/create-account.page:19(email) C/audio-video.page:18(email)
-#: C/audio-call.page:20(email) C/add-account.page:21(email)
-msgid "milo@ubuntu.com"
-msgstr "milo@ubuntu.com"
-
-#: C/video-call.page:25(p) C/status-icons.page:24(p)
-#: C/share-desktop.page:17(p) C/set-custom-status.page:23(p)
-#: C/send-message.page:21(p) C/send-file.page:25(p)
-#: C/salut-protocol.page:22(p) C/remove-account.page:22(p)
-#: C/prob-conn.page:18(p) C/prob-conn-neterror.page:22(p)
-#: C/prob-conn-name.page:21(p) C/prob-conn-auth.page:25(p)
-#: C/prob-conn-acctdisabled.page:22(p) C/prev-conv.page:24(p)
-#: C/link-contacts.page:19(p) C/irc-start-conversation.page:19(p)
-#: C/irc-send-file.page:20(p) C/irc-nick-password.page:22(p)
-#: C/irc-manage.page:23(p) C/irc-join-room.page:20(p)
-#: C/irc-join-pwd.page:21(p) C/irc-commands.page:14(p)
-#: C/introduction.page:17(p) C/index.page:23(p) C/import-account.page:31(p)
-#: C/hide-contacts.page:15(p) C/group-conversations.page:23(p)
-#: C/geolocation-what-is.page:22(p) C/geolocation-turn.page:22(p)
-#: C/geolocation-supported.page:20(p) C/geolocation-privacy.page:21(p)
-#: C/geolocation-not-showing.page:21(p) C/geolocation.page:21(p)
-#: C/favorite-rooms.page:18(p) C/disable-account.page:28(p)
-#: C/create-account.page:22(p) C/change-status.page:23(p)
-#: C/audio-video.page:21(p) C/audio-call.page:23(p) C/add-contact.page:22(p)
-#: C/add-account.page:28(p) C/accounts-window.page:22(p)
-#: C/account-jabber.page:18(p) C/account-irc.page:20(p)
-msgid "Creative Commons Share Alike 3.0"
-msgstr "Creative Commons Share Alike 3.0"
-
-#: C/video-call.page:28(title)
-msgid "Start a video conversation"
-msgstr "Avviare una conversazione video"
-
-#: C/video-call.page:30(p)
-#| msgid ""
-#| "If you have a webcam, you can call your contacts and have an video "
-#| "conversation with them. This features only works with certain types of "
-#| "accounts, and it requires the other person to have an application that "
-#| "supports video calls."
-msgid ""
-"If you have a webcam, you can call your contacts and have a video "
-"conversation with them. This features only works with certain types of "
-"accounts, and it requires the other person to have an application that "
-"supports video calls."
-msgstr ""
-"Se si dispone di una webcam, è possibile chiamare i propri contatti e tenere "
-"una videoconferenza con loro. Questa funzionalità è disponibile solamente "
-"con l'utilizzo di alcuni tipi di account e richiede che i propri contatti "
-"dispongano di un programma che supporti le conversazioni video."
-
-#: C/video-call.page:37(p)
-#| msgid ""
-#| "From the <gui>Contact List</gui> window, click the <media type=\"image\" "
-#| "mime=\"image/png\" src=\"figures/camera-web.png\">video call</media> icon "
-#| "next to the name of the contact you wish to call and choose <gui style="
-#| "\"menuitem\">Video Call</gui>. Alternatively, right click the contact and "
-#| "choose <gui style=\"menuitem\">Video Call</gui>."
-msgid ""
-"From the <gui>Contact List</gui> window, click the <media type=\"image\" "
-"mime=\"image/png\" src=\"figures/camera-web.png\">video call</media> icon "
-"next to the name of the contact you wish to call and choose <gui style="
-"\"menuitem\">Video Call</gui>."
-msgstr ""
-"Dalla finestra <gui>Elenco contatti</gui>, fare clic sull'icona <media type="
-"\"image\" mime=\"image/png\" src=\"figures/camera-web.png\">della chiamata "
-"video</media> a fianco del nome del contatto da chiamare e scegliere <gui "
-"style=\"menuitem\">Chiamata video</gui>."
-
-#: C/video-call.page:43(p) C/audio-call.page:42(p)
-msgid ""
-"A new window will open. When the connection is established, you will see "
-"<gui>Connected</gui> at the bottom of the window, along with the total "
-"conversation time."
-msgstr ""
-"Viene aperta una nuova finestra. Quando la connessione è stata stabilita, "
-"viene visualizzato, in basso nella finestra, il messaggio <gui>Connessi</"
-"gui> assieme al tempo tascorso della conversazione."
-
-#: C/video-call.page:48(p) C/audio-call.page:48(p)
-msgid "To end the conversation, click on <gui style=\"button\">Hang up</gui>."
-msgstr ""
-"Per terminare la conversazione, fare clic su <gui style=\"button\">Chiudi</"
-"gui>."
-
-#: C/video-call.page:54(p)
-#| msgid ""
-#| "To turn a video conversation into an audio conversation, choose "
-#| "<guiseq><gui style=\"menu\">Video</gui><gui style=\"menuitem\">Video Off</"
-#| "gui></guiseq>, or click the <media type=\"image\" mime=\"image/png\" src="
-#| "\"figures/camera-web.png\">video call</media> toolbar button to deselect "
-#| "it."
-msgid ""
-"To turn a video conversation into an audio conversation, choose <guiseq><gui "
-"style=\"menu\">Video</gui><gui style=\"menuitem\">Video Off</gui></guiseq>."
-msgstr ""
-"Per convertire una conversazione video in una conversazione audio, scegliere "
-"<guiseq style=\"menu\"><gui>Video</gui><gui style=\"menuitem\">Disattivato</"
-"gui></guiseq>."
-
-#: C/video-call.page:60(title)
-#| msgid "Start a video conversation with one of your contacts."
-msgid "Start a video conversation with a meta-contact"
-msgstr "Avviare una conversazione video con un meta-contatto"
-
-#: C/video-call.page:63(p) C/send-message.page:53(p) C/audio-call.page:66(p)
-#| msgid ""
-#| "From the <gui>Contact List</gui> window, click on the drop-down list at "
-#| "the top."
-msgid ""
-"From the <gui>Contact List</gui> window, right-click on the meta-contact."
-msgstr "Dalla finestra <gui>Elenco contatti</gui>, fare clic sul meta-contatto"
-
-#: C/video-call.page:68(p)
-#| msgid ""
-#| "Right-click on the name of the contact you want to have a conversation "
-#| "with, and choose <gui>Chat</gui>."
-msgid ""
-"Select the contact you want to have the conversation, and from the menu "
-"select <gui style=\"menuitem\">Video Call</gui>."
-msgstr ""
-"Selezionare il contatto con cui iniziare una conversazione e dal menù "
-"selezionare <gui style=\"menuitem\">Chiamata video</gui>."
-
-#: C/video-call.page:75(p) C/send-message.page:65(p) C/audio-call.page:78(p)
-msgid ""
-"To recognize if a contact is a <em>meta-contact</em>, move your mouse on a "
-"contact in the <gui>Contact List</gui> window, and stop over it for a "
-"second: a small pop-up message will appear showing the number of the "
-"contacts that form the meta-contact."
-msgstr ""
-"Per riconoscere un <em>meta-contatto</em> da uno normale, spostare il "
-"puntatore del mouse su un contatto all'interno della finestra <gui>Elenco "
-"contatti</gui> e fermarsi su di esso per almeno un secondo: apparirà un "
-"piccolo messaggio in cui è indicato il numero dei contatti che compongono il "
-"meta-contatto."
-
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/status-icons.page:39(None)
-msgid "@@image: 'figures/available.png'; md5=1952a8952efbe87e84b21e09e0587e71"
-msgstr "non serve"
-
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/status-icons.page:45(None)
-msgid "@@image: 'figures/busy.png'; md5=6cab57171fb6d732a85ace48f11cf207"
-msgstr "non serve"
-
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/status-icons.page:53(None)
-msgid "@@image: 'figures/away.png'; md5=9a93ccca527af39cbe11db5c9d915ca0"
-msgstr "non serve"
-
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/status-icons.page:62(None) C/status-icons.page:69(None)
-msgid "@@image: 'figures/offline.png'; md5=565ba82fbedd22e4eb5b810750199527"
-msgstr "non serve"
-
-#: C/status-icons.page:7(desc)
-msgid "Understanding the various statuses and status icons."
-msgstr "Comprendere i vari stati e le icone di stato."
-
-#: C/status-icons.page:20(name) C/salut-protocol.page:36(cite)
-#: C/prev-conv.page:20(name) C/prev-conv.page:38(cite)
-#: C/import-account.page:27(name) C/disable-account.page:24(name)
-#: C/audio-video.page:109(cite) C/audio-video.page:117(cite)
-#: C/add-account.page:24(name) C/accounts-window.page:18(name)
-#: C/account-jabber.page:14(name) C/account-irc.page:16(name)
-msgid "Shaun McCance"
-msgstr "Shaun McCance"
-
-#: C/status-icons.page:21(email) C/prev-conv.page:21(email)
-#: C/import-account.page:28(email) C/disable-account.page:25(email)
-#: C/add-account.page:25(email) C/accounts-window.page:19(email)
-#: C/account-jabber.page:15(email) C/account-irc.page:17(email)
-msgid "shaunm@gnome.org"
-msgstr "shaunm@gnome.org"
-
-#: C/status-icons.page:35(title)
-msgid "Status Types and Icons"
-msgstr "Tipologie e icone di stato"
-
-#: C/status-icons.page:39(media)
-msgid "Available icon"
-msgstr "Icona Disponibile"
-
-#: C/status-icons.page:40(gui)
-msgid "Available"
-msgstr "Disponibile"
-
-#: C/status-icons.page:41(p)
-msgid ""
-"Use the <em>Available</em> status when you are at your computer and able to "
-"chat with your contacts. You can set a custom message for this status."
-msgstr ""
-"Usare lo stato <em>Disponibile</em> quando si è al computer e disponibili ad "
-"avere conversazioni con i propri contatti. Per questo stato è possibile "
-"impostare un messaggio personalizzato."
-
-#: C/status-icons.page:45(media)
-msgid "Busy icon"
-msgstr "Icona Non disponibile"
-
-#: C/status-icons.page:46(gui)
-msgid "Busy"
-msgstr "Non disponibile"
-
-#: C/status-icons.page:47(p)
-msgid ""
-"Use the <em>Busy</em> status to let your contacts know that you don’t want "
-"to chat right now. They can still contact you, for instance if they have "
-"something urgent they need to discuss. By default, <app>Empathy</app> will "
-"not use notification bubbles and sounds when you are busy. You can set a "
-"custom message for this status."
-msgstr ""
-"Usare lo stato <em>Non disponibile</em> per far sapere ai propri contatti "
-"che non si vuole essere disturbati, a meno di comunicazioni urgenti. Come "
-"impostazione predefinita, <app>Empathy</app> non utilizza le notifiche "
-"visive e sonore. Per questo stato è possibile impostare un messaggio "
-"personalizzato."
-
-#: C/status-icons.page:53(media)
-msgid "Away icon"
-msgstr "Icona Assente"
-
-#: C/status-icons.page:54(gui)
-msgid "Away"
-msgstr "Assente"
-
-#: C/status-icons.page:55(p)
-msgid ""
-"Use the <em>Away</em> status when you are going away from your computer. "
-"<app>Empathy</app> automatically sets your status to Away if you do not use "
-"your computer for a while, or if your screensaver is on. By default, "
-"<app>Empathy</app> will not use notification bubbles and sounds when you are "
-"away. You can set a custom message for this status."
-msgstr ""
-"Usare lo stato <em>Assente</em> quando ci sia allontana dal computer. "
-"<app>Empathy</app> utilizza automaticamente questo stato nel caso in cui non "
-"si utilizzi il computer per un po' di tempo o se viene attivato il "
-"salvaschermo. Come impostazione predefinita, <app>Empathy</app> non utilizza "
-"le notifiche visive e sonore. Per questo stato è possibile impostare un "
-"messaggio personalizzato."
-
-#: C/status-icons.page:62(media) C/status-icons.page:69(media)
-msgid "Offline icon"
-msgstr "Icona Fuori rete"
-
-#: C/status-icons.page:63(gui)
-msgid "Invisible"
-msgstr "Invisibile"
-
-#: C/status-icons.page:64(p)
-msgid ""
-"When you set your status to <em>Invisible</em>, you will appear as offline "
-"to your contacts. You will still be connected to your accounts, and you "
-"still see your contacts’ statuses and start conversations with them."
-msgstr ""
-"Quando il proprio stato viene impostato a <em>Invisibile</em>, ai propri "
-"contatti si appare come fuori rete. È comunque possibile accedere ai propri "
-"account, visualizzare lo stato dei propri contatti e avviare delle "
-"conversazioni."
-
-#: C/status-icons.page:70(gui)
-msgid "Offline"
-msgstr "Fuori rete"
-
-#: C/status-icons.page:71(p)
-msgid ""
-"Setting your status to <em>Offline</em> disconnects you from all of your "
-"accounts."
-msgstr ""
-"Impostare il proprio stato a <em>Fuori rete</em> disconnette da tutti i "
-"propri account."
-
-#: C/share-desktop.page:7(desc)
-msgid "Share the desktop with your contacts."
-msgstr "Condividere il proprio desktop con i propri contatti."
-
-#: C/share-desktop.page:28(title)
-msgid "Share your desktop"
-msgstr "Condividere il desktop"
-
-#: C/share-desktop.page:30(p)
-msgid ""
-"It is possible, with some of your contacts, to share your desktop with them, "
-"or to start using your contacts desktop. You can use this functionality to "
-"show your desktop to your contacts, to ask for help or to help your contacts "
-"resolve a problem."
-msgstr ""
-"Con alcuni dei propri contatti è possibile condividere il proprio desktop o "
-"usare il loro desktop da remoto. È possibile usare questa funzionalità per "
-"mostrare il desktop ai propri contatti, per richiedere aiuto o per aiutare i "
-"propri contatti a risolvere un problema."
-
-#: C/share-desktop.page:38(p)
-msgid ""
-"In order to be able to share your desktop or to remotely use your contacts "
-"desktop, it is necessary to have a remote desktop viewer application "
-"installed in your system."
-msgstr ""
-"Per poter condividere il desktop con i propri contatti o per poter "
-"utilizzare il loro da remoto, è necessario avere installato un programma di "
-"visualizzazione di desktop remoti."
-
-#: C/share-desktop.page:46(p) C/send-file.page:40(p)
-#: C/favorite-rooms.page:66(p)
-msgid "From the <gui>Contact List</gui> window, perform one of the following:"
-msgstr ""
-"Dalla finestra <gui>Elenco contatti</gui>, eseguire una delle seguenti "
-"azioni:"
-
-#: C/share-desktop.page:51(p)
-msgid ""
-"Select the contact you want to share your desktop with, and choose "
-"<guiseq><gui>Edit</gui><gui>Contact</gui><gui>Share my desktop</gui></"
-"guiseq>."
-msgstr ""
-"Selezionare il contatto con cui condividere il proprio desktop e scegliere "
-"<guiseq><gui>Modifica</gui><gui>Contatto</gui><gui>Condividi il desktop</"
-"gui></guiseq>."
-
-#: C/share-desktop.page:57(p)
-msgid ""
-"Right-click on the name of the contact you want to share your desktop with, "
-"and select <gui>Share my desktop</gui>."
-msgstr ""
-"Fare clic col pulsante destro del mouse sul nome del contatto con cui "
-"condividere il desktop e selezionare <gui>Condividi il desktop</gui>."
-
-#: C/share-desktop.page:65(p)
-msgid ""
-"A request will be sent to the contact you want to share your desktop with. "
-"If they accept, the default remote desktop viewer application will be "
-"launched in order to permit you to disconnect the user that is controlling "
-"your desktop."
-msgstr ""
-"Viene inviata una richiesta di condivisione al proprio contatto. Se viene "
-"accettata, il programma predefinito di visualizzazione di desktop remoti "
-"viene avviato affinché sia possibile disconnettere l'utente che sta "
-"controllando il proprio desktop."
-
-#: C/share-desktop.page:70(p)
-msgid ""
-"For more information about how to use the remote desktop viewer application, "
-"refer to its help."
-msgstr ""
-"Per maggiori informazioni sull'utilizzo del visualizzatore di desktop "
-"remoti, fare riferimento alla sua documentazione."
-
-#: C/share-desktop.page:77(p)
-msgid ""
-"When you share your desktop with someone else, it is possible to experience "
-"system performance slowdown and low Internet speed."
-msgstr ""
-"Quando viene condiviso il proprio desktop con un'altra persona è possibile "
-"riscontrare dei rallentamenti del sistema e basse velocità di connessione a "
-"Internet."
-
-#: C/share-desktop.page:83(p)
-msgid ""
-"Not all your contacts might be able to support this functionality. It is "
-"necessary for them to have at least the 2.28 version of <app>Empathy</app> "
-"and a remote desktop viewer application installed in their system."
-msgstr ""
-"Non tutti i propri contatti potrebbero essere in grado di supportare questa "
-"funzionalità. È necessario dispongano almeno della versione 2.28 di "
-"<app>Empathy</app> e di un'applicazione di visualizzazione di desktop remoti "
-"installata."
-
-#: C/set-custom-status.page:9(desc)
-msgid "Add, edit or delete personal messages for your status."
-msgstr "Aggiungere, modificare o eliminare messaggi di stato personalizzati."
-
-#: C/set-custom-status.page:15(name)
-msgid "Jim Campbell"
-msgstr "Jim Campbell"
-
-#: C/set-custom-status.page:16(email)
-msgid "jwcampbell@gmail.com"
-msgstr "jwcampbell@gmail.com"
-
-#: C/set-custom-status.page:34(title)
-msgid "Set a custom message"
-msgstr "Impostare un messaggio personalizzato"
-
-#: C/set-custom-status.page:36(p)
-msgid ""
-"Sometimes you may want to set a custom message for your status, for example "
-"to let people know that you will be unavailable for a certain period of time."
-msgstr ""
-"Alcune volte potrebbe essere necessario impostare un messaggio "
-"personalizzato per il proprio stato, per esempio per avvisare i propri "
-"contatti che non si sarà disponibili per un determinato periodo di tempo."
-
-#: C/set-custom-status.page:40(p)
-msgid ""
-"It is possible to set a custom message based on the different statuses "
-"available."
-msgstr ""
-"È possibile impostare un messaggio personalizzato in base ai diversi stati "
-"disponibili."
-
-#: C/set-custom-status.page:46(p) C/set-custom-status.page:82(p)
-msgid ""
-"From the <gui>Contact List</gui> window, click on the drop-down list at the "
-"top."
-msgstr ""
-"Dalla finestra <gui>Elenco contatti</gui>, fare clic sull'elenco a discesa "
-"nella parte superiore."
-
-#: C/set-custom-status.page:52(p)
-msgid ""
-"Select the status you want to add a custom message to. You have to select "
-"the one identified with the label <gui>Custom Message</gui>."
-msgstr ""
-"Selezionare lo stato a cui aggiungere un messaggio personalizzato. È "
-"necessario selezionare quello identificato dall'etichetta <gui>Messaggio "
-"personalizzato</gui>."
-
-#: C/set-custom-status.page:58(p)
-msgid ""
-"Enter your custom message in the text box at the top of the window, and "
-"press <key>Enter</key> to set the message."
-msgstr ""
-"Inserire il proprio messaggio personalizzato nella casella di testo presente "
-"nella parte superiore della finestra e quindi premere <key>Invio</key> per "
-"impostare il messaggio."
-
-#: C/set-custom-status.page:64(p)
-msgid ""
-"If you want to set the custom message as a favorite, saving it in order to "
-"use it again, click on the little star on the right of the text box where "
-"you wrote your custom message."
-msgstr ""
-"Per impostare il messaggio personalizzato tra quelli preferiti, salvandolo "
-"affinché possa essere utilizzato ancora, fare clic sulla piccola stella "
-"sulla destra della casella di testo dove è stato scritto il messaggio "
-"personalizzato."
-
-#: C/set-custom-status.page:69(p)
-msgid ""
-"If you do not do it, the custom message will not be available the next time "
-"you use <app>Empathy</app>. It will be saved only for the current session."
-msgstr ""
-"Se non viene impostato come preferito, il messaggio personalizzato non sarà "
-"disponibili al successivo avvio di <app>Empathy</app>. Viene salvato "
-"solamente per la sessione attuale."
-
-#: C/set-custom-status.page:78(title)
-msgid "Edit, remove and add a custom message"
-msgstr "Modificare, rimuovere e aggiungere un messaggio personalizzato"
-
-#: C/set-custom-status.page:88(p)
-msgid "Select <gui>Edit Custom Message</gui>."
-msgstr "Selezionare <gui>Modifica messaggi personalizzati</gui>."
-
-#: C/set-custom-status.page:95(p)
-msgid "To edit a custom message:"
-msgstr "Per modificare un messaggio personalizzato:"
-
-#: C/set-custom-status.page:100(p)
-msgid ""
-"From the <gui>Saved Presets</gui> box, select the status message you want to "
-"edit and double-click on it."
-msgstr ""
-"Dalla casella <gui>Prestabiliti salvati</gui>, selezionare il messaggio da "
-"modificare e fare doppio-clic su di esso."
-
-#: C/set-custom-status.page:106(p)
-msgid "Type the new custom message and press <key>Enter</key> to modify it."
-msgstr ""
-"Digitare il nuovo messaggio personalizzato e premere <key>Invio</key> per "
-"modificarlo."
-
-#: C/set-custom-status.page:113(p)
-msgid "To remove a custom message:"
-msgstr "Per rimuovere un messaggio personalizzato:"
-
-#: C/set-custom-status.page:118(p)
-msgid ""
-"From the <gui>Saved Presets</gui> box, select the status message you want to "
-"remove."
-msgstr ""
-"Dalla casella <gui>Prestabiliti salvati</gui>, selezionare il messaggio da "
-"rimuovere."
-
-#: C/set-custom-status.page:124(p)
-msgid "Click on the <gui>Remove</gui> button."
-msgstr "Fare clic sul pulsante <gui>Rimuovi</gui>."
-
-#: C/set-custom-status.page:131(p)
-msgid ""
-"To add a new custom message, from the <gui>Add New Preset</gui> section:"
-msgstr ""
-"Per aggiungere un nuovo messaggio personalizzato, dalla sezione "
-"<gui>Aggiungere nuovo prestabilito</gui>:"
-
-#: C/set-custom-status.page:136(p)
-msgid ""
-"Click on the drop-down list to select the status you want to set a custom "
-"message to."
-msgstr ""
-"Fare clic sull'elenco a discesa per selezionare lo stato a cui associare un "
-"messaggio personalizzato."
-
-#: C/set-custom-status.page:142(p)
-msgid "Click on the text box, and type the new custom message."
-msgstr ""
-"Fare clic sulla casella di testo e digitare il nuovo messaggio "
-"personalizzato."
-
-#: C/set-custom-status.page:147(p)
-msgid "Click on <gui>Add</gui> to add the new message to the presets ones."
-msgstr ""
-"Fare clic su <gui>Aggiungi</gui> per aggiungere il nuovo messaggio tra "
-"quelli prestabiliti."
-
-#: C/set-custom-status.page:156(p)
-msgid "When finished, click on <gui>Close</gui>."
-msgstr "Quando finito, fare clic su <gui>Chiudi</gui>."
-
-#: C/set-custom-status.page:163(p)
-msgid ""
-"When you edit or add a new custom message, it will not be set as the current "
-"status message. You will need to select it from the <gui>Contact List</gui> "
-"window."
-msgstr ""
-"Quanto viene modificato o aggiunto un nuovo messaggio personalizzato, questo "
-"non viene impostato come messaggio di stato corrente. È necessario "
-"selezionarlo dalla finestra <gui>Elenco contatti</gui>."
-
-#: C/send-message.page:8(desc)
-msgid "Send a message to one of your contacts."
-msgstr "Inviare un messaggio a uno dei propri contatti."
-
-#: C/send-message.page:17(name) C/send-file.page:17(name)
-#: C/prob-conn.page:14(name) C/prob-conn-neterror.page:14(name)
-#: C/prob-conn-auth.page:17(name) C/prob-conn-acctdisabled.page:14(name)
-#: C/change-status.page:19(name) C/add-contact.page:18(name)
-msgid "Phil Bull"
-msgstr "Phil Bull"
-
-#: C/send-message.page:18(email) C/send-file.page:18(email)
-#: C/prob-conn.page:15(email) C/prob-conn-neterror.page:15(email)
-#: C/prob-conn-auth.page:18(email) C/prob-conn-acctdisabled.page:15(email)
-#: C/change-status.page:20(email) C/add-contact.page:19(email)
-msgid "philbull@gmail.com"
-msgstr "philbull@gmail.com"
-
-#: C/send-message.page:32(title)
-msgid "Send a message to someone"
-msgstr "Inviare un messaggio"
-
-#: C/send-message.page:36(p)
-#| msgid ""
-#| "Double click the name of the contact that you want to have a conversation "
-#| "with."
-msgid ""
-"From the <gui>Contact List</gui> window, double-click the name of the "
-"contact that you want to have a conversation with."
-msgstr ""
-"Dalla finestra <gui>Elenco contatti</gui>, fare doppio-clic sul contatto con "
-"cui avere una conversazione."
-
-#: C/send-message.page:42(p)
-msgid ""
-"A new window will open. Type a message into the box at the bottom of the "
-"window and press <key>Enter</key> to send it."
-msgstr ""
-"Viene aperta una nuova finestra. Digitare il messaggio nella casella di "
-"testo nella parte inferiore della finestra e premere <key>Invio</key> per "
-"inviarlo."
-
-#: C/send-message.page:50(title)
-#| msgid "Send a message to someone"
-msgid "Send a message to a meta-contact"
-msgstr "Inviare un messaggio a un meta-contatto"
-
-#: C/send-message.page:58(p)
-#| msgid ""
-#| "Right-click on the name of the contact you want to have a conversation "
-#| "with, and choose <gui>Chat</gui>."
-msgid ""
-"Select the contact you want to have the conversation, and from the menu "
-"select <gui style=\"menuitem\">Chat</gui>."
-msgstr ""
-"Selezionare il contatto con cui iniziare una conversazione e dal menù "
-"selezionare <gui style=\"menuitem\">Conversazione</gui>."
-
-#: C/send-file.page:8(desc)
-msgid "Send a file from your computer to one of your contacts."
-msgstr "Inviare un file dal proprio computer a uno dei propri contatti."
-
-#: C/send-file.page:36(title)
-msgid "Send files"
-msgstr "Inviare file"
-
-#: C/send-file.page:45(p)
-msgid ""
-"Right click on the contact you want to send a file to, and choose <gui>Send "
-"file</gui>."
-msgstr ""
-"Fare clic col pulsante destro del mouse sul contatto a cui inviare un file e "
-"scegliere <gui>Invia file</gui>."
-
-#: C/send-file.page:50(p)
-msgid ""
-"Click on the contact you want to send a file, and choose <guiseq><gui>Edit</"
-"gui><gui>Contact</gui><gui>Send file</gui></guiseq>."
-msgstr ""
-"Fare clic sul contatto a cui inviare un file e scegliere "
-"<guiseq><gui>Modifica</gui><gui>Contatto</gui><gui>Invia file</gui></guiseq>."
-
-#: C/send-file.page:58(p)
-msgid "Select the file to send, and click on <gui>Send</gui>."
-msgstr "Selezionare il file da inviare e fare clic su <gui>Invia</gui>."
-
-#: C/send-file.page:63(p)
-msgid "The <gui>File Transfers</gui> window will appear."
-msgstr "Viene aperta la finestra <gui>Trasferimenti file</gui>."
-
-#: C/send-file.page:66(p)
-msgid ""
-"Wait for your contact to accept the file transfer, or click <gui>Stop</gui> "
-"to halt the transfer."
-msgstr ""
-"Attendere che il contatto accetti il trasferimento oppure fare clic su "
-"<gui>Ferma</gui> per fermarlo."
-
-#: C/send-file.page:72(p)
-msgid ""
-"Once the transfer is finished, it is possible to close the <gui>File "
-"Transfers</gui> window."
-msgstr ""
-"Completato il trasferimento del file, è possibile chiudere la finestra "
-"<gui>Trasferimenti file</gui>."
-
-#: C/send-file.page:80(p)
-msgid ""
-"If you have multiple finished transfers listed in the window, click on "
-"<gui>Clear</gui> to empty the list. This will only remove the files from the "
-"list and will not delete them from your computer."
-msgstr ""
-"Se nella finestra sono elencati più trasferimenti di file completati, fare "
-"clic su <gui>Pulisci</gui> per svuotare l'elenco. In questo modo vengono "
-"rimossi i file solamente dall'elenco, non dal proprio computer."
-
-#: C/send-file.page:87(p)
-msgid ""
-"It is possible to send files only using the following services: <em>Jabber</"
-"em>, <em>Google Talk</em> and <em>People Nearby</em>."
-msgstr ""
-"È possibile inviare file utilizzando solo uno dei seguenti servizi: "
-"<em>Jabber</em>, <em>Google Talk</em> e <em>Persone nelle vicinanze</em>."
-
-#: C/send-file.page:93(p)
-msgid ""
-"In order to send a file to someone, you need to be connected to the "
-"Internet, or to a local area network."
-msgstr ""
-"Per inviare un file a una persona è necessario essere collegati a Internet o "
-"a una rete locale."
-
-#: C/salut-protocol.page:8(desc)
-msgid "Understanding the People Nearby feature."
-msgstr "Comprendere la funzionalità «Persone nelle vicinanze»."
-
-#: C/salut-protocol.page:33(title)
-msgid "What is People Nearby?"
-msgstr "Cos'è «Persone nelle vicinanze»?"
-
-# (ndt) non serve tradurre
-#: C/salut-protocol.page:37(p)
-msgid "I'd like to see this played up a bit more."
-msgstr "I'd like to see this played up a bit more."
-
-#: C/salut-protocol.page:40(p)
-msgid ""
-"The People Nearby service is a serverless communication service: you do not "
-"need to connect and authenticate to a central server in order to use it."
-msgstr ""
-"Il servizio «Persone nelle vicinanze» è un servizio di comunicazione privo "
-"di server centrale: non è necessario connettersi e autenticarsi a un server "
-"centrale per poterlo utilizzare."
-
-#: C/salut-protocol.page:45(p)
-msgid ""
-"This kind of serverless messaging system is restricted to a local area "
-"network and an active Internet connection is not necessary."
-msgstr ""
-"Questa tipologia di sistema di messaggistica priva di server è ristretta a "
-"una rete locale e non è necessario disporre di una connessione a Internet."
-
-#: C/salut-protocol.page:49(p)
-msgid ""
-"The people that use this service inside the same local area network will be "
-"auto-discovered, and it will be possible to send them messages and files as "
-"with other services."
-msgstr ""
-"Le persone che utilizzano questo servizio all'interno della stessa rete "
-"locale vengono rilevate automaticamente ed è possibile inviare messaggi e "
-"file come per gli altri servizi."
-
-#: C/salut-protocol.page:54(p)
-msgid ""
-"All the modern local area networks should be able to support this kind of "
-"service."
-msgstr ""
-"Tutte le reti locali moderne dovrebbero essere in grado di supportare questo "
-"tipo di servizio."
-
-#: C/remove-account.page:8(desc)
-msgid "Completely remove an account from <app>Empathy</app>."
-msgstr "Rimuovere completamente un account da <app>Empathy</app>."
-
-#: C/remove-account.page:33(title)
-msgid "Remove an account"
-msgstr "Rimuovere un account"
-
-#: C/remove-account.page:35(p)
-msgid ""
-"You can completely remove an account from <app>Empathy</app> if you no "
-"longer wish to use the account. If you wish to use the account in "
-"<app>Empathy</app> again in the future, you will have to add your account "
-"details again."
-msgstr ""
-"Se non si desidera più utilizzare un account, è possibile rimuoverlo "
-"completamente da <app>Empathy</app>. Se in futuro si vuole utilizzare lo "
-"stesso account con <app>Empathy</app>, è necessario aggiungere nuovamente "
-"tutti i dettagli."
-
-#: C/remove-account.page:42(p) C/irc-nick-password.page:50(p)
-#: C/disable-account.page:48(p) C/add-account.page:48(p)
-msgid ""
-"From the <gui>Contact List</gui> window, choose <guiseq><gui>Edit</"
-"gui><gui>Accounts</gui></guiseq>, or press <key>F4</key>."
-msgstr ""
-"Dalla finestra <gui>Elenco contatti</gui>, scegliere <guiseq><gui>Modifica</"
-"gui><gui>Account</gui></guiseq> o premere <key>F4</key>."
-
-#: C/remove-account.page:46(p)
-msgid ""
-"Select the account you wish to remove from the accounts list on the left "
-"side of the window."
-msgstr ""
-"Selezionare l'account da rimuovere dall'elenco degli account nel riquadro a "
-"sinistra della finestra."
-
-#: C/remove-account.page:50(p)
-msgid "Click on <gui style=\"button\">Remove</gui>."
-msgstr "Fare clic su <gui style=\"button\">Rimuovi</gui>."
-
-#: C/remove-account.page:53(p)
-msgid ""
-"A dialog will be shown asking for confirmation. Click the <gui>Remove</gui> "
-"button to permanently remove the account."
-msgstr ""
-"Viene mostrato un dialogo per la conferma dell'operazione. Fare clic sul "
-"pulsante <gui>Rimuovi</gui> per rimuovere definitivamente l'account."
-
-#: C/remove-account.page:59(p)
-msgid ""
-"Even after removing an account, <app>Empathy</app> does not delete your "
-"conversation history for that account."
-msgstr ""
-"Anche dopo aver rimosso un account, <app>Empathy</app> non elimina la "
-"cronologia delle conversazioni per quel particolare account."
-
-#: C/prob-conn.page:7(desc)
-msgid "Diagnose common problems connecting to an instant messaging service."
-msgstr ""
-"Diagnosticare problemi comuni di connessione a un servizio di messaggistica."
-
-#: C/prob-conn.page:29(title)
-msgid "Problems connecting to an instant messaging service"
-msgstr "Problemi nel connettersi ai servizi di messaggistica"
-
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/prob-conn-neterror.page:58(None) C/prob-conn-name.page:43(None)
-#: C/prob-conn-auth.page:58(None) C/account-irc.page:109(None)
-msgid "@@image: 'figures/gtk-edit.png'; md5=4f21b451732817be0604fe3e2c8da98b"
-msgstr "non serve"
-
-#: C/prob-conn-neterror.page:7(desc)
-msgid ""
-"An error message which says “<gui>Network error</gui>” appears in the main "
-"window."
-msgstr ""
-"Viene visualizzato un messaggio di errore indicante «<gui>Errore di rete</"
-"gui>»."
-
-#: C/prob-conn-neterror.page:33(title)
-msgid "I get a message that says “Network error”"
-msgstr "Si riceve un messaggio indicante «Errore di rete»"
-
-#: C/prob-conn-neterror.page:36(cite)
-msgid "shaunm"
-msgstr "shaunm"
-
-# (ndt) non serve tradurre
-#: C/prob-conn-neterror.page:37(p)
-msgid ""
-"Empathy no longer allows you to create an IRC account without a valid nick. "
-"I've removed the guide link. Remove the text."
-msgstr ""
-"Empathy no longer allows you to create an IRC account without a valid nick. "
-"I've removed the guide link. Remove the text."
-
-#: C/prob-conn-neterror.page:41(p)
-msgid ""
-"This kind of error happens when <app>Empathy</app> cannot communicate with "
-"the instant messaging service for some reason."
-msgstr ""
-"Questo tipo di errore si verifica quando <app>Empathy</app> non riesce a "
-"comunicare, per qualche motivo, con il servizio di messaggistica istantanea."
-
-#: C/prob-conn-neterror.page:45(p)
-msgid ""
-"Also, this kind of error happens when you try to use an IRC account without "
-"setting a nickname."
-msgstr ""
-"Inoltre, questo tipo di errore si verifica quando si cerca di usare un "
-"account IRC senza aver impostato un soprannome."
-
-#: C/prob-conn-neterror.page:52(p) C/prob-conn-auth.page:45(p)
-#: C/prob-conn-acctdisabled.page:43(p)
-msgid ""
-"Make sure that you are connected to the Internet, or to a local area network."
-msgstr "Assicurarsi di essere connessi a Internet o a una rete locale."
-
-#: C/prob-conn-neterror.page:57(p) C/prob-conn-name.page:42(p)
-#: C/prob-conn-auth.page:57(p)
-msgid ""
-"Click the <media type=\"image\" mime=\"image/png\" src=\"figures/gtk-edit.png"
-"\">edit</media> icon in the error message."
-msgstr ""
-"Fare clic sull'icona <media type=\"image\" mime=\"image/png\" src=\"figures/"
-"gtk-edit.png\">di modifica</media> nel messaggio di errore."
-
-#: C/prob-conn-neterror.page:65(p) C/prob-conn-acctdisabled.page:59(p)
-msgid ""
-"Check in the <gui>Advanced</gui> section that all the details are correct. "
-"You should be able to find these details from the website of the messaging "
-"service."
-msgstr ""
-"Verificare che nella sezione <gui>Avanzate</gui> tutti i dettagli siano "
-"corretti. Questi dettagli dovrebbero essere disponibili nel sito web del "
-"servizio di messaggistica."
-
-#: C/prob-conn-neterror.page:82(p) C/prob-conn-auth.page:68(p)
-msgid ""
-"Deselect the <gui>Enabled</gui>, and then select it again to try to "
-"reconnect to the service."
-msgstr ""
-"Deselezionare la casella di scelta <guilabel>Abilitato</guilabel> e "
-"selezionarla nuovamente per ritentare la connessione al servizio."
-
-#: C/prob-conn-neterror.page:90(title)
-msgid "Proxy support"
-msgstr "Supporto proxy"
-
-#: C/prob-conn-neterror.page:91(p)
-msgid ""
-"At the moment <app>Empathy</app> can not be configured to work with a proxy."
-msgstr ""
-"Attualmente <app>Empathy</app> non può essere configurato per funzionare con "
-"un proxy."
-
-#: C/prob-conn-name.page:9(title)
-msgid "“Name in use”"
-msgstr "«Nome in uso»"
-
-#: C/prob-conn-name.page:10(desc)
-msgid ""
-"An error message which says “<gui>Name in use</gui>” appears in the main "
-"window."
-msgstr ""
-"Viene visualizzato un messaggio di errore indicante «<gui>Nome in uso</gui>»."
-
-#: C/prob-conn-name.page:32(title)
-msgid "I get a message that says “Name in use”"
-msgstr "Si riceve un messaggio indicante «Nome in uso»"
-
-#: C/prob-conn-name.page:34(p)
-msgid ""
-"This kind of error happens when you try to connect to your IRC account and "
-"you are using a nickname that is already being used by someone else on that "
-"particular network."
-msgstr ""
-"Questo tipo di errore si verifica quando si cerca di connettersi col proprio "
-"account IRC, ma si utilizza un soprannome già usato da qualcun altro "
-"all'interno di quella particolare rete."
-
-#: C/prob-conn-name.page:50(p)
-msgid "In the <gui>Nickname</gui> text box, type a new nickname."
-msgstr "Nella casella di testo <gui>Soprannome</gui>, digitarne uno nuovo."
-
-#: C/prob-conn-name.page:55(p)
-msgid ""
-"If you have registered that nickname within the network you are using, set "
-"the password for that nickname. For more information, see <link xref=\"irc-"
-"nick-password\"/>."
-msgstr ""
-"Se quel particolare soprannome è stato registrato all'interno di quella "
-"rete, impostare la password per tale soprannome. Per maggiori informazioni, "
-"consultare <link xref=\"irc-nick-password\"/>."
-
-#: C/prob-conn-name.page:64(p)
-msgid ""
-"Deselect the <gui>Enabled</gui> check-box next to the name of your account, "
-"and then select it again to try to reconnect to the service."
-msgstr ""
-"Deselezionare la casella di scelta <guilabel>Abilitato</guilabel> a fianco "
-"del nome dell'account e selezionarla nuovamente per ritentare la connessione "
-"al servizio."
-
-#: C/prob-conn-auth.page:8(desc)
-msgid ""
-"An error message which says “<gui>Authentication failed</gui>” appears in "
-"the main window."
-msgstr ""
-"Viene visualizzato un messaggio di errore indicante «<gui>Autenticazione non "
-"riuscita</gui>»."
-
-#: C/prob-conn-auth.page:36(title)
-msgid "I get a message that says “Authentication failed”"
-msgstr "Si riceve un messaggio indicante «Autenticazione non riuscita»."
-
-#: C/prob-conn-auth.page:38(p)
-msgid ""
-"This kind of error happens when your instant messaging service is not "
-"allowing you to connect because it does not recognize your username or "
-"password for some reason."
-msgstr ""
-"Questo tipo di errore si verifica quando il servizio di messaggistica "
-"istantanea non consente di eseguire la connessione perché non riconosce, per "
-"qualche motivo, il nome utente o la password."
-
-#: C/prob-conn-auth.page:50(p)
-msgid ""
-"Make sure that you have registered an account with the service you are "
-"trying to connect to. If you do not have an account, most services will not "
-"allow you to connect."
-msgstr ""
-"Assicurarsi di aver registrato un account con quel particolare servizio. La "
-"maggior parte dei servizi di messaggistica non consente di collegarvisi "
-"senza un account registrato."
-
-#: C/prob-conn-auth.page:63(p) C/prob-conn-acctdisabled.page:54(p)
-msgid ""
-"Type your username and password again to make sure that they are correct."
-msgstr ""
-"Digitare nuovamente il proprio nome utente e la password per assicurarsi che "
-"siano corretti."
-
-#: C/prob-conn-acctdisabled.page:7(desc)
-msgid ""
-"The instant messaging account that you want to use is not enabled in the "
-"list of accounts."
-msgstr ""
-"L'account di messaggistica istantanea da usare non è abilitato nell'elenco "
-"degli account."
-
-#: C/prob-conn-acctdisabled.page:33(title)
-msgid "My account is not enabled"
-msgstr "L'account non è abilitato"
-
-#: C/prob-conn-acctdisabled.page:35(p)
-msgid ""
-"If the instant messaging account that you want to use is not enabled in the "
-"drop-down account list when you try to start a new conversation or join a "
-"room, your account details may not be correct."
-msgstr ""
-"Se l'account di messaggistica istantanea da usare non è abilitato "
-"nell'elenco a discesa degli account quando si avvia una nuova conversazione "
-"o quando si entra in una stanza, i dettagli dell'account potrebbero non "
-"essere corretti."
-
-#: C/prob-conn-acctdisabled.page:48(p)
-msgid ""
-"Choose <guiseq><gui>Edit</gui><gui>Accounts</gui></guiseq> and select the "
-"account that is not working."
-msgstr ""
-"Scegliere <guiseq><gui>Modifica</gui><gui>Account</gui></guiseq> e "
-"selezionare l'account che non funziona."
-
-#: C/prob-conn-acctdisabled.page:65(p)
-msgid ""
-"Check that the <gui style=\"checkbox\">Enabled</gui> check-box is selected. "
-"If it is not, select the check-box to enable the account."
-msgstr ""
-"Verificare che la casella di scelta <gui style=\"checkbox\">Abilitato</gui> "
-"sia selezionata. Se non lo è, selezionarla per abilitare l'account."
-
-#: C/prev-conv.page:8(desc)
-msgid "Browse or search your previous conversations."
-msgstr "Esplorare o cercare conversazioni precedenti."
-
-#: C/prev-conv.page:35(title)
-msgid "View previous conversations"
-msgstr "Visualizzare le conversazioni precedenti"
-
-# (ndt) non serve tradurre
-#: C/prev-conv.page:39(p)
-msgid ""
-"Highlighting text is quirky: <link href=\"http://bugzilla.gnome.org/show_bug."
-"cgi?id=593733\">#593733</link>. If there's an actual highlighting going on, "
-"independent of the selection (like in yellow or something), we can use the "
-"term \"highlight\". Otherwise we need to use the term \"select\". Watch that "
-"bug."
-msgstr ""
-"Highlighting text is quirky: <link href=\"http://bugzilla.gnome.org/show_bug."
-"cgi?id=593733\">#593733</link>. If there's an actual highlighting going on, "
-"independent of the selection (like in yellow or something), we can use the "
-"term \"highlight\". Otherwise we need to use the term \"select\". Watch that "
-"bug."
-
-#: C/prev-conv.page:46(p)
-msgid ""
-"<app>Empathy</app> automatically saves all your text conversations you have "
-"with your contacts. You can <link xref=\"#search\">search through all of "
-"your previous conversations</link> or <link xref=\"#browse\">browse previous "
-"conversations</link> by contact and date."
-msgstr ""
-"<app>Empathy</app> salva automaticamente tutte le conversazioni testuali con "
-"i propri contatti, consentendo di <link xref=\"#search\">eseguire ricerche "
-"tra tutte le conversazioni avute</link> o di <link xref=\"#browse"
-"\">esplorarle </link> in base al contatto e alla data."
-
-#: C/prev-conv.page:54(p)
-msgid ""
-"You do not need to be connected to the Internet to view and search your "
-"previous conversations."
-msgstr ""
-"Non è necessario essere collegati a Internet per visualizzare e cercare le "
-"conversazioni precedenti."
-
-#: C/prev-conv.page:61(title)
-msgid "Search previous conversations"
-msgstr "Eseguire ricerche nelle conversazioni precedenti"
-
-#: C/prev-conv.page:63(p)
-msgid ""
-"You can perform a full-text search through all of your previous "
-"conversations."
-msgstr ""
-"È possibile eseguire delle ricerche per testo in tutte le proprie "
-"conversazioni precedenti."
-
-#: C/prev-conv.page:67(p) C/prev-conv.page:96(p)
-msgid ""
-"From the <gui>Contact List</gui> window, choose <guiseq><gui>View</"
-"gui><gui>Previous Conversations</gui></guiseq>. Alternatively, press "
-"<key>F3</key>."
-msgstr ""
-"Dalla finestra <gui>Elenco contatti</gui>, scegliere "
-"<guiseq><gui>Visualizza</gui><gui>Conversazioni precedenti</gui></guiseq>. "
-"In alternativa, premere <key>F3</key>."
-
-#: C/prev-conv.page:71(p)
-msgid "Select the <gui>Search</gui> tab."
-msgstr "Selezionare la scheda <gui>Cerca</gui>."
-
-#: C/prev-conv.page:74(p)
-msgid ""
-"In the <gui>For</gui> field, type the text you want to search for. Click "
-"<gui>Find</gui> or press <key>Enter</key>."
-msgstr ""
-"Nel campo <gui>For</gui>, digitare il testo da cercare quindi fare clic su "
-"<gui>Trova</gui> o premere <key>Invio</key>."
-
-#: C/prev-conv.page:78(p)
-msgid ""
-"Any conversations that matched your search terms will be shown in the list "
-"below the search field. By default, conversations are ordered by date."
-msgstr ""
-"Qualsiasi conversazione corrispondente ai termini cercati viene visualizzata "
-"nel riquadro sottostante il campo di ricerca. Come impostazione predefinita, "
-"le conversazioni sono ordinate per data."
-
-#: C/prev-conv.page:82(p)
-msgid ""
-"Click on a conversation to view it. <app>Empathy</app> will select the text "
-"in the conversation that matched your search terms."
-msgstr ""
-"Fare clic su una conversazione per visualizzarla. <app>Empathy</app> "
-"seleziona, nella conversazione, il testo corrispondente ai termini di "
-"ricerca."
-
-#: C/prev-conv.page:89(title)
-msgid "Browse previous conversations"
-msgstr "Esplorare le conversazioni precedenti"
-
-#: C/prev-conv.page:91(p)
-msgid ""
-"You can browse your previous conversations with your contacts or in chat "
-"rooms by date."
-msgstr ""
-"È possibile esplorare per data le conversazioni precedenti con i propri "
-"contatti o in una stanza di conversazione."
-
-#: C/prev-conv.page:100(p)
-msgid "Select the <gui>Conversations</gui> tab."
-msgstr "Selezionare la scheda <gui>Conversazioni</gui>."
-
-#: C/prev-conv.page:103(p)
-msgid ""
-"Select an account from the drop-down list in the top left. A list of "
-"contacts and chat room for that account will be shown below."
-msgstr ""
-"Selezionare un account dall'elenco a discesa in alto a sinistra. Un elenco "
-"dei contatti e delle stanze di conversazione per quel account viene mostrato "
-"nel riquadro sottostante."
-
-#: C/prev-conv.page:107(p)
-msgid ""
-"Select a contact or chat room to view your previous conversations from. By "
-"default the most recent conversation will be shown."
-msgstr ""
-"Selezionare un contatto o una stanza di conversazione per visualizzarne le "
-"conversazioni avute. Vengono mostrate, in modo predefinito, le conversazioni "
-"più recenti."
-
-#: C/prev-conv.page:111(p)
-msgid ""
-"You can browse your conversations by date. Days on which you had a "
-"conversation with the selected contact will be shown in bold text. Click a "
-"date to select it. Click the arrows next to the month and year to browse "
-"earlier dates."
-msgstr ""
-"È possibile esplorare le conversazioni per data. I giorni in cui si è avuta "
-"una conversazione con il contatto selezionato sono mostrati in grassetto. "
-"Fare clic su una data per selezionarla, quindi fare clic sulle frecce a "
-"fianco del mese e dell'anno per visualizzare date precedenti."
-
-#: C/prev-conv.page:117(p)
-msgid ""
-"You can search for text in the displayed conversation by typing into the "
-"search field at the top. The matching text will be highlighted."
-msgstr ""
-"È possibile eseguire delle ricerche per testo nelle conversazioni "
-"visualizzate. È sufficiente digitare i termini di ricerca nel campo di "
-"ricerca in alto, le corrispondenza trovate verranno evidenziate."
-
-#: C/prev-conv.page:121(p)
-msgid ""
-"You can quickly view the previous conversations with one of your contacts "
-"from the <gui>Contact List</gui> window. Simply right click the contact and "
-"choose <gui>View Previous Conversations</gui>. The <gui>Previous "
-"Conversations</gui> window will open with that contact already selected."
-msgstr ""
-"È possibile visualizzare velocemente le conversazioni precedenti avute con "
-"un contatto dalla finestra <gui>Elenco contatti</gui>. Basta fare clic col "
-"pulsante destro del mouse sul contatto e scegliere <gui>Conversazioni "
-"precedenti</gui>. La finestra <gui>Conversazioni precedenti</gui> viene "
-"aperta con quel contatto già selezionato."
-
-#: C/link-contacts.page:11(desc)
-msgid "Merge and separate different contacts into a single one."
-msgstr "Unire e separare diversi contatti in uno solo."
-
-#: C/link-contacts.page:25(title)
-msgid "Combine and separate contacts"
-msgstr "Unire e dividere contatti"
-
-#: C/link-contacts.page:26(p)
-msgid ""
-"If one, or more, of your contacts has multiple accounts with different "
-"messaging services, you can combine these contacts into a single one."
-msgstr ""
-"Se uno o più dei propri contatti presenta molteplici account con differenti "
-"servizi di messaggistica, è possibile unire questi contatti in uno solo."
-
-#: C/link-contacts.page:30(p)
-msgid ""
-"The resulting contact is called a <em>meta-contact</em>: a contact composed "
-"from different single contacts."
-msgstr ""
-"Il risultato di questa unione è un nuovo contatto chiamato <em>meta-"
-"contatto</em>: un contatto composto da molteplici contatti singoli."
-
-#: C/link-contacts.page:34(p)
-msgid ""
-"If you have a Jane Smith contact that is using three different messaging "
-"services like:"
-msgstr ""
-"Se nell'elenco dei contatti è presente un contatto Mario Rossi che utilizza "
-"tre diversi servizi di messaggistica come:"
-
-#: C/link-contacts.page:40(p)
-#| msgid "Facebook"
-msgid "janes@facebook"
-msgstr "mario@facebook"
-
-#: C/link-contacts.page:45(p)
-msgid "jane.smith@gmail"
-msgstr "mario.rossi@gmail"
-
-#: C/link-contacts.page:50(p)
-msgid "jane_smith@hotmail"
-msgstr "mario_rossi@hotmail"
-
-#: C/link-contacts.page:55(p)
-msgid "You can combine these contacts into a single Jane Smith one."
-msgstr ""
-"È possibile unire questi contatti in un singolo contatto per Mario Rossi."
-
-#: C/link-contacts.page:60(title)
-#| msgid "Hide offline contacts"
-msgid "Combining contacts"
-msgstr "Unire i contatti"
-
-#: C/link-contacts.page:63(p)
-msgid ""
-"From the <gui>Contact List</gui> window, right-click one of the contact that "
-"has different accounts, and select <gui style=\"menuitem\">Link Contacts...</"
-"gui>."
-msgstr ""
-"Dalla finestra <gui>Elenco contatti</gui>, fare clic col pulsante destro del "
-"mouse su uno dei contatti che presenta molteplici account e selezionare <gui "
-"style=\"menuitem\">Unisci contatti...</gui>."
-
-#: C/link-contacts.page:70(p)
-#| msgid ""
-#| "From the <gui>Saved Presets</gui> box, select the status message you want "
-#| "to remove."
-msgid ""
-"From the left pane in the <gui>Link Contacts</gui> window, select the "
-"contacts you want to combine."
-msgstr ""
-"Dal riquadro a sinistra nella finestra <gui>Unisci contatti</gui>, "
-"selezionare i contatti da unire assieme."
-
-#: C/link-contacts.page:76(p)
-#| msgid "Click <gui style=\"button\">Log in</gui>."
-msgid "Click <gui style=\"button\">Link</gui>."
-msgstr "Fare clic su <gui style=\"button\">Unisci</gui>."
-
-#: C/link-contacts.page:82(p)
-msgid ""
-"When a meta-contact has been created, the default contact that will be used "
-"to have a conversation with when you double-click on it, is the contact with "
-"the highest presence on-line."
-msgstr ""
-"Quando viene creato un meta-contatto, l'account del contatto utilizzato in "
-"modo predefinito per avere una conversazione è quello con la maggiore "
-"presenza online."
-
-#: C/link-contacts.page:91(title)
-#| msgid "Hide offline contacts"
-msgid "Separating contacts"
-msgstr "Dividere i contatti"
-
-#: C/link-contacts.page:94(p)
-msgid ""
-"From the <gui>Contact List</gui>, right-click the contact to separate, and "
-"select <gui style=\"menuitem\">Link Contacts...</gui>."
-msgstr ""
-"Dalla finestra <gui>Elenco contatti</gui>, fare clic col pulsante destro del "
-"mouse sul contatto da separare e selezionare <gui style=\"menuitem\">Unisci "
-"contatti...</gui>."
-
-#: C/link-contacts.page:100(p)
-#| msgid "Click <gui style=\"button\">Log in</gui>."
-msgid "Click <gui style=\"button\">Unlink</gui>."
-msgstr "Fare clic su <gui style=\"button\">Dividi</gui>."
-
-#: C/license.page:8(desc)
-msgid "Legal information."
-msgstr "Informazioni legali."
-
-#: C/license.page:11(title)
-msgid "License"
-msgstr "Licenza"
-
-#: C/license.page:12(p)
-msgid ""
-"This work is distributed under a CreativeCommons Attribution-Share Alike 3.0 "
-"Unported license."
-msgstr ""
-"Questo lavoro è disponibile nei termini della licenza Creative Commons "
-"Attribution-Share Alike 3.0 Unported."
-
-#: C/license.page:20(p)
-msgid "You are free:"
-msgstr "Siete liberi di:"
-
-#: C/license.page:25(em)
-msgid "To share"
-msgstr "Condividere"
-
-#: C/license.page:26(p)
-msgid "To copy, distribute and transmit the work."
-msgstr "Copiare, distribuire e trasmettere quest'opera."
-
-#: C/license.page:29(em)
-msgid "To remix"
-msgstr "Di modificare"
-
-#: C/license.page:30(p)
-msgid "To adapt the work."
-msgstr "Di modificare quest'opera."
-
-#: C/license.page:33(p)
-msgid "Under the following conditions:"
-msgstr "Alle seguenti condizioni:"
-
-#: C/license.page:38(em)
-msgid "Attribution"
-msgstr "Attribuzione"
-
-#: C/license.page:39(p)
-msgid ""
-"You must attribute the work in the manner specified by the author or "
-"licensor (but not in any way that suggests that they endorse you or your use "
-"of the work)."
-msgstr ""
-"È necessario attribuire la paternità dell'opera nei modi indicati "
-"dall'autore o da chi ha dato l'opera in licenza e in modo tale da non "
-"suggerire che essi vi avallino o avvalgano il modo in cui viene usata "
-"l'opera."
-
-#: C/license.page:46(em)
-msgid "Share Alike"
-msgstr "Condividere allo stesso modo"
-
-#: C/license.page:47(p)
-msgid ""
-"If you alter, transform, or build upon this work, you may distribute the "
-"resulting work only under the same, similar or a compatible license."
-msgstr ""
-"Se quest'opera viene modificata, trasformata o ne viene creata una nuova "
-"basata su questa, è possibile distribuire la nuova opera solamente nei "
-"termini della stessa licenza o di una compatibile."
-
-#: C/license.page:53(p)
-msgid ""
-"For the full text of the license, see the <link href=\"http://"
-"creativecommons.org/licenses/by-sa/3.0/legalcode\">CreativeCommons website</"
-"link>, or read the full <link href=\"http://creativecommons.org/licenses/by-"
-"sa/3.0/\">Commons Deed</link>."
-msgstr ""
-"Per il testo completo della licenza, consultare il <link href=\"http://"
-"creativecommons.org/licenses/by-sa/3.0/legalcode\">sito web di "
-"CreativeCommons</link> oppure leggere il <link href=\"http://creativecommons."
-"org/licenses/by-sa/3.0/deed.it\">commons deed</link>."
-
-#: C/irc-start-conversation.page:8(desc)
-#| msgid "Start a conversation witn an IRC contact."
-msgid "Start a conversation with an IRC contact."
-msgstr "Avviare una conversazione con un contatto IRC."
-
-#: C/irc-start-conversation.page:30(title)
-msgid "Chat with somebody on IRC"
-msgstr "Parlare con qualcuno via IRC"
-
-#: C/irc-start-conversation.page:32(p)
-msgid ""
-"You can hold private conversations with other IRC users, outside of the "
-"public IRC chat rooms. To start a conversation with another IRC user:"
-msgstr ""
-"Con gli utenti IRC è possibile avere delle conversazioni privare, al di "
-"fuori delle stanze di conversazione pubbliche. Per avviare una conversazione "
-"con un altro utente IRC:"
-
-#: C/irc-start-conversation.page:37(p)
-msgid ""
-"In the contact list for an IRC chat room, double click the name of the user "
-"you want to chat with. Alternatively, right click the name of the user and "
-"choose <gui>Chat</gui>."
-msgstr ""
-"Nell'elenco contatti di una stanza di conversazione IRC, fare doppio-clic "
-"sul nome dell'utente con cui avviare la conversazione. In alternativa, fare "
-"clic col pulsante destro del mouse sul nome e scegliere <gui>Conversazione</"
-"gui>."
-
-#: C/irc-start-conversation.page:45(p)
-msgid ""
-"The IRC room contact list is not the same as <app>Empathy</app> contact "
-"list. It contains a list of users in the IRC chat room you joined. Different "
-"rooms can have different contacts listed."
-msgstr ""
-"L'elenco contatti di una stanza IRC non è lo stesso dell'elenco contatti di "
-"<app>Empathy</app>. Questo contiene un elenco di tutti gli utenti presenti "
-"in quella particolare stanza di conversazione IRC. Stanze diverse possono "
-"avere contatti diverse elencati."
-
-#: C/irc-start-conversation.page:52(p)
-msgid ""
-"The IRC room contact list is usually on the right side of the IRC room "
-"window. If you do not see it, choose <guiseq><gui>Conversation</"
-"gui><gui>Show Contact List</gui></guiseq>."
-msgstr ""
-"L'elenco contatti di una stanza IRC è solitamente posizionata nella parte "
-"destra della finestra della stanza di conversazione. Se non è visualizzato, "
-"scegliere <guiseq><gui>Conversazione</gui><gui>Mostra elenco contatti</gui></"
-"guiseq>."
-
-#: C/irc-send-file.page:9(desc)
-msgid "<app>Empathy</app> does not currently support sending files using IRC."
-msgstr ""
-"Attualmente <app>Empathy</app> non supporta l'invio di file utilizzando IRC."
-
-#: C/irc-send-file.page:31(title)
-msgid "Send files over IRC"
-msgstr "Inviare file via IRC"
-
-#: C/irc-send-file.page:33(p)
-msgid "It is not currently possible to send files using IRC."
-msgstr "Al momento non è possibile inviare file utilizzando IRC."
-
-#: C/irc-nick-password.page:10(desc)
-msgid "Protect your nickname to prevent other IRC users from using it."
-msgstr ""
-"Proteggere su IRC il proprio soprannome affinché non venga usato da altri."
-
-#: C/irc-nick-password.page:33(title)
-msgid "Use a nickname password on IRC"
-msgstr "Usare una password per il soprannome"
-
-#: C/irc-nick-password.page:35(p)
-msgid ""
-"On some IRC networks, you can register your nickname with a service called "
-"NickServ. By sending special messages to NickServ, you can set your password "
-"and identify yourself. Some IRC chat rooms may not allow you to join without "
-"a registered nickname."
-msgstr ""
-"Con alcune reti IRC è possibile registrare il proprio soprannome attraverso "
-"un servizio chiamato «NickServ». Attraverso l'invio di speciali messaggi al "
-"NickServ è possibile impostare una password con cui identificarsi. Alcune "
-"stanze di conversazione IRC potrebbero non consentire l'accesso a persone "
-"prive di un soprannome registrato."
-
-#: C/irc-nick-password.page:40(p)
-#| msgid ""
-#| "<app>Empathy</app> does not currently support nickname registration. Some "
-#| "IRC networks, however, will automatically forward a <em>server password</"
-#| "em> to NickServ. On these networks, you can use the IRC password in "
-#| "<app>Empathy</app> to identify yourself to NickServ. The popular FreeNode "
-#| "network is known to have this feature."
-msgid ""
-"<app>Empathy</app> does not currently support nickname registration. Some "
-"IRC networks, however, will automatically forward a <em>server password</em> "
-"to NickServ. On these networks, you can use the IRC password in "
-"<app>Empathy</app> to identify yourself to NickServ. The popular freenode "
-"network is known to have this feature."
-msgstr ""
-"Attualmente <app>Empathy</app> non supporta la registrazione del soprannome. "
-"Alcune reti IRC, comunque, inoltrano automaticamente una <em>server "
-"password</em> al NickServ ed è quindi possibile utilizzare la password "
-"impostata nei dettagli dell'account IRC di <app>Empathy</app> per "
-"identificarsi al NickServ. La rete FreeNode sfrutta questa funzionalità."
-
-#: C/irc-nick-password.page:46(p)
-msgid "To set an IRC server password:"
-msgstr "Per impostare una password per il server IRC:"
-
-#: C/irc-nick-password.page:54(p)
-msgid "Select the IRC account from the list on the left of the dialog."
-msgstr ""
-"Selezionare l'account IRC da disabilitare dall'elenco a sinistra del dialogo."
-
-#: C/irc-nick-password.page:57(p)
-msgid ""
-"In the <gui>Password</gui> field, type the password you used to register "
-"your nikcname."
-msgstr ""
-"Nel campo <gui>Password</gui>, digitare la password usate per registrare il "
-"proprio soprannome."
-
-#: C/irc-nick-password.page:63(p) C/import-account.page:61(p)
-msgid "Click <gui style=\"button\">Apply</gui>."
-msgstr "Fare clic su <gui style=\"button\">Applica</gui>."
-
-#: C/irc-nick-password.page:69(p)
-msgid ""
-"These instructions only allow you to use a password-protected nickname on "
-"certain IRC networks. It is not currently possible to register an IRC "
-"nickname or change your nickname password using <app>Empathy</app>."
-msgstr ""
-"Queste istruzioni consentono di usare un soprannome protetto da password "
-"solo su alcune tipologie di reti IRC. Al momento non è possibile registrare "
-"un soprannome IRC o modificare la password utilizzando <app>Empathy</app>."
-
-#: C/irc-manage.page:9(desc)
-msgid "How to use IRC with <app>Empathy</app>."
-msgstr "Come usare IRC con <app>Empathy</app>."
-
-#: C/irc-manage.page:34(title)
-msgid "Internet Relay Chat (IRC)"
-msgstr "Internet Relay Chat (IRC)"
-
-#: C/irc-manage.page:37(p) C/account-irc.page:39(p)
-msgid ""
-"You must have the <sys>telepathy-idle</sys> package installed to use IRC in "
-"<app>Empathy</app>."
-msgstr ""
-"Per poter usare IRC con <app>Empathy</app> è necessario avere installato il "
-"pacchetto <sys>telepathy-idle</sys>."
-
-#: C/irc-manage.page:43(title)
-msgid "IRC Chat Rooms and Conversations"
-msgstr "Stanze di conversazione e conversazioni IRC"
-
-#: C/irc-manage.page:45(title)
-msgid "Chat Rooms and Conversations"
-msgstr "Stanze di conversazione e conversazioni"
-
-#: C/irc-manage.page:50(title)
-msgid "Common IRC Problems"
-msgstr "Problemi comuni con IRC"
-
-#: C/irc-manage.page:52(title) C/index.page:55(title)
-msgid "Common Problems"
-msgstr "Problemi comuni"
-
-#: C/irc-join-room.page:8(desc)
-msgid "Join an IRC channel."
-msgstr "Entrare in un canale IRC."
-
-#: C/irc-join-room.page:31(title)
-msgid "Join an IRC chat room"
-msgstr "Entrare in una stanza di conversazione"
-
-#: C/irc-join-room.page:33(p)
-msgid ""
-"You can join IRC chat rooms (also known as IRC channels) on any IRC network "
-"you’re connected to. To connect to an IRC network, see <link xref=\"add-"
-"account\"/> and <link xref=\"account-irc\"/>."
-msgstr ""
-"È possibile entrare in stanze di conversazione IRC (note anche come canali "
-"IRC) su qualisiasi rete IRC si sia connessi. Per connettersi a una rete IRC, "
-"consultare <link xref=\"add-account\"/> e <link xref=\"account-irc\"/>."
-
-#: C/irc-join-room.page:39(p) C/group-conversations.page:58(p)
-#: C/group-conversations.page:122(p)
-msgid ""
-"From the <gui>Contact List</gui> window, choose <guiseq><gui>Room</"
-"gui><gui>Join</gui></guiseq>."
-msgstr ""
-"Dalla finestra <gui>Elenco contatti</gui>, scegliere <guiseq><gui>Stanza</"
-"gui><gui>Entra</gui></guiseq>."
-
-#: C/irc-join-room.page:45(p)
-msgid ""
-"From the <gui>Account</gui> drop-down list, select the IRC account that "
-"corresponds to the network you want to use."
-msgstr ""
-"Dall'elenco a discesa <gui>Account</gui>, selezionare l'account IRC che "
-"corrisponde alla rete da usare."
-
-#: C/irc-join-room.page:51(p)
-msgid ""
-"In the <gui>Room</gui> text box, type the name of the channel you want to "
-"join. IRC channel names start with the hash character (<sys>#</sys>)."
-msgstr ""
-"Nella casella di testo <gui>Stanza</gui>, digitare il nome del canale in cui "
-"entrare. I nomi dei canali IRC iniziano tutti col carattere cancelletto "
-"(<sys>#</sys>)."
-
-#: C/irc-join-room.page:57(p)
-msgid "Click <gui>Join</gui> to enter the room."
-msgstr "Fare clic su <gui>Entra</gui> per entrare nella stanza."
-
-#: C/irc-join-room.page:64(p)
-msgid ""
-"To join multiple rooms, you need to repeat the steps above for each room."
-msgstr ""
-"Per poter entrare in più stanze di conversazione, è necessario ripetere i "
-"passi precedenti per ciascuna stanza."
-
-#: C/irc-join-pwd.page:9(desc)
-msgid "Enter password-protected IRC chat rooms."
-msgstr "Entrare in stanze di conversazione IRC protette da password."
-
-#: C/irc-join-pwd.page:25(title)
-msgid "Join a protected IRC chat room"
-msgstr "Entrare in una stanza di conversazione IRC protetta"
-
-#: C/irc-join-pwd.page:27(p)
-#| msgid ""
-#| "On some IRC networks, private IRC rooms may be protected with a password."
-msgid ""
-"On some IRC networks, private IRC rooms may be protected with a password. If "
-"you know the password, use the following steps to join:"
-msgstr ""
-"In alcune reti IRC, le stanze IRC private possono essere protette tramite "
-"una password. Se si conosce la password della stanza, procedere come segue:"
-
-#: C/irc-join-pwd.page:33(p)
-#| msgid "<link xref=\"irc-join-room\">Join the room</link>."
-msgid "<link xref=\"irc-join-room\">Join the room</link> as normal."
-msgstr "<link xref=\"irc-join-room\">Entrare nella stanza</link>."
-
-#: C/irc-join-pwd.page:38(p)
-#| msgid ""
-#| "In the <gui>This room is protected by a password</gui> text box, type the "
-#| "IRC room password, and click on <gui style=\"button\">Join</gui>."
-msgid ""
-"Empathy will prompt you for a password. Enter the password for the IRC chat "
-"room and click <gui style=\"button\">Join</gui>."
-msgstr ""
-"Verrà richiesto di inserire una password. Digitare la password per quella "
-"stanza e fare clic su <gui style=\"button\">Entra</gui>."
-
-#: C/irc-commands.page:7(desc)
-msgid "The supported IRC commands."
-msgstr "I comandi IRC supportati."
-
-#: C/irc-commands.page:18(title)
-msgid "Supported IRC commands"
-msgstr "Comandi IRC supportati"
-
-#: C/irc-commands.page:19(p)
-msgid ""
-"To see the list of the supported IRC commands, in a chat room type <input>/"
-"help</input> and press <key>Enter</key>."
-msgstr ""
-"Per visualizzare l'elenco dei comandi IRC supportati, in una stanza di "
-"conversazione digitare <input>/help</input> e premere <key>Invio</key>."
-
-#: C/irc-commands.page:24(p)
-msgid "All commands available have a small description on their usage."
-msgstr ""
-"Tutti i comandi disponibili presentano una breve descrizioni sul loro uso."
-
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/introduction.page:41(None)
-msgid ""
-"@@image: 'figures/empathy-main-window.png'; "
-"md5=489ba00b0fc377aba4c691210b6e0650"
-msgstr "fatto"
-
-#: C/introduction.page:9(desc)
-msgid "Introduction to the <app>Empathy</app> instant messenger."
-msgstr ""
-"Introduzione al programma di messaggistica istantanea <app>Empathy</app>."
-
-#: C/introduction.page:21(title)
-msgid "Introduction"
-msgstr "Introduzione"
-
-#: C/introduction.page:23(p)
-#| msgid ""
-#| "<app>Empathy</app> is an instant messaging application for the GNOME "
-#| "Desktop. It supports text messaging, voice &amp; video call, file "
-#| "transfers and all the most used messaging systems such as MSN and Google "
-#| "Talk."
-msgid ""
-"<app>Empathy</app> is an instant messaging application for the GNOME "
-"Desktop. It supports text messaging, voice &amp; video calls, file "
-"transfers, and all the most used messaging systems such as MSN and Google "
-"Talk."
-msgstr ""
-"<app>Empathy</app> è un'applicazione per la messaggistica istantanea per lo "
-"GNOME Desktop. Supporta messaggi testuali, chiamate audio e video, invio di "
-"file e tutti i più usati sistemi di messaggistica come MSN e Google Talk."
-
-#: C/introduction.page:28(p)
-msgid ""
-"<app>Empathy</app> includes features that help you better collaborate while "
-"at work, and that let you easily keep in touch with your friends."
-msgstr ""
-"<app>Empathy</app> è dotato di funzionalità che consentono di collaborare al "
-"meglio quando si è al lavoro e di mantenere facilmente i contatti con i "
-"propri amici."
-
-#: C/introduction.page:32(p)
-#| msgid ""
-#| "You can group all the conversations in a single window, or have multiple "
-#| "windows for different kind of conversations; easily search through your "
-#| "previous conversations, and share your desktop in just two clicks."
-msgid ""
-"Using <app>Empathy</app>, you can group all the conversations in a single "
-"window, have multiple windows for different kind of conversations, easily "
-"search through your previous conversations, and share your desktop in just "
-"two clicks."
-msgstr ""
-"Utilizzando <app>Empathy</app> è possibile raggruppare le conversazioni in "
-"una singola finestra o avere diverse finestre in base al tipo di "
-"conversazione; è possibile eseguire ricerche tra le conversazioni precedenti "
-"e condividere il proprio desktop in pochi clic."
-
-#: C/introduction.page:39(title)
-msgid "<gui>Contact List</gui> window"
-msgstr "Finestra <gui>Elenco contatti</gui>"
-
-#: C/introduction.page:40(desc)
-msgid "<app>Empathy</app> main window"
-msgstr "La finestra principale di <app>Empathy</app>"
-
-#: C/introduction.page:42(p)
-msgid "<app>Empathy</app> main window."
-msgstr "Finestra principale di <app>Empathy</app>."
-
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/index.page:28(None)
-msgid ""
-"@@image: 'figures/empathy-logo.png'; md5=14568248b11d2cfe7992c5edd7e157e8"
-msgstr "non serve"
-
-#: C/index.page:7(title) C/index.page:8(title)
-#| msgid "Empathy Instant Messenger"
-msgid "Empathy Internet Messenger"
-msgstr "Messaggistica Internet Empathy"
-
-#: C/index.page:27(title)
-#| msgid ""
-#| "<media type=\"image\" mime=\"image/png\" src=\"figures/empathy-logo.png"
-#| "\">Empathy Instant Messenger logo</media> Empathy Instant Messenger"
-msgid ""
-"<media type=\"image\" mime=\"image/png\" src=\"figures/empathy-logo.png\"> "
-"Empathy Internet Messenger logo </media> Empathy Internet Messenger"
-msgstr ""
-"<media type=\"image\" mime=\"image/png\" src=\"figures/empathy-logo.png"
-"\">Logo di Messaggistica Internet Empathy</media> Messaggistica Internet "
-"Empathy"
-
-#: C/index.page:35(title)
-msgid "Account Management"
-msgstr "Gestione degli account"
-
-#: C/index.page:39(title)
-msgid "Contact Management"
-msgstr "Gestione dei contatti"
-
-#: C/index.page:43(title)
-msgid "Text Conversations"
-msgstr "Conversazioni testuali"
-
-#: C/index.page:47(title)
-msgid "Audio and Video Conversations"
-msgstr "Conversazioni audio e video"
-
-#: C/index.page:51(title)
-msgid "Advanced Actions"
-msgstr "Operazioni avanzate"
-
-#: C/import-account.page:10(desc)
-msgid "Import an account from another instant messaging application."
-msgstr "Importare un account da un'altra applicazioni di messaggistica."
-
-#: C/import-account.page:19(name)
-msgid "Peter Haslam"
-msgstr "Peter Haslam"
-
-#: C/import-account.page:20(email)
-msgid "peter.haslam@freenet.de"
-msgstr "peter.haslam@freenet.de"
-
-#: C/import-account.page:42(title)
-msgid "Import an existing account"
-msgstr "Importare un account esistente"
-
-#: C/import-account.page:44(p)
-msgid ""
-"The first time you run <app>Empathy</app>, it will offer to import your "
-"accounts from other instant messaging applications. Currently, the only "
-"supported application is <app>Pidgin</app>."
-msgstr ""
-"La prima volta che viene avviato <app>Empathy</app>, è possibile importare i "
-"propri account da altre applicazioni di messaggistica istantanea. Al "
-"momento, la sola applicazione supportata è <app>Pidgin</app>."
-
-#: C/import-account.page:50(p)
-msgid ""
-"Run <app>Empathy</app> for the first time. An assistant will offer you a "
-"number of options to create new accounts."
-msgstr ""
-"Avviare <app>Empathy</app> per la prima volta. Viene presentato un "
-"assistente con diverse opzioni per creare nuovi account."
-
-#: C/import-account.page:54(p)
-msgid ""
-"Select <gui>Yes, import my account details from</gui> and click "
-"<gui>Forward</gui>."
-msgstr ""
-"Scegliere <gui>Sì, importare gli account da</gui> e fare clic su "
-"<gui>Avanti</gui>."
-
-#: C/import-account.page:58(p)
-msgid "Select the check box next to each account you wish to import."
-msgstr ""
-"Selezionare la casella di testo a fianco di ciascun account da importare."
-
-#: C/import-account.page:66(p)
-msgid ""
-"It is not currently possible to import accounts after you have completed the "
-"first-run assistant."
-msgstr ""
-"Al momento non è possibile importare gli account una volta completati i "
-"passi dell'assistente dopo il primo avvio dell'applicazione."
-
-#: C/hide-contacts.page:8(desc)
-msgid "Hide the offline contacts from your <gui>Contact List</gui>."
-msgstr ""
-"Nascondere i contatti fuori rete dal proprio <gui>Elenco contatti</gui>."
-
-#: C/hide-contacts.page:19(title)
-msgid "Hide offline contacts"
-msgstr "Nascondere i contatti fuori rete"
-
-#: C/hide-contacts.page:21(p)
-msgid ""
-"Normally, <app>Empathy</app> shows all your contacts: those that are online, "
-"with which you can have a conversation, and also those that are offline."
-msgstr ""
-"Normalmente <app>Empathy</app> mostra tutti i contatti: quelli che sono "
-"collegati in rete, con cui è possibile avere conversazioni, e anche quelli "
-"che risultano fuori rete"
-
-#: C/hide-contacts.page:25(p)
-msgid "To hide the contacts that are offline:"
-msgstr "Per nascondere i contatti fuori rete:"
-
-#: C/hide-contacts.page:31(p)
-msgid ""
-"From the <gui>Contact List</gui> window, choose <guiseq><gui>View</"
-"gui><gui>Offline Contacts</gui></guiseq>, or press <keyseq><key>Ctrl</"
-"key><key>H</key></keyseq>."
-msgstr ""
-"Dalla finestra <gui>Elenco contatti</gui>, scegliere "
-"<guiseq><gui>Visualizza</gui><gui>Contatti fuori rete</gui></guiseq> o "
-"premere <keyseq><key>Ctrl</key><key>H</key></keyseq>."
-
-#: C/hide-contacts.page:36(p)
-msgid "To show the offline contacts again, repeat the same procedure above."
-msgstr ""
-"Per mostrare nuovamente i contatti fuori rete, ripetere la procedura "
-"precedente."
-
-#: C/group-conversations.page:8(desc)
-msgid "Start or join a group conversation with your contacts."
-msgstr ""
-"Avviare o entrare in una conversazione di gruppo con i propri contatti."
-
-#: C/group-conversations.page:34(title)
-msgid "Group conversations"
-msgstr "Conversazioni di gruppo"
-
-#: C/group-conversations.page:36(p)
-msgid ""
-"Group conversations permits you to have text conversations with more than "
-"one contact at the same time."
-msgstr ""
-"Le conversazioni di gruppo consentono di tenere conversazioni testuali con "
-"più di un contatto."
-
-#: C/group-conversations.page:40(p)
-msgid ""
-"To have a group conversation you need to have a registered account with "
-"either Jabber or Google Talk, or a People Nearby account."
-msgstr ""
-"Per tenere una conversazione di gruppo è necessario avere un account "
-"registrato con Jabber o con Google Talk oppure un account «Persone nelle "
-"vicinanze»."
-
-#: C/group-conversations.page:46(p)
-msgid ""
-"You can have a group conversation only with the contacts that are using the "
-"same service as yours."
-msgstr ""
-"È possibile tenere una conversazione di gruppo solo con i contatti che "
-"utilizzano lo stesso servizio."
-
-#: C/group-conversations.page:54(title)
-msgid "Start a group conversation"
-msgstr "Avviare una conversazione di gruppo"
-
-#: C/group-conversations.page:63(p)
-msgid ""
-"From the <gui>Account</gui> drop-down list, select the account you want to "
-"use for the group conversation."
-msgstr ""
-"Dall'elenco a discesa <gui>Account</gui>, selezionare l'account da usare per "
-"la conversazione di gruppo."
-
-#: C/group-conversations.page:69(p)
-msgid ""
-"In the <gui>Server</gui> text box, type the name of server in which the "
-"conversation will be hosted."
-msgstr ""
-"Nella casella di testo <gui>Server</gui> digitare il nome del server in cui "
-"verrà ospitata la conversazione."
-
-#: C/group-conversations.page:73(p)
-msgid "Leave it empty if it will be on the current server."
-msgstr "Lasciare vuoto se si trova sul server attuale."
-
-#: C/group-conversations.page:78(p)
-msgid ""
-"In the <gui>Room</gui> text box, type the name you want to give to the "
-"conversation."
-msgstr ""
-"Nella casella di testo <gui>Stanza</gui> digitare il nome da dare alla "
-"conversazione."
-
-#: C/group-conversations.page:82(p)
-msgid ""
-"This will be the name of the room you are going to have a conversation. This "
-"name will be publicly available for other people to join. It is not possible "
-"to create a private room."
-msgstr ""
-"Questo sarà il nome della stanza in cui sarà tenuta la conversazione di "
-"gruppo e sarà pubblicamente visibile affinché altre persone possano "
-"entrarvi. Non è possibile creare una stanza privata."
-
-#: C/group-conversations.page:90(p)
-msgid ""
-"To invite other contacts to join the group conversation, from the "
-"<gui>Contact List</gui> window, select the contact you want to invite, and "
-"perform one of the following:"
-msgstr ""
-"Per invitare altri contatti a entrare nella conversazione, dalla finestra "
-"<gui>Elenco contatti</gui>, selezionare il contatto da inviare ed eseguire "
-"una delle seguenti azioni:"
-
-#: C/group-conversations.page:97(p)
-msgid "Right-click on the contact and choose <gui>Invite to chatroom</gui>."
-msgstr ""
-"Fare clic col pulsante destro del mouse sul nome del contatto e scegliere "
-"<gui>Invita nella stanza</gui>."
-
-#: C/group-conversations.page:102(p)
-msgid ""
-"Choose <guiseq><gui>Edit</gui><gui>Contact</gui><gui>Invite to chatroom</"
-"gui></guiseq>."
-msgstr ""
-"Scegliere <guiseq><gui>Modifica</gui><gui>Contatto</gui><gui>Invita nella "
-"stanza</gui></guiseq>."
-
-#: C/group-conversations.page:107(p)
-msgid ""
-"If you have more than one group conversation open, select the one you want "
-"to invite your contacts."
-msgstr ""
-"Se sono aperte più conversazioni di gruppo, selezionare quella in cui "
-"invitare i propri contatti."
-
-#: C/group-conversations.page:118(title)
-msgid "Join a group conversation"
-msgstr "Entrare in una conversazione di gruppo"
-
-#: C/group-conversations.page:128(p)
-msgid "Expand the <gui>Room List</gui> section to see all the existing rooms."
-msgstr ""
-"Espandere la sezione <gui>Elenco stanze</gui> per visualizzare tutte le "
-"stanze esistenti."
-
-#: C/group-conversations.page:133(p)
-msgid "Double-click on the name of a room to join it."
-msgstr "Fare doppio-clic sul nome della stanza in cui entrare."
-
-#: C/group-conversations.page:139(p)
-msgid ""
-"It is not possible to join all existing rooms. Some of the rooms might "
-"require a password, or might be invitation only. <app>Empathy</app> does not "
-"support these kind of rooms."
-msgstr ""
-"Non è possibile entrare in tutte le stanze esistenti. Alcune di queste "
-"potrebbero richiedere una password o essere a invito. <app>Empathy</app> non "
-"supporta questo tipo di stanze."
-
-#: C/geolocation-what-is.page:9(desc)
-msgid "Understanding geolocation."
-msgstr "Comprendere la geo-localizzazione."
-
-#: C/geolocation-what-is.page:33(title)
-msgid "What is geolocation"
-msgstr "Cos'è la geo-localizzazione"
-
-#: C/geolocation-what-is.page:35(p)
-msgid ""
-"Geolocation allows you to identify the real geographical location of a "
-"computer or a device connected to the Internet."
-msgstr ""
-"La geo-localizzazione consente di identificare la vera posizione geografica "
-"di un computer o di un dispositivo collegato a Internet."
-
-#: C/geolocation-what-is.page:37(p)
-msgid "With geolocation in <app>Empathy</app> you can:"
-msgstr ""
-"Attraverso l'uso della geo-localizzazione in <app>Empathy</app> è possibile:"
-
-#: C/geolocation-what-is.page:42(p)
-msgid "Publish your geographical location to your contacts."
-msgstr "Pubblicare la posizione geografica ai propri contatti."
-
-#: C/geolocation-what-is.page:47(p)
-msgid "See your contacts’ geographical location and quickly contact them."
-msgstr ""
-"Visualizzare la posizione geografica dei propri contatti e avviare "
-"rapidamente una conversazione con loro"
-
-#: C/geolocation-what-is.page:52(p)
-msgid ""
-"Set the accuracy of your location and the device used to discover your "
-"location."
-msgstr ""
-"Impostare la precisione della propria posizione e il dispositivo usato per "
-"determinare tale posizione."
-
-#: C/geolocation-what-is.page:60(p)
-msgid ""
-"In order to see your contacts’ geographical locations, they need to use a "
-"service and an application that supports geolocation."
-msgstr ""
-"Per poter visualizzare la posizione geografica dei propri contatti è "
-"necessario loro utilizzino un servizio e un programma che supportino la geo-"
-"localizzazione."
-
-#: C/geolocation-turn.page:9(desc)
-msgid "How to activate and deactivate geolocation in <app>Empathy</app>."
-msgstr ""
-"Come attivare e disattivare la geo-localizzazione in <app>Empathy</app>."
-
-#: C/geolocation-turn.page:33(title)
-msgid "Activate/Deactivate geolocation"
-msgstr "Attivare/Disattivare la geo-localizzazione"
-
-#: C/geolocation-turn.page:37(p)
-msgid "Choose <guiseq><gui>Edit</gui><gui>Preferences</gui></guiseq>."
-msgstr "Scegliere <guiseq><gui>Modifica</gui><gui>Preferenze</gui></guiseq>."
-
-#: C/geolocation-turn.page:42(p)
-msgid "Select the <gui>Location</gui> tab."
-msgstr "Selezionare la scheda <gui>Posizione geografica</gui>."
-
-#: C/geolocation-turn.page:47(p)
-msgid ""
-"Select <gui>Publish location to my contacts</gui> to activate geolocation."
-msgstr ""
-"Selezionare <gui>Pubblicare la posizione geografica ai propri contatti</gui> "
-"per attivare la geo-localizzazione."
-
-#: C/geolocation-turn.page:50(p)
-msgid "To deactivate geolocation, deselect it."
-msgstr "Per disattivare la geo-localizzazione, deselezionarlo."
-
-#: C/geolocation-turn.page:55(p)
-msgid ""
-"To increase the accuracy of your position, deselect <gui>Reduce location "
-"accuracy</gui>."
-msgstr ""
-"Per aumentare la precisione della propria posizione, deselezionare "
-"<gui>Ridurre la precisione della posizione geografica</gui>."
-
-#: C/geolocation-turn.page:61(p)
-#| msgid ""
-#| "If you have an external device like a GPS or want to send a more accurate "
-#| "position, select the appropriate option in the <gui>Geoclue Settings</"
-#| "gui> section."
-msgid ""
-"If you have an external device like a GPS or want to send a more accurate "
-"position, select the appropriate option in the <gui>Location sources</gui> "
-"section."
-msgstr ""
-"Se si dispone di un dispositivo esterno come un GPS o per inviare "
-"informazioni più precise sulla posizione, selezionare le opzioni appropriate "
-"nella sezione <gui>Sorgenti per la posizione</gui>."
-
-#: C/geolocation-supported.page:7(desc)
-msgid "Services that supports geolocation and compatibility."
-msgstr "Servizi che supportano la geo-localizzazione e compatibilità."
-
-#: C/geolocation-supported.page:31(title)
-msgid "Supported services"
-msgstr "Servizi supportati"
-
-#: C/geolocation-supported.page:33(p)
-msgid ""
-"The geolocation feature at the moment is compatible only with the Jabber "
-"service. In order to use it, you and your contacts need to have a Jabber "
-"account."
-msgstr ""
-"Al momento, la funzionalità di geo-localizzazione è compatibile solo con il "
-"servizio Jabber. Affinché sia possibile usarla, è necessario disporre di un "
-"account Jabber e che anche i propri contatti ne abbiano uno."
-
-#: C/geolocation-supported.page:39(p)
-msgid ""
-"It is necessary that also the server you are using supports the geolocation "
-"feature. Most of the Jabber servers support it. See your service website "
-"documentation for more information."
-msgstr ""
-"È necessario anche che il server utilizzato supporti la geo-localizzazione. "
-"La maggior parte dei server Jabber la supporta. Per maggiori informazioni, "
-"consultare la documentazione presente nel sito web del proprio servizio."
-
-#: C/geolocation-supported.page:47(title)
-msgid "Compatibility"
-msgstr "Compatibilità"
-
-#: C/geolocation-supported.page:49(p)
-msgid ""
-"<app>Empathy</app> geolocation feature is not compatible with other "
-"geographical position services such as <em>Google Latitude</em>, <em>Yahoo "
-"Fire Eagle</em> or <em>Brightkite</em>."
-msgstr ""
-"La funzionalità di geo-localizzazione di <app>Empathy</app> non è "
-"compatibile con altri servizi di posizionamento geografico come <em>Google "
-"Latitude</em>, <em>Yahoo Fire Eagle</em> o <em>Brightkite</em>."
-
-#: C/geolocation-privacy.page:8(desc)
-msgid "What information are sent and to who."
-msgstr "Quali informazioni sono inviate e a chi."
-
-#: C/geolocation-privacy.page:32(title)
-msgid "Geolocation Privacy"
-msgstr "Privacy della geo-localizzazione"
-
-#: C/geolocation-privacy.page:35(title)
-msgid "What information is sent"
-msgstr "Informazioni inviate"
-
-#: C/geolocation-privacy.page:36(p)
-msgid ""
-"What is possible to send is: your country, region, locality, area, street, "
-"building, floor, room, and postal code, longitude, latitude and altitude, "
-"speed and bearing."
-msgstr ""
-"Le informazioni che è possibile inviare sono: il proprio Paese, regione, "
-"località, area, via, palazzo, piano, stanza e codice postale, longitudine, "
-"latitudine a altitudine, velocità e orientamento."
-
-#: C/geolocation-privacy.page:40(p)
-msgid ""
-"The accuracy and the quantity of information about your geographical "
-"position are based on the software or on the infrastructure used to discover "
-"your position."
-msgstr ""
-"La precisione e la quantità di informazioni della propria posizione "
-"geografica sono basate sul software o sull'infrastruttura utilizzata per "
-"scoprirla."
-
-#: C/geolocation-privacy.page:44(p)
-msgid ""
-"Different kind of networks may have different accuracy settings, and may "
-"send different information. The use of external devices such as GPS or "
-"mobile phone will increase the accuracy of the information sent."
-msgstr ""
-"Diversi tipi di rete possono avere diverse impostazioni relative alla "
-"precisione e possono inviare diverse informazioni. L'utilizzo di dispositivi "
-"come GPS e telefoni cellulari aumenta la precisione delle informazioni "
-"inviate."
-
-#: C/geolocation-privacy.page:49(p)
-msgid ""
-"When the privacy mode is enabled, nothing more precise than your city will "
-"be sent, even if you are using an external device."
-msgstr ""
-"Quando la modalità privacy è abilitata, non viene inviato niente di più "
-"preciso della propria città, anche se viene utilizzato un dispositivo "
-"esterno."
-
-#: C/geolocation-privacy.page:56(title)
-msgid "Who can see the information sent"
-msgstr "Chi può visualizzare le informazioni inviate"
-
-#: C/geolocation-privacy.page:57(p)
-msgid "Only your contacts can see your geographical position."
-msgstr ""
-"Solo i propri contatti possono visualizzare la posizione geografica "
-"personale."
-
-#: C/geolocation-privacy.page:63(title)
-msgid "What is the privacy mode"
-msgstr "Cos'è la modalità privacy"
-
-#: C/geolocation-privacy.page:64(p)
-msgid ""
-"The privacy mode, enabled by default, is a reduced accuracy mode that will "
-"decrease the accuracy of the geographical position sent to your contacts."
-msgstr ""
-"La modalità privacy, abilitata in modo predefinito, è una modalità a "
-"precisione ridotta che riduce la precisione della posizione geografica "
-"inviata ai propri contatti."
-
-#: C/geolocation-privacy.page:71(title)
-msgid "Privacy overview"
-msgstr "Panoramica della privacy"
-
-#: C/geolocation-privacy.page:72(p)
-msgid ""
-"Overview of the various geolocation privacy settings in <app>Empathy</app>."
-msgstr ""
-"Panoramica delle varie impostazioni in <app>Empathy</app> per preservare la "
-"privacy."
-
-#: C/geolocation-privacy.page:77(p)
-msgid "Geolocation is not enabled by default."
-msgstr "La geo-localizzazione non è abilitata in modo predefinito."
-
-#: C/geolocation-privacy.page:82(p)
-msgid "Privacy mode is enabled by default."
-msgstr "La modalità privacy è abilitata in modo predefinito."
-
-#: C/geolocation-privacy.page:87(p)
-msgid ""
-"Privacy mode prevails even when using external and more precise devices."
-msgstr ""
-"La modalità privacy prevale anche quando sono in uso dispositivi esterni e "
-"più precisi."
-
-#: C/geolocation-privacy.page:92(p)
-msgid "Only your contacts can see your position."
-msgstr ""
-"Solo i propri contatti possono visualizzare la posizione geografica "
-"personale."
-
-#: C/geolocation-not-showing.page:8(desc)
-msgid "<app>Empathy</app> does not publish my geographical position."
-msgstr "<app>Empathy</app> non pubblica la propria posizione geografica."
-
-#: C/geolocation-not-showing.page:32(title)
-msgid "Geographical position not published"
-msgstr "La posizione geografica non viene pubblicata"
-
-#: C/geolocation-not-showing.page:34(p)
-msgid ""
-"If your contacts cannot see your location, <app>Empathy</app> might not be "
-"able to discover with a good margin of precision your geographical position."
-msgstr ""
-"Se i propri contatti non possono visualizzare la posizione geografica "
-"personale, <app>Empathy</app> potrebbe non essere in grado di scoprirla con "
-"una sufficiente precisione."
-
-#: C/geolocation-not-showing.page:38(p)
-msgid ""
-"In this case, your position will not be published, but you are still able to "
-"see the location of your contacts."
-msgstr ""
-"In questo caso, la propria posizione geografica non viene pubblicata, ma è "
-"ancora possibile visualizzare quella dei propri contatti."
-
-#: C/geolocation-not-showing.page:42(p)
-msgid ""
-"If you want to publish your geographical position, you can try to use an "
-"external device such as a GPS."
-msgstr ""
-"Per pubblicare la propria posizione geografica, è possibile provare a "
-"utilizzare un dispositivo esterno come un GPS."
-
-#: C/geolocation-not-showing.page:48(p)
-msgid ""
-"In order to publish your geographical location, your Jabber server needs to "
-"support the Personal Eventing Protocal (PEP). A list of <link href=\"http://"
-"coccinella.im/servers/servers_by_pubsub_pep.html\">servers which support "
-"PEP</link> is maintained online. Google Talk does not support this feature "
-"at this time."
-msgstr ""
-"Per poter pubblicare la propria posizione geografica, il server Jabber in "
-"uso deve supportare il protocollo PEP (Personal Eventing Protocal). Un "
-"elenco di <link href=\"http://coccinella.im/servers/servers_by_pubsub_pep."
-"html\">server che supportano questo protocollo</link> viene mantenuto su "
-"Internet. Google Talk al momento non supporta questa funzionalità."
-
-#: C/geolocation.page:8(desc)
-msgid "Use and understand geolocation in <app>Empathy</app>."
-msgstr "Usare e comprendere la geo-localizzazione in <app>Empathy</app>."
-
-#: C/geolocation.page:32(title)
-msgid "Geographical position"
-msgstr "Posizione geografica"
-
-#: C/geolocation.page:35(title)
-msgid "Geolocation"
-msgstr "Geo-localizzazione"
-
-#: C/geolocation.page:39(title)
-msgid "Fix common problems"
-msgstr "Risolvere problemi comuni"
-
-#: C/favorite-rooms.page:10(desc)
-msgid "Set, join and manage favorite rooms."
-msgstr "Impostare, gestire ed entrare in stanze preferite."
-
-#: C/favorite-rooms.page:29(title)
-msgid "Favorite rooms"
-msgstr "Stanze preferite"
-
-#: C/favorite-rooms.page:32(title)
-msgid "Set a room as a favorite"
-msgstr "Impostare una stanza come preferita"
-
-#: C/favorite-rooms.page:35(p)
-msgid "Join a room."
-msgstr "Entrare in una stanza."
-
-#: C/favorite-rooms.page:40(p)
-msgid ""
-"See <link xref=\"irc-join-room\"/> for more information on how to join an "
-"IRC room."
-msgstr ""
-"Per maggiori informazioni su come entrare in una stanza IRC, consultare "
-"<link xref=\"irc-join-room\"/>."
-
-#: C/favorite-rooms.page:46(p)
-msgid ""
-"See <link xref=\"group-conversations\"/> for more information on how to "
-"start or join a group conversation."
-msgstr ""
-"Per maggiori informazioni su come entrare in una conversazione di gruppo, "
-"consultare <link xref=\"group-conversations\"/>."
-
-#: C/favorite-rooms.page:54(p)
-msgid ""
-"From the conversation window, choose <guiseq><gui>Conversation</"
-"gui><gui>Favorite Chat Room</gui></guiseq>."
-msgstr ""
-"Dalla finestra di conversazione, scegliere <guiseq><gui>Conversazione</"
-"gui><gui>Stanza preferita</gui></guiseq>."
-
-#: C/favorite-rooms.page:63(title)
-msgid "Join favorite rooms"
-msgstr "Entrare nelle stanze preferite."
-
-#: C/favorite-rooms.page:71(p)
-msgid "Press <key>F5</key>."
-msgstr "Premere <key>F5</key>."
-
-#: C/favorite-rooms.page:76(p)
-msgid ""
-"Choose <guiseq><gui>Room</gui><gui>Join Favorites</gui></guiseq>, to join "
-"all your favorite rooms."
-msgstr ""
-"Scegliere <guiseq><gui>Stanza</gui><gui>Entra nei preferiti</gui></guiseq>, "
-"per entrare in tutte le stanze preferite."
-
-#: C/favorite-rooms.page:82(p)
-msgid "Choose <gui>Room</gui>, and select the favorite room you want to join."
-msgstr ""
-"Scegliere <gui>Room</gui> e selezionare la stanza preferita in cui entrare."
-
-#: C/favorite-rooms.page:90(p)
-msgid ""
-"To join a favorite room, you need to be connected to the Internet and to "
-"your account."
-msgstr ""
-"Per poter entrare in una stanza preferita è necessario essere connessi a "
-"Internet e al proprio account."
-
-#: C/favorite-rooms.page:98(title)
-msgid "Manage favorite rooms"
-msgstr "Gestire le stanze preferite"
-
-#: C/favorite-rooms.page:101(p)
-msgid ""
-"From the <gui>Contact List</gui> window, choose <guiseq><gui>Room</"
-"gui><gui>Manage Favorites</gui></guiseq>."
-msgstr ""
-"Dalla finestra <gui>Elenco contatti</gui> scegliere <guiseq><gui>Stanza</"
-"gui><gui>Gestisci preferiti</gui></guiseq>."
-
-#: C/favorite-rooms.page:107(p)
-msgid ""
-"From the <gui>Account</gui> drop-down list, select the account you want to "
-"manage the favorite rooms of."
-msgstr ""
-"Dall'elenco a discesa <gui>Account</gui>, selezionare l'account di cui "
-"gestire le stanze preferite."
-
-#: C/favorite-rooms.page:111(p)
-msgid "Select <gui>All</gui> to see all you favorite rooms."
-msgstr "Selezionare <gui>Tutti</gui> per visualizzare tutti i preferiti."
-
-#: C/favorite-rooms.page:116(p)
-msgid "Select the favorite room you want to manage:"
-msgstr "Selezionare la stanza preferita da gestire:"
-
-#: C/favorite-rooms.page:121(p)
-msgid ""
-"Select the <gui>Auto-Connect</gui> check-box in order to automatically join "
-"that room when you connect to your account."
-msgstr ""
-"Selezionare la casella di scelta <gui>Connessione automatica</gui> per "
-"entrare automaticamente in quella stanza ogni volta che ci si collega col "
-"proprio account."
-
-#: C/favorite-rooms.page:127(p)
-msgid "Click on <gui>Remove</gui> to remove the room from your favorites."
-msgstr "Fare clic su <gui>Rimuovi</gui> per rimuovere la stanza dai preferiti."
-
-#: C/favorite-rooms.page:134(p)
-msgid "When done, click <gui>Close</gui>."
-msgstr "Quando finito, fare clic su <gui>Chiudi</gui>."
-
-#: C/disable-account.page:9(desc)
-msgid "Prevent <app>Empathy</app> from automatically logging in to an account."
-msgstr ""
-"Evitare che <app>Empathy</app> si colleghi automaticamente a un account."
-
-#: C/disable-account.page:39(title)
-msgid "Disable an account"
-msgstr "Disabilitare un account"
-
-#: C/disable-account.page:41(p)
-msgid ""
-"You can disable an account to prevent <app>Empathy</app> from logging in to "
-"it without removing the account entirely. You may wish to disable and re-"
-"enable an account if you only want to be logged in to the account at certain "
-"times, but you still want to use <app>Empathy</app> for other accounts."
-msgstr ""
-"È possibile disabilitare un account per evitare che <app>Empathy</app> vi si "
-"colleghi senza dover rimuovere completamente quell'account. Potrebbe essere "
-"necessario disabilitare e riabilitare un account per esservi connessi a "
-"determinati orari, ma continuando a usare <app>Empathy</app> con altri "
-"account."
-
-#: C/disable-account.page:52(p)
-msgid ""
-"Select the account you wish to disable from the accounts list on the left "
-"side of the window."
-msgstr ""
-"Selezionare l'account da disabilitare dall'elenco degli account nel riquadro "
-"sinistra della finestra."
-
-#: C/disable-account.page:56(p)
-msgid ""
-"Deselect <gui style=\"checkbox\">Enabled</gui> on the right side of the "
-"window."
-msgstr ""
-"Deselezionare la casella di scelta <gui style=\"checkbox\">Abilitato</gui> "
-"nella parte destra della finestra."
-
-#: C/disable-account.page:62(p)
-msgid ""
-"To re-enable the account, simply select <gui style=\"checkbox\">Enabled</"
-"gui>."
-msgstr ""
-"Per riabilitare l'account, selezionare <gui style=\"checkbox\">Abilitato</"
-"gui>."
-
-#: C/create-account.page:9(desc)
-msgid "Register for an account with one of the supported messaging services."
-msgstr "Registrare un account con uno dei servizi di messaggistica supportati."
-
-#: C/create-account.page:33(title)
-msgid "Register for a new account"
-msgstr "Registrare un nuovo account"
-
-#: C/create-account.page:35(p)
-msgid ""
-"Most account types require you to create an account with a account provider "
-"before you can connect using instant messaging applications like "
-"<app>Empathy</app>. With some account providers, you can use <app>Empathy</"
-"app> to register for a new account, using the same steps as you would to "
-"<link xref=\"add-account\">add an account</link>."
-msgstr ""
-"La maggior parte degli account richiede la registrazione con un fornitore "
-"del servizio prima di potersi collegare e usare applicazioni di "
-"messaggistica come <app>Empathy</app>. Con alcuni fornitori di servizi di "
-"messaggistica e possibile usare <app>Empathy</app> per registrare un nuovo "
-"account utilizzando gli stessi passi per <link xref=\"add-account"
-"\">aggiungere un account</link>."
-
-#: C/create-account.page:41(p)
-#| msgid ""
-#| "This page provides information on creating a new account for various "
-#| "types of accounts. Your account provider should give you a login ID and a "
-#| "password, as well as any additional information you need to connect with "
-#| "<app>Empathy</app>."
-msgid ""
-"This page provides information on creating a new account for various types "
-"of accounts. Your account provider should give you a login ID and a "
-"password, as well as any additional information you need to connect using "
-"<app>Empathy</app>."
-msgstr ""
-"Questa pagina fornisce informazioni su come creare un nuovo account per "
-"diversi tipi di account. Il fornitore del servizio dovrebbe fornire un "
-"identificativo di accesso e una password, oltre a tutte le altre "
-"informazioni necessarie per potersi collegare utilizzando <app>Empathy</app>."
-
-#: C/create-account.page:46(title)
-msgid "Facebook"
-msgstr "Facebook"
-
-#: C/create-account.page:47(p)
-#| msgid ""
-#| "Facebook is one of the most used social network. It provides users with "
-#| "the opportunity to create their own profile, and to communicate with "
-#| "their friends."
-msgid ""
-"Facebook is one of the most-used social networks. It allows users to create "
-"their own profile and to communicate with their friends."
-msgstr ""
-"Facebook è uno dei più utilizzati social network. Consente agli utenti di "
-"creare un proprio profilo e di comunicare con i propri amici."
-
-#: C/create-account.page:51(p)
-#| msgid ""
-#| "In order to use Facebook to communicate with your friends, you will need "
-#| "to create a new account from the website: <link href=\"http://www."
-#| "facebook.com\">www.facebook.com</link>."
-msgid ""
-"To use Facebook to communicate with your friends, you will need to create a "
-"new account from the website: <link href=\"http://www.facebook.com\">www."
-"facebook.com</link>."
-msgstr ""
-"Per poter utilizzare Facebook per comunicare con i propri amici, è "
-"necessario creare un nuovo account dal sito web: <link href=\"http://www."
-"facebook.com\">www.facebook.com</link>."
-
-#: C/create-account.page:59(title) C/audio-video.page:170(p)
-msgid "Jabber"
-msgstr "Jabber"
-
-#: C/create-account.page:61(p)
-msgid ""
-"Jabber is an open instant messaging system. Like email, Jabber allows you to "
-"choose your account provider and communicate with all other Jabber users, "
-"regardless of their account provider."
-msgstr ""
-"Jabber è un sistema di messaggistica aperto. Come l'email, Jabber consente "
-"di scegliere il proprio fornitore di servizio e di comunicare con tutti gli "
-"altri utenti Jabber, indipendentemente dal loro fornitore."
-
-#: C/create-account.page:65(p)
-msgid ""
-"You will need to create a new account with a Jabber provider. There are many "
-"free providers; one popular provider is <link href=\"http://register.jabber."
-"org/\">Jabber.org</link>."
-msgstr ""
-"È necessario creare una nuovo account con un fornitore del servizio. Sono "
-"disponibili molti fornitori, uno molto diffuso è <link href=\"http://"
-"register.jabber.org/\">Jabber.org</link>."
-
-#: C/create-account.page:70(p)
-msgid ""
-"If you use Google Mail or Google Talk, you already have a Jabber account. "
-"Google Talk is a Jabber service. Simply use your Google Mail address and "
-"password in <app>Empathy</app> to connect."
-msgstr ""
-"Se si usa Google Mail o Google Talk, si dispone già di un account Jabber: "
-"Google Talk è un servizio Jabber. Basta semplicemente usare l'indirizzo "
-"email e la password di Google in <app>Empathy</app>."
-
-#: C/create-account.page:77(title) C/audio-video.page:190(p)
-msgid "People Nearby"
-msgstr "Persone nelle vicinanze"
-
-#: C/create-account.page:79(p)
-msgid ""
-"You do not need to create an account with a service provider to use this "
-"feature. This service works whenever you are connected to a local network, "
-"such as a wireless hotspot. It automatically finds all other users on the "
-"network who are also using this service."
-msgstr ""
-"Non è necessario creare un account con un fornitore di servizio per questo "
-"tipo di account. Questo servizio funziona ogni qual volta ci si connette a "
-"una rete locale, come un <em>hotspot</em> senza fili. È in grado di rilevare "
-"automaticamente tutti gli utenti che utilizzano lo stesso servizio "
-"all'interno della rete."
-
-#: C/create-account.page:84(p)
-msgid "For more information, see <link xref=\"salut-protocol\"/>."
-msgstr "Per maggiori informazioni, consultare <link xref=\"salut-protocol\"/>."
-
-#: C/create-account.page:88(title) C/audio-video.page:205(p)
-msgid "SIP"
-msgstr "SIP"
-
-#: C/create-account.page:90(p)
-msgid ""
-"SIP is an open system which allows users to have audio and video "
-"conversations over the Internet. You need to create an account with a SIP "
-"provider. You can communicate with all other SIP users, regardless of which "
-"SIP provider they use."
-msgstr ""
-"SIP è un sistema aperto che consente di tenere conversazioni audio e video "
-"attraverso Internet. È necessario creare un account con un fornitore di "
-"servizi SIP. È possibile comunicare con tutti gli utenti SIP "
-"indipendentemente dal fornitore SIP utilizzato."
-
-#: C/create-account.page:95(p)
-msgid ""
-"There are a number of popular free SIP account providers; one popular "
-"provider is <link href=\"https://signup.sipphone.com/new-users/app?"
-"class=NewUser;proc=start\">Sipphone</link>."
-msgstr ""
-"Esistono molti fornitori di servizi SIP. Uno molto diffuso è <link href="
-"\"https://signup.sipphone.com/new-users/app?class=NewUser;proc=start"
-"\">Sipphone</link>."
-
-#: C/create-account.page:100(p)
-msgid ""
-"Due to technical differences, the free <link href=\"https://www.ekiga.net/"
-"index.php?page=register\">Ekiga.net</link> service does not currently work "
-"with <app>Empathy</app>."
-msgstr ""
-"A causa di differenze tecniche, al momento il servizio gratuito e libero "
-"<ulink type=\"http\" url=\"https://www.ekiga.net/index.php?page=register"
-"\">Ekiga</ulink> non funziona con <app>Empathy</app>."
-
-#: C/create-account.page:105(p)
-msgid ""
-"Some SIP providers allow you to call normal phones from your computer. "
-"Generally, you will need to subscribe to a paid service for this feature."
-msgstr ""
-"Alcuni fornitori di servizi SIP consentono di eseguire chiamate ai telefoni "
-"normali dal proprio computer. Generalmente è necessario abbonarsi a un "
-"servizio a pagamento per poter usufruire di questa possibilità."
-
-#: C/create-account.page:110(title) C/audio-video.page:165(p)
-msgid "IRC"
-msgstr "IRC"
-
-#: C/create-account.page:112(p)
-msgid ""
-"You do not need to register for an account to use IRC. Although you specify "
-"a nickname when you add an IRC account to <app>Empathy</app>, this nickname "
-"is only established each time you connect. If another user is using the "
-"nickname, you will need to choose a new nickname."
-msgstr ""
-"Non è necessario registrare un account per usare IRC. Benché venga "
-"specificato un soprannome quando viene aggiungo un account IRC in "
-"<app>Empathy</app>, questo soprannome viene creato ogni qual volta ci si "
-"colleghi. Se un altro utente sta usando quel soprannome, è necessario "
-"sceglierne un altro."
-
-#: C/create-account.page:117(p)
-msgid ""
-"Some IRC networks use a service called NickServ to allow users to protect "
-"their nicknames. See <link xref=\"irc-nick-password\"/> for more information."
-msgstr ""
-"Alcune reti IRC mettono a disposizione un servizio chiamato «NickServ» per "
-"consentire agli utenti di proteggere il proprio soprannome. Per maggiori "
-"informazioni, consultare <link xref=\"irc-nick-password\"/>."
-
-#: C/create-account.page:120(p)
-msgid ""
-"Some IRC servers are password protected. You will need to know the password "
-"to connect to these servers. Generally, these are private IRC networks."
-msgstr ""
-"Alcuni server IRC sono protetti da password ed è necessario conoscere la "
-"password per potersi collegare. Generalmente queste sono reti IRC private."
-
-#: C/create-account.page:125(title)
-msgid "Proprietary Services"
-msgstr "Servizi proprietari"
-
-#: C/create-account.page:127(p)
-msgid ""
-"There are many proprietary instant messaging services that have been "
-"developed by different companies or organizations. <app>Empathy</app> allows "
-"you to connect to an existing account for most popular services. To create a "
-"new account with one of these services, you will need to visit the service’s "
-"web site and agree to its terms of use."
-msgstr ""
-"Sono disponibili molti servizi di messaggistica istantanea proprietari, "
-"sviluppati da diverse aziende od organizzazioni. <app>Empathy</app> consente "
-"di collegarsi a un account esistente della maggior parte di questi servizi. "
-"Per creare un nuovo account con uno di questi servizi, è necessario "
-"visitarne il sito web e acconsentire ai termini d'uso."
-
-#: C/create-account.page:136(link) C/audio-video.page:135(p)
-msgid "AIM"
-msgstr "AIM"
-
-#: C/create-account.page:141(link) C/audio-video.page:160(p)
-msgid "ICQ"
-msgstr "ICQ"
-
-#: C/create-account.page:146(link) C/audio-video.page:175(p)
-msgid "MSN"
-msgstr "MSN"
-
-#: C/create-account.page:151(link) C/audio-video.page:210(p)
-msgid "Yahoo!"
-msgstr "Yahoo!"
-
-#: C/change-status.page:9(desc)
-msgid "Change your status to advertise your availability to your contacts."
-msgstr ""
-"Cambiare il proprio stato per indicare la disponibilità ad avere "
-"conversazioni."
-
-#: C/change-status.page:34(title)
-msgid "Change your status"
-msgstr "Cambiare il proprio stato"
-
-#: C/change-status.page:36(p)
-msgid ""
-"You can set your status to indicate your availability to your contacts. "
-"<app>Empathy</app> allows you to select from a list of defined statuses."
-msgstr ""
-"È possibile impostare il proprio stato per indicare la propria disponibilità "
-"ai contatti. <app>Empathy</app> consente di selezionare diversi stati "
-"predefiniti."
-
-#: C/change-status.page:41(p)
-msgid ""
-"Click on the drop-down list at the top of the <gui>Contact List</gui> window."
-msgstr ""
-"Fare clic sull'elenco a discesa nella parte superiore della finestra "
-"<gui>Elenco contatti</gui>."
-
-#: C/change-status.page:46(p)
-msgid "Select a status from the list."
-msgstr "Selezionare uno stato dell'elenco."
-
-#: C/change-status.page:52(p)
-msgid ""
-"See <link xref=\"status-icons\"/> for a list of the built-in statuses and "
-"what they mean. You can also <link xref=\"set-custom-message\">add custom "
-"status messages</link> to provide more information about your availability "
-"to your contacts."
-msgstr ""
-"Per maggiori informazioni sugli stati predefiniti e il loro significato, "
-"consultare <link xref=\"status-icons\"/>. È anche possibile <link xref=\"set-"
-"custom-message\">aggiungere messaggi di stato personalizzati</link> per "
-"fornire maggiori informazioni ai contatti riguardo la propria disponibilità."
-
-#: C/change-status.page:58(p)
-msgid ""
-"If you do not use your computer for a while, or if the screensaver is on, "
-"the status will be automatically set to Away."
-msgstr ""
-"Se il computer non viene utilizzato per un po' di tempo o se viene attivato "
-"il salvaschermo, lo stato viene impostato automaticamente su «Assente»."
-
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/audio-video.page:58(None)
-msgid ""
-"@@image: 'figures/audio-input-microphone.png'; "
-"md5=8d89026b66a263a3bc5b1f0665948567"
-msgstr "non serve"
-
-#: C/audio-video.page:8(desc)
-msgid ""
-"Information on when it is possible to have an audio or video conversation."
-msgstr ""
-"Informazioni su quando è possibile avere una conversazione audio o video."
-
-#: C/audio-video.page:32(title)
-msgid "Audio and video support"
-msgstr "Supporto audio e video"
-
-#: C/audio-video.page:34(p)
-msgid ""
-"You can only have audio and video conversation with contacts who are using "
-"an application which also supports this feature. When your contacts support "
-"audio or video conversations, you will see the following icons next to their "
-"names in the contact list:"
-msgstr ""
-"Le conversazioni audio e video sono possibili solamente con i contatti che "
-"utilizzano un'applicazione in grado di supportarle. Quando i propri contatti "
-"supportano le conversazioni audio o video, è possibile visualizzare le "
-"seguenti icone a fianco dei nomi nell'elenco contatti:"
-
-#: C/audio-video.page:43(p)
-msgid "Icon"
-msgstr "Icona"
-
-#: C/audio-video.page:48(p)
-msgid "Description"
-msgstr "Descrizione"
-
-#: C/audio-video.page:58(media)
-msgid "Icon for audio conversation"
-msgstr "Icona per le conversazioni audio"
-
-#: C/audio-video.page:64(p)
-msgid "The contact is able to have an audio conversation."
-msgstr "Il contatto è in grado di avere conversazioni audio."
-
-#: C/audio-video.page:70(media)
-msgid "Icon for video conversation"
-msgstr "Icona per le conversazioni video"
-
-#: C/audio-video.page:76(p)
-msgid "The contact is able to have a video conversation."
-msgstr "Il contatto è in grado di avere conversazioni video."
-
-#: C/audio-video.page:83(p)
-msgid ""
-"In order to have an audio conversation, you need to have a sound card that "
-"is supported by your operating system, and a working microphone."
-msgstr ""
-"Per poter avere una conversazione audio è necessario avere una scheda audio "
-"supportata dal sistema operativo e un microfono funzionanti."
-
-#: C/audio-video.page:87(p)
-msgid ""
-"In order to have a video conversation, you need to have a webcam that is "
-"supported by your operating system, and a working microphone."
-msgstr ""
-"Per poter avere una conversazione video è necessario avere una webcam "
-"supportata dal sistema operativo e un microfono funzionanti."
-
-#: C/audio-video.page:95(title)
-msgid "Supported Account Types"
-msgstr "Account supportati"
-
-#: C/audio-video.page:97(p)
-msgid ""
-"You can only have audio and video conversations using accounts on certain "
-"supported services. The following table lists whether audio and video is "
-"supported for each type of account."
-msgstr ""
-"È possibile avere conversazioni audio e video utilizzando solo alcune "
-"tipologie di servizi supportati. La tabella seguente indica, per ogni "
-"account, se le conversazioni audio e video sono supportate."
-
-#: C/audio-video.page:102(p)
-msgid ""
-"Account types are provided by plugins. Your system may not have all of the "
-"following types available, or it may have types not listed here. Updated "
-"plugins may make audio or video conversations possible on account types that "
-"are listed as unsupported here."
-msgstr ""
-"Le diverse tipologie di account sono fornite attraverso dei plugin. Il "
-"proprio sistema operativo potrebbe non avere tutte queste tipologie di "
-"account disponibili o potrebbe averne che non sono elencate qui. Dei plugin "
-"aggiornati potrebbero anche rendere possibili le conversazioni audio e video "
-"su account che qui vengono indicati come non supportati."
-
-# (ndt) non serve tradurre
-#: C/audio-video.page:110(p)
-msgid ""
-"I'd like to do tables like this using nothing for No and ✔ for Yes, but we "
-"need to look at the accessibility impact. I've <link href=\"http://mail."
-"gnome.org/archives/gnome-doc-list/2009-September/msg00006.html\">asked the "
-"accessibility team</link> for input."
-msgstr ""
-"I'd like to do tables like this using nothing for No and ✔ for Yes, but we "
-"need to look at the accessibility impact. I've <link href=\"http://mail."
-"gnome.org/archives/gnome-doc-list/2009-September/msg00006.html\">asked the "
-"accessibility team</link> for input."
-
-# (ndt) non serve tradurre
-#: C/audio-video.page:118(p)
-msgid ""
-"There's recent work on telepathy-butterfly and papyon to support audio and "
-"video for MSN. It might be released in time for 2.28, but since it doesn't "
-"follow the Gnome release schedule, I can't be sure. If it looks like it's "
-"going to ship, let's mark it Yes."
-msgstr ""
-"There's recent work on telepathy-butterfly and papyon to support audio and "
-"video for MSN. It might be released in time for 2.28, but since it doesn't "
-"follow the Gnome release schedule, I can't be sure. If it looks like it's "
-"going to ship, let's mark it Yes."
-
-#: C/audio-video.page:128(p)
-msgid "Service"
-msgstr "Servizio"
-
-#: C/audio-video.page:129(p)
-msgid "Audio"
-msgstr "Audio"
-
-#: C/audio-video.page:130(p)
-msgid "Video"
-msgstr "Video"
-
-#: C/audio-video.page:136(p) C/audio-video.page:137(p)
-#: C/audio-video.page:141(p) C/audio-video.page:142(p)
-#: C/audio-video.page:146(p) C/audio-video.page:147(p)
-#: C/audio-video.page:156(p) C/audio-video.page:157(p)
-#: C/audio-video.page:161(p) C/audio-video.page:162(p)
-#: C/audio-video.page:166(p) C/audio-video.page:167(p)
-#: C/audio-video.page:181(p) C/audio-video.page:182(p)
-#: C/audio-video.page:186(p) C/audio-video.page:187(p)
-#: C/audio-video.page:191(p) C/audio-video.page:192(p)
-#: C/audio-video.page:196(p) C/audio-video.page:197(p)
-#: C/audio-video.page:201(p) C/audio-video.page:202(p)
-#: C/audio-video.page:211(p) C/audio-video.page:212(p)
-#: C/audio-video.page:216(p) C/audio-video.page:217(p)
-msgid "No"
-msgstr "No"
-
-#: C/audio-video.page:140(p)
-msgid "Facebook Chat"
-msgstr "Facebook Chat"
-
-#: C/audio-video.page:145(p)
-msgid "gadugadu"
-msgstr "gadugadu"
-
-#: C/audio-video.page:150(p)
-msgid "Google Talk"
-msgstr "Google Talk"
-
-#: C/audio-video.page:151(p) C/audio-video.page:152(p)
-#: C/audio-video.page:171(p) C/audio-video.page:172(p)
-#: C/audio-video.page:176(p) C/audio-video.page:177(p)
-#: C/audio-video.page:206(p) C/audio-video.page:207(p)
-msgid "Yes"
-msgstr "Sì"
-
-#: C/audio-video.page:155(p)
-msgid "Groupwise"
-msgstr "Groupwise"
-
-#: C/audio-video.page:180(p)
-msgid "myspace"
-msgstr "myspace"
-
-#: C/audio-video.page:185(p)
-msgid "qq"
-msgstr "qq"
-
-#: C/audio-video.page:195(p)
-msgid "sametime"
-msgstr "sametime"
-
-#: C/audio-video.page:200(p)
-msgid "silc"
-msgstr "silc"
-
-#: C/audio-video.page:215(p)
-msgid "zephyr"
-msgstr "zephyr"
-
-#: C/audio-call.page:9(desc)
-msgid "Call your contacts over the Internet."
-msgstr "Chiamare i propri contatti via Internet."
-
-#: C/audio-call.page:27(title)
-msgid "Start an audio conversation"
-msgstr "Avviare una conversazione audio"
-
-#: C/audio-call.page:29(p)
-msgid ""
-"You can call your contacts and have an audio conversation with them. This "
-"features only works with certain types of accounts, and it requires the "
-"other person to have an application that supports audio calls."
-msgstr ""
-"È possibile chiamare i propri contatti e tenere delle conversazioni audio "
-"con loro. Questa funzionalità funziona però solo con alcune tipologie di "
-"account ed è necessario che l'altra persona abbia un'applicazione in grado "
-"di supportare le chiamate audio."
-
-#: C/audio-call.page:34(p)
-#| msgid ""
-#| "From the <gui>Contact List</gui> window, click the <media type=\"image\" "
-#| "mime=\"image/png\" src=\"figures/camera-web.png\">video call</media> icon "
-#| "next to the name of the contact you wish to call and choose <gui style="
-#| "\"menuitem\">Video Call</gui>. Alternatively, right click the contact and "
-#| "choose <gui style=\"menuitem\">Video Call</gui>."
-msgid ""
-"From the <gui>Contact List</gui> window, click the <media type=\"image\" "
-"mime=\"image/png\" src=\"figures/camera-web.png\">video call</media> icon "
-"next to the name of the contact you wish to call and choose <gui style="
-"\"menuitem\">Audio Call</gui>."
-msgstr ""
-"Dalla finestra <gui>Elenco contatti</gui>, fare clic sull'icona <media type="
-"\"image\" mime=\"image/png\" src=\"figures/camera-web.png\">della chiamata "
-"video</media> a fianco del nome del contatto da chiamare e scegliere <gui "
-"style=\"menuitem\">Chiamata video</gui>."
-
-#: C/audio-call.page:55(p)
-#| msgid ""
-#| "To turn an audio conversation into a video conversation, choose "
-#| "<guiseq><gui style=\"menu\">Video</gui><gui style=\"menuitem\">Video On</"
-#| "gui></guiseq>, or click the <media type=\"image\" mime=\"image/png\" src="
-#| "\"figures/camera-web.png\">video call</media> toolbar button to select it."
-msgid ""
-"To turn an audio conversation into a video conversation, choose <guiseq><gui "
-"style=\"menu\">Video</gui><gui style=\"menuitem\">Video On</gui></guiseq>."
-msgstr ""
-"Per convertire una conversazione audio in una conversazione video, scegliere "
-"<guiseq><gui style=\"menu\">Video</gui><gui style=\"menuitem\">Abilitato</"
-"gui></guiseq>."
-
-#: C/audio-call.page:63(title)
-#| msgid "Start a conversation witn an IRC contact."
-msgid "Start an audio conversation with a meta-contact"
-msgstr "Avviare una conversazione audio con un meta-contatto"
-
-#: C/audio-call.page:71(p)
-#| msgid ""
-#| "Right-click on the name of the contact you want to have a conversation "
-#| "with, and choose <gui>Chat</gui>."
-msgid ""
-"Select the contact you want to have the conversation, and from the menu "
-"select <gui style=\"menuitem\">Audio Call</gui>."
-msgstr ""
-"Selezionare il contatto con cui iniziare una conversazione e dal menù "
-"selezionare <gui>Chiamata audio</gui>."
-
-#: C/add-contact.page:9(desc)
-msgid "Add someone to the contact list."
-msgstr "Aggiungere una persona all'elenco contatti."
-
-#: C/add-contact.page:33(title)
-msgid "Add someone to your list of contacts"
-msgstr "Aggiungere una persona al proprio elenco contatti"
-
-#: C/add-contact.page:37(p)
-msgid "Choose <guiseq><gui>Chat</gui><gui>Add Contact</gui></guiseq>."
-msgstr ""
-"Scegliere <guiseq><gui>Conversazione</gui><gui>Aggiungi contatto</gui></"
-"guiseq>."
-
-#: C/add-contact.page:40(p)
-msgid ""
-"From the <gui>Account</gui> drop-down list, select the account you wish to "
-"use to connect to your contact. Your contact will need to be using the same "
-"service as the account you select."
-msgstr ""
-"Dall'elenco a discesa <gui>Account</gui>, selezionare l'account da usare per "
-"poter avere conversazioni col proprio contatto. Il contatto dovrà usare lo "
-"stesso servizio dell'account selezionato."
-
-#: C/add-contact.page:45(p)
-msgid ""
-"In the <gui>Identifier</gui> field, enter your contact’s login ID, username, "
-"screen name, or other appropriate identifier for the service type."
-msgstr ""
-"Nel campo <gui>Identificatore</gui>, inserire l'ID del contatto: nome "
-"utente, nome visibili o qualsiasi altra forma di identificatore che il "
-"servizio utilizza."
-
-#: C/add-contact.page:49(p)
-msgid ""
-"In the <gui>Alias</gui> field, type your contact’s name as you would like it "
-"to appear in your contact list."
-msgstr ""
-"Nella casella di testo <gui>Pseudonimo</gui> digitare il nome da dare al "
-"nuovo contatto così come dovrà apparire nell'elenco contatti."
-
-#: C/add-contact.page:53(p)
-msgid "Click <gui>Add</gui> to add the person to your list of contacts."
-msgstr "Fare clic su <gui>Aggiungi</gui> per aggiungere il nuovo contatto."
-
-#: C/add-contact.page:61(p)
-msgid ""
-"To add a new person to your list of contacts, you need to be connected to "
-"the Internet and to your account."
-msgstr ""
-"Per aggiungere una nuova persona al proprio elenco contatti, è necessario "
-"essere collegati a Internet e al proprio account."
-
-#: C/add-account.page:9(desc)
-msgid "Add a new account to <app>Empathy</app>."
-msgstr "Aggiungere un nuovo account in <application>Empathy</application>"
-
-#: C/add-account.page:39(title)
-msgid "Add a new account"
-msgstr "Aggiungere un nuovo account"
-
-#: C/add-account.page:41(p)
-msgid ""
-"You can add instant messaging accounts from any supported service to "
-"communicate with all of your contacts in <app>Empathy</app>. For some "
-"account providers, these steps will also allow you to register for a new "
-"account. For more details, see <link xref=\"create-account\"/>."
-msgstr ""
-"È possibile aggiungere account di messaggistica istantanea per comunicare "
-"con tutti i propri contatti da qualsiasi servizio supportato da "
-"<app>Empathy</app>. Con alcuni fornitori di servizi di messaggistica, i "
-"passi qui descritti consentono anche di registrare un nuovo account. Per "
-"maggiori informazioni, consultare <link xref=\"create-account\"/>."
-
-#: C/add-account.page:52(p)
-msgid "Click <gui style=\"button\">Add</gui>."
-msgstr "Fare clic su <gui style=\"button\">Aggiungi</gui>."
-
-#: C/add-account.page:57(p)
-msgid ""
-"From the <gui>Protocol</gui> drop-down list, select the type of account you "
-"wish to add."
-msgstr ""
-"Dall'elenco a discesa <gui>Protocollo</gui>, scegliere il tipo di account da "
-"aggiungere."
-
-#: C/add-account.page:61(p)
-msgid ""
-"If you do not already have a registered account, select <gui>Create a new "
-"account on the server</gui>. This feature is not available for all account "
-"types, and may not work with some account providers. See <link xref=\"create-"
-"account\"/> for more information."
-msgstr ""
-"Se non si dispone già di un account registrato, selezionare <gui>Creare un "
-"nuovo account sul server</gui>. Questa funzionalità non è disponibile con "
-"tutte le tipologie di account e potrebbe non funzionare con alcuni fornitori "
-"di servizi di messaggistica. Per maggiori informazioni, consultare <link "
-"xref=\"create-account\"/>."
-
-#: C/add-account.page:66(p)
-msgid ""
-"Enter the required information. For most accounts, you will only need a "
-"login ID and a password. Some accounts may require additional information. "
-"See <link xref=\"accounts-window#details\"/> for more information."
-msgstr ""
-"Inserire le informazioni richieste. Per la maggior parte degli account sono "
-"sufficienti un ID di accesso e una password, altri account potrebbero "
-"richiedere informazioni aggiuntive. Per maggiori informazioni, consultare "
-"<link xref=\"accounts-window#details\"/>."
-
-#: C/add-account.page:71(p)
-msgid "Click <gui style=\"button\">Log in</gui>."
-msgstr "Fare clic su <gui style=\"button\">Accedi</gui>."
-
-#: C/add-account.page:78(p)
-msgid ""
-"To change the name that identifies the account in the <gui>Accounts</gui> "
-"window, select the account from the list on the left and either click on the "
-"name or press the space bar. Edit the account name and press <key>Enter</"
-"key> when you’re finished."
-msgstr ""
-"Per modificare il nome che identifica un account nelle finestra "
-"<gui>Account</gui>, selezionare l'account dall'elenco sulla sinistra e fare "
-"clic sul nome oppure premere la barra spaziatrice. Modificare il nome "
-"dell'account e premere <key>Invio</key> quando finito."
-
-#: C/accounts-window.page:11(desc)
-msgid "Add, modify, and delete accounts."
-msgstr "Aggiungere, modificare ed eliminare account."
-
-#: C/accounts-window.page:33(title)
-msgid "Accounts Window"
-msgstr "Finestra degli account"
-
-#: C/accounts-window.page:35(p)
-msgid ""
-"The <gui>Accounts</gui> window allows you to add, modify, and delete "
-"accounts."
-msgstr ""
-"La finestra <gui>Accounts</gui> consente di aggiungere, modificare ed "
-"eliminare account."
-
-#: C/accounts-window.page:43(title)
-msgid "Account Details"
-msgstr "Dettagli degli account"
-
-#: C/accounts-window.page:44(p)
-msgid ""
-"For most types of accounts, you can simply enter a login ID and a password. "
-"Certain accounts or account types, however, may require additional "
-"information."
-msgstr ""
-"Per la maggior parte degli account è sufficiente inserire un ID di accesso e "
-"una password. Altre tipologie di account potrebbero però richiedere "
-"informazioni aggiuntive."
-
-#: C/account-jabber.page:7(desc)
-msgid "Advanced options for Jabber and Google Talk accounts."
-msgstr "Opzioni avanzate degli account Jabber e Google Talk."
-
-#: C/account-jabber.page:29(title)
-msgid "Jabber account details"
-msgstr "Dettagli per l'account Jabber"
-
-#: C/account-jabber.page:31(p)
-msgid ""
-"Most Jabber accounts will require only a login ID and a password to connect. "
-"For some accounts or on certain types of networks, you may need to enter "
-"additional information in the <gui>Advanced</gui> section. Normally, you "
-"will not need to use the advanced options below. For general instructions on "
-"adding an account, see <link xref=\"add-account\"/>."
-msgstr ""
-"La maggior parte degli account Jabber richiede solo un ID di accesso e una "
-"password per potersi collegare. Alcune tipologie di account su determinate "
-"reti potrebbero richiedere informazioni aggiuntive da inserire nella sezione "
-"<gui>Avanzate</gui>. Normalmente non è necessario utilizzare le opzioni "
-"avanzate. Per informazioni generali su come aggiungere un account, "
-"consultare <link xref=\"add-account\"/>."
-
-#: C/account-jabber.page:39(p)
-msgid ""
-"Google Talk is a type of Jabber account. These instructions hold for Google "
-"Talk accounts as well."
-msgstr ""
-"Google Talk è un tipo di account Jabber. Queste istruzioni valgono anche per "
-"gli account Google Talk."
-
-#: C/account-jabber.page:45(gui)
-msgid "Encryption required (TLS/SSL)"
-msgstr "Richiesta cifratura (TLS/SSL)"
-
-#: C/account-jabber.page:46(gui)
-msgid "Ignore SSL certificate errors"
-msgstr "Ignorare errori certificati SSL"
-
-#: C/account-jabber.page:47(p)
-msgid ""
-"Whenever possible, communication between <app>Empathy</app> and the Jabber "
-"server is encrypted. If encrypted communication is not possible, messages "
-"may be sent unencrypted. Select <gui>Encryption required</gui> to prevent "
-"<app>Empathy</app> from communicating with the Jabber server when encryption "
-"is not possible."
-msgstr ""
-"Quando possibile, le comunicazioni tra <app>Empathy</app> e il server Jabber "
-"vengono cifrate. Se le comunicazioni cifrate non sono possibili, i messaggi "
-"potrebbero essere inviati non cifrati. Selezionare <gui>Richiesta cifratura</"
-"gui> affinché <app>Empathy</app> comunichi con il server Jabber solo quando "
-"è disponibile una canale cifrato."
-
-#: C/account-jabber.page:52(p)
-msgid ""
-"Some Jabber servers may encrypt data using invalid certificates, or using "
-"certificates from unknown authorities. If you trust the server you are "
-"connecting to, you can select <gui>Ignore SSL certificate errors</gui> to "
-"allow encrypted communication with invalid certificates."
-msgstr ""
-"Alcuni server Jabber potrebbero cifrare i dati con certificati non validi o "
-"utilizzando certificati di autorità di certificazione non riconosciute. Se "
-"ci si può fidare del server a cui ci si connette, selezionare <gui>Ignorare "
-"errori certificati SSL</gui> per consentire comunicazioni cifrate anche in "
-"presenza di certificati non validi."
-
-#: C/account-jabber.page:59(gui)
-msgid "Resource"
-msgstr "Risorsa"
-
-#: C/account-jabber.page:60(gui)
-msgid "Priority"
-msgstr "Priorità"
-
-#: C/account-jabber.page:61(p)
-msgid ""
-"If you have multiple applications (for instance, on separate computers) "
-"connected to your account at the same time, you can set a resource to "
-"uniquely identify each one. By default, <app>Empathy</app> will use "
-"<input>Telepathy</input> as the resource."
-msgstr ""
-"Se si dispone di molteplici applicazioni (per esempio su computer diversi) "
-"connesse al proprio account nello stesso momento, è possibile impostare una "
-"risorsa per identificarle univocamente. Come impostazione predefinita, "
-"<app>Empathy</app> usa <input>Telepathy</input> come nome per la risorsa."
-
-#: C/account-jabber.page:65(p)
-msgid ""
-"You can set the priority to specify which application should receive "
-"incoming messages from your contacts. New messages will be sent to the "
-"application with the highest priority."
-msgstr ""
-"È anche possibile impostare la priorità per specificare quale applicazione "
-"deve ricevere i messaggi in arrivo dai propri contatti. I nuovi messaggi "
-"vengono inviati all'applicazione con la priorità maggiore."
-
-#: C/account-jabber.page:70(gui)
-msgid "Override server settings"
-msgstr "Scavalcare impostazioni server"
-
-#: C/account-jabber.page:71(p)
-msgid ""
-"<app>Empathy</app> will use default settings to connect to the Jabber server "
-"based on your login ID. For some Jabber servers, you will need to enter "
-"custom server settings manually. These settings should be provided for you "
-"by your Jabber provider."
-msgstr ""
-"<app>Empathy</app> utilizza le impostazioni predefinite per collegarsi al "
-"server Jabber in base al proprio ID di accesso. Con alcuni server Jabber "
-"potrebbe essere necessario inserire impostazioni personalizzate. Queste "
-"impostazioni dovrebbero essere fornite dal fornitore del servizio Jabber."
-
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/account-irc.page:106(None)
-msgid "@@image: 'figures/gtk-add.png'; md5=a856b499d8d4681b70b5ce6f25bc5c6d"
-msgstr "non serve"
-
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/account-irc.page:112(None)
-msgid "@@image: 'figures/gtk-remove.png'; md5=215e3a325a3dd619874e35c30a018bb6"
-msgstr "non serve"
-
-#: C/account-irc.page:8(desc)
-msgid "Additional information necessary for connecting to IRC networks."
-msgstr "Informazioni necessarie per collegarsi alle reti IRC."
-
-#: C/account-irc.page:31(title)
-msgid "IRC account details"
-msgstr "Dettagli per l'account IRC"
-
-#: C/account-irc.page:33(p)
-msgid ""
-"IRC accounts require different information than many other types of "
-"accounts. To create an IRC account, you must specify at least an IRC network "
-"and a nickname. This page details the information you can provide for an IRC "
-"account."
-msgstr ""
-"Gli account IRC necessitano di informazioni diverse rispetto gli altri "
-"account. Per creare un account IRC è sufficiente specificare una rete IRC e "
-"un soprannome. Questa pagina espone le informazioni che è possibile fornire "
-"per un account IRC."
-
-#: C/account-irc.page:45(gui) C/account-irc.page:120(gui)
-msgid "Network"
-msgstr "Rete"
-
-#: C/account-irc.page:46(p)
-msgid ""
-"IRC is an open system that allows people to run separate IRC networks. Each "
-"network is distinct and has its own users and chat rooms. <app>Empathy</app> "
-"lists the most popular networks in the <gui>Network</gui> drop-down list. "
-"You can add additional networks. See <link xref=\"#networks\"/> below."
-msgstr ""
-"IRC è un sistema aperto che consente di gestire reti IRC separate. Ogni rete "
-"è indipendente e distinta e dispone dei propri utenti e delle proprie stanze "
-"di conversazione. <app>Empathy</app> visualizza le reti più diffuse "
-"attraverso l'elenco a discesa <gui>Rete</gui>. È comunque possibile "
-"aggiungere altre reti. Consultare <link xref=\"#networks\"/> più sotto."
-
-#: C/account-irc.page:53(gui)
-msgid "Nickname"
-msgstr "Soprannome"
-
-#: C/account-irc.page:54(p)
-msgid ""
-"Your nickname is your unique name on the IRC network. Only one person on a "
-"network may use a given nickname. If you get an error message that says "
-"<link xref=\"prob-conn-name\" role=\"error-msg\"/> you will need to change "
-"your nickname."
-msgstr ""
-"Il soprannome è il proprio nome all'interno della rete IRC e solo una "
-"persona nella rete può esare un dato soprannome. Se si riceve un messaggio "
-"indicante <link xref=\"prob-conn-name\" role=\"error-msg\"/>, è necessario "
-"cambiare il proprio soprannome."
-
-#: C/account-irc.page:60(gui)
-msgid "Password"
-msgstr "Password"
-
-#: C/account-irc.page:61(p)
-msgid ""
-"Some servers, particularly those on private networks, require a password to "
-"connect. If you are authorized to use the network, the network "
-"administrators should provide you with a password."
-msgstr ""
-"Alcuni server, in particolare quelli su reti private, richiedono una "
-"password per potersi collegare. Se si dispone dell'autorizzazione per "
-"utilizzare una di queste reti, l'amministratore della rete dovrebbe fornire "
-"la password adatta. "
-
-#: C/account-irc.page:65(title)
-msgid "NickServ Passwords"
-msgstr "Password del NickServ"
-
-#: C/account-irc.page:66(p)
-#| msgid ""
-#| "On some networks, nicknames can be registered using a service known as "
-#| "NickServ. <app>Empathy</app> does not directly support nickname "
-#| "passwords. On some networks, including the popular FreeNode network, "
-#| "server passwords are automatically forwarded to NickServ, allowing you to "
-#| "set this field to identify yourself with NickServ. See <link xref=\"irc-"
-#| "nick-password\"/> for more details."
-msgid ""
-"On some networks, nicknames can be registered using a service known as "
-"NickServ. <app>Empathy</app> does not directly support nickname passwords. "
-"On some networks, including the popular freenode network, server passwords "
-"are automatically forwarded to NickServ, allowing you to set this field to "
-"identify yourself with NickServ. See <link xref=\"irc-nick-password\"/> for "
-"more details."
-msgstr ""
-"All'interno di alcune reti è possibile registrare i soprannomi utilizzando "
-"un servizio chiamato «NickServ». <app>Empathy</app> non supporta "
-"direttamente le password per i soprannomi, ma con alcune reti, compresa la "
-"molto diffusa FreeNode, le password relative al server vengono inoltrare al "
-"«NickServ», consentendo di usare questo campo per identificarsi con il "
-"«NickServ». Per maggiori informazioni, consultare <link xref=\"irc-nick-"
-"password\"/>."
-
-#: C/account-irc.page:76(gui)
-msgid "Real name"
-msgstr "Nome reale"
-
-#: C/account-irc.page:77(p)
-msgid ""
-"You can provide your real name in addition to your nickname. Other users "
-"will be able to see this when they view your information."
-msgstr ""
-"È possibile fornire il proprio nome vero oltre al proprio soprannome. Gli "
-"altri utenti lo potranno vedere quando visualizzano le informazioni "
-"personali."
-
-#: C/account-irc.page:81(gui)
-msgid "Quit message"
-msgstr "Messaggio di uscita"
-
-#: C/account-irc.page:82(p)
-msgid ""
-"When you go offline, a quit message is sent to all the chat rooms you’re in "
-"and to all the users you’re having a private conversation with. Use this "
-"field to provide a custom quit message."
-msgstr ""
-"Quando ci si scollega, un messaggio di uscita viene inviato in tutte le "
-"stanze di conversazione in cui si era entrati e a tutti gli utenti con cui "
-"si teneva una conversazione privata. Usare questo campo per fornire un "
-"messaggio di uscita personalizzato."
-
-#: C/account-irc.page:94(title)
-msgid "IRC Networks"
-msgstr "Reti IRC"
-
-#: C/account-irc.page:97(title)
-msgid "Networks"
-msgstr "Reti"
-
-#: C/account-irc.page:99(p)
-msgid ""
-"<app>Empathy</app> includes a list of popular IRC networks. If you wish to "
-"another IRC network, you can add it to the list. You can also modify "
-"networks and remove them from the list."
-msgstr ""
-"<app>Empathy</app> comprende un elenco delle reti IRC più diffuse. Per "
-"aggiungere un'altra rete IRC è sufficiente aggiungerla a questo elenco. È "
-"anche possibile modificare le reti presenti e rimuoverle dall'elenco."
-
-#: C/account-irc.page:104(p)
-msgid ""
-"To add a network to the list, click <media type=\"image\" mime=\"image/png\" "
-"src=\"figures/gtk-add.png\" width=\"16\" height=\"16\">Add</media>."
-msgstr ""
-"Per aggiungere una rete all'elenco, fare clic su <media type=\"image\" mime="
-"\"image/png\" src=\"figures/gtk-add.png\" width=\"16\" height="
-"\"16\">Aggiungi</media>."
-
-#: C/account-irc.page:107(p)
-msgid ""
-"To modify a network in the list, select the network and click <media type="
-"\"image\" mime=\"image/png\" src=\"figures/gtk-edit.png\" width=\"16\" "
-"height=\"16\">Edit</media>."
-msgstr ""
-"Per modificare una rete nell'elenco, selezionare la rete e fare clic su "
-"<media type=\"image\" mime=\"image/png\" src=\"figures/gtk-edit.png\" width="
-"\"16\" height=\"16\">Modifica</media>."
-
-#: C/account-irc.page:110(p)
-msgid ""
-"To remove a network from the list, select the network and click <media type="
-"\"image\" mime=\"image/png\" src=\"figures/gtk-remove.png\" width=\"16\" "
-"height=\"16\">Remove</media>."
-msgstr ""
-"Per rimuovere una rete dall'elenco, selezionare la rete e fare clic su "
-"<media type=\"image\" mime=\"image/png\" src=\"figures/gtk-remove.png\" "
-"width=\"16\" height=\"16\">Rimuovi</media>."
-
-#: C/account-irc.page:115(p)
-msgid ""
-"When adding or modifying a network, you can enter the following information:"
-msgstr ""
-"Quando si aggiunge o si modifica una rete, è possibile inserire le seguenti "
-"informazioni:"
-
-#: C/account-irc.page:121(p)
-msgid ""
-"This is the name of the network as you want it to appear in the list of "
-"networks."
-msgstr ""
-"Questo è il nome della rete come viene visualizzato nell'elenco di tutte le "
-"reti."
-
-#: C/account-irc.page:125(gui)
-msgid "Charset"
-msgstr "Codifica caratteri"
-
-#: C/account-irc.page:126(p)
-msgid ""
-"This specifies the character encoding that is typically used on this "
-"network. A character encoding is a specific way of recording characters "
-"internally in a computer. There are many character encodings, and you need "
-"to use the same character encoding as other users to see their messages "
-"correctly."
-msgstr ""
-"Questo specifica la codifica dei caratteri utilizzata nella rete. La "
-"codifica dei caratteri è un metodo per registrare i caratteri all'interno di "
-"un computer. Essendo disponibili diverse codifiche dei caratteri, è "
-"necessario utilizzare la stessa codifica degli altri utenti per poter "
-"visualizzare i messaggi nel modo corretto."
-
-#. Translators: Recommend character encodings that are common
-#. for your language.
-#: C/account-irc.page:135(p)
-msgid ""
-"By default, <app>Empathy</app> uses UTF-8, a modern character encoding that "
-"can handle text from most of the world's languages. Another common encoding "
-"for English and some other Western languages is ISO-8859-1."
-msgstr ""
-"Come impostazione predefinita, <app>Empathy</app> utilizza UTF-8, una "
-"codifica dei caratteri moderna in grado di gestire la maggior parte delle "
-"lingue del mondo. Una codifica molto diffusa per l'inglese e per alcune "
-"lingue occidentali è la ISO-8859-1."
-
-#: C/account-irc.page:141(gui)
-msgid "Servers"
-msgstr "Server"
-
-#: C/account-irc.page:142(p)
-msgid ""
-"An IRC network may have many servers you can connect to. When you are "
-"connected to a server on a particular network, you can communicate with all "
-"users on all other servers on that network. You can add and remove servers "
-"for this network using the <gui>Add</gui> and <gui>Remove</gui> buttons."
-msgstr ""
-"Una rete IRC può disporre di diversi server a cui è possibile collegarsi. "
-"Quando ci si collega a uno di questi server, le comunicazioni avvengono con "
-"tutti gli utenti presenti negli altri server all'interno della rete. È "
-"possibile aggiungere e rimuovere server da questa rete utilizzando i "
-"pulsanti <gui>Aggiungi</gui> e <gui>Rimuovi</gui>."
-
-#: C/account-irc.page:147(p)
-msgid ""
-"When a server is selected, click the field under <gui>Server</gui> or "
-"<gui>Port</gui> to edit it. Alternatively, use the left and right arrow keys "
-"to focus the field, and press the space bar to begin editing."
-msgstr ""
-"Quando è selezionato un server, fare clic sul campo nella colonna "
-"<gui>Server</gui> o <gui>Porta</gui> per modificarlo. In alternativa, usare "
-"le frecce destra e sinistra per spostare il focus sul campo e premere la "
-"barra spaziatrice per avviare la modifica."
-
-#: C/account-irc.page:151(p)
-msgid ""
-"Select the check box in the <gui>SSL</gui> column to encrypt all "
-"communication with a server. Note that this does not prevent other users on "
-"the network from seeing what you write on public chat rooms."
-msgstr ""
-"Selezionare la casella nella colonna <gui>SSL</gui> per cifrare tutte le "
-"comunicazioni col server. Questa opzione non previene che altri utenti "
-"all'interno della rete vedano cosa si scrive in una stanza di conversazione "
-"pubblica."
-
-#. Put one translator per line, in the form of NAME <EMAIL>, YEAR1, YEAR2
-#: C/index.page:0(None)
-msgid "translator-credits"
-msgstr "Milo Casagrande <milo@ubuntu.com>"
-
-#~ msgid "To join such a room, if you know the password:"
-#~ msgstr "Per entrare in tali stanze, se si conosce la password:"
-
-#~ msgid ""
-#~ "From the <gui>Contact List</gui> window, click the <media type=\"image\" "
-#~ "mime=\"image/png\" src=\"figures/audio-input-microphone.png\">audio call</"
-#~ "media> icon next to the name of the contact you wish to call and choose "
-#~ "<gui style=\"menuitem\">Audio Call</gui>. Alternatively, right click the "
-#~ "contact and choose <gui style=\"menuitem\">Audio Call</gui>."
-#~ msgstr ""
-#~ "Dalla finestra <gui>Elenco contatti</gui>, fare clic sull'icona <media "
-#~ "type=\"image\" mime=\"image/png\" src=\"figures/audio-input-microphone.png"
-#~ "\">della conversazione audio</media> a fianco del nome del contatto da "
-#~ "chiamare e scegliere <gui style=\"menuitem\">Chiamata audio</gui>. In "
-#~ "alternativa, fare clic col pulsante destro del mouse sul contatto e "
-#~ "scegliere <gui style=\"menuitem\">Chiamata audio</gui>."
diff --git a/help/ja/ja.po b/help/ja/ja.po
deleted file mode 100644
index 9f19043d..00000000
--- a/help/ja/ja.po
+++ /dev/null
@@ -1,3419 +0,0 @@
-# Japanese translation for empathy.
-# Copyright (C) 2011 empathy's COPYRIGHT HOLDER
-# This file is distributed under the same license as the empathy package.
-# Mako N <mako@pasero.net>, 2012.
-#
-# GLOSSARIES:
-# call 通話、呼び出し、呼び出す
-# choose 選ぶ
-# select 指定する
-# contact 相手先
-# contact list 相手先の一覧
-# metacontact メタ相手先
-# chat チャット
-# conversation 会話
-# chat room 談話室
-# room 談話室
-# text 文字
-# audio 音声
-# video ビデオ、映像
-# identifier 識別子
-# status 在席状況
-# People Nearby (訳さない)
-# geolocation 位置情報
-# location 場所
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: empathy master\n"
-"POT-Creation-Date: 2012-04-02 03:34+0000\n"
-"PO-Revision-Date: 2012-04-02 12:49+0900\n"
-"Last-Translator: Mako N <mako@pasero.net>\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"
-"Language: ja\n"
-"Plural-Forms: nplurals=1; plural=0;\n"
-
-#. Put one translator per line, in the form NAME <EMAIL>, YEAR1, YEAR2
-msgctxt "_"
-msgid "translator-credits"
-msgstr "Mako N <mako@pasero.net>, 2012"
-
-#. This is a reference to an external file such as an image or video. When
-#. the file changes, the md5 hash will change to let you know you need to
-#. update your localized copy. The msgstr is not used at all. Set it to
-#. whatever you like once you have updated your copy of the file.
-#.
-#. This is a reference to an external file such as an image or video. When
-#. the file changes, the md5 hash will change to let you know you need to
-#. update your localized copy. The msgstr is not used at all. Set it to
-#. whatever you like once you have updated your copy of the file.
-#: C/index.page:28(media)
-msgctxt "_"
-msgid ""
-"external ref='figures/empathy-logo.png' "
-"md5='1afc419a644e90b16393807e35cb5cb2'"
-msgstr ""
-"external ref='figures/empathy-logo.png' "
-"md5='1afc419a644e90b16393807e35cb5cb2'"
-
-#: C/index.page:7(info/title)
-msgctxt "link"
-msgid "Empathy Internet Messenger"
-msgstr "Empathy インターネットメッセンジャー"
-
-#: C/index.page:8(info/title)
-msgctxt "text"
-msgid "Empathy Internet Messenger"
-msgstr "Empathy インターネットメッセンジャー"
-
-#: C/index.page:19(credit/name) C/add-account.page:21(credit/name)
-#: C/audio-call.page:19(credit/name) C/audio-video.page:17(credit/name)
-#: C/create-account.page:19(credit/name)
-#: C/disable-account.page:21(credit/name)
-#: C/favorite-rooms.page:14(credit/name) C/geolocation.page:17(credit/name)
-#: C/geolocation-not-showing.page:17(credit/name)
-#: C/geolocation-privacy.page:17(credit/name)
-#: C/geolocation-supported.page:16(credit/name)
-#: C/geolocation-turn.page:18(credit/name)
-#: C/geolocation-what-is.page:18(credit/name)
-#: C/group-conversations.page:19(credit/name)
-#: C/hide-contacts.page:11(credit/name) C/import-account.page:23(credit/name)
-#: C/introduction.page:13(credit/name) C/irc-commands.page:10(credit/name)
-#: C/irc-join-pwd.page:17(credit/name) C/irc-join-room.page:16(credit/name)
-#: C/irc-manage.page:19(credit/name) C/irc-nick-password.page:18(credit/name)
-#: C/irc-send-file.page:16(credit/name)
-#: C/irc-start-conversation.page:15(credit/name)
-#: C/link-contacts.page:15(credit/name) C/prev-conv.page:17(credit/name)
-#: C/prob-conn-acctdisabled.page:19(credit/name)
-#: C/prob-conn-auth.page:21(credit/name) C/prob-conn-name.page:18(credit/name)
-#: C/prob-conn-neterror.page:19(credit/name)
-#: C/remove-account.page:19(credit/name) C/salut-protocol.page:18(credit/name)
-#: C/send-file.page:21(credit/name) C/set-custom-status.page:19(credit/name)
-#: C/share-desktop.page:14(credit/name) C/status-icons.page:16(credit/name)
-#: C/video-call.page:22(credit/name)
-msgid "Milo Casagrande"
-msgstr "Milo Casagrande"
-
-#: C/index.page:23(license/p) C/account-irc.page:20(license/p)
-#: C/account-jabber.page:18(license/p) C/accounts-window.page:22(license/p)
-#: C/add-account.page:29(license/p) C/add-contact.page:22(license/p)
-#: C/audio-call.page:23(license/p) C/audio-video.page:21(license/p)
-#: C/change-status.page:28(license/p) C/create-account.page:23(license/p)
-#: C/disable-account.page:29(license/p) C/favorite-rooms.page:18(license/p)
-#: C/geolocation.page:21(license/p)
-#: C/geolocation-not-showing.page:21(license/p)
-#: C/geolocation-privacy.page:21(license/p)
-#: C/geolocation-supported.page:20(license/p)
-#: C/geolocation-turn.page:22(license/p)
-#: C/geolocation-what-is.page:22(license/p)
-#: C/group-conversations.page:23(license/p) C/hide-contacts.page:15(license/p)
-#: C/import-account.page:31(license/p) C/introduction.page:17(license/p)
-#: C/irc-commands.page:14(license/p) C/irc-join-pwd.page:21(license/p)
-#: C/irc-join-room.page:20(license/p) C/irc-manage.page:23(license/p)
-#: C/irc-nick-password.page:22(license/p) C/irc-send-file.page:20(license/p)
-#: C/irc-start-conversation.page:19(license/p)
-#: C/link-contacts.page:19(license/p) C/prev-conv.page:25(license/p)
-#: C/prob-conn-acctdisabled.page:23(license/p)
-#: C/prob-conn-auth.page:25(license/p) C/prob-conn-name.page:22(license/p)
-#: C/prob-conn-neterror.page:23(license/p) C/prob-conn.page:18(license/p)
-#: C/remove-account.page:23(license/p) C/salut-protocol.page:22(license/p)
-#: C/send-file.page:25(license/p) C/send-message.page:21(license/p)
-#: C/set-custom-status.page:23(license/p) C/share-desktop.page:22(license/p)
-#: C/status-icons.page:24(license/p) C/video-call.page:26(license/p)
-msgid "Creative Commons Share Alike 3.0"
-msgstr "クリエイティブ・コモンズ・ライセンス 継承 3.0"
-
-#: C/index.page:27(page/title)
-msgid ""
-"<media type=\"image\" mime=\"image/png\" src=\"figures/empathy-logo.png\"> "
-"Empathy Internet Messenger logo </media> Empathy Internet Messenger"
-msgstr ""
-"<media type=\"image\" mime=\"image/png\" src=\"figures/empathy-logo.png\"> "
-"Empathy インターネットメッセンジャーのロゴ </media> Empathy インターネット"
-"メッセンジャー"
-
-#: C/index.page:35(section/title)
-msgid "Account Management"
-msgstr "アカウントの管理"
-
-#: C/index.page:39(section/title)
-msgid "Contact Management"
-msgstr "相手先の管理"
-
-#: C/index.page:43(section/title)
-msgid "Text Conversations"
-msgstr "文字による会話"
-
-#: C/index.page:47(section/title)
-msgid "Audio and Video Conversations"
-msgstr "音声とビデオによる会話"
-
-#: C/index.page:51(section/title)
-msgid "Advanced Actions"
-msgstr "高度な操作"
-
-#: C/index.page:55(section/title) C/irc-manage.page:57(section/title)
-msgid "Common Problems"
-msgstr "よくある問題"
-
-#. This is a reference to an external file such as an image or video. When
-#. the file changes, the md5 hash will change to let you know you need to
-#. update your localized copy. The msgstr is not used at all. Set it to
-#. whatever you like once you have updated your copy of the file.
-#: C/account-irc.page:106(media)
-msgctxt "_"
-msgid ""
-"external ref='figures/gtk-add.png' md5='a856b499d8d4681b70b5ce6f25bc5c6d'"
-msgstr ""
-"external ref='figures/gtk-add.png' md5='a856b499d8d4681b70b5ce6f25bc5c6d'"
-
-#. This is a reference to an external file such as an image or video. When
-#. the file changes, the md5 hash will change to let you know you need to
-#. update your localized copy. The msgstr is not used at all. Set it to
-#. whatever you like once you have updated your copy of the file.
-#.
-#. This is a reference to an external file such as an image or video. When
-#. the file changes, the md5 hash will change to let you know you need to
-#. update your localized copy. The msgstr is not used at all. Set it to
-#. whatever you like once you have updated your copy of the file.
-#.
-#. This is a reference to an external file such as an image or video. When
-#. the file changes, the md5 hash will change to let you know you need to
-#. update your localized copy. The msgstr is not used at all. Set it to
-#. whatever you like once you have updated your copy of the file.
-#.
-#. This is a reference to an external file such as an image or video. When
-#. the file changes, the md5 hash will change to let you know you need to
-#. update your localized copy. The msgstr is not used at all. Set it to
-#. whatever you like once you have updated your copy of the file.
-#: C/account-irc.page:109(media) C/prob-conn-auth.page:58(media)
-#: C/prob-conn-name.page:44(media) C/prob-conn-neterror.page:59(media)
-msgctxt "_"
-msgid ""
-"external ref='figures/gtk-edit.png' md5='4f21b451732817be0604fe3e2c8da98b'"
-msgstr ""
-"external ref='figures/gtk-edit.png' md5='4f21b451732817be0604fe3e2c8da98b'"
-
-#. This is a reference to an external file such as an image or video. When
-#. the file changes, the md5 hash will change to let you know you need to
-#. update your localized copy. The msgstr is not used at all. Set it to
-#. whatever you like once you have updated your copy of the file.
-#: C/account-irc.page:112(media)
-msgctxt "_"
-msgid ""
-"external ref='figures/gtk-remove.png' md5='215e3a325a3dd619874e35c30a018bb6'"
-msgstr ""
-"external ref='figures/gtk-remove.png' md5='215e3a325a3dd619874e35c30a018bb6'"
-
-#: C/account-irc.page:8(info/desc)
-msgid "Additional information necessary for connecting to IRC networks."
-msgstr "IRC ネットワークに接続する際に必要な追加情報。"
-
-#: C/account-irc.page:16(credit/name) C/account-jabber.page:14(credit/name)
-#: C/accounts-window.page:18(credit/name) C/add-account.page:25(credit/name)
-#: C/disable-account.page:25(credit/name)
-#: C/import-account.page:27(credit/name) C/prev-conv.page:21(credit/name)
-#: C/status-icons.page:20(credit/name)
-msgid "Shaun McCance"
-msgstr "Shaun McCance"
-
-#: C/account-irc.page:31(page/title)
-msgid "IRC account details"
-msgstr "IRC アカウントの詳細"
-
-#: C/account-irc.page:33(page/p)
-msgid ""
-"IRC accounts require different information than many other types of "
-"accounts. To create an IRC account, you must specify at least an IRC network "
-"and a nickname. This page details the information you can provide for an IRC "
-"account."
-msgstr ""
-"IRC アカウントには、他の多くのアカウントの種類とは異なる情報が必要です。IRC "
-"アカウントを作成するには、少なくとも IRC ネットワークとニックネームを決める必"
-"要があります。このページは、IRC アカウントのための情報を詳しく解説します。"
-
-#: C/account-irc.page:39(note/p) C/irc-manage.page:37(note/p)
-msgid ""
-"You must have the <sys>telepathy-idle</sys> package installed to use IRC in "
-"<app>Empathy</app>."
-msgstr ""
-"<app>Empathy</app> で IRC を使うには、<sys>telepathy-idle</sys> パッケージを"
-"インストールする必要があります。"
-
-#: C/account-irc.page:45(item/title) C/account-irc.page:120(item/title)
-msgid "<gui>Network</gui>"
-msgstr "<gui>ネットワーク</gui>"
-
-#: C/account-irc.page:46(item/p)
-msgid ""
-"IRC is an open system that allows people to run separate IRC networks. Each "
-"network is distinct and has its own users and chat rooms. <app>Empathy</app> "
-"lists the most popular networks in the <gui>Network</gui> drop-down list. "
-"You can add additional networks. See <link xref=\"#networks\"/> below."
-msgstr ""
-"IRC はオープンなシステムであり、様々な IRC ネットワークが存在します。それぞれ"
-"のネットワークは切り離されており、それぞれにユーザーがいて、談話室がありま"
-"す。<app>Empathy</app> は、<gui>ネットワーク</gui>ドロップダウンリストに主な"
-"人気のあるネットワークの一覧を表示します。ネットワークを追加できます。以下の "
-"<link xref=\"#networks\"/> を参照してください。"
-
-#: C/account-irc.page:53(item/title)
-msgid "<gui>Nickname</gui>"
-msgstr "<gui>ニックネーム</gui>"
-
-#: C/account-irc.page:54(item/p)
-msgid ""
-"Your nickname is your unique name on the IRC network. Only one person on a "
-"network may use a given nickname. If you get an error message that says "
-"<link xref=\"prob-conn-name\" role=\"error-msg\"/> you will need to change "
-"your nickname."
-msgstr ""
-"ニックネームは、IRC ネットワーク上で唯一のものです。ひとつのネットワークでは"
-"一人だけがそのニックネームを使います。もし <link xref=\"prob-conn-name\" "
-"role=\"error-msg\"/> というエラーメッセージが出たら、ニックネームを変更する必"
-"要があります。"
-
-#: C/account-irc.page:60(item/title)
-msgid "<gui>Password</gui>"
-msgstr "<gui>パスワード</gui>"
-
-#: C/account-irc.page:61(item/p)
-msgid ""
-"Some servers, particularly those on private networks, require a password to "
-"connect. If you are authorized to use the network, the network "
-"administrators should provide you with a password."
-msgstr ""
-"サーバーによっては、特にプライベートなネットワークでは、接続にパスワードを要"
-"求します。そのようなネットワークの使用を認められる場合、ネットワーク管理者が"
-"パスワードを提供するはずです。"
-
-#: C/account-irc.page:65(note/title)
-msgid "NickServ Passwords"
-msgstr "NickServ のパスワード"
-
-#: C/account-irc.page:66(note/p)
-msgid ""
-"On some networks, nicknames can be registered using a service known as "
-"NickServ. <app>Empathy</app> does not directly support nickname passwords. "
-"On some networks, including the popular freenode network, server passwords "
-"are automatically forwarded to NickServ, allowing you to set this field to "
-"identify yourself with NickServ. See <link xref=\"irc-nick-password\"/> for "
-"more details."
-msgstr ""
-"いくつかのネットワークでは、NickServ というサービスでニックネームを登録できま"
-"す。<app>Empathy</app> は直接にはニックネームのパスワードをサポートしません。"
-"人気のある freenode などのいくつかのネットワークでは、サーバーのパスワードを"
-"自動的に NickServ に送り、NickServ での個人認証に、この項を使用します。詳しく"
-"は <link xref=\"irc-nick-password\"/> を参照してください。"
-
-#: C/account-irc.page:76(item/title)
-msgid "<gui>Real name</gui>"
-msgstr "<gui>実名</gui>"
-
-#: C/account-irc.page:77(item/p)
-msgid ""
-"You can provide your real name in addition to your nickname. Other users "
-"will be able to see this when they view your information."
-msgstr ""
-"ニックネームに加えて、実名を提供できます。ほかのユーザーは、あなたの情報を表"
-"示する場合に、これを見ることができます。"
-
-#: C/account-irc.page:81(item/title)
-msgid "<gui>Quit message</gui>"
-msgstr "<gui>終了時メッセージ</gui>"
-
-#: C/account-irc.page:82(item/p)
-msgid ""
-"When you go offline, a quit message is sent to all the chat rooms you’re in "
-"and to all the users you’re having a private conversation with. Use this "
-"field to provide a custom quit message."
-msgstr ""
-"オフラインになるとき、参加しているすべての談話室とプライベート会話中のすべて"
-"の相手先に、終了時のメッセージを送ります。この項は、独自設定の終了時メッセー"
-"ジを提供する場合に使います。"
-
-#: C/account-irc.page:94(info/title)
-msgctxt "link"
-msgid "IRC Networks"
-msgstr "IRC ネットワーク"
-
-#: C/account-irc.page:97(section/title)
-msgid "Networks"
-msgstr "ネットワーク"
-
-#: C/account-irc.page:99(section/p)
-msgid ""
-"<app>Empathy</app> includes a list of popular IRC networks. If you wish to "
-"another IRC network, you can add it to the list. You can also modify "
-"networks and remove them from the list."
-msgstr ""
-"<app>Empathy</app> は、主な IRC ネットワークの一覧を持っています。それ以外の"
-"ネットワークを追加できます。一覧にあるネットワークの変更や削除もできます。"
-
-#: C/account-irc.page:104(item/p)
-msgid ""
-"To add a network to the list, click <media type=\"image\" mime=\"image/png\" "
-"src=\"figures/gtk-add.png\" width=\"16\" height=\"16\">Add</media>."
-msgstr ""
-"一覧にネットワークを追加するには、<media type=\"image\" mime=\"image/png\" "
-"src=\"figures/gtk-add.png\" width=\"16\" height=\"16\">追加</media> をクリッ"
-"クします。"
-
-#: C/account-irc.page:107(item/p)
-msgid ""
-"To modify a network in the list, select the network and click <media type="
-"\"image\" mime=\"image/png\" src=\"figures/gtk-edit.png\" width=\"16\" "
-"height=\"16\">Edit</media>."
-msgstr ""
-"一覧のネットワークを変更するには、ネットワークを指定し、<media type=\"image"
-"\" mime=\"image/png\" src=\"figures/gtk-edit.png\" width=\"16\" height=\"16"
-"\">編集</media>をクリックします。"
-
-#: C/account-irc.page:110(item/p)
-msgid ""
-"To remove a network from the list, select the network and click <media type="
-"\"image\" mime=\"image/png\" src=\"figures/gtk-remove.png\" width=\"16\" "
-"height=\"16\">Remove</media>."
-msgstr ""
-"一覧のネットワークを削除するには、ネットワークを指定し、<media type=\"image"
-"\" mime=\"image/png\" src=\"figures/gtk-remove.png\" width=\"16\" height=\"16"
-"\">削除</media>をクリックします。"
-
-#: C/account-irc.page:115(section/p)
-msgid ""
-"When adding or modifying a network, you can enter the following information:"
-msgstr "ネットワークの追加や変更の場合、次の情報を入力できます。"
-
-#: C/account-irc.page:121(item/p)
-msgid ""
-"This is the name of the network as you want it to appear in the list of "
-"networks."
-msgstr "ネットワークの一覧に表示される、そのネットワークの名前です。"
-
-# 元の語 Charset によらず、「文字エンコーディング」と訳す
-#: C/account-irc.page:125(item/title)
-msgid "<gui>Charset</gui>"
-msgstr "<gui>文字エンコーディング</gui>"
-
-#: C/account-irc.page:126(item/p)
-msgid ""
-"This specifies the character encoding that is typically used on this "
-"network. A character encoding is a specific way of recording characters "
-"internally in a computer. There are many character encodings, and you need "
-"to use the same character encoding as other users to see their messages "
-"correctly."
-msgstr ""
-"このネットワークで主として使われる文字エンコーディングを指定します。文字エン"
-"コーディングは、コンピューターの内部に文字を記録する方法のことです。多くの文"
-"字エンコーディングがありますが、ほかのユーザーのメッセージを正しく表示するに"
-"は、そのユーザーと同じ文字エンコーディングを使う必要があります。"
-
-#: C/account-irc.page:135(item/p)
-msgid ""
-"By default, <app>Empathy</app> uses UTF-8, a modern character encoding that "
-"can handle text from most of the world's languages. Another common encoding "
-"for English and some other Western languages is ISO-8859-1."
-msgstr ""
-"デフォルトでは、<app>Empathy</app> は UTF-8 を使います。UTF-8 は世界中の言語"
-"の大部分を扱える文字エンコーディングです。英語およびその他の西欧言語に共通の"
-"別の文字エンコーディングは ISO-8859-1 です。"
-
-#: C/account-irc.page:141(item/title)
-msgid "<gui>Servers</gui>"
-msgstr "<gui>サーバー</gui>"
-
-#: C/account-irc.page:142(item/p)
-msgid ""
-"An IRC network may have many servers you can connect to. When you are "
-"connected to a server on a particular network, you can communicate with all "
-"users on all other servers on that network. You can add and remove servers "
-"for this network using the <gui>Add</gui> and <gui>Remove</gui> buttons."
-msgstr ""
-"ひとつの IRC ネットワークに接続可能なサーバーが数多くあることがあります。ある"
-"ネットワークのひとつのサーバーに接続すれば、そのネットワークのほかのすべての"
-"サーバーのすべてのユーザーと交流できます。このネットワークで使用するサーバー"
-"を、<gui>追加</gui>と<gui>削除</gui>ボタンで、追加・削除できます。"
-
-#: C/account-irc.page:147(item/p)
-msgid ""
-"When a server is selected, click the field under <gui>Server</gui> or "
-"<gui>Port</gui> to edit it. Alternatively, use the left and right arrow keys "
-"to focus the field, and press the space bar to begin editing."
-msgstr ""
-"サーバーを指定して、<gui>サーバー</gui>や<gui>ポート</gui>の下の項をクリック"
-"して編集します。別の方法として、左右の矢印キーで項を指し、スペースバーを押し"
-"て編集を始めます。"
-
-#: C/account-irc.page:151(item/p)
-msgid ""
-"Select the check box in the <gui>SSL</gui> column to encrypt all "
-"communication with a server. Note that this does not prevent other users on "
-"the network from seeing what you write on public chat rooms."
-msgstr ""
-"<gui>SSL</gui> の列のボックスをチェックすると、サーバーとのすべての通信を暗号"
-"化します。これは、公開の談話室に書いたものをネットワークのほかのユーザーが見"
-"ることを妨げないことに注意してください。"
-
-#: C/account-jabber.page:7(info/desc)
-msgid "Advanced options for Jabber and Google Talk accounts."
-msgstr "Jabber や Google トークのアカウントの詳細オプションについて。"
-
-#: C/account-jabber.page:29(page/title)
-msgid "Jabber account details"
-msgstr "Jabber アカウントの詳細"
-
-#: C/account-jabber.page:31(page/p)
-msgid ""
-"Most Jabber accounts will require only a login ID and a password to connect. "
-"For some accounts or on certain types of networks, you may need to enter "
-"additional information in the <gui>Advanced</gui> section. Normally, you "
-"will not need to use the advanced options below. For general instructions on "
-"adding an account, see <link xref=\"add-account\"/>."
-msgstr ""
-"ほとんどの Jabber アカウントは、ログイン ID とパスワードだけが必要です。いく"
-"つかのアカウントやネットワークの種類では、<gui>詳細</gui>セクションに追加情報"
-"を入力する必要があります。通常、以下の詳細情報は必要ありません。一般的なアカ"
-"ウントの追加の説明は、<link xref=\"add-account\"/> を参照してください。"
-
-#: C/account-jabber.page:39(note/p)
-msgid ""
-"Google Talk is a type of Jabber account. These instructions hold for Google "
-"Talk accounts as well."
-msgstr ""
-"Google トークは、Jabber アカウントの一種です。この説明は Google トークについ"
-"ても当てはまります。"
-
-#: C/account-jabber.page:45(item/title)
-msgid "<gui>Encryption required (TLS/SSL)</gui>"
-msgstr "<gui>TLS/SSL での暗号化が必要</gui>"
-
-#: C/account-jabber.page:46(item/title)
-msgid "<gui>Ignore SSL certificate errors</gui>"
-msgstr "<gui>SSL の証明書に関連するエラーは無視</gui>"
-
-#: C/account-jabber.page:47(item/p)
-msgid ""
-"Whenever possible, communication between <app>Empathy</app> and the Jabber "
-"server is encrypted. If encrypted communication is not possible, messages "
-"may be sent unencrypted. Select <gui>Encryption required</gui> to prevent "
-"<app>Empathy</app> from communicating with the Jabber server when encryption "
-"is not possible."
-msgstr ""
-"可能な限り、<app>Empathy</app> と Jabber サーバーの通信は暗号化されます。暗号"
-"化通信ができない場合、メッセージは暗号化されずに送られます。<gui>暗号化が必要"
-"</gui>を指定すると、暗号化ができない場合には <app>Empathy</app> と Jabber "
-"サーバーとの通信を行いません。"
-
-#: C/account-jabber.page:52(item/p)
-msgid ""
-"Some Jabber servers may encrypt data using invalid certificates, or using "
-"certificates from unknown authorities. If you trust the server you are "
-"connecting to, you can select <gui>Ignore SSL certificate errors</gui> to "
-"allow encrypted communication with invalid certificates."
-msgstr ""
-"Jabber サーバーのなかには、有効でない証明書や不明の認証局の証明書を使って暗号"
-"化するものがあります。そのサーバーを信頼して接続するには、<gui>SSL の証明書に"
-"関連するエラーは無視</gui>を指定し、有効でない証明書で暗号化通信を行えます。"
-
-#: C/account-jabber.page:59(item/title)
-msgid "<gui>Resource</gui>"
-msgstr "<gui>リソース</gui>"
-
-#: C/account-jabber.page:60(item/title)
-msgid "<gui>Priority</gui>"
-msgstr "<gui>優先度</gui>"
-
-#: C/account-jabber.page:61(item/p)
-msgid ""
-"If you have multiple applications (for instance, on separate computers) "
-"connected to your account at the same time, you can set a resource to "
-"uniquely identify each one. By default, <app>Empathy</app> will use "
-"<input>Telepathy</input> as the resource."
-msgstr ""
-"複数のアプリケーション (たとえば、別のコンピューター) を使って、ひとつのアカ"
-"ウントに同時に接続する場合、それぞれを区別するためにリソースを設定できます。"
-"デフォルトで、<app>Empathy</app> はリソースとして <input>Telepathy</input> を"
-"使います。"
-
-#: C/account-jabber.page:65(item/p)
-msgid ""
-"You can set the priority to specify which application should receive "
-"incoming messages from your contacts. New messages will be sent to the "
-"application with the highest priority."
-msgstr ""
-"相手先からのメッセージをどちらのアプリケーションで受け取るか、優先度を設定で"
-"きます。新しいメッセージは優先度の高いほうに送られます。"
-
-#: C/account-jabber.page:70(item/title)
-msgid "<gui>Override server settings</gui>"
-msgstr "<gui>サーバーの設定を上書き</gui>"
-
-#: C/account-jabber.page:71(item/p)
-msgid ""
-"<app>Empathy</app> will use default settings to connect to the Jabber server "
-"based on your login ID. For some Jabber servers, you will need to enter "
-"custom server settings manually. These settings should be provided for you "
-"by your Jabber provider."
-msgstr ""
-"<app>Empathy</app> は、ログイン ID に基づき、デフォルトの設定で Jabber サー"
-"バーに接続しようとします。なかには手動でサーバー設定を入力する必要がある "
-"Jabber サーバーもあります。これらの設定情報は Jabber プロバイダーから配布され"
-"るはずです。"
-
-#: C/accounts-window.page:11(info/desc)
-msgid "Add, modify, and delete accounts."
-msgstr "アカウントを追加、変更、削除します。"
-
-#: C/accounts-window.page:33(page/title)
-msgid "Accounts Window"
-msgstr "アカウントウィンドウ"
-
-#: C/accounts-window.page:35(page/p)
-msgid ""
-"The <gui>Accounts</gui> window allows you to add, modify, and delete "
-"accounts."
-msgstr ""
-"<gui>アカウント</gui>ウィンドウで、アカウントを追加、変更、削除できます。"
-
-#: C/accounts-window.page:43(section/title)
-msgid "Account Details"
-msgstr "アカウントの詳細"
-
-#: C/accounts-window.page:44(section/p)
-msgid ""
-"For most types of accounts, you can simply enter a login ID and a password. "
-"Certain accounts or account types, however, may require additional "
-"information."
-msgstr ""
-"ほとんどのアカウントの種類で、ログイン ID とパスワードを入力するだけです。し"
-"かし、それに加えて情報が必要なアカウントやアカウントの種類もあります。"
-
-#: C/add-account.page:9(info/desc)
-msgid "Add a new account to <app>Empathy</app>."
-msgstr "<app>Empathy</app> に新しいアカウントを追加します。"
-
-#: C/add-account.page:40(page/title)
-msgid "Add a new account"
-msgstr "新規アカウントの追加"
-
-#: C/add-account.page:42(page/p)
-msgid ""
-"You can add instant messaging accounts from any supported service to "
-"communicate with all of your contacts in <app>Empathy</app>. For some "
-"account providers, these steps will also allow you to register for a new "
-"account. For more details, see <link xref=\"create-account\"/>."
-msgstr ""
-"<app>Empathy</app> でさまざまな相手先と連絡を取るために、<app>Empathy</app> "
-"がサポートするインスタントメッセージのアカウントを追加できます。いくつかのア"
-"カウント発行元では、この段階で新規アカウントの作成もできます。詳しくは<link "
-"xref=\"create-account\"/>を参照してください。"
-
-#: C/add-account.page:49(item/p) C/disable-account.page:49(item/p)
-#: C/irc-nick-password.page:50(item/p) C/remove-account.page:43(item/p)
-msgid ""
-"From the <gui>Contact List</gui> window, choose <guiseq><gui>Edit</gui> "
-"<gui>Accounts</gui></guiseq>, or press <key>F4</key>."
-msgstr ""
-"<gui>相手先の一覧</gui>ウィンドウから、<guiseq><gui>編集</gui><gui>アカウント"
-"</gui></guiseq>を選ぶか、<key>F4</key> を押します。"
-
-#: C/add-account.page:53(item/p)
-msgid "Click <gui style=\"button\">+</gui>."
-msgstr "<gui style=\"button\">+</gui> をクリックします。"
-
-# Protocol は廃止されたようだ
-#: C/add-account.page:58(item/p)
-msgid ""
-"From the <gui>Protocol</gui> drop-down list, select the type of account you "
-"wish to add."
-msgstr ""
-"<gui>プロトコル</gui>ドロップダウンリストから、追加するアカウントの種類を選び"
-"ます。"
-
-#: C/add-account.page:62(item/p)
-msgid ""
-"If you do not already have a registered account, select <gui>Create a new "
-"account on the server</gui>. This feature is not available for all account "
-"types, and may not work with some account providers. See <link xref=\"create-"
-"account\"/> for more information."
-msgstr ""
-"登録済みのアカウントをまだ持っていないなら、<gui>サーバーで新しいアカウントを"
-"作る</gui>を選びます。この機能はすべてのアカウントの種類で利用できるわけでは"
-"ありませんし、アカウント配布元によっては機能しません。詳しくは <link xref="
-"\"create-account\"/> を参照してください。"
-
-#: C/add-account.page:69(item/p)
-msgid ""
-"Enter the required information. For most accounts, you will only need a "
-"login ID and a password. Some accounts may require additional information. "
-"See <link xref=\"accounts-window#details\"/>for more information."
-msgstr ""
-"必要な情報を入力します。ほとんどのアカウントでは、ログイン ID とパスワードの"
-"みが必要です。さらに追加情報が必要なアカウントもあります。詳しくは <link "
-"xref=\"accounts-window#details\"/> を参照してください。"
-
-# Apply は廃止されたようだ。
-#: C/add-account.page:74(item/p) C/import-account.page:61(item/p)
-#: C/irc-nick-password.page:63(item/p)
-msgid "Click <gui style=\"button\">Apply</gui>."
-msgstr "<gui style=\"button\">適用</gui>をクリックします。"
-
-#: C/add-account.page:81(note/p)
-msgid ""
-"To change the name that identifies the account in the <gui>Accounts</gui> "
-"window, select the account from the list on the left and either click on the "
-"name or press the space bar. Edit the account name and press <key>Enter</"
-"key> when you’re finished."
-msgstr ""
-"<gui>アカウント</gui>ウィンドウで、アカウントを識別するための名前を変更するに"
-"は、左側の一覧でアカウントを選び、名前をクリックするかスペースバーを押しま"
-"す。アカウント名を編集し、終わったら <key>Enter</key> を押します。"
-
-#: C/add-contact.page:9(info/desc)
-msgid "Add someone to the contact list."
-msgstr "だれかを相手先の一覧に追加します。"
-
-#: C/add-contact.page:18(credit/name) C/change-status.page:24(credit/name)
-#: C/prob-conn-acctdisabled.page:15(credit/name)
-#: C/prob-conn-auth.page:17(credit/name)
-#: C/prob-conn-neterror.page:15(credit/name) C/prob-conn.page:14(credit/name)
-#: C/send-file.page:17(credit/name) C/send-message.page:17(credit/name)
-msgid "Phil Bull"
-msgstr "Phil Bull"
-
-#: C/add-contact.page:33(page/title)
-msgid "Add someone to your list of contacts"
-msgstr "相手先の一覧への追加"
-
-#: C/add-contact.page:37(item/p)
-msgid "Choose <guiseq><gui>Chat</gui><gui>Add Contact</gui></guiseq>."
-msgstr ""
-"<guiseq><gui>チャット</gui><gui>相手先を追加</gui></guiseq>を選びます。"
-
-#: C/add-contact.page:40(item/p)
-msgid ""
-"From the <gui>Account</gui> drop-down list, select the account you wish to "
-"use to connect to your contact. Your contact will need to be using the same "
-"service as the account you select."
-msgstr ""
-"<gui>アカウント</gui>ドロップダウンリストから、相手先に接続したいアカウントを"
-"指定します。相手先は、そのアカウントと同じサービスを利用していることが必要で"
-"す。"
-
-#: C/add-contact.page:45(item/p)
-msgid ""
-"In the <gui>Identifier</gui> field, enter your contact’s login ID, username, "
-"screen name, or other appropriate identifier for the service type."
-msgstr ""
-"<gui>識別子</gui>欄に、相手先のログイン ID、ユーザー名、スクリーン名など、"
-"サービスの種類に応じた適切な識別子を入力します。"
-
-#: C/add-contact.page:49(item/p)
-msgid ""
-"In the <gui>Alias</gui> field, type your contact’s name as you would like it "
-"to appear in your contact list."
-msgstr "<gui>別名</gui>欄に、相手先の一覧に表示させたい名前を入力します。"
-
-#: C/add-contact.page:53(item/p)
-msgid "Click <gui>Add</gui> to add the person to your list of contacts."
-msgstr "<gui>追加</gui>をクリックして、相手先の一覧にその人を追加します。"
-
-#: C/add-contact.page:61(note/p)
-msgid ""
-"To add a new person to your list of contacts, you need to be connected to "
-"the Internet and to your account."
-msgstr ""
-"相手先の一覧に新しい人を追加するには、インターネットに接続し、その相手先に接"
-"続していることが必要です。"
-
-#. This is a reference to an external file such as an image or video. When
-#. the file changes, the md5 hash will change to let you know you need to
-#. update your localized copy. The msgstr is not used at all. Set it to
-#. whatever you like once you have updated your copy of the file.
-#.
-#. This is a reference to an external file such as an image or video. When
-#. the file changes, the md5 hash will change to let you know you need to
-#. update your localized copy. The msgstr is not used at all. Set it to
-#. whatever you like once you have updated your copy of the file.
-#.
-#. This is a reference to an external file such as an image or video. When
-#. the file changes, the md5 hash will change to let you know you need to
-#. update your localized copy. The msgstr is not used at all. Set it to
-#. whatever you like once you have updated your copy of the file.
-#: C/audio-call.page:36(media) C/audio-video.page:70(media)
-#: C/video-call.page:39(media)
-msgctxt "_"
-msgid ""
-"external ref='figures/camera-web.png' md5='8166b4372f25b78cbf5a64fe2eac2ce5'"
-msgstr ""
-"external ref='figures/camera-web.png' md5='8166b4372f25b78cbf5a64fe2eac2ce5'"
-
-#: C/audio-call.page:9(info/desc)
-msgid "Call your contacts over the Internet."
-msgstr "インターネットで通話します。"
-
-#: C/audio-call.page:27(page/title)
-msgid "Start an audio conversation"
-msgstr "音声会話の開始"
-
-#: C/audio-call.page:29(page/p)
-msgid ""
-"You can call your contacts and have an audio conversation with them. This "
-"features only works with certain types of accounts, and it requires the "
-"other person to have an application that supports audio calls."
-msgstr ""
-"相手先と音声会話ができます。この機能は、アカウントの種類が対応しており、相手"
-"先が音声通話をサポートしたアプリケーションを使用している場合にのみ働きます。"
-
-#: C/audio-call.page:34(item/p)
-msgid ""
-"From the <gui>Contact List</gui> window, click the <media type=\"image\" "
-"mime=\"image/png\" src=\"figures/camera-web.png\">video call</media> icon "
-"next to the name of the contact you wish to call and choose <gui style="
-"\"menuitem\">Audio Call</gui>."
-msgstr ""
-"<gui>相手先の一覧</gui>ウィンドウから、通話したい相手先の名前の横にある"
-"<media type=\"image\" mime=\"image/png\" src=\"figures/camera-web.png"
-"\">video call</media> アイコンをクリックし、<gui style=\"menuitem\">音声通話"
-"</gui>を選びます。"
-
-#: C/audio-call.page:42(item/p) C/video-call.page:44(item/p)
-msgid ""
-"A new window will open. When the connection is established, you will see "
-"<gui>Connected</gui> at the bottom of the window, along with the total "
-"conversation time."
-msgstr ""
-"新しいウィンドウが開きます。接続が確立すると、ウィンドウの最下部に<gui>オンラ"
-"イン</gui>と表示され、その脇に会話時間も表示されます。"
-
-#: C/audio-call.page:48(item/p) C/video-call.page:49(item/p)
-msgid "To end the conversation, click on <gui style=\"button\">Hang up</gui>."
-msgstr ""
-"会話を終了するには、<gui style=\"button\">接続を切る</gui>をクリックします。"
-
-#: C/audio-call.page:55(note/p)
-msgid ""
-"To turn an audio conversation into a video conversation, choose <guiseq><gui "
-"style=\"menu\">Video</gui> <gui style=\"menuitem\">Video On</gui></guiseq>."
-msgstr ""
-"音声会話をビデオ会話に切り替えるには、<guiseq><gui style=\"menu\">ビデオ</"
-"gui><gui style=\"menuitem\">ビデオ入</gui></guiseq>を選びます。"
-
-#: C/audio-call.page:63(section/title)
-msgid "Start an audio conversation with a meta-contact"
-msgstr "メタ相手先との音声会話の開始"
-
-#: C/audio-call.page:66(item/p) C/send-message.page:53(item/p)
-#: C/video-call.page:64(item/p)
-msgid ""
-"From the <gui>Contact List</gui> window, right-click on the meta-contact."
-msgstr "<gui>相手先の一覧</gui>ウィンドウから、メタ相手先を右クリックします。"
-
-#: C/audio-call.page:71(item/p)
-msgid ""
-"Select the contact you want to have the conversation, and from the menu "
-"select <gui style=\"menuitem\">Audio Call</gui>."
-msgstr ""
-"会話したい相手先を選び、メニューから <gui style=\"menuitem\">音声会話</gui>を"
-"指定します。"
-
-#: C/audio-call.page:78(note/p) C/send-message.page:65(note/p)
-#: C/video-call.page:76(note/p)
-msgid ""
-"To recognize if a contact is a <em>meta-contact</em>, move your mouse on a "
-"contact in the <gui>Contact List</gui> window, and stop over it for a "
-"second: a small pop-up message will appear showing the number of the "
-"contacts that form the meta-contact."
-msgstr ""
-"<em>メタ相手先</em>かどうかを調べるには、<gui>相手先の一覧</gui>ウィンドウの"
-"相手先の上にマウスを移動し、数秒間その上に止めます。小さなポップアップ・メッ"
-"セージが現れ、メタ相手先に含まれる相手先の数が表示されます。"
-
-#. This is a reference to an external file such as an image or video. When
-#. the file changes, the md5 hash will change to let you know you need to
-#. update your localized copy. The msgstr is not used at all. Set it to
-#. whatever you like once you have updated your copy of the file.
-#: C/audio-video.page:58(media)
-msgctxt "_"
-msgid ""
-"external ref='figures/audio-input-microphone.png' "
-"md5='8d89026b66a263a3bc5b1f0665948567'"
-msgstr ""
-"external ref='figures/audio-input-microphone.png' "
-"md5='8d89026b66a263a3bc5b1f0665948567'"
-
-#: C/audio-video.page:8(info/desc)
-msgid ""
-"Information on when it is possible to have an audio or video conversation."
-msgstr "音声またはビデオの会話はどのようなときに可能かについての情報。"
-
-#: C/audio-video.page:32(page/title)
-msgid "Audio and video support"
-msgstr "音声とビデオのサポート"
-
-#: C/audio-video.page:34(page/p)
-msgid ""
-"You can only have audio and video conversation with contacts who are using "
-"an application which also supports this feature. When your contacts support "
-"audio or video conversations, you will see the following icons next to their "
-"names in the contact list:"
-msgstr ""
-"音声およびビデオの会話ができるのは、この機能をサポートしたアプリケーションを"
-"使用している相手先のみです。相手先が音声またはビデオの会話をサポートしている"
-"場合、相手先の一覧で、相手先の名前の横に次のようなアイコンが表示されます。"
-
-#: C/audio-video.page:43(td/p)
-msgid "Icon"
-msgstr "アイコン"
-
-#: C/audio-video.page:48(td/p)
-msgid "Description"
-msgstr "説明"
-
-#: C/audio-video.page:57(td/p)
-msgid ""
-"<media type=\"image\" mime=\"image/png\" src=\"figures/audio-input-"
-"microphone.png\"> Icon for audio conversation </media>"
-msgstr ""
-"<media type=\"image\" mime=\"image/png\" src=\"figures/audio-input-"
-"microphone.png\"> 音声通話のアイコン </media>"
-
-#: C/audio-video.page:64(td/p)
-msgid "The contact is able to have an audio conversation."
-msgstr "この相手先は音声会話が可能です。"
-
-#: C/audio-video.page:69(td/p)
-msgid ""
-"<media type=\"image\" mime=\"image/png\" src=\"figures/camera-web.png\"> "
-"Icon for video conversation </media>"
-msgstr ""
-"<media type=\"image\" mime=\"image/png\" src=\"figures/camera-web.png\"> ビデ"
-"オ会話のアイコン </media>"
-
-#: C/audio-video.page:76(td/p)
-msgid "The contact is able to have a video conversation."
-msgstr "この相手先はビデオ会話が可能です。"
-
-#: C/audio-video.page:83(note/p)
-msgid ""
-"In order to have an audio conversation, you need to have a sound card that "
-"is supported by your operating system, and a working microphone."
-msgstr ""
-"音声会話を行うためには、OS がサポートしているサウンドカード、およびマイクロ"
-"フォンが必要です。"
-
-#: C/audio-video.page:87(note/p)
-msgid ""
-"In order to have a video conversation, you need to have a webcam that is "
-"supported by your operating system, and a working microphone."
-msgstr ""
-"ビデオ会話を行うためには、OS がサポートしているウェブカメラ、およびマイクロ"
-"フォンが必要です。"
-
-#: C/audio-video.page:95(section/title)
-msgid "Supported Account Types"
-msgstr "サポートされているアカウントの種類"
-
-#: C/audio-video.page:97(section/p)
-msgid ""
-"You can only have audio and video conversations using accounts on certain "
-"supported services. The following table lists whether audio and video is "
-"supported for each type of account."
-msgstr ""
-"音声およびビデオの会話ができるのは、この機能をサポートしているサービスのアカ"
-"ウントを使用している場合のみです。次の表に、それぞれのアカウントの種類が音声"
-"とビデオをサポートしているかを示します。"
-
-#: C/audio-video.page:102(note/p)
-msgid ""
-"Account types are provided by plugins. Your system may not have all of the "
-"following types available, or it may have types not listed here. Updated "
-"plugins may make audio or video conversations possible on account types that "
-"are listed as unsupported here."
-msgstr ""
-"アカウントの種類は、プラグインが提供します。次の表のすべてが有効でない、また"
-"は表にない種類が有効である場合があります。この表でサポートされないとなってい"
-"るアカウントの種類でも、プラグインを更新すると音声またはビデオの会話が可能と"
-"なる場合があります。"
-
-#: C/audio-video.page:128(td/p)
-msgid "Service"
-msgstr "サービス名"
-
-#: C/audio-video.page:129(td/p)
-msgid "Audio"
-msgstr "音声"
-
-#: C/audio-video.page:130(td/p)
-msgid "Video"
-msgstr "ビデオ"
-
-#: C/audio-video.page:135(td/p)
-msgid "AIM"
-msgstr "AIM"
-
-#: C/audio-video.page:136(td/p) C/audio-video.page:137(td/p)
-#: C/audio-video.page:141(td/p) C/audio-video.page:142(td/p)
-#: C/audio-video.page:146(td/p) C/audio-video.page:147(td/p)
-#: C/audio-video.page:156(td/p) C/audio-video.page:157(td/p)
-#: C/audio-video.page:161(td/p) C/audio-video.page:162(td/p)
-#: C/audio-video.page:166(td/p) C/audio-video.page:167(td/p)
-#: C/audio-video.page:181(td/p) C/audio-video.page:182(td/p)
-#: C/audio-video.page:186(td/p) C/audio-video.page:187(td/p)
-#: C/audio-video.page:191(td/p) C/audio-video.page:192(td/p)
-#: C/audio-video.page:196(td/p) C/audio-video.page:197(td/p)
-#: C/audio-video.page:201(td/p) C/audio-video.page:202(td/p)
-#: C/audio-video.page:211(td/p) C/audio-video.page:212(td/p)
-#: C/audio-video.page:216(td/p) C/audio-video.page:217(td/p)
-msgid "No"
-msgstr "不可"
-
-#: C/audio-video.page:140(td/p)
-msgid "Facebook Chat"
-msgstr "Facebook Chat"
-
-#: C/audio-video.page:145(td/p)
-msgid "gadugadu"
-msgstr "gadugadu"
-
-#: C/audio-video.page:150(td/p)
-msgid "Google Talk"
-msgstr "Google トーク"
-
-#: C/audio-video.page:151(td/p) C/audio-video.page:152(td/p)
-#: C/audio-video.page:171(td/p) C/audio-video.page:172(td/p)
-#: C/audio-video.page:176(td/p) C/audio-video.page:177(td/p)
-#: C/audio-video.page:206(td/p) C/audio-video.page:207(td/p)
-msgid "Yes"
-msgstr "可"
-
-#: C/audio-video.page:155(td/p)
-msgid "Groupwise"
-msgstr "Groupwise"
-
-#: C/audio-video.page:160(td/p)
-msgid "ICQ"
-msgstr "ICQ"
-
-#: C/audio-video.page:165(td/p) C/create-account.page:107(section/title)
-msgid "IRC"
-msgstr "IRC"
-
-#: C/audio-video.page:170(td/p) C/create-account.page:60(section/title)
-msgid "Jabber"
-msgstr "Jabber"
-
-#: C/audio-video.page:175(td/p)
-msgid "MSN"
-msgstr "MSN"
-
-#: C/audio-video.page:180(td/p)
-msgid "myspace"
-msgstr "myspace"
-
-#: C/audio-video.page:185(td/p)
-msgid "qq"
-msgstr "qq"
-
-#: C/audio-video.page:190(td/p) C/create-account.page:78(section/title)
-msgid "People Nearby"
-msgstr "People Nearby"
-
-#: C/audio-video.page:195(td/p)
-msgid "sametime"
-msgstr "sametime"
-
-#: C/audio-video.page:200(td/p)
-msgid "silc"
-msgstr "silc"
-
-#: C/audio-video.page:205(td/p) C/create-account.page:89(section/title)
-msgid "SIP"
-msgstr "SIP"
-
-#: C/audio-video.page:210(td/p)
-msgid "Yahoo!"
-msgstr "Yahoo!"
-
-#: C/audio-video.page:215(td/p)
-msgid "zephyr"
-msgstr "zephyr"
-
-#: C/change-status.page:9(info/desc)
-msgid "Change your status to advertise your availability to your contacts."
-msgstr "相手先に自分の状態を知らせるために、在席状況を変更します。"
-
-#: C/change-status.page:39(page/title)
-msgid "Change your status"
-msgstr "在席状況の変更"
-
-#: C/change-status.page:41(page/p)
-msgid ""
-"You can set your status to indicate your availability to your contacts. "
-"<app>Empathy</app> allows you to select from a list of defined statuses."
-msgstr ""
-"相手先にあなたの状態を示すため、在席状況を設定できます。<app>Empathy</app> で"
-"は、定義済みの在席状況から選択できます。"
-
-#: C/change-status.page:46(item/p)
-msgid ""
-"Click on the drop-down list at the top of the <gui>Contact List</gui> window."
-msgstr ""
-"<gui>相手先の一覧</gui>ウィンドウの最上部のドロップダウンリストをクリックしま"
-"す。"
-
-#: C/change-status.page:51(item/p)
-msgid "Select a status from the list."
-msgstr "一覧から在席状況を選択します。"
-
-#: C/change-status.page:57(page/p)
-msgid ""
-"See <link xref=\"status-icons\"/> for a list of the built-in statuses and "
-"what they mean. You can also <link xref=\"set-custom-status\">add custom "
-"status messages</link> to provide more information about your availability "
-"to your contacts."
-msgstr ""
-"定義済みの在席状況とその意味は <link xref=\"status-icons\"/> を参照してくださ"
-"い。<link xref=\"set-custom-status\">独自の在席状況メッセージを追加</link> し"
-"て、相手先にあなたの状態について詳しく示すこともできます。"
-
-#: C/change-status.page:63(note/p)
-msgid ""
-"If you do not use your computer for a while, or if the screensaver is on, "
-"the status will be automatically set to Away."
-msgstr ""
-"一定時間コンピューターを操作しない場合、またはスクリーンセーバーが動いている"
-"場合、在席状況は自動的に「離席中」になります。"
-
-#: C/create-account.page:9(info/desc)
-msgid "Register for an account with one of the supported messaging services."
-msgstr "対応しているメッセージングサービスにアカウントを登録します。"
-
-#: C/create-account.page:34(page/title)
-msgid "Register for a new account"
-msgstr "新しいアカウントの登録"
-
-#: C/create-account.page:36(page/p)
-msgid ""
-"Most account types require you to create an account with a account provider "
-"before you can connect using instant messaging applications like "
-"<app>Empathy</app>. With some account providers, you can use <app>Empathy</"
-"app> to register for a new account, using the same steps as you would to "
-"<link xref=\"add-account\">add an account</link>."
-msgstr ""
-"ほとんどのアカウントの種類は、<app>Empathy</app> のようなインスタントメッセー"
-"ジング・アプリケーションで接続する前にアカウント配布元でアカウントを作成して"
-"おく必要があります。アカウント配布元によっては、<app>Empathy</app> を使って、"
-"<link xref=\"add-account\">アカウントの追加</link> と同じ手順で、新しいアカウ"
-"ントを登録できます。"
-
-#: C/create-account.page:42(page/p)
-msgid ""
-"This page provides information on creating a new account for various types "
-"of accounts. Your account provider should give you a login ID and a "
-"password, as well as any additional information you need to connect using "
-"<app>Empathy</app>."
-msgstr ""
-"このページは、種々のアカウントの新規作成についての情報を提供します。アカウン"
-"ト配布元はログイン ID とパスワード、それに <app>Empathy</app> を用いて接続す"
-"るのに必要な追加の情報を提供するでしょう。"
-
-#: C/create-account.page:47(section/title)
-msgid "Facebook"
-msgstr "Facebook"
-
-#: C/create-account.page:48(section/p)
-msgid ""
-"Facebook is one of the most-used social networks. It allows users to create "
-"their own profile and to communicate with their friends."
-msgstr ""
-"Facebook は最もよく利用されているソーシャルネットワークのひとつです。ユーザー"
-"は自身のプロフィールを作成でき、友人たちと交流できます。"
-
-#: C/create-account.page:52(section/p)
-msgid ""
-"To use Facebook to communicate with your friends, you will need to create a "
-"new account from the website: <link href=\"http://www.facebook.com\">www."
-"facebook.com</link>."
-msgstr ""
-"Facebook を利用して友人たちと交流するには、ウェブサイト <link href=\"http://"
-"www.facebook.com\">www.facebook.com</link> で新しくアカウントを作成する必要が"
-"あります。"
-
-#: C/create-account.page:62(section/p)
-msgid ""
-"Jabber is an open instant messaging system. Like email, Jabber allows you to "
-"choose your account provider and communicate with all other Jabber users, "
-"regardless of their account provider."
-msgstr ""
-"Jabber はオープンなインスタントメッセージング・システムです。電子メールのよう"
-"にアカウント配布元を選べ、その配布元に関係なく、すべての Jabber ユーザーと交"
-"流できます。"
-
-#: C/create-account.page:66(section/p)
-msgid ""
-"You will need to create a new account with a Jabber provider. There are many "
-"free providers; one popular provider is <link href=\"http://register.jabber."
-"org/\">Jabber.org</link>."
-msgstr ""
-"Jabber アカウントの配布元でアカウントを作成する必要があります。多くの無料の配"
-"布元があります。人気の配布元のひとつは <link href=\"http://register.jabber."
-"org/\">Jabber.org</link> です。"
-
-#: C/create-account.page:71(note/p)
-msgid ""
-"If you use Google Mail or Google Talk, you already have a Jabber account. "
-"Google Talk is a Jabber service. Simply use your Google Mail address and "
-"password in <app>Empathy</app> to connect."
-msgstr ""
-"Google Mail や Google トークを使っているなら、すでに Jabber アカウントを持っ"
-"ていることになります。Google トークは Jabber サービスのひとつです。"
-"<app>Empathy</app> での接続に、単に Google Mail アドレスとパスワードを使って"
-"ください。"
-
-#: C/create-account.page:80(section/p)
-msgid ""
-"You do not need to create an account with a service provider to use this "
-"feature. This service works whenever you are connected to a local network, "
-"such as a wireless hotspot. It automatically finds all other users on the "
-"network who are also using this service."
-msgstr ""
-"この機能を使うために新しいアカウントを作成する必要はありません。このサービス"
-"はローカルネットワークに接続 (無線ホットスポットなど) すると働きます。その"
-"ネットワークに接続してこのサービスを利用している他のすべてのユーザーを自動的"
-"に見つけます。"
-
-#: C/create-account.page:85(section/p)
-msgid "For more information, see <link xref=\"salut-protocol\"/>."
-msgstr "詳しい情報は <link xref=\"salut-protocol\"/> を参照してください。"
-
-#: C/create-account.page:91(section/p)
-msgid ""
-"SIP is an open system which allows users to have audio and video "
-"conversations over the Internet. You need to create an account with a SIP "
-"provider. You can communicate with all other SIP users, regardless of which "
-"SIP provider they use."
-msgstr ""
-"SIP は、インターネット上で音声・映像の会話ができるオープンなシステムです。"
-"SIP プロバイダーでアカウントを作成する必要があります。どの SIP プロバイダーを"
-"利用しているかに関係なく、すべての SIP ユーザーと交流できます。"
-
-#: C/create-account.page:97(note/p)
-msgid ""
-"Due to technical differences, the free <link href=\"https://www.ekiga.net/"
-"index.php?page=register\">Ekiga.net</link> service does not currently work "
-"with <app>Empathy</app>."
-msgstr ""
-"技術的な差異のため、無料の <link href=\"https://www.ekiga.net/index.php?"
-"page=register\">Ekiga.net</link> サービスは現在のところ <app>Empathy</app> で"
-"は使えません。"
-
-#: C/create-account.page:102(section/p)
-msgid ""
-"Some SIP providers allow you to call normal phones from your computer. "
-"Generally, you will need to subscribe to a paid service for this feature."
-msgstr ""
-"いくつかの SIP プロバイダーでは、あなたのコンピューターから通常の電話への通話"
-"ができます。一般に、この機能のためには有料サービスの契約が必要です。"
-
-#: C/create-account.page:109(section/p)
-msgid ""
-"You do not need to register for an account to use IRC. Although you specify "
-"a nickname when you add an IRC account to <app>Empathy</app>, this nickname "
-"is only established each time you connect. If another user is using the "
-"nickname, you will need to choose a new nickname."
-msgstr ""
-"IRC を利用するために、アカウントを登録する必要はありません。<app>Empathy</"
-"app> に IRC のアカウントを追加する際にニックネームを指定しますが、このニック"
-"ネームは接続するたびに確立されます。もし別のユーザーがそのニックネームを使っ"
-"ていたら、新しいニックネームを選ぶ必要があります。"
-
-#: C/create-account.page:114(section/p)
-msgid ""
-"Some IRC networks use a service called NickServ to allow users to protect "
-"their nicknames. See <link xref=\"irc-nick-password\"/> for more information."
-msgstr ""
-"ユーザーのニックネームを保護するために、NickServ というサービスを使っている "
-"IRC ネットワークもあります。詳しくは <link xref=\"irc-nick-password\"/> を参"
-"照してください。"
-
-#: C/create-account.page:117(section/p)
-msgid ""
-"Some IRC servers are password protected. You will need to know the password "
-"to connect to these servers. Generally, these are private IRC networks."
-msgstr ""
-"いくつかの IRC サーバーはパスワードで保護されています。それらのサーバーに接続"
-"するにはパスワードを知っている必要があります。一般に、パスワードは IRC ネット"
-"ワークが配布します。"
-
-#: C/create-account.page:122(section/title)
-msgid "Proprietary Services"
-msgstr "プロプライエタリなサービス"
-
-#: C/create-account.page:124(section/p)
-msgid ""
-"There are many proprietary instant messaging services that have been "
-"developed by different companies or organizations. <app>Empathy</app> allows "
-"you to connect to an existing account for most popular services. To create a "
-"new account with one of these services, you will need to visit the service’s "
-"web site and agree to its terms of use."
-msgstr ""
-"各々の企業・団体で開発されたプロプライエタリなインスタントメッセージング・"
-"サービスは数多くあります。<app>Empathy</app> を使って主要なサービスの既存のア"
-"カウントに接続できます。これらのサービスの新しいアカウントを作成するには、"
-"サービスのウェブサイトに行き、利用条件に同意する必要があります。"
-
-#: C/create-account.page:132(item/p)
-msgid "<link href=\"http://dashboard.aim.com/aim\">AIM</link>"
-msgstr "<link href=\"http://dashboard.aim.com/aim\">AIM</link>"
-
-#: C/create-account.page:137(item/p)
-msgid "<link href=\"https://www.icq.com/register/\">ICQ</link>"
-msgstr "<link href=\"https://www.icq.com/register/\">ICQ</link>"
-
-#: C/create-account.page:142(item/p)
-msgid "<link href=\"https://accountservices.passport.net\">MSN</link>"
-msgstr "<link href=\"https://accountservices.passport.net\">MSN</link>"
-
-#: C/create-account.page:147(item/p)
-msgid "<link href=\"https://login.yahoo.com/config/login\">Yahoo!</link>"
-msgstr "<link href=\"https://login.yahoo.com/config/login\">Yahoo!</link>"
-
-#: C/disable-account.page:9(info/desc)
-msgid "Prevent <app>Empathy</app> from automatically logging in to an account."
-msgstr "<app>Empathy</app> が自動的にアカウントにログインすることを止めます。"
-
-#: C/disable-account.page:40(page/title)
-msgid "Disable an account"
-msgstr "アカウントの無効化"
-
-#: C/disable-account.page:42(page/p)
-msgid ""
-"You can disable an account to prevent <app>Empathy</app> from logging in to "
-"it without removing the account entirely. You may wish to disable and re-"
-"enable an account if you only want to be logged in to the account at certain "
-"times, but you still want to use <app>Empathy</app> for other accounts."
-msgstr ""
-"アカウントを完全に削除することなく、<app>Empathy</app> がログインしないよう、"
-"アカウントを無効化できます。あるアカウントは無効化しておき、望むときだけ有効"
-"化したい、しかし <app>Empathy</app> で別のアカウントを使い続けたいという場合"
-"です。"
-
-#: C/disable-account.page:53(item/p)
-msgid ""
-"Select the account you wish to disable from the accounts list on the left "
-"side of the window."
-msgstr ""
-"ウィンドウの左側のアカウント一覧から、無効化したいアカウントを指定します。"
-
-#: C/disable-account.page:57(item/p)
-msgid "On the right side of the window, switch it off."
-msgstr "ウィンドウの右側で、スイッチをオフにします。"
-
-#: C/disable-account.page:62(page/p)
-msgid "To re-enable the account, switch it on."
-msgstr "アカウントをふたたび有効化するには、スイッチをオンにします。"
-
-#: C/favorite-rooms.page:10(info/desc)
-msgid "Set, join and manage favorite rooms."
-msgstr "お気に入りの談話室を設定し、参加し、管理します。"
-
-#: C/favorite-rooms.page:29(page/title)
-msgid "Favorite rooms"
-msgstr "お気に入りの談話室"
-
-#: C/favorite-rooms.page:32(section/title)
-msgid "Set a room as a favorite"
-msgstr "談話室をお気に入りとして設定"
-
-#: C/favorite-rooms.page:35(item/p)
-msgid "Join a room."
-msgstr "談話室に参加します。"
-
-#: C/favorite-rooms.page:40(item/p)
-msgid ""
-"See <link xref=\"irc-join-room\"/> for more information on how to join an "
-"IRC room."
-msgstr ""
-"IRC の談話室に参加する方法の詳細は <link xref=\"irc-join-room\"/> を参照して"
-"ください。"
-
-#: C/favorite-rooms.page:46(item/p)
-msgid ""
-"See <link xref=\"group-conversations\"/> for more information on how to "
-"start or join a group conversation."
-msgstr ""
-"グループ会話の開始または参加の方法の詳細は <link xref=\"group-conversations"
-"\"/> を参照してください。"
-
-#: C/favorite-rooms.page:54(item/p)
-msgid ""
-"From the conversation window, choose <guiseq><gui>Conversation</"
-"gui><gui>Favorite Chat Room</gui></guiseq>."
-msgstr ""
-"会話ウィンドウから、<guiseq><gui>会話</gui><gui>お気に入りの談話室</gui></"
-"guiseq> を選びます。"
-
-#: C/favorite-rooms.page:63(section/title)
-msgid "Join favorite rooms"
-msgstr "お気に入りの談話室の追加"
-
-#: C/favorite-rooms.page:66(item/p) C/send-file.page:40(item/p)
-msgid "From the <gui>Contact List</gui> window, perform one of the following:"
-msgstr "<gui>相手先の一覧</gui>ウィンドウから、次のいずれかを実行します:"
-
-#: C/favorite-rooms.page:71(item/p)
-msgid "Press <key>F5</key>."
-msgstr "<key>F5</key> を押します。"
-
-#: C/favorite-rooms.page:76(item/p)
-msgid ""
-"Choose <guiseq><gui>Room</gui><gui>Join Favorites</gui></guiseq>, to join "
-"all your favorite rooms."
-msgstr ""
-"<guiseq><gui>談話室</gui><gui>お気に入りに追加</gui></guiseq>を選び、お気に入"
-"りの談話室を追加します。"
-
-#: C/favorite-rooms.page:82(item/p)
-msgid "Choose <gui>Room</gui>, and select the favorite room you want to join."
-msgstr "<gui>談話室</gui> を選び、追加したいお気に入りの談話室を指定します。"
-
-#: C/favorite-rooms.page:90(note/p)
-msgid ""
-"To join a favorite room, you need to be connected to the Internet and to "
-"your account."
-msgstr ""
-"お気に入りの談話室を追加するには、インターネットに接続し、自分のアカウントに"
-"接続している必要があります。"
-
-#: C/favorite-rooms.page:98(section/title)
-msgid "Manage favorite rooms"
-msgstr "お気に入りの談話室の管理"
-
-#: C/favorite-rooms.page:101(item/p)
-msgid ""
-"From the <gui>Contact List</gui> window, choose <guiseq><gui>Room</"
-"gui><gui>Manage Favorites</gui></guiseq>."
-msgstr ""
-"<gui>相手先の一覧</gui>ウィンドウから、<guiseq><gui>談話室</gui><gui>お気に入"
-"りの管理</gui></guiseq>を選びます。"
-
-#: C/favorite-rooms.page:107(item/p)
-msgid ""
-"From the <gui>Account</gui> drop-down list, select the account you want to "
-"manage the favorite rooms of."
-msgstr ""
-"<gui>アカウント</gui>ドロップダウンリストから、お気に入りの談話室の管理を行い"
-"たいアカウントを選びます。"
-
-#: C/favorite-rooms.page:111(item/p)
-msgid "Select <gui>All</gui> to see all you favorite rooms."
-msgstr ""
-"<gui>すべてのアカウント</gui>を選ぶと、すべてのお気に入りの談話室を見ることが"
-"できます。"
-
-#: C/favorite-rooms.page:116(item/p)
-msgid "Select the favorite room you want to manage:"
-msgstr "管理したいお気に入りの談話室を選びます:"
-
-#: C/favorite-rooms.page:121(item/p)
-msgid ""
-"Select the <gui>Auto-Connect</gui> check-box in order to automatically join "
-"that room when you connect to your account."
-msgstr ""
-"<gui>自動サインイン</gui>チェックボックスは、アカウントに接続したときに自動的"
-"に参加する場合に選びます。"
-
-#: C/favorite-rooms.page:127(item/p)
-msgid "Click on <gui>Remove</gui> to remove the room from your favorites."
-msgstr ""
-"<gui>削除</gui>をクリックすると、お気に入りからその談話室を削除します。"
-
-#: C/favorite-rooms.page:134(item/p)
-msgid "When done, click <gui>Close</gui>."
-msgstr "終わったら、<gui>閉じる</gui>をクリックします。"
-
-#: C/geolocation.page:8(info/desc)
-msgid "Use and understand geolocation in <app>Empathy</app>."
-msgstr "<app>Empathy</app> での位置情報を理解し、使います。"
-
-#: C/geolocation.page:32(page/title)
-msgid "Geographical position"
-msgstr "地理的な位置"
-
-#: C/geolocation.page:35(section/title)
-msgid "Geolocation"
-msgstr "位置情報"
-
-#: C/geolocation.page:39(section/title)
-msgid "Fix common problems"
-msgstr "よくある問題の解決"
-
-#: C/geolocation-not-showing.page:8(info/desc)
-msgid "<app>Empathy</app> does not publish my geographical position."
-msgstr "<app>Empathy</app> が地理的な位置を公開しません。"
-
-#: C/geolocation-not-showing.page:32(page/title)
-msgid "Geographical position not published"
-msgstr "地理的な位置が公開されない"
-
-#: C/geolocation-not-showing.page:34(page/p)
-msgid ""
-"If your contacts cannot see your location, <app>Empathy</app> might not be "
-"able to discover with a good margin of precision your geographical position."
-msgstr ""
-"相手先があなたの位置を見ることができない場合、<app>Empathy</app> は地理的な位"
-"置を十分な精度で検出できていない可能性があります。"
-
-#: C/geolocation-not-showing.page:38(page/p)
-msgid ""
-"In this case, your position will not be published, but you are still able to "
-"see the location of your contacts."
-msgstr ""
-"この場合、あなたの位置情報は公開されません。しかし、相手先の位置を見ることは"
-"できます。"
-
-#: C/geolocation-not-showing.page:42(page/p)
-msgid ""
-"If you want to publish your geographical position, you can try to use an "
-"external device such as a GPS."
-msgstr ""
-"地理的な位置を公開したい場合、GPS のような外部デバイスを使用してください。"
-
-#: C/geolocation-not-showing.page:48(note/p)
-msgid ""
-"In order to publish your geographical location, your Jabber server needs to "
-"support the Personal Eventing Protocal (PEP). A list of <link href=\"http://"
-"coccinella.im/servers/servers_by_pubsub_pep.html\">servers which support "
-"PEP</link> is maintained online. Google Talk does not support this feature "
-"at this time."
-msgstr ""
-"地理的な位置を公開するためには、Jabber サーバーが個人イベントプロトコル "
-"(PEP) をサポートしている必要があります。 <link href=\"http://coccinella.im/"
-"servers/servers_by_pubsub_pep.html\">PEP をサポートしているサーバー</link> の"
-"一覧がオンラインでメンテナンスされています。Google トークは現在、この機能をサ"
-"ポートしていません。"
-
-#: C/geolocation-privacy.page:8(info/desc)
-msgid "What information are sent and to who."
-msgstr "だれに何の情報が送られるか。"
-
-#: C/geolocation-privacy.page:32(page/title)
-msgid "Geolocation Privacy"
-msgstr "位置情報のプライバシー"
-
-#: C/geolocation-privacy.page:35(section/title)
-msgid "What information is sent"
-msgstr "何の情報が送られるか"
-
-#: C/geolocation-privacy.page:36(section/p)
-msgid ""
-"What is possible to send is: your country, region, locality, area, street, "
-"building, floor, room, and postal code, longitude, latitude and altitude, "
-"speed and bearing."
-msgstr ""
-"国、地域(州・県)、市、区、通り(町丁名・番地)、建物、階、部屋番号、また郵便番"
-"号、経度、緯度、高度、移動の速度・方角の情報が送られる可能性があります。"
-
-#: C/geolocation-privacy.page:40(section/p)
-msgid ""
-"The accuracy and the quantity of information about your geographical "
-"position are based on the software or on the infrastructure used to discover "
-"your position."
-msgstr ""
-"地理的な位置の情報の精度と質はソフトウェアや、位置を検出するインフラストラク"
-"チャに依存します。"
-
-#: C/geolocation-privacy.page:44(section/p)
-msgid ""
-"Different kind of networks may have different accuracy settings, and may "
-"send different information. The use of external devices such as GPS or "
-"mobile phone will increase the accuracy of the information sent."
-msgstr ""
-"ネットワークによって精度は異なり、送られる情報は異なります。GPS や携帯電話の"
-"ような外部デバイスを利用して、情報の精度を上げることができます。"
-
-#: C/geolocation-privacy.page:49(section/p)
-msgid ""
-"When the privacy mode is enabled, nothing more precise than your city will "
-"be sent, even if you are using an external device."
-msgstr ""
-"プライバシーモードが有効化されている場合、たとえ外部デバイスを使用していて"
-"も、市より細かな情報は送られません。"
-
-#: C/geolocation-privacy.page:56(section/title)
-msgid "Who can see the information sent"
-msgstr "だれが送られた情報を見るか"
-
-#: C/geolocation-privacy.page:57(section/p)
-msgid "Only your contacts can see your geographical position."
-msgstr "あなたの相手先のみが地理的な位置を見ることができます。"
-
-#: C/geolocation-privacy.page:63(section/title)
-msgid "What is the privacy mode"
-msgstr "プライバシーモードとは何か"
-
-#: C/geolocation-privacy.page:64(section/p)
-msgid ""
-"The privacy mode, enabled by default, is a reduced accuracy mode that will "
-"decrease the accuracy of the geographical position sent to your contacts."
-msgstr ""
-"プライバシーモードはデフォルトで有効化されています。これは、相手先に送る地理"
-"的な位置の精度を落とすものです。"
-
-#: C/geolocation-privacy.page:71(section/title)
-msgid "Privacy overview"
-msgstr "プライバシーの概説"
-
-#: C/geolocation-privacy.page:72(section/p)
-msgid ""
-"Overview of the various geolocation privacy settings in <app>Empathy</app>."
-msgstr "<app>Empathy</app> での位置情報の設定は、まとめると次のとおりです。"
-
-#: C/geolocation-privacy.page:77(item/p)
-msgid "Geolocation is not enabled by default."
-msgstr "デフォルトで、位置情報は有効化されていません。"
-
-#: C/geolocation-privacy.page:82(item/p)
-msgid "Privacy mode is enabled by default."
-msgstr "デフォルトで、プライバシーモードは有効化されています。"
-
-#: C/geolocation-privacy.page:87(item/p)
-msgid ""
-"Privacy mode prevails even when using external and more precise devices."
-msgstr ""
-"プライバシーモードは、外部デバイスやより精確なデバイスを使用している場合でも"
-"優先します。"
-
-#: C/geolocation-privacy.page:92(item/p)
-msgid "Only your contacts can see your position."
-msgstr "あなたの相手先のみがあなたの位置を見ることができます。"
-
-#: C/geolocation-supported.page:7(info/desc)
-msgid "Services that supports geolocation and compatibility."
-msgstr "位置情報をサポートしているサービスと、互換性について。"
-
-#: C/geolocation-supported.page:31(page/title)
-msgid "Supported services"
-msgstr "サポートしているサービス"
-
-#: C/geolocation-supported.page:33(page/p)
-msgid ""
-"The geolocation feature at the moment is compatible only with the Jabber "
-"service. In order to use it, you and your contacts need to have a Jabber "
-"account."
-msgstr ""
-"現在のところ、位置情報の機能は Jabber サービスでのみ互換性があります。この機"
-"能を使うには、自分と相手先は Jabber アカウントを持っている必要があります。"
-
-#: C/geolocation-supported.page:39(note/p)
-msgid ""
-"It is necessary that also the server you are using supports the geolocation "
-"feature. Most of the Jabber servers support it. See your service website "
-"documentation for more information."
-msgstr ""
-"使っているサーバーもまた位置情報の機能をサポートしている必要があります。多く"
-"の Jabber サーバーがこれをサポートしています。詳しくは使用しているサーバーの"
-"ウェブサイトを参照してください。"
-
-#: C/geolocation-supported.page:47(section/title)
-msgid "Compatibility"
-msgstr "互換性"
-
-#: C/geolocation-supported.page:49(section/p)
-msgid ""
-"<app>Empathy</app> geolocation feature is not compatible with other "
-"geographical position services such as <em>Google Latitude</em>, <em>Yahoo "
-"Fire Eagle</em> or <em>Brightkite</em>."
-msgstr ""
-"<app>Empathy</app> の位置情報の機能は、<em>Google Latitude</em>、<em>Yahoo "
-"Fire Eagle</em>、<em>Brightkite</em> などのような他の地理的位置情報サービスと"
-"の互換性はありません。"
-
-#: C/geolocation-turn.page:9(info/desc)
-msgid "How to activate and deactivate geolocation in <app>Empathy</app>."
-msgstr "<app>Empathy</app> での位置情報の有効化/無効化の方法です。"
-
-#: C/geolocation-turn.page:33(page/title)
-msgid "Activate/Deactivate geolocation"
-msgstr "位置情報の有効化と無効化"
-
-#: C/geolocation-turn.page:37(item/p)
-msgid "Choose <guiseq><gui>Edit</gui><gui>Preferences</gui></guiseq>."
-msgstr "<guiseq><gui>編集</gui><gui>設定</gui></guiseq> を選びます。"
-
-#: C/geolocation-turn.page:42(item/p)
-msgid "Select the <gui>Location</gui> tab."
-msgstr "<gui>場所</gui>タブを指定します。"
-
-#: C/geolocation-turn.page:47(item/p)
-msgid ""
-"Select <gui>Publish location to my contacts</gui> to activate geolocation."
-msgstr "<gui>相手先に場所を公開する</gui>を指定し、位置情報を有効化します。"
-
-#: C/geolocation-turn.page:50(item/p)
-msgid "To deactivate geolocation, deselect it."
-msgstr "無効化するには、この指定を解除します。"
-
-#: C/geolocation-turn.page:55(item/p)
-msgid ""
-"To increase the accuracy of your position, deselect <gui>Reduce location "
-"accuracy</gui>."
-msgstr ""
-"自分の場所の精度を上げるには、<gui>場所の精度を下げる</gui>の指定を解除しま"
-"す。"
-
-#: C/geolocation-turn.page:61(item/p)
-msgid ""
-"If you have an external device like a GPS or want to send a more accurate "
-"position, select the appropriate option in the <gui>Location sources</gui> "
-"section."
-msgstr ""
-"GPS のような外部デバイスを持っているか、より精確な位置を通知したい場合、<gui>"
-"場所のソース</gui>で適切なオプションを指定します。"
-
-#: C/geolocation-what-is.page:9(info/desc)
-msgid "Understanding geolocation."
-msgstr "位置情報について理解します。"
-
-#: C/geolocation-what-is.page:33(page/title)
-msgid "What is geolocation"
-msgstr "位置情報とは何か"
-
-#: C/geolocation-what-is.page:35(page/p)
-msgid ""
-"Geolocation allows you to identify the real geographical location of a "
-"computer or a device connected to the Internet."
-msgstr ""
-"位置情報とは、インターネットに接続しているコンピューターまたはデバイスの現実"
-"の地理的な場所を同定するものです。"
-
-#: C/geolocation-what-is.page:37(page/p)
-msgid "With geolocation in <app>Empathy</app> you can:"
-msgstr "<app>Empathy</app> では、位置情報について次のことができます。"
-
-#: C/geolocation-what-is.page:42(item/p)
-msgid "Publish your geographical location to your contacts."
-msgstr "相手先に自分の地理的な場所を公開できます。"
-
-#: C/geolocation-what-is.page:47(item/p)
-msgid "See your contacts’ geographical location and quickly contact them."
-msgstr "相手先の地理的位置を知ることができ、速やかに接触できます。"
-
-#: C/geolocation-what-is.page:52(item/p)
-msgid ""
-"Set the accuracy of your location and the device used to discover your "
-"location."
-msgstr "場所の精度を設定できます。場所を検出するデバイスを設定できます。"
-
-#: C/geolocation-what-is.page:60(note/p)
-msgid ""
-"In order to see your contacts’ geographical locations, they need to use a "
-"service and an application that supports geolocation."
-msgstr ""
-"相手先の位置情報を知るためには、相手先が位置情報をサポートするサービスとアプ"
-"リケーションを使っている必要があります。"
-
-#: C/group-conversations.page:8(info/desc)
-msgid "Start or join a group conversation with your contacts."
-msgstr "複数の相手先とグループ会話を始める、または参加します。"
-
-#: C/group-conversations.page:34(page/title)
-msgid "Group conversations"
-msgstr "グループ会話"
-
-#: C/group-conversations.page:36(page/p)
-msgid ""
-"Group conversations permits you to have text conversations with more than "
-"one contact at the same time."
-msgstr "グループ会話は、2人以上の相手先と同時に文字による会話を行うことです。"
-
-#: C/group-conversations.page:40(page/p)
-msgid ""
-"To have a group conversation you need to have a registered account with "
-"either Jabber or Google Talk, or a People Nearby account."
-msgstr ""
-"グループ会話を行うには、Jabber もしくは Google トークのいずれか、または "
-"People Nearby の登録済のアカウントが必要です。"
-
-#: C/group-conversations.page:46(note/p)
-msgid ""
-"You can have a group conversation only with the contacts that are using the "
-"same service as yours."
-msgstr "あなたと同じサービスを使っている相手先とのみグループ会話ができます。"
-
-#: C/group-conversations.page:54(section/title)
-msgid "Start a group conversation"
-msgstr "グループ会話の開始"
-
-#: C/group-conversations.page:58(item/p)
-#: C/group-conversations.page:122(item/p) C/irc-join-room.page:39(item/p)
-msgid ""
-"From the <gui>Contact List</gui> window, choose <guiseq><gui>Room</"
-"gui><gui>Join</gui></guiseq>."
-msgstr ""
-"<gui>相手先の一覧</gui>ウィンドウから、<guiseq><gui>談話室</gui><gui>参加</"
-"gui></guiseq>を選びます。"
-
-#: C/group-conversations.page:63(item/p)
-msgid ""
-"From the <gui>Account</gui> drop-down list, select the account you want to "
-"use for the group conversation."
-msgstr ""
-"<gui>アカウント</gui>ドロップダウンリストから、グループ会話に用いるアカウント"
-"を指定します。"
-
-#: C/group-conversations.page:69(item/p)
-msgid ""
-"In the <gui>Server</gui> text box, type the name of server in which the "
-"conversation will be hosted."
-msgstr ""
-"<gui>サーバー</gui>欄に、グループ会話をホストするサーバーを入力します。"
-
-#: C/group-conversations.page:73(item/p)
-msgid "Leave it empty if it will be on the current server."
-msgstr "現在のサーバー(訳注: アカウントと同じサーバー)の場合は、空欄にします。"
-
-#: C/group-conversations.page:78(item/p)
-msgid ""
-"In the <gui>Room</gui> text box, type the name you want to give to the "
-"conversation."
-msgstr "<gui>談話室</gui>欄に、グループ会話に付ける名前を入力します。"
-
-#: C/group-conversations.page:82(note/p)
-msgid ""
-"This will be the name of the room you are going to have a conversation. This "
-"name will be publicly available for other people to join. It is not possible "
-"to create a private room."
-msgstr ""
-"これは、グループ会話を行う談話室の名前になります。この名前は、参加するほかの"
-"人に公開されます。非公開の談話室は作成できません。"
-
-#: C/group-conversations.page:90(item/p)
-msgid ""
-"To invite other contacts to join the group conversation, from the "
-"<gui>Contact List</gui> window, select the contact you want to invite, and "
-"perform one of the following:"
-msgstr ""
-"グループ会話に参加するようほかの相手先を招待するには、<gui>相手先の一覧</gui>"
-"ウィンドウから、招待したい相手先を指定し、次のいずれかを行います:"
-
-#: C/group-conversations.page:97(item/p)
-msgid "Right-click on the contact and choose <gui>Invite to chatroom</gui>."
-msgstr "相手先を右クリックし、<gui>談話室に招待する</gui>を選びます。"
-
-#: C/group-conversations.page:102(item/p)
-msgid ""
-"Choose <guiseq><gui>Edit</gui><gui>Contact</gui><gui>Invite to chatroom</"
-"gui></guiseq>."
-msgstr ""
-"<guiseq><gui>編集</gui><gui>相手先</gui><gui>談話室に招待する</gui></guiseq> "
-"を選びます。"
-
-#: C/group-conversations.page:107(item/p)
-msgid ""
-"If you have more than one group conversation open, select the one you want "
-"to invite your contacts."
-msgstr ""
-"2つ以上のグループ会話を行なっている場合、相手先を招待したいグループ会話を指定"
-"します。"
-
-#: C/group-conversations.page:118(section/title)
-msgid "Join a group conversation"
-msgstr "グループ会話に参加"
-
-#: C/group-conversations.page:128(item/p)
-msgid "Expand the <gui>Room List</gui> section to see all the existing rooms."
-msgstr ""
-"<gui>談話室の一覧</gui>を展開すると、すべての談話室を見ることができます。"
-
-#: C/group-conversations.page:133(item/p)
-msgid "Double-click on the name of a room to join it."
-msgstr "談話室の名前をダブルクリックして、その談話室に参加します。"
-
-#: C/group-conversations.page:139(section/p)
-msgid ""
-"It is not possible to join all existing rooms. Some of the rooms might "
-"require a password, or might be invitation only. <app>Empathy</app> does not "
-"support these kind of rooms."
-msgstr ""
-"すべての談話室に参加できるわけではありません。パスワードが必要な談話室や、招"
-"待のみの談話室があります。<app>Empathy</app> はこのような談話室をサポートして"
-"いません。"
-
-#: C/hide-contacts.page:8(info/desc)
-msgid "Hide the offline contacts from your <gui>Contact List</gui>."
-msgstr "<gui>相手先の一覧</gui>で、オフラインの相手先を隠します。"
-
-#: C/hide-contacts.page:19(page/title)
-msgid "Hide offline contacts"
-msgstr "オフラインの相手先を隠す"
-
-#: C/hide-contacts.page:21(page/p)
-msgid ""
-"Normally, <app>Empathy</app> shows all your contacts: those that are online, "
-"with which you can have a conversation, and also those that are offline."
-msgstr ""
-"通常、<app>Empathy</app> はすべての相手先を表示します。つまり、会話できるオン"
-"ラインの相手先と、オフラインの相手先です。"
-
-#: C/hide-contacts.page:25(page/p)
-msgid "To hide the contacts that are offline:"
-msgstr "オフラインの相手先を隠すには、次の手順で行います。"
-
-#: C/hide-contacts.page:31(item/p)
-msgid ""
-"From the <gui>Contact List</gui> window, choose <guiseq><gui>View</gui> "
-"<gui>Offline Contacts</gui></guiseq>, or press <keyseq><key>Ctrl</key> "
-"<key>H</key></keyseq>."
-msgstr ""
-"<gui>相手先の一覧</gui>ウィンドウから、<guiseq><gui>表示</gui><gui>オフライン"
-"の相手先を表示</gui></guiseq>を選ぶか、<keyseq><key>Ctrl</key> <key>H</key></"
-"keyseq> を押します。"
-
-#: C/hide-contacts.page:36(item/p)
-msgid "To show the offline contacts again, repeat the same procedure above."
-msgstr "オフラインの相手先をふたたび表示するには、上記と同じ手順を行います。"
-
-#: C/import-account.page:10(info/desc)
-msgid "Import an account from another instant messaging application."
-msgstr ""
-"別のインスタントメッセージング・アプリケーションからアカウントをインポートし"
-"ます。"
-
-#: C/import-account.page:19(credit/name)
-msgid "Peter Haslam"
-msgstr "Peter Haslam"
-
-#: C/import-account.page:42(page/title)
-msgid "Import an existing account"
-msgstr "既存のアカウントのインポート"
-
-#: C/import-account.page:44(page/p)
-msgid ""
-"The first time you run <app>Empathy</app>, it will offer to import your "
-"accounts from other instant messaging applications. Currently, the only "
-"supported application is <app>Pidgin</app>."
-msgstr ""
-"はじめて <app>Empathy</app> が実行される際、別のインスタントメッセージング・"
-"アプリケーションからアカウントをインポートするかを尋ねます。現在のところ、サ"
-"ポートしているアプリケーションは <app>Pidgin</app> のみです。"
-
-#: C/import-account.page:50(item/p)
-msgid ""
-"Run <app>Empathy</app> for the first time. An assistant will offer you a "
-"number of options to create new accounts."
-msgstr ""
-"はじめて <app>Empathy</app> を実行します。アシスタント画面が開き、新しいアカ"
-"ウントを作成するためにいくつか質問があります。"
-
-#: C/import-account.page:54(item/p)
-msgid ""
-"Select <gui>Yes, import my account details from</gui> and click "
-"<gui>Forward</gui>."
-msgstr ""
-"<gui>はい、アカウントの詳細をインポートします</gui>を指定し、<gui>次へ</gui>"
-"をクリックします。"
-
-#: C/import-account.page:58(item/p)
-msgid "Select the check box next to each account you wish to import."
-msgstr "インポートしたいアカウントのチェックボックスを指定します。"
-
-#: C/import-account.page:66(note/p)
-msgid ""
-"It is not currently possible to import accounts after you have completed the "
-"first-run assistant."
-msgstr ""
-"現在のところ、はじめての起動時のアシスタントを完了して以後に、アカウントをイ"
-"ンポートすることはできません。"
-
-#. This is a reference to an external file such as an image or video. When
-#. the file changes, the md5 hash will change to let you know you need to
-#. update your localized copy. The msgstr is not used at all. Set it to
-#. whatever you like once you have updated your copy of the file.
-#: C/introduction.page:41(media)
-msgctxt "_"
-msgid ""
-"external ref='figures/empathy-main-window.png' "
-"md5='54908dcb2588beddb15ef0968d2c2582'"
-msgstr ""
-"external ref='figures/empathy-main-window.png' "
-"md5='54908dcb2588beddb15ef0968d2c2582'"
-
-#: C/introduction.page:9(info/desc)
-msgid "Introduction to the <app>Empathy</app> instant messenger."
-msgstr "<app>Empathy</app> インスタントメッセンジャーを紹介します。"
-
-#: C/introduction.page:21(page/title)
-msgid "Introduction"
-msgstr "はじめに"
-
-#: C/introduction.page:23(page/p)
-msgid ""
-"<app>Empathy</app> is an instant messaging application for the GNOME "
-"Desktop. It supports text messaging, voice &amp; video calls, file "
-"transfers, and all the most used messaging systems such as MSN and Google "
-"Talk."
-msgstr ""
-"<app>Empathy</app> は、GNOME デスクトップのインスタントメッセージングのアプリ"
-"ケーションです。文字によるメッセージング、音声とビデオによる会話、ファイル転"
-"送をサポートしています。また、MSN や Google トークのような主要なメッセージン"
-"グシステムに対応しています。"
-
-#: C/introduction.page:28(page/p)
-msgid ""
-"<app>Empathy</app> includes features that help you better collaborate while "
-"at work, and that let you easily keep in touch with your friends."
-msgstr ""
-"<app>Empathy</app> は、仕事においてはよりよく共同作業を助ける機能を持っていま"
-"す。それはまた、友人たちとのつながりを保ちつづけることを容易にします。"
-
-#: C/introduction.page:32(page/p)
-msgid ""
-"Using <app>Empathy</app>, you can group all the conversations in a single "
-"window, have multiple windows for different kind of conversations, easily "
-"search through your previous conversations, and share your desktop in just "
-"two clicks."
-msgstr ""
-"<app>Empathy</app> を使って、すべての会話をひとつのウィンドウにまとめたり、会"
-"話の種類ごとに複数のウィンドウを開いたり、簡単に過去の会話から検索したり、"
-"たった 2 クリックでデスクトップを共有したりできます。"
-
-#: C/introduction.page:39(figure/title)
-msgid "<gui>Contact List</gui> window"
-msgstr "<gui>相手先の一覧</gui>ウィンドウ"
-
-#: C/introduction.page:40(figure/desc)
-msgid "<app>Empathy</app> main window"
-msgstr "<app>Empathy</app> の主ウィンドウ"
-
-#: C/introduction.page:42(media/p)
-msgid "<app>Empathy</app> main window."
-msgstr "<app>Empathy</app> の主ウィンドウです。"
-
-#: C/irc-commands.page:7(info/desc)
-msgid "The supported IRC commands."
-msgstr "サポートしている IRC コマンドです。"
-
-#: C/irc-commands.page:18(page/title)
-msgid "Supported IRC commands"
-msgstr "サポートしている IRC コマンド"
-
-#: C/irc-commands.page:19(page/p)
-msgid ""
-"To see the list of the supported IRC commands, in a chat room type <input>/"
-"help</input> and press <key>Enter</key>."
-msgstr ""
-"サポートしている IRC コマンドの一覧を見るには、談話室で<input>/help</input> "
-"と入力して <key>Enter</key> を押します。"
-
-#: C/irc-commands.page:24(note/p)
-msgid "All commands available have a small description on their usage."
-msgstr "すべてのコマンドに使い方の簡単な説明が付いています。"
-
-#: C/irc-join-pwd.page:9(info/desc)
-msgid "Enter password-protected IRC chat rooms."
-msgstr "パスワードで保護された IRC 談話室に参加します。"
-
-#: C/irc-join-pwd.page:25(page/title)
-msgid "Join a protected IRC chat room"
-msgstr "保護された IRC 談話室への参加"
-
-#: C/irc-join-pwd.page:27(page/p)
-msgid ""
-"On some IRC networks, private IRC rooms may be protected with a password. If "
-"you know the password, use the following steps to join:"
-msgstr ""
-"IRC ネットワークに、パスワードで保護されたプライベートな IRC 談話室があること"
-"があります。パスワードを知っていれば、次の手順で参加します。"
-
-#: C/irc-join-pwd.page:33(item/p)
-msgid "<link xref=\"irc-join-room\">Join the room</link> as normal."
-msgstr ""
-"通常と同じように <link xref=\"irc-join-room\">談話室に参加します</link>。"
-
-# Empathy に <app>タグが抜けていると思う
-#: C/irc-join-pwd.page:38(item/p)
-msgid ""
-"Empathy will prompt you for a password. Enter the password for the IRC chat "
-"room and click <gui style=\"button\">Join</gui>."
-msgstr ""
-"<app>Empathy</app> はパスワードを入力するよう促します。IRC 談話室のパスワード"
-"を入力し、<gui style=\"button\">参加</gui>をクリックします。"
-
-#: C/irc-join-room.page:8(info/desc)
-msgid "Join an IRC channel."
-msgstr "IRC チャンネルに参加します。"
-
-#: C/irc-join-room.page:31(page/title)
-msgid "Join an IRC chat room"
-msgstr "IRC 談話室への参加"
-
-#: C/irc-join-room.page:33(page/p)
-msgid ""
-"You can join IRC chat rooms (also known as IRC channels) on any IRC network "
-"you’re connected to. To connect to an IRC network, see <link xref=\"add-"
-"account\"/> and <link xref=\"account-irc\"/>."
-msgstr ""
-"接続している IRC ネットワーク上の IRC 談話室 (IRC チャンネルとも言います) に"
-"参加できます。IRC ネットワークに参加するには、<link xref=\"add-account\"/> お"
-"よび <link xref=\"account-irc\"/> を参照してください。"
-
-#: C/irc-join-room.page:45(item/p)
-msgid ""
-"From the <gui>Account</gui> drop-down list, select the IRC account that "
-"corresponds to the network you want to use."
-msgstr ""
-"<gui>アカウント</gui>ドロップダウンリストから、使いたいネットワークに対応す"
-"る IRC アカウントを指定します。"
-
-#: C/irc-join-room.page:51(item/p)
-msgid ""
-"In the <gui>Room</gui> text box, type the name of the channel you want to "
-"join. IRC channel names start with the hash character (<sys>#</sys>)."
-msgstr ""
-"<gui>談話室</gui>欄に、参加したいチャンネルの名前を入力します。IRC チャンネル"
-"の名前はハッシュ (<sys>#</sys>) で始まります。"
-
-#: C/irc-join-room.page:57(item/p)
-msgid "Click <gui>Join</gui> to enter the room."
-msgstr "<gui>参加</gui>をクリックして、談話室に入ります。"
-
-#: C/irc-join-room.page:64(note/p)
-msgid ""
-"To join multiple rooms, you need to repeat the steps above for each room."
-msgstr ""
-"複数の談話室に参加するには、それぞれの談話室について上記の手順を繰り返しま"
-"す。"
-
-#: C/irc-manage.page:9(info/desc)
-msgid "How to use IRC with <app>Empathy</app>."
-msgstr "<app>Empathy</app> で IRC を使う方法"
-
-#: C/irc-manage.page:34(page/title)
-msgid "Internet Relay Chat (IRC)"
-msgstr "インターネット・リレー・チャット (IRC)"
-
-#: C/irc-manage.page:41(when/p)
-msgid ""
-"<link action=\"install:telepathy-idle\" xref=\"index\" style=\"button"
-"\">Install telepathy-idle</link>"
-msgstr ""
-"<link action=\"install:telepathy-idle\" xref=\"index\" style=\"button"
-"\">telepathy-idle のインストール</link>"
-
-#: C/irc-manage.page:48(info/title)
-msgctxt "link"
-msgid "IRC Chat Rooms and Conversations"
-msgstr "IRC 談話室と会話"
-
-#: C/irc-manage.page:50(section/title)
-msgid "Chat Rooms and Conversations"
-msgstr "談話室と会話"
-
-#: C/irc-manage.page:55(info/title)
-msgctxt "link"
-msgid "Common IRC Problems"
-msgstr "IRC のよくある問題"
-
-#: C/irc-nick-password.page:10(info/desc)
-msgid "Protect your nickname to prevent other IRC users from using it."
-msgstr "他の IRC ユーザーに使われないよう、ニックネームを保護します。"
-
-#: C/irc-nick-password.page:33(page/title)
-msgid "Use a nickname password on IRC"
-msgstr "IRC でのニックネームのパスワードの使用"
-
-#: C/irc-nick-password.page:35(page/p)
-msgid ""
-"On some IRC networks, you can register your nickname with a service called "
-"NickServ. By sending special messages to NickServ, you can set your password "
-"and identify yourself. Some IRC chat rooms may not allow you to join without "
-"a registered nickname."
-msgstr ""
-"いくつかの IRC ネットワークでは、NickServ というサービスでニックネームを登録"
-"できます。NickServ に特別のメッセージを送ることにより、パスワードの設定や自分"
-"自身の認証ができます。ニックネームを登録しないと参加を許可しない IRC 談話室も"
-"あります。"
-
-#: C/irc-nick-password.page:40(page/p)
-msgid ""
-"<app>Empathy</app> does not currently support nickname registration. Some "
-"IRC networks, however, will automatically forward a <em>server password</em> "
-"to NickServ. On these networks, you can use the IRC password in "
-"<app>Empathy</app> to identify yourself to NickServ. The popular freenode "
-"network is known to have this feature."
-msgstr ""
-"<app>Empathy</app> は現在、ニックネームの登録をサポートしていません、しかし、"
-"自動的に<em>サーバーのパスワード</em>を NickServ に送る IRC ネットワークもあ"
-"ります。そのようなネットワークでは、<app>Empathy</app> の IRC パスワードを "
-"NickServ での自身の認証に使えます。人気のある freenode ネットワークはこの機能"
-"を持っています。"
-
-#: C/irc-nick-password.page:46(page/p)
-msgid "To set an IRC server password:"
-msgstr "次の手順で、IRC サーバーのパスワードを設定します。"
-
-#: C/irc-nick-password.page:54(item/p)
-msgid "Select the IRC account from the list on the left of the dialog."
-msgstr "ダイアログの左側の一覧から、IRC アカウントを指定します。"
-
-#: C/irc-nick-password.page:57(item/p)
-msgid ""
-"In the <gui>Password</gui> field, type the password you used to register "
-"your nikcname."
-msgstr ""
-"<gui>パスワード</gui>欄に、ニックネームの登録に使うパスワードを入力します。"
-
-#: C/irc-nick-password.page:69(note/p)
-msgid ""
-"These instructions only allow you to use a password-protected nickname on "
-"certain IRC networks. It is not currently possible to register an IRC "
-"nickname or change your nickname password using <app>Empathy</app>."
-msgstr ""
-"この説明によってできることは、ある IRC ネットワークでのパスワードで保護される"
-"ニックネームの使用にすぎません。現在、<app>Empathy</app> を使って IRC ニック"
-"ネームの登録やそのパスワードの変更はできません。"
-
-#: C/irc-send-file.page:9(info/desc)
-msgid "<app>Empathy</app> does not currently support sending files using IRC."
-msgstr ""
-"<app>Empathy</app> は現在、IRC でのファイル転送をサポートしていません。"
-
-#: C/irc-send-file.page:31(page/title)
-msgid "Send files over IRC"
-msgstr "IRC でのファイル転送"
-
-#: C/irc-send-file.page:33(page/p)
-msgid "It is not currently possible to send files using IRC."
-msgstr "現在、IRC でのファイル転送はできません。"
-
-#: C/irc-start-conversation.page:8(info/desc)
-msgid "Start a conversation with an IRC contact."
-msgstr "IRC の相手先との会話の開始"
-
-#: C/irc-start-conversation.page:30(page/title)
-msgid "Chat with somebody on IRC"
-msgstr "IRC でのチャット"
-
-#: C/irc-start-conversation.page:32(page/p)
-msgid ""
-"You can hold private conversations with other IRC users, outside of the "
-"public IRC chat rooms. To start a conversation with another IRC user:"
-msgstr ""
-"公開の IRC 談話室の外で、IRC ユーザーとプライベートなチャットができます。次の"
-"手順で、IRC ユーザーと会話を開始します。"
-
-#: C/irc-start-conversation.page:37(item/p)
-msgid ""
-"In the contact list for an IRC chat room, double click the name of the user "
-"you want to chat with. Alternatively, right click the name of the user and "
-"choose <gui>Chat</gui>."
-msgstr ""
-"IRC 談話室の相手先の一覧で、チャットしたい相手先の名前をダブルクリックしま"
-"す。別の方法として、名前を右クリックして<gui>チャット</gui>を選びます。"
-
-#: C/irc-start-conversation.page:45(item/p)
-msgid ""
-"The IRC room contact list is not the same as <app>Empathy</app> contact "
-"list. It contains a list of users in the IRC chat room you joined. Different "
-"rooms can have different contacts listed."
-msgstr ""
-"IRC 談話室の相手先の一覧は、<app>Empathy</app> の相手先の一覧と同じものではあ"
-"りません。参加している談話室のユーザーの一覧です。別の談話室では別の一覧にな"
-"ります。"
-
-#: C/irc-start-conversation.page:52(item/p)
-msgid ""
-"The IRC room contact list is usually on the right side of the IRC room "
-"window. If you do not see it, choose <guiseq><gui>Conversation</"
-"gui><gui>Show Contact List</gui></guiseq>."
-msgstr ""
-"通常、IRC 談話室の相手先の一覧は、IRC 談話室のウィンドウの右側にあります。表"
-"示されていなければ、<guiseq><gui>会話</gui><gui>相手先の一覧の表示</gui></"
-"guiseq>を選びます。"
-
-#: C/license.page:8(info/desc)
-msgid "Legal information."
-msgstr "法的事項です。"
-
-#: C/license.page:11(page/title)
-msgid "License"
-msgstr "ライセンス"
-
-#: C/license.page:12(page/p)
-msgid ""
-"This work is distributed under a CreativeCommons Attribution-Share Alike 3.0 "
-"Unported license."
-msgstr ""
-"この文書はクリエイティブ・コモンズ 表示 - 継承 3.0 非移植 ライセンスの下に提"
-"供されています。"
-
-#: C/license.page:20(page/p)
-msgid "You are free:"
-msgstr "あなたは以下の条件に従う場合に限り、自由に"
-
-# 次の文とセット。空っぽにすると原文が表示されてしまうので、空白をひとつ置く。
-#: C/license.page:25(item/title)
-msgid "<em>To share</em>"
-msgstr " "
-
-#: C/license.page:26(item/p)
-msgid "To copy, distribute and transmit the work."
-msgstr "本作品を複製、頒布、展示、実演することができます。 "
-
-# 次の文とセット。空っぽにすると原文が表示されてしまうので、空白をひとつ置く。
-#: C/license.page:29(item/title)
-msgid "<em>To remix</em>"
-msgstr " "
-
-#: C/license.page:30(item/p)
-msgid "To adapt the work."
-msgstr "二次的著作物を作成することができます。 "
-
-#: C/license.page:33(page/p)
-msgid "Under the following conditions:"
-msgstr "あなたの従うべき条件は以下の通りです。"
-
-#: C/license.page:38(item/title)
-msgid "<em>Attribution</em>"
-msgstr "<em>表示</em>"
-
-# 括弧書きの部分はどうする?
-#: C/license.page:39(item/p)
-msgid ""
-"You must attribute the work in the manner specified by the author or "
-"licensor (but not in any way that suggests that they endorse you or your use "
-"of the work)."
-msgstr "あなたは原著作者のクレジットを表示しなければなりません。"
-
-#: C/license.page:46(item/title)
-msgid "<em>Share Alike</em>"
-msgstr "<em>継承</em>"
-
-#: C/license.page:47(item/p)
-msgid ""
-"If you alter, transform, or build upon this work, you may distribute the "
-"resulting work only under the same, similar or a compatible license."
-msgstr ""
-"もしあなたがこの作品を改変、変形または加工した場合、あなたはその結果生じた作"
-"品をこの作品と同一の許諾条件の下でのみ頒布することができます。 "
-
-#: C/license.page:53(page/p)
-msgid ""
-"For the full text of the license, see the <link href=\"http://"
-"creativecommons.org/licenses/by-sa/3.0/legalcode\">CreativeCommons website</"
-"link>, or read the full <link href=\"http://creativecommons.org/licenses/by-"
-"sa/3.0/\">Commons Deed</link>."
-msgstr ""
-"このライセンスの全文は <link href=\"http://creativecommons.org/licenses/by-"
-"sa/3.0/legalcode\">CreativeCommons website</link> を参照してください。また"
-"は、<link href=\"http://creativecommons.org/licenses/by-sa/3.0/\">コモンズ証"
-"</link> の全文を参照してください。"
-
-#: C/link-contacts.page:11(info/desc)
-msgid "Merge and separate different contacts into a single one."
-msgstr "別々の相手先をひとつの相手先にまとめたり分離したりします。"
-
-#: C/link-contacts.page:25(page/title)
-msgid "Combine and separate contacts"
-msgstr "相手先の結合と分離"
-
-#: C/link-contacts.page:26(page/p)
-msgid ""
-"If one, or more, of your contacts has multiple accounts with different "
-"messaging services, you can combine these contacts into a single one."
-msgstr ""
-"相手先の一人が、別々のメッセージングサービスで複数のアカウントを持っている場"
-"合、これらの相手先をひとつにまとめることができます。"
-
-#: C/link-contacts.page:30(page/p)
-msgid ""
-"The resulting contact is called a <em>meta-contact</em>: a contact composed "
-"from different single contacts."
-msgstr ""
-"そのまとめたものを<em>メタ相手先</em>と呼びます。メタ相手先は、個々の相手先で"
-"構成された相手先のことです。"
-
-#: C/link-contacts.page:34(page/p)
-msgid ""
-"If you have a Jane Smith contact that is using three different messaging "
-"services like:"
-msgstr ""
-"Jane Smith という相手先がいて、次のように3つの別のメッセージングサービスを"
-"使っていたとします。"
-
-#: C/link-contacts.page:40(item/p)
-msgid "janes@facebook"
-msgstr "janes@facebook"
-
-#: C/link-contacts.page:45(item/p)
-msgid "jane.smith@gmail"
-msgstr "jane.smith@gmail"
-
-#: C/link-contacts.page:50(item/p)
-msgid "jane_smith@hotmail"
-msgstr "jane_smith@hotmail"
-
-#: C/link-contacts.page:55(page/p)
-msgid "You can combine these contacts into a single Jane Smith one."
-msgstr ""
-"これらの相手先をJane Smith というひとつの相手先にまとめることができます。"
-
-#: C/link-contacts.page:60(section/title)
-msgid "Combining contacts"
-msgstr "相手先の結合"
-
-#: C/link-contacts.page:63(item/p)
-msgid ""
-"From the <gui>Contact List</gui> window, right-click one of the contact that "
-"has different accounts, and select <gui style=\"menuitem\">Link Contacts...</"
-"gui>."
-msgstr ""
-"<gui>相手先の一覧</gui>ウィンドウから、複数のアカウントを持つ相手先を右クリッ"
-"クして、<gui style=\"menuitem\">相手先をリンク…</gui>を指定します。"
-
-#: C/link-contacts.page:70(item/p)
-msgid ""
-"From the left pane in the <gui>Link Contacts</gui> window, select the "
-"contacts you want to combine."
-msgstr ""
-"<gui>相手先をリンク</gui>ウィンドウの左欄から、結合したい相手先を指定します。"
-
-#: C/link-contacts.page:76(item/p)
-msgid "Click <gui style=\"button\">Link</gui>."
-msgstr "<gui style=\"button\">リンク</gui>をクリックします。"
-
-# highest presence on-line がよくわからない。
-#: C/link-contacts.page:82(note/p)
-#, fuzzy
-msgid ""
-"When a meta-contact has been created, the default contact that will be used "
-"to have a conversation with when you double-click on it, is the contact with "
-"the highest presence on-line."
-msgstr ""
-"メタ相手先が作成されると、ダブルクリックで会話を開始するデフォルトの相手先"
-"は、オンラインの最も上にある相手先になります。"
-
-#: C/link-contacts.page:91(section/title)
-msgid "Separating contacts"
-msgstr "相手先の分離"
-
-#: C/link-contacts.page:94(item/p)
-msgid ""
-"From the <gui>Contact List</gui>, right-click the contact to separate, and "
-"select <gui style=\"menuitem\">Link Contacts...</gui>."
-msgstr ""
-"<gui>相手先の一覧</gui>から、分離したい相手先を右クリックして<gui style="
-"\"menuitem\">相手先をリンク…</gui>を指定します。"
-
-#: C/link-contacts.page:100(item/p)
-msgid "Click <gui style=\"button\">Unlink</gui>."
-msgstr "<gui style=\"button\">リンクを外す</gui>をクリックします。"
-
-#: C/prev-conv.page:8(info/desc)
-msgid "Browse or search your previous conversations."
-msgstr "会話の履歴を閲覧したり検索します。"
-
-#: C/prev-conv.page:36(page/title)
-msgid "View previous conversations"
-msgstr "過去の会話の表示"
-
-#: C/prev-conv.page:38(page/p)
-msgid ""
-"<app>Empathy</app> automatically saves all your text conversations you have "
-"with your contacts. You can <link xref=\"#search\">search through all of "
-"your previous conversations</link> or <link xref=\"#browse\">browse previous "
-"conversations</link> by contact and date."
-msgstr ""
-"<app>Empathy</app> は自動的に、相手先とともにすべての文字による会話を保存しま"
-"す。相手先や日付によって、<link xref=\"#search\">会話の履歴すべてを検索する</"
-"link>、または<link xref=\"#browse\">会話の履歴を閲覧する</link> ことができま"
-"す。"
-
-#: C/prev-conv.page:46(note/p)
-msgid ""
-"You do not need to be connected to the Internet to view and search your "
-"previous conversations."
-msgstr ""
-"会話の履歴の閲覧や検索には、インターネットに接続している必要はありません。"
-
-#: C/prev-conv.page:53(section/title)
-msgid "Search previous conversations"
-msgstr "会話の履歴の検索"
-
-#: C/prev-conv.page:55(section/p)
-msgid ""
-"You can perform a full-text search through all of your previous "
-"conversations."
-msgstr "会話の履歴のすべてにわたって、全文検索を行えます。"
-
-#: C/prev-conv.page:59(item/p) C/prev-conv.page:87(item/p)
-msgid ""
-"From the <gui>Contact List</gui> window, choose <guiseq><gui>View</gui> "
-"<gui>Previous Conversations</gui></guiseq>. Alternatively, press <key>F3</"
-"key>."
-msgstr ""
-"<gui>相手先の一覧</gui>ウィンドウから、<guiseq><gui>表示</gui><gui>会話の履歴"
-"</gui></guiseq>を選びます。または、<key>F3</key> を押します。"
-
-#: C/prev-conv.page:63(item/p)
-msgid ""
-"Select an account from the drop-down list in the top. A list of contacts and "
-"chat room for that account will be shown below."
-msgstr ""
-"最上部のドロップダウンリストからアカウントを指定します。その下に、そのアカウ"
-"ントに対応する相手先の一覧および談話室の一覧が表示されます。"
-
-#: C/prev-conv.page:67(item/p)
-msgid ""
-"Type the text you want to search for in the <gui>Search</gui> text field."
-msgstr "<gui>検索</gui>欄に、検索したい語句を入力します。"
-
-#: C/prev-conv.page:71(item/p)
-msgid ""
-"Any conversations that matched your search terms will be shown. By default, "
-"conversations are ordered by date."
-msgstr ""
-"検索語句にマッチした会話がすべて表示されます。デフォルトで日付順に並びます。"
-
-#: C/prev-conv.page:80(section/title)
-msgid "Browse previous conversations"
-msgstr "会話の履歴の閲覧"
-
-#: C/prev-conv.page:82(section/p)
-msgid ""
-"You can browse your previous conversations with your contacts or in chat "
-"rooms by date."
-msgstr "相手先または談話室の会話の履歴を、日付ごとに閲覧できます。"
-
-#: C/prev-conv.page:91(item/p)
-msgid ""
-"Select an account from the drop-down list in the top left. A list of "
-"contacts and chat room for that account will be shown below."
-msgstr ""
-"上段左のドロップダウンリストから相手先を選びます。アカウントに対応する相手先"
-"と談話室が表示されます。"
-
-#: C/prev-conv.page:95(item/p)
-msgid ""
-"Select a contact or chat room to view your previous conversations from. By "
-"default the most recent conversation will be shown."
-msgstr ""
-"会話の履歴を表示させたい相手先または談話室を選びます。デフォルトでは直近の会"
-"話が表示されます。"
-
-#: C/prev-conv.page:99(item/p)
-msgid ""
-"You can browse your conversations by date. Days on which you had a "
-"conversation with the selected contact will be shown in bold text. Click a "
-"date to select it. Click the arrows next to the month and year to browse "
-"earlier dates."
-msgstr ""
-"日付ごとに会話の履歴を閲覧できます。選んだ相手先との会話を含む日付が太字で表"
-"示されます。日付を選んでクリックします。次の月や年の矢印をクリックすると、よ"
-"り古い日付を閲覧できます。"
-
-#: C/prev-conv.page:105(section/p)
-msgid ""
-"You can search for text in the conversations by typing into the search field "
-"at the top. The matching conversations will be showed."
-msgstr ""
-"最上部の検索フィールドに入力して、会話の語句を検索できます。マッチしたものが"
-"表示されます。"
-
-#: C/prev-conv.page:111(note/p)
-msgid ""
-"You can quickly view the previous conversations with one of your contacts "
-"from the <gui>Contact List</gui> window. Simply right click the contact and "
-"choose <gui>Previous Conversations</gui>. The <gui>Previous Conversations</"
-"gui> window will open with that contact already selected."
-msgstr ""
-"<gui>相手先の一覧</gui>ウィンドウから、ある相手先の会話の履歴をすばやく表示で"
-"きます。相手先を右クリックして <gui>会話の履歴</gui>を選ぶだけです。その相手"
-"先が選択された状態で <gui>会話の履歴</gui>ウィンドウが開きます。"
-
-#: C/prob-conn-acctdisabled.page:7(info/desc)
-msgid ""
-"The instant messaging account that you want to use is not enabled in the "
-"list of accounts."
-msgstr ""
-"アカウントの一覧で、使いたいインスタントメッセージングのアカウントが有効に"
-"なっていません。"
-
-#: C/prob-conn-acctdisabled.page:34(page/title)
-msgid "My account is not enabled"
-msgstr "アカウントが有効ではありません"
-
-#: C/prob-conn-acctdisabled.page:36(page/p)
-msgid ""
-"If the instant messaging account that you want to use is not enabled in the "
-"drop-down account list when you try to start a new conversation or join a "
-"room, your account details may not be correct."
-msgstr ""
-"新しい会話を始めようとしたり談話室に参加しようとする際に、ドロップダウンのア"
-"カウントの一覧で、使いたいインスタントメッセージングのアカウントが有効になっ"
-"ていない場合は、アカウントの詳細情報が正しくない可能性があります。"
-
-#: C/prob-conn-acctdisabled.page:44(item/p) C/prob-conn-auth.page:45(item/p)
-#: C/prob-conn-neterror.page:53(item/p)
-msgid ""
-"Make sure that you are connected to the Internet, or to a local area network."
-msgstr ""
-"インターネットまたはローカルエリアネットワークに接続していることを確認しま"
-"す。"
-
-#: C/prob-conn-acctdisabled.page:49(item/p)
-msgid ""
-"Choose <guiseq><gui>Edit</gui><gui>Accounts</gui></guiseq> and select the "
-"account that is not working."
-msgstr ""
-"<guiseq><gui>編集</gui><gui>アカウント</gui></guiseq> を選び、問題のあるアカ"
-"ウントを指定します。"
-
-#: C/prob-conn-acctdisabled.page:55(item/p) C/prob-conn-auth.page:63(item/p)
-msgid ""
-"Type your username and password again to make sure that they are correct."
-msgstr "ユーザー名とパスワードを、もう一度正しいことを確認して、入力します。"
-
-#: C/prob-conn-acctdisabled.page:60(item/p)
-#: C/prob-conn-neterror.page:64(item/p)
-msgid ""
-"Check in the <gui>Advanced</gui> section that all the details are correct. "
-"You should be able to find these details from the website of the messaging "
-"service."
-msgstr ""
-"<gui>詳細</gui>セクションのすべての情報が正しいことを確認します。これらの情報"
-"は、メッセージングサービスのウェブサイトで確認できるでしょう。"
-
-#: C/prob-conn-acctdisabled.page:66(item/p)
-msgid "Check that the account is switched on."
-msgstr "アカウントのスイッチがオンであることを確認します。"
-
-#: C/prob-conn-auth.page:8(info/desc)
-msgid ""
-"An error message which says “<gui>Authentication failed</gui>” appears in "
-"the main window."
-msgstr ""
-"「<gui>認証に失敗しました</gui>」というエラーメッセージが主ウィンドウに表示さ"
-"れます。"
-
-#: C/prob-conn-auth.page:36(page/title)
-msgid "I get a message that says “Authentication failed”"
-msgstr "「認証に失敗しました」というメッセージが表示されます。"
-
-#: C/prob-conn-auth.page:38(page/p)
-msgid ""
-"This kind of error happens when your instant messaging service is not "
-"allowing you to connect because it does not recognize your username or "
-"password for some reason."
-msgstr ""
-"この種のエラーは、何らかの理由でユーザー名またはパスワードを認識できず、イン"
-"スタントメッセージング・サービスに接続できなかった場合に起こります。"
-
-#: C/prob-conn-auth.page:50(item/p)
-msgid ""
-"Make sure that you have registered an account with the service you are "
-"trying to connect to. If you do not have an account, most services will not "
-"allow you to connect."
-msgstr ""
-"接続しようとしているサービスのアカウントが登録されていることを確認します。ア"
-"カウントがなければ、ほとんどのサービスは接続できません。"
-
-#: C/prob-conn-auth.page:57(item/p) C/prob-conn-name.page:43(item/p)
-#: C/prob-conn-neterror.page:58(item/p)
-msgid ""
-"Click the <media type=\"image\" mime=\"image/png\" src=\"figures/gtk-edit.png"
-"\">edit</media> icon in the error message."
-msgstr ""
-"エラーメッセージの <media type=\"image\" mime=\"image/png\" src=\"figures/"
-"gtk-edit.png\">edit</media> アイコンをクリックします。"
-
-#: C/prob-conn-auth.page:68(item/p)
-msgid ""
-"Deselect the <gui>Enabled</gui>, and then select it again to try to "
-"reconnect to the service."
-msgstr "<gui>有効化</gui>をいったん外し、再び指定して、サービスに接続します。"
-
-#: C/prob-conn-name.page:9(info/title)
-msgctxt "link:error-msg"
-msgid "“Name in use”"
-msgstr "「名前は使用中です」"
-
-#: C/prob-conn-name.page:10(info/desc)
-msgid ""
-"An error message which says “<gui>Name in use</gui>” appears in the main "
-"window."
-msgstr ""
-"「<gui>名前は使用中です</gui>」というエラーメッセージが主ウィンドウに表示され"
-"ます。"
-
-#: C/prob-conn-name.page:33(page/title)
-msgid "I get a message that says “Name in use”"
-msgstr "「名前は使用中です」というメッセージが表示されます"
-
-#: C/prob-conn-name.page:35(page/p)
-msgid ""
-"This kind of error happens when you try to connect to your IRC account and "
-"you are using a nickname that is already being used by someone else on that "
-"particular network."
-msgstr ""
-"この種のエラーは、IRC アカウントで接続しようとして、そのネットワークですでに"
-"だれかが使用しているニックネームを使おうとした場合に起こります。"
-
-#: C/prob-conn-name.page:51(item/p)
-msgid "In the <gui>Nickname</gui> text box, type a new nickname."
-msgstr "<gui>ニックネーム</gui>欄に、新しいニックネームを入力します。"
-
-#: C/prob-conn-name.page:56(item/p)
-msgid ""
-"If you have registered that nickname within the network you are using, set "
-"the password for that nickname. For more information, see <link xref=\"irc-"
-"nick-password\"/>."
-msgstr ""
-"そのネットワークで使うニックネームを登録している場合、そのニックネームに対応"
-"するパスワードを設定します。詳しくは <link xref=\"irc-nick-password\"/> を参"
-"照してください。"
-
-#: C/prob-conn-name.page:65(item/p) C/prob-conn-neterror.page:79(item/p)
-msgid ""
-"Switch the account off, and then switch it on to try to reconnect to the "
-"service."
-msgstr "アカウントのスイッチをオフにして再びオンにし、サービスに再接続します。"
-
-#: C/prob-conn-neterror.page:7(info/desc)
-msgid ""
-"An error message which says “<gui>Network error</gui>” appears in the main "
-"window."
-msgstr ""
-"「<gui>ネットワークのエラーです</gui>」というエラーメッセージが主ウィンドウに"
-"表示されます。"
-
-#: C/prob-conn-neterror.page:34(page/title)
-msgid "I get a message that says “Network error”"
-msgstr "「ネットワークのエラーです」というメッセージが表示されます"
-
-#: C/prob-conn-neterror.page:42(page/p)
-msgid ""
-"This kind of error happens when <app>Empathy</app> cannot communicate with "
-"the instant messaging service for some reason."
-msgstr ""
-"この種のエラーは、何らかの理由で <app>Empathy</app> がインスタントメッセージ"
-"ング・サービスに接続できない場合に起こります。"
-
-#: C/prob-conn-neterror.page:46(page/p)
-msgid ""
-"Also, this kind of error happens when you try to use an IRC account without "
-"setting a nickname."
-msgstr ""
-"また、IRC アカウントを、ニックネームの設定をせずに使おうとする場合にも起こり"
-"ます。"
-
-#: C/prob-conn-neterror.page:87(section/title)
-msgid "Proxy support"
-msgstr "プロキシのサポート"
-
-#: C/prob-conn-neterror.page:88(section/p)
-msgid ""
-"At the moment <app>Empathy</app> can not be configured to work with a proxy."
-msgstr ""
-"現在のところ、<app>Empathy</app> はプロキシの利用についての設定はできません。"
-
-#: C/prob-conn.page:7(info/desc)
-msgid "Diagnose common problems connecting to an instant messaging service."
-msgstr ""
-"インスタントメッセージング・サービスへの接続に関する共通の問題を診断します。"
-
-#: C/prob-conn.page:29(page/title)
-msgid "Problems connecting to an instant messaging service"
-msgstr "インスタントメッセージング・サービスへの接続に関する問題"
-
-#: C/remove-account.page:8(info/desc)
-msgid "Completely remove an account from <app>Empathy</app>."
-msgstr "<app>Empathy</app> からアカウントを完全に削除します。"
-
-#: C/remove-account.page:34(page/title)
-msgid "Remove an account"
-msgstr "アカウントの削除"
-
-#: C/remove-account.page:36(page/p)
-msgid ""
-"You can completely remove an account from <app>Empathy</app> if you no "
-"longer wish to use the account. If you wish to use the account in "
-"<app>Empathy</app> again in the future, you will have to add your account "
-"details again."
-msgstr ""
-"そのアカウントをもう使うことがないのなら、<app>Empathy</app> からアカウントを"
-"完全に削除できます。将来またそのアカウントを <app>Empathy</app> で使いたく"
-"なったら、再びアカウントの詳細を追加する必要があります。"
-
-#: C/remove-account.page:47(item/p)
-msgid ""
-"Select the account you wish to remove from the accounts list on the left "
-"side of the window."
-msgstr ""
-"ウィンドウの左側のアカウントの一覧から、削除したいアカウントを指定します。"
-
-#: C/remove-account.page:51(item/p)
-msgid "Click <gui style=\"button\">-</gui>."
-msgstr "<gui style=\"button\">-</gui> をクリックします。"
-
-#: C/remove-account.page:54(item/p)
-msgid ""
-"A dialog will be shown asking for confirmation. Click the <gui>Remove</gui> "
-"button to permanently remove the account."
-msgstr ""
-"確認のダイアログが表示されます。<gui>削除</gui>ボタンをクリックして、恒久的に"
-"アカウントを削除します。"
-
-#: C/remove-account.page:60(note/p)
-msgid ""
-"Even after removing an account, <app>Empathy</app> does not delete your "
-"conversation history for that account."
-msgstr ""
-"アカウントを削除しても、<app>Empathy</app> はそのアカウントの会話の履歴は削除"
-"しません。"
-
-#: C/salut-protocol.page:8(info/desc)
-msgid "Understanding the People Nearby feature."
-msgstr "People Nearby 機能について理解します。"
-
-#: C/salut-protocol.page:33(page/title)
-msgid "What is People Nearby?"
-msgstr "People Nearby とは何か"
-
-#: C/salut-protocol.page:40(page/p)
-msgid ""
-"The People Nearby service is a serverless communication service: you do not "
-"need to connect and authenticate to a central server in order to use it."
-msgstr ""
-"People Nearby は、サーバーレスのコミュニケーションサービスです。これを使う場"
-"合に中央サーバーへの接続や認証は必要ありません。"
-
-#: C/salut-protocol.page:45(page/p)
-msgid ""
-"This kind of serverless messaging system is restricted to a local area "
-"network and an active Internet connection is not necessary."
-msgstr ""
-"この種のサーバーレスのメッセージングシステムは、ローカルエリアネットワークに"
-"制限され、したがって、インターネットに接続している必要はありません。"
-
-#: C/salut-protocol.page:49(page/p)
-msgid ""
-"The people that use this service inside the same local area network will be "
-"auto-discovered, and it will be possible to send them messages and files as "
-"with other services."
-msgstr ""
-"同じローカルエリアネットワーク内でこのサービスを使用している人を自動的に発見"
-"します。他のサービスと同様、メッセージやファイルをその人たちに送れます。"
-
-# もっとこなれた訳にしたい。
-#: C/salut-protocol.page:54(page/p)
-#, fuzzy
-msgid ""
-"All the modern local area networks should be able to support this kind of "
-"service."
-msgstr ""
-"すべての現代的なローカルエリアネットワークは、この種のサービスをサポートでき"
-"るはずです。"
-
-#: C/send-file.page:8(info/desc)
-msgid "Send a file from your computer to one of your contacts."
-msgstr "あなたのコンピューターから相手先のひとりにファイルを送ります。"
-
-#: C/send-file.page:36(page/title)
-msgid "Send files"
-msgstr "ファイルの送信"
-
-#: C/send-file.page:45(item/p)
-msgid ""
-"Right click on the contact you want to send a file to, and choose <gui>Send "
-"file</gui>."
-msgstr ""
-"ファイルを送りたい相手先を右クリックし、<gui>ファイルの送信</gui>を選びます。"
-
-#: C/send-file.page:50(item/p)
-msgid ""
-"Click on the contact you want to send a file, and choose <guiseq><gui>Edit</"
-"gui> <gui>Contact</gui><gui>Send file</gui></guiseq>."
-msgstr ""
-"ファイルを送りたい相手先をクリックし、<guiseq><gui>編集</gui><gui>相手先</"
-"gui><gui>ファイルの送信</gui></guiseq>を選びます。"
-
-#: C/send-file.page:58(item/p)
-msgid "Select the file to send, and click on <gui>Send</gui>."
-msgstr "送信するファイルを指定し、<gui>送信</gui>をクリックします。"
-
-#: C/send-file.page:63(item/p)
-msgid "The <gui>File Transfers</gui> window will appear."
-msgstr "<gui>ファイル転送</gui>ウィンドウが開きます。"
-
-#: C/send-file.page:66(item/p)
-msgid ""
-"Wait for your contact to accept the file transfer, or click <gui>Stop</gui> "
-"to halt the transfer."
-msgstr ""
-"相手先がファイル転送を承諾するのを待ちます。そうでなければ、<gui>停止</gui>を"
-"クリックして転送を中断します。"
-
-#: C/send-file.page:72(item/p)
-msgid ""
-"Once the transfer is finished, it is possible to close the <gui>File "
-"Transfers</gui> window."
-msgstr ""
-"転送が終了したら、<gui>ファイル転送</gui>ウィンドウを閉じてもかまいません。"
-
-#: C/send-file.page:80(note/p)
-msgid ""
-"If you have multiple finished transfers listed in the window, click on "
-"<gui>Clear</gui> to empty the list. This will only remove the files from the "
-"list and will not delete them from your computer."
-msgstr ""
-"転送済みファイルの一覧がウィンドウに表示されている場合、<gui>消去</gui>をク"
-"リックして一覧を空にできます。これは一覧からファイルを削除するだけで、コン"
-"ピューターからは削除されません。"
-
-#: C/send-file.page:87(note/p)
-msgid ""
-"It is possible to send files only using the following services: <em>Jabber</"
-"em>, <em>Google Talk</em> and <em>People Nearby</em>."
-msgstr ""
-"ファイル転送は次のサービスでのみ可能です: <em>Jabber</em>、<em>Google トーク"
-"</em>、<em>People Nearby</em>"
-
-#: C/send-file.page:93(note/p)
-msgid ""
-"In order to send a file to someone, you need to be connected to the "
-"Internet, or to a local area network."
-msgstr ""
-"ファイルを転送するためには、インターネットまたはローカルエリアネットワークに"
-"接続している必要があります。"
-
-#: C/send-message.page:8(info/desc)
-msgid "Send a message to one of your contacts."
-msgstr "相手先の一人にメッセージを送ります。"
-
-#: C/send-message.page:32(page/title)
-msgid "Send a message to someone"
-msgstr "メッセージの送信"
-
-#: C/send-message.page:36(item/p)
-msgid ""
-"From the <gui>Contact List</gui> window, double-click the name of the "
-"contact that you want to have a conversation with."
-msgstr ""
-"<gui>相手先の一覧</gui>ウィンドウから、会話をしたい相手先の名前をダブルクリッ"
-"クします。"
-
-#: C/send-message.page:42(item/p)
-msgid ""
-"A new window will open. Type a message into the box at the bottom of the "
-"window and press <key>Enter</key> to send it."
-msgstr ""
-"新しいウィンドウが開きます。ウィンドウの一番下の部分の欄にメッセージを入力"
-"し、<key>Enter</key> を押して、メッセージを送信します。"
-
-#: C/send-message.page:50(section/title)
-msgid "Send a message to a meta-contact"
-msgstr "メタ相手先へのメッセージの送信"
-
-#: C/send-message.page:58(item/p)
-msgid ""
-"Select the contact you want to have the conversation, and from the menu "
-"select <gui style=\"menuitem\">Chat</gui>."
-msgstr ""
-"会話をしたい相手先を選び、メニューから<gui style=\"menuitem\">チャット</gui>"
-"を指定します。"
-
-#: C/set-custom-status.page:9(info/desc)
-msgid "Add, edit or delete personal messages for your status."
-msgstr "在席状況の個人的メッセージを追加、編集、削除します。"
-
-#: C/set-custom-status.page:15(credit/name)
-msgid "Jim Campbell"
-msgstr "Jim Campbell"
-
-#: C/set-custom-status.page:34(page/title)
-msgid "Set a custom message"
-msgstr "独自メッセージの設定"
-
-#: C/set-custom-status.page:36(page/p)
-msgid ""
-"Sometimes you may want to set a custom message for your status, for example "
-"to let people know that you will be unavailable for a certain period of time."
-msgstr ""
-"在席状況について独自のメッセージを設定したくなるときがあります。たとえば、不"
-"在の期間を正確に知らせたい場合などです。"
-
-#: C/set-custom-status.page:40(page/p)
-msgid ""
-"It is possible to set a custom message based on the different statuses "
-"available."
-msgstr "在席状況ごとに独自のメッセージを設定できます。"
-
-#: C/set-custom-status.page:46(item/p) C/set-custom-status.page:82(item/p)
-msgid ""
-"From the <gui>Contact List</gui> window, click on the drop-down list at the "
-"top."
-msgstr ""
-"<gui>相手先の一覧</gui>ウィンドウから、最上部のドロップダウンリストをクリック"
-"します。"
-
-#: C/set-custom-status.page:52(item/p)
-msgid ""
-"Select the status you want to add a custom message to. You have to select "
-"the one identified with the label <gui>Custom Message</gui>."
-msgstr ""
-"独自のメッセージを設定したい在席状況を選びます。<gui>独自のメッセージ</gui>と"
-"いうラベルの付いているものを選ぶ必要があります。"
-
-#: C/set-custom-status.page:58(item/p)
-msgid ""
-"Enter your custom message in the text box at the top of the window, and "
-"press <key>Enter</key> to set the message."
-msgstr ""
-"ウィンドウ最上部のテキスト欄に独自のメッセージを入力し、<key>Enter</key> を押"
-"してメッセージを設定します。"
-
-#: C/set-custom-status.page:64(item/p)
-msgid ""
-"If you want to set the custom message as a favorite, saving it in order to "
-"use it again, click on the little heart on the right of the text box where "
-"you wrote your custom message."
-msgstr ""
-"その独自メッセージを再利用するためにお気に入りとして保存するには、メッセージ"
-"を入力した欄の右端にある小さなハート印をクリックします。"
-
-#: C/set-custom-status.page:69(item/p)
-msgid ""
-"If you do not do it, the custom message will not be available the next time "
-"you use <app>Empathy</app>. It will be saved only for the current session."
-msgstr ""
-"この操作を行わない場合、次に <app>Empathy</app> を使う際にはこの独自メッセー"
-"ジは失われています。現在のセッションのあいだのみ保存されます。"
-
-#: C/set-custom-status.page:78(section/title)
-msgid "Edit and remove a custom message"
-msgstr "独自メッセージの編集と削除"
-
-#: C/set-custom-status.page:88(item/p)
-msgid "Select <gui>Edit Custom Message</gui>."
-msgstr "<gui>独自のメッセージを編集</gui>を選びます。"
-
-#: C/set-custom-status.page:95(item/p)
-msgid "To edit a custom message:"
-msgstr "独自メッセージの編集"
-
-# Saved Presets は廃止されたようだ。
-#: C/set-custom-status.page:100(item/p)
-msgid ""
-"From the <gui>Saved Presets</gui> box, select the status message you want to "
-"edit and double-click on it."
-msgstr ""
-"<gui>保存済み独自メッセージ</gui>の欄から、編集する状況メッセージを選び、ダブ"
-"ルクリックします。"
-
-#: C/set-custom-status.page:106(item/p)
-msgid "Type the new custom message and press <key>Enter</key> to modify it."
-msgstr ""
-"新しい独自メッセージを入力し、<key>Enter</key> を押して変更を保存します。"
-
-#: C/set-custom-status.page:113(item/p)
-msgid "To remove a custom message:"
-msgstr "独自メッセージの削除"
-
-#: C/set-custom-status.page:118(item/p)
-msgid ""
-"From the <gui>Saved Presets</gui> box, select the status message you want to "
-"remove."
-msgstr "<gui>Saved Presets</gui> の欄から、削除する状況メッセージを選びます。"
-
-#: C/set-custom-status.page:124(item/p)
-msgid "Click on the <gui>Remove</gui> button."
-msgstr "<gui>削除</gui>ボタンをクリックします。"
-
-#: C/set-custom-status.page:133(item/p)
-msgid "When finished, click on <gui>Close</gui>."
-msgstr "終わったら、<gui>閉じる</gui>をクリックします。"
-
-#: C/set-custom-status.page:140(note/p)
-msgid ""
-"When you edit a custom message, it will not be set as the current status "
-"message. You will need to select it from the <gui>Contact List</gui> window."
-msgstr ""
-"独自メッセージを編集しても、現在の状況メッセージとしては設定されません。<gui>"
-"相手先の一覧</gui>から、その編集したメッセージを選ぶ必要があります。"
-
-#: C/share-desktop.page:7(info/desc)
-msgid "Show your desktop to your contacts."
-msgstr "相手先にあなたのデスクトップを表示します。"
-
-#: C/share-desktop.page:18(credit/name)
-msgid "Ekaterina Gerasimova"
-msgstr "Ekaterina Gerasimova"
-
-#: C/share-desktop.page:33(page/title)
-msgid "Share your desktop"
-msgstr "デスクトップの共有"
-
-#: C/share-desktop.page:35(page/p)
-msgid ""
-"It is possible to share your desktop with some of your contacts. You can use "
-"this functionality to show your desktop to your contacts to, for example, "
-"ask for help or help your contacts resolve a problem."
-msgstr ""
-"あなたのデスクトップを相手先と共有できます。この機能で、あなたのデスクトップ"
-"を相手先に見せることができ、たとえば、問題解決の手助けを求めたり、また相手先"
-"を手助けすることができます。"
-
-#: C/share-desktop.page:42(note/p)
-msgid ""
-"To be able to share your desktop, you need to have a VNC server, which has "
-"support for the feature, installed on your system. <app>Vino</app>, the "
-"GNOME VNC server, has the required support."
-msgstr ""
-"デスクトップを共有するには この機能をサポートしている VNC サーバーがシステム"
-"にインストールされていることが必要です。GNOME の VNC サーバー <app>Vino</"
-"app> はこの要件を満たしています。"
-
-#: C/share-desktop.page:51(item/p)
-msgid "From the <gui>Contact List</gui> window, do one of the following:"
-msgstr "<gui>相手先の一覧</gui>ウィンドウから、次のいずれかを行います。"
-
-#: C/share-desktop.page:56(item/p)
-msgid ""
-"Select the contact you want to share your desktop with and choose "
-"<guiseq><gui>Edit</gui><gui>Contact</gui> <gui>Share My Desktop</gui></"
-"guiseq>."
-msgstr ""
-"デスクトップを共有したい相手先を指定し、<guiseq><gui>編集</gui><gui>相手先</"
-"gui><gui>デスクトップの共有</gui></guiseq>を選びます。"
-
-#: C/share-desktop.page:63(item/p)
-msgid ""
-"Right-click on the name of the contact you want to share your desktop with "
-"and select <gui>Share My Desktop</gui>."
-msgstr ""
-"デスクトップを共有したい相手先の名前で右クリックし、<gui>デスクトップの共有</"
-"gui> を指定します。"
-
-#: C/share-desktop.page:71(item/p)
-msgid ""
-"An invitation to view your desktop will be sent to the contact you have "
-"selected. To view your desktop, they will need to accept it."
-msgstr ""
-"あなたのデスクトップを見るよう、指定した相手先に招待が送られます。相手先は、"
-"その招待を受諾するとあなたのデスクトップを見ることができます。"
-
-#: C/share-desktop.page:77(item/p)
-msgid ""
-"You can disconnect the contact from your computer using your desktop sharing "
-"application."
-msgstr "デスクトップ共有アプリケーションで、相手先の接続を切ることができます。"
-
-#: C/share-desktop.page:82(note/p)
-msgid ""
-"For more information about how to use the remote desktop sharing "
-"application, refer to its help."
-msgstr ""
-"リモートデスクトップ共有アプリケーションの詳細な情報は、そのヘルプを参照して"
-"ください。"
-
-#: C/share-desktop.page:90(page/p)
-msgid ""
-"When you share your desktop with someone else, it is possible to experience "
-"system performance slowdown and low Internet speed."
-msgstr ""
-"デスクトップをだれかと共有しているとき、システムの体感速度は遅くなり、イン"
-"ターネットの速度も遅くなります。"
-
-#: C/share-desktop.page:96(note/p)
-msgid ""
-"Some of your contacts may not be able to use this feature. It is necessary "
-"for them to have version 2.28, or newer, of <app>Empathy</app> and a "
-"compatible remote desktop viewer application installed in their system."
-msgstr ""
-"相手先によってはこの機能を使えない場合があります。相手先には <app>Empathy</"
-"app> のバージョン 2.28 またはそれ以降が必要です。また、相手先のシステムに互換"
-"性のあるリモートデスクトップビューアーがインストールされている必要がありま"
-"す。"
-
-#. This is a reference to an external file such as an image or video. When
-#. the file changes, the md5 hash will change to let you know you need to
-#. update your localized copy. The msgstr is not used at all. Set it to
-#. whatever you like once you have updated your copy of the file.
-#: C/status-icons.page:39(media)
-msgctxt "_"
-msgid ""
-"external ref='figures/available.png' md5='2196b2f0ad4ce26fdb7b9d48e75d1947'"
-msgstr ""
-"external ref='figures/available.png' md5='2196b2f0ad4ce26fdb7b9d48e75d1947'"
-
-#. This is a reference to an external file such as an image or video. When
-#. the file changes, the md5 hash will change to let you know you need to
-#. update your localized copy. The msgstr is not used at all. Set it to
-#. whatever you like once you have updated your copy of the file.
-#: C/status-icons.page:45(media)
-msgctxt "_"
-msgid "external ref='figures/busy.png' md5='15eb2adff5faedf97b0cb9105d09410a'"
-msgstr "external ref='figures/busy.png' md5='15eb2adff5faedf97b0cb9105d09410a'"
-
-#. This is a reference to an external file such as an image or video. When
-#. the file changes, the md5 hash will change to let you know you need to
-#. update your localized copy. The msgstr is not used at all. Set it to
-#. whatever you like once you have updated your copy of the file.
-#: C/status-icons.page:53(media)
-msgctxt "_"
-msgid "external ref='figures/away.png' md5='9c504d6ffa0cf1a9cc8933d16e1bea33'"
-msgstr "external ref='figures/away.png' md5='9c504d6ffa0cf1a9cc8933d16e1bea33'"
-
-#. This is a reference to an external file such as an image or video. When
-#. the file changes, the md5 hash will change to let you know you need to
-#. update your localized copy. The msgstr is not used at all. Set it to
-#. whatever you like once you have updated your copy of the file.
-#.
-#. This is a reference to an external file such as an image or video. When
-#. the file changes, the md5 hash will change to let you know you need to
-#. update your localized copy. The msgstr is not used at all. Set it to
-#. whatever you like once you have updated your copy of the file.
-#: C/status-icons.page:62(media) C/status-icons.page:69(media)
-msgctxt "_"
-msgid ""
-"external ref='figures/offline.png' md5='c5b0c21181cbd6e13f8909243c0fa964'"
-msgstr ""
-"external ref='figures/offline.png' md5='c5b0c21181cbd6e13f8909243c0fa964'"
-
-#: C/status-icons.page:7(info/desc)
-msgid "Understanding the various statuses and status icons."
-msgstr "在席状況とアイコンについて理解します。"
-
-#: C/status-icons.page:35(page/title)
-msgid "Status Types and Icons"
-msgstr "在席状況の種類とアイコン"
-
-#: C/status-icons.page:39(item/title)
-msgid ""
-"<media type=\"image\" mime=\"image/png\" src=\"figures/available.png"
-"\">Available icon</media> <gui>Available</gui>"
-msgstr ""
-"<media type=\"image\" mime=\"image/png\" src=\"figures/available.png\">在席中"
-"アイコン</media> <gui>在席中</gui>"
-
-#: C/status-icons.page:41(item/p)
-msgid ""
-"Use the <em>Available</em> status when you are at your computer and able to "
-"chat with your contacts. You can set a custom message for this status."
-msgstr ""
-"<em>在席中</em>は、コンピューターのところにいて、相手先とチャットできるときに"
-"使います。この在席状況について独自のメッセージを設定できます。"
-
-#: C/status-icons.page:45(item/title)
-msgid ""
-"<media type=\"image\" mime=\"image/png\" src=\"figures/busy.png\">Busy icon</"
-"media> <gui>Busy</gui>"
-msgstr ""
-"<media type=\"image\" mime=\"image/png\" src=\"figures/busy.png\">取り込み中"
-"アイコン</media> <gui>取り込み中</gui>"
-
-#: C/status-icons.page:47(item/p)
-msgid ""
-"Use the <em>Busy</em> status to let your contacts know that you don’t want "
-"to chat right now. They can still contact you, for instance if they have "
-"something urgent they need to discuss. By default, <app>Empathy</app> will "
-"not use notification bubbles and sounds when you are busy. You can set a "
-"custom message for this status."
-msgstr ""
-"<em>取り込み中</em>は、いますぐチャットしたくないことを相手先に知らせる場合に"
-"使います。相手先は何か緊急に話したい場合には連絡できます。デフォルトでは、取"
-"り込み中の場合に <app>Empathy</app> は通知ポップアップを表示せず、サウンドも"
-"鳴らしません。この在席状況について独自のメッセージを設定できます。"
-
-#: C/status-icons.page:53(item/title)
-msgid ""
-"<media type=\"image\" mime=\"image/png\" src=\"figures/away.png\">Away icon</"
-"media> <gui>Away</gui>"
-msgstr ""
-"<media type=\"image\" mime=\"image/png\" src=\"figures/away.png\">離席中アイ"
-"コン</media> <gui>離席中</gui>"
-
-#: C/status-icons.page:55(item/p)
-msgid ""
-"Use the <em>Away</em> status when you are going away from your computer. "
-"<app>Empathy</app> automatically sets your status to Away if you do not use "
-"your computer for a while, or if your screensaver is on. By default, "
-"<app>Empathy</app> will not use notification bubbles and sounds when you are "
-"away. You can set a custom message for this status."
-msgstr ""
-"<em>離席中</em>は、コンピューターを離れているときに使います。しばらくコン"
-"ピューターの操作がない場合、またはスクリーンセーバーが動いているときに "
-"<app>Empathy</app> は自動的に在席状況を離席中にします。デフォルトでは、離席中"
-"の場合に <app>Empathy</app> は通知ポップアップを表示せず、サウンドも鳴らしま"
-"せん。この在席状況について独自のメッセージを設定できます。"
-
-#: C/status-icons.page:62(item/title)
-msgid ""
-"<media type=\"image\" mime=\"image/png\" src=\"figures/offline.png\">Offline "
-"icon</media> <gui>Invisible</gui>"
-msgstr ""
-"<media type=\"image\" mime=\"image/png\" src=\"figures/offline.png\">オフライ"
-"ン・アイコン</media> <gui>隠れ中</gui>"
-
-#: C/status-icons.page:64(item/p)
-msgid ""
-"When you set your status to <em>Invisible</em>, you will appear as offline "
-"to your contacts. You will still be connected to your accounts, and you "
-"still see your contacts’ statuses and start conversations with them."
-msgstr ""
-"在席状況を<em>隠れ中</em>にすると、相手先にはオフラインとして表示されます。ア"
-"カウントには接続しており、相手の在席状況を見たり会話を始めることができます。"
-
-#: C/status-icons.page:69(item/title)
-msgid ""
-"<media type=\"image\" mime=\"image/png\" src=\"figures/offline.png\">Offline "
-"icon</media> <gui>Offline</gui>"
-msgstr ""
-"<media type=\"image\" mime=\"image/png\" src=\"figures/offline.png\">オフライ"
-"ン・アイコン</media> <gui>オフライン</gui>"
-
-#: C/status-icons.page:71(item/p)
-msgid ""
-"Setting your status to <em>Offline</em> disconnects you from all of your "
-"accounts."
-msgstr ""
-"在席状況を<em>オフライン</em>にすると、すべてのアカウントを切断します。"
-
-#: C/video-call.page:10(info/desc)
-msgid "Start a video conversation with one of your contacts."
-msgstr "相手先の一人とビデオ会話を始めます。"
-
-#: C/video-call.page:29(page/title)
-msgid "Start a video conversation"
-msgstr "ビデオ会話の開始"
-
-#: C/video-call.page:31(page/p)
-msgid ""
-"If you have a webcam, you can call your contacts and have a video "
-"conversation with them. This feature only works with certain types of "
-"accounts, and it requires the other person to have an application that "
-"supports video calls."
-msgstr ""
-"ウェブカメラを持っている場合、相手先を呼び出してビデオ会話を行えます。この機"
-"能は、それに適したアカウントを持っている場合にのみ、かつ相手先がビデオ会話を"
-"サポートしているアプリケーションを持っている場合に働きます。"
-
-#: C/video-call.page:38(item/p)
-msgid ""
-"From the <gui>Contact List</gui> window, click the <media type=\"image\" "
-"mime=\"image/png\" src=\"figures/camera-web.png\">video call</media> icon "
-"next to the name of the contact you wish to call and choose <gui style="
-"\"menuitem\">Video Call</gui>."
-msgstr ""
-"<gui>相手先の一覧</gui>ウィンドウから、通話したい相手先の名前の横にある"
-"<media type=\"image\" mime=\"image/png\" src=\"figures/camera-web.png\">ビデ"
-"オ通話</media>アイコンをクリックし、<gui style=\"menuitem\">ビデオ通話</gui>"
-"を選びます。"
-
-#: C/video-call.page:55(note/p)
-msgid ""
-"To turn a video conversation into an audio conversation, choose <guiseq><gui "
-"style=\"menu\">Video</gui><gui style=\"menuitem\">Video Off</gui></guiseq>."
-msgstr ""
-"ビデオ会話を音声会話に切り替えるには、<guiseq><gui style=\"menu\">ビデオ</"
-"gui><gui style=\"menuitem\">ビデオ切</gui></guiseq>を選びます。"
-
-#: C/video-call.page:61(section/title)
-msgid "Start a video conversation with a meta-contact"
-msgstr "メタ相手先とのビデオ会話の開始"
-
-#: C/video-call.page:69(item/p)
-msgid ""
-"Select the contact you want to have the conversation, and from the menu "
-"select <gui style=\"menuitem\">Video Call</gui>."
-msgstr ""
-"会話をしたい相手先を選び、メニューから <gui style=\"menuitem\">ビデオ通話</"
-"gui>を指定します。"
-
-#~ msgid "milo@ubuntu.com"
-#~ msgstr "milo@ubuntu.com"
-
-#~ msgid "shaunm@gnome.org"
-#~ msgstr "shaunm@gnome.org"
-
-#~ msgid "Available icon"
-#~ msgstr "在席アイコン"
-
-#~ msgid "Available"
-#~ msgstr "在席中"
-
-#~ msgid "Busy icon"
-#~ msgstr "取り込み中アイコン"
-
-#~ msgid "Busy"
-#~ msgstr "取り込み中"
-
-#~ msgid "Away icon"
-#~ msgstr "離席中アイコン"
-
-#~ msgid "Away"
-#~ msgstr "離席中"
-
-#~ msgid "Offline icon"
-#~ msgstr "オフライン・アイコン"
-
-#~ msgid "Invisible"
-#~ msgstr "隠れ中"
-
-#~ msgid "Offline"
-#~ msgstr "オフライン"
-
-#~ msgid "kittykat3756@gmail.com"
-#~ msgstr "kittykat3756@gmail.com"
-
-#~ msgid "jwcampbell@gmail.com"
-#~ msgstr "jwcampbell@gmail.com"
-
-#~ msgid "philbull@gmail.com"
-#~ msgstr "philbull@gmail.com"
-
-#~ msgid "Install telepathy-idle"
-#~ msgstr "telepathy-idle のインストール"
-
-#~ msgid "peter.haslam@freenet.de"
-#~ msgstr "peter.haslam@freenet.de"
-
-#~ msgid "Icon for audio conversation"
-#~ msgstr "音声会話のアイコン"
-
-#~ msgid "Icon for video conversation"
-#~ msgstr "ビデオ会話のアイコン"
-
-#~ msgid "Resource"
-#~ msgstr "リソース"
-
-#~ msgid "Priority"
-#~ msgstr "優先度"
-
-#~ msgid "Network"
-#~ msgstr "ネットワーク"
-
-#~ msgid "Nickname"
-#~ msgstr "ニックネーム"
-
-#~ msgid "Password"
-#~ msgstr "パスワード"
-
-#~ msgid "Quit message"
-#~ msgstr "終了時のメッセージ"
-
-# #元の語によらず、(説明の内容に従って)「文字エンコーディング」と訳す。
-#~ msgid "Charset"
-#~ msgstr "文字エンコーディング"
-
-#~ msgid "Servers"
-#~ msgstr "サーバー"
-
-#~ msgid "Edit, remove and add a custom message"
-#~ msgstr "独自メッセージの編集、削除、追加"
diff --git a/help/lv/lv.po b/help/lv/lv.po
deleted file mode 100644
index 8efa301c..00000000
--- a/help/lv/lv.po
+++ /dev/null
@@ -1,3581 +0,0 @@
-# Latvian translation for empathy.
-# Copyright (C) 2012 empathy's COPYRIGHT HOLDER
-# This file is distributed under the same license as the empathy package.
-#
-# Viesturs Ružāns <viesty@exs.lv> 2011.
-# Rūdolfs Mazurs <rudolfs.mazurs@gmail.com>, 2012.
-msgid ""
-msgstr ""
-"Project-Id-Version: empathy master\n"
-"POT-Creation-Date: 2012-03-11 22:03+0000\n"
-"PO-Revision-Date: 2012-03-12 00:17+0200\n"
-"Last-Translator: Rūdolfs Mazurs <rudolfs.mazurs@gmail.com>\n"
-"Language-Team: Latvian <lata-l10n@googlegroups.com>\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 != 0 ? 1 : "
-"2);\n"
-"Language: lv\n"
-"X-Generator: Lokalize 1.2\n"
-
-#. Put one translator per line, in the form NAME <EMAIL>, YEAR1, YEAR2
-#| msgid "translator-credits"
-msgctxt "_"
-msgid "translator-credits"
-msgstr ""
-"Viesturs Ružāns <viesty@exs.lv> 2011\n"
-"Rūdolfs Mazurs <rudolfs.mazurs@gmail.com>"
-
-#. This is a reference to an external file such as an image or video. When
-#. the file changes, the md5 hash will change to let you know you need to
-#. update your localized copy. The msgstr is not used at all. Set it to
-#. whatever you like once you have updated your copy of the file.
-#.
-#. This is a reference to an external file such as an image or video. When
-#. the file changes, the md5 hash will change to let you know you need to
-#. update your localized copy. The msgstr is not used at all. Set it to
-#. whatever you like once you have updated your copy of the file.
-#: C/index.page:28(media)
-#| msgid ""
-#| "@@image: 'figures/empathy-logo.png'; md5=1afc419a644e90b16393807e35cb5cb2"
-msgctxt "_"
-msgid ""
-"external ref='figures/empathy-logo.png' "
-"md5='1afc419a644e90b16393807e35cb5cb2'"
-msgstr ""
-"external ref='figures/empathy-logo.png' "
-"md5='1afc419a644e90b16393807e35cb5cb2'"
-
-#: C/index.page:7(info/title)
-#| msgid "Empathy Internet Messenger"
-msgctxt "link"
-msgid "Empathy Internet Messenger"
-msgstr "Empathy Interneta ziņotājs"
-
-#: C/index.page:8(info/title)
-#| msgid "Empathy Internet Messenger"
-msgctxt "text"
-msgid "Empathy Internet Messenger"
-msgstr "Empathy Interneta ziņotājs"
-
-#: C/index.page:19(credit/name) C/add-account.page:21(credit/name)
-#: C/audio-call.page:19(credit/name) C/audio-video.page:17(credit/name)
-#: C/create-account.page:19(credit/name)
-#: C/disable-account.page:21(credit/name)
-#: C/favorite-rooms.page:14(credit/name) C/geolocation.page:17(credit/name)
-#: C/geolocation-not-showing.page:17(credit/name)
-#: C/geolocation-privacy.page:17(credit/name)
-#: C/geolocation-supported.page:16(credit/name)
-#: C/geolocation-turn.page:18(credit/name)
-#: C/geolocation-what-is.page:18(credit/name)
-#: C/group-conversations.page:19(credit/name)
-#: C/hide-contacts.page:11(credit/name) C/import-account.page:23(credit/name)
-#: C/introduction.page:13(credit/name) C/irc-commands.page:10(credit/name)
-#: C/irc-join-pwd.page:17(credit/name) C/irc-join-room.page:16(credit/name)
-#: C/irc-manage.page:19(credit/name) C/irc-nick-password.page:18(credit/name)
-#: C/irc-send-file.page:16(credit/name)
-#: C/irc-start-conversation.page:15(credit/name)
-#: C/link-contacts.page:15(credit/name) C/prev-conv.page:17(credit/name)
-#: C/prob-conn-acctdisabled.page:19(credit/name)
-#: C/prob-conn-auth.page:21(credit/name) C/prob-conn-name.page:18(credit/name)
-#: C/prob-conn-neterror.page:19(credit/name)
-#: C/remove-account.page:19(credit/name) C/salut-protocol.page:18(credit/name)
-#: C/send-file.page:21(credit/name) C/set-custom-status.page:19(credit/name)
-#: C/share-desktop.page:14(credit/name) C/status-icons.page:16(credit/name)
-#: C/video-call.page:22(credit/name)
-msgid "Milo Casagrande"
-msgstr "Milo Casagrande"
-
-#: C/index.page:23(license/p) C/account-irc.page:20(license/p)
-#: C/account-jabber.page:18(license/p) C/accounts-window.page:22(license/p)
-#: C/add-account.page:29(license/p) C/add-contact.page:22(license/p)
-#: C/audio-call.page:23(license/p) C/audio-video.page:21(license/p)
-#: C/change-status.page:28(license/p) C/create-account.page:23(license/p)
-#: C/disable-account.page:29(license/p) C/favorite-rooms.page:18(license/p)
-#: C/geolocation.page:21(license/p)
-#: C/geolocation-not-showing.page:21(license/p)
-#: C/geolocation-privacy.page:21(license/p)
-#: C/geolocation-supported.page:20(license/p)
-#: C/geolocation-turn.page:22(license/p)
-#: C/geolocation-what-is.page:22(license/p)
-#: C/group-conversations.page:23(license/p) C/hide-contacts.page:15(license/p)
-#: C/import-account.page:31(license/p) C/introduction.page:17(license/p)
-#: C/irc-commands.page:14(license/p) C/irc-join-pwd.page:21(license/p)
-#: C/irc-join-room.page:20(license/p) C/irc-manage.page:23(license/p)
-#: C/irc-nick-password.page:22(license/p) C/irc-send-file.page:20(license/p)
-#: C/irc-start-conversation.page:19(license/p)
-#: C/link-contacts.page:19(license/p) C/prev-conv.page:25(license/p)
-#: C/prob-conn-acctdisabled.page:23(license/p)
-#: C/prob-conn-auth.page:25(license/p) C/prob-conn-name.page:22(license/p)
-#: C/prob-conn-neterror.page:23(license/p) C/prob-conn.page:18(license/p)
-#: C/remove-account.page:23(license/p) C/salut-protocol.page:22(license/p)
-#: C/send-file.page:25(license/p) C/send-message.page:21(license/p)
-#: C/set-custom-status.page:23(license/p) C/share-desktop.page:22(license/p)
-#: C/status-icons.page:24(license/p) C/video-call.page:26(license/p)
-msgid "Creative Commons Share Alike 3.0"
-msgstr "Creative Commons Share Alike 3.0 licence."
-
-#: C/index.page:27(page/title)
-msgid ""
-"<media type=\"image\" mime=\"image/png\" src=\"figures/empathy-logo.png\"> "
-"Empathy Internet Messenger logo </media> Empathy Internet Messenger"
-msgstr ""
-"<media type=\"image\" mime=\"image/png\" src=\"figures/empathy-logo.png\"> "
-"Empathy Interneta ziņotāja logo </media> Empathy Interneta ziņotājs"
-
-#: C/index.page:35(section/title)
-msgid "Account Management"
-msgstr "Kontu pārvaldnieks"
-
-#: C/index.page:39(section/title)
-msgid "Contact Management"
-msgstr "Kontaktu pārvaldnieks"
-
-#: C/index.page:43(section/title)
-msgid "Text Conversations"
-msgstr "Teksta sarunas"
-
-#: C/index.page:47(section/title)
-msgid "Audio and Video Conversations"
-msgstr "Audio un video sarunas"
-
-#: C/index.page:51(section/title)
-msgid "Advanced Actions"
-msgstr "Darbības lietpratējiem"
-
-#: C/index.page:55(section/title) C/irc-manage.page:57(section/title)
-msgid "Common Problems"
-msgstr "Biežākās problēmas"
-
-#. This is a reference to an external file such as an image or video. When
-#. the file changes, the md5 hash will change to let you know you need to
-#. update your localized copy. The msgstr is not used at all. Set it to
-#. whatever you like once you have updated your copy of the file.
-#: C/account-irc.page:106(media)
-#| msgid "@@image: 'figures/gtk-add.png'; md5=a856b499d8d4681b70b5ce6f25bc5c6d"
-msgctxt "_"
-msgid ""
-"external ref='figures/gtk-add.png' md5='a856b499d8d4681b70b5ce6f25bc5c6d'"
-msgstr ""
-"external ref='figures/gtk-add.png' md5='a856b499d8d4681b70b5ce6f25bc5c6d'"
-
-#. This is a reference to an external file such as an image or video. When
-#. the file changes, the md5 hash will change to let you know you need to
-#. update your localized copy. The msgstr is not used at all. Set it to
-#. whatever you like once you have updated your copy of the file.
-#.
-#. This is a reference to an external file such as an image or video. When
-#. the file changes, the md5 hash will change to let you know you need to
-#. update your localized copy. The msgstr is not used at all. Set it to
-#. whatever you like once you have updated your copy of the file.
-#.
-#. This is a reference to an external file such as an image or video. When
-#. the file changes, the md5 hash will change to let you know you need to
-#. update your localized copy. The msgstr is not used at all. Set it to
-#. whatever you like once you have updated your copy of the file.
-#.
-#. This is a reference to an external file such as an image or video. When
-#. the file changes, the md5 hash will change to let you know you need to
-#. update your localized copy. The msgstr is not used at all. Set it to
-#. whatever you like once you have updated your copy of the file.
-#: C/account-irc.page:109(media) C/prob-conn-auth.page:58(media)
-#: C/prob-conn-name.page:44(media) C/prob-conn-neterror.page:59(media)
-#| msgid ""
-#| "@@image: 'figures/gtk-edit.png'; md5=4f21b451732817be0604fe3e2c8da98b"
-msgctxt "_"
-msgid ""
-"external ref='figures/gtk-edit.png' md5='4f21b451732817be0604fe3e2c8da98b'"
-msgstr ""
-"external ref='figures/gtk-edit.png' md5='4f21b451732817be0604fe3e2c8da98b'"
-
-#. This is a reference to an external file such as an image or video. When
-#. the file changes, the md5 hash will change to let you know you need to
-#. update your localized copy. The msgstr is not used at all. Set it to
-#. whatever you like once you have updated your copy of the file.
-#: C/account-irc.page:112(media)
-#| msgid ""
-#| "@@image: 'figures/gtk-remove.png'; md5=215e3a325a3dd619874e35c30a018bb6"
-msgctxt "_"
-msgid ""
-"external ref='figures/gtk-remove.png' md5='215e3a325a3dd619874e35c30a018bb6'"
-msgstr ""
-"external ref='figures/gtk-remove.png' md5='215e3a325a3dd619874e35c30a018bb6'"
-
-#: C/account-irc.page:8(info/desc)
-msgid "Additional information necessary for connecting to IRC networks."
-msgstr "Papildu informācija, lai pieslēgtos IRC tīkliem."
-
-#: C/account-irc.page:16(credit/name) C/account-jabber.page:14(credit/name)
-#: C/accounts-window.page:18(credit/name) C/add-account.page:25(credit/name)
-#: C/disable-account.page:25(credit/name)
-#: C/import-account.page:27(credit/name) C/prev-conv.page:21(credit/name)
-#: C/status-icons.page:20(credit/name)
-msgid "Shaun McCance"
-msgstr "Shaun McCance"
-
-#: C/account-irc.page:31(page/title)
-msgid "IRC account details"
-msgstr "IRC konta informācija"
-
-#: C/account-irc.page:33(page/p)
-msgid ""
-"IRC accounts require different information than many other types of "
-"accounts. To create an IRC account, you must specify at least an IRC network "
-"and a nickname. This page details the information you can provide for an IRC "
-"account."
-msgstr ""
-"IRC konti pieprasa cita veida informāciju, nekā vairāki citi kontu tipi. Lai "
-"izveidotu IRC kontu, tev vajag norādīt vismaz IRC tīklu un savu iesauku. Šī "
-"lapa detalizētāk parāda informāciju, kuru vari sniegt IRC kontam."
-
-#: C/account-irc.page:39(note/p) C/irc-manage.page:37(note/p)
-msgid ""
-"You must have the <sys>telepathy-idle</sys> package installed to use IRC in "
-"<app>Empathy</app>."
-msgstr ""
-"Tev ir jāuzinstalē <sys>telepathy-idle</sys> paka, lai izmantotu IRC kopā ar "
-"<app>Empathy</app>."
-
-#: C/account-irc.page:45(item/title) C/account-irc.page:120(item/title)
-msgid "<gui>Network</gui>"
-msgstr "<gui>Tīkls</gui>"
-
-#: C/account-irc.page:46(item/p)
-msgid ""
-"IRC is an open system that allows people to run separate IRC networks. Each "
-"network is distinct and has its own users and chat rooms. <app>Empathy</app> "
-"lists the most popular networks in the <gui>Network</gui> drop-down list. "
-"You can add additional networks. See <link xref=\"#networks\"/> below."
-msgstr ""
-"IRC ir atvērta sistēma, kura ļauj cilvēkiem reizē darbināt vairākus IRC "
-"tīklus. Katrs tīkls ir atšķirīgs un tam ir katram savi lietotāji un "
-"tērzēšanas istabas. <app>Empathy</app> norādīs pašus populārākos tīklus, "
-"<gui>Tīkls</gui> sarakstā. Tu vari pievienot papildus tīklu, lasi vairāk - "
-"<link xref=\"#networks\"/>."
-
-#: C/account-irc.page:53(item/title)
-msgid "<gui>Nickname</gui>"
-msgstr "<gui>Iesauka</gui>"
-
-#: C/account-irc.page:54(item/p)
-msgid ""
-"Your nickname is your unique name on the IRC network. Only one person on a "
-"network may use a given nickname. If you get an error message that says "
-"<link xref=\"prob-conn-name\" role=\"error-msg\"/> you will need to change "
-"your nickname."
-msgstr ""
-"Tava iesauka ir unikāls vārds IRC tīklā. Tikai viena persona tīklā var "
-"izmantot vienu iesauku. Ja saņemsi kļūdas paziņojumu, kurš saka <link xref="
-"\"prob-conn-name\" role=\"error-msg\"/>, tev vajadzēs nomainīt iesauku."
-
-#: C/account-irc.page:60(item/title)
-msgid "<gui>Password</gui>"
-msgstr "<gui>Parole</gui>"
-
-#: C/account-irc.page:61(item/p)
-msgid ""
-"Some servers, particularly those on private networks, require a password to "
-"connect. If you are authorized to use the network, the network "
-"administrators should provide you with a password."
-msgstr ""
-"Daži serveri, lielākoties privātajos tīklos, pieprasa paroli, lai "
-"pieslēgtos. Ja tev ir pilnvarojums konkrētā tīkla izmantošanai, "
-"administratoram vajadzētu tev iedot paroli."
-
-#: C/account-irc.page:65(note/title)
-msgid "NickServ Passwords"
-msgstr "NickServ paroles"
-
-#: C/account-irc.page:66(note/p)
-msgid ""
-"On some networks, nicknames can be registered using a service known as "
-"NickServ. <app>Empathy</app> does not directly support nickname passwords. "
-"On some networks, including the popular freenode network, server passwords "
-"are automatically forwarded to NickServ, allowing you to set this field to "
-"identify yourself with NickServ. See <link xref=\"irc-nick-password\"/> for "
-"more details."
-msgstr ""
-"Dažos serveros iesaukas var reģistrēt, izmantojot pakalpojumu NickServ. "
-"<app>Empathy</app> tiešā veidā neatbalsta iesauku paroles. Dažos tīklos, "
-"tajā skaitā arī populārajā freenode tīklā, serveru paroles tiek automātiski "
-"pārvirzītas uz NickServ, ļaujot tev uzstādīt sevis atpazīšanu ar NickServ. "
-"Lasi <link xref=\"irc-nick-password\"/>, lai uzzinātu vairāk."
-
-#: C/account-irc.page:76(item/title)
-#| msgid "Real name"
-msgid "<gui>Real name</gui>"
-msgstr "<gui>Īstais vārds</gui>"
-
-#: C/account-irc.page:77(item/p)
-msgid ""
-"You can provide your real name in addition to your nickname. Other users "
-"will be able to see this when they view your information."
-msgstr ""
-"Papildus iesaukai, tu vari norādīt arī savu īsto vārdu. Citi lietotāji to "
-"varēs redzēt, skatoties tavu profila informāciju."
-
-#: C/account-irc.page:81(item/title)
-#| msgid "Select <gui>Edit Custom Message</gui>."
-msgid "<gui>Quit message</gui>"
-msgstr "<gui>Iziešanas ziņojums</gui>"
-
-#: C/account-irc.page:82(item/p)
-msgid ""
-"When you go offline, a quit message is sent to all the chat rooms you’re in "
-"and to all the users you’re having a private conversation with. Use this "
-"field to provide a custom quit message."
-msgstr ""
-"Kad tu izej nesaistē, iziešanas ziņa tiks nosūtīta visām sarakstes istabām, "
-"kurās tu esi, kā arī visiem lietotājiem, ar kuriem tev ir privāta saruna. "
-"Izmanto šo lauku, lai norādītu sevis izvēlētu iziešanas ziņu."
-
-#: C/account-irc.page:94(info/title)
-#| msgid "IRC Networks"
-msgctxt "link"
-msgid "IRC Networks"
-msgstr "IRC tīkli"
-
-#: C/account-irc.page:97(section/title)
-msgid "Networks"
-msgstr "Tīkli"
-
-#: C/account-irc.page:99(section/p)
-msgid ""
-"<app>Empathy</app> includes a list of popular IRC networks. If you wish to "
-"another IRC network, you can add it to the list. You can also modify "
-"networks and remove them from the list."
-msgstr ""
-"<app>Empathy</app> iekļauj sarakstu ar populāriem IRC tīkliem. Ja vēlies "
-"redzēt kādu citu tīklu, iekļauj to sarakstā. Tu vari arī rediģēt un izņemt "
-"tīklus no saraksta."
-
-#: C/account-irc.page:104(item/p)
-msgid ""
-"To add a network to the list, click <media type=\"image\" mime=\"image/png\" "
-"src=\"figures/gtk-add.png\" width=\"16\" height=\"16\">Add</media>."
-msgstr ""
-"Lai pievienotu tīklu sarakstam, spied uz <media type=\"image\" mime=\"image/"
-"png\" src=\"figures/gtk-add.png\" width=\"16\" height=\"16\">Pievienot</"
-"media>."
-
-#: C/account-irc.page:107(item/p)
-msgid ""
-"To modify a network in the list, select the network and click <media type="
-"\"image\" mime=\"image/png\" src=\"figures/gtk-edit.png\" width=\"16\" "
-"height=\"16\">Edit</media>."
-msgstr ""
-"Lai rediģētu tīklu no saraksta, izvēlies to un spied uz <media type=\"image"
-"\" mime=\"image/png\" src=\"figures/gtk-edit.png\" width=\"16\" height=\"16"
-"\">Rediģēt</media>."
-
-#: C/account-irc.page:110(item/p)
-msgid ""
-"To remove a network from the list, select the network and click <media type="
-"\"image\" mime=\"image/png\" src=\"figures/gtk-remove.png\" width=\"16\" "
-"height=\"16\">Remove</media>."
-msgstr ""
-"Lai izņemtu kādu tīklu no saraksta, izvēlies to un spied uz <media type="
-"\"image\" mime=\"image/png\" src=\"figures/gtk-remove.png\" width=\"16\" "
-"height=\"16\">Izņemt</media>."
-
-#: C/account-irc.page:115(section/p)
-msgid ""
-"When adding or modifying a network, you can enter the following information:"
-msgstr ""
-"Pievienojot vai rediģējot kādu tīklu, tu vari ievadīt sekojošo informāciju:"
-
-#: C/account-irc.page:121(item/p)
-msgid ""
-"This is the name of the network as you want it to appear in the list of "
-"networks."
-msgstr "Šis ir vārds, ar kuru tīkls tiks parādīts sarakstā."
-
-#: C/account-irc.page:125(item/title)
-#| msgid "<gui>Contact List</gui> window"
-msgid "<gui>Charset</gui>"
-msgstr "<gui>Rakstzīmju kopa</gui>"
-
-#: C/account-irc.page:126(item/p)
-msgid ""
-"This specifies the character encoding that is typically used on this "
-"network. A character encoding is a specific way of recording characters "
-"internally in a computer. There are many character encodings, and you need "
-"to use the same character encoding as other users to see their messages "
-"correctly."
-msgstr ""
-"Šis norāda rakstzīmju kodējumu, kurš tiek izmantots uz konkrētā tīkla. "
-"Rakstzīmju kodējums ir specifisks veids rakstzīmju ierakstīšanai datorā. Ir "
-"vairāki rakstzīmju kodējuma veidi un tev vajag izmantot tādu pašu kodējumu, "
-"kā citiem lietotājiem, lai varētu redzēt viņu ziņojumus pareizi."
-
-#: C/account-irc.page:135(item/p)
-msgid ""
-"By default, <app>Empathy</app> uses UTF-8, a modern character encoding that "
-"can handle text from most of the world's languages. Another common encoding "
-"for English and some other Western languages is ISO-8859-1."
-msgstr ""
-"Pēc noklusējuma, <app>Empathy</app> izmanto UTF-8, modernu rakstzīmju "
-"kodējumu, kurš var apstrādāt lielāko daļu pasaules valodu tekstus. Vēl viens "
-"sastopams kodējums angļu un dažām rietumu valodām ir ISO-8859-1."
-
-#: C/account-irc.page:141(item/title)
-msgid "<gui>Servers</gui>"
-msgstr "<gui>Serveri</gui>"
-
-#: C/account-irc.page:142(item/p)
-msgid ""
-"An IRC network may have many servers you can connect to. When you are "
-"connected to a server on a particular network, you can communicate with all "
-"users on all other servers on that network. You can add and remove servers "
-"for this network using the <gui>Add</gui> and <gui>Remove</gui> buttons."
-msgstr ""
-"Vienā IRC tīklā var būs daudzi serveri, kuriem tu vari pieslēgties. Kad esi "
-"pieslēdzies serverim konkrētā tīklā, tu vari sazināties ar visiem "
-"lietotājiem visos pārējos serveros, tajā pašā tīklā. Tu vari pievienot vai "
-"noņemt serverus no konkrētā tīkla, izmantojot <gui>Pievienot</gui> un "
-"<gui>Izņemt</gui> pogas."
-
-#: C/account-irc.page:147(item/p)
-msgid ""
-"When a server is selected, click the field under <gui>Server</gui> or "
-"<gui>Port</gui> to edit it. Alternatively, use the left and right arrow keys "
-"to focus the field, and press the space bar to begin editing."
-msgstr ""
-"Kad ir izvēlēts serveris, nospied uz lauciņa zem <gui>Serveris</gui> vai "
-"<gui>Ports</gui>, lai to rediģētu. Vēl viens variants ir izmantot kreiso vai "
-"labo virziena taustiņu, lai fokusētos uz lauciņa, un nospiest atstarpes "
-"taustiņu, lai sāktu rediģēt."
-
-#: C/account-irc.page:151(item/p)
-msgid ""
-"Select the check box in the <gui>SSL</gui> column to encrypt all "
-"communication with a server. Note that this does not prevent other users on "
-"the network from seeing what you write on public chat rooms."
-msgstr ""
-"Izvēlies lauciņu zem <gui>SSL</gui> kolonnas, lai šifrētu visu komunikāciju "
-"ar serveri. Piezīme: tas neattur citus lietotājus tīklā redzēt to, ko tu "
-"raksti publiskajās tērzēšanas istabās."
-
-#: C/account-jabber.page:7(info/desc)
-msgid "Advanced options for Jabber and Google Talk accounts."
-msgstr "Paplašinātas iespējas Jabber un Google Talk kontiem."
-
-#: C/account-jabber.page:29(page/title)
-msgid "Jabber account details"
-msgstr "Jabber konta informācija"
-
-#: C/account-jabber.page:31(page/p)
-msgid ""
-"Most Jabber accounts will require only a login ID and a password to connect. "
-"For some accounts or on certain types of networks, you may need to enter "
-"additional information in the <gui>Advanced</gui> section. Normally, you "
-"will not need to use the advanced options below. For general instructions on "
-"adding an account, see <link xref=\"add-account\"/>."
-msgstr ""
-"Vairums Jabber kontu pieprasīs tikai lietotāja ID un paroli lai pieslēgtos. "
-"Dažiem kontiem, vai atrodoties dažādos tīklos, tev var tikt pieprasīts "
-"ievadīt papildu informāciju <gui>Paplašināti</gui> sadaļā. Parasti tev "
-"nevajadzēs izmantot paplašinātās iespējas, kas minētas zemāk. Vispārīgām "
-"instrukcijām kontu pievienošanā, skaties <link xref=\"add-account\"/>."
-
-#: C/account-jabber.page:39(note/p)
-msgid ""
-"Google Talk is a type of Jabber account. These instructions hold for Google "
-"Talk accounts as well."
-msgstr ""
-"Google Talk ir Jabber tipa konts. Šīs instrukcijas der arī Google Talk "
-"kontiem."
-
-#: C/account-jabber.page:45(item/title)
-#| msgid "Encryption required (TLS/SSL)"
-msgid "<gui>Encryption required (TLS/SSL)</gui>"
-msgstr "<gui>Vajadzīga šifrēšana (TLS/SSL)</gui>"
-
-#: C/account-jabber.page:46(item/title)
-#| msgid "Ignore SSL certificate errors"
-msgid "<gui>Ignore SSL certificate errors</gui>"
-msgstr "<gui>Ignorēt SSL sertifikāta kļūdas</gui>"
-
-#: C/account-jabber.page:47(item/p)
-msgid ""
-"Whenever possible, communication between <app>Empathy</app> and the Jabber "
-"server is encrypted. If encrypted communication is not possible, messages "
-"may be sent unencrypted. Select <gui>Encryption required</gui> to prevent "
-"<app>Empathy</app> from communicating with the Jabber server when encryption "
-"is not possible."
-msgstr ""
-"Kad vien tas ir iespējams, saziņa caur <app>Empathy</app> un Jabber "
-"serveriem ir šifrēta. Ja šifrēta saruna nav iespējama, ziņas var tikt "
-"nosūtītas nešifrētā veidā. Izvēlies <gui>Šifrēšana pieprasīta</gui>, lai "
-"aizliegtu <app>Empathy</app> lietotnei sazināties ar Jabber serveri, kad "
-"šifrēšana nav iespējama."
-
-#: C/account-jabber.page:52(item/p)
-msgid ""
-"Some Jabber servers may encrypt data using invalid certificates, or using "
-"certificates from unknown authorities. If you trust the server you are "
-"connecting to, you can select <gui>Ignore SSL certificate errors</gui> to "
-"allow encrypted communication with invalid certificates."
-msgstr ""
-"Daži Jabber serveri var iešifrēt datus, izmantojot nederīgus sertifikātus, "
-"vai izmantojot sertifikātus no neatpazīstamiem veidotājiem. Ja tu uzticies "
-"serverim, kuram pieslēdzies, vari izvēlēties <gui>Ignorēt SSL sertifikāta "
-"kļūdas</gui>, lai atļautu iešifrētu saziņu, izmantojot nederīgus "
-"sertifikātus."
-
-#: C/account-jabber.page:59(item/title)
-msgid "<gui>Resource</gui>"
-msgstr "<gui>Resurss</gui>"
-
-#: C/account-jabber.page:60(item/title)
-msgid "<gui>Priority</gui>"
-msgstr "<gui>Prioritāte</gui>"
-
-#: C/account-jabber.page:61(item/p)
-msgid ""
-"If you have multiple applications (for instance, on separate computers) "
-"connected to your account at the same time, you can set a resource to "
-"uniquely identify each one. By default, <app>Empathy</app> will use "
-"<input>Telepathy</input> as the resource."
-msgstr ""
-"Ja ar tavu kontu ir savienojušās vairākas lietotnes reizē (piemēram, uz "
-"atsevišķiem datoriem), tu vari iestatīt kādu no resursiem, kurš unikāli "
-"identificēs katru pieslēgto lietotni. Pēc noklusējuma <app>Empathy</app> "
-"izmantos <input>Telepathy</input> kā resursu."
-
-#: C/account-jabber.page:65(item/p)
-msgid ""
-"You can set the priority to specify which application should receive "
-"incoming messages from your contacts. New messages will be sent to the "
-"application with the highest priority."
-msgstr ""
-"Tu vari uzstādīt prioritātes, kuras noteiks, kurai lietotnei vajadzētu "
-"saņemt ziņas no kontaktiem. Jaunas ziņas tiks nosūtītas uz lietotni ar "
-"augstāko uzstādīto prioritāti."
-
-#: C/account-jabber.page:70(item/title)
-#| msgid "Override server settings"
-msgid "<gui>Override server settings</gui>"
-msgstr "<gui>Aizstāt servera iestatījumus</gui>"
-
-#: C/account-jabber.page:71(item/p)
-msgid ""
-"<app>Empathy</app> will use default settings to connect to the Jabber server "
-"based on your login ID. For some Jabber servers, you will need to enter "
-"custom server settings manually. These settings should be provided for you "
-"by your Jabber provider."
-msgstr ""
-"<app>Empathy</app> izmantos noklusētos iestatījumus, lai savienotos ar "
-"Jabber serveri, balstītus uz tavu lietotāja ID. Dažiem Jabber serveriem, "
-"serveru iestatījumus tev vajadzēs ievadīt pašam. Ar šiem iestatījumiem tevi "
-"vajadzētu nodrošināt tavam Jabber pakalpojumu sniedzējam."
-
-#: C/accounts-window.page:11(info/desc)
-msgid "Add, modify, and delete accounts."
-msgstr "Pievieno, modificē un dzēs kontus."
-
-#: C/accounts-window.page:33(page/title)
-msgid "Accounts Window"
-msgstr "Kontu logs"
-
-#: C/accounts-window.page:35(page/p)
-msgid ""
-"The <gui>Accounts</gui> window allows you to add, modify, and delete "
-"accounts."
-msgstr "<gui>Kontu</gui> logs ļauj pievienot, modificēt un izdzēst kontus."
-
-#: C/accounts-window.page:43(section/title)
-msgid "Account Details"
-msgstr "Konta informācija"
-
-#: C/accounts-window.page:44(section/p)
-msgid ""
-"For most types of accounts, you can simply enter a login ID and a password. "
-"Certain accounts or account types, however, may require additional "
-"information."
-msgstr ""
-"Vairumam kontu tipu, tu vari vienkārši ievadīt lietotāja ID un paroli. "
-"Savukārt daži konti vai kontu tipi var pieprasīt papildu informāciju."
-
-#: C/add-account.page:9(info/desc)
-msgid "Add a new account to <app>Empathy</app>."
-msgstr "Pievienot jaunu kontu <app>Empathy</app> lietotnei."
-
-#: C/add-account.page:40(page/title)
-msgid "Add a new account"
-msgstr "Pievienot jaunu kontu"
-
-#: C/add-account.page:42(page/p)
-msgid ""
-"You can add instant messaging accounts from any supported service to "
-"communicate with all of your contacts in <app>Empathy</app>. For some "
-"account providers, these steps will also allow you to register for a new "
-"account. For more details, see <link xref=\"create-account\"/>."
-msgstr ""
-"Tu vari pievienot TZ kontus no jebkura atbalstītā servisa, lai sazinātos ar "
-"visiem saviem kontaktiem <app>Empathy</app> lietotne. Dažiem kontu "
-"sniedzējiem šie soļi ļaus piereģistrēt jaunu kontu. Plašākai informācijai, "
-"lasi <link xref=\"create-account\"/>."
-
-#: C/add-account.page:49(item/p) C/disable-account.page:49(item/p)
-#: C/irc-nick-password.page:50(item/p) C/remove-account.page:43(item/p)
-#| msgid ""
-#| "From the <gui>Contact List</gui> window, choose <guiseq><gui>Edit</"
-#| "gui><gui>Accounts</gui></guiseq>, or press <key>F4</key>."
-msgid ""
-"From the <gui>Contact List</gui> window, choose <guiseq><gui>Edit</gui> "
-"<gui>Accounts</gui></guiseq>, or press <key>F4</key>."
-msgstr ""
-"<gui>Kontaktu saraksta</gui> logā izvēlies <guiseq><gui>Rediģēt "
-"</gui><gui>Konti</gui></guiseq>, vai nospied <key>F4</key>."
-
-#: C/add-account.page:53(item/p)
-msgid "Click <gui style=\"button\">+</gui>."
-msgstr "Spied <gui style=\"button\">+</gui>."
-
-#: C/add-account.page:58(item/p)
-msgid ""
-"From the <gui>Protocol</gui> drop-down list, select the type of account you "
-"wish to add."
-msgstr ""
-"<gui>Protokola</gui> sarakstā, izvēlies konta tipu, kuru vēlies pievienot."
-
-#: C/add-account.page:62(item/p)
-msgid ""
-"If you do not already have a registered account, select <gui>Create a new "
-"account on the server</gui>. This feature is not available for all account "
-"types, and may not work with some account providers. See <link xref=\"create-"
-"account\"/> for more information."
-msgstr ""
-"Ja tev vēl nav izveidots konts, izvēlies <gui>Izveidot jaunu kontu uz šī "
-"servera</gui>. Šī iespēja nav pieejama visiem kontu tipiem un var "
-"nedarboties ar dažiem kontu sniedzējiem. Plašākai informācijai, lasi <link "
-"xref=\"create-account\"/>."
-
-#: C/add-account.page:69(item/p)
-msgid ""
-"Enter the required information. For most accounts, you will only need a "
-"login ID and a password. Some accounts may require additional information. "
-"See <link xref=\"accounts-window#details\"/>for more information."
-msgstr ""
-"Ievadi vajadzīgo informāciju. Vairumam kontu vajag norādīt tikai lietotāja "
-"ID un paroli. Dažiem kontiem vajag norādīt papildu informāciju. Skati <link "
-"xref=\"accounts-window#details\"/>, lai uzzinātu vairāk."
-
-#: C/add-account.page:74(item/p) C/import-account.page:61(item/p)
-#: C/irc-nick-password.page:63(item/p)
-msgid "Click <gui style=\"button\">Apply</gui>."
-msgstr "Spied <gui style=\"button\">Pielietot</gui>."
-
-#: C/add-account.page:81(note/p)
-msgid ""
-"To change the name that identifies the account in the <gui>Accounts</gui> "
-"window, select the account from the list on the left and either click on the "
-"name or press the space bar. Edit the account name and press <key>Enter</"
-"key> when you’re finished."
-msgstr ""
-"Lai nomainītu vārdu, kurš identificē kontu, <gui>Kontu</gui> logā, izvēlies "
-"kontu no saraksta kreisajā pusē un vai nu nospied uz vārda, vai nospied "
-"atstarpes taustiņu. Rediģē konta vārdu un spied <key>Enter</key>, kad esi "
-"pabeidzis."
-
-#: C/add-contact.page:9(info/desc)
-msgid "Add someone to the contact list."
-msgstr "Pievieno kādu kontaktu sarakstam."
-
-#: C/add-contact.page:18(credit/name) C/change-status.page:24(credit/name)
-#: C/prob-conn-acctdisabled.page:15(credit/name)
-#: C/prob-conn-auth.page:17(credit/name)
-#: C/prob-conn-neterror.page:15(credit/name) C/prob-conn.page:14(credit/name)
-#: C/send-file.page:17(credit/name) C/send-message.page:17(credit/name)
-msgid "Phil Bull"
-msgstr "Phil Bull"
-
-#: C/add-contact.page:33(page/title)
-msgid "Add someone to your list of contacts"
-msgstr "Pievienot7 kādu savam kontaktu sarakstam"
-
-#: C/add-contact.page:37(item/p)
-msgid "Choose <guiseq><gui>Chat</gui><gui>Add Contact</gui></guiseq>."
-msgstr ""
-"Izvēlies <guiseq><gui>Tērzēšana</gui><gui>Pievienot kontaktu</gui></guiseq>."
-
-#: C/add-contact.page:40(item/p)
-msgid ""
-"From the <gui>Account</gui> drop-down list, select the account you wish to "
-"use to connect to your contact. Your contact will need to be using the same "
-"service as the account you select."
-msgstr ""
-"<gui>Kontu</gui> sarakstā izvēlies kontu, kuru izmantosi, lai savienotos ar "
-"savu kontaktu. Tavam kontaktam vajadzēs izmantot to pašu servisu, kuru "
-"izmanto tu."
-
-#: C/add-contact.page:45(item/p)
-msgid ""
-"In the <gui>Identifier</gui> field, enter your contact’s login ID, username, "
-"screen name, or other appropriate identifier for the service type."
-msgstr ""
-"<gui>Identifikators</gui> lauciņā, ievadi sava kontakta lietotāja ID, "
-"lietotājvārdu, ekrāna vārdu vai kādu citu servisam pieejamu identifikatoru."
-
-#: C/add-contact.page:49(item/p)
-msgid ""
-"In the <gui>Alias</gui> field, type your contact’s name as you would like it "
-"to appear in your contact list."
-msgstr ""
-"<gui>Pseidonīms</gui> lauciņā, ieraksti to vārdu, ar kuru vēlies attēlot "
-"kontaktu savā sarakstā."
-
-#: C/add-contact.page:53(item/p)
-msgid "Click <gui>Add</gui> to add the person to your list of contacts."
-msgstr ""
-"Spied uz <gui>Pievienot</gui>, lai pievienotu personu kontaktu sarakstam."
-
-#: C/add-contact.page:61(note/p)
-msgid ""
-"To add a new person to your list of contacts, you need to be connected to "
-"the Internet and to your account."
-msgstr ""
-"Lai pievienotu jaunu personu kontaktu sarakstam, ir jābūt savienotam ar "
-"internetu un savu kontu."
-
-#. This is a reference to an external file such as an image or video. When
-#. the file changes, the md5 hash will change to let you know you need to
-#. update your localized copy. The msgstr is not used at all. Set it to
-#. whatever you like once you have updated your copy of the file.
-#.
-#. This is a reference to an external file such as an image or video. When
-#. the file changes, the md5 hash will change to let you know you need to
-#. update your localized copy. The msgstr is not used at all. Set it to
-#. whatever you like once you have updated your copy of the file.
-#.
-#. This is a reference to an external file such as an image or video. When
-#. the file changes, the md5 hash will change to let you know you need to
-#. update your localized copy. The msgstr is not used at all. Set it to
-#. whatever you like once you have updated your copy of the file.
-#: C/audio-call.page:36(media) C/audio-video.page:70(media)
-#: C/video-call.page:39(media)
-#| msgid ""
-#| "@@image: 'figures/camera-web.png'; md5=8166b4372f25b78cbf5a64fe2eac2ce5"
-msgctxt "_"
-msgid ""
-"external ref='figures/camera-web.png' md5='8166b4372f25b78cbf5a64fe2eac2ce5'"
-msgstr ""
-"external ref='figures/camera-web.png' md5='8166b4372f25b78cbf5a64fe2eac2ce5'"
-
-#: C/audio-call.page:9(info/desc)
-msgid "Call your contacts over the Internet."
-msgstr "Zvani saviem kontaktiem caur internetu."
-
-#: C/audio-call.page:27(page/title)
-msgid "Start an audio conversation"
-msgstr "Sākt audio saziņu"
-
-#: C/audio-call.page:29(page/p)
-msgid ""
-"You can call your contacts and have an audio conversation with them. This "
-"features only works with certain types of accounts, and it requires the "
-"other person to have an application that supports audio calls."
-msgstr ""
-"Tu vari zvanīt saviem kontaktiem un uzturēt audio saziņu ar tiem. Šī iespēja "
-"strādā tikai ar noteiktiem kontu tipiem un pieprasa, lai tavam sarunas "
-"biedram arī būtu lietotne, kas atbalsta audio zvanus."
-
-#: C/audio-call.page:34(item/p)
-msgid ""
-"From the <gui>Contact List</gui> window, click the <media type=\"image\" "
-"mime=\"image/png\" src=\"figures/camera-web.png\">video call</media> icon "
-"next to the name of the contact you wish to call and choose <gui style="
-"\"menuitem\">Audio Call</gui>."
-msgstr ""
-"<gui>Kontaktu saraksta</gui> logā nospied uz <media type=\"image\" mime="
-"\"image/png\" src=\"figures/camera-web.png\">video zvans</media> ikonas pie "
-"kontakta vārda, ar kuru tu vēlies sazināties, un izvēlies <gui style="
-"\"menuitem\">Audio zvans</gui>."
-
-#: C/audio-call.page:42(item/p) C/video-call.page:44(item/p)
-msgid ""
-"A new window will open. When the connection is established, you will see "
-"<gui>Connected</gui> at the bottom of the window, along with the total "
-"conversation time."
-msgstr ""
-"Atvērsies jauns logs. Kad savienojums būs nodrošināts, būs redzams uzraksts "
-"<gui>Savienots</gui>loga apakšā, kopā ar sarunas ilgumu."
-
-#: C/audio-call.page:48(item/p) C/video-call.page:49(item/p)
-msgid "To end the conversation, click on <gui style=\"button\">Hang up</gui>."
-msgstr ""
-"Lai sarunu beigtu, spied uz <gui style=\"button\">Nolikt klausuli</gui>."
-
-#: C/audio-call.page:55(note/p)
-#| msgid ""
-#| "To turn an audio conversation into a video conversation, choose "
-#| "<guiseq><gui style=\"menu\">Video</gui><gui style=\"menuitem\">Video On</"
-#| "gui></guiseq>."
-msgid ""
-"To turn an audio conversation into a video conversation, choose <guiseq><gui "
-"style=\"menu\">Video</gui> <gui style=\"menuitem\">Video On</gui></guiseq>."
-msgstr ""
-"Lai audio zvanu pārvērstu video zvanā, izvēlies <guiseq><gui style=\"menu"
-"\">Video</gui><gui style=\"menuitem\">Ieslēgt video</gui></guiseq>."
-
-#: C/audio-call.page:63(section/title)
-msgid "Start an audio conversation with a meta-contact"
-msgstr "Sākt audio saziņu ar meta-kontaktu"
-
-#: C/audio-call.page:66(item/p) C/send-message.page:53(item/p)
-#: C/video-call.page:64(item/p)
-msgid ""
-"From the <gui>Contact List</gui> window, right-click on the meta-contact."
-msgstr ""
-"No <gui>Kontaktu saraksts</gui> loga, ar labo peles klikšķi spied uz meta-"
-"kontakta."
-
-#: C/audio-call.page:71(item/p)
-msgid ""
-"Select the contact you want to have the conversation, and from the menu "
-"select <gui style=\"menuitem\">Audio Call</gui>."
-msgstr ""
-"Izvēlies kontaktu, ar kuru vēlies sazināties un no izvēlnes paņem <gui style="
-"\"menuitem\">Audio zvans</gui>."
-
-#: C/audio-call.page:78(note/p) C/send-message.page:65(note/p)
-#: C/video-call.page:76(note/p)
-msgid ""
-"To recognize if a contact is a <em>meta-contact</em>, move your mouse on a "
-"contact in the <gui>Contact List</gui> window, and stop over it for a "
-"second: a small pop-up message will appear showing the number of the "
-"contacts that form the meta-contact."
-msgstr ""
-"Lai atpazītu vai konkrēts kontakts ir meta-kontakts, tad <gui>Kontaktu "
-"saraksts</gui> logā pavirzi pelītes kursoru virs kontakta vārda un atstāj to "
-"tajā vietā uz pāris sekundēm, pēc šīm pāris sekundēm, neliela uzlecoša ziņa "
-"parādīsies un parādīs kontaktu skaitu, kurš veido meta-kontaktu."
-
-#. This is a reference to an external file such as an image or video. When
-#. the file changes, the md5 hash will change to let you know you need to
-#. update your localized copy. The msgstr is not used at all. Set it to
-#. whatever you like once you have updated your copy of the file.
-#: C/audio-video.page:58(media)
-#| msgid ""
-#| "@@image: 'figures/audio-input-microphone.png'; "
-#| "md5=8d89026b66a263a3bc5b1f0665948567"
-msgctxt "_"
-msgid ""
-"external ref='figures/audio-input-microphone.png' "
-"md5='8d89026b66a263a3bc5b1f0665948567'"
-msgstr ""
-"external ref='figures/audio-input-microphone.png' "
-"md5='8d89026b66a263a3bc5b1f0665948567'"
-
-#: C/audio-video.page:8(info/desc)
-msgid ""
-"Information on when it is possible to have an audio or video conversation."
-msgstr "Informācija par to, kad ir iespējama audio vai video saziņa."
-
-#: C/audio-video.page:32(page/title)
-msgid "Audio and video support"
-msgstr "Audio un video atbalsts"
-
-#: C/audio-video.page:34(page/p)
-msgid ""
-"You can only have audio and video conversation with contacts who are using "
-"an application which also supports this feature. When your contacts support "
-"audio or video conversations, you will see the following icons next to their "
-"names in the contact list:"
-msgstr ""
-"Audio on video sarunas ir iespējamas tikai starp kontaktiem, kuri izmanto "
-"lietotni, kura atbalsta šo iespēju. Ja tavi kontakti ir pieejami audio vai "
-"video zvanam, pie viņu vārdiem kontaktu sarakstā jūs redzēsiet sekojošas "
-"ikonas:"
-
-#: C/audio-video.page:43(td/p)
-msgid "Icon"
-msgstr "Ikona"
-
-#: C/audio-video.page:48(td/p)
-msgid "Description"
-msgstr "Apraksts"
-
-#: C/audio-video.page:57(td/p)
-#| msgid ""
-#| "Click the <media type=\"image\" mime=\"image/png\" src=\"figures/gtk-edit."
-#| "png\">edit</media> icon in the error message."
-msgid ""
-"<media type=\"image\" mime=\"image/png\" src=\"figures/audio-input-"
-"microphone.png\"> Icon for audio conversation </media>"
-msgstr ""
-"<media type=\"image\" mime=\"image/png\" src=\"figures/audio-input-"
-"microphone.png\"> Ikona audio sarunai </media>"
-
-#: C/audio-video.page:64(td/p)
-msgid "The contact is able to have an audio conversation."
-msgstr "Šis kontakts ir pieejams audio sarunai."
-
-#: C/audio-video.page:69(td/p)
-#| msgid ""
-#| "Click the <media type=\"image\" mime=\"image/png\" src=\"figures/gtk-edit."
-#| "png\">edit</media> icon in the error message."
-msgid ""
-"<media type=\"image\" mime=\"image/png\" src=\"figures/camera-web.png\"> "
-"Icon for video conversation </media>"
-msgstr ""
-"<media type=\"image\" mime=\"image/png\" src=\"figures/camera-web.png\"> "
-"Ikona video sarunai </media>"
-
-#: C/audio-video.page:76(td/p)
-msgid "The contact is able to have a video conversation."
-msgstr "Šis kontakts ir pieejams video sarunai."
-
-#: C/audio-video.page:83(note/p)
-msgid ""
-"In order to have an audio conversation, you need to have a sound card that "
-"is supported by your operating system, and a working microphone."
-msgstr ""
-"Lai varētu sazināties caur audio, tev ir vajadzīga skaņas karte, kuru "
-"savukārt atbalsta tava operetētājsistēma, kā arī ir nepieciešams arī "
-"mikrofons."
-
-#: C/audio-video.page:87(note/p)
-msgid ""
-"In order to have a video conversation, you need to have a webcam that is "
-"supported by your operating system, and a working microphone."
-msgstr ""
-"Lai varētu sazināties caur video, tev ir vajadzīga tīmekļa kamera, kuru "
-"atbalsta tava operētājsistēma, kā arī strādājošs mikrofons."
-
-#: C/audio-video.page:95(section/title)
-msgid "Supported Account Types"
-msgstr "Atbalstītie kontu veidi"
-
-#: C/audio-video.page:97(section/p)
-msgid ""
-"You can only have audio and video conversations using accounts on certain "
-"supported services. The following table lists whether audio and video is "
-"supported for each type of account."
-msgstr ""
-"Video un audio sarunas ir pieejamas, izmantojot kontus, kuri ir piesaistīti "
-"konkrētam, atbalstītam servisam. Sekojošā tabula norāda vai audio un video "
-"saziņa ir pieejama katram kontu tipam: "
-
-#: C/audio-video.page:102(note/p)
-msgid ""
-"Account types are provided by plugins. Your system may not have all of the "
-"following types available, or it may have types not listed here. Updated "
-"plugins may make audio or video conversations possible on account types that "
-"are listed as unsupported here."
-msgstr ""
-"Kontu tipus nodrošina spraudņi. Tavai sistēmai varētu nebūt pieejami visi "
-"šeit uzskaitītie tipi, vai arī tev var būt tādi tipi, kuri nav uzskaitīti "
-"šeit. Atjaunināti spraudņi var padarīt audi un video saziņu iespējamu starp "
-"kontu tipiem, kuri ir uzskaitīti kā neatbalstīti."
-
-#: C/audio-video.page:128(td/p)
-msgid "Service"
-msgstr "Serviss"
-
-#: C/audio-video.page:129(td/p)
-msgid "Audio"
-msgstr "Audio"
-
-#: C/audio-video.page:130(td/p)
-msgid "Video"
-msgstr "Video "
-
-#: C/audio-video.page:135(td/p)
-msgid "AIM"
-msgstr "AIM"
-
-#: C/audio-video.page:136(td/p) C/audio-video.page:137(td/p)
-#: C/audio-video.page:141(td/p) C/audio-video.page:142(td/p)
-#: C/audio-video.page:146(td/p) C/audio-video.page:147(td/p)
-#: C/audio-video.page:156(td/p) C/audio-video.page:157(td/p)
-#: C/audio-video.page:161(td/p) C/audio-video.page:162(td/p)
-#: C/audio-video.page:166(td/p) C/audio-video.page:167(td/p)
-#: C/audio-video.page:181(td/p) C/audio-video.page:182(td/p)
-#: C/audio-video.page:186(td/p) C/audio-video.page:187(td/p)
-#: C/audio-video.page:191(td/p) C/audio-video.page:192(td/p)
-#: C/audio-video.page:196(td/p) C/audio-video.page:197(td/p)
-#: C/audio-video.page:201(td/p) C/audio-video.page:202(td/p)
-#: C/audio-video.page:211(td/p) C/audio-video.page:212(td/p)
-#: C/audio-video.page:216(td/p) C/audio-video.page:217(td/p)
-msgid "No"
-msgstr "Nē"
-
-#: C/audio-video.page:140(td/p)
-msgid "Facebook Chat"
-msgstr "Facebook tērzēšana"
-
-#: C/audio-video.page:145(td/p)
-msgid "gadugadu"
-msgstr "gadugadu"
-
-#: C/audio-video.page:150(td/p)
-msgid "Google Talk"
-msgstr "Google Talk"
-
-#: C/audio-video.page:151(td/p) C/audio-video.page:152(td/p)
-#: C/audio-video.page:171(td/p) C/audio-video.page:172(td/p)
-#: C/audio-video.page:176(td/p) C/audio-video.page:177(td/p)
-#: C/audio-video.page:206(td/p) C/audio-video.page:207(td/p)
-msgid "Yes"
-msgstr "Jā"
-
-#: C/audio-video.page:155(td/p)
-msgid "Groupwise"
-msgstr "Groupwise"
-
-#: C/audio-video.page:160(td/p)
-msgid "ICQ"
-msgstr "ICQ"
-
-#: C/audio-video.page:165(td/p) C/create-account.page:107(section/title)
-msgid "IRC"
-msgstr "IRC"
-
-#: C/audio-video.page:170(td/p) C/create-account.page:60(section/title)
-msgid "Jabber"
-msgstr "Jabber"
-
-#: C/audio-video.page:175(td/p)
-msgid "MSN"
-msgstr "MSN"
-
-#: C/audio-video.page:180(td/p)
-msgid "myspace"
-msgstr "myspace"
-
-#: C/audio-video.page:185(td/p)
-msgid "qq"
-msgstr "qq"
-
-#: C/audio-video.page:190(td/p) C/create-account.page:78(section/title)
-msgid "People Nearby"
-msgstr "People Nearby (cilvēki tuvumā)"
-
-#: C/audio-video.page:195(td/p)
-msgid "sametime"
-msgstr "sametime"
-
-#: C/audio-video.page:200(td/p)
-msgid "silc"
-msgstr "silc"
-
-#: C/audio-video.page:205(td/p) C/create-account.page:89(section/title)
-msgid "SIP"
-msgstr "SIP"
-
-#: C/audio-video.page:210(td/p)
-msgid "Yahoo!"
-msgstr "Yahoo!"
-
-#: C/audio-video.page:215(td/p)
-msgid "zephyr"
-msgstr "zephyr"
-
-#: C/change-status.page:9(info/desc)
-msgid "Change your status to advertise your availability to your contacts."
-msgstr "Maini savu statusu, lai paziņotu savu pieejamību kontaktiem."
-
-#: C/change-status.page:39(page/title)
-msgid "Change your status"
-msgstr "Mainīt savu statusu"
-
-#: C/change-status.page:41(page/p)
-msgid ""
-"You can set your status to indicate your availability to your contacts. "
-"<app>Empathy</app> allows you to select from a list of defined statuses."
-msgstr ""
-"Tu vari iestatīt savu statusu, lai paziņotu par savu pieejamību kontaktiem. "
-"<app>Empathy</app> ļauj tev izvēlēties kādu statusu no iepriekš sagatavota "
-"saraksta."
-
-#: C/change-status.page:46(item/p)
-msgid ""
-"Click on the drop-down list at the top of the <gui>Contact List</gui> window."
-msgstr "Nospied uz izkrītošā saraksta <gui>Kontaktu saraksta</gui> loga augšā."
-
-#: C/change-status.page:51(item/p)
-msgid "Select a status from the list."
-msgstr "Izvēlies statusu no saraksta."
-
-#: C/change-status.page:57(page/p)
-msgid ""
-"See <link xref=\"status-icons\"/> for a list of the built-in statuses and "
-"what they mean. You can also <link xref=\"set-custom-status\">add custom "
-"status messages</link> to provide more information about your availability "
-"to your contacts."
-msgstr ""
-"Skati <link xref=\"status-icons\"/>, lai uzzinātu vairāk par iebūvētajiem "
-"statusiem un ko tie nozīmē. Tu vari arī <link xref=\"set-custom-status"
-"\">pievienot statusa ziņojumus</link>, lai saviem kontaktiem nodotu vairāk "
-"informācijas par savu pieejamību."
-
-#: C/change-status.page:63(note/p)
-msgid ""
-"If you do not use your computer for a while, or if the screensaver is on, "
-"the status will be automatically set to Away."
-msgstr ""
-"Ja kādu laiku neizmanto datoru, vai ja ir ieslēgts ekrānsaudzētājs, tavs "
-"statuss automātiski nomainīsies uz \"Prom\"."
-
-#: C/create-account.page:9(info/desc)
-msgid "Register for an account with one of the supported messaging services."
-msgstr "Reģistrē kontu izmantojot vienu no atbalstītajiem ziņojumu servisiem. "
-
-#: C/create-account.page:34(page/title)
-msgid "Register for a new account"
-msgstr "Reģistrēt jaunu kontu"
-
-#: C/create-account.page:36(page/p)
-msgid ""
-"Most account types require you to create an account with a account provider "
-"before you can connect using instant messaging applications like "
-"<app>Empathy</app>. With some account providers, you can use <app>Empathy</"
-"app> to register for a new account, using the same steps as you would to "
-"<link xref=\"add-account\">add an account</link>."
-msgstr ""
-"Vairums kontu tipu pieprasa tos reģistrēt pie konta sniedzēja, pirms tu tos "
-"vari sākt izmantot TZ lietotnēs, kā <app>Empathy</app>. Pie dažiem kontu "
-"sniedzējiem vari izmantot <app>Empathy</app> lietotni, lai reģistrētu jaunu "
-"kontu, izmantojot tos pašus soļus, kurus tu izmantotu, lai <link xref=\"add-"
-"account\">pievienotu kontu</link>."
-
-#: C/create-account.page:42(page/p)
-msgid ""
-"This page provides information on creating a new account for various types "
-"of accounts. Your account provider should give you a login ID and a "
-"password, as well as any additional information you need to connect using "
-"<app>Empathy</app>."
-msgstr ""
-"Šī lapa sniedz informāciju par to, kā izveidot jaunu kontu, dažādiem kontu "
-"veidiem. Konta sniedzējam vajadzētu nodrošināt ar konta ID un paroli, kā arī "
-"ar papildus informāciju, kura ir nepieciešama <app>Empathy</app> "
-"izmantošanai."
-
-#: C/create-account.page:47(section/title)
-msgid "Facebook"
-msgstr "Facebook"
-
-#: C/create-account.page:48(section/p)
-msgid ""
-"Facebook is one of the most-used social networks. It allows users to create "
-"their own profile and to communicate with their friends."
-msgstr ""
-"Facebook ir viens no visplašāk izmantotajiem sociālajiem tīkliem. Tas ļauj "
-"lietotājiem izveidot pašiem savu profilu un sazināties ar saviem draugiem."
-
-#: C/create-account.page:52(section/p)
-msgid ""
-"To use Facebook to communicate with your friends, you will need to create a "
-"new account from the website: <link href=\"http://www.facebook.com\">www."
-"facebook.com</link>."
-msgstr ""
-"Lai izmantotu Facebook, tev būs jāizveido jauns konts viņu mājaslapā: <link "
-"href=\"http://www.facebook.com\">www.facebook.com</link>."
-
-#: C/create-account.page:62(section/p)
-msgid ""
-"Jabber is an open instant messaging system. Like email, Jabber allows you to "
-"choose your account provider and communicate with all other Jabber users, "
-"regardless of their account provider."
-msgstr ""
-"Jabber ir atvērta tiešo ziņojumu sistēma. Tā pat kā epasts, Jabber ļauj tev "
-"izvēlēties tavu konta sniedzēju un sazināties ar citiem Jabber lietotājiem, "
-"neatkarīgi no viņu konta sniedzēja."
-
-#: C/create-account.page:66(section/p)
-msgid ""
-"You will need to create a new account with a Jabber provider. There are many "
-"free providers; one popular provider is <link href=\"http://register.jabber."
-"org/\">Jabber.org</link>."
-msgstr ""
-"Tev vajadzēs izveidot jaunu profilu, izmantojot Jabber pakalpojumu "
-"sniedzēju. Ir vairāki bezmaksas pakalpojumu sniedzēji; viens no "
-"populārākajiem ir <link href=\"http://register.jabber.org/\">Jabber.org</"
-"link>."
-
-#: C/create-account.page:71(note/p)
-msgid ""
-"If you use Google Mail or Google Talk, you already have a Jabber account. "
-"Google Talk is a Jabber service. Simply use your Google Mail address and "
-"password in <app>Empathy</app> to connect."
-msgstr ""
-"Ja izmanto Google Mail vai Google Talk, tev jau ir Jabber konts! Google Talk "
-"ir Jabber pakalpojums. Vienkārši izmanto savu Google Mail adresi un paroli "
-"<app>Empathy</app> lietotnē, lai savienotos."
-
-#: C/create-account.page:80(section/p)
-msgid ""
-"You do not need to create an account with a service provider to use this "
-"feature. This service works whenever you are connected to a local network, "
-"such as a wireless hotspot. It automatically finds all other users on the "
-"network who are also using this service."
-msgstr ""
-"Tev nevajag izveidot kontu ar pakalpojumu sniedzēju, lai izmantotu šo "
-"pakalpojumu. Šis pakalpojums strādā jebkad, kad vien tu esi pieslēdzies "
-"lokālajam tīklam, piemēram bezvadu pieejas punktam (WiFi). Tas automātiski "
-"atradīs visus lietotājus tajā pašā tīklā, kuri izmanto šo servisu."
-
-#: C/create-account.page:85(section/p)
-msgid "For more information, see <link xref=\"salut-protocol\"/>."
-msgstr "Lai uzzinātu vairāk, skaties <link xref=\"salut-protocol\"/>."
-
-#: C/create-account.page:91(section/p)
-msgid ""
-"SIP is an open system which allows users to have audio and video "
-"conversations over the Internet. You need to create an account with a SIP "
-"provider. You can communicate with all other SIP users, regardless of which "
-"SIP provider they use."
-msgstr ""
-"SIP ir atvērta sistēma, kura ļauj lietotājiem sazināties audio un video "
-"veidā caur internetu. Tam ir jāizveido konts, izmantojot SIP pakalpojumu "
-"sniedzēju. Tu vari sazināties ar jebkuru SIP lietotāju, neatkarīgi no tā, "
-"kādu SIP pakalpojumu sniedzēju viņš/-a izmanto."
-
-#: C/create-account.page:97(note/p)
-msgid ""
-"Due to technical differences, the free <link href=\"https://www.ekiga.net/"
-"index.php?page=register\">Ekiga.net</link> service does not currently work "
-"with <app>Empathy</app>."
-msgstr ""
-"Sakarā ar tehniskām atšķirībām, bezmaksas pieejamais <link href=\"https://"
-"www.ekiga.net/index.php?page=register\">Ekiga.net</link> pakalpojums nav "
-"savienojams ar <app>Empathy</app>."
-
-#: C/create-account.page:102(section/p)
-msgid ""
-"Some SIP providers allow you to call normal phones from your computer. "
-"Generally, you will need to subscribe to a paid service for this feature."
-msgstr ""
-"Daži SIP pakalpojumu sniedzēji ļauj tev zvanīt uz parastajiem telefoniem no "
-"tava datora. Lai šo pakalpojumu izmantotu, tev vajadzēs lietot maksas "
-"pakalpojumu."
-
-#: C/create-account.page:109(section/p)
-msgid ""
-"You do not need to register for an account to use IRC. Although you specify "
-"a nickname when you add an IRC account to <app>Empathy</app>, this nickname "
-"is only established each time you connect. If another user is using the "
-"nickname, you will need to choose a new nickname."
-msgstr ""
-"Tev nevajag reģistrēt kontu, lai izmantotu IRC. Tomēr tu vari norādīt sev "
-"tīkamu lietotājvārdu, kad pievieno IRC kontu <app>Empathy</app> lietotnei. "
-"Šis lietotājvārds tiek izveidots tikai katru reizi, kamēr tu esi "
-"pieslēdzies. Ja kāds cits jau izmanto tavu lietotājvārdu, tev nāksies "
-"izvēlēties kādu citu."
-
-#: C/create-account.page:114(section/p)
-msgid ""
-"Some IRC networks use a service called NickServ to allow users to protect "
-"their nicknames. See <link xref=\"irc-nick-password\"/> for more information."
-msgstr ""
-"Daži IRC kanāli izmanto pakalpojumu, sauktu par NickServ, lai ļautu "
-"lietotājiem aizsargāt viņu lietotājvārdus. Lasi <link xref=\"irc-nick-"
-"password\"/>, lai uzzinātu vairāk."
-
-#: C/create-account.page:117(section/p)
-msgid ""
-"Some IRC servers are password protected. You will need to know the password "
-"to connect to these servers. Generally, these are private IRC networks."
-msgstr ""
-"Daži IRC serveri ir aizsargāti ar paroli. Lai pieslēgtos šiem serveriem, tev "
-"vajadzēs paroli. Pārsvarā šādi serveri ir privātie IRC tīkli."
-
-#: C/create-account.page:122(section/title)
-msgid "Proprietary Services"
-msgstr "Īpašnieka servisi"
-
-#: C/create-account.page:124(section/p)
-msgid ""
-"There are many proprietary instant messaging services that have been "
-"developed by different companies or organizations. <app>Empathy</app> allows "
-"you to connect to an existing account for most popular services. To create a "
-"new account with one of these services, you will need to visit the service’s "
-"web site and agree to its terms of use."
-msgstr ""
-"Pastāv vairāki īpašnieka TZ servisi kurus ir izstrādājušas dažādas "
-"kompānijas vai organizācijas. <app>Empathy</app> ļauj tev savienoties ar jau "
-"esošu kontu vairumam populārāko servisu. Lai izveidotu jaunu kontu ar kādu "
-"no šiem servisiem, tev vajadzēs apmeklēt attiecīgā servisa mājaslapu un "
-"piekrist tās lietošanas noteikumiem."
-
-#: C/create-account.page:132(item/p)
-msgid "<link href=\"http://dashboard.aim.com/aim\">AIM</link>"
-msgstr "<link href=\"http://dashboard.aim.com/aim\">AIM</link>"
-
-#: C/create-account.page:137(item/p)
-msgid "<link href=\"https://www.icq.com/register/\">ICQ</link>"
-msgstr "<link href=\"https://www.icq.com/register/\">ICQ</link>"
-
-#: C/create-account.page:142(item/p)
-msgid "<link href=\"https://accountservices.passport.net\">MSN</link>"
-msgstr "<link href=\"https://accountservices.passport.net\">MSN</link>"
-
-#: C/create-account.page:147(item/p)
-msgid "<link href=\"https://login.yahoo.com/config/login\">Yahoo!</link>"
-msgstr "<link href=\"https://login.yahoo.com/config/login\">Yahoo!</link>"
-
-#: C/disable-account.page:9(info/desc)
-msgid "Prevent <app>Empathy</app> from automatically logging in to an account."
-msgstr "Aizliedz <app>Empathy</app> lietotnei automātiski ieiet kontā."
-
-#: C/disable-account.page:40(page/title)
-msgid "Disable an account"
-msgstr "Deaktivēt kontu"
-
-#: C/disable-account.page:42(page/p)
-msgid ""
-"You can disable an account to prevent <app>Empathy</app> from logging in to "
-"it without removing the account entirely. You may wish to disable and re-"
-"enable an account if you only want to be logged in to the account at certain "
-"times, but you still want to use <app>Empathy</app> for other accounts."
-msgstr ""
-"Tu vari deaktivēt kontu, lai liegtu <app>Empathy</app> lietotnei ar to "
-"ierakstīties, neizdzēšot kontu pavisam. Tu vari deaktivēt un atkal aktivēt "
-"kontu, ja tajā vēlies ieiet tikai noteiktos brīžos, bet vēlies izmantot "
-"<app>Empathy</app> citiem kontiem."
-
-#: C/disable-account.page:53(item/p)
-msgid ""
-"Select the account you wish to disable from the accounts list on the left "
-"side of the window."
-msgstr ""
-"Izvēlies kontu, kuru vēlies atslēgt, no kontu saraksta kreisajā loga pusē."
-
-#: C/disable-account.page:57(item/p)
-msgid "On the right side of the window, switch it off."
-msgstr "Loga labajā pusē izslēdz ārā."
-
-#: C/disable-account.page:62(page/p)
-msgid "To re-enable the account, switch it on."
-msgstr "Lai atkārtoti aktivētu kontu, ieslēdz."
-
-#: C/favorite-rooms.page:10(info/desc)
-msgid "Set, join and manage favorite rooms."
-msgstr "Uzstādi, pievienojies un pārvaldi iecienītās istabas."
-
-#: C/favorite-rooms.page:29(page/title)
-msgid "Favorite rooms"
-msgstr "Iecienītās istabas"
-
-#: C/favorite-rooms.page:32(section/title)
-msgid "Set a room as a favorite"
-msgstr "Uzstādi istabu kā iecienīto"
-
-#: C/favorite-rooms.page:35(item/p)
-msgid "Join a room."
-msgstr "Pievienojies istabai."
-
-#: C/favorite-rooms.page:40(item/p)
-msgid ""
-"See <link xref=\"irc-join-room\"/> for more information on how to join an "
-"IRC room."
-msgstr ""
-"Skaties <link xref=\"irc-join-room\"/>, lai iegūtu vairāk informācijas par "
-"to, kā piekļūt IRC istabām."
-
-#: C/favorite-rooms.page:46(item/p)
-msgid ""
-"See <link xref=\"group-conversations\"/> for more information on how to "
-"start or join a group conversation."
-msgstr ""
-"Skaties <link xref=\"group-conversations\"/>, lai iegūtu vairāk informācijas "
-"par to, kā sākt vai pievienoties grupu sarunām."
-
-#: C/favorite-rooms.page:54(item/p)
-msgid ""
-"From the conversation window, choose <guiseq><gui>Conversation</"
-"gui><gui>Favorite Chat Room</gui></guiseq>."
-msgstr ""
-"No sarunas loga izvēlies <guiseq><gui>Saruna</gui><gui>Iecienītā tērzēšanas "
-"istaba</gui></guiseq>"
-
-#: C/favorite-rooms.page:63(section/title)
-msgid "Join favorite rooms"
-msgstr "Pievienoties iecienītajām istabām."
-
-#: C/favorite-rooms.page:66(item/p) C/send-file.page:40(item/p)
-msgid "From the <gui>Contact List</gui> window, perform one of the following:"
-msgstr "<gui>Kontaktu saraksta</gui> logā izpildi vienu no sekojošajā:"
-
-#: C/favorite-rooms.page:71(item/p)
-msgid "Press <key>F5</key>."
-msgstr "Nospied <key>F5</key>."
-
-#: C/favorite-rooms.page:76(item/p)
-msgid ""
-"Choose <guiseq><gui>Room</gui><gui>Join Favorites</gui></guiseq>, to join "
-"all your favorite rooms."
-msgstr ""
-"Izvēlies <guiseq><gui>Istaba</gui><gui>Pievienoties iecienītajām</gui></"
-"guiseq>, lai pievienotos visām iecienītajām istabām."
-
-#: C/favorite-rooms.page:82(item/p)
-msgid "Choose <gui>Room</gui>, and select the favorite room you want to join."
-msgstr ""
-"Izvēlies <gui>Istaba</gui>, un izvēlies iecienīto istabu, kurai vēlies "
-"pievienoties."
-
-#: C/favorite-rooms.page:90(note/p)
-msgid ""
-"To join a favorite room, you need to be connected to the Internet and to "
-"your account."
-msgstr ""
-"Lai pievienotos kādai no iecienītajām istabām, tev ir jābūt interneta "
-"savienojumam un savam profilam."
-
-#: C/favorite-rooms.page:98(section/title)
-msgid "Manage favorite rooms"
-msgstr "Pārvaldīt iecienītās istabas"
-
-#: C/favorite-rooms.page:101(item/p)
-msgid ""
-"From the <gui>Contact List</gui> window, choose <guiseq><gui>Room</"
-"gui><gui>Manage Favorites</gui></guiseq>."
-msgstr ""
-"No <gui>Kontaktu saraksta</gui> loga, izvēlies <guiseq><gui>Istaba</"
-"gui><gui>Pārvaldīt iecienītās</gui></guiseq>."
-
-#: C/favorite-rooms.page:107(item/p)
-msgid ""
-"From the <gui>Account</gui> drop-down list, select the account you want to "
-"manage the favorite rooms of."
-msgstr ""
-"No <gui>Konts</gui> saraksta, izvēlies kontu, kura iecienītās istabas vēlies "
-"pārvaldīt."
-
-#: C/favorite-rooms.page:111(item/p)
-msgid "Select <gui>All</gui> to see all you favorite rooms."
-msgstr "Izvēlies <gui>Viss</gui>, lai redzētu visas iecienītās istabas."
-
-#: C/favorite-rooms.page:116(item/p)
-msgid "Select the favorite room you want to manage:"
-msgstr "Izvēlies iecienīto istabu, kuru vēlies pārvaldīt:"
-
-#: C/favorite-rooms.page:121(item/p)
-msgid ""
-"Select the <gui>Auto-Connect</gui> check-box in order to automatically join "
-"that room when you connect to your account."
-msgstr ""
-"Izvēlies <gui>Automātiski savienoties</gui> opciju, lai automātiski "
-"pievienotos šai istabai, kolīdz esi savienojies ar savu kontu."
-
-#: C/favorite-rooms.page:127(item/p)
-msgid "Click on <gui>Remove</gui> to remove the room from your favorites."
-msgstr ""
-"Nospied uz <gui>Izņemt</gui>, lai izņemtu attiecīgo istabu no iecienīto "
-"istabu saraksta."
-
-#: C/favorite-rooms.page:134(item/p)
-msgid "When done, click <gui>Close</gui>."
-msgstr "Kad esi pabeidzis darāmo, spied <gui>Aizvērt</gui>."
-
-#: C/geolocation.page:8(info/desc)
-msgid "Use and understand geolocation in <app>Empathy</app>."
-msgstr ""
-"Izmanto un saproti ģeogrāfisko atrašanās vietu <app>Empathy</app> lietotnē."
-
-#: C/geolocation.page:32(page/title)
-msgid "Geographical position"
-msgstr "Ģeogrāfiskais novietojums"
-
-#: C/geolocation.page:35(section/title)
-msgid "Geolocation"
-msgstr "Ģeografiskā atrašanās vieta"
-
-#: C/geolocation.page:39(section/title)
-msgid "Fix common problems"
-msgstr "Salabot visbiežāk sastopamās problēmas"
-
-#: C/geolocation-not-showing.page:8(info/desc)
-msgid "<app>Empathy</app> does not publish my geographical position."
-msgstr "<app>Empathy</app> nepublicē tavu ģeogrāfisko atrašanās vietu."
-
-#: C/geolocation-not-showing.page:32(page/title)
-msgid "Geographical position not published"
-msgstr "Ģeogrāfiskā atrašanās vieta netiek publicēta"
-
-#: C/geolocation-not-showing.page:34(page/p)
-msgid ""
-"If your contacts cannot see your location, <app>Empathy</app> might not be "
-"able to discover with a good margin of precision your geographical position."
-msgstr ""
-"Ja tavi kontakti neredz tavu atrašanās vietu, <app>Empathy</app>, iespējams, "
-"nav to spējusi noteikt ar labu precizitāti."
-
-#: C/geolocation-not-showing.page:38(page/p)
-msgid ""
-"In this case, your position will not be published, but you are still able to "
-"see the location of your contacts."
-msgstr ""
-"Šajā gadījumā tava atrašanās vieta netiek publicēta, taču tu vēl jo projām "
-"var redzēt savu kontaktu atrašanās vietas."
-
-#: C/geolocation-not-showing.page:42(page/p)
-msgid ""
-"If you want to publish your geographical position, you can try to use an "
-"external device such as a GPS."
-msgstr ""
-"Ja tu vēlies publicēt šo atrašanās vietu, izmēģini izmantot kādu ārējo "
-"ierīci, piemēram GPS."
-
-#: C/geolocation-not-showing.page:48(note/p)
-msgid ""
-"In order to publish your geographical location, your Jabber server needs to "
-"support the Personal Eventing Protocal (PEP). A list of <link href=\"http://"
-"coccinella.im/servers/servers_by_pubsub_pep.html\">servers which support "
-"PEP</link> is maintained online. Google Talk does not support this feature "
-"at this time."
-msgstr ""
-"Lai varētu publicēt savu ģeogrāfisko atrašanās vietu, tavam Jabber serverim "
-"ir jāatbalsta \"Personal Eventing Protocal (PEP)\". Saraksts ar <link href="
-"\"http://coccinella.im/servers/servers_by_pubsub_pep.html\">serveriem, kuri "
-"atbalsta PEP</link>, ir pieejams tiešsaistē. Google Talk pagaidām šo "
-"funkciju neatbalsta."
-
-#: C/geolocation-privacy.page:8(info/desc)
-msgid "What information are sent and to who."
-msgstr "Kāda un kam informācija tiek nosūtīta."
-
-#: C/geolocation-privacy.page:32(page/title)
-msgid "Geolocation Privacy"
-msgstr "Ģeogrāfiskās atrašanās vietas privātums"
-
-#: C/geolocation-privacy.page:35(section/title)
-msgid "What information is sent"
-msgstr "Kāda informācija tiek nosūtīta"
-
-#: C/geolocation-privacy.page:36(section/p)
-msgid ""
-"What is possible to send is: your country, region, locality, area, street, "
-"building, floor, room, and postal code, longitude, latitude and altitude, "
-"speed and bearing."
-msgstr ""
-"Nosūtīt ir iespējams: tavu valsti, reģionu, apvidu, rajonu, ielu, ēku, "
-"stāvu, dzīvokli, pasta indeksu, garuma, platuma un augstuma grādus, ātrumu "
-"un azimutu."
-
-#: C/geolocation-privacy.page:40(section/p)
-msgid ""
-"The accuracy and the quantity of information about your geographical "
-"position are based on the software or on the infrastructure used to discover "
-"your position."
-msgstr ""
-"Precizitāte un daudzums, kurš tiks noteikts par tavu atrašanās vietu ir "
-"atkarīgs no programmatūras vai infrastruktūras, kura tiek izmantota, lai to "
-"noteiktu."
-
-#: C/geolocation-privacy.page:44(section/p)
-msgid ""
-"Different kind of networks may have different accuracy settings, and may "
-"send different information. The use of external devices such as GPS or "
-"mobile phone will increase the accuracy of the information sent."
-msgstr ""
-"Dažādiem savienojumu veidiem var būt atšķirīgi precizitātes iestatījumi un "
-"var sūtīt dažādu informāciju. Noteikšanas precizitātes uzlabosies, "
-"izmantojot ārējās ierīces, piemēram, GPS vai mobilo tālruni."
-
-#: C/geolocation-privacy.page:49(section/p)
-msgid ""
-"When the privacy mode is enabled, nothing more precise than your city will "
-"be sent, even if you are using an external device."
-msgstr ""
-"Ja ir aktivēts privātuma režīms, nekas vairāk par pašreizējo pilsētu netiks "
-"nosūtīts, pat ja izmanto kādu ārējo ierīci."
-
-#: C/geolocation-privacy.page:56(section/title)
-msgid "Who can see the information sent"
-msgstr "Kas var redzēt nosūtīto informāciju"
-
-#: C/geolocation-privacy.page:57(section/p)
-msgid "Only your contacts can see your geographical position."
-msgstr "Tikai tavi kontakti var redzēt tavu ģeogrāfisko atrašanās vietu,"
-
-#: C/geolocation-privacy.page:63(section/title)
-msgid "What is the privacy mode"
-msgstr "Kas ir privātuma režīms"
-
-#: C/geolocation-privacy.page:64(section/p)
-msgid ""
-"The privacy mode, enabled by default, is a reduced accuracy mode that will "
-"decrease the accuracy of the geographical position sent to your contacts."
-msgstr ""
-"Privātuma režīms, kurš ir noklusētais iestatījums, ir tas pats, kas "
-"samazināts precizitātes noteikšanas režīms, kurš samazina precizitāti tavas "
-"atrašanās vietas noteikšanā."
-
-#: C/geolocation-privacy.page:71(section/title)
-msgid "Privacy overview"
-msgstr "Privātuma pārskats"
-
-#: C/geolocation-privacy.page:72(section/p)
-msgid ""
-"Overview of the various geolocation privacy settings in <app>Empathy</app>."
-msgstr ""
-"Pārskats dažādiem ģeogrāfiskās atrašanās vietas privātuma iestatījumiem "
-"<app>Empathy></app> lietotnē."
-
-#: C/geolocation-privacy.page:77(item/p)
-msgid "Geolocation is not enabled by default."
-msgstr "Ģeogrāfiskās atrašanās vietas noteikšana nav aktivēta pēc noklusējuma."
-
-#: C/geolocation-privacy.page:82(item/p)
-msgid "Privacy mode is enabled by default."
-msgstr "Privātuma režīms ir aktivēts pēc noklusējuma."
-
-#: C/geolocation-privacy.page:87(item/p)
-msgid ""
-"Privacy mode prevails even when using external and more precise devices."
-msgstr ""
-"Privātuma režīms paliek aktivēts arī tad, ja izmanto kādu ārējo ierīci."
-
-#: C/geolocation-privacy.page:92(item/p)
-msgid "Only your contacts can see your position."
-msgstr "Tikai tavi kontakti redz tavu atrašanās vietu."
-
-#: C/geolocation-supported.page:7(info/desc)
-msgid "Services that supports geolocation and compatibility."
-msgstr ""
-"Servisi, kuri atbalsta ģeogrāfiskās atrašanās vietu un to savietojamība."
-
-#: C/geolocation-supported.page:31(page/title)
-msgid "Supported services"
-msgstr "Atbalstītie servisi"
-
-#: C/geolocation-supported.page:33(page/p)
-msgid ""
-"The geolocation feature at the moment is compatible only with the Jabber "
-"service. In order to use it, you and your contacts need to have a Jabber "
-"account."
-msgstr ""
-"Ģeogrāfiskās atrašanās vietas iespēja uz doto brīdi ir saderīga tikai ar "
-"Jabber servisu. Lai to izmantotu, tev, kā arī taviem kontaktiem, ir jābūt "
-"Jabber kontam."
-
-#: C/geolocation-supported.page:39(note/p)
-msgid ""
-"It is necessary that also the server you are using supports the geolocation "
-"feature. Most of the Jabber servers support it. See your service website "
-"documentation for more information."
-msgstr ""
-"Arī serverim, kuru tu lieto, jāatbalsta ģeogrāfiskās atrašanās vietas "
-"noteikšanas pakalpojums. Lielākā daļa no Jabber serveriem to atbalsta. Lasi "
-"sava servisa tīmekļa vietnes dokumentāciju, lai uzzinātu vairāk."
-
-#: C/geolocation-supported.page:47(section/title)
-msgid "Compatibility"
-msgstr "Savietojamība"
-
-#: C/geolocation-supported.page:49(section/p)
-msgid ""
-"<app>Empathy</app> geolocation feature is not compatible with other "
-"geographical position services such as <em>Google Latitude</em>, <em>Yahoo "
-"Fire Eagle</em> or <em>Brightkite</em>."
-msgstr ""
-"<app>Empathy</app> ģeogrāfiskās atrašanās vietas pakalpojums nav saderīgs ar "
-"citiem šī pakalpojuma servisiem, piemēram <em>Google Latitude</em>, "
-"<em>Yahoo Fire Eagle</em> vai <em>Brightkite</em>."
-
-#: C/geolocation-turn.page:9(info/desc)
-msgid "How to activate and deactivate geolocation in <app>Empathy</app>."
-msgstr ""
-"Kā aktivizēt vai deaktivizēt atrašanās vietas noteikšanu <app>Empathy</app> "
-"lietotnē."
-
-#: C/geolocation-turn.page:33(page/title)
-msgid "Activate/Deactivate geolocation"
-msgstr "Aktivizēt/deaktivizēt ģeogrāfiskās atrašanās vietas noteikšanu"
-
-#: C/geolocation-turn.page:37(item/p)
-msgid "Choose <guiseq><gui>Edit</gui><gui>Preferences</gui></guiseq>."
-msgstr "Izvēlies <guiseq><gui>Rediģēt</gui><gui>Iestatījumi</gui></guiseq>."
-
-#: C/geolocation-turn.page:42(item/p)
-msgid "Select the <gui>Location</gui> tab."
-msgstr "Izvēlies <gui>Vieta</gui> cilni."
-
-#: C/geolocation-turn.page:47(item/p)
-msgid ""
-"Select <gui>Publish location to my contacts</gui> to activate geolocation."
-msgstr ""
-"Izvēlies <gui>Parādīt kontaktiem atrašanās vietu</gui>, lai aktivizētu "
-"ģeogrāfiskās atrašanās vietas pakalpojumu."
-
-#: C/geolocation-turn.page:50(item/p)
-msgid "To deactivate geolocation, deselect it."
-msgstr "Lai to deaktivizētu, noņem tās izvēli."
-
-#: C/geolocation-turn.page:55(item/p)
-msgid ""
-"To increase the accuracy of your position, deselect <gui>Reduce location "
-"accuracy</gui>."
-msgstr ""
-"Lai uzlabotu atrašanās vietas precizitāti, noņem izvēli <gui>Samazināt "
-"atrašanās vietas precizitāti</gui>."
-
-#: C/geolocation-turn.page:61(item/p)
-msgid ""
-"If you have an external device like a GPS or want to send a more accurate "
-"position, select the appropriate option in the <gui>Location sources</gui> "
-"section."
-msgstr ""
-"Ja tev ir papildu ierīce, piemēram, GPS, vai ja vēlies sūtīt vēl precīzāku "
-"atrašanās vietu, izvēlies tam piemēroto opciju <gui>Vietas avoti</gui> "
-"sadaļā."
-
-#: C/geolocation-what-is.page:9(info/desc)
-msgid "Understanding geolocation."
-msgstr "Ģeogrāfiskās atrašanās vietas izpratne."
-
-#: C/geolocation-what-is.page:33(page/title)
-msgid "What is geolocation"
-msgstr "Kas ir ģeogrāfiskā atrašanās vieta"
-
-#: C/geolocation-what-is.page:35(page/p)
-msgid ""
-"Geolocation allows you to identify the real geographical location of a "
-"computer or a device connected to the Internet."
-msgstr ""
-"Ģeogrāfiskā atrašanās vieta ļauj tev identificēt esošo ģeogrāfisko atrašanās "
-"vietu kādai ierīcei vai datoram, kurš ir savienots ar internetu."
-
-#: C/geolocation-what-is.page:37(page/p)
-msgid "With geolocation in <app>Empathy</app> you can:"
-msgstr "Ar ģeogrāfiskās atrašanās vietu <app>Empathy</app> lietotnē tu vari:"
-
-#: C/geolocation-what-is.page:42(item/p)
-msgid "Publish your geographical location to your contacts."
-msgstr "Paust zināmu savu atrašanās vietu saviem kontaktiem. "
-
-#: C/geolocation-what-is.page:47(item/p)
-msgid "See your contacts’ geographical location and quickly contact them."
-msgstr "Uzzināt savu kontaktu atrašanās vietu un ātri sazināties ar tiem."
-
-#: C/geolocation-what-is.page:52(item/p)
-msgid ""
-"Set the accuracy of your location and the device used to discover your "
-"location."
-msgstr ""
-"Iestatīt savas atrašanās vietas precizitāti, kā arī iestatīt noteikšanas "
-"precizitāti ierīcei, kura nosaka tavu atrašanās vietu."
-
-#: C/geolocation-what-is.page:60(note/p)
-msgid ""
-"In order to see your contacts’ geographical locations, they need to use a "
-"service and an application that supports geolocation."
-msgstr ""
-"Lai redzētu savu kontaktu atrašanās vietas, viņiem ir jāizmantoservisu un "
-"lietotni, kas atbalsta ģeogrāfiskās atrašanās vietas noteikšanu."
-
-#: C/group-conversations.page:8(info/desc)
-msgid "Start or join a group conversation with your contacts."
-msgstr "Sāc vai pievienojies grupas sarunai ar saviem kontaktiem."
-
-#: C/group-conversations.page:34(page/title)
-msgid "Group conversations"
-msgstr "Sarunas grupā"
-
-#: C/group-conversations.page:36(page/p)
-msgid ""
-"Group conversations permits you to have text conversations with more than "
-"one contact at the same time."
-msgstr ""
-"Grupu sarunas ļauj tev sarakstīties ar vairāk nekā vienu kontaktu "
-"vienlaicīgi."
-
-#: C/group-conversations.page:40(page/p)
-msgid ""
-"To have a group conversation you need to have a registered account with "
-"either Jabber or Google Talk, or a People Nearby account."
-msgstr ""
-"Lai varētu izmantot grupu sarunas, tev ir nepieciešams vai nu Jabber, vai "
-"Google Talk, vai People Nearby konts."
-
-#: C/group-conversations.page:46(note/p)
-msgid ""
-"You can have a group conversation only with the contacts that are using the "
-"same service as yours."
-msgstr ""
-"Grupu sarunas ir iespējamas tikai starp kontaktiem, kuri izmanto tādu pašu "
-"pakalpojumu, kā tu."
-
-#: C/group-conversations.page:54(section/title)
-msgid "Start a group conversation"
-msgstr "Sākt grupu sarunu"
-
-#: C/group-conversations.page:58(item/p)
-#: C/group-conversations.page:122(item/p) C/irc-join-room.page:39(item/p)
-msgid ""
-"From the <gui>Contact List</gui> window, choose <guiseq><gui>Room</"
-"gui><gui>Join</gui></guiseq>."
-msgstr ""
-"No <gui>Kontaktu saraksta</gui> loga, izvēlies <guiseq><gui>Istaba</"
-"gui><gui>Pievienoties</gui></guiseq>."
-
-#: C/group-conversations.page:63(item/p)
-msgid ""
-"From the <gui>Account</gui> drop-down list, select the account you want to "
-"use for the group conversation."
-msgstr ""
-"No <gui>Konts</gui> saraksta izvēlies kontu, kuru vēlies izmantot grupas "
-"sarunā."
-
-#: C/group-conversations.page:69(item/p)
-msgid ""
-"In the <gui>Server</gui> text box, type the name of server in which the "
-"conversation will be hosted."
-msgstr ""
-"<gui>Serveris</gui> teksta lauciņā ieraksti tā servera nosaukumu, kurā "
-"norisināsies saruna."
-
-#: C/group-conversations.page:73(item/p)
-msgid "Leave it empty if it will be on the current server."
-msgstr "Atstāj lauciņu tukšu, ja sarakste notiks esošajā serverī."
-
-#: C/group-conversations.page:78(item/p)
-msgid ""
-"In the <gui>Room</gui> text box, type the name you want to give to the "
-"conversation."
-msgstr "<gui>Istaba</gui> teksta laukā ieraksti sev tīkamo sarunas nosaukumu."
-
-#: C/group-conversations.page:82(note/p)
-msgid ""
-"This will be the name of the room you are going to have a conversation. This "
-"name will be publicly available for other people to join. It is not possible "
-"to create a private room."
-msgstr ""
-"Šis būs nosaukums istabai, kurā notiks sarakste. Šo nosaukumu redzēs jebkurš "
-"lietotājs un jebkurš varēs pievienoties. Izveidot privātu sarakstes istabu "
-"nevar."
-
-#: C/group-conversations.page:90(item/p)
-msgid ""
-"To invite other contacts to join the group conversation, from the "
-"<gui>Contact List</gui> window, select the contact you want to invite, and "
-"perform one of the following:"
-msgstr ""
-"Lai uzaicinātu kontaktus pievienoties sarunai, no <gui>Kontaktu saraksta</"
-"gui> loga izvēlies kontaktu, kuru vēlies uzaicināt un veic vienu no "
-"sekojošajām darbībām:"
-
-#: C/group-conversations.page:97(item/p)
-msgid "Right-click on the contact and choose <gui>Invite to chatroom</gui>."
-msgstr ""
-"Ar labo peles pogu spied uz kontakta un izvēlies <gui>Uzaicināt uz "
-"tērzēšanas istabu</gui>."
-
-#: C/group-conversations.page:102(item/p)
-msgid ""
-"Choose <guiseq><gui>Edit</gui><gui>Contact</gui><gui>Invite to chatroom</"
-"gui></guiseq>."
-msgstr ""
-"Izvēlies <guiseq><gui>Rediģēt</gui><gui>Kontakts</gui><gui>Uzaicināt uz "
-"tērzēšanas istabu</gui></guiseq>."
-
-#: C/group-conversations.page:107(item/p)
-msgid ""
-"If you have more than one group conversation open, select the one you want "
-"to invite your contacts."
-msgstr ""
-"Ja tev ir atvērta vairāk nekā viena grupu sarakste, izvēlies to, uz kuru "
-"vēlies uzaicināt savus kontaktus."
-
-#: C/group-conversations.page:118(section/title)
-msgid "Join a group conversation"
-msgstr "Pievienoties grupas sarunai"
-
-#: C/group-conversations.page:128(item/p)
-msgid "Expand the <gui>Room List</gui> section to see all the existing rooms."
-msgstr ""
-"Izvērs <gui>Istabu saraksta</gui> nodalījumu, lai redzētu visas pieejamās "
-"istabas."
-
-#: C/group-conversations.page:133(item/p)
-msgid "Double-click on the name of a room to join it."
-msgstr "Veic dubultklikšķi uz istabas nosaukuma, kurai vēlies pievienoties."
-
-#: C/group-conversations.page:139(section/p)
-msgid ""
-"It is not possible to join all existing rooms. Some of the rooms might "
-"require a password, or might be invitation only. <app>Empathy</app> does not "
-"support these kind of rooms."
-msgstr ""
-"Visām istabām var nebūt iespējams pievienoties. Atsevišķas istabas var "
-"pieprasīt paroli, vai var būt iespējamas tikai ar ielūgumiem. <app>Empathy</"
-"app> šāda veida istabas neatbalsta."
-
-#: C/hide-contacts.page:8(info/desc)
-msgid "Hide the offline contacts from your <gui>Contact List</gui>."
-msgstr "Paslēpt nesaistē esošos kontaktus no <gui>Kontaktu saraksta</gui>."
-
-#: C/hide-contacts.page:19(page/title)
-msgid "Hide offline contacts"
-msgstr "Paslēpt nesaistē esošos kontaktus"
-
-#: C/hide-contacts.page:21(page/p)
-msgid ""
-"Normally, <app>Empathy</app> shows all your contacts: those that are online, "
-"with which you can have a conversation, and also those that are offline."
-msgstr ""
-"Parasti <app>Empathy</app> parāda visus tavus kontaktus: tos, kuri ir "
-"tiešsaistē un ar kuriem tu vari sazināties, kā arī tos, kuri ir nesaistē."
-
-#: C/hide-contacts.page:25(page/p)
-msgid "To hide the contacts that are offline:"
-msgstr "Lai paslēptu kontaktus, kuri ir nesaistē:"
-
-#: C/hide-contacts.page:31(item/p)
-#| msgid ""
-#| "From the <gui>Contact List</gui> window, choose <guiseq><gui>View</"
-#| "gui><gui>Offline Contacts</gui></guiseq>, or press <keyseq><key>Ctrl</"
-#| "key><key>H</key></keyseq>."
-msgid ""
-"From the <gui>Contact List</gui> window, choose <guiseq><gui>View</gui> "
-"<gui>Offline Contacts</gui></guiseq>, or press <keyseq><key>Ctrl</key> "
-"<key>H</key></keyseq>."
-msgstr ""
-"No <gui>Kontaktu saraksta</gui> loga izvēlies <guiseq><gui>Skats</gui><gui>"
-"Nesaistes kontakti</gui></guiseq>, vai spied <keyseq><key>Ctrl "
-"</key><key>H</key></keyseq>."
-
-#: C/hide-contacts.page:36(item/p)
-msgid "To show the offline contacts again, repeat the same procedure above."
-msgstr ""
-"Lai atkal rādītu nesaistē esošos kontaktus, atkārto iepriekšējo darbību."
-
-#: C/import-account.page:10(info/desc)
-msgid "Import an account from another instant messaging application."
-msgstr "Importēt kontu no kādas citas tūlītējās tērzēšanas lietotnes."
-
-#: C/import-account.page:19(credit/name)
-msgid "Peter Haslam"
-msgstr "Peter Haslam"
-
-#: C/import-account.page:42(page/title)
-msgid "Import an existing account"
-msgstr "Importēt esošu kontu "
-
-#: C/import-account.page:44(page/p)
-msgid ""
-"The first time you run <app>Empathy</app>, it will offer to import your "
-"accounts from other instant messaging applications. Currently, the only "
-"supported application is <app>Pidgin</app>."
-msgstr ""
-"Pirmajā <app>Empathy</app> palaišanas reizē, jums piedāvās importēt kontus "
-"no citām tūlītējās tērzēšanas lietotnēm. Pagaidām vienīgā atbalstītā "
-"lietotne ir <app>Pidgin</app>."
-
-#: C/import-account.page:50(item/p)
-msgid ""
-"Run <app>Empathy</app> for the first time. An assistant will offer you a "
-"number of options to create new accounts."
-msgstr ""
-"Palaist <app>Empathy</app> pirmo reizi. Palīgs jums piedāvās vairākas "
-"izvēles konta izveidošanai."
-
-#: C/import-account.page:54(item/p)
-msgid ""
-"Select <gui>Yes, import my account details from</gui> and click "
-"<gui>Forward</gui>."
-msgstr ""
-"Izvēlies <gui>Jā, importēt konta informāciju no</gui> un spied "
-"<gui>Turpināt</gui>"
-
-#: C/import-account.page:58(item/p)
-msgid "Select the check box next to each account you wish to import."
-msgstr "Atzīmē katru kontu, kuru vēlies importēt."
-
-#: C/import-account.page:66(note/p)
-msgid ""
-"It is not currently possible to import accounts after you have completed the "
-"first-run assistant."
-msgstr ""
-"Pagaidām nevar importēt kontus pēc tam, kad esi pabeidzis pirmās palaišanas "
-"palīgu."
-
-#. This is a reference to an external file such as an image or video. When
-#. the file changes, the md5 hash will change to let you know you need to
-#. update your localized copy. The msgstr is not used at all. Set it to
-#. whatever you like once you have updated your copy of the file.
-#: C/introduction.page:41(media)
-#| msgid ""
-#| "@@image: 'figures/empathy-main-window.png'; "
-#| "md5=54908dcb2588beddb15ef0968d2c2582"
-msgctxt "_"
-msgid ""
-"external ref='figures/empathy-main-window.png' "
-"md5='54908dcb2588beddb15ef0968d2c2582'"
-msgstr ""
-"external ref='figures/empathy-main-window.png' "
-"md5='54908dcb2588beddb15ef0968d2c2582'"
-
-#: C/introduction.page:9(info/desc)
-msgid "Introduction to the <app>Empathy</app> instant messenger."
-msgstr "Ievads <app>Empathy</app> tūlītējās ziņojumapmaiņas lietotnē."
-
-#: C/introduction.page:21(page/title)
-msgid "Introduction"
-msgstr "Ievads"
-
-#: C/introduction.page:23(page/p)
-msgid ""
-"<app>Empathy</app> is an instant messaging application for the GNOME "
-"Desktop. It supports text messaging, voice &amp; video calls, file "
-"transfers, and all the most used messaging systems such as MSN and Google "
-"Talk."
-msgstr ""
-"<app>Empathy</app> ir tūlītējās ziņojumapmaiņas lietotne, izveidota GNOME "
-"darbvirsmai. Tā atbalsta teksta ziņojumus, balss un video zvanus, failu "
-"sūtīšanu un visas visbiežāk izmantotās ziņojumu sistēmas, piemēram MSN un "
-"Google Talk."
-
-#: C/introduction.page:28(page/p)
-msgid ""
-"<app>Empathy</app> includes features that help you better collaborate while "
-"at work, and that let you easily keep in touch with your friends."
-msgstr ""
-"<app>Empathy</app> sevī ietver iespējas, kas palīdz labāk sadarboties darba "
-"vidē un kuras palīdz vieglāk sazināties ar draugiem."
-
-#: C/introduction.page:32(page/p)
-msgid ""
-"Using <app>Empathy</app>, you can group all the conversations in a single "
-"window, have multiple windows for different kind of conversations, easily "
-"search through your previous conversations, and share your desktop in just "
-"two clicks."
-msgstr ""
-"Izmantojot <app>Empathy</app>, tu vari sagrupēt visas notiekošās sarakstes "
-"vienā logā, vari arī katrai sarakstei atvēlēt savu logu, vienkārši meklēt "
-"cauri visām sarakstēm un dalīties ar savu darbvirsmu ar tikai diviem "
-"klikšķiem!"
-
-#: C/introduction.page:39(figure/title)
-msgid "<gui>Contact List</gui> window"
-msgstr "<gui>Kontaktu saraksta</gui> logs"
-
-#: C/introduction.page:40(figure/desc)
-msgid "<app>Empathy</app> main window"
-msgstr "<app>Empathy</app> galvenais logs"
-
-#: C/introduction.page:42(media/p)
-msgid "<app>Empathy</app> main window."
-msgstr "<app>Empathy</app> galvenais logs."
-
-#: C/irc-commands.page:7(info/desc)
-msgid "The supported IRC commands."
-msgstr "Atbalstītās IRC komandas."
-
-#: C/irc-commands.page:18(page/title)
-msgid "Supported IRC commands"
-msgstr "Atbalstītās IRC komandas"
-
-#: C/irc-commands.page:19(page/p)
-msgid ""
-"To see the list of the supported IRC commands, in a chat room type <input>/"
-"help</input> and press <key>Enter</key>."
-msgstr ""
-"Lai redzētu sarakstu ar atbalstītajām IRC komandām, tērzēšanas istabā "
-"ieraksti <input>/help</input> un nospied <key>Enter</key>."
-
-#: C/irc-commands.page:24(note/p)
-msgid "All commands available have a small description on their usage."
-msgstr "Visām pieejamajām komandām ir neliels to lietošanas paskaidrojums."
-
-#: C/irc-join-pwd.page:9(info/desc)
-msgid "Enter password-protected IRC chat rooms."
-msgstr "Ieej ar paroli aizsargātās IRC tērzēšanas istabās."
-
-#: C/irc-join-pwd.page:25(page/title)
-msgid "Join a protected IRC chat room"
-msgstr "Pievienoties aizsargātai IRC saziņas istabai"
-
-#: C/irc-join-pwd.page:27(page/p)
-msgid ""
-"On some IRC networks, private IRC rooms may be protected with a password. If "
-"you know the password, use the following steps to join:"
-msgstr ""
-"Dažos IRC tīklos, privātās IRC istabas var būt aizsargātas ar paroli. Ja tu "
-"zini šo paroli, izpildi sekojošos soļus lai pievienotos:"
-
-#: C/irc-join-pwd.page:33(item/p)
-msgid "<link xref=\"irc-join-room\">Join the room</link> as normal."
-msgstr ""
-"<link xref=\"irc-join-room\">Pievienojies istabai</link> kā tu to parasti "
-"darītu."
-
-#: C/irc-join-pwd.page:38(item/p)
-msgid ""
-"Empathy will prompt you for a password. Enter the password for the IRC chat "
-"room and click <gui style=\"button\">Join</gui>."
-msgstr ""
-"Empathy tev pieprasīs paroli. Ievadi IRC istabas paroli un spied <gui style="
-"\"button\">Pievienoties</gui>."
-
-#: C/irc-join-room.page:8(info/desc)
-msgid "Join an IRC channel."
-msgstr "Pievienojies IRC kanālam."
-
-#: C/irc-join-room.page:31(page/title)
-msgid "Join an IRC chat room"
-msgstr "Pievienoties IRC tērzēšanas istabai."
-
-#: C/irc-join-room.page:33(page/p)
-msgid ""
-"You can join IRC chat rooms (also known as IRC channels) on any IRC network "
-"you’re connected to. To connect to an IRC network, see <link xref=\"add-"
-"account\"/> and <link xref=\"account-irc\"/>."
-msgstr ""
-"Tu vari pievienoties IRC tērzēšanas istabām (zināmām kā IRC kanāliem) "
-"jebkurā IRC tīklā, kuram esi pieslēdzies. Lai pieslēgtos IRC tīklam, lasi "
-"<link xref=\"add-account\"/> un <link xref=\"account-irc\"/>."
-
-#: C/irc-join-room.page:45(item/p)
-msgid ""
-"From the <gui>Account</gui> drop-down list, select the IRC account that "
-"corresponds to the network you want to use."
-msgstr ""
-"<gui>Konts</gui> izkrītošajā izvēlnē izvēlies IRC kontu, kurš atbilst "
-"tīklam, kuru vēlies izmantot."
-
-#: C/irc-join-room.page:51(item/p)
-msgid ""
-"In the <gui>Room</gui> text box, type the name of the channel you want to "
-"join. IRC channel names start with the hash character (<sys>#</sys>)."
-msgstr ""
-"<gui>Istaba</gui> teksta laukumā, ieraksti kanāla nosaukumu, kuram vēlies "
-"pievienoties. IRC kanālu nosaukumi sākas ar restītes zīmi (<sys>#</sys>)."
-
-#: C/irc-join-room.page:57(item/p)
-msgid "Click <gui>Join</gui> to enter the room."
-msgstr "Spied <gui>Pievienoties</gui>, lai pievienotos istabai."
-
-#: C/irc-join-room.page:64(note/p)
-msgid ""
-"To join multiple rooms, you need to repeat the steps above for each room."
-msgstr ""
-"Lai pievienotos vairākām istabām vienlaicīgi, tev nāksies atkārtot šos soļus "
-"katrai istabai."
-
-#: C/irc-manage.page:9(info/desc)
-msgid "How to use IRC with <app>Empathy</app>."
-msgstr "Kā izmantot IRC kopā ar <app>Empathy</app>."
-
-#: C/irc-manage.page:34(page/title)
-msgid "Internet Relay Chat (IRC)"
-msgstr "Internet Relay Chat (IRC)"
-
-#: C/irc-manage.page:41(when/p)
-msgid ""
-"<link action=\"install:telepathy-idle\" xref=\"index\" style=\"button"
-"\">Install telepathy-idle</link>"
-msgstr ""
-"<link action=\"install:telepathy-idle\" xref=\"index\" style=\"button"
-"\">Instalēt telepathy-idle</link>"
-
-#: C/irc-manage.page:48(info/title)
-#| msgid "IRC Chat Rooms and Conversations"
-msgctxt "link"
-msgid "IRC Chat Rooms and Conversations"
-msgstr "IRC tērzēšanas istabas un sarunas"
-
-#: C/irc-manage.page:50(section/title)
-msgid "Chat Rooms and Conversations"
-msgstr "Tērzēšanas istabas un sarunas"
-
-#: C/irc-manage.page:55(info/title)
-#| msgid "Common IRC Problems"
-msgctxt "link"
-msgid "Common IRC Problems"
-msgstr "Biežākās IRC problēmas"
-
-#: C/irc-nick-password.page:10(info/desc)
-msgid "Protect your nickname to prevent other IRC users from using it."
-msgstr ""
-"Aizsargā savu segvārdu, lai neļautu citiem IRC lietotājiem to izmantot."
-
-#: C/irc-nick-password.page:33(page/title)
-msgid "Use a nickname password on IRC"
-msgstr "Izmantot segvārda paroli IRC tīklā"
-
-#: C/irc-nick-password.page:35(page/p)
-msgid ""
-"On some IRC networks, you can register your nickname with a service called "
-"NickServ. By sending special messages to NickServ, you can set your password "
-"and identify yourself. Some IRC chat rooms may not allow you to join without "
-"a registered nickname."
-msgstr ""
-"Dažos IRC tīklos, tu vari reģistrēt savu segvārdu, izmantojot servisu, "
-"sauktu par NickServ. Sūtot īpašas komandas NickServ, tu vari iestatīt paroli "
-"un identificēt sevi. Dažas IRC istabas var tev neatļaut pieslēgties, "
-"nereģistrējot segvārdu."
-
-#: C/irc-nick-password.page:40(page/p)
-msgid ""
-"<app>Empathy</app> does not currently support nickname registration. Some "
-"IRC networks, however, will automatically forward a <em>server password</em> "
-"to NickServ. On these networks, you can use the IRC password in "
-"<app>Empathy</app> to identify yourself to NickServ. The popular freenode "
-"network is known to have this feature."
-msgstr ""
-"<app>Empathy</app> pašlaik neatbalsta segvārdu reģistrāciju. Daži IRC tīkli "
-"automātiski nosūtīs <em>servera paroli</em> uz NickServ. Šajos tīklos tu "
-"vari izmantot IRC paroli, <app>Empathy</app> lietotnē, lai identificētu sevi "
-"NickServ servisā. Populārajam freenode tīklam ir šī funkcija."
-
-#: C/irc-nick-password.page:46(page/p)
-msgid "To set an IRC server password:"
-msgstr "Lai iestatītu IRC paroli:"
-
-#: C/irc-nick-password.page:54(item/p)
-msgid "Select the IRC account from the list on the left of the dialog."
-msgstr "Izvēlies IRC kontu no saraksta, kreisajā loga pusē."
-
-#: C/irc-nick-password.page:57(item/p)
-msgid ""
-"In the <gui>Password</gui> field, type the password you used to register "
-"your nikcname."
-msgstr ""
-"<gui>Parole</gui> laukā, raksti paroli, kuru izmantoji, lai reģistrētu "
-"segvārdu."
-
-#: C/irc-nick-password.page:69(note/p)
-msgid ""
-"These instructions only allow you to use a password-protected nickname on "
-"certain IRC networks. It is not currently possible to register an IRC "
-"nickname or change your nickname password using <app>Empathy</app>."
-msgstr ""
-"Šīs instrukcijas ļauj tev izmantot ar paroli aizsargātu iesauku noteiktos "
-"IRC tīklos. Uz doto brīdi nav iespējams reģistrēt IRC iesauku, vai to "
-"mainīt, izmantojot <app>Empathy</app>."
-
-#: C/irc-send-file.page:9(info/desc)
-msgid "<app>Empathy</app> does not currently support sending files using IRC."
-msgstr "<app>Empathy</app> pašlaik neatbalsta failu sūtīšanu caur IRC."
-
-#: C/irc-send-file.page:31(page/title)
-msgid "Send files over IRC"
-msgstr "Sūti failus caur IRC"
-
-#: C/irc-send-file.page:33(page/p)
-msgid "It is not currently possible to send files using IRC."
-msgstr "Pagaidām nav iespējams sūtīt failus, izmantojot IRC."
-
-#: C/irc-start-conversation.page:8(info/desc)
-msgid "Start a conversation with an IRC contact."
-msgstr "Sākt sarunu ar IRC kontaktu."
-
-#: C/irc-start-conversation.page:30(page/title)
-msgid "Chat with somebody on IRC"
-msgstr "Sarakstīties ar kādu IRC lietotāju"
-
-#: C/irc-start-conversation.page:32(page/p)
-msgid ""
-"You can hold private conversations with other IRC users, outside of the "
-"public IRC chat rooms. To start a conversation with another IRC user:"
-msgstr ""
-"Tu vari uzturēt privātas sarunas ar citiem IRC lietotājiem, ārpus "
-"publiskajām IRC istabām. Lai sāktu sarunu ar kādu IRC lietotāju:"
-
-#: C/irc-start-conversation.page:37(item/p)
-msgid ""
-"In the contact list for an IRC chat room, double click the name of the user "
-"you want to chat with. Alternatively, right click the name of the user and "
-"choose <gui>Chat</gui>."
-msgstr ""
-"IRC sarakstes istabas dalībnieku sarakstā veic dubultklikšķi uz tā lietotāja "
-"segvārda, ar kuru vēlies sazināties. Kā arī var veikt labo peles klikšķi un "
-"izvēlēties <gui>Tērzēt</gui>."
-
-#: C/irc-start-conversation.page:45(item/p)
-msgid ""
-"The IRC room contact list is not the same as <app>Empathy</app> contact "
-"list. It contains a list of users in the IRC chat room you joined. Different "
-"rooms can have different contacts listed."
-msgstr ""
-"IRC istabu dalībnieku saraksts nav tas pats, kas <app>Empathy</app> kontaktu "
-"saraksts. Tas satur sarakstu ar lietotājiem, kuri atrodas tajā pašā istabā, "
-"kurā jūs. Dažādās istabās būs dažādi kontakti."
-
-#: C/irc-start-conversation.page:52(item/p)
-msgid ""
-"The IRC room contact list is usually on the right side of the IRC room "
-"window. If you do not see it, choose <guiseq><gui>Conversation</"
-"gui><gui>Show Contact List</gui></guiseq>."
-msgstr ""
-"IRC istabu kontaktu saraksts parasti atrodas istabas loga labajā pusē. Ja tu "
-"to neredzi, izvēlies <guiseq><gui>Saruna</gui><gui>Rādīt kontaktu sarakstu</"
-"gui></guiseq>."
-
-#: C/license.page:8(info/desc)
-msgid "Legal information."
-msgstr "Juridiskā informācija."
-
-#: C/license.page:11(page/title)
-msgid "License"
-msgstr "License"
-
-#: C/license.page:12(page/p)
-msgid ""
-"This work is distributed under a CreativeCommons Attribution-Share Alike 3.0 "
-"Unported license."
-msgstr ""
-"Šis darbs tiek izplatīts balstoties uz CreativeCommons Attribution-Share "
-"Alike 3.0 neportēto licenci."
-
-#: C/license.page:20(page/p)
-msgid "You are free:"
-msgstr "Tu drīksti:"
-
-#: C/license.page:25(item/title)
-#| msgid "To share"
-msgid "<em>To share</em>"
-msgstr "<em>Izplatīt</em>"
-
-#: C/license.page:26(item/p)
-msgid "To copy, distribute and transmit the work."
-msgstr "Kopēt, izplatīt un pārraidīt šo darbu."
-
-#: C/license.page:29(item/title)
-#| msgid "To remix"
-msgid "<em>To remix</em>"
-msgstr "<em>Pārveidot</em>"
-
-#: C/license.page:30(item/p)
-msgid "To adapt the work."
-msgstr "Piemērot."
-
-#: C/license.page:33(page/p)
-msgid "Under the following conditions:"
-msgstr "Zem sekojošajiem noteikumiem:"
-
-#: C/license.page:38(item/title)
-#| msgid "Attribution"
-msgid "<em>Attribution</em>"
-msgstr "<em>Attiecinājums</em>"
-
-#: C/license.page:39(item/p)
-msgid ""
-"You must attribute the work in the manner specified by the author or "
-"licensor (but not in any way that suggests that they endorse you or your use "
-"of the work)."
-msgstr ""
-"Tev ir obligāti jāattiecina darbs veidā, kurš to ir norādījis autors vai "
-"licencētājs (bet ne tādā veidā veidā, kas liktu noprast, ka tie atbalsta "
-"tevi vai tava darba izmantošanu)."
-
-#: C/license.page:46(item/title)
-#| msgid "Share Alike"
-msgid "<em>Share Alike</em>"
-msgstr "<em>Share Alike</em>"
-
-#: C/license.page:47(item/p)
-msgid ""
-"If you alter, transform, or build upon this work, you may distribute the "
-"resulting work only under the same, similar or a compatible license."
-msgstr ""
-"Ja tu pamaini, pārveido šo darbu, tu to drīksti izplatīt tikai zem šādas "
-"pašas vai savietojamas licences."
-
-#: C/license.page:53(page/p)
-msgid ""
-"For the full text of the license, see the <link href=\"http://"
-"creativecommons.org/licenses/by-sa/3.0/legalcode\">CreativeCommons website</"
-"link>, or read the full <link href=\"http://creativecommons.org/licenses/by-"
-"sa/3.0/\">Commons Deed</link>."
-msgstr ""
-"Lai iegūtu pilnu licences tekstu, skaties <link href=\"http://"
-"creativecommons.org/licenses/by-sa/3.0/legalcode\">CreativeCommons "
-"mājaslapā</link>, vai izlasi pilnu <link href=\"http://creativecommons.org/"
-"licenses/by-sa/3.0/\">aktu</link>."
-
-#: C/link-contacts.page:11(info/desc)
-msgid "Merge and separate different contacts into a single one."
-msgstr "Apvieno un sadali dažādus kontaktus, vienā veselā."
-
-#: C/link-contacts.page:25(page/title)
-msgid "Combine and separate contacts"
-msgstr "Apvienot un sadalīt kontaktus"
-
-#: C/link-contacts.page:26(page/p)
-msgid ""
-"If one, or more, of your contacts has multiple accounts with different "
-"messaging services, you can combine these contacts into a single one."
-msgstr ""
-"Ja vienam vai vairākiem kontaktiem ir vairāki konti ar dažādiem tērzēšanas "
-"servisiem, tu vari apvienot šos kontaktus vienā."
-
-#: C/link-contacts.page:30(page/p)
-msgid ""
-"The resulting contact is called a <em>meta-contact</em>: a contact composed "
-"from different single contacts."
-msgstr ""
-"Iegūtais kontakts tiek saukts par <em>meta-kontaktu</em>: kontakts, "
-"savienots no vairākiem atsevišķiem kontaktiem."
-
-#: C/link-contacts.page:34(page/p)
-msgid ""
-"If you have a Jane Smith contact that is using three different messaging "
-"services like:"
-msgstr ""
-"Ja tev ir Ilzes Priedes kontakts, kurš izmanto trīs dažādus ziņojumu "
-"servisus, piemēram:"
-
-#: C/link-contacts.page:40(item/p)
-msgid "janes@facebook"
-msgstr "ilze@facebook"
-
-#: C/link-contacts.page:45(item/p)
-msgid "jane.smith@gmail"
-msgstr "ilze.priede@gmail"
-
-#: C/link-contacts.page:50(item/p)
-msgid "jane_smith@hotmail"
-msgstr "ilze_priede@hotmail"
-
-#: C/link-contacts.page:55(page/p)
-msgid "You can combine these contacts into a single Jane Smith one."
-msgstr "Tu vari apvienot šos kontaktus vienā vienīgā Ilzes Priedes kontaktā."
-
-#: C/link-contacts.page:60(section/title)
-msgid "Combining contacts"
-msgstr "Kontaktu apvienošana"
-
-#: C/link-contacts.page:63(item/p)
-msgid ""
-"From the <gui>Contact List</gui> window, right-click one of the contact that "
-"has different accounts, and select <gui style=\"menuitem\">Link Contacts...</"
-"gui>."
-msgstr ""
-"No <gui>Kontaktu saraksta</gui> loga, spiež labo peles pogu uz kontakta ar "
-"dažādiem kontiem un izvēlies <gui style=\"menuitem\">Saistīt kontaktus...</"
-"gui>."
-
-#: C/link-contacts.page:70(item/p)
-msgid ""
-"From the left pane in the <gui>Link Contacts</gui> window, select the "
-"contacts you want to combine."
-msgstr ""
-"No kreisā paneļa, <gui>Saistīt kontaktus</gui> logā, izvēlies kontaktus, "
-"kurus vēlies apvienot."
-
-#: C/link-contacts.page:76(item/p)
-msgid "Click <gui style=\"button\">Link</gui>."
-msgstr "Spied uz <gui style=\"button\">Saistīt</gui>."
-
-#: C/link-contacts.page:82(note/p)
-msgid ""
-"When a meta-contact has been created, the default contact that will be used "
-"to have a conversation with when you double-click on it, is the contact with "
-"the highest presence on-line."
-msgstr ""
-"Kad ir izveidots meta-kontakts, noklusētais kontakts, kurš tiks izmantots, "
-"lai sazinātos, kad uz tā veic dubultklikšķi, būs kontakts ar augstāko "
-"klātbūtnes laiku."
-
-#: C/link-contacts.page:91(section/title)
-msgid "Separating contacts"
-msgstr "Kontaktu atdalīšana"
-
-#: C/link-contacts.page:94(item/p)
-msgid ""
-"From the <gui>Contact List</gui>, right-click the contact to separate, and "
-"select <gui style=\"menuitem\">Link Contacts...</gui>."
-msgstr ""
-"<gui>Kontaktu saraksts</gui> logā spiež labo peles pogu uz kontakta, kuru "
-"vēlies atdalīt un izvēlies <gui style=\"menuitem\">Saistīt kontaktus...</"
-"gui>."
-
-#: C/link-contacts.page:100(item/p)
-msgid "Click <gui style=\"button\">Unlink</gui>."
-msgstr "Spied uz <gui style=\"button\">Atsaistīt</gui>."
-
-#: C/prev-conv.page:8(info/desc)
-msgid "Browse or search your previous conversations."
-msgstr "Pārlūko vai meklē savās iepriekšējās sarunās."
-
-#: C/prev-conv.page:36(page/title)
-msgid "View previous conversations"
-msgstr "Skatīt iepriekšējās sarunas"
-
-#: C/prev-conv.page:38(page/p)
-msgid ""
-"<app>Empathy</app> automatically saves all your text conversations you have "
-"with your contacts. You can <link xref=\"#search\">search through all of "
-"your previous conversations</link> or <link xref=\"#browse\">browse previous "
-"conversations</link> by contact and date."
-msgstr ""
-"<app>Empathy</app> automātiski saglabā visas teksta sarunas, kuras notiek "
-"starp kontaktiem. Tu vari <link xref=\"#search\">meklēt caur visām savām "
-"iepriekšējām sarunām</link> vai <link xref=\"#browse\">skatīt iepriekšējās "
-"sarunas</link>, šķirojot tās pēc kontakta un datuma."
-
-#: C/prev-conv.page:46(note/p)
-msgid ""
-"You do not need to be connected to the Internet to view and search your "
-"previous conversations."
-msgstr ""
-"Nav vajadzīgs savienojums ar internetu, lai skatītos un meklētu iepriekšējās "
-"sarunas."
-
-#: C/prev-conv.page:53(section/title)
-msgid "Search previous conversations"
-msgstr "Meklēt iepriekšējās sarunas"
-
-#: C/prev-conv.page:55(section/p)
-msgid ""
-"You can perform a full-text search through all of your previous "
-"conversations."
-msgstr ""
-"Tu vari veikt pilnu teksta meklēšanu caur visām savām iepriekšējām sarunām."
-
-#: C/prev-conv.page:59(item/p) C/prev-conv.page:87(item/p)
-#| msgid ""
-#| "From the <gui>Contact List</gui> window, choose <guiseq><gui>View</"
-#| "gui><gui>Previous Conversations</gui></guiseq>. Alternatively, press "
-#| "<key>F3</key>."
-msgid ""
-"From the <gui>Contact List</gui> window, choose <guiseq><gui>View</gui> "
-"<gui>Previous Conversations</gui></guiseq>. Alternatively, press <key>F3</"
-"key>."
-msgstr ""
-"No <gui>Kontaktu saraksts</gui> loga, izvēlies <guiseq><gui>Skats "
-"</gui><gui>Iepriekšējās sarunas</gui></guiseq>, vai arī, spied <key>F3</key>"
-
-#: C/prev-conv.page:63(item/p)
-msgid ""
-"Select an account from the drop-down list in the top. A list of contacts and "
-"chat room for that account will be shown below."
-msgstr ""
-"Izvēlies kontu no saraksta augšpusē. Saraksts ar kontaktiem un tērzēšanas "
-"istabām konkrētajam kontam tiks parādīts zemāk."
-
-#: C/prev-conv.page:67(item/p)
-msgid ""
-"Type the text you want to search for in the <gui>Search</gui> text field."
-msgstr "Teksta laukā <gui>Meklēt</gui> ievadi tekstu, ko vēlies atrast."
-
-#: C/prev-conv.page:71(item/p)
-msgid ""
-"Any conversations that matched your search terms will be shown. By default, "
-"conversations are ordered by date."
-msgstr ""
-"Tiks rādīta katras saruna, kas atbilst meklētajam tekstam. Pēc noklusējuma "
-"sarunas ir kārtotas pēc datuma."
-
-#: C/prev-conv.page:80(section/title)
-msgid "Browse previous conversations"
-msgstr "Skatīt iepriekšējās sarunas"
-
-#: C/prev-conv.page:82(section/p)
-msgid ""
-"You can browse your previous conversations with your contacts or in chat "
-"rooms by date."
-msgstr ""
-"Iepriekšējās sarunas ar saviem kontaktiem vai tērzēšanas istabām var "
-"pārlūkot pēc datuma."
-
-#: C/prev-conv.page:91(item/p)
-msgid ""
-"Select an account from the drop-down list in the top left. A list of "
-"contacts and chat room for that account will be shown below."
-msgstr ""
-"Izvēlies kontu no izkrītošās izvēlnes augšā kreisajā pusē. Saraksts ar "
-"kontaktiem un tērzēšanas istabām konkrētajam kontam tiks parādīts zemāk."
-
-#: C/prev-conv.page:95(item/p)
-msgid ""
-"Select a contact or chat room to view your previous conversations from. By "
-"default the most recent conversation will be shown."
-msgstr ""
-"Izvēlies kontaktu vai tērzēšanas istabu, kuru iepriekšējās sarunas vēlies "
-"skatīties. Pēc noklusējuma, lielākā daļa pēdējo sarunu tiks parādītas."
-
-#: C/prev-conv.page:99(item/p)
-msgid ""
-"You can browse your conversations by date. Days on which you had a "
-"conversation with the selected contact will be shown in bold text. Click a "
-"date to select it. Click the arrows next to the month and year to browse "
-"earlier dates."
-msgstr ""
-"Savas sarunas vari skatīties, šķirojot pēc datumiem. Dienas, kurās tev ir "
-"bijusi kāda saruna ar izvēlēto kontaktu, tiks iezīmētas treknrakstā. Spied "
-"uz datuma, lai to izvēlētos. Spied uz bultiņām pie mēneša un gada, lai "
-"skatītu agrākus datumus."
-
-#: C/prev-conv.page:105(section/p)
-msgid ""
-"You can search for text in the conversations by typing into the search field "
-"at the top. The matching conversations will be showed."
-msgstr ""
-"Meklēt teksta sarunās var, rakstot meklēšanas lauciņā augšpusē. Tiks rādītas "
-"atbilstošās sarunas."
-
-#: C/prev-conv.page:111(note/p)
-msgid ""
-"You can quickly view the previous conversations with one of your contacts "
-"from the <gui>Contact List</gui> window. Simply right click the contact and "
-"choose <gui>Previous Conversations</gui>. The <gui>Previous Conversations</"
-"gui> window will open with that contact already selected."
-msgstr ""
-"Iepriekšējās sarunas ar kādu no kontaktiem var ātri apskatīt no "
-"<gui>Kontaktu saraksts</gui> loga. Spied labo peles pogu uz kontakta un "
-"izvēlies <gui>Iepriekšējās sarunas</gui>. Atvērsies <gui>Iepriekšējās "
-"sarunas</gui> logs ar sarunām ar izvēlēto kontaktu."
-
-#: C/prob-conn-acctdisabled.page:7(info/desc)
-msgid ""
-"The instant messaging account that you want to use is not enabled in the "
-"list of accounts."
-msgstr "Tērzēšanas konts, ko vēlies izmantot, nav aktivēts kontaktu sarakstā."
-
-#: C/prob-conn-acctdisabled.page:34(page/title)
-msgid "My account is not enabled"
-msgstr "Mans konts nav aktivēts"
-
-#: C/prob-conn-acctdisabled.page:36(page/p)
-msgid ""
-"If the instant messaging account that you want to use is not enabled in the "
-"drop-down account list when you try to start a new conversation or join a "
-"room, your account details may not be correct."
-msgstr ""
-"Ja tērzēšanas konts, ko vēlies izmantot, nav aktivēts kontu sarakstā, "
-"mēģinot sākt jaunu sarunu vai pievienojoties kādai istabai, tad informācija "
-"par tavu kontu varētu būt nepareiza."
-
-#: C/prob-conn-acctdisabled.page:44(item/p) C/prob-conn-auth.page:45(item/p)
-#: C/prob-conn-neterror.page:53(item/p)
-msgid ""
-"Make sure that you are connected to the Internet, or to a local area network."
-msgstr "Pārliecinies, ka ir savienojums ar internetu vai ar lokālo tīklu."
-
-#: C/prob-conn-acctdisabled.page:49(item/p)
-msgid ""
-"Choose <guiseq><gui>Edit</gui><gui>Accounts</gui></guiseq> and select the "
-"account that is not working."
-msgstr ""
-"Izvēlies <guiseq><gui>Rediģēt</gui><gui>Konti</gui></guiseq> un izvēlies "
-"kontu, kurš nestrādā."
-
-#: C/prob-conn-acctdisabled.page:55(item/p) C/prob-conn-auth.page:63(item/p)
-msgid ""
-"Type your username and password again to make sure that they are correct."
-msgstr "Pārliecinies, ka lietotājvārdu un paroli esi ievadījis pareizi."
-
-#: C/prob-conn-acctdisabled.page:60(item/p)
-#: C/prob-conn-neterror.page:64(item/p)
-msgid ""
-"Check in the <gui>Advanced</gui> section that all the details are correct. "
-"You should be able to find these details from the website of the messaging "
-"service."
-msgstr ""
-"Pārbaudi, ka visa informācija, <gui>Paplašināti</gui> sadaļā ir pareiza. Tev "
-"vajadzētu atrast šo informāciju mājaslapā, kuras ziņojumu servisu izmanto."
-
-#: C/prob-conn-acctdisabled.page:66(item/p)
-msgid "Check that the account is switched on."
-msgstr "Pārliecinies, ka konts ir ieslēgts."
-
-#: C/prob-conn-auth.page:8(info/desc)
-msgid ""
-"An error message which says “<gui>Authentication failed</gui>” appears in "
-"the main window."
-msgstr ""
-"Kļūdas paziņojums, ka “<gui>Autentifikācija neizdevās</gui>” parādās "
-"galvenajā logā."
-
-#: C/prob-conn-auth.page:36(page/title)
-msgid "I get a message that says “Authentication failed”"
-msgstr "Es saņemu paziņojumu, ka \"Autentifikācija neizdevās\""
-
-#: C/prob-conn-auth.page:38(page/p)
-msgid ""
-"This kind of error happens when your instant messaging service is not "
-"allowing you to connect because it does not recognize your username or "
-"password for some reason."
-msgstr ""
-"Šis kļūdas tips notiek tad, kad tavs tērzēšanas serviss neatļauj "
-"savienoties, jo neatpazīst tavu lietotājvārdu vai paroli kāda iemesla dēļ."
-
-#: C/prob-conn-auth.page:50(item/p)
-msgid ""
-"Make sure that you have registered an account with the service you are "
-"trying to connect to. If you do not have an account, most services will not "
-"allow you to connect."
-msgstr ""
-"Pārliecinies, ka servisam, kuram mēģini pieslēgties, ir izveidots konts. Ja "
-"tev nav izveidots konts, vairums servisu neatļaus tev ar tiem savienoties."
-
-#: C/prob-conn-auth.page:57(item/p) C/prob-conn-name.page:43(item/p)
-#: C/prob-conn-neterror.page:58(item/p)
-msgid ""
-"Click the <media type=\"image\" mime=\"image/png\" src=\"figures/gtk-edit.png"
-"\">edit</media> icon in the error message."
-msgstr ""
-"Nospied uz <media type=\"image\" mime=\"image/png\" src=\"figures/gtk-edit."
-"png\">rediģēt</media> ikonas, kļūdas paziņojumā."
-
-#: C/prob-conn-auth.page:68(item/p)
-msgid ""
-"Deselect the <gui>Enabled</gui>, and then select it again to try to "
-"reconnect to the service."
-msgstr ""
-"Atslēdz opciju <gui>Aktivēts</gui> un tad ieslēdz to vēlreiz, lai mēģinātu "
-"atkal savienoties ar servisu."
-
-#: C/prob-conn-name.page:9(info/title)
-#| msgid "“Name in use”"
-msgctxt "link:error-msg"
-msgid "“Name in use”"
-msgstr "\"Vārds jau ir aizņemts\""
-
-#: C/prob-conn-name.page:10(info/desc)
-msgid ""
-"An error message which says “<gui>Name in use</gui>” appears in the main "
-"window."
-msgstr ""
-"Kļūdas paziņojums, kurš norāda \"<gui>Vārds jau ir aizņemts</gui>\" parādās "
-"galvenajā logā."
-
-#: C/prob-conn-name.page:33(page/title)
-msgid "I get a message that says “Name in use”"
-msgstr "Es saņemu paziņojumu, ka \"Vārds jau ir aizņemts\""
-
-#: C/prob-conn-name.page:35(page/p)
-msgid ""
-"This kind of error happens when you try to connect to your IRC account and "
-"you are using a nickname that is already being used by someone else on that "
-"particular network."
-msgstr ""
-"Šī kļūda notiek, kad tu mēģini savienoties ar savu IRC kontu un tu izmanto "
-"segvārdu kuru ir aizņēmis kāds cits dotajā tīklā."
-
-#: C/prob-conn-name.page:51(item/p)
-msgid "In the <gui>Nickname</gui> text box, type a new nickname."
-msgstr "<gui>Iesauka</gui> teksta laukā, ieraksti jaunu segvārdu."
-
-#: C/prob-conn-name.page:56(item/p)
-msgid ""
-"If you have registered that nickname within the network you are using, set "
-"the password for that nickname. For more information, see <link xref=\"irc-"
-"nick-password\"/>."
-msgstr ""
-"Ja esi reģistrējis segvārdu konkrētajā tīklā, kuru izmanto, uzliec tam "
-"paroli. Lai uzzinātu vairāk, lasi <link xref=\"irc-nick-password\"/>."
-
-#: C/prob-conn-name.page:65(item/p) C/prob-conn-neterror.page:79(item/p)
-msgid ""
-"Switch the account off, and then switch it on to try to reconnect to the "
-"service."
-msgstr ""
-"Izslēdz kontu un pēc tam atkal to ieslēdz, lai mēģinātu atkal savienoties ar "
-"servisu."
-
-#: C/prob-conn-neterror.page:7(info/desc)
-msgid ""
-"An error message which says “<gui>Network error</gui>” appears in the main "
-"window."
-msgstr ""
-"Kļūdas paziņojums, kurš saka “<gui>Tīkla kļūda</gui>” parādās galvenajā logā."
-
-#: C/prob-conn-neterror.page:34(page/title)
-msgid "I get a message that says “Network error”"
-msgstr "Es saņemu \"Tīkla kļūda” ziņojumu"
-
-#: C/prob-conn-neterror.page:42(page/p)
-msgid ""
-"This kind of error happens when <app>Empathy</app> cannot communicate with "
-"the instant messaging service for some reason."
-msgstr ""
-"Šāda kļūda notiek tad, kad <app>Empathy</app> nevar sazināties ar TZ "
-"serveri, kāda iemesla dēļ."
-
-#: C/prob-conn-neterror.page:46(page/p)
-msgid ""
-"Also, this kind of error happens when you try to use an IRC account without "
-"setting a nickname."
-msgstr ""
-"Kā arī, šī kļūda notiek tad, kad mēģini izmantot IRC kontu bez segvārda "
-"iestatīšanas."
-
-#: C/prob-conn-neterror.page:87(section/title)
-msgid "Proxy support"
-msgstr "Starpniekserveru atbalsts"
-
-#: C/prob-conn-neterror.page:88(section/p)
-msgid ""
-"At the moment <app>Empathy</app> can not be configured to work with a proxy."
-msgstr ""
-"Šobrīd <app>Empathy</app> nevar nokonfigurēt tā, lai tas strādātu caur "
-"starpniekserveri."
-
-#: C/prob-conn.page:7(info/desc)
-msgid "Diagnose common problems connecting to an instant messaging service."
-msgstr ""
-"Identificē biežākās problēmas, kas rodas, savienojoties ar kādu TZ servisu."
-
-#: C/prob-conn.page:29(page/title)
-msgid "Problems connecting to an instant messaging service"
-msgstr "Problēmas, savienojoties ar TZ servisu"
-
-#: C/remove-account.page:8(info/desc)
-msgid "Completely remove an account from <app>Empathy</app>."
-msgstr "Izņem kontu no <app>Empathy</app> pilnībā."
-
-#: C/remove-account.page:34(page/title)
-msgid "Remove an account"
-msgstr "Izņemt kontu"
-
-#: C/remove-account.page:36(page/p)
-msgid ""
-"You can completely remove an account from <app>Empathy</app> if you no "
-"longer wish to use the account. If you wish to use the account in "
-"<app>Empathy</app> again in the future, you will have to add your account "
-"details again."
-msgstr ""
-"Ja vairāk nevēlies izmantot savu kontu, to var pilnībā izņemt no "
-"<app>Empathy</app> lietotnes. Ja vēlēsies izmantot savu kontu atkārtoti, tev "
-"vajadzēs atkal ievadīt visu informāciju."
-
-#: C/remove-account.page:47(item/p)
-msgid ""
-"Select the account you wish to remove from the accounts list on the left "
-"side of the window."
-msgstr ""
-"Izvēlies kontu, ko vēlies izņemt, no kontu saraksta kreisajā loga pusē."
-
-#: C/remove-account.page:51(item/p)
-msgid "Click <gui style=\"button\">-</gui>."
-msgstr "Spied <gui style=\"button\">-</gui>."
-
-#: C/remove-account.page:54(item/p)
-msgid ""
-"A dialog will be shown asking for confirmation. Click the <gui>Remove</gui> "
-"button to permanently remove the account."
-msgstr ""
-"Parādīsies logs, kurā tev prasīs apstiprinājumu. Spied <gui>Izņemt</gui> "
-"pogu, lai pilnībā izņemtu savu kontu."
-
-#: C/remove-account.page:60(note/p)
-msgid ""
-"Even after removing an account, <app>Empathy</app> does not delete your "
-"conversation history for that account."
-msgstr ""
-"Pat pēc konta izņemšanas <app>Empathy</app> nedzēsīs tavu sarunu vēsturi."
-
-#: C/salut-protocol.page:8(info/desc)
-msgid "Understanding the People Nearby feature."
-msgstr "People Nearby pakalpojuma saprašana."
-
-#: C/salut-protocol.page:33(page/title)
-msgid "What is People Nearby?"
-msgstr "Kas ir People Nearby?"
-
-#: C/salut-protocol.page:40(page/p)
-msgid ""
-"The People Nearby service is a serverless communication service: you do not "
-"need to connect and authenticate to a central server in order to use it."
-msgstr ""
-"People Nearby serviss ir bez-servera komunikācijas serviss: tev nevajag "
-"savienoties un autentificēties ar centrālo serveri, lai to izmantotu."
-
-#: C/salut-protocol.page:45(page/p)
-msgid ""
-"This kind of serverless messaging system is restricted to a local area "
-"network and an active Internet connection is not necessary."
-msgstr ""
-"Šāds saziņas veids ir iespējams tikai lokālajā tīklā un tam nav nepieciešams "
-"aktīvs interneta savienojums."
-
-#: C/salut-protocol.page:49(page/p)
-msgid ""
-"The people that use this service inside the same local area network will be "
-"auto-discovered, and it will be possible to send them messages and files as "
-"with other services."
-msgstr ""
-"Cilvēki, kuri izmanto šo servisu vienā lokālajā tīklā automātiski tiks "
-"parādīti, un tiem varēsi nosūtīt ziņas un failus tieši tā pat, kā izmantojot "
-"citus servisus."
-
-#: C/salut-protocol.page:54(page/p)
-msgid ""
-"All the modern local area networks should be able to support this kind of "
-"service."
-msgstr ""
-"Visiem modernajiem lokālajiem tīkliem būtu jābūt spējīgiem atbalstīt šādu "
-"servisu."
-
-#: C/send-file.page:8(info/desc)
-msgid "Send a file from your computer to one of your contacts."
-msgstr "Nosūti failu no sava datora kādam kontaktam."
-
-#: C/send-file.page:36(page/title)
-msgid "Send files"
-msgstr "Sūtīt failus"
-
-#: C/send-file.page:45(item/p)
-msgid ""
-"Right click on the contact you want to send a file to, and choose <gui>Send "
-"file</gui>."
-msgstr ""
-"Veic labo peles klikšķi uz kontakta, kuram vēlies sūtīt failu un izvēlies "
-"<gui>Sūtīt failu</gui>."
-
-#: C/send-file.page:50(item/p)
-#| msgid ""
-#| "Click on the contact you want to send a file, and choose "
-#| "<guiseq><gui>Edit</gui><gui>Contact</gui><gui>Send file</gui></guiseq>."
-msgid ""
-"Click on the contact you want to send a file, and choose <guiseq><gui>Edit</"
-"gui> <gui>Contact</gui><gui>Send file</gui></guiseq>."
-msgstr ""
-"Spied uz kontakta, kuram vēlies sūtīt failu un izvēlies <guiseq><gui>Rediģēt "
-"</gui><gui>Kontakts</gui><gui>Sūtīt failu</gui></guiseq>."
-
-#: C/send-file.page:58(item/p)
-msgid "Select the file to send, and click on <gui>Send</gui>."
-msgstr "Izvēlies failu, kuru vēlies sūtīt, un spied uz <gui>Sūtīt</gui>."
-
-#: C/send-file.page:63(item/p)
-msgid "The <gui>File Transfers</gui> window will appear."
-msgstr "Parādīsies <gui>Failu pārsūtījumu</gui> logs."
-
-#: C/send-file.page:66(item/p)
-msgid ""
-"Wait for your contact to accept the file transfer, or click <gui>Stop</gui> "
-"to halt the transfer."
-msgstr ""
-"Gaidi, kamēr tavs kontakts pieņems faila sūtījumu, vai nospied <gui>Apturēt</"
-"gui>, lai apstādinātu sūtīšanu."
-
-#: C/send-file.page:72(item/p)
-msgid ""
-"Once the transfer is finished, it is possible to close the <gui>File "
-"Transfers</gui> window."
-msgstr ""
-"Kolīdz pārsūtīšana ir pabeigta, var aizvērt <gui>Failu pārsūtījumi</gui> "
-"logu."
-
-#: C/send-file.page:80(note/p)
-msgid ""
-"If you have multiple finished transfers listed in the window, click on "
-"<gui>Clear</gui> to empty the list. This will only remove the files from the "
-"list and will not delete them from your computer."
-msgstr ""
-"Ja sarakstā ir vairāki pabeigti sūtījumi, spied uz <gui>Attīrīt</gui>, lai "
-"nodzēstu sarakstu. Tas tikai izdzēsīs failus no saraksta, bet ne no tava "
-"datora."
-
-#: C/send-file.page:87(note/p)
-msgid ""
-"It is possible to send files only using the following services: <em>Jabber</"
-"em>, <em>Google Talk</em> and <em>People Nearby</em>."
-msgstr ""
-"Failus var sūtīt, izmantojot tikai sekojošos servisus: <em>Jabber</em>, "
-"<em>Google Talk</em> un <em>People Nearby</em>."
-
-#: C/send-file.page:93(note/p)
-msgid ""
-"In order to send a file to someone, you need to be connected to the "
-"Internet, or to a local area network."
-msgstr ""
-"lai kādam nosūtītu failu, ir jābūt savienojumam ar internetu vai ar lokālo "
-"tīklu."
-
-#: C/send-message.page:8(info/desc)
-msgid "Send a message to one of your contacts."
-msgstr "Sūti ziņu kādam no saviem kontaktiem."
-
-#: C/send-message.page:32(page/title)
-msgid "Send a message to someone"
-msgstr "Sūtīt kādam ziņu"
-
-#: C/send-message.page:36(item/p)
-msgid ""
-"From the <gui>Contact List</gui> window, double-click the name of the "
-"contact that you want to have a conversation with."
-msgstr ""
-"No <gui>Kontaktu saraksta</gui> loga, veic dubultklikšķi uz kontakta vārda, "
-"ar ko vēlies sākt sarunu."
-
-#: C/send-message.page:42(item/p)
-msgid ""
-"A new window will open. Type a message into the box at the bottom of the "
-"window and press <key>Enter</key> to send it."
-msgstr ""
-"Atvērsies jauns logs. Ieraksti ziņojumu teksta laukumā, loga lejasdaļā un "
-"nospied <key>Enter</key>, lai to nosūtītu."
-
-#: C/send-message.page:50(section/title)
-msgid "Send a message to a meta-contact"
-msgstr "Nosūtīt ziņu meta-kontaktam"
-
-#: C/send-message.page:58(item/p)
-msgid ""
-"Select the contact you want to have the conversation, and from the menu "
-"select <gui style=\"menuitem\">Chat</gui>."
-msgstr ""
-"Izvēlies kontaktu, ar kuru vēlies uzsākt sarunu un no izvēlnē izvēlies <gui "
-"style=\"menuitem\">Tērzēt</gui>."
-
-#: C/set-custom-status.page:9(info/desc)
-msgid "Add, edit or delete personal messages for your status."
-msgstr "Pievieno, rediģē vai dzēs personīgās ziņas no sava statusa."
-
-#: C/set-custom-status.page:15(credit/name)
-msgid "Jim Campbell"
-msgstr "Jim Campbell"
-
-#: C/set-custom-status.page:34(page/title)
-msgid "Set a custom message"
-msgstr "Iestatīt pielāgotu ziņojumu"
-
-#: C/set-custom-status.page:36(page/p)
-msgid ""
-"Sometimes you may want to set a custom message for your status, for example "
-"to let people know that you will be unavailable for a certain period of time."
-msgstr ""
-"Dažādos gadījumos varētu vēlēties iestatīt pielāgotu ziņojumu savam "
-"statusam, piemēram paust kontaktiem zināmu to, ka kādu laiku nebūsi pieejams."
-
-#: C/set-custom-status.page:40(page/p)
-msgid ""
-"It is possible to set a custom message based on the different statuses "
-"available."
-msgstr ""
-"Pielāgotu ziņojumu var iestatīt atkarībā no dažādajiem pieejamajiem "
-"statusiem."
-
-#: C/set-custom-status.page:46(item/p) C/set-custom-status.page:82(item/p)
-msgid ""
-"From the <gui>Contact List</gui> window, click on the drop-down list at the "
-"top."
-msgstr ""
-"No <gui>Kontaktu saraksts</gui> loga, izvēlies krītošo izvēlni, kura ir "
-"augšpusē."
-
-#: C/set-custom-status.page:52(item/p)
-msgid ""
-"Select the status you want to add a custom message to. You have to select "
-"the one identified with the label <gui>Custom Message</gui>."
-msgstr ""
-"Izvēlies statusu, kuram vēlies iestatīt pielāgotu ziņojumu. Tev vajag "
-"izvēlēties to, kurš ir apzīmēts kā <gui>Pielāgots ziņojums</gui>."
-
-#: C/set-custom-status.page:58(item/p)
-msgid ""
-"Enter your custom message in the text box at the top of the window, and "
-"press <key>Enter</key> to set the message."
-msgstr ""
-"Ievadi savu pielāgoto ziņojumu teksta laukā, loga augšpusē un nospied "
-"taustiņu <key>Enter</key>, lai šo ziņojumu iestatītu."
-
-#: C/set-custom-status.page:64(item/p)
-msgid ""
-"If you want to set the custom message as a favorite, saving it in order to "
-"use it again, click on the little heart on the right of the text box where "
-"you wrote your custom message."
-msgstr ""
-"Ja vēlies saglabāt pielāgoto ziņojumu, lai to izmantotu atkal vēlāk, spied "
-"uz mazo sirsniņu pa labi no teksta lauka, kurā ievadījāt pielāgoto ziņojumu."
-
-#: C/set-custom-status.page:69(item/p)
-msgid ""
-"If you do not do it, the custom message will not be available the next time "
-"you use <app>Empathy</app>. It will be saved only for the current session."
-msgstr ""
-"Ja to neizdarīsi, pielāgotais ziņojums nebūs pieejams, nākamreiz atverot "
-"<app>Empathy</app>. Tas tiks saglabāts tikai šajā sesijā."
-
-#: C/set-custom-status.page:78(section/title)
-msgid "Edit and remove a custom message"
-msgstr "Rediģēt un izņemt pielāgotu ziņojumu"
-
-#: C/set-custom-status.page:88(item/p)
-msgid "Select <gui>Edit Custom Message</gui>."
-msgstr "Izvēlies <gui>Labot pielāgotos ziņojumus</gui>."
-
-#: C/set-custom-status.page:95(item/p)
-msgid "To edit a custom message:"
-msgstr "Lai labotu pielāgoto ziņojumu:"
-
-#: C/set-custom-status.page:100(item/p)
-msgid ""
-"From the <gui>Saved Presets</gui> box, select the status message you want to "
-"edit and double-click on it."
-msgstr ""
-"No <gui>Saglabātie iepriekšnoteiktie</gui> kastes, izvēlies statusa "
-"ziņojumu, kuru vēlies labot, un veic uz tā dubultklikšķi."
-
-#: C/set-custom-status.page:106(item/p)
-msgid "Type the new custom message and press <key>Enter</key> to modify it."
-msgstr ""
-"Ievadi jaunu pielāgoto ziņojumu un nospied <key>Enter</key>, lai to mainītu."
-
-#: C/set-custom-status.page:113(item/p)
-msgid "To remove a custom message:"
-msgstr "Lai izņemtu pielāgoto ziņojumu:"
-
-#: C/set-custom-status.page:118(item/p)
-msgid ""
-"From the <gui>Saved Presets</gui> box, select the status message you want to "
-"remove."
-msgstr ""
-"No <gui>Saglabātie iepriekšnoteiktie</gui> kastes, izvēlies statusa "
-"ziņojumu, kuru vēlies izņemt."
-
-#: C/set-custom-status.page:124(item/p)
-msgid "Click on the <gui>Remove</gui> button."
-msgstr "Nospied uz <gui>Izņemt</gui> pogas."
-
-#: C/set-custom-status.page:133(item/p)
-msgid "When finished, click on <gui>Close</gui>."
-msgstr "Kad esi pabeidzis, spied uz <gui>Aizvērt</gui>."
-
-#: C/set-custom-status.page:140(note/p)
-msgid ""
-"When you edit a custom message, it will not be set as the current status "
-"message. You will need to select it from the <gui>Contact List</gui> window."
-msgstr ""
-"Rediģējot pielāgotu ziņojumu, tas netiks iestatīts kā pašreizējā statusa "
-"ziņojums. Tas jāizvēlas no <gui>Kontaktu saraksta</gui> loga."
-
-#: C/share-desktop.page:7(info/desc)
-msgid "Show your desktop to your contacts."
-msgstr "Parādi savu darbvirsmu saviem kontaktiem."
-
-#: C/share-desktop.page:18(credit/name)
-msgid "Ekaterina Gerasimova"
-msgstr "Ekaterina Gerasimova"
-
-#: C/share-desktop.page:33(page/title)
-msgid "Share your desktop"
-msgstr "Dalīties ar savu darbvirsmu"
-
-#: C/share-desktop.page:35(page/p)
-msgid ""
-"It is possible to share your desktop with some of your contacts. You can use "
-"this functionality to show your desktop to your contacts to, for example, "
-"ask for help or help your contacts resolve a problem."
-msgstr ""
-"Savu darbvirsmu var koplietot ar dažiem no saviem kontaktiem. Tu vari "
-"izmantot šo funkciju, lai parādītu savu darbvirsmu kontaktiem, piemēram, lai "
-"paprasītu palīdzību kādā problēmā."
-
-#: C/share-desktop.page:42(note/p)
-msgid ""
-"To be able to share your desktop, you need to have a VNC server, which has "
-"support for the feature, installed on your system. <app>Vino</app>, the "
-"GNOME VNC server, has the required support."
-msgstr ""
-"Lai varētu dalīties ar darbvirsmu, šajā sistēmā jābūt uzinstalētam VNC "
-"serverim, kurš atbalsta šo pakalpojumu. <app>Vino</app> — GNOME veidotajam "
-"VNC serverim — ir šādas atbalsts."
-
-#: C/share-desktop.page:51(item/p)
-msgid "From the <gui>Contact List</gui> window, do one of the following:"
-msgstr "<gui>Kontaktu saraksts</gui> logā veic vienu no sekojošajām darbībām:"
-
-#: C/share-desktop.page:56(item/p)
-#| msgid ""
-#| "Select the contact you want to share your desktop with and choose "
-#| "<guiseq><gui>Edit</gui><gui>Contact</gui><gui>Share My Desktop</gui></"
-#| "guiseq>."
-msgid ""
-"Select the contact you want to share your desktop with and choose "
-"<guiseq><gui>Edit</gui><gui>Contact</gui> <gui>Share My Desktop</gui></"
-"guiseq>."
-msgstr ""
-"Izvēlies kontaktu ar kuru vēlies dalīt savu darbvirsmu un izvēlies <guiseq><"
-"gui>Rediģēt</gui><gui>Kontakts</gui><gui>Dalīties ar darbvirsmu</gui></"
-"guiseq>."
-
-#: C/share-desktop.page:63(item/p)
-msgid ""
-"Right-click on the name of the contact you want to share your desktop with "
-"and select <gui>Share My Desktop</gui>."
-msgstr ""
-"Ar labo peles klikšķi nospied uz kontakta, ar kur vēlies dalīt darbvirsmu un "
-"izvēlies <gui>Dalīties ar darbvirsmu</gui>."
-
-#: C/share-desktop.page:71(item/p)
-msgid ""
-"An invitation to view your desktop will be sent to the contact you have "
-"selected. To view your desktop, they will need to accept it."
-msgstr ""
-"Ielūgums skatīties tavu darbvirsmu tiks nosūtīts izvēlētajam kontaktam. Lai "
-"varētu skatīties tavu darbvirsmu, kontaktam vajadzēs pieņemt ielūgumu."
-
-#: C/share-desktop.page:77(item/p)
-msgid ""
-"You can disconnect the contact from your computer using your desktop sharing "
-"application."
-msgstr ""
-"Tu vari atvienot kontaktu no savas darbvirsmas, izmantojot savu darbvirsmas "
-"koplietošanas lietotni."
-
-#: C/share-desktop.page:82(note/p)
-msgid ""
-"For more information about how to use the remote desktop sharing "
-"application, refer to its help."
-msgstr ""
-"Lai uzzinātu vairāk, kā izmantot darbvirsmas koplietošanas lietotnes, lasiet "
-"to dokumentāciju."
-
-#: C/share-desktop.page:90(page/p)
-msgid ""
-"When you share your desktop with someone else, it is possible to experience "
-"system performance slowdown and low Internet speed."
-msgstr ""
-"Daloties ar savu darbvirsmu, ir iespējama sistēmas palēnināšanās un zemāks "
-"interneta ātrums."
-
-#: C/share-desktop.page:96(note/p)
-msgid ""
-"Some of your contacts may not be able to use this feature. It is necessary "
-"for them to have version 2.28, or newer, of <app>Empathy</app> and a "
-"compatible remote desktop viewer application installed in their system."
-msgstr ""
-"Dažiem no taviem kontaktiem var nebūt iespējas izmantot šo pakalpojumu. Viņu "
-"<app>Empathy</app> versijai ir jābūt vismaz 2.28. un savietojama darbvirsmas "
-"koplietošanas/skatīšanas lietotne."
-
-#. This is a reference to an external file such as an image or video. When
-#. the file changes, the md5 hash will change to let you know you need to
-#. update your localized copy. The msgstr is not used at all. Set it to
-#. whatever you like once you have updated your copy of the file.
-#: C/status-icons.page:39(media)
-#| msgid ""
-#| "@@image: 'figures/available.png'; md5=2196b2f0ad4ce26fdb7b9d48e75d1947"
-msgctxt "_"
-msgid ""
-"external ref='figures/available.png' md5='2196b2f0ad4ce26fdb7b9d48e75d1947'"
-msgstr ""
-"external ref='figures/available.png' md5='2196b2f0ad4ce26fdb7b9d48e75d1947'"
-
-#. This is a reference to an external file such as an image or video. When
-#. the file changes, the md5 hash will change to let you know you need to
-#. update your localized copy. The msgstr is not used at all. Set it to
-#. whatever you like once you have updated your copy of the file.
-#: C/status-icons.page:45(media)
-#| msgid "@@image: 'figures/busy.png'; md5=15eb2adff5faedf97b0cb9105d09410a"
-msgctxt "_"
-msgid "external ref='figures/busy.png' md5='15eb2adff5faedf97b0cb9105d09410a'"
-msgstr "external ref='figures/busy.png' md5='15eb2adff5faedf97b0cb9105d09410a'"
-
-#. This is a reference to an external file such as an image or video. When
-#. the file changes, the md5 hash will change to let you know you need to
-#. update your localized copy. The msgstr is not used at all. Set it to
-#. whatever you like once you have updated your copy of the file.
-#: C/status-icons.page:53(media)
-#| msgid "@@image: 'figures/away.png'; md5=9c504d6ffa0cf1a9cc8933d16e1bea33"
-msgctxt "_"
-msgid "external ref='figures/away.png' md5='9c504d6ffa0cf1a9cc8933d16e1bea33'"
-msgstr "external ref='figures/away.png' md5='9c504d6ffa0cf1a9cc8933d16e1bea33'"
-
-#. This is a reference to an external file such as an image or video. When
-#. the file changes, the md5 hash will change to let you know you need to
-#. update your localized copy. The msgstr is not used at all. Set it to
-#. whatever you like once you have updated your copy of the file.
-#.
-#. This is a reference to an external file such as an image or video. When
-#. the file changes, the md5 hash will change to let you know you need to
-#. update your localized copy. The msgstr is not used at all. Set it to
-#. whatever you like once you have updated your copy of the file.
-#: C/status-icons.page:62(media) C/status-icons.page:69(media)
-#| msgid "@@image: 'figures/offline.png'; md5=c5b0c21181cbd6e13f8909243c0fa964"
-msgctxt "_"
-msgid ""
-"external ref='figures/offline.png' md5='c5b0c21181cbd6e13f8909243c0fa964'"
-msgstr ""
-"external ref='figures/offline.png' md5='c5b0c21181cbd6e13f8909243c0fa964'"
-
-#: C/status-icons.page:7(info/desc)
-msgid "Understanding the various statuses and status icons."
-msgstr "Dažādo statusu un statusu ikonu izprašana."
-
-#: C/status-icons.page:35(page/title)
-msgid "Status Types and Icons"
-msgstr "Statusu tipi un ikonas"
-
-#: C/status-icons.page:39(item/title)
-#| msgid ""
-#| "Click the <media type=\"image\" mime=\"image/png\" src=\"figures/gtk-edit."
-#| "png\">edit</media> icon in the error message."
-msgid ""
-"<media type=\"image\" mime=\"image/png\" src=\"figures/available.png"
-"\">Available icon</media> <gui>Available</gui>"
-msgstr ""
-"<media type=\"image\" mime=\"image/png\" src=\"figures/available.png"
-"\">\"Pieejams\" ikona</media> <gui>Pieejams</gui>"
-
-#: C/status-icons.page:41(item/p)
-msgid ""
-"Use the <em>Available</em> status when you are at your computer and able to "
-"chat with your contacts. You can set a custom message for this status."
-msgstr ""
-"Izmanto <em>Pieejams</em> statusu kad atrodies pie sava datora un esi "
-"spējīgs sazināties ar kontaktiem. Šim statusam var iestatīt paša izvēlētu "
-"ziņojumu."
-
-#: C/status-icons.page:45(item/title)
-#| msgid ""
-#| "Click the <media type=\"image\" mime=\"image/png\" src=\"figures/gtk-edit."
-#| "png\">edit</media> icon in the error message."
-msgid ""
-"<media type=\"image\" mime=\"image/png\" src=\"figures/busy.png\">Busy icon</"
-"media> <gui>Busy</gui>"
-msgstr ""
-"<media type=\"image\" mime=\"image/png\" src=\"figures/busy.png\">"
-"\"Aizņemts\" ikona</"
-"media> <gui>Aizņemts</gui>"
-
-#: C/status-icons.page:47(item/p)
-msgid ""
-"Use the <em>Busy</em> status to let your contacts know that you don’t want "
-"to chat right now. They can still contact you, for instance if they have "
-"something urgent they need to discuss. By default, <app>Empathy</app> will "
-"not use notification bubbles and sounds when you are busy. You can set a "
-"custom message for this status."
-msgstr ""
-"Izmanto <em>Aizņemts</em> statusu, lai darītu saviem kontaktiem zināmu, ka "
-"nevēlies pašlaik sazināties. Viņi joprojām var ar tevi sazināties, piemēram, "
-"ja ir jāpasaka kas steidzams. Pēc noklusējuma, <app>Empathy</app> neizmantos "
-"paziņojumu burbuļus un skaņas, kad ir uzlikts šis statuss. Šim statusam vari "
-"iestatīt paša izvēlētu ziņojumu."
-
-#: C/status-icons.page:53(item/title)
-#| msgid ""
-#| "Click the <media type=\"image\" mime=\"image/png\" src=\"figures/gtk-edit."
-#| "png\">edit</media> icon in the error message."
-msgid ""
-"<media type=\"image\" mime=\"image/png\" src=\"figures/away.png\">Away icon</"
-"media> <gui>Away</gui>"
-msgstr ""
-"<media type=\"image\" mime=\"image/png\" src=\"figures/away.png\">\"Prom\" "
-"ikona</"
-"media> <gui>Prom</gui>"
-
-#: C/status-icons.page:55(item/p)
-msgid ""
-"Use the <em>Away</em> status when you are going away from your computer. "
-"<app>Empathy</app> automatically sets your status to Away if you do not use "
-"your computer for a while, or if your screensaver is on. By default, "
-"<app>Empathy</app> will not use notification bubbles and sounds when you are "
-"away. You can set a custom message for this status."
-msgstr ""
-"Izmanto <em>Prom</em> statusu, kad dodies prom no datora. <app>Empathy</app> "
-"automātiski jums uzliks šo statusu, ja kādu laiku nebūsi izmantojis datoru, "
-"vai, ja ekrānsaudzētājs būs aktīvs. Pēc noklusējuma, <app>Empathy</app> "
-"neizmantos paziņojumu burbuļus un skaņas, kad ir uzlikts šis statuss. Šim "
-"statusam var uzstādīt paša izvēlētu ziņojumu."
-
-#: C/status-icons.page:62(item/title)
-#| msgid ""
-#| "Click the <media type=\"image\" mime=\"image/png\" src=\"figures/gtk-edit."
-#| "png\">edit</media> icon in the error message."
-msgid ""
-"<media type=\"image\" mime=\"image/png\" src=\"figures/offline.png\">Offline "
-"icon</media> <gui>Invisible</gui>"
-msgstr ""
-"<media type=\"image\" mime=\"image/png\" src=\"figures/offline.png\">"
-"\"Nesaistē\" "
-"ikona</media> <gui>Neredzams</gui>"
-
-#: C/status-icons.page:64(item/p)
-msgid ""
-"When you set your status to <em>Invisible</em>, you will appear as offline "
-"to your contacts. You will still be connected to your accounts, and you "
-"still see your contacts’ statuses and start conversations with them."
-msgstr ""
-"Kad statuss ir <em>Neredzams</em>, tavi kontakti redzēs, ka esi nesaistē."
-"Tajā pat laikā tu vēl joprojām būsi savienots ar visiem kontiem, un tu "
-"varēsi redzēt savu kontaktu statusus, kā arī ar viņiem sazināties."
-
-#: C/status-icons.page:69(item/title)
-#| msgid ""
-#| "Click the <media type=\"image\" mime=\"image/png\" src=\"figures/gtk-edit."
-#| "png\">edit</media> icon in the error message."
-msgid ""
-"<media type=\"image\" mime=\"image/png\" src=\"figures/offline.png\">Offline "
-"icon</media> <gui>Offline</gui>"
-msgstr ""
-"<media type=\"image\" mime=\"image/png\" src=\"figures/offline.png\">"
-"\"Nesaistē\" "
-"ikona</media> <gui>Nesaistē</gui>"
-
-#: C/status-icons.page:71(item/p)
-msgid ""
-"Setting your status to <em>Offline</em> disconnects you from all of your "
-"accounts."
-msgstr ""
-"Savu konta statusu iestatīšana uz <em>Nesaistē</em>, atvieno tevi no visiem "
-"taviem kontiem."
-
-#: C/video-call.page:10(info/desc)
-msgid "Start a video conversation with one of your contacts."
-msgstr "Sākt video sarunu ar vienu no kontaktiem."
-
-#: C/video-call.page:29(page/title)
-msgid "Start a video conversation"
-msgstr "Sākt video sarunu"
-
-#: C/video-call.page:31(page/p)
-msgid ""
-"If you have a webcam, you can call your contacts and have a video "
-"conversation with them. This feature only works with certain types of "
-"accounts, and it requires the other person to have an application that "
-"supports video calls."
-msgstr ""
-"Ja tev ir tīmekļa kamera, tu vari sazvanīt savus kontaktus un veikt video "
-"sarunas ar tiem. Šī iespēja darbojas tikai ar noteikta veida kontiem un "
-"otram sarunas dalībniekam jābūt lietotnei, kas atbalsta video zvanus."
-
-#: C/video-call.page:38(item/p)
-msgid ""
-"From the <gui>Contact List</gui> window, click the <media type=\"image\" "
-"mime=\"image/png\" src=\"figures/camera-web.png\">video call</media> icon "
-"next to the name of the contact you wish to call and choose <gui style="
-"\"menuitem\">Video Call</gui>."
-msgstr ""
-"<gui>Kontaktu saraksta</gui> logā spied uz <media type=\"image\" mime="
-"\"image/png\" src=\"figures/camera-web.png\">video zvans</media> ikonas "
-"pretī kontakta vārdam, kuram vēlies zvanīt un izvēlies <gui style=\"menuitem"
-"\">Video zvans</gui>."
-
-#: C/video-call.page:55(note/p)
-msgid ""
-"To turn a video conversation into an audio conversation, choose <guiseq><gui "
-"style=\"menu\">Video</gui><gui style=\"menuitem\">Video Off</gui></guiseq>."
-msgstr ""
-"Lai pārvērstu video zvanu par audio sarunu, izvēlies <guiseq><gui style="
-"\"menu\">Video</gui><gui style=\"menuitem\">Izslēgt video</gui></guiseq>."
-
-#: C/video-call.page:61(section/title)
-msgid "Start a video conversation with a meta-contact"
-msgstr "Sākt video sarunu ar meta-kontaktu"
-
-#: C/video-call.page:69(item/p)
-msgid ""
-"Select the contact you want to have the conversation, and from the menu "
-"select <gui style=\"menuitem\">Video Call</gui>."
-msgstr ""
-"Izvēlies kontaktu, ar kuru vēlies sazināties un izvēlnē izvēlies <gui style="
-"\"menuitem\">Video zvans</gui>."
-
-#~ msgid "milo@ubuntu.com"
-#~ msgstr "milo@ubuntu.com"
-
-#~ msgid "shaunm@gnome.org"
-#~ msgstr "shaunm@gnome.org"
-
-#~ msgid "Available icon"
-#~ msgstr "'Pieejams' ikona"
-
-#~ msgid "Available"
-#~ msgstr "Pieejams"
-
-#~ msgid "Busy icon"
-#~ msgstr "'Aizņemts' ikona"
-
-#~ msgid "Busy"
-#~ msgstr "Aizņemts"
-
-#~ msgid "Away icon"
-#~ msgstr "'Prom' ikona"
-
-#~ msgid "Away"
-#~ msgstr "Prom"
-
-#~ msgid "Offline icon"
-#~ msgstr "'Nesaistē' ikona"
-
-#~ msgid "Invisible"
-#~ msgstr "Neredzams"
-
-#~ msgid "Offline"
-#~ msgstr "Nesaistē"
-
-#~ msgid "kittykat3756@gmail.com"
-#~ msgstr "kittykat3756@gmail.com"
-
-#~ msgid "jwcampbell@gmail.com"
-#~ msgstr "jwcampbell@gmail.com"
-
-#~ msgid "philbull@gmail.com"
-#~ msgstr "philbull@gmail.com"
-
-#~ msgid "I'd like to see this played up a bit more."
-#~ msgstr "Es gribētu redzēt šeit vairāk informācijas."
-
-#~ msgid "shaunm"
-#~ msgstr "shaunm"
-
-#~ msgid ""
-#~ "Empathy no longer allows you to create an IRC account without a valid "
-#~ "nick. I've removed the guide link. Remove the text."
-#~ msgstr ""
-#~ "Empathy vairāk neatļauj izveidot IRC kontu bez derīga segvārda. Esmu "
-#~ "izņēmis pamācības saiti. Izņemiet tekstu."
-
-#~ msgid "Install telepathy-idle"
-#~ msgstr "Instalēt telepathy-idle"
-
-#~ msgid "peter.haslam@freenet.de"
-#~ msgstr "peter.haslam@freenet.de"
-
-#~ msgid "Icon for audio conversation"
-#~ msgstr "Ikona audio sarunai"
-
-#~ msgid "Icon for video conversation"
-#~ msgstr "Ikona video sarunai"
-
-#, fuzzy
-#~ msgid ""
-#~ "I'd like to do tables like this using nothing for No and ✔ for Yes, but "
-#~ "we need to look at the accessibility impact. I've <link href=\"http://"
-#~ "mail.gnome.org/archives/gnome-doc-list/2009-September/msg00006.html"
-#~ "\">asked the accessibility team</link> for input."
-#~ msgstr ""
-#~ "Es vēlētos veidot šāda veida tabulas, neizmantojot neko Nē vietā un ✔ Jā "
-#~ "vietā, taču mums jāņem vērā, ka tas var ieteikmēt pieejamību. Es esmu "
-#~ "<link href=\"http://mail.gnome.org/archives/gnome-doc-list/2009-September/"
-#~ "msg00006.html\">pajautājis pieejamības komandai</link> par so gadījumu."
-
-#, fuzzy
-#~ msgid ""
-#~ "There's recent work on telepathy-butterfly and papyon to support audio "
-#~ "and video for MSN. It might be released in time for 2.28, but since it "
-#~ "doesn't follow the Gnome release schedule, I can't be sure. If it looks "
-#~ "like it's going to ship, let's mark it Yes."
-#~ msgstr ""
-#~ "Pēdējā laikā tiek strādāts pie telepathy-butterfy un papyon, lai tie "
-#~ "atbalstītu audio saziņu, un pie MSN, lai tas atbalstītu video saziņu. Šis "
-#~ "darbs varētu tikt pabeigts laikā, lai palaistu to kopā ar 2.28 versiju, "
-#~ "taču tā, kā tas neseko Gnome palaišanas grafikiem, es neesmu par to "
-#~ "pārliecināts. Ja tas izskatās, ka būs gatavs, atzīmēsim to kā Jā."
-
-#~ msgid "Resource"
-#~ msgstr "Resurss"
-
-#~ msgid "Priority"
-#~ msgstr "Prioritāte"
-
-#~ msgid "Network"
-#~ msgstr "Tīkls"
-
-#~ msgid "Nickname"
-#~ msgstr "Iesauka"
-
-#~ msgid "Password"
-#~ msgstr "Parole"
-
-#~ msgid "Quit message"
-#~ msgstr "Iziešanas ziņa"
-
-#~ msgid "Charset"
-#~ msgstr "Rakstzīmju kopa"
-
-#~ msgid "Servers"
-#~ msgstr "Serveri"
diff --git a/help/pl/pl.po b/help/pl/pl.po
deleted file mode 100644
index 342520d1..00000000
--- a/help/pl/pl.po
+++ /dev/null
@@ -1,3448 +0,0 @@
-# -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
-# Aviary.pl
-# Jeśli masz jakiekolwiek uwagi odnoszące się do tłumaczenia lub chcesz
-# pomóc w jego rozwijaniu i pielęgnowaniu, napisz do nas:
-# gnomepl@aviary.pl
-# -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
-msgid ""
-msgstr ""
-"Project-Id-Version: empathy\n"
-"POT-Creation-Date: 2011-12-18 15:36+0000\n"
-"PO-Revision-Date: 2010-03-15 21:39+0100\n"
-"Last-Translator: Aleksander Łukasiewicz <aleksander@lukasiewicz.net>\n"
-"Language-Team: Polish <gnomepl@aviary.pl>\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Language: pl\n"
-"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 "
-"|| n%100>=20) ? 1 : 2);\n"
-"X-Poedit-Language: Polish\n"
-"X-Poedit-Country: Poland\n"
-
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/video-call.page:39(None) C/audio-video.page:70(None)
-#: C/audio-call.page:36(None)
-msgid "@@image: 'figures/camera-web.png'; md5=8166b4372f25b78cbf5a64fe2eac2ce5"
-msgstr ""
-"@@image: 'figures/camera-web.png'; md5=8166b4372f25b78cbf5a64fe2eac2ce5"
-
-#: C/video-call.page:10(desc)
-msgid "Start a video conversation with one of your contacts."
-msgstr "Rozpoczęcie wideorozmowy z jednym z kontaktów."
-
-#: C/video-call.page:22(name) C/status-icons.page:16(name)
-#: C/share-desktop.page:14(name) C/set-custom-status.page:19(name)
-#: C/send-file.page:21(name) C/salut-protocol.page:18(name)
-#: C/remove-account.page:18(name) C/prob-conn-neterror.page:19(name)
-#: C/prob-conn-name.page:18(name) C/prob-conn-auth.page:21(name)
-#: C/prob-conn-acctdisabled.page:19(name) C/prev-conv.page:16(name)
-#: C/link-contacts.page:15(name) C/irc-start-conversation.page:15(name)
-#: C/irc-send-file.page:16(name) C/irc-nick-password.page:18(name)
-#: C/irc-manage.page:20(name) C/irc-join-room.page:16(name)
-#: C/irc-join-pwd.page:17(name) C/irc-commands.page:10(name)
-#: C/introduction.page:13(name) C/index.page:19(name)
-#: C/import-account.page:23(name) C/hide-contacts.page:11(name)
-#: C/group-conversations.page:19(name) C/geolocation-what-is.page:18(name)
-#: C/geolocation-turn.page:18(name) C/geolocation-supported.page:16(name)
-#: C/geolocation-privacy.page:17(name) C/geolocation-not-showing.page:17(name)
-#: C/geolocation.page:17(name) C/favorite-rooms.page:14(name)
-#: C/disable-account.page:21(name) C/create-account.page:19(name)
-#: C/audio-video.page:17(name) C/audio-call.page:19(name)
-#: C/add-account.page:20(name)
-msgid "Milo Casagrande"
-msgstr "Milo Casagrande"
-
-#: C/video-call.page:23(email) C/status-icons.page:17(email)
-#: C/share-desktop.page:15(email) C/set-custom-status.page:20(email)
-#: C/send-file.page:22(email) C/salut-protocol.page:19(email)
-#: C/remove-account.page:19(email) C/prob-conn-neterror.page:20(email)
-#: C/prob-conn-name.page:19(email) C/prob-conn-auth.page:22(email)
-#: C/prob-conn-acctdisabled.page:20(email) C/prev-conv.page:17(email)
-#: C/link-contacts.page:16(email) C/irc-start-conversation.page:16(email)
-#: C/irc-send-file.page:17(email) C/irc-nick-password.page:19(email)
-#: C/irc-manage.page:21(email) C/irc-join-room.page:17(email)
-#: C/irc-join-pwd.page:18(email) C/irc-commands.page:11(email)
-#: C/introduction.page:14(email) C/index.page:20(email)
-#: C/import-account.page:24(email) C/hide-contacts.page:12(email)
-#: C/group-conversations.page:20(email) C/geolocation-what-is.page:19(email)
-#: C/geolocation-turn.page:19(email) C/geolocation-supported.page:17(email)
-#: C/geolocation-privacy.page:18(email)
-#: C/geolocation-not-showing.page:18(email) C/geolocation.page:18(email)
-#: C/favorite-rooms.page:15(email) C/disable-account.page:22(email)
-#: C/create-account.page:20(email) C/audio-video.page:18(email)
-#: C/audio-call.page:20(email) C/add-account.page:21(email)
-msgid "milo@ubuntu.com"
-msgstr "milo@ubuntu.com"
-
-#: C/video-call.page:26(p) C/status-icons.page:24(p)
-#: C/share-desktop.page:22(p) C/set-custom-status.page:23(p)
-#: C/send-message.page:21(p) C/send-file.page:25(p)
-#: C/salut-protocol.page:22(p) C/remove-account.page:22(p)
-#: C/prob-conn.page:18(p) C/prob-conn-neterror.page:23(p)
-#: C/prob-conn-name.page:22(p) C/prob-conn-auth.page:25(p)
-#: C/prob-conn-acctdisabled.page:23(p) C/prev-conv.page:24(p)
-#: C/link-contacts.page:19(p) C/irc-start-conversation.page:19(p)
-#: C/irc-send-file.page:20(p) C/irc-nick-password.page:22(p)
-#: C/irc-manage.page:24(p) C/irc-join-room.page:20(p)
-#: C/irc-join-pwd.page:21(p) C/irc-commands.page:14(p)
-#: C/introduction.page:17(p) C/index.page:23(p) C/import-account.page:31(p)
-#: C/hide-contacts.page:15(p) C/group-conversations.page:23(p)
-#: C/geolocation-what-is.page:22(p) C/geolocation-turn.page:22(p)
-#: C/geolocation-supported.page:20(p) C/geolocation-privacy.page:21(p)
-#: C/geolocation-not-showing.page:21(p) C/geolocation.page:21(p)
-#: C/favorite-rooms.page:18(p) C/disable-account.page:29(p)
-#: C/create-account.page:23(p) C/change-status.page:28(p)
-#: C/audio-video.page:21(p) C/audio-call.page:23(p) C/add-contact.page:22(p)
-#: C/add-account.page:28(p) C/accounts-window.page:22(p)
-#: C/account-jabber.page:18(p) C/account-irc.page:20(p)
-msgid "Creative Commons Share Alike 3.0"
-msgstr "Creative Commons Na tych samych warunkach 3.0"
-
-#: C/video-call.page:29(title)
-msgid "Start a video conversation"
-msgstr "Rozpoczęcie wideorozmowy"
-
-#: C/video-call.page:31(p)
-#, fuzzy
-msgid ""
-"If you have a webcam, you can call your contacts and have a video "
-"conversation with them. This feature only works with certain types of "
-"accounts, and it requires the other person to have an application that "
-"supports video calls."
-msgstr ""
-"Jeśli podłączona jest kamera internetowa można połączyć się z kontaktami i "
-"prowadzić z nimi wideorozmowę. Ta funkcja działają jedynie z pewnymi "
-"rodzajami kont i wymaga, aby inna osoba posiadała program obsługujący "
-"wideorozmowy."
-
-#: C/video-call.page:38(p)
-#, fuzzy
-msgid ""
-"From the <gui>Contact List</gui> window, click the <media type=\"image\" "
-"mime=\"image/png\" src=\"figures/camera-web.png\">video call</media> icon "
-"next to the name of the contact you wish to call and choose <gui style="
-"\"menuitem\">Video Call</gui>."
-msgstr ""
-"W oknie <gui>Listy kontaktów</gui> należy nacisnąć na ikonę <media type="
-"\"image\" mime=\"image/png\" src=\"figures/camera-web.png\">wideorozmowy</"
-"media> znajdującej się obok nazwy kontaktu, z którym chcemy ją nawiązać i "
-"wybrać <gui style=\"menuitem\">Wideorozmowa</gui>. Można również nacisnąć "
-"kontakt prawym przyciskiem myszy i wybrać <gui>Wideorozmowa</gui>."
-
-#: C/video-call.page:44(p) C/audio-call.page:42(p)
-msgid ""
-"A new window will open. When the connection is established, you will see "
-"<gui>Connected</gui> at the bottom of the window, along with the total "
-"conversation time."
-msgstr ""
-"Zostanie otworzone nowe okno. Po ustanowieniu połączenia, na dole okna "
-"pojawi się komunikat <gui>Połączony</gui> wraz z czasem rozmowy."
-
-#: C/video-call.page:49(p) C/audio-call.page:48(p)
-#, fuzzy
-msgid "To end the conversation, click on <gui style=\"button\">Hang up</gui>."
-msgstr ""
-"Aby zakończyć rozmowę, należy wybrać <guiseq><gui style=\"menu\">Zadzwoń</"
-"gui><gui style=\"menuitem\">Rozłącz</gui></guiseq>."
-
-#: C/video-call.page:55(p)
-#, fuzzy
-msgid ""
-"To turn a video conversation into an audio conversation, choose <guiseq><gui "
-"style=\"menu\">Video</gui><gui style=\"menuitem\">Video Off</gui></guiseq>."
-msgstr ""
-"Aby zakończyć rozmowę, należy wybrać <guiseq><gui style=\"menu\">Zadzwoń</"
-"gui><gui style=\"menuitem\">Rozłącz</gui></guiseq>."
-
-#: C/video-call.page:61(title)
-#, fuzzy
-msgid "Start a video conversation with a meta-contact"
-msgstr "Rozpoczęcie wideorozmowy z jednym z kontaktów."
-
-#: C/video-call.page:64(p) C/send-message.page:53(p) C/audio-call.page:66(p)
-#, fuzzy
-msgid ""
-"From the <gui>Contact List</gui> window, right-click on the meta-contact."
-msgstr ""
-"W oknie <gui>Lista kontaktów</gui> należy kliknąć w rozwijaną listę na górze."
-
-#: C/video-call.page:69(p)
-#, fuzzy
-msgid ""
-"Select the contact you want to have the conversation, and from the menu "
-"select <gui style=\"menuitem\">Video Call</gui>."
-msgstr ""
-"Kliknąć prawym przyciskiem myszy w nazwę kontaktu, z którym chcemy nawiązać "
-"rozmowę i wybrać <gui>Rozmowa</gui>"
-
-#: C/video-call.page:76(p) C/send-message.page:65(p) C/audio-call.page:78(p)
-msgid ""
-"To recognize if a contact is a <em>meta-contact</em>, move your mouse on a "
-"contact in the <gui>Contact List</gui> window, and stop over it for a "
-"second: a small pop-up message will appear showing the number of the "
-"contacts that form the meta-contact."
-msgstr ""
-
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/status-icons.page:39(None)
-msgid "@@image: 'figures/available.png'; md5=2196b2f0ad4ce26fdb7b9d48e75d1947"
-msgstr "@@image: 'figures/available.png'; md5=2196b2f0ad4ce26fdb7b9d48e75d1947"
-
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/status-icons.page:45(None)
-msgid "@@image: 'figures/busy.png'; md5=15eb2adff5faedf97b0cb9105d09410a"
-msgstr "@@image: 'figures/busy.png'; md5=15eb2adff5faedf97b0cb9105d09410a"
-
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/status-icons.page:53(None)
-msgid "@@image: 'figures/away.png'; md5=9c504d6ffa0cf1a9cc8933d16e1bea33"
-msgstr "@@image: 'figures/away.png'; md5=9c504d6ffa0cf1a9cc8933d16e1bea33"
-
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/status-icons.page:62(None) C/status-icons.page:69(None)
-msgid "@@image: 'figures/offline.png'; md5=c5b0c21181cbd6e13f8909243c0fa964"
-msgstr "@@image: 'figures/offline.png'; md5=c5b0c21181cbd6e13f8909243c0fa964"
-
-#: C/status-icons.page:7(desc)
-msgid "Understanding the various statuses and status icons."
-msgstr "Znaczenie różnych stanów dostępności i ikon tych stanów."
-
-#: C/status-icons.page:20(name) C/salut-protocol.page:36(cite)
-#: C/prev-conv.page:20(name) C/prev-conv.page:38(cite)
-#: C/import-account.page:27(name) C/disable-account.page:25(name)
-#: C/audio-video.page:109(cite) C/audio-video.page:117(cite)
-#: C/add-account.page:24(name) C/accounts-window.page:18(name)
-#: C/account-jabber.page:14(name) C/account-irc.page:16(name)
-msgid "Shaun McCance"
-msgstr "Shaun McCance"
-
-#: C/status-icons.page:21(email) C/prev-conv.page:21(email)
-#: C/import-account.page:28(email) C/disable-account.page:26(email)
-#: C/add-account.page:25(email) C/accounts-window.page:19(email)
-#: C/account-jabber.page:15(email) C/account-irc.page:17(email)
-msgid "shaunm@gnome.org"
-msgstr "shaunm@gnome.org"
-
-#: C/status-icons.page:35(title)
-msgid "Status Types and Icons"
-msgstr "Rodzaje stanów dostępności i ikony"
-
-#: C/status-icons.page:39(media)
-msgid "Available icon"
-msgstr "Ikona dostępności"
-
-#: C/status-icons.page:40(gui)
-msgid "Available"
-msgstr "Dostępny"
-
-#: C/status-icons.page:41(p)
-msgid ""
-"Use the <em>Available</em> status when you are at your computer and able to "
-"chat with your contacts. You can set a custom message for this status."
-msgstr ""
-"Należy użyć stanu <em>Dostępny</em> gdy znajdujemy się przed komputerem i "
-"możemy nawiązywać rozmowy z kontaktami. Można ustawić własną wiadomość dla "
-"tego stanu dostępności"
-
-#: C/status-icons.page:45(media)
-msgid "Busy icon"
-msgstr "Ikona zajętości"
-
-#: C/status-icons.page:46(gui)
-msgid "Busy"
-msgstr "Zajęty"
-
-#: C/status-icons.page:47(p)
-msgid ""
-"Use the <em>Busy</em> status to let your contacts know that you don’t want "
-"to chat right now. They can still contact you, for instance if they have "
-"something urgent they need to discuss. By default, <app>Empathy</app> will "
-"not use notification bubbles and sounds when you are busy. You can set a "
-"custom message for this status."
-msgstr ""
-"Należy użyć stanu <em>Zajęty</em>, aby powiadomić swoje kontakty, że nie "
-"chcemy w danym momencie rozmawiać. Można w tej sytuacji wciąż nawiązać "
-"kontakt, np. w przypadku wyjątkowo ważnej sprawie. Domyślnie, program "
-"<app>Empathy</app> nie będzie używał powiadomień i dźwięków w stanie "
-"zajętości. Można również ustawić własną wiadomość dla tego stanu."
-
-#: C/status-icons.page:53(media)
-msgid "Away icon"
-msgstr "Ikona nieobecności"
-
-#: C/status-icons.page:54(gui)
-msgid "Away"
-msgstr "Nieobecny"
-
-#: C/status-icons.page:55(p)
-msgid ""
-"Use the <em>Away</em> status when you are going away from your computer. "
-"<app>Empathy</app> automatically sets your status to Away if you do not use "
-"your computer for a while, or if your screensaver is on. By default, "
-"<app>Empathy</app> will not use notification bubbles and sounds when you are "
-"away. You can set a custom message for this status."
-msgstr ""
-"Należy użyć stanu <em>Nieobecny</em>, gdy odchodzimy od komputera. Program "
-"<app>Empathy</app> automatycznie ustawia stan <em>Nieobecny</em> jeśli "
-"komputer nie jest używany przez pewien czas lub włączony jest wygaszacz "
-"ekrany. Domyślnie program <app>Empathy</app> nie będzie używał powiadomień "
-"lub dźwięków w tym stanie. Można ustawić własną wiadomość"
-
-#: C/status-icons.page:62(media) C/status-icons.page:69(media)
-msgid "Offline icon"
-msgstr "Ikona trybu offline"
-
-#: C/status-icons.page:63(gui)
-msgid "Invisible"
-msgstr "Niewidoczny"
-
-#: C/status-icons.page:64(p)
-msgid ""
-"When you set your status to <em>Invisible</em>, you will appear as offline "
-"to your contacts. You will still be connected to your accounts, and you "
-"still see your contacts’ statuses and start conversations with them."
-msgstr ""
-"Po ustawieniu stanu na <em>Niewidoczny</em>, użytkownik widoczny jest dla "
-"innych jakby był w trybie offline. Połączenie jest wciąż aktywne, można "
-"obserwować stany dostępności innych kontaktów i nawiązywać z nimi rozmowy."
-
-#: C/status-icons.page:70(gui)
-msgid "Offline"
-msgstr "Offline"
-
-#: C/status-icons.page:71(p)
-msgid ""
-"Setting your status to <em>Offline</em> disconnects you from all of your "
-"accounts."
-msgstr ""
-"Ustawienie stanu na <em>Offline</em> rozłącza wszystkie konta użytkownika."
-
-#: C/share-desktop.page:7(desc)
-#, fuzzy
-msgid "Show your desktop to your contacts."
-msgstr "Współdzielenie pulpitu z innymi użytkownikami."
-
-#: C/share-desktop.page:18(name)
-msgid "Ekaterina Gerasimova"
-msgstr "Ekaterina Gerasimova"
-
-#: C/share-desktop.page:19(email)
-msgid "kittykat3756@gmail.com"
-msgstr "kittykat3756@gmail.com"
-
-#: C/share-desktop.page:33(title)
-msgid "Share your desktop"
-msgstr "Współdziel pulpit"
-
-#: C/share-desktop.page:35(p)
-#, fuzzy
-msgid ""
-"It is possible to share your desktop with some of your contacts. You can use "
-"this functionality to show your desktop to your contacts to, for example, "
-"ask for help or help your contacts resolve a problem."
-msgstr ""
-"Możliwe jest współdzielenie pulpitu z niektórymi kontaktami lub używanie ich "
-"pulpitów. Można użyć tej funkcji, aby wyświetlać własny pulpit na komputerze "
-"innego kontaktu, aby poprosić o pomoc lub udzielić pomocy innym kontaktom "
-"przy rozwiązywaniu problemu."
-
-#: C/share-desktop.page:42(p)
-msgid ""
-"To be able to share your desktop, you need to have a VNC server, which has "
-"support for the feature, installed on your system. <app>Vino</app>, the "
-"GNOME VNC server, has the required support."
-msgstr ""
-
-#: C/share-desktop.page:51(p)
-#, fuzzy
-msgid "From the <gui>Contact List</gui> window, do one of the following:"
-msgstr ""
-"W oknie <gui>Lista kontaktów</gui> należy wykonać jedno z poniższych działań:"
-
-#: C/share-desktop.page:56(p)
-#, fuzzy
-msgid ""
-"Select the contact you want to share your desktop with and choose "
-"<guiseq><gui>Edit</gui><gui>Contact</gui><gui>Share My Desktop</gui></"
-"guiseq>."
-msgstr ""
-"Należy zaznaczyć kontakt z którym chcemy współdzielić pulpit i wybrać "
-"<guiseq><gui>Edycja</gui><gui>Kontakt</gui><gui>Współdziel pulpit</gui></"
-"guiseq>."
-
-#: C/share-desktop.page:63(p)
-#, fuzzy
-msgid ""
-"Right-click on the name of the contact you want to share your desktop with "
-"and select <gui>Share My Desktop</gui>."
-msgstr ""
-"Należy kliknąć podwójnie w nazwę kontaktu z którym chcemy współdzielić "
-"pulpit i wybrać <gui>Współdziel pulpit</gui>."
-
-#: C/share-desktop.page:71(p)
-msgid ""
-"An invitation to view your desktop will be sent to the contact you have "
-"selected. To view your desktop, they will need to accept it."
-msgstr ""
-
-#: C/share-desktop.page:77(p)
-msgid ""
-"You can disconnect the contact from your computer using your desktop sharing "
-"application."
-msgstr ""
-
-#: C/share-desktop.page:82(p)
-#, fuzzy
-msgid ""
-"For more information about how to use the remote desktop sharing "
-"application, refer to its help."
-msgstr ""
-"Aby uzyskać więcej informacji na temat używania programu do przeglądania "
-"zdalnych pulpitów, należy zobaczyć jego dokumentację."
-
-#: C/share-desktop.page:90(p)
-msgid ""
-"When you share your desktop with someone else, it is possible to experience "
-"system performance slowdown and low Internet speed."
-msgstr ""
-"Podczas współdzielenia pulpitu z innym użytkownikiem można zaobserwować "
-"zmniejszenie wydajności systemu i spowolnienie połączenia internetowego."
-
-#: C/share-desktop.page:96(p)
-#, fuzzy
-msgid ""
-"Some of your contacts may not be able to use this feature. It is necessary "
-"for them to have version 2.28, or newer, of <app>Empathy</app> and a "
-"compatible remote desktop viewer application installed in their system."
-msgstr ""
-"Nie wszystkie kontakty mogą używać tej funkcjonalności. Aby móc używać "
-"funkcji współdzielenia pulpitu należy zainstalować w systemie co najmniej "
-"wersję 2.28 programu <app>Empathy</app> i program do przeglądania zdalnych "
-"pulpitów."
-
-#: C/set-custom-status.page:9(desc)
-msgid "Add, edit or delete personal messages for your status."
-msgstr ""
-"Dodawanie, modyfikowanie i usuwanie własnych wiadomości dla stanów obecności."
-
-#: C/set-custom-status.page:15(name)
-msgid "Jim Campbell"
-msgstr "Jim Campbell"
-
-#: C/set-custom-status.page:16(email)
-msgid "jwcampbell@gmail.com"
-msgstr "jwcampbell@gmail.com"
-
-#: C/set-custom-status.page:34(title)
-msgid "Set a custom message"
-msgstr "Ustawienie własnej wiadomości"
-
-#: C/set-custom-status.page:36(p)
-msgid ""
-"Sometimes you may want to set a custom message for your status, for example "
-"to let people know that you will be unavailable for a certain period of time."
-msgstr ""
-"Czasem może wystąpić potrzeba ustawienia własnej wiadomości dla stanu, np. "
-"aby powiadomić innych, że będziemy niedostępni przez pewien czas."
-
-#: C/set-custom-status.page:40(p)
-msgid ""
-"It is possible to set a custom message based on the different statuses "
-"available."
-msgstr ""
-"Można ustawić własną wiadomość w oparciu o różne dostępne stany dostępności."
-
-#: C/set-custom-status.page:46(p) C/set-custom-status.page:82(p)
-msgid ""
-"From the <gui>Contact List</gui> window, click on the drop-down list at the "
-"top."
-msgstr ""
-"W oknie <gui>Lista kontaktów</gui> należy kliknąć w rozwijaną listę na górze."
-
-#: C/set-custom-status.page:52(p)
-msgid ""
-"Select the status you want to add a custom message to. You have to select "
-"the one identified with the label <gui>Custom Message</gui>."
-msgstr ""
-"Należy wybrać stan, do którego chcemy dodać własną wiadomość. Należy wybrać "
-"stan oznaczony etykietą <gui>Własna wiadomość</gui>."
-
-#: C/set-custom-status.page:58(p)
-msgid ""
-"Enter your custom message in the text box at the top of the window, and "
-"press <key>Enter</key> to set the message."
-msgstr ""
-"Należy wprowadzić własną wiadomość do pola tekstowego na górze okna i "
-"nacisnąć <key>Enter</key>, aby ustawić wiadomość."
-
-#: C/set-custom-status.page:64(p)
-msgid ""
-"If you want to set the custom message as a favorite, saving it in order to "
-"use it again, click on the little star on the right of the text box where "
-"you wrote your custom message."
-msgstr ""
-"Jeśli chcemy ustawić własną wiadomość jako ulubioną, zapisując ją do "
-"ponownego użycia, należy nacisnąć na gwiazdkę w prawym rogu pola tekstowego, "
-"w którym wpisywana jest własna wiadomość."
-
-#: C/set-custom-status.page:69(p)
-msgid ""
-"If you do not do it, the custom message will not be available the next time "
-"you use <app>Empathy</app>. It will be saved only for the current session."
-msgstr ""
-"Bez naciśnięcia gwiazdki własna wiadomość nie będzie dostępna przy ponownym "
-"uruchomieniu programu <app>Empathy</app>. Zostanie ona zapamiętana jedynie "
-"do końca bieżącej sesji."
-
-#: C/set-custom-status.page:78(title)
-msgid "Edit, remove and add a custom message"
-msgstr "Modyfikowanie, usuwanie i dodawanie własnej wiadomości"
-
-#: C/set-custom-status.page:88(p)
-msgid "Select <gui>Edit Custom Message</gui>."
-msgstr "Należy wybrać <gui>Zmodyfikuj własne wiadomości...</gui>."
-
-#: C/set-custom-status.page:95(p)
-msgid "To edit a custom message:"
-msgstr "Aby zmodyfikować własne wiadomości należy:"
-
-#: C/set-custom-status.page:100(p)
-msgid ""
-"From the <gui>Saved Presets</gui> box, select the status message you want to "
-"edit and double-click on it."
-msgstr ""
-"W oknie <gui>Zapisane własne wiadomości</gui> należy wybrać wiadomość stanu, "
-"którą chcemy zmodyfikować i nacisnąć na nią dwukrotnie."
-
-#: C/set-custom-status.page:106(p)
-msgid "Type the new custom message and press <key>Enter</key> to modify it."
-msgstr ""
-"Wprowadzić treść nowej własnej wiadomości i nacisnąć <key>Enter</key>, aby "
-"ją zmodyfikować."
-
-#: C/set-custom-status.page:113(p)
-msgid "To remove a custom message:"
-msgstr "Aby usunąć własną wiadomość należy:"
-
-#: C/set-custom-status.page:118(p)
-msgid ""
-"From the <gui>Saved Presets</gui> box, select the status message you want to "
-"remove."
-msgstr ""
-"W oknie <gui>Zapisane własne wiadomości</gui> należy wybrać wiadomość stanu, "
-"którą chcemy usunąć."
-
-#: C/set-custom-status.page:124(p)
-msgid "Click on the <gui>Remove</gui> button."
-msgstr "Nacisnąć na przycisk <gui>Usuń</gui>."
-
-#: C/set-custom-status.page:131(p)
-msgid ""
-"To add a new custom message, from the <gui>Add New Preset</gui> section:"
-msgstr ""
-"Aby dodać nową własną wiadomość w części <gui>Dodaj nową własną wiadomość</"
-"gui> należy:"
-
-#: C/set-custom-status.page:136(p)
-msgid ""
-"Click on the drop-down list to select the status you want to set a custom "
-"message to."
-msgstr ""
-"Nacisnąć dwukrotnie na rozwijaną listę, aby wybrać stan, do którego chcemy "
-"dodać własną wiadomość."
-
-#: C/set-custom-status.page:142(p)
-msgid "Click on the text box, and type the new custom message."
-msgstr "Nacisnąć na pole tekstowe i wprowadzić nową własną wiadomość."
-
-#: C/set-custom-status.page:147(p)
-msgid "Click on <gui>Add</gui> to add the new message to the presets ones."
-msgstr ""
-"Nacisnąć na <gui>Dodaj</gui>, aby dodać nową wiadomość do zapisanych "
-"wiadomości."
-
-#: C/set-custom-status.page:156(p)
-msgid "When finished, click on <gui>Close</gui>."
-msgstr "Po zakończeniu należy nacisnąć przycisk <gui>Zamknij</gui>"
-
-#: C/set-custom-status.page:163(p)
-msgid ""
-"When you edit or add a new custom message, it will not be set as the current "
-"status message. You will need to select it from the <gui>Contact List</gui> "
-"window."
-msgstr ""
-"Po modyfikacji lub dodaniu nowej własnej wiadomości, nie zostanie ona "
-"ustawiona jako bieżąca wiadomość stanu. W tym celu należy wybrać ją w oknie "
-"<gui>Lista kontaktów</gui>."
-
-#: C/send-message.page:8(desc)
-msgid "Send a message to one of your contacts."
-msgstr "Wysyłanie wiadomości do jednego z kontaktów."
-
-#: C/send-message.page:17(name) C/send-file.page:17(name)
-#: C/prob-conn.page:14(name) C/prob-conn-neterror.page:15(name)
-#: C/prob-conn-auth.page:17(name) C/prob-conn-acctdisabled.page:15(name)
-#: C/change-status.page:24(name) C/add-contact.page:18(name)
-msgid "Phil Bull"
-msgstr "Phil Bull"
-
-#: C/send-message.page:18(email) C/send-file.page:18(email)
-#: C/prob-conn.page:15(email) C/prob-conn-neterror.page:16(email)
-#: C/prob-conn-auth.page:18(email) C/prob-conn-acctdisabled.page:16(email)
-#: C/change-status.page:25(email) C/add-contact.page:19(email)
-msgid "philbull@gmail.com"
-msgstr "philbull@gmail.com"
-
-#: C/send-message.page:32(title)
-msgid "Send a message to someone"
-msgstr "Wysyłanie wiadomości do kogoś"
-
-#: C/send-message.page:36(p)
-#, fuzzy
-msgid ""
-"From the <gui>Contact List</gui> window, double-click the name of the "
-"contact that you want to have a conversation with."
-msgstr "Dwukrotnie kliknąć w nazwę kontaktu, z którym chcesz nawiązać rozmowę."
-
-#: C/send-message.page:42(p)
-msgid ""
-"A new window will open. Type a message into the box at the bottom of the "
-"window and press <key>Enter</key> to send it."
-msgstr ""
-"Zostanie otwarte nowe okno. Należy wprowadzić wiadomość w polu na dole okna "
-"i nacisnąć <key>Enter</key>, aby ją wysłać."
-
-#: C/send-message.page:50(title)
-#, fuzzy
-msgid "Send a message to a meta-contact"
-msgstr "Wysyłanie wiadomości do kogoś"
-
-#: C/send-message.page:58(p)
-#, fuzzy
-msgid ""
-"Select the contact you want to have the conversation, and from the menu "
-"select <gui style=\"menuitem\">Chat</gui>."
-msgstr ""
-"Kliknąć prawym przyciskiem myszy w nazwę kontaktu, z którym chcemy nawiązać "
-"rozmowę i wybrać <gui>Rozmowa</gui>"
-
-#: C/send-file.page:8(desc)
-msgid "Send a file from your computer to one of your contacts."
-msgstr "Wysyłanie plików z własnego komputera do jednego z kontaktów."
-
-#: C/send-file.page:36(title)
-msgid "Send files"
-msgstr "Wysyłanie plików"
-
-#: C/send-file.page:40(p) C/favorite-rooms.page:66(p)
-msgid "From the <gui>Contact List</gui> window, perform one of the following:"
-msgstr ""
-"W oknie <gui>Lista kontaktów</gui> należy wykonać jedno z poniższych działań:"
-
-#: C/send-file.page:45(p)
-msgid ""
-"Right click on the contact you want to send a file to, and choose <gui>Send "
-"file</gui>."
-msgstr ""
-"Kliknąć prawym przyciskiem myszy w kontakt, do którego chcemy wysłać plik i "
-"wybrać <gui>Wyślij plik</gui>."
-
-#: C/send-file.page:50(p)
-msgid ""
-"Click on the contact you want to send a file, and choose <guiseq><gui>Edit</"
-"gui><gui>Contact</gui><gui>Send file</gui></guiseq>."
-msgstr ""
-"Kliknąć w kontakt, do którego chcemy wysłać plik i wybrać "
-"<guiseq><gui>Edycja</gui><gui>Kontakt</gui><gui>Wyślij plik</gui></guiseq>."
-
-#: C/send-file.page:58(p)
-msgid "Select the file to send, and click on <gui>Send</gui>."
-msgstr "Wybrać plik do wysłania i kliknąć w <gui>Wyślij</gui>."
-
-#: C/send-file.page:63(p)
-msgid "The <gui>File Transfers</gui> window will appear."
-msgstr "Pojawi się okno <gui>Przesyłanie plików</gui>."
-
-#: C/send-file.page:66(p)
-msgid ""
-"Wait for your contact to accept the file transfer, or click <gui>Stop</gui> "
-"to halt the transfer."
-msgstr ""
-"Należy poczekać, aż kontakt zaakceptuje przechodzący plik, lub nacisnąć "
-"<gui>Zatrzymaj</gui>, aby zatrzymać przesyłanie pliku."
-
-#: C/send-file.page:72(p)
-msgid ""
-"Once the transfer is finished, it is possible to close the <gui>File "
-"Transfers</gui> window."
-msgstr ""
-"Po ukończeniu przesyłania można zamknąć okno <gui>Przesyłanie plików</gui>."
-
-#: C/send-file.page:80(p)
-msgid ""
-"If you have multiple finished transfers listed in the window, click on "
-"<gui>Clear</gui> to empty the list. This will only remove the files from the "
-"list and will not delete them from your computer."
-msgstr ""
-"Jeśli okno zawiera listę wielu ukończonych przesyłów plików, należy nacisnąć "
-"<gui>Wyczyść</gui>, aby wyczyścić listę. W ten sposób zostaną usunięte pliki "
-"z listy, jednak nie zostaną usunięte z komputera."
-
-#: C/send-file.page:87(p)
-msgid ""
-"It is possible to send files only using the following services: <em>Jabber</"
-"em>, <em>Google Talk</em> and <em>People Nearby</em>."
-msgstr ""
-"Można wysyłać pliki jedynie przez następujące protokoły: <em>Jabber</em>, "
-"<em>Google Talk</em> i <em>Osoby w pobliżu</em>."
-
-#: C/send-file.page:93(p)
-msgid ""
-"In order to send a file to someone, you need to be connected to the "
-"Internet, or to a local area network."
-msgstr ""
-"Aby wysłać do kogoś plik, należy być połączonym do Internetu lub sieci "
-"lokalnej."
-
-#: C/salut-protocol.page:8(desc)
-msgid "Understanding the People Nearby feature."
-msgstr "Działanie funkcji protokołu Osoby w pobliżu."
-
-#: C/salut-protocol.page:33(title)
-msgid "What is People Nearby?"
-msgstr "Czym jest protokół Osoby w pobliżu?"
-
-#: C/salut-protocol.page:37(p)
-msgid "I'd like to see this played up a bit more."
-msgstr "Dobrze by było to trochę bardziej wyróżnić."
-
-#: C/salut-protocol.page:40(p)
-msgid ""
-"The People Nearby service is a serverless communication service: you do not "
-"need to connect and authenticate to a central server in order to use it."
-msgstr ""
-"Osoby w pobliżu jest usługą nie wymagającą serwera: nie jest konieczne "
-"łączenie się i uwierzytelnianie w żadnym centralnym serwerze, aby jej używać."
-
-#: C/salut-protocol.page:45(p)
-msgid ""
-"This kind of serverless messaging system is restricted to a local area "
-"network and an active Internet connection is not necessary."
-msgstr ""
-"Tego rodzaju bezserwerowy system jest ograniczony do sieci lokalnej i nie ma "
-"potrzeby nawiązywania połączenia z Internetem."
-
-#: C/salut-protocol.page:49(p)
-msgid ""
-"The people that use this service inside the same local area network will be "
-"auto-discovered, and it will be possible to send them messages and files as "
-"with other services."
-msgstr ""
-"Osoby używające tej usługi wewnątrz tej samej sieci lokalnej zostaną "
-"automatycznie wykryte i będzie można nawiązywać z nimi rozmowy i przesyłać "
-"pliki, tak jak ma to miejsce w innych protokołach."
-
-#: C/salut-protocol.page:54(p)
-msgid ""
-"All the modern local area networks should be able to support this kind of "
-"service."
-msgstr ""
-"Wszystkie współczesne sieci lokalne powinny obsługiwać tego rodzaju usługę."
-
-#: C/remove-account.page:8(desc)
-msgid "Completely remove an account from <app>Empathy</app>."
-msgstr "Zupełne usunięcie konta z programu <app>Empathy</app>."
-
-#: C/remove-account.page:33(title)
-msgid "Remove an account"
-msgstr "Usunięcie konta"
-
-#: C/remove-account.page:35(p)
-msgid ""
-"You can completely remove an account from <app>Empathy</app> if you no "
-"longer wish to use the account. If you wish to use the account in "
-"<app>Empathy</app> again in the future, you will have to add your account "
-"details again."
-msgstr ""
-"Można całkowicie usunąć konto z programu <app>Empathy</app> jeśli nie będzie "
-"ono już więcej używane. Jeśli zajdzie w przyszłości potrzeba użycia konta "
-"programu <app>Empathy</app>, konieczne będzie ponowne podanie szczegółowych "
-"danych konta."
-
-#: C/remove-account.page:42(p) C/irc-nick-password.page:50(p)
-#: C/disable-account.page:49(p) C/add-account.page:48(p)
-msgid ""
-"From the <gui>Contact List</gui> window, choose <guiseq><gui>Edit</"
-"gui><gui>Accounts</gui></guiseq>, or press <key>F4</key>."
-msgstr ""
-"W oknie <gui>Lista kontaktów</gui> należy wybrać <guiseq><gui>Edycja</"
-"gui><gui>Konta</gui></guiseq>, lub nacisnąć <key>F4</key>."
-
-#: C/remove-account.page:46(p)
-msgid ""
-"Select the account you wish to remove from the accounts list on the left "
-"side of the window."
-msgstr ""
-"Należy zaznaczyć konto, które chcemy usunąć z listy kont po lewej stronie "
-"okna."
-
-#: C/remove-account.page:50(p)
-#, fuzzy
-msgid "Click on <gui style=\"button\">Remove</gui>."
-msgstr "Należy nacisnąć przycisk <gui style=\"button\">Dodaj</gui>."
-
-#: C/remove-account.page:53(p)
-msgid ""
-"A dialog will be shown asking for confirmation. Click the <gui>Remove</gui> "
-"button to permanently remove the account."
-msgstr ""
-"Zostanie wyświetlone okno z prośbą o potwierdzenie. Naciśnij przycisk "
-"<gui>Usuń</gui>, aby trwale usunąć konto."
-
-#: C/remove-account.page:59(p)
-msgid ""
-"Even after removing an account, <app>Empathy</app> does not delete your "
-"conversation history for that account."
-msgstr ""
-"Nawet po usunięciu konta, program <app>Empathy</app>nie usuwa poprzednich "
-"rozmów dla tego konta."
-
-#: C/prob-conn.page:7(desc)
-msgid "Diagnose common problems connecting to an instant messaging service."
-msgstr ""
-"Diagnozowanie powszechnych problemów przy łączeniu do usług komunikatora."
-
-#: C/prob-conn.page:29(title)
-msgid "Problems connecting to an instant messaging service"
-msgstr "Problemy z połączeniem z usługami komunikatora"
-
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/prob-conn-neterror.page:59(None) C/prob-conn-name.page:44(None)
-#: C/prob-conn-auth.page:58(None) C/account-irc.page:109(None)
-msgid "@@image: 'figures/gtk-edit.png'; md5=4f21b451732817be0604fe3e2c8da98b"
-msgstr "@@image: 'figures/gtk-edit.png'; md5=4f21b451732817be0604fe3e2c8da98b"
-
-#: C/prob-conn-neterror.page:7(desc)
-msgid ""
-"An error message which says “<gui>Network error</gui>” appears in the main "
-"window."
-msgstr ""
-"Komunikat błędu \"<gui>Błąd sieci</gui>\" wyświetlany jest w oknie głównym."
-
-#: C/prob-conn-neterror.page:34(title)
-msgid "I get a message that says “Network error”"
-msgstr "Pojawia się komunikat \"Błąd sieci\""
-
-#: C/prob-conn-neterror.page:37(cite)
-msgid "shaunm"
-msgstr "shaunm"
-
-#: C/prob-conn-neterror.page:38(p)
-msgid ""
-"Empathy no longer allows you to create an IRC account without a valid nick. "
-"I've removed the guide link. Remove the text."
-msgstr ""
-"Program Empathy nie pozwala już na utworzenie konta IRC bez ważnego "
-"pseudonimu. Link do podręcznika został usunięty. Należy usunąć tekst."
-
-#: C/prob-conn-neterror.page:42(p)
-msgid ""
-"This kind of error happens when <app>Empathy</app> cannot communicate with "
-"the instant messaging service for some reason."
-msgstr ""
-"Tego rodzaju błąd pojawia się, gdy program <app>Empathy</app> nie może, z "
-"pewnego powodu, połączyć się z usługą komunikatora."
-
-#: C/prob-conn-neterror.page:46(p)
-msgid ""
-"Also, this kind of error happens when you try to use an IRC account without "
-"setting a nickname."
-msgstr ""
-"Ten rodzaj błędu pojawia się także podczas próby użycia konta IRC bez "
-"ustawienia pseudonimu."
-
-#: C/prob-conn-neterror.page:53(p) C/prob-conn-auth.page:45(p)
-#: C/prob-conn-acctdisabled.page:44(p)
-msgid ""
-"Make sure that you are connected to the Internet, or to a local area network."
-msgstr ""
-"Należy się upewnić, że połączenie z Internetem lub siecią lokalną zostało "
-"ustanowione."
-
-#: C/prob-conn-neterror.page:58(p) C/prob-conn-name.page:43(p)
-#: C/prob-conn-auth.page:57(p)
-msgid ""
-"Click the <media type=\"image\" mime=\"image/png\" src=\"figures/gtk-edit.png"
-"\">edit</media> icon in the error message."
-msgstr ""
-"Należy nacisnąć na ikonę <media type=\"image\" mime=\"image/png\" src="
-"\"figures/gtk-edit.png\">Edytuj</media> w oknie komunikatu błędu."
-
-#: C/prob-conn-neterror.page:64(p) C/prob-conn-acctdisabled.page:60(p)
-msgid ""
-"Check in the <gui>Advanced</gui> section that all the details are correct. "
-"You should be able to find these details from the website of the messaging "
-"service."
-msgstr ""
-"Należy sprawdzić w części <gui>Zaawansowane</gui>, czy wszystkie szczegóły "
-"są poprawne. Szczegóły powinny być możliwe do sprawdzenia na stronie usługi "
-"komunikatora."
-
-#: C/prob-conn-neterror.page:79(p) C/prob-conn-name.page:65(p)
-#, fuzzy
-msgid ""
-"Switch the account off, and then switch it on to try to reconnect to the "
-"service."
-msgstr ""
-"Należy odznaczyć pole <gui>Włączone</gui> znajdujące się obok nazwy konta, a "
-"następnie wybrać je ponownie, aby ustanowić połączenie z usługą"
-
-#: C/prob-conn-neterror.page:87(title)
-msgid "Proxy support"
-msgstr "Obsługa serwerów proxy"
-
-#: C/prob-conn-neterror.page:88(p)
-msgid ""
-"At the moment <app>Empathy</app> can not be configured to work with a proxy."
-msgstr ""
-"W chwili obecnej program <app>Empathy</app> nie może być konfigurowany do "
-"obsługi serwerów proxy."
-
-#: C/prob-conn-name.page:9(title)
-msgid "“Name in use”"
-msgstr "\"Używana nazwa\""
-
-#: C/prob-conn-name.page:10(desc)
-msgid ""
-"An error message which says “<gui>Name in use</gui>” appears in the main "
-"window."
-msgstr ""
-"Pojawia się komunikat błędu \"<gui>Pseudonim jest już używany</gui>\" w "
-"oknie głównym."
-
-#: C/prob-conn-name.page:33(title)
-msgid "I get a message that says “Name in use”"
-msgstr "Pojawia się komunikat \"Używana nazwa\""
-
-#: C/prob-conn-name.page:35(p)
-msgid ""
-"This kind of error happens when you try to connect to your IRC account and "
-"you are using a nickname that is already being used by someone else on that "
-"particular network."
-msgstr ""
-"Ten rodzaj błędu zdarza się podczas próby połączenia do konta IRC przy "
-"użyciu pseudonimu, który jest już używany przez inną osobę w danej sieci."
-
-#: C/prob-conn-name.page:51(p)
-msgid "In the <gui>Nickname</gui> text box, type a new nickname."
-msgstr "W polu <gui>Pseudonim</gui> należy wprowadzić pseudonim."
-
-#: C/prob-conn-name.page:56(p)
-msgid ""
-"If you have registered that nickname within the network you are using, set "
-"the password for that nickname. For more information, see <link xref=\"irc-"
-"nick-password\"/>."
-msgstr ""
-"Jeśli użytkownik zarejestrował ten pseudonim w używanej sieci, należy "
-"ustawić hasło dla tego pseudonimu. Aby uzyskać więcej informacji, należy "
-"zobaczyć <link xref=\"irc-nick-password\"/>."
-
-#: C/prob-conn-auth.page:8(desc)
-msgid ""
-"An error message which says “<gui>Authentication failed</gui>” appears in "
-"the main window."
-msgstr ""
-"Komunikat błędu \"<gui>Uwierzytelnienie się nie powiodło</gui>\" wyświetlany "
-"jest w oknie głównym."
-
-#: C/prob-conn-auth.page:36(title)
-msgid "I get a message that says “Authentication failed”"
-msgstr "Pojawia się komunikat \"Uwierzytelnienie nie powiodło się\""
-
-#: C/prob-conn-auth.page:38(p)
-msgid ""
-"This kind of error happens when your instant messaging service is not "
-"allowing you to connect because it does not recognize your username or "
-"password for some reason."
-msgstr ""
-"Ten rodzaj błędu zdarza, gdy używana usługa komunikatora nie pozwala na "
-"połączenie, ponieważ nazwa lub hasło z jakiegoś powodu nie są rozpoznawane."
-
-#: C/prob-conn-auth.page:50(p)
-msgid ""
-"Make sure that you have registered an account with the service you are "
-"trying to connect to. If you do not have an account, most services will not "
-"allow you to connect."
-msgstr ""
-"Należy się upewnić, że zostało zarejestrowane konto w usłudze do której "
-"próbujemy się połączyć. Jeśli konto nie zostało zarejestrowane, większość "
-"usług nie pozwoli na połączenie."
-
-#: C/prob-conn-auth.page:63(p) C/prob-conn-acctdisabled.page:55(p)
-msgid ""
-"Type your username and password again to make sure that they are correct."
-msgstr ""
-"Należy ponownie wprowadzić nazwę użytkownika i hasło, aby upewnić się, że są "
-"one poprawne."
-
-#: C/prob-conn-auth.page:68(p)
-msgid ""
-"Deselect the <gui>Enabled</gui>, and then select it again to try to "
-"reconnect to the service."
-msgstr ""
-"Należy odznaczyć pole <gui>Włączone</gui> znajdujące się obok nazwy konta, a "
-"następnie wybrać je ponownie, aby ustanowić połączenie z usługą"
-
-#: C/prob-conn-acctdisabled.page:7(desc)
-msgid ""
-"The instant messaging account that you want to use is not enabled in the "
-"list of accounts."
-msgstr "Konto, którego chcemy użyć, nie jest włączone na liście kont."
-
-#: C/prob-conn-acctdisabled.page:34(title)
-msgid "My account is not enabled"
-msgstr "Konto nie jest włączone"
-
-#: C/prob-conn-acctdisabled.page:36(p)
-msgid ""
-"If the instant messaging account that you want to use is not enabled in the "
-"drop-down account list when you try to start a new conversation or join a "
-"room, your account details may not be correct."
-msgstr ""
-"Jeśli konto komunikatora, którego chcemy użyć, nie jest włączone na "
-"rozwijanej liście kont podczas rozpoczynania nowej rozmowy lub dołączania do "
-"pokoju, szczegóły tego konta mogą nie być poprawne."
-
-#: C/prob-conn-acctdisabled.page:49(p)
-msgid ""
-"Choose <guiseq><gui>Edit</gui><gui>Accounts</gui></guiseq> and select the "
-"account that is not working."
-msgstr ""
-"Należy wybrać <guiseq><gui>Edycja</gui><gui>Konta</gui></guiseq> i zaznaczyć "
-"konto, które nie działa."
-
-#: C/prob-conn-acctdisabled.page:66(p)
-msgid "Check that the account is switched on."
-msgstr ""
-
-#: C/prev-conv.page:8(desc)
-msgid "Browse or search your previous conversations."
-msgstr "Przeglądanie lub przeszukiwanie poprzednich rozmów."
-
-#: C/prev-conv.page:35(title)
-msgid "View previous conversations"
-msgstr "Wyświetlanie poprzednich rozmów"
-
-#: C/prev-conv.page:39(p)
-msgid ""
-"Highlighting text is quirky: <link href=\"http://bugzilla.gnome.org/show_bug."
-"cgi?id=593733\">#593733</link>. If there's an actual highlighting going on, "
-"independent of the selection (like in yellow or something), we can use the "
-"term \"highlight\". Otherwise we need to use the term \"select\". Watch that "
-"bug."
-msgstr ""
-"Wyróżnianie tekstu jest dziwne: <link href=\"http://bugzilla.gnome.org/"
-"show_bug.cgi?id=593733\">#593733</link>. Jeśli wyróżnianie ma miejsce, "
-"niezależnie od zaznaczenia (np. na żółto), można użyć terminu \"wyróżnianie"
-"\". W innym wypadku należy użyć terminu \"zaznaczanie\". Należy zwrócić "
-"uwagę na ten błąd."
-
-#: C/prev-conv.page:46(p)
-msgid ""
-"<app>Empathy</app> automatically saves all your text conversations you have "
-"with your contacts. You can <link xref=\"#search\">search through all of "
-"your previous conversations</link> or <link xref=\"#browse\">browse previous "
-"conversations</link> by contact and date."
-msgstr ""
-"Program <app>Empathy</app> automatycznie zapisuje wszystkie rozmowy tekstowe "
-"prowadzone z kontaktami. Można <link xref=\"#search\">przeszukiwać wszystkie "
-"poprzednie rozmowy</link> lub <link xref=\"#browse\">przeglądać je</link> "
-"filtrując kontakty i daty."
-
-#: C/prev-conv.page:54(p)
-msgid ""
-"You do not need to be connected to the Internet to view and search your "
-"previous conversations."
-msgstr ""
-"Nie trzeba być połączonym do Internetu, aby wyświetlać i przeszukiwać "
-"poprzednie rozmowy."
-
-#: C/prev-conv.page:61(title)
-msgid "Search previous conversations"
-msgstr "Przeszukiwanie poprzednich rozmów"
-
-#: C/prev-conv.page:63(p)
-msgid ""
-"You can perform a full-text search through all of your previous "
-"conversations."
-msgstr "Można wykonać wyszukiwanie całego tekstu w poprzednich rozmowach."
-
-#: C/prev-conv.page:67(p) C/prev-conv.page:96(p)
-msgid ""
-"From the <gui>Contact List</gui> window, choose <guiseq><gui>View</"
-"gui><gui>Previous Conversations</gui></guiseq>. Alternatively, press "
-"<key>F3</key>."
-msgstr ""
-"W oknie <gui>Lista kontaktów</gui> należy wybrać <guiseq><gui>Widok</"
-"gui><gui>Poprzednie rozmowy</gui></guiseq>. Można również nacisnąć <key>F3</"
-"key>."
-
-#: C/prev-conv.page:71(p)
-msgid "Select the <gui>Search</gui> tab."
-msgstr "Należy wybrać kartę <gui>Wyszkukiwanie</gui>."
-
-#: C/prev-conv.page:74(p)
-msgid ""
-"In the <gui>For</gui> field, type the text you want to search for. Click "
-"<gui>Find</gui> or press <key>Enter</key>."
-msgstr ""
-"W polu <gui>Wyszukaj</gui> należy wpisać wyszukiwany tekst, a następnie "
-"nacisnąć <gui>Wyszukiwanie</gui> lub nacisnąć <key>Enter</key>."
-
-#: C/prev-conv.page:78(p)
-msgid ""
-"Any conversations that matched your search terms will be shown in the list "
-"below the search field. By default, conversations are ordered by date."
-msgstr ""
-"Wszelkie rozmowy zawierające wyszukiwane terminy zostaną wyświetlone w "
-"liście poniżej pola wyszukiwania. Domyślnie rozmowy są ułożone według daty."
-
-#: C/prev-conv.page:82(p)
-msgid ""
-"Click on a conversation to view it. <app>Empathy</app> will select the text "
-"in the conversation that matched your search terms."
-msgstr ""
-"Należy nacisnąć na rozmowę, aby ją wyświetlić. Program <app>Empathy</app> "
-"zaznaczy w rozmowie tekst, który odpowiada wyszukiwanym terminom."
-
-#: C/prev-conv.page:89(title)
-msgid "Browse previous conversations"
-msgstr "Przeszukiwanie poprzednich rozmów"
-
-#: C/prev-conv.page:91(p)
-msgid ""
-"You can browse your previous conversations with your contacts or in chat "
-"rooms by date."
-msgstr ""
-"Można przeszukiwać poprzednie rozmowy z kontaktami w pokojach rozmów według "
-"daty."
-
-#: C/prev-conv.page:100(p)
-msgid "Select the <gui>Conversations</gui> tab."
-msgstr "Należy wybrać kartę <gui>Rozmowy</gui>."
-
-#: C/prev-conv.page:103(p)
-msgid ""
-"Select an account from the drop-down list in the top left. A list of "
-"contacts and chat room for that account will be shown below."
-msgstr ""
-"Należy wybrać konto z rozwijanej listy na górze po prawej stronie. Lista "
-"kontaktów i pokojów rozmów dla tego konta zostanie wyświetlona poniżej."
-
-#: C/prev-conv.page:107(p)
-msgid ""
-"Select a contact or chat room to view your previous conversations from. By "
-"default the most recent conversation will be shown."
-msgstr ""
-"Należy wybrać kontakt lub pokój rozmów, aby zostały wyświetlone jego "
-"poprzednie rozmowy. Domyślnie wyświetlone zostaną najpóźniejsze poprzednie "
-"rozmowy."
-
-#: C/prev-conv.page:111(p)
-msgid ""
-"You can browse your conversations by date. Days on which you had a "
-"conversation with the selected contact will be shown in bold text. Click a "
-"date to select it. Click the arrows next to the month and year to browse "
-"earlier dates."
-msgstr ""
-"Można przeglądać rozmowy według daty. Dni, w których zostały przeprowadzone "
-"rozmowy z wybranym kontaktem, zostaną zaznaczone wytłuszczonym drukiem. "
-"Należy je wybrać. Następnie należy kliknąć w strzałki obok miesiąca i roku, "
-"aby móc przeglądać wcześniejsze daty."
-
-#: C/prev-conv.page:117(p)
-msgid ""
-"You can search for text in the displayed conversation by typing into the "
-"search field at the top. The matching text will be highlighted."
-msgstr ""
-"Można wyszukiwać tekst w wyświetlanej rozmowie wprowadzając wyszukiwany "
-"termin w polu na górze. Pasujący tekst zostanie wyróżniony."
-
-#: C/prev-conv.page:121(p)
-msgid ""
-"You can quickly view the previous conversations with one of your contacts "
-"from the <gui>Contact List</gui> window. Simply right click the contact and "
-"choose <gui>View Previous Conversations</gui>. The <gui>Previous "
-"Conversations</gui> window will open with that contact already selected."
-msgstr ""
-"Można szybko wyświetlić poprzednie rozmowy z jednym z kontaktów z okna "
-"<gui>Listy kontaktów</gui>. Należy nacisnąć prawym przyciskiem myszy na "
-"kontakt i wybrać <gui>Wyświetl poprzednie rozmowy</gui>. Okno "
-"<gui>Poprzednich rozmów</gui> z wybranym kontaktem zostanie otwarte."
-
-#: C/link-contacts.page:11(desc)
-msgid "Merge and separate different contacts into a single one."
-msgstr ""
-
-#: C/link-contacts.page:25(title)
-msgid "Combine and separate contacts"
-msgstr ""
-
-#: C/link-contacts.page:26(p)
-msgid ""
-"If one, or more, of your contacts has multiple accounts with different "
-"messaging services, you can combine these contacts into a single one."
-msgstr ""
-
-#: C/link-contacts.page:30(p)
-msgid ""
-"The resulting contact is called a <em>meta-contact</em>: a contact composed "
-"from different single contacts."
-msgstr ""
-
-#: C/link-contacts.page:34(p)
-msgid ""
-"If you have a Jane Smith contact that is using three different messaging "
-"services like:"
-msgstr ""
-
-#: C/link-contacts.page:40(p)
-msgid "janes@facebook"
-msgstr ""
-
-#: C/link-contacts.page:45(p)
-msgid "jane.smith@gmail"
-msgstr ""
-
-#: C/link-contacts.page:50(p)
-msgid "jane_smith@hotmail"
-msgstr ""
-
-#: C/link-contacts.page:55(p)
-msgid "You can combine these contacts into a single Jane Smith one."
-msgstr ""
-
-#: C/link-contacts.page:60(title)
-#, fuzzy
-msgid "Combining contacts"
-msgstr "Ukrywanie kontaktów znajdujących się w trybie offline."
-
-#: C/link-contacts.page:63(p)
-msgid ""
-"From the <gui>Contact List</gui> window, right-click one of the contact that "
-"has different accounts, and select <gui style=\"menuitem\">Link Contacts...</"
-"gui>."
-msgstr ""
-
-#: C/link-contacts.page:70(p)
-#, fuzzy
-msgid ""
-"From the left pane in the <gui>Link Contacts</gui> window, select the "
-"contacts you want to combine."
-msgstr ""
-"W oknie <gui>Zapisane własne wiadomości</gui> należy wybrać wiadomość stanu, "
-"którą chcemy usunąć."
-
-#: C/link-contacts.page:76(p)
-#, fuzzy
-msgid "Click <gui style=\"button\">Link</gui>."
-msgstr "Należy nacisnąć przycisk <gui style=\"button\">Dodaj</gui>."
-
-#: C/link-contacts.page:82(p)
-msgid ""
-"When a meta-contact has been created, the default contact that will be used "
-"to have a conversation with when you double-click on it, is the contact with "
-"the highest presence on-line."
-msgstr ""
-
-#: C/link-contacts.page:91(title)
-#, fuzzy
-msgid "Separating contacts"
-msgstr "Ukrywanie kontaktów znajdujących się w trybie offline."
-
-#: C/link-contacts.page:94(p)
-msgid ""
-"From the <gui>Contact List</gui>, right-click the contact to separate, and "
-"select <gui style=\"menuitem\">Link Contacts...</gui>."
-msgstr ""
-
-#: C/link-contacts.page:100(p)
-#, fuzzy
-msgid "Click <gui style=\"button\">Unlink</gui>."
-msgstr "Należy nacisnąć przycisk <gui style=\"button\">Zastosuj</gui>."
-
-#: C/license.page:8(desc)
-msgid "Legal information."
-msgstr "Informacje prawne"
-
-#: C/license.page:11(title)
-msgid "License"
-msgstr "Licencja"
-
-#: C/license.page:12(p)
-msgid ""
-"This work is distributed under a CreativeCommons Attribution-Share Alike 3.0 "
-"Unported license."
-msgstr ""
-"Niniejsza praca objęta jest licencją CreativeCommons Uznanie autorstwa - Na "
-"tych samych warunkach 3.0 Unported."
-
-#: C/license.page:20(p)
-msgid "You are free:"
-msgstr "Jesteś wolny:"
-
-#: C/license.page:25(em)
-msgid "To share"
-msgstr "Można się dzielić"
-
-#: C/license.page:26(p)
-msgid "To copy, distribute and transmit the work."
-msgstr ", czyli kopiować, rozpowszechniać, odtwarzać i wykonywać utwór."
-
-#: C/license.page:29(em)
-msgid "To remix"
-msgstr "Można remiksować"
-
-#: C/license.page:30(p)
-msgid "To adapt the work."
-msgstr ", czyli tworzyć utwory zależne"
-
-#: C/license.page:33(p)
-msgid "Under the following conditions:"
-msgstr "Na następujących warunkach:"
-
-#: C/license.page:38(em)
-msgid "Attribution"
-msgstr "Zrzeczenie"
-
-#: C/license.page:39(p)
-msgid ""
-"You must attribute the work in the manner specified by the author or "
-"licensor (but not in any way that suggests that they endorse you or your use "
-"of the work)."
-msgstr ""
-"Utwór należy oznaczyć w sposób określony przez Twórcę lub Licencjodawcę."
-
-#: C/license.page:46(em)
-msgid "Share Alike"
-msgstr "Na tych samych warunkach"
-
-#: C/license.page:47(p)
-msgid ""
-"If you alter, transform, or build upon this work, you may distribute the "
-"resulting work only under the same, similar or a compatible license."
-msgstr ""
-"Zmieniając utwór, przekształcając go lub tworząc na jego podstawie, wolno "
-"rozpowszechniać powstały utwór zależny jedynie na tej samej, podobnej lub "
-"kompatybilnej licencji."
-
-#: C/license.page:53(p)
-msgid ""
-"For the full text of the license, see the <link href=\"http://"
-"creativecommons.org/licenses/by-sa/3.0/legalcode\">CreativeCommons website</"
-"link>, or read the full <link href=\"http://creativecommons.org/licenses/by-"
-"sa/3.0/\">Commons Deed</link>."
-msgstr ""
-"Pełen tekst licencji dostępny jest pod adresem <link href=\"http://"
-"creativecommons.org/licenses/by-sa/3.0/legalcode\">witryny Creative Commons</"
-"link>; można również przeczytać <link href=\"http://creativecommons.org/"
-"licenses/by-sa/3.0/\">podsumowanie</link>."
-
-#: C/irc-start-conversation.page:8(desc)
-#, fuzzy
-msgid "Start a conversation with an IRC contact."
-msgstr "Nawiązywanie rozmowy z kontaktem IRC."
-
-#: C/irc-start-conversation.page:30(title)
-msgid "Chat with somebody on IRC"
-msgstr "Prowadzenie rozmowy z kimś na IRC."
-
-#: C/irc-start-conversation.page:32(p)
-msgid ""
-"You can hold private conversations with other IRC users, outside of the "
-"public IRC chat rooms. To start a conversation with another IRC user:"
-msgstr ""
-"Można prowadzić prywatne rozmowy z innymi użytkownikami IRC poza publicznymi "
-"pokojami IRC. Aby rozpocząć rozmowę z innym użytkownikiem IRC:"
-
-#: C/irc-start-conversation.page:37(p)
-msgid ""
-"In the contact list for an IRC chat room, double click the name of the user "
-"you want to chat with. Alternatively, right click the name of the user and "
-"choose <gui>Chat</gui>."
-msgstr ""
-"Na liście kontaktów pokoju rozmów IRC należy wybrać nazwę użytkownika, z "
-"którym chcemy rozmawiać. Można również kliknąć w nazwę użytkownika i wybrać "
-"<gui>Rozmowa</gui>."
-
-#: C/irc-start-conversation.page:45(p)
-msgid ""
-"The IRC room contact list is not the same as <app>Empathy</app> contact "
-"list. It contains a list of users in the IRC chat room you joined. Different "
-"rooms can have different contacts listed."
-msgstr ""
-"Lista kontaktów pokoju IRC różni się od listy kontaktów programu "
-"<app>Empathy</app>. Zawiera ona listę użytkowników pokoju rozmów IRC, do "
-"którego jesteśmy połączeni. Różne pokoje mogą mieć różne listy użytkowników."
-
-#: C/irc-start-conversation.page:52(p)
-msgid ""
-"The IRC room contact list is usually on the right side of the IRC room "
-"window. If you do not see it, choose <guiseq><gui>Conversation</"
-"gui><gui>Show Contact List</gui></guiseq>."
-msgstr ""
-"Lista kontaktów pokoju IRC znajduje się zazwyczaj po prawej stronie okna "
-"pokoju IRC. Jeśli nie jest wyświetlana, należy wybrać <guiseq><gui>Rozmowa</"
-"gui><gui>Lista kontaktów</gui></guiseq>."
-
-#: C/irc-send-file.page:9(desc)
-msgid "<app>Empathy</app> does not currently support sending files using IRC."
-msgstr ""
-"Program <app>Empathy</app> nie obsługuje w tej chwili funkcji przesyłania "
-"plików przez IRC."
-
-#: C/irc-send-file.page:31(title)
-msgid "Send files over IRC"
-msgstr "Wysyłanie plików przez IRC."
-
-#: C/irc-send-file.page:33(p)
-msgid "It is not currently possible to send files using IRC."
-msgstr "Obecnie nie można wysyłać plików przez IRC."
-
-#: C/irc-nick-password.page:10(desc)
-msgid "Protect your nickname to prevent other IRC users from using it."
-msgstr ""
-"Należy chronić swój pseudonim przed użyciem przez innych użytkowników IRC."
-
-#: C/irc-nick-password.page:33(title)
-msgid "Use a nickname password on IRC"
-msgstr "Należy używać hasła do pseudonimu w sieci IRC"
-
-#: C/irc-nick-password.page:35(p)
-msgid ""
-"On some IRC networks, you can register your nickname with a service called "
-"NickServ. By sending special messages to NickServ, you can set your password "
-"and identify yourself. Some IRC chat rooms may not allow you to join without "
-"a registered nickname."
-msgstr ""
-"W niektórych sieciach IRC można zarejestrować hasło dzięki usłudze NickServ. "
-"Wysyłając specjalną wiadomość do NickServ można ustawić hasło potrzebne do "
-"identyfikacji. Niektóre pokoje rozmów IRC mogą nie zezwalać na połączenie "
-"bez rejestracji pseudonimu."
-
-#: C/irc-nick-password.page:40(p)
-#, fuzzy
-msgid ""
-"<app>Empathy</app> does not currently support nickname registration. Some "
-"IRC networks, however, will automatically forward a <em>server password</em> "
-"to NickServ. On these networks, you can use the IRC password in "
-"<app>Empathy</app> to identify yourself to NickServ. The popular freenode "
-"network is known to have this feature."
-msgstr ""
-"Program <app>Empathy</app> nie obsługuje obecnie rejestracji pseudonimu. "
-"Niektóre sieci jednak automatycznie przekazują <em>hasło serwera</em> do "
-"NickServ. W tych sieciach można używać hasła IRC w programie <app>Empathy</"
-"app>, aby przeprowadzić identyfikację w NickServ. Usługa ta dostępna jest w "
-"popularnej sieci FreeNode."
-
-#: C/irc-nick-password.page:46(p)
-msgid "To set an IRC server password:"
-msgstr "Aby ustawić hasło serwera IRC:"
-
-#: C/irc-nick-password.page:54(p)
-msgid "Select the IRC account from the list on the left of the dialog."
-msgstr "Należy wybrać konto IRC z listy po lewej stronie okna dialogowego."
-
-#: C/irc-nick-password.page:57(p)
-msgid ""
-"In the <gui>Password</gui> field, type the password you used to register "
-"your nikcname."
-msgstr ""
-"W polu <gui>Hasło</gui> należy wpisać hasło użyte do rejestracji pseudonimu."
-
-#: C/irc-nick-password.page:63(p) C/import-account.page:61(p)
-msgid "Click <gui style=\"button\">Apply</gui>."
-msgstr "Należy nacisnąć przycisk <gui style=\"button\">Zastosuj</gui>."
-
-#: C/irc-nick-password.page:69(p)
-msgid ""
-"These instructions only allow you to use a password-protected nickname on "
-"certain IRC networks. It is not currently possible to register an IRC "
-"nickname or change your nickname password using <app>Empathy</app>."
-msgstr ""
-"Te instrukcje pozwalają jedynie na używanie pseudonimu chronionego hasłem w "
-"niektórych sieciach IRC. Obecnie nie można zarejestrować pseudonimu IRC lub "
-"zmienić hasła do pseudonimu używając programu <app>Empathy</app>."
-
-#: C/irc-manage.page:10(desc)
-msgid "How to use IRC with <app>Empathy</app>."
-msgstr "Używanie programu <app>Empathy</app> w sieciach IRC."
-
-#: C/irc-manage.page:35(title)
-msgid "Internet Relay Chat (IRC)"
-msgstr "Internet Relay Chat (IRC)"
-
-#: C/irc-manage.page:38(p) C/account-irc.page:39(p)
-#, fuzzy
-msgid ""
-"You must have the <sys>telepathy-idle</sys> package installed to use IRC in "
-"<app>Empathy</app>."
-msgstr ""
-"Konieczne jest zainstalowanie paczki <sys>telepathy-idle</sys>, aby używać "
-"IRC w programie IRC"
-
-#: C/irc-manage.page:42(link)
-msgid "Install telepathy-idle"
-msgstr ""
-
-#: C/irc-manage.page:49(title)
-msgid "IRC Chat Rooms and Conversations"
-msgstr "Rozmowy i pokoje rozmów IRC"
-
-#: C/irc-manage.page:51(title)
-msgid "Chat Rooms and Conversations"
-msgstr "Pokoje rozmów i rozmowy"
-
-#: C/irc-manage.page:56(title)
-msgid "Common IRC Problems"
-msgstr "Powszechne problemy z sieciami IRC"
-
-#: C/irc-manage.page:58(title) C/index.page:55(title)
-msgid "Common Problems"
-msgstr "Powszechne problemy"
-
-#: C/irc-join-room.page:8(desc)
-msgid "Join an IRC channel."
-msgstr "Łączenie z kanałem IRC."
-
-#: C/irc-join-room.page:31(title)
-msgid "Join an IRC chat room"
-msgstr "Łączenie z pokojem rozmów IRC"
-
-#: C/irc-join-room.page:33(p)
-msgid ""
-"You can join IRC chat rooms (also known as IRC channels) on any IRC network "
-"you’re connected to. To connect to an IRC network, see <link xref=\"add-"
-"account\"/> and <link xref=\"account-irc\"/>."
-msgstr ""
-"Można dołączyć do pokojów rozmów IRC (znanych również jako kanały) w "
-"dowolnej sieci IRC do której jesteśmy połączeni. Aby połączyć się do sieci "
-"IRC, należy zobaczyć <link xref=\"add-account\"/> i <link xref=\"account-irc"
-"\"/>."
-
-#: C/irc-join-room.page:39(p) C/group-conversations.page:58(p)
-#: C/group-conversations.page:122(p)
-msgid ""
-"From the <gui>Contact List</gui> window, choose <guiseq><gui>Room</"
-"gui><gui>Join</gui></guiseq>."
-msgstr ""
-"W oknie <gui>Listy kontaktów</gui> należy wybrać <guiseq><gui>Pokój</"
-"gui><gui>Dołącz...</gui></guiseq>."
-
-#: C/irc-join-room.page:45(p)
-msgid ""
-"From the <gui>Account</gui> drop-down list, select the IRC account that "
-"corresponds to the network you want to use."
-msgstr ""
-"Z rozwijanej listy <gui>Konto</gui> należy wybrać konto IRC odpowiadające "
-"sieci, której chcemy używać."
-
-#: C/irc-join-room.page:51(p)
-msgid ""
-"In the <gui>Room</gui> text box, type the name of the channel you want to "
-"join. IRC channel names start with the hash character (<sys>#</sys>)."
-msgstr ""
-"W polu tekstowym <gui>Pokój</gui> należy wpisać nazwę kanały, do którego "
-"chcemy dołączyć. Nazwy kanałów IRC rozpoczynają się od symbolu hash (<sys>#</"
-"sys>)."
-
-#: C/irc-join-room.page:57(p)
-msgid "Click <gui>Join</gui> to enter the room."
-msgstr "Należy nacisnąć na przycisk <gui>Dołącz</gui>, aby wejść do pokoju."
-
-#: C/irc-join-room.page:64(p)
-msgid ""
-"To join multiple rooms, you need to repeat the steps above for each room."
-msgstr ""
-"Aby dołączyć do wielu pokojów należy powtórzyć powyższe kroki dla każdego "
-"pokoju."
-
-#: C/irc-join-pwd.page:9(desc)
-msgid "Enter password-protected IRC chat rooms."
-msgstr "Łączenie z pokojem rozmów IRC chronionym hasłem."
-
-#: C/irc-join-pwd.page:25(title)
-msgid "Join a protected IRC chat room"
-msgstr "Łącznie z chronionym pokojem rozmów IRC."
-
-#: C/irc-join-pwd.page:27(p)
-#, fuzzy
-msgid ""
-"On some IRC networks, private IRC rooms may be protected with a password. If "
-"you know the password, use the following steps to join:"
-msgstr ""
-"W niektórych sieciach IRC prywatne pokoje rozmów IRC mogą być chronione "
-"hasłem."
-
-#: C/irc-join-pwd.page:33(p)
-#, fuzzy
-msgid "<link xref=\"irc-join-room\">Join the room</link> as normal."
-msgstr "<link xref=\"irc-join-room\">Dołącz do pokoju</link>."
-
-#: C/irc-join-pwd.page:38(p)
-#, fuzzy
-msgid ""
-"Empathy will prompt you for a password. Enter the password for the IRC chat "
-"room and click <gui style=\"button\">Join</gui>."
-msgstr ""
-"W polu tekstowym <gui>Ten pokój jest chroniony hasłem</gui> należy wpisać "
-"hasło pokoju IRC i nacisnąć na <gui style=\"button\">Dołącz</gui>."
-
-#: C/irc-commands.page:7(desc)
-msgid "The supported IRC commands."
-msgstr "Obsługiwane polecenia IRC."
-
-#: C/irc-commands.page:18(title)
-msgid "Supported IRC commands"
-msgstr "Obsługiwane polecenia IRC"
-
-#: C/irc-commands.page:19(p)
-msgid ""
-"To see the list of the supported IRC commands, in a chat room type <input>/"
-"help</input> and press <key>Enter</key>."
-msgstr ""
-"Aby zobaczyć listę obsługiwanych poleceń IRC, należy w pokoju rozmów wpisać "
-"<input>/help</input> a następnie nacisnąć <key>Enter</key>"
-
-#: C/irc-commands.page:24(p)
-msgid "All commands available have a small description on their usage."
-msgstr "Wszystkie dostępne polecenia posiadają krótkie opisy użycia."
-
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/introduction.page:41(None)
-msgid ""
-"@@image: 'figures/empathy-main-window.png'; "
-"md5=54908dcb2588beddb15ef0968d2c2582"
-msgstr ""
-"@@image: 'figures/empathy-main-window.png'; "
-"md5=54908dcb2588beddb15ef0968d2c2582"
-
-#: C/introduction.page:9(desc)
-msgid "Introduction to the <app>Empathy</app> instant messenger."
-msgstr "Wprowadzenie do komunikatora <app>Empathy</app>."
-
-#: C/introduction.page:21(title)
-msgid "Introduction"
-msgstr "Wprowadzenie"
-
-#: C/introduction.page:23(p)
-#, fuzzy
-msgid ""
-"<app>Empathy</app> is an instant messaging application for the GNOME "
-"Desktop. It supports text messaging, voice &amp; video calls, file "
-"transfers, and all the most used messaging systems such as MSN and Google "
-"Talk."
-msgstr ""
-"Program <app>Empathy</app> jest komunikatorem internetowym środowiska GNOME. "
-"Obsługuje rozmowy tekstowe, głosowe i wideorozmowy większości protokołów "
-"komunikacyjnych takich jak MSN i Google Talk."
-
-#: C/introduction.page:28(p)
-msgid ""
-"<app>Empathy</app> includes features that help you better collaborate while "
-"at work, and that let you easily keep in touch with your friends."
-msgstr ""
-"Program <app>Empathy</app> posiada funkcje pozwalające na lepszą współpracę "
-"podczas pracy oraz z łatwością utrzymywać kontakt z przyjaciółmi."
-
-#: C/introduction.page:32(p)
-#, fuzzy
-msgid ""
-"Using <app>Empathy</app>, you can group all the conversations in a single "
-"window, have multiple windows for different kind of conversations, easily "
-"search through your previous conversations, and share your desktop in just "
-"two clicks."
-msgstr ""
-"Można grupować rozmowy w jednym oknie lub wielu oknach dla różnego typu "
-"rozmów; z łatwością przeszukiwać poprzednie rozmowy i współdzielić pulpit "
-"dwoma kliknięciami."
-
-#: C/introduction.page:39(title)
-msgid "<gui>Contact List</gui> window"
-msgstr "Okno <gui>Listy kontaktów</gui>"
-
-#: C/introduction.page:40(desc)
-msgid "<app>Empathy</app> main window"
-msgstr "Okno główne programu <app>Empathy</app>"
-
-#: C/introduction.page:42(p)
-msgid "<app>Empathy</app> main window."
-msgstr "Okno główne programu <app>Empathy</app>."
-
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/index.page:28(None)
-msgid ""
-"@@image: 'figures/empathy-logo.png'; md5=1afc419a644e90b16393807e35cb5cb2"
-msgstr ""
-"@@image: 'figures/empathy-logo.png'; md5=1afc419a644e90b16393807e35cb5cb2"
-
-#: C/index.page:7(title) C/index.page:8(title)
-msgid "Empathy Internet Messenger"
-msgstr "Komunikator Empathy"
-
-#: C/index.page:27(title)
-#, fuzzy
-msgid ""
-"<media type=\"image\" mime=\"image/png\" src=\"figures/empathy-logo.png\"> "
-"Empathy Internet Messenger logo </media> Empathy Internet Messenger"
-msgstr ""
-"<media type=\"image\" mime=\"image/png\" src=\"figures/empathy-logo.png"
-"\">Logo komunikatora Empathy</media> Komunikator Empathy"
-
-#: C/index.page:35(title)
-msgid "Account Management"
-msgstr "Zarządzanie kontami"
-
-#: C/index.page:39(title)
-msgid "Contact Management"
-msgstr "Zarządzanie kontaktami"
-
-#: C/index.page:43(title)
-msgid "Text Conversations"
-msgstr "Rozmowy tekstowe"
-
-#: C/index.page:47(title)
-msgid "Audio and Video Conversations"
-msgstr "Rozmowy głosowe i wideorozmowy"
-
-#: C/index.page:51(title)
-msgid "Advanced Actions"
-msgstr "Zaawansowane działania"
-
-#: C/import-account.page:10(desc)
-msgid "Import an account from another instant messaging application."
-msgstr "Importowanie konta z innego komunikatora."
-
-#: C/import-account.page:19(name)
-msgid "Peter Haslam"
-msgstr "Peter Haslam"
-
-#: C/import-account.page:20(email)
-msgid "peter.haslam@freenet.de"
-msgstr "peter.haslam@freenet.de"
-
-#: C/import-account.page:42(title)
-msgid "Import an existing account"
-msgstr "Importowanie istniejącego konta"
-
-#: C/import-account.page:44(p)
-msgid ""
-"The first time you run <app>Empathy</app>, it will offer to import your "
-"accounts from other instant messaging applications. Currently, the only "
-"supported application is <app>Pidgin</app>."
-msgstr ""
-"Podczas pierwszego uruchomienia programu <app>Empathy</app> można "
-"zaimportować konta z innych komunikatorów. Obecnie jedynym obsługiwanym "
-"programem jest <app>Pidgin</app>."
-
-#: C/import-account.page:50(p)
-msgid ""
-"Run <app>Empathy</app> for the first time. An assistant will offer you a "
-"number of options to create new accounts."
-msgstr ""
-"Należy uruchomić program <app>Empathy</app> po raz pierwszy. Asystent "
-"zaproponuje kilka opcji utworzenia nowych kont."
-
-#: C/import-account.page:54(p)
-msgid ""
-"Select <gui>Yes, import my account details from</gui> and click "
-"<gui>Forward</gui>."
-msgstr ""
-"Należy wybrać <gui>Tak, zaimportuj szczegóły konta z</gui> i nacisnąć "
-"<gui>Dalej</gui>."
-
-#: C/import-account.page:58(p)
-msgid "Select the check box next to each account you wish to import."
-msgstr "Należy zaznaczyć pole obok każdego konta przeznaczonego do importu."
-
-#: C/import-account.page:66(p)
-msgid ""
-"It is not currently possible to import accounts after you have completed the "
-"first-run assistant."
-msgstr ""
-"Obecnie nie można zaimportować kont po ukończeniu konfiguracji pierwszego "
-"uruchomienia."
-
-#: C/hide-contacts.page:8(desc)
-msgid "Hide the offline contacts from your <gui>Contact List</gui>."
-msgstr "Ukrywanie kontaktów w trybie offline na <gui>Liście kontaktów</gui>."
-
-#: C/hide-contacts.page:19(title)
-msgid "Hide offline contacts"
-msgstr "Ukrywanie kontaktów znajdujących się w trybie offline."
-
-#: C/hide-contacts.page:21(p)
-msgid ""
-"Normally, <app>Empathy</app> shows all your contacts: those that are online, "
-"with which you can have a conversation, and also those that are offline."
-msgstr ""
-"Domyślnie program <app>Empathy</app> wyświetla jedynie kontakty znajdujące "
-"się w trybie online. Można jednak również wyświetlać wszystkie kontakty "
-"włącznie z tymi, które znajdują się w trybie offline."
-
-#: C/hide-contacts.page:25(p)
-msgid "To hide the contacts that are offline:"
-msgstr "Aby ukryć kontakty w trybie offline:"
-
-#: C/hide-contacts.page:31(p)
-msgid ""
-"From the <gui>Contact List</gui> window, choose <guiseq><gui>View</"
-"gui><gui>Offline Contacts</gui></guiseq>, or press <keyseq><key>Ctrl</"
-"key><key>H</key></keyseq>."
-msgstr ""
-"W oknie <gui>Listy kontaktów</gui> należy wybrać <guiseq><gui>Widok</"
-"gui><gui>Kontakty w trybie offline</gui></guiseq> lub nacisnąć "
-"<keyseq><key>Ctrl</key><key>H</key</keyseq>."
-
-#: C/hide-contacts.page:36(p)
-msgid "To show the offline contacts again, repeat the same procedure above."
-msgstr ""
-"Aby ponownie wyświetlić kontakty w trybie offline, należy powtórzyć powyższą "
-"procedurę."
-
-#: C/group-conversations.page:8(desc)
-msgid "Start or join a group conversation with your contacts."
-msgstr "Należy rozpocząć lub dołączyć do rozmowy grupowej."
-
-#: C/group-conversations.page:34(title)
-msgid "Group conversations"
-msgstr "Rozmowy grupowe"
-
-#: C/group-conversations.page:36(p)
-msgid ""
-"Group conversations permits you to have text conversations with more than "
-"one contact at the same time."
-msgstr ""
-"Dzięki rozmowom grupowym można prowadzić rozmowy tekstowe z więcej niż "
-"jednym kontaktem w tym samym czasie."
-
-#: C/group-conversations.page:40(p)
-msgid ""
-"To have a group conversation you need to have a registered account with "
-"either Jabber or Google Talk, or a People Nearby account."
-msgstr ""
-"Aby prowadzić rozmowę grupową należy zarejestrować konto w usłudze Jabber "
-"lub Google Talk, albo użyć konta Osoby w pobliżu."
-
-#: C/group-conversations.page:46(p)
-msgid ""
-"You can have a group conversation only with the contacts that are using the "
-"same service as yours."
-msgstr ""
-"Rozmów grupowych można używać tylko gdy inne kontakty używają tej samej "
-"usługi."
-
-#: C/group-conversations.page:54(title)
-msgid "Start a group conversation"
-msgstr "Rozpoczynanie rozmowy grupowej"
-
-#: C/group-conversations.page:63(p)
-msgid ""
-"From the <gui>Account</gui> drop-down list, select the account you want to "
-"use for the group conversation."
-msgstr ""
-"Z listy rozwijanej <gui>Konto</gui> należy zaznaczyć konto, które ma zostać "
-"użyte do rozmowy grupowej."
-
-#: C/group-conversations.page:69(p)
-msgid ""
-"In the <gui>Server</gui> text box, type the name of server in which the "
-"conversation will be hosted."
-msgstr ""
-"W polu <gui>Serwer</gui> należy wpisać nazwę serwera, przez który będzie "
-"prowadzona rozmowa."
-
-#: C/group-conversations.page:73(p)
-msgid "Leave it empty if it will be on the current server."
-msgstr "Należy zostawić puste jeśli będzie prowadzona na bieżącym serwerze."
-
-#: C/group-conversations.page:78(p)
-msgid ""
-"In the <gui>Room</gui> text box, type the name you want to give to the "
-"conversation."
-msgstr ""
-"W polu <gui>Pokój</gui> należy wpisać nazwę, która ma zostać nadana rozmowie."
-
-#: C/group-conversations.page:82(p)
-msgid ""
-"This will be the name of the room you are going to have a conversation. This "
-"name will be publicly available for other people to join. It is not possible "
-"to create a private room."
-msgstr ""
-"Zostanie ona użyta jako nazwa pokoju do prowadzenia rozmowy. Nazwa ta będzie "
-"dostępna publicznie dla innych osób chcących dołączyć do pokoju. Nie ma "
-"możliwości utworzenia pokoju prywatnego."
-
-#: C/group-conversations.page:90(p)
-msgid ""
-"To invite other contacts to join the group conversation, from the "
-"<gui>Contact List</gui> window, select the contact you want to invite, and "
-"perform one of the following:"
-msgstr ""
-"Aby zaprosić inne kontakty do rozmowy grupowej należy w oknie <gui>Listy "
-"kontaktów</gui> wybrać kontakt, który chcemy zaprosić, a następnie wykonać "
-"jedno z poniższych działań:"
-
-#: C/group-conversations.page:97(p)
-msgid "Right-click on the contact and choose <gui>Invite to chatroom</gui>."
-msgstr ""
-"Należy nacisnąć prawym przyciskiem myszy na kontakt i wybrać <gui>Zaproś do "
-"pokoju rozmowy</gui>."
-
-#: C/group-conversations.page:102(p)
-msgid ""
-"Choose <guiseq><gui>Edit</gui><gui>Contact</gui><gui>Invite to chatroom</"
-"gui></guiseq>."
-msgstr ""
-"Należy wybrać <guiseq><gui>Edycja</gui><gui>Kontakt</gui><gui>Zaproś do "
-"pokoju rozmowy</gui></guiseq>."
-
-#: C/group-conversations.page:107(p)
-msgid ""
-"If you have more than one group conversation open, select the one you want "
-"to invite your contacts."
-msgstr ""
-"Jeśli otwarte jest więcej niż jedno okno rozmowy należy wybrać to do którego "
-"kontakty mają zostać zaproszone."
-
-#: C/group-conversations.page:118(title)
-msgid "Join a group conversation"
-msgstr "Dołączanie do rozmowy grupowej"
-
-#: C/group-conversations.page:128(p)
-msgid "Expand the <gui>Room List</gui> section to see all the existing rooms."
-msgstr ""
-"Należy rozwinąć <gui>Listę pokoi</gui>, aby zobaczyć listę istniejących "
-"pokoi."
-
-#: C/group-conversations.page:133(p)
-msgid "Double-click on the name of a room to join it."
-msgstr "Należy nacisnąć na nazwę pokoju, do którego chcemy dołączyć."
-
-#: C/group-conversations.page:139(p)
-msgid ""
-"It is not possible to join all existing rooms. Some of the rooms might "
-"require a password, or might be invitation only. <app>Empathy</app> does not "
-"support these kind of rooms."
-msgstr ""
-"Nie można dołączyć do wszystkich istniejących pokoi. Niektóre pokoje mogą "
-"wymagać podania hasła lub choćby zaproszenia. Program <app>Empathy</app> nie "
-"obsługuje tego rodzaju pokojów."
-
-#: C/geolocation-what-is.page:9(desc)
-msgid "Understanding geolocation."
-msgstr "Działanie geolokalizacji."
-
-#: C/geolocation-what-is.page:33(title)
-msgid "What is geolocation"
-msgstr "Czym jest geolokalizacja"
-
-#: C/geolocation-what-is.page:35(p)
-msgid ""
-"Geolocation allows you to identify the real geographical location of a "
-"computer or a device connected to the Internet."
-msgstr ""
-"Geolokalizacja pozwala na określenie rzeczywistego położenia geograficznego "
-"komputera lub urządzenia podłączonego do Internetu."
-
-#: C/geolocation-what-is.page:37(p)
-msgid "With geolocation in <app>Empathy</app> you can:"
-msgstr "Dzięki funkcji geolokalizacji w programie <app>Empathy</app> można:"
-
-#: C/geolocation-what-is.page:42(p)
-msgid "Publish your geographical location to your contacts."
-msgstr "Publikować położenie geograficzne swoim kontaktom."
-
-#: C/geolocation-what-is.page:47(p)
-msgid "See your contacts’ geographical location and quickly contact them."
-msgstr ""
-"Śledzić położenie geograficzne geograficzne kontaktów i szybko się z nimi "
-"łączyć."
-
-#: C/geolocation-what-is.page:52(p)
-msgid ""
-"Set the accuracy of your location and the device used to discover your "
-"location."
-msgstr ""
-"Ustawić dokładność swojego położenia i urządzenia używanego do określania "
-"położenia."
-
-#: C/geolocation-what-is.page:60(p)
-msgid ""
-"In order to see your contacts’ geographical locations, they need to use a "
-"service and an application that supports geolocation."
-msgstr ""
-"Aby śledzić położenie geograficzne kontaktów konieczne jest, aby używali "
-"usługi i programu obsługującego geolokalizację."
-
-#: C/geolocation-turn.page:9(desc)
-msgid "How to activate and deactivate geolocation in <app>Empathy</app>."
-msgstr "Jak włączać i wyłączać geolokalizację w programie <app>Empathy</app>."
-
-#: C/geolocation-turn.page:33(title)
-msgid "Activate/Deactivate geolocation"
-msgstr "Włączanie/Wyłączanie geolokalizacji"
-
-#: C/geolocation-turn.page:37(p)
-msgid "Choose <guiseq><gui>Edit</gui><gui>Preferences</gui></guiseq>."
-msgstr ""
-"Należy wybrać <guiseq><gui>Edycja</gui><gui>Preferencje</gui></guiseq>."
-
-#: C/geolocation-turn.page:42(p)
-msgid "Select the <gui>Location</gui> tab."
-msgstr "Należy wybrać kartę <gui>Położenie</gui>."
-
-#: C/geolocation-turn.page:47(p)
-msgid ""
-"Select <gui>Publish location to my contacts</gui> to activate geolocation."
-msgstr ""
-"Należy wybrać <gui>Publikowanie położenia kontaktom</gui>, aby włączyć "
-"geolokalizację."
-
-#: C/geolocation-turn.page:50(p)
-msgid "To deactivate geolocation, deselect it."
-msgstr "Aby wyłączyć geolokalizację należy ją odznaczyć."
-
-#: C/geolocation-turn.page:55(p)
-msgid ""
-"To increase the accuracy of your position, deselect <gui>Reduce location "
-"accuracy</gui>."
-msgstr ""
-"Aby zwiększyć dokładność własnego położenia należy odznaczyć "
-"<gui>Zmniejszenie dokładności położenia</gui>."
-
-#: C/geolocation-turn.page:61(p)
-#, fuzzy
-msgid ""
-"If you have an external device like a GPS or want to send a more accurate "
-"position, select the appropriate option in the <gui>Location sources</gui> "
-"section."
-msgstr ""
-"W przypadku użycia urządzenia zewnętrznego GPS lub potrzeby przesłania "
-"dokładniejszej pozycji należy zaznaczyć odpowiednią opcję w sekcji "
-"<gui>Ustawienia Geoclue</gui>."
-
-#: C/geolocation-supported.page:7(desc)
-msgid "Services that supports geolocation and compatibility."
-msgstr "Usługi obsługujące geolokalizację i kompatybilność."
-
-#: C/geolocation-supported.page:31(title)
-msgid "Supported services"
-msgstr "Obsługiwane usługi"
-
-#: C/geolocation-supported.page:33(p)
-msgid ""
-"The geolocation feature at the moment is compatible only with the Jabber "
-"service. In order to use it, you and your contacts need to have a Jabber "
-"account."
-msgstr ""
-"Funkcja geolokalizacji jest obecnie kompatybilna jedynie z usługą Jabber. "
-"Aby jej użyć użytkownik i jego kontakty muszą mieć konto Jabber."
-
-#: C/geolocation-supported.page:39(p)
-msgid ""
-"It is necessary that also the server you are using supports the geolocation "
-"feature. Most of the Jabber servers support it. See your service website "
-"documentation for more information."
-msgstr ""
-"Używany serwer musi obsługiwać funkcję geolokalizacji. Większość serwerów "
-"Jabbera obsługuje tę funkcję. Aby uzyskać więcej informacji na ten temat "
-"należy zapoznać się z dokumentacją strony internetowej świadczącej usługę."
-
-#: C/geolocation-supported.page:47(title)
-msgid "Compatibility"
-msgstr "Kompatybilność"
-
-#: C/geolocation-supported.page:49(p)
-msgid ""
-"<app>Empathy</app> geolocation feature is not compatible with other "
-"geographical position services such as <em>Google Latitude</em>, <em>Yahoo "
-"Fire Eagle</em> or <em>Brightkite</em>."
-msgstr ""
-"Funkcja geolokalizacji w programie <app>Empathy</app> nie jest kompatybilna "
-"z innymi usługami pozycji geograficznej takimi jak <em>Google Latitude</em>, "
-"<em>Yahoo Fire Eagle</em> lub <em>Brightkite</em>."
-
-#: C/geolocation-privacy.page:8(desc)
-msgid "What information are sent and to who."
-msgstr "Jakie informacje są wysyłane i do kogo."
-
-#: C/geolocation-privacy.page:32(title)
-msgid "Geolocation Privacy"
-msgstr "Prywatność w geolokalizacji"
-
-#: C/geolocation-privacy.page:35(title)
-msgid "What information is sent"
-msgstr "Jakie informacje są wysyłane"
-
-#: C/geolocation-privacy.page:36(p)
-msgid ""
-"What is possible to send is: your country, region, locality, area, street, "
-"building, floor, room, and postal code, longitude, latitude and altitude, "
-"speed and bearing."
-msgstr ""
-"Można wysyłać następujące dane: kraj, region, położenie, obszar, ulica, "
-"budynek, piętro, pokój, kod pocztowy, długość geograficzna, szerokość "
-"geograficzna i wysokość nad poziomem morza oraz prędkość i kierunek."
-
-#: C/geolocation-privacy.page:40(p)
-msgid ""
-"The accuracy and the quantity of information about your geographical "
-"position are based on the software or on the infrastructure used to discover "
-"your position."
-msgstr ""
-"Dokładność i ilość informacji o pozycji geograficznej użytkownika zależą od "
-"oprogramowania i infrastruktury użytej do określenia jego pozycji."
-
-#: C/geolocation-privacy.page:44(p)
-msgid ""
-"Different kind of networks may have different accuracy settings, and may "
-"send different information. The use of external devices such as GPS or "
-"mobile phone will increase the accuracy of the information sent."
-msgstr ""
-"Różne rodzaje sieci mogą mieć różne ustawienia dokładności i mogą przesyłać "
-"różne informacje. Użycie zewnętrznych urządzeń takich jak GPS lub telefony "
-"komórkowe zwiększa dokładność przesyłanych informacji."
-
-#: C/geolocation-privacy.page:49(p)
-msgid ""
-"When the privacy mode is enabled, nothing more precise than your city will "
-"be sent, even if you are using an external device."
-msgstr ""
-"Po włączeniu trybu prywatnego żadne informacje bardziej szczegółowe niż "
-"miasto w którym znajduje się użytkownik nie zostaną udostępnione, nawet "
-"jeśli zostanie użyte urządzenie zewnętrzne."
-
-#: C/geolocation-privacy.page:56(title)
-msgid "Who can see the information sent"
-msgstr "Osoby mające wgląd do udostępnionych informacji"
-
-#: C/geolocation-privacy.page:57(p)
-msgid "Only your contacts can see your geographical position."
-msgstr ""
-"Jedynie osoby z listy kontaktów mają dostęp do położenia geograficznego "
-"użytkownika."
-
-#: C/geolocation-privacy.page:63(title)
-msgid "What is the privacy mode"
-msgstr "Czym jest tryb prywatny"
-
-#: C/geolocation-privacy.page:64(p)
-msgid ""
-"The privacy mode, enabled by default, is a reduced accuracy mode that will "
-"decrease the accuracy of the geographical position sent to your contacts."
-msgstr ""
-"Tryb prywatny, domyślnie włączony, jest trybem ograniczonej dokładności, "
-"który obniży dokładność położenia geograficznego użytkownika udostępnionego "
-"innym kontaktom."
-
-#: C/geolocation-privacy.page:71(title)
-msgid "Privacy overview"
-msgstr "Przegląd ustawień prywatności"
-
-#: C/geolocation-privacy.page:72(p)
-msgid ""
-"Overview of the various geolocation privacy settings in <app>Empathy</app>."
-msgstr ""
-"Przegląd różnych ustawień prywatności geolokalizacji w programie "
-"<app>Empathy</app>."
-
-#: C/geolocation-privacy.page:77(p)
-msgid "Geolocation is not enabled by default."
-msgstr "Geolokalizacja nie jest domyślnie włączona."
-
-#: C/geolocation-privacy.page:82(p)
-msgid "Privacy mode is enabled by default."
-msgstr "Tryb prywatny jest domyśnie włączony."
-
-#: C/geolocation-privacy.page:87(p)
-msgid ""
-"Privacy mode prevails even when using external and more precise devices."
-msgstr ""
-"Tryb prywatny pozostaje włączony nawet gdy zostaną użyte zewnętrzne, "
-"bardziej dokładne urządzenia."
-
-#: C/geolocation-privacy.page:92(p)
-msgid "Only your contacts can see your position."
-msgstr ""
-"Jedynie kontakty z listy kontaktów użytkownika mają dostęp do informacji o "
-"jego położeniu."
-
-#: C/geolocation-not-showing.page:8(desc)
-msgid "<app>Empathy</app> does not publish my geographical position."
-msgstr ""
-"Program <app>Empathy</app> nie udostępnia informacji o położeniu "
-"geograficznym użytkownika."
-
-#: C/geolocation-not-showing.page:32(title)
-msgid "Geographical position not published"
-msgstr "Położenie geograficzne nie jest udostępniane"
-
-#: C/geolocation-not-showing.page:34(p)
-msgid ""
-"If your contacts cannot see your location, <app>Empathy</app> might not be "
-"able to discover with a good margin of precision your geographical position."
-msgstr ""
-"Jeśli inne kontakty nie mają dostępu do położenia użytkownika, być może "
-"program <app>Empathy</app> nie jest w stanie określić z właściwym marginesem "
-"dokładności położenia geograficznego użytkownika."
-
-#: C/geolocation-not-showing.page:38(p)
-msgid ""
-"In this case, your position will not be published, but you are still able to "
-"see the location of your contacts."
-msgstr ""
-"W takim wypadku położenie użytkownika nie jest udostępniane, choć wciąż "
-"można śledzić położenie innych kontaktów użytkownika."
-
-#: C/geolocation-not-showing.page:42(p)
-msgid ""
-"If you want to publish your geographical position, you can try to use an "
-"external device such as a GPS."
-msgstr ""
-"Jeśli chcemy udostępnić swoje położenie geograficzne, można użyć "
-"zewnętrznych urządzeń GPS."
-
-#: C/geolocation-not-showing.page:48(p)
-msgid ""
-"In order to publish your geographical location, your Jabber server needs to "
-"support the Personal Eventing Protocal (PEP). A list of <link href=\"http://"
-"coccinella.im/servers/servers_by_pubsub_pep.html\">servers which support "
-"PEP</link> is maintained online. Google Talk does not support this feature "
-"at this time."
-msgstr ""
-"Aby udostępnić położenie geograficzne, wykorzystywany serwer Jabber musi "
-"obsługiwać protokół PEP (Personal Eventing Protocal). Lista takich serwerów "
-"jest dostępna w Internecie pod <link href=\"http://coccinella.im/servers/"
-"servers_by_pubsub_pep.html\">tym adresem</link>. Google Talk nie obsługuje w "
-"chwili obecnej tego protokołu."
-
-#: C/geolocation.page:8(desc)
-msgid "Use and understand geolocation in <app>Empathy</app>."
-msgstr ""
-"Używanie i rozumienie działania geolokalizacji w programie <app>Empathy</"
-"app>."
-
-#: C/geolocation.page:32(title)
-msgid "Geographical position"
-msgstr "Położenie geograficzne"
-
-#: C/geolocation.page:35(title)
-msgid "Geolocation"
-msgstr "Geolokalizacja"
-
-#: C/geolocation.page:39(title)
-msgid "Fix common problems"
-msgstr "Rozwiązywanie powszechnych problemów"
-
-#: C/favorite-rooms.page:10(desc)
-msgid "Set, join and manage favorite rooms."
-msgstr "Ustawianie, dołączanie i zarządzanie ulubionymi pokojami."
-
-#: C/favorite-rooms.page:29(title)
-msgid "Favorite rooms"
-msgstr "Ulubione pokoje"
-
-#: C/favorite-rooms.page:32(title)
-msgid "Set a room as a favorite"
-msgstr "Ustawianie ulubionego pokoju"
-
-#: C/favorite-rooms.page:35(p)
-msgid "Join a room."
-msgstr "Należy dołączyć do pokoju."
-
-#: C/favorite-rooms.page:40(p)
-msgid ""
-"See <link xref=\"irc-join-room\"/> for more information on how to join an "
-"IRC room."
-msgstr ""
-"Aby uzyskać więcej informacji na temat dołączania do pokojów IRC, należy "
-"zobaczyć <link xref=\"irc-join-room\"/>"
-
-#: C/favorite-rooms.page:46(p)
-msgid ""
-"See <link xref=\"group-conversations\"/> for more information on how to "
-"start or join a group conversation."
-msgstr ""
-"Aby uzyskać więcej informacji na temat rozpoczynania i dołączania do rozmów "
-"grupowych, należy zobaczyć <link xref=\"group-conversations\"/>."
-
-#: C/favorite-rooms.page:54(p)
-msgid ""
-"From the conversation window, choose <guiseq><gui>Conversation</"
-"gui><gui>Favorite Chat Room</gui></guiseq>."
-msgstr ""
-"W oknie rozmowy należy wybrać <guiseq><gui>Rozmowa</gui><gui>Ulubiony pokój</"
-"gui></guiseq>."
-
-#: C/favorite-rooms.page:63(title)
-msgid "Join favorite rooms"
-msgstr "Dołączanie do ulubionych pokoi"
-
-#: C/favorite-rooms.page:71(p)
-msgid "Press <key>F5</key>."
-msgstr "Należy nacisnąć przycisk <key>F5</key>."
-
-#: C/favorite-rooms.page:76(p)
-msgid ""
-"Choose <guiseq><gui>Room</gui><gui>Join Favorites</gui></guiseq>, to join "
-"all your favorite rooms."
-msgstr ""
-"Należy wybrać <guiseq><gui>Pokój</gui><gui>Dołącz do ulubionych</gui></"
-"guiseq>, aby dołączyć do ulubionych pokoi."
-
-#: C/favorite-rooms.page:82(p)
-msgid "Choose <gui>Room</gui>, and select the favorite room you want to join."
-msgstr ""
-"Należy wybrać <gui>Pokój</gui> i zaznaczyć ulubione pokoje, do których "
-"chcemy dołączyć."
-
-#: C/favorite-rooms.page:90(p)
-msgid ""
-"To join a favorite room, you need to be connected to the Internet and to "
-"your account."
-msgstr ""
-"Aby dołączyć do ulubionego pokoju, należy być podłączonym do Internetu i "
-"swojego konta."
-
-#: C/favorite-rooms.page:98(title)
-msgid "Manage favorite rooms"
-msgstr "Zarządzanie ulubionymi pokojami"
-
-#: C/favorite-rooms.page:101(p)
-msgid ""
-"From the <gui>Contact List</gui> window, choose <guiseq><gui>Room</"
-"gui><gui>Manage Favorites</gui></guiseq>."
-msgstr ""
-"W oknie <gui>Listy kontaktów</gui> należy wybrać <guiseq><gui>Pokój</"
-"gui><gui>Zarządzaj ulubionymi</gui></guiseq>."
-
-#: C/favorite-rooms.page:107(p)
-msgid ""
-"From the <gui>Account</gui> drop-down list, select the account you want to "
-"manage the favorite rooms of."
-msgstr ""
-"Z listy rozwijanej <gui>Konto</gui> należy wybrać konto, którego ulubionymi "
-"pokojami chcemy zarządzać."
-
-#: C/favorite-rooms.page:111(p)
-msgid "Select <gui>All</gui> to see all you favorite rooms."
-msgstr ""
-"Należy wybrać <gui>Wszystkie</gui>, aby zobaczyć wszystkie swoje ulubione "
-"pokoje."
-
-#: C/favorite-rooms.page:116(p)
-msgid "Select the favorite room you want to manage:"
-msgstr "Należy zaznaczyć ulubione pokoje, którymi chcemy zarządzać:"
-
-#: C/favorite-rooms.page:121(p)
-msgid ""
-"Select the <gui>Auto-Connect</gui> check-box in order to automatically join "
-"that room when you connect to your account."
-msgstr ""
-"Należy zaznaczyć pole <gui>Automatyczne łączenie</gui>, aby automatycznie "
-"dołączyć do danego pokoju po połączeniu z kontem."
-
-#: C/favorite-rooms.page:127(p)
-msgid "Click on <gui>Remove</gui> to remove the room from your favorites."
-msgstr ""
-"Należy nacisnąć na <gui>Usuń</gui>, aby usunąć pokój ze swoich ulubionych."
-
-#: C/favorite-rooms.page:134(p)
-msgid "When done, click <gui>Close</gui>."
-msgstr "Po zakończeniu należy nacisnąć przycisk <gui>Zamknij</gui>."
-
-#: C/disable-account.page:9(desc)
-msgid "Prevent <app>Empathy</app> from automatically logging in to an account."
-msgstr ""
-"Należy wyłączyć w programie <app>Empathy</app> funkcję automatycznego "
-"logowania na koncie."
-
-#: C/disable-account.page:40(title)
-msgid "Disable an account"
-msgstr "Wyłączanie konta"
-
-#: C/disable-account.page:42(p)
-msgid ""
-"You can disable an account to prevent <app>Empathy</app> from logging in to "
-"it without removing the account entirely. You may wish to disable and re-"
-"enable an account if you only want to be logged in to the account at certain "
-"times, but you still want to use <app>Empathy</app> for other accounts."
-msgstr ""
-"Można wyłączyć konto bez jego usuwania, aby program <app>Empathy</app> nie "
-"logował się na koncie. Można wyłączyć i ponownie włączyć konto jeśli chcemy "
-"się czasami na to konto zalogować, ale chcemy używać programu <app>Empathy</"
-"app> do obsługi innych kont."
-
-#: C/disable-account.page:53(p)
-msgid ""
-"Select the account you wish to disable from the accounts list on the left "
-"side of the window."
-msgstr ""
-"Należy zaznaczyć konto, które chcemy wyłączyć na liście kont po lewej "
-"stronie okna."
-
-#: C/disable-account.page:57(p)
-msgid "On the right side of the window, switch it off."
-msgstr ""
-
-#: C/disable-account.page:62(p)
-#, fuzzy
-msgid "To re-enable the account, switch it on."
-msgstr ""
-"Aby ponownie włączyć konto należy jedynie zaznaczyć pole <gui style="
-"\"checkbox\">Włączone</gui>."
-
-#: C/create-account.page:9(desc)
-msgid "Register for an account with one of the supported messaging services."
-msgstr "Należy zarejestrować konto jednej z obsługiwanych usług komunikatora."
-
-#: C/create-account.page:34(title)
-msgid "Register for a new account"
-msgstr "Rejestracja nowego konta"
-
-#: C/create-account.page:36(p)
-msgid ""
-"Most account types require you to create an account with a account provider "
-"before you can connect using instant messaging applications like "
-"<app>Empathy</app>. With some account providers, you can use <app>Empathy</"
-"app> to register for a new account, using the same steps as you would to "
-"<link xref=\"add-account\">add an account</link>."
-msgstr ""
-"Większość rodzajów kont wymaga stworzenia konta u dostawcy usługi przed "
-"połączeniem za pomocą komunikatora takiego jak program <app>Empathy</app>. "
-"Niektórzy dostawcy kont pozwalają na użycie programu <app>Empathy</app> do "
-"rejestracji nowego konta przy użyciu tych samych kroków jak te potrzebne "
-"przy <link xref=\"add-account\">dodawaniu konta</link>."
-
-#: C/create-account.page:42(p)
-#, fuzzy
-msgid ""
-"This page provides information on creating a new account for various types "
-"of accounts. Your account provider should give you a login ID and a "
-"password, as well as any additional information you need to connect using "
-"<app>Empathy</app>."
-msgstr ""
-"Ta strona dostarcza informacje na temat tworzenia nowego konta dla różnych "
-"rodzajów protokołów. Dostawca konta powinien nadać użytkownikowi "
-"identyfikator i hasło oraz udzielić wszelkich dodatkowych informacji "
-"potrzebnych do nawiązania połączenia za pomocą programu <app>Empathy</app>."
-
-#: C/create-account.page:47(title)
-msgid "Facebook"
-msgstr "Facebook"
-
-#: C/create-account.page:48(p)
-msgid ""
-"Facebook is one of the most-used social networks. It allows users to create "
-"their own profile and to communicate with their friends."
-msgstr ""
-
-#: C/create-account.page:52(p)
-msgid ""
-"To use Facebook to communicate with your friends, you will need to create a "
-"new account from the website: <link href=\"http://www.facebook.com\">www."
-"facebook.com</link>."
-msgstr ""
-
-#: C/create-account.page:60(title) C/audio-video.page:170(p)
-msgid "Jabber"
-msgstr "Jabber"
-
-#: C/create-account.page:62(p)
-msgid ""
-"Jabber is an open instant messaging system. Like email, Jabber allows you to "
-"choose your account provider and communicate with all other Jabber users, "
-"regardless of their account provider."
-msgstr ""
-"Jabber jest otwartym systemem komunikacyjnym. Podobnie jak e-mail Jabber "
-"pozwala na wybór dostawcy konta i komunikację z innymi użytkownikami Jabbera "
-"niezależnie od ich dostawcy konta."
-
-#: C/create-account.page:66(p)
-msgid ""
-"You will need to create a new account with a Jabber provider. There are many "
-"free providers; one popular provider is <link href=\"http://register.jabber."
-"org/\">Jabber.org</link>."
-msgstr ""
-"Należy stworzyć nowe konto u jednego z dostawców usług Jabber. Istnieje "
-"wielu dostawców niepobierających opłat; jednym z popularnych dostawców jest "
-"<link href=\"http://register.jabber.org/\">Jabber.org</link>."
-
-#: C/create-account.page:71(p)
-msgid ""
-"If you use Google Mail or Google Talk, you already have a Jabber account. "
-"Google Talk is a Jabber service. Simply use your Google Mail address and "
-"password in <app>Empathy</app> to connect."
-msgstr ""
-"Google Mail i Google Talk są usługami zawierającymi w sobie konto Jabbera. "
-"Google Talk jest usługą Jabbera. Należy użyć swojego adresu Google Mail i "
-"hasła, aby połączyć się za pomocą programu <app>Empathy</app>."
-
-#: C/create-account.page:78(title) C/audio-video.page:190(p)
-msgid "People Nearby"
-msgstr "Osoby w pobliżu"
-
-#: C/create-account.page:80(p)
-msgid ""
-"You do not need to create an account with a service provider to use this "
-"feature. This service works whenever you are connected to a local network, "
-"such as a wireless hotspot. It automatically finds all other users on the "
-"network who are also using this service."
-msgstr ""
-"Nie ma potrzeby tworzenia konta u dostawcy usług, aby korzystać z tej "
-"funkcji. Usługa ta działa po podłączeniu do dowolnej sieci lokalnej, takiej "
-"jak bezprzewodowy punkt dostępowy. Usługa automatycznie wykrywa w sieci "
-"innych użytkowników, którzy korzystają z tej usługi."
-
-#: C/create-account.page:85(p)
-msgid "For more information, see <link xref=\"salut-protocol\"/>."
-msgstr "Aby uzyskać więcej informacji,należy zobaczyć <link xref=\"salut\"/>."
-
-#: C/create-account.page:89(title) C/audio-video.page:205(p)
-msgid "SIP"
-msgstr "SIP"
-
-#: C/create-account.page:91(p)
-msgid ""
-"SIP is an open system which allows users to have audio and video "
-"conversations over the Internet. You need to create an account with a SIP "
-"provider. You can communicate with all other SIP users, regardless of which "
-"SIP provider they use."
-msgstr ""
-"SIP jest otwartym systemem pozwalającym użytkownikom na nawiązywanie "
-"połączeń głosowych i wideorozmów w sieci Internet. Należy utworzyć konto u "
-"usługodawcy SIP. Można łączyć się z innymi użytkownikami SIP niezależnie od "
-"tego z jakiego usługodawcy SIP korzystają."
-
-#: C/create-account.page:97(p)
-msgid ""
-"Due to technical differences, the free <link href=\"https://www.ekiga.net/"
-"index.php?page=register\">Ekiga.net</link> service does not currently work "
-"with <app>Empathy</app>."
-msgstr ""
-"Z powodu różnic technicznych bezpłatne usługi <link href=\"https://www.ekiga."
-"net/index.php?page=register\">Ekiga.net</link> nie są obsługiwane przez "
-"obecną wersją programu <app>Empathy</app>."
-
-#: C/create-account.page:102(p)
-msgid ""
-"Some SIP providers allow you to call normal phones from your computer. "
-"Generally, you will need to subscribe to a paid service for this feature."
-msgstr ""
-"Niektórzy dostawcy usług SIP umożliwiają wykonywanie połączeń ze zwykłymi "
-"telefonami. Zasadniczo, aby korzystać z tej funkcji należy zakupić "
-"odpowiednią usługę."
-
-#: C/create-account.page:107(title) C/audio-video.page:165(p)
-msgid "IRC"
-msgstr "IRC"
-
-#: C/create-account.page:109(p)
-msgid ""
-"You do not need to register for an account to use IRC. Although you specify "
-"a nickname when you add an IRC account to <app>Empathy</app>, this nickname "
-"is only established each time you connect. If another user is using the "
-"nickname, you will need to choose a new nickname."
-msgstr ""
-"Aby używać IRC nie potrzeba rejestrować konta. Chociaż pseudonim jest "
-"określony podczas dodawania konta IRC do <app>Empathy</app>, to pseudonim "
-"ten jest ustalany każdorazowo podczas połączenia. Jeśli inny użytkownik "
-"używa tego samego pseudonimu w danej chwili, należy wybrać inny pseudonim."
-
-#: C/create-account.page:114(p)
-#, fuzzy
-msgid ""
-"Some IRC networks use a service called NickServ to allow users to protect "
-"their nicknames. See <link xref=\"irc-nick-password\"/> for more information."
-msgstr ""
-"Niektóre sieci IRC używają usługi NickServ, aby umożliwić użytkownikom "
-"ochronę ich pseudonimów. Aby uzyskać więcej informacji na ten temat, należy "
-"zobaczyć <link xref=\"irc-nick-password\"/>."
-
-#: C/create-account.page:117(p)
-msgid ""
-"Some IRC servers are password protected. You will need to know the password "
-"to connect to these servers. Generally, these are private IRC networks."
-msgstr ""
-"Niektóre serwery IRC są chronione hasłem. Aby połączyć się z tymi serwerami "
-"konieczna jest znajomość hasła. Zasadniczo, są to prywatne sieci IRC."
-
-#: C/create-account.page:122(title)
-msgid "Proprietary Services"
-msgstr "Usługi własnościowe"
-
-#: C/create-account.page:124(p)
-msgid ""
-"There are many proprietary instant messaging services that have been "
-"developed by different companies or organizations. <app>Empathy</app> allows "
-"you to connect to an existing account for most popular services. To create a "
-"new account with one of these services, you will need to visit the service’s "
-"web site and agree to its terms of use."
-msgstr ""
-"Istnieje wiele własnościowych komunikatorów, które zostały stworzone przez "
-"różne firmy i instytucje. Program <app>Empathy</app> pozwala na połączenie z "
-"istniejącym kontem w większości najpopularniejszych sieci. Aby utworzyć nowe "
-"konto w jednym z tych komunikatorów należy odwiedzić stronę komunikatora i "
-"wyrazić zgodę na warunki użytkowania."
-
-#: C/create-account.page:133(link) C/audio-video.page:135(p)
-msgid "AIM"
-msgstr "AIM"
-
-#: C/create-account.page:138(link) C/audio-video.page:160(p)
-msgid "ICQ"
-msgstr "ICQ"
-
-#: C/create-account.page:143(link) C/audio-video.page:175(p)
-msgid "MSN"
-msgstr "MSN"
-
-#: C/create-account.page:148(link) C/audio-video.page:210(p)
-msgid "Yahoo!"
-msgstr "Yahoo!"
-
-#: C/change-status.page:9(desc)
-msgid "Change your status to advertise your availability to your contacts."
-msgstr "Należy zmienić stan, aby ogłosić swoim kontaktom dostępność."
-
-#: C/change-status.page:39(title)
-msgid "Change your status"
-msgstr "Zmiana stanu dostępności"
-
-#: C/change-status.page:41(p)
-msgid ""
-"You can set your status to indicate your availability to your contacts. "
-"<app>Empathy</app> allows you to select from a list of defined statuses."
-msgstr ""
-"Można ustawić stan, aby pokazać swoją dostępność dla kontaktów. Program "
-"<app>Empathy</app> pozwala na wybór z listy zdefiniowanych stanów."
-
-#: C/change-status.page:46(p)
-msgid ""
-"Click on the drop-down list at the top of the <gui>Contact List</gui> window."
-msgstr ""
-"Należy wybrać z rozwijanej listy na górze okna <gui>Listy kontaktów</gui>."
-
-#: C/change-status.page:51(p)
-msgid "Select a status from the list."
-msgstr "Należy wybrać stan dostępności z listy."
-
-#: C/change-status.page:57(p)
-#, fuzzy
-msgid ""
-"See <link xref=\"status-icons\"/> for a list of the built-in statuses and "
-"what they mean. You can also <link xref=\"set-custom-status\">add custom "
-"status messages</link> to provide more information about your availability "
-"to your contacts."
-msgstr ""
-"Aby zobaczyć listę domyślnie dostępnych stanów i ich znaczenie należy "
-"zapoznać się z <link xref=\"status-icons\"/>. Można również <link xref=\"set-"
-"custom-message\">dodać własny stan</link>, aby wyświetlać więcej informacji "
-"o swojej dostępności dla kontaktów."
-
-#: C/change-status.page:63(p)
-msgid ""
-"If you do not use your computer for a while, or if the screensaver is on, "
-"the status will be automatically set to Away."
-msgstr ""
-"Jeśli nie używa się komputera przez chwilę, lub jeśli włączony jest "
-"wygaszacz ekranu, stan zostanie automatycznie przełączony do trybu Nieobecny."
-
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/audio-video.page:58(None)
-msgid ""
-"@@image: 'figures/audio-input-microphone.png'; "
-"md5=8d89026b66a263a3bc5b1f0665948567"
-msgstr ""
-"@@image: 'figures/audio-input-microphone.png'; "
-"md5=8d89026b66a263a3bc5b1f0665948567"
-
-#: C/audio-video.page:8(desc)
-msgid ""
-"Information on when it is possible to have an audio or video conversation."
-msgstr "Informacja dotycząca możliwości nawiązania rozmowy głosowej lub wideo."
-
-#: C/audio-video.page:32(title)
-msgid "Audio and video support"
-msgstr "Obsługa rozmów głosowych i wideorozmów"
-
-#: C/audio-video.page:34(p)
-msgid ""
-"You can only have audio and video conversation with contacts who are using "
-"an application which also supports this feature. When your contacts support "
-"audio or video conversations, you will see the following icons next to their "
-"names in the contact list:"
-msgstr ""
-"Rozmowy głosowe i wideorozmowy można nawiązywać jedynie z kontaktami "
-"używającymi programu obsługującego tę funkcję. Gdy kontakty obsługują "
-"rozmowy głosowe i wideorozmowy, przy ich nazwach na liście kontaktów "
-"widoczne będą te ikony:"
-
-#: C/audio-video.page:43(p)
-msgid "Icon"
-msgstr "Ikona"
-
-#: C/audio-video.page:48(p)
-msgid "Description"
-msgstr "Opis"
-
-#: C/audio-video.page:58(media)
-msgid "Icon for audio conversation"
-msgstr "Ikona rozmowy głosowej"
-
-#: C/audio-video.page:64(p)
-msgid "The contact is able to have an audio conversation."
-msgstr "Kontakt może nawiązywać rozmowy głosowe."
-
-#: C/audio-video.page:70(media)
-msgid "Icon for video conversation"
-msgstr "Ikona wideorozmowy"
-
-#: C/audio-video.page:76(p)
-msgid "The contact is able to have a video conversation."
-msgstr "Kontakt może nawiązywać wideorozmowy."
-
-#: C/audio-video.page:83(p)
-msgid ""
-"In order to have an audio conversation, you need to have a sound card that "
-"is supported by your operating system, and a working microphone."
-msgstr ""
-"Aby nawiązywać rozmowy głosowe potrzebna jest karta dźwiękowa obsługiwana "
-"przez system operacyjny oraz działający mikrofon."
-
-#: C/audio-video.page:87(p)
-msgid ""
-"In order to have a video conversation, you need to have a webcam that is "
-"supported by your operating system, and a working microphone."
-msgstr ""
-"Aby nawiązywać wideorozmowy potrzebna jest kamera internetowa obsługiwana "
-"przez system operacyjny oraz działający mikrofon."
-
-#: C/audio-video.page:95(title)
-msgid "Supported Account Types"
-msgstr "Obsługiwane typy kont"
-
-#: C/audio-video.page:97(p)
-msgid ""
-"You can only have audio and video conversations using accounts on certain "
-"supported services. The following table lists whether audio and video is "
-"supported for each type of account."
-msgstr ""
-"Można nawiązywać rozmowy głosowe i wideorozmowy jedynie używając kont "
-"pewnych obsługiwanych usług. Poniższa tabele pokazuje czy rozmowy głosowe i "
-"wideorozmowy są obsługiwane dla każdego rodzaju konta."
-
-#: C/audio-video.page:102(p)
-msgid ""
-"Account types are provided by plugins. Your system may not have all of the "
-"following types available, or it may have types not listed here. Updated "
-"plugins may make audio or video conversations possible on account types that "
-"are listed as unsupported here."
-msgstr ""
-"Obsługa typów kont jest zapewniana przez wtyczki. System może nie "
-"udostępniać wszystkich z wymienionych typów lub mogą one nie być wymienione. "
-"Uaktualnione wtyczki mogą umożliwiać rozmowy głosowe lub wideorozmowy dla "
-"rodzajów kont, które oznaczone są tu jako nieobsługiwane."
-
-#: C/audio-video.page:110(p)
-msgid ""
-"I'd like to do tables like this using nothing for No and ✔ for Yes, but we "
-"need to look at the accessibility impact. I've <link href=\"http://mail."
-"gnome.org/archives/gnome-doc-list/2009-September/msg00006.html\">asked the "
-"accessibility team</link> for input."
-msgstr ""
-"Chciałbym stworzyć tabele podobne do tej, gdzie brak zaznaczenia oznacza "
-"brak obsługi a znak ✔ oznacza obsługę konta, jednak należy przyjrzeć się "
-"wpływowi na dostęp uniwersalny. <link href=\"http://mail.gnome.org/archives/"
-"gnome-doc-list/2009-September/msg00006.html\">Poprosiłem zespół "
-"odpowiedzialny za dostęp uniwersalny</link> o informację."
-
-#: C/audio-video.page:118(p)
-msgid ""
-"There's recent work on telepathy-butterfly and papyon to support audio and "
-"video for MSN. It might be released in time for 2.28, but since it doesn't "
-"follow the Gnome release schedule, I can't be sure. If it looks like it's "
-"going to ship, let's mark it Yes."
-msgstr ""
-"Toczą się prace nad telepathy-butterfly i papyon, aby zapewnić obsługę "
-"rozmów głosowych i wideorozmów dla MSN. Mogą one się zakończyć na czas "
-"wydania 2.28, jednak ponieważ nie są one związane z cyklem wydawniczym "
-"Gnome, nie można mieć pewności. Jeśli będzie prawdopodobne, że uda się "
-"zdążyć z wydaniem, należy oznaczyć obsługę tego protokołu jako działającą."
-
-#: C/audio-video.page:128(p)
-msgid "Service"
-msgstr "Usługa"
-
-#: C/audio-video.page:129(p)
-msgid "Audio"
-msgstr "Rozmowy głosowe"
-
-#: C/audio-video.page:130(p)
-msgid "Video"
-msgstr "Wideorozmowy"
-
-#: C/audio-video.page:136(p) C/audio-video.page:137(p)
-#: C/audio-video.page:141(p) C/audio-video.page:142(p)
-#: C/audio-video.page:146(p) C/audio-video.page:147(p)
-#: C/audio-video.page:156(p) C/audio-video.page:157(p)
-#: C/audio-video.page:161(p) C/audio-video.page:162(p)
-#: C/audio-video.page:166(p) C/audio-video.page:167(p)
-#: C/audio-video.page:181(p) C/audio-video.page:182(p)
-#: C/audio-video.page:186(p) C/audio-video.page:187(p)
-#: C/audio-video.page:191(p) C/audio-video.page:192(p)
-#: C/audio-video.page:196(p) C/audio-video.page:197(p)
-#: C/audio-video.page:201(p) C/audio-video.page:202(p)
-#: C/audio-video.page:211(p) C/audio-video.page:212(p)
-#: C/audio-video.page:216(p) C/audio-video.page:217(p)
-msgid "No"
-msgstr "Brak"
-
-#: C/audio-video.page:140(p)
-msgid "Facebook Chat"
-msgstr "Facebook Chat"
-
-#: C/audio-video.page:145(p)
-msgid "gadugadu"
-msgstr "gadugadu"
-
-#: C/audio-video.page:150(p)
-msgid "Google Talk"
-msgstr "Google Talk"
-
-#: C/audio-video.page:151(p) C/audio-video.page:152(p)
-#: C/audio-video.page:171(p) C/audio-video.page:172(p)
-#: C/audio-video.page:176(p) C/audio-video.page:177(p)
-#: C/audio-video.page:206(p) C/audio-video.page:207(p)
-msgid "Yes"
-msgstr "Tak"
-
-#: C/audio-video.page:155(p)
-msgid "Groupwise"
-msgstr "Groupwise"
-
-#: C/audio-video.page:180(p)
-msgid "myspace"
-msgstr "myspace"
-
-#: C/audio-video.page:185(p)
-msgid "qq"
-msgstr "qq"
-
-#: C/audio-video.page:195(p)
-msgid "sametime"
-msgstr "sametime"
-
-#: C/audio-video.page:200(p)
-msgid "silc"
-msgstr "silc"
-
-#: C/audio-video.page:215(p)
-msgid "zephyr"
-msgstr "zephyr"
-
-#: C/audio-call.page:9(desc)
-msgid "Call your contacts over the Internet."
-msgstr "Nawiązywanie połączeń głosowych przez Internet"
-
-#: C/audio-call.page:27(title)
-msgid "Start an audio conversation"
-msgstr "Nawiązywanie połączeń głosowych"
-
-#: C/audio-call.page:29(p)
-msgid ""
-"You can call your contacts and have an audio conversation with them. This "
-"features only works with certain types of accounts, and it requires the "
-"other person to have an application that supports audio calls."
-msgstr ""
-"Można nawiązywać rozmowy głosowe z kontaktami. Funkcja ta działa jedynie na "
-"pewnego rodzaju kontach i wymaga, aby inna osoba używała programu "
-"obsługującego rozmowy głosowe."
-
-#: C/audio-call.page:34(p)
-#, fuzzy
-msgid ""
-"From the <gui>Contact List</gui> window, click the <media type=\"image\" "
-"mime=\"image/png\" src=\"figures/camera-web.png\">video call</media> icon "
-"next to the name of the contact you wish to call and choose <gui style="
-"\"menuitem\">Audio Call</gui>."
-msgstr ""
-"W oknie <gui>Listy kontaktów</gui> należy nacisnąć na ikonę <media type="
-"\"image\" mime=\"image/png\" src=\"figures/camera-web.png\">wideorozmowy</"
-"media> znajdującej się obok nazwy kontaktu, z którym chcemy ją nawiązać i "
-"wybrać <gui style=\"menuitem\">Wideorozmowa</gui>. Można również nacisnąć "
-"kontakt prawym przyciskiem myszy i wybrać <gui>Wideorozmowa</gui>."
-
-#: C/audio-call.page:55(p)
-#, fuzzy
-msgid ""
-"To turn an audio conversation into a video conversation, choose <guiseq><gui "
-"style=\"menu\">Video</gui><gui style=\"menuitem\">Video On</gui></guiseq>."
-msgstr ""
-"Aby zakończyć rozmowę, należy wybrać <guiseq><gui style=\"menu\">Zadzwoń</"
-"gui><gui style=\"menuitem\">Rozłącz</gui></guiseq>."
-
-#: C/audio-call.page:63(title)
-#, fuzzy
-msgid "Start an audio conversation with a meta-contact"
-msgstr "Nawiązywanie rozmowy z kontaktem IRC."
-
-#: C/audio-call.page:71(p)
-#, fuzzy
-msgid ""
-"Select the contact you want to have the conversation, and from the menu "
-"select <gui style=\"menuitem\">Audio Call</gui>."
-msgstr ""
-"Kliknąć prawym przyciskiem myszy w nazwę kontaktu, z którym chcemy nawiązać "
-"rozmowę i wybrać <gui>Rozmowa</gui>"
-
-#: C/add-contact.page:9(desc)
-msgid "Add someone to the contact list."
-msgstr "Dodawanie kontaktu do listy."
-
-#: C/add-contact.page:33(title)
-msgid "Add someone to your list of contacts"
-msgstr "Dodawanie kontaktu do listy kontaktów"
-
-#: C/add-contact.page:37(p)
-msgid "Choose <guiseq><gui>Chat</gui><gui>Add Contact</gui></guiseq>."
-msgstr ""
-"Należy wybrać <guiseq><gui>Rozmowa</gui><gui>Dodaj kontakt</gui></guiseq>."
-
-#: C/add-contact.page:40(p)
-msgid ""
-"From the <gui>Account</gui> drop-down list, select the account you wish to "
-"use to connect to your contact. Your contact will need to be using the same "
-"service as the account you select."
-msgstr ""
-"Z rozwijanej listy <gui>Kont</gui> należy wybrać konto, którego chcemy "
-"używać do połączenia z kontaktami. Kontakty muszą używać tej samej usługi "
-"jak wybrane konto."
-
-#: C/add-contact.page:45(p)
-msgid ""
-"In the <gui>Identifier</gui> field, enter your contact’s login ID, username, "
-"screen name, or other appropriate identifier for the service type."
-msgstr ""
-"W polu <gui>Identyfikator</gui> należy wpisać identyfikator logowania, nazwę "
-"użytkownika, pseudonim lub inny identyfikator właściwy dla danego rodzaju "
-"usługi."
-
-#: C/add-contact.page:49(p)
-msgid ""
-"In the <gui>Alias</gui> field, type your contact’s name as you would like it "
-"to appear in your contact list."
-msgstr ""
-"W polu <gui>Alias</gui> należy wpisać nazwę kontaktu, która ma być "
-"wyświetlana na liście kontaktów."
-
-#: C/add-contact.page:53(p)
-msgid "Click <gui>Add</gui> to add the person to your list of contacts."
-msgstr ""
-"Należy nacisnąć przycisk <gui>Dodaj</gui>, aby dodać osobę do listy "
-"kontaktów."
-
-#: C/add-contact.page:61(p)
-msgid ""
-"To add a new person to your list of contacts, you need to be connected to "
-"the Internet and to your account."
-msgstr ""
-"Aby dodać nową osobę do listy kontaktów, należy być podłączonym do Internetu "
-"i do konta."
-
-#: C/add-account.page:9(desc)
-msgid "Add a new account to <app>Empathy</app>."
-msgstr "Dodawanie nowego konta do programu <app>Empathy</app>."
-
-#: C/add-account.page:39(title)
-msgid "Add a new account"
-msgstr "Dodawanie nowego konta"
-
-#: C/add-account.page:41(p)
-msgid ""
-"You can add instant messaging accounts from any supported service to "
-"communicate with all of your contacts in <app>Empathy</app>. For some "
-"account providers, these steps will also allow you to register for a new "
-"account. For more details, see <link xref=\"create-account\"/>."
-msgstr ""
-"Można dodać konta komunikatora każdej obsługiwanej usługi, aby komunikować "
-"się wszystkimi kontaktami przy użyciu programu <app>Empathy</app>. W "
-"przypadku niektórych dostawców kont można w ten sposób również zarejestrować "
-"nowe konto. Aby uzyskać więcej informacji na ten temat, należy zapoznać się "
-"z <link xref=\"create-account\"/>."
-
-#: C/add-account.page:52(p)
-msgid "Click <gui style=\"button\">Add</gui>."
-msgstr "Należy nacisnąć przycisk <gui style=\"button\">Dodaj</gui>."
-
-#: C/add-account.page:57(p)
-msgid ""
-"From the <gui>Protocol</gui> drop-down list, select the type of account you "
-"wish to add."
-msgstr ""
-"Z rozwijanej listy <gui>Protokół</gui> należy wybrać rodzaj konta, które "
-"chcemy dodać."
-
-#: C/add-account.page:61(p)
-msgid ""
-"If you do not already have a registered account, select <gui>Create a new "
-"account on the server</gui>. This feature is not available for all account "
-"types, and may not work with some account providers. See <link xref=\"create-"
-"account\"/> for more information."
-msgstr ""
-"W przypadku braku zarejestrowanego konta należy wybrać <gui>Utworzenie nowe "
-"konta na serwerze</gui>. Ta funkcja nie jest dostępna dla wszystkich "
-"rodzajów kont i może nie być dostępna u niektórych dostawców kont. Aby "
-"uzyskać więcej informacji na ten temat, należy zobaczyć <link xref=\"create-"
-"account\"/>."
-
-#: C/add-account.page:66(p)
-msgid ""
-"Enter the required information. For most accounts, you will only need a "
-"login ID and a password. Some accounts may require additional information. "
-"See <link xref=\"accounts-window#details\"/> for more information."
-msgstr ""
-"Należy wprowadzić wymagane informacje. W przypadku większości kont potrzebne "
-"będą identyfikator logowania i hasło. Niektóre konta mogą wymagać dodatkowej "
-"informacji. Aby uzyskać więcej informacji, należy zobaczyć <link xref="
-"\"accounts-window#details\"/>."
-
-#: C/add-account.page:71(p)
-#, fuzzy
-msgid "Click <gui style=\"button\">Log in</gui>."
-msgstr "Należy nacisnąć przycisk <gui style=\"button\">Dodaj</gui>."
-
-#: C/add-account.page:78(p)
-msgid ""
-"To change the name that identifies the account in the <gui>Accounts</gui> "
-"window, select the account from the list on the left and either click on the "
-"name or press the space bar. Edit the account name and press <key>Enter</"
-"key> when you’re finished."
-msgstr ""
-"Aby zmienić nazwę identyfikującą konto w oknie <gui>Kont</gui>, należy "
-"wybrać konto z listy po lewej stronie i kliknąć w nazwę lub nacisnąć "
-"przycisk spacji. Po zakończeniu modyfikacji nazwy należy nacisnąć przycisk "
-"<key>Enter</key>."
-
-#: C/accounts-window.page:11(desc)
-msgid "Add, modify, and delete accounts."
-msgstr "Dodawanie, modyfikowanie i usuwanie kont."
-
-#: C/accounts-window.page:33(title)
-msgid "Accounts Window"
-msgstr "Okno kont"
-
-#: C/accounts-window.page:35(p)
-msgid ""
-"The <gui>Accounts</gui> window allows you to add, modify, and delete "
-"accounts."
-msgstr ""
-"Okno <gui>Kont</gui> pozwala na dodawanie, modyfikowanie i usuwanie kont."
-
-#: C/accounts-window.page:43(title)
-msgid "Account Details"
-msgstr "Szczegóły konta"
-
-#: C/accounts-window.page:44(p)
-msgid ""
-"For most types of accounts, you can simply enter a login ID and a password. "
-"Certain accounts or account types, however, may require additional "
-"information."
-msgstr ""
-"W przypadku większości typów kont można po prostu wprowadzić identyfikator "
-"logowania i hasło. Pewne konta lub typy kont mogą jednak wymagać podania "
-"dodatkowych informacji."
-
-#: C/account-jabber.page:7(desc)
-msgid "Advanced options for Jabber and Google Talk accounts."
-msgstr "Opcje zaawansowane dla kont Jabber i Google Talk."
-
-#: C/account-jabber.page:29(title)
-msgid "Jabber account details"
-msgstr "Szczegóły konta Jabber"
-
-#: C/account-jabber.page:31(p)
-msgid ""
-"Most Jabber accounts will require only a login ID and a password to connect. "
-"For some accounts or on certain types of networks, you may need to enter "
-"additional information in the <gui>Advanced</gui> section. Normally, you "
-"will not need to use the advanced options below. For general instructions on "
-"adding an account, see <link xref=\"add-account\"/>."
-msgstr ""
-"Większość kont Jabber wymaga do połączenia podania jedynie identyfikatora "
-"logowania i hasła. W przypadku niektórych kont lub w pewnych rodzajach sieci "
-"może wystąpić konieczność podania dodatkowych informacji w polu "
-"<gui>Zaawansowane</gui>. Zazwyczaj nie ma potrzeby zmiany opcji "
-"zaawansowanych. Ogólne instrukcje dotyczące dodawania konta można znaleźć w "
-"<link xref=\"add-account\"/>."
-
-#: C/account-jabber.page:39(p)
-msgid ""
-"Google Talk is a type of Jabber account. These instructions hold for Google "
-"Talk accounts as well."
-msgstr ""
-"Google Talk jest rodzajem konta Jabber. Niniejsze instrukcje dotyczą również "
-"kont Google Talk."
-
-#: C/account-jabber.page:45(gui)
-msgid "Encryption required (TLS/SSL)"
-msgstr "Wymagane szyfrowanie (TLS/SSL)"
-
-#: C/account-jabber.page:46(gui)
-msgid "Ignore SSL certificate errors"
-msgstr "Ignorowanie błędów certyfikatu SSL"
-
-#: C/account-jabber.page:47(p)
-msgid ""
-"Whenever possible, communication between <app>Empathy</app> and the Jabber "
-"server is encrypted. If encrypted communication is not possible, messages "
-"may be sent unencrypted. Select <gui>Encryption required</gui> to prevent "
-"<app>Empathy</app> from communicating with the Jabber server when encryption "
-"is not possible."
-msgstr ""
-"Gdzie to tylko możliwe komunikacja między programem <app>Empathy</app> i "
-"serwerem Jabber jest szyfrowana. Jeśli komunikacja szyfrowana nie jest "
-"możliwa wiadomości mogą być przesyłane w formie nieszyfrowanej. Należy "
-"zaznaczyć <gui>Wymagane szyfrowanie</gui>, aby program <app>Empathy</app> "
-"nie mógł łączyć się z serwerem Jabber, gdy szyfrowanie nie jest możliwe."
-
-#: C/account-jabber.page:52(p)
-msgid ""
-"Some Jabber servers may encrypt data using invalid certificates, or using "
-"certificates from unknown authorities. If you trust the server you are "
-"connecting to, you can select <gui>Ignore SSL certificate errors</gui> to "
-"allow encrypted communication with invalid certificates."
-msgstr ""
-"Niektóre serwery protokołu Jabber mogą szyfrować dane przy pomocy nieważnych "
-"certyfikatów lub przy użyciu certyfikatów wydanych przez nieznane "
-"instytucje. Jeśli serwer jest zaufany, można wybrać opcję <gui>Ignorowanie "
-"błędów certyfikatu SSL</gui>, aby pozwolić na komunikację szyfrowaną przy "
-"pomocy nieważnych certyfikatów."
-
-#: C/account-jabber.page:59(gui)
-msgid "Resource"
-msgstr "Zasób"
-
-#: C/account-jabber.page:60(gui)
-msgid "Priority"
-msgstr "Priorytet"
-
-#: C/account-jabber.page:61(p)
-msgid ""
-"If you have multiple applications (for instance, on separate computers) "
-"connected to your account at the same time, you can set a resource to "
-"uniquely identify each one. By default, <app>Empathy</app> will use "
-"<input>Telepathy</input> as the resource."
-msgstr ""
-"Jeśli więcej programów (np. na różnych komputerach) jest połączonych do "
-"jednego konta w tym samym czasie, można ustawić identyfikację poszczególnych "
-"zasobów. Domyślnie program <app>Empathy</app> do określenia zasobu używa "
-"<input>Telepathy</input>."
-
-#: C/account-jabber.page:65(p)
-msgid ""
-"You can set the priority to specify which application should receive "
-"incoming messages from your contacts. New messages will be sent to the "
-"application with the highest priority."
-msgstr ""
-"Można ustawić priorytet, aby określić który program powinien otrzymywać "
-"wiadomości przychodzące od kontaktów. Nowe wiadomości będą wysyłane do "
-"programu o najwyższym priorytecie."
-
-#: C/account-jabber.page:70(gui)
-msgid "Override server settings"
-msgstr "Zastępowanie ustawień serwera"
-
-#: C/account-jabber.page:71(p)
-msgid ""
-"<app>Empathy</app> will use default settings to connect to the Jabber server "
-"based on your login ID. For some Jabber servers, you will need to enter "
-"custom server settings manually. These settings should be provided for you "
-"by your Jabber provider."
-msgstr ""
-"Program <app>Empathy</app> używa ustawień domyślnych do połączenia z "
-"serwerem usługi Jabber w oparciu o identyfikator logowania użytkownika. W "
-"przypadku niektórych serwerów usługi Jabber należy ręcznie wprowadzić własne "
-"ustawienia serwera. Ustawienia te powinny zostać udostępnione przez dostawcę "
-"usługi Jabber."
-
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/account-irc.page:106(None)
-msgid "@@image: 'figures/gtk-add.png'; md5=a856b499d8d4681b70b5ce6f25bc5c6d"
-msgstr "@@image: 'figures/gtk-add.png'; md5=a856b499d8d4681b70b5ce6f25bc5c6d"
-
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/account-irc.page:112(None)
-msgid "@@image: 'figures/gtk-remove.png'; md5=215e3a325a3dd619874e35c30a018bb6"
-msgstr ""
-"@@image: 'figures/gtk-remove.png'; md5=215e3a325a3dd619874e35c30a018bb6"
-
-#: C/account-irc.page:8(desc)
-msgid "Additional information necessary for connecting to IRC networks."
-msgstr "Dodatkowe informacje potrzebne do połączenia z sieciami IRC."
-
-#: C/account-irc.page:31(title)
-msgid "IRC account details"
-msgstr "Szczegóły konta IRC"
-
-#: C/account-irc.page:33(p)
-msgid ""
-"IRC accounts require different information than many other types of "
-"accounts. To create an IRC account, you must specify at least an IRC network "
-"and a nickname. This page details the information you can provide for an IRC "
-"account."
-msgstr ""
-"Konta IRC wymagają innych informacji niż wiele innych rodzajów kont. Aby "
-"utworzyć konto IRC konieczne jest określenie co najmniej sieci IRC i "
-"pseudonimu. Niniejsza strona podaje informacje wymagane przez konta IRC."
-
-#: C/account-irc.page:45(gui) C/account-irc.page:120(gui)
-msgid "Network"
-msgstr "Sieć."
-
-#: C/account-irc.page:46(p)
-msgid ""
-"IRC is an open system that allows people to run separate IRC networks. Each "
-"network is distinct and has its own users and chat rooms. <app>Empathy</app> "
-"lists the most popular networks in the <gui>Network</gui> drop-down list. "
-"You can add additional networks. See <link xref=\"#networks\"/> below."
-msgstr ""
-"IRC jest systemem otwartym, który pozwala na działanie oddzielnych sieci "
-"IRC. Każda sieć jest inna i ma swoich użytkowników i pokoje rozmów. Program "
-"<app>Empathy</app> posiada listę najbardziej popularnych sieci na liście "
-"rozwijanej <gui>Sieć</gui>. Można także dodawać sieci. Aby uzyskać więcej "
-"informacji, należy zobaczyć <link xref=\"#networks\"/> poniżej"
-
-#: C/account-irc.page:53(gui)
-msgid "Nickname"
-msgstr "Pseudonim"
-
-#: C/account-irc.page:54(p)
-msgid ""
-"Your nickname is your unique name on the IRC network. Only one person on a "
-"network may use a given nickname. If you get an error message that says "
-"<link xref=\"prob-conn-name\" role=\"error-msg\"/> you will need to change "
-"your nickname."
-msgstr ""
-"Pseudonim jest jedyny w sieci IRC. Tylko jedna osoba może uzyskać dany "
-"pseudonim. Jeśli pojawi się komunikat błędu mówiący, że <link xref=\"prob-"
-"conn-name\" role=\"error-msg\"/>, należy zmienić pseudonim."
-
-#: C/account-irc.page:60(gui)
-msgid "Password"
-msgstr "Hasło"
-
-#: C/account-irc.page:61(p)
-msgid ""
-"Some servers, particularly those on private networks, require a password to "
-"connect. If you are authorized to use the network, the network "
-"administrators should provide you with a password."
-msgstr ""
-"Niektóre serwery, w szczególności te w sieciach prywatnych, wymagają hasła "
-"podczas połączenia. W przypadku posiadania uprawnień pozwalających na "
-"uwierzytelnienie w sieci, administrator sieci powinien dostarczyć "
-"odpowiednie hasła."
-
-#: C/account-irc.page:65(title)
-msgid "NickServ Passwords"
-msgstr "Hasła NickServ"
-
-#: C/account-irc.page:66(p)
-#, fuzzy
-msgid ""
-"On some networks, nicknames can be registered using a service known as "
-"NickServ. <app>Empathy</app> does not directly support nickname passwords. "
-"On some networks, including the popular freenode network, server passwords "
-"are automatically forwarded to NickServ, allowing you to set this field to "
-"identify yourself with NickServ. See <link xref=\"irc-nick-password\"/> for "
-"more details."
-msgstr ""
-"W niektórych sieciach pseudonimy mogą być rejestrowane za pomocą usługi o "
-"nazwie NickServ. Program <app>Empathy</app> nie obsługuje bezpośrednio haseł "
-"do pseudonimów. W niektórych sieciach, włączając w to popularną sieć "
-"FreeNode, hasła do serwera są automatycznie przesyłane do usługi NickServ, "
-"umożliwiając ustawianie tego pola w celu identyfikacji w usłudze NickServ. "
-"Aby uzyskać więcej informacji na ten temat, należy zobaczyć <link xref=\"irc-"
-"nick-password\"/>."
-
-#: C/account-irc.page:76(gui)
-msgid "Real name"
-msgstr "Imię i nazwisko"
-
-#: C/account-irc.page:77(p)
-msgid ""
-"You can provide your real name in addition to your nickname. Other users "
-"will be able to see this when they view your information."
-msgstr ""
-"Można do pseudonimu dołączyć swoje prawdziwe imię i nazwisko. Inni "
-"użytkownicy będą mogli poznać te dane."
-
-#: C/account-irc.page:81(gui)
-msgid "Quit message"
-msgstr "Komunikat przy zakończeniu"
-
-#: C/account-irc.page:82(p)
-msgid ""
-"When you go offline, a quit message is sent to all the chat rooms you’re in "
-"and to all the users you’re having a private conversation with. Use this "
-"field to provide a custom quit message."
-msgstr ""
-"Po przejściu do trybu offline, zostanie wysłany komunikat przy zakończeniu "
-"do wszystkich pokojów w których przebywa użytkownik oraz do wszystkich "
-"użytkowników z którymi prowadzone są rozmowy prywatne. Należy użyć tego pola "
-"do wpisania własnego komunikatu wysyłanego przy zakończeniu."
-
-#: C/account-irc.page:94(title)
-msgid "IRC Networks"
-msgstr "Sieci IRC"
-
-#: C/account-irc.page:97(title)
-msgid "Networks"
-msgstr "Sieci"
-
-#: C/account-irc.page:99(p)
-msgid ""
-"<app>Empathy</app> includes a list of popular IRC networks. If you wish to "
-"another IRC network, you can add it to the list. You can also modify "
-"networks and remove them from the list."
-msgstr ""
-"Program <app>Empathy</app> zawiera listę popularnych sieci IRC. Jeśli chcemy "
-"używać innej sieci IRC, można ją dodać do listy. Można również edytować "
-"sieci i usuwać je z listy. "
-
-#: C/account-irc.page:104(p)
-msgid ""
-"To add a network to the list, click <media type=\"image\" mime=\"image/png\" "
-"src=\"figures/gtk-add.png\" width=\"16\" height=\"16\">Add</media>."
-msgstr ""
-"Aby dodać sieć do listy należy nacisnąć na <media type=\"image\" mime="
-"\"image/png\" src=\"figures/gtk-add.png\" width=\"16\" height=\"16\">Dodaj</"
-"media>."
-
-#: C/account-irc.page:107(p)
-msgid ""
-"To modify a network in the list, select the network and click <media type="
-"\"image\" mime=\"image/png\" src=\"figures/gtk-edit.png\" width=\"16\" "
-"height=\"16\">Edit</media>."
-msgstr ""
-"Aby edytować sieć z listy, należy wybrać sieć i nacisnąć na <media type="
-"\"image\" mime=\"image/png\" src=\"figures/gtk-edit.png\" width=\"16\" "
-"height=\"16\">Edytuj</media>."
-
-#: C/account-irc.page:110(p)
-msgid ""
-"To remove a network from the list, select the network and click <media type="
-"\"image\" mime=\"image/png\" src=\"figures/gtk-remove.png\" width=\"16\" "
-"height=\"16\">Remove</media>."
-msgstr ""
-"Aby usunąć sieć z listy, należy wybrać sieć i nacisnąć na <media type=\"image"
-"\" mime=\"image/png\" src=\"figures/gtk-remove.png\" width=\"16\" height=\"16"
-"\">Usuń</media>."
-
-#: C/account-irc.page:115(p)
-msgid ""
-"When adding or modifying a network, you can enter the following information:"
-msgstr "Dodając lub edytując sieć można wprowadzić następujące informacje:"
-
-#: C/account-irc.page:121(p)
-msgid ""
-"This is the name of the network as you want it to appear in the list of "
-"networks."
-msgstr "Jest to nazwa sieci, która ma się pojawiać na liście sieci."
-
-#: C/account-irc.page:125(gui)
-msgid "Charset"
-msgstr "Zestaw znaków"
-
-#: C/account-irc.page:126(p)
-msgid ""
-"This specifies the character encoding that is typically used on this "
-"network. A character encoding is a specific way of recording characters "
-"internally in a computer. There are many character encodings, and you need "
-"to use the same character encoding as other users to see their messages "
-"correctly."
-msgstr ""
-"To określa kodowanie znaków, które jest zazwyczaj używane w tej sieci. "
-"Kodowanie znaków jest specjalnym sposobem zapisywania znaków przez komputer. "
-"Istnieje wiele kodować znaków i trzeba użyć tego samego kodowania znaków jak "
-"inni użytkownicy, aby wiadomości były wyświetlane były poprawnie."
-
-#. Translators: Recommend character encodings that are common
-#. for your language.
-#: C/account-irc.page:135(p)
-msgid ""
-"By default, <app>Empathy</app> uses UTF-8, a modern character encoding that "
-"can handle text from most of the world's languages. Another common encoding "
-"for English and some other Western languages is ISO-8859-1."
-msgstr ""
-"Domyślnie, program <app>Empathy</app> używa kodowania UTF-8, nowoczesnego "
-"kodowania znaków, które obsługuje tekst w większości języków świata. Innym "
-"powszechnym kodowaniem dla języka polskiego jest ISO-8859-2."
-
-#: C/account-irc.page:141(gui)
-msgid "Servers"
-msgstr "Serwery"
-
-#: C/account-irc.page:142(p)
-msgid ""
-"An IRC network may have many servers you can connect to. When you are "
-"connected to a server on a particular network, you can communicate with all "
-"users on all other servers on that network. You can add and remove servers "
-"for this network using the <gui>Add</gui> and <gui>Remove</gui> buttons."
-msgstr ""
-"W sieci IRC może być wiele serwerów, z którymi można się połączyć. Po "
-"połączeniu do serwera w danej sieci, można się komunikować ze wszystkimi "
-"użytkownikami wszystkich innych serwerów tej sieci. Można dodać i usunąć "
-"serwery dla sieci używając przycisków <gui>Dodaj</gui> i <gui>Usuń</gui>."
-
-#: C/account-irc.page:147(p)
-msgid ""
-"When a server is selected, click the field under <gui>Server</gui> or "
-"<gui>Port</gui> to edit it. Alternatively, use the left and right arrow keys "
-"to focus the field, and press the space bar to begin editing."
-msgstr ""
-"Po wybraniu serwera należy nacisnąć na pole w kolumnie <gui>Serwer</gui> lub "
-"<gui>Port</gui>, aby móc je edytować. Można również użyć strzałek w prawo i "
-"w lewo, aby podświetlić odpowiednie pole i nacisnąć przycisk spacji, aby "
-"rozpocząć edycję."
-
-#: C/account-irc.page:151(p)
-msgid ""
-"Select the check box in the <gui>SSL</gui> column to encrypt all "
-"communication with a server. Note that this does not prevent other users on "
-"the network from seeing what you write on public chat rooms."
-msgstr ""
-"Należy zaznaczyć pole w kolumnie <gui>SSL</gui>, aby cała komunikacja z "
-"serwerem była szyfrowana. Należy jednak zauważyć, że inni użytkownicy danej "
-"sieci będą wciąż mogli zobaczyć to, co jest publikowane w publicznych "
-"pokojach rozmów."
-
-#. Put one translator per line, in the form of NAME <EMAIL>, YEAR1, YEAR2
-#: C/index.page:0(None)
-msgid "translator-credits"
-msgstr ""
-"Aviary.pl <gnomepl@aviary.pl>, 2010\n"
-"Aleksander Łukasiewicz <aleksander@lukasiewicz.net>, 2010"
diff --git a/help/ru/ru.po b/help/ru/ru.po
deleted file mode 100644
index ef532e14..00000000
--- a/help/ru/ru.po
+++ /dev/null
@@ -1,775 +0,0 @@
-# Russian translation for empathy documentation
-# Copyright 2008 Free Software Foundation
-#
-# Nikita Belobrov <qvzqvz@gmail.com>, 2008
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: empathy docs trunk\n"
-"POT-Creation-Date: 2008-10-24 04:10+0000\n"
-"PO-Revision-Date: 2008-10-19 10:37+0400\n"
-"Last-Translator: Nikita Belobrov <qvzqvz@gmail.com>\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"
-"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"
-
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/empathy.xml:216(None)
-msgid ""
-"@@image: 'figures/empathy-main-window.png'; "
-"md5=38259a866f38ff1f754828e46d2b0e5c"
-msgstr ""
-"@@image: 'figures/empathy-main-window.png'; "
-"md5=38259a866f38ff1f754828e46d2b0e5c"
-
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/empathy.xml:307(None)
-msgid ""
-"@@image: 'figures/empathy-new-account.png'; "
-"md5=6c1e0d8c709125d387e975e5738b8c0f"
-msgstr ""
-"@@image: 'figures/empathy-new-account.png'; "
-"md5=6c1e0d8c709125d387e975e5738b8c0f"
-
-#: C/empathy.xml:26(title)
-msgid "<application>Empathy</application> Manual V2.0"
-msgstr "Руководство по <application>Empathy</application> версии 2.0"
-
-#: C/empathy.xml:29(year)
-msgid "2008"
-msgstr "2008"
-
-#: C/empathy.xml:30(holder) C/empathy.xml:36(publishername)
-#: C/empathy.xml:47(orgname) C/empathy.xml:55(orgname) C/empathy.xml:84(para)
-msgid "Ubuntu Documentation Project"
-msgstr "Проект документации 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 ""
-"Разрешается копировать, распространять и/или изменять этот документ на "
-"условиях лицензии GNU Free Documentation License (GFDL), версии 1.1 или "
-"любой более поздней версии, опубликованной Фондом свободного программного "
-"обеспечения (Free Software Foundation), без неизменяемых частей и без "
-"текстов на обложках. Вы можете найти копию лицензии GFDL по <ulink type="
-"\"help\" url=\"ghelp:fdl\">этой ссылке</ulink> или в файле COPYING-DOCS, "
-"распространяемом с этим документом."
-
-#: 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 ""
-"Это руководство — часть документации GNOME, которая распространяется на "
-"условиях лицензии GNU FDL. Если вы хотите распространять это руководство "
-"отдельно от остальной документации, вам следует приложить к руководству "
-"копию лицензии, как описано в разделе 6 лицензии."
-
-#: 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 ""
-"Некоторые имена и марки используются компаниями для обозначения их продуктов "
-"и услуг и являются торговыми марками. Там, где эти имена присутствуют в "
-"документации и где участники проекта документирования GNOME знают об этом, "
-"имена выделяются заглавными буквами или начальной заглавной буквой."
-
-#: 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 ""
-"ДОКУМЕНТ РАСПРОСТРАНЯЕТСЯ «КАК ЕСТЬ», БЕЗ ВСЯКИХ ГАРАНТИЙ, ЯВНЫХ ИЛИ НЕЯВНЫХ, "
-"ВКЛЮЧАЯ, БЕЗ ОГРАНИЧЕНИЙ, ГАРАНТИИ ТОГО, ЧТО ДОКУМЕНТ ИЛИ ИЗМЕНЁННАЯ ВЕРСИЯ "
-"ДОКУМЕНТА СВОБОДНА ОТ ДЕФЕКТОВ, ПРИГОДНА К ПРОДАЖЕ, ПРИГОДНА К ИСПОЛЬЗОВАНИЮ "
-"В ОПРЕДЕЛЁННЫХ ЦЕЛЯХ ИЛИ НЕ НАРУШАЕТ ЗАКОНЫ. ВЕСЬ РИСК, КАСАЮЩИЙСЯ КАЧЕСТВА, "
-"ТОЧНОСТИ ИЛИ ПРАВИЛЬНОСТИ ДОКУМЕНТА ИЛИ ИЗМЕНЁННЫХ ВЕРСИЙ ДОКУМЕНТА, ЛЕЖИТ "
-"НА ВАС. ЕСЛИ ДОКУМЕНТ ИЛИ ИЗМЕНЁННАЯ ВЕРСИЯ ДОКУМЕНТА ИМЕЕТ НЕДОСТАТКИ, ВЫ "
-"(А НЕ АВТОР ДОКУМЕНТА ИЛИ ЕГО ПОМОЩНИК) БЕРЁТЕ НА СЕБЯ СТОИМОСТЬ ЛЮБОЙ "
-"НЕОБХОДИМОЙ ДОРАБОТКИ, КОРРЕКЦИИ ИЛИ ВОССТАНОВЛЕНИЯ. ЭТОТ ОТКАЗ ОТ ГАРАНТИЙ "
-"СОСТАВЛЯЕТ ВАЖНУЮ ЧАСТЬ ЛИЦЕНЗИИ. НИКАКОЕ ИСПОЛЬЗОВАНИЕ ДОКУМЕНТА ИЛИ "
-"ИЗМЕНЁННОЙ ВЕРСИИ ДОКУМЕНТА НЕ ДОПУСКАЕТСЯ БЕЗ ДАННОГО ПРЕДУПРЕЖДЕНИЯ И"
-
-#: 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 ""
-"НИ ПРИ КАКИХ ОБСТОЯТЕЛЬСТВАХ И НИ ПРИ КАКОМ ЗАКОННОМ СПОСОБЕ, НИ ПО КАКОМУ "
-"СОГЛАШЕНИЮ ИЛИ ДРУГОЙ ПРИЧИНЕ, АВТОР, СОЗДАТЕЛЬ, ПОМОЩНИКИ ИЛИ "
-"РАСПРОСТРАНИТЕЛИ ДОКУМЕНТА НЕ НЕСУТ ОТВЕТСТВЕННОСТЬ ЗА ПРЯМОЙ, КОСВЕННЫЙ, "
-"СПЕЦИАЛЬНЫЙ, СЛУЧАЙНЫЙ ИЛИ ПРЕДНАМЕРЕННЫЙ УЩЕРБ ЛЮБОГО СВОЙСТВА, ВКЛЮЧАЯ, "
-"БЕЗ ОГРАНИЧЕНИЯ, ПОТЕРЮ РЕПУТАЦИИ, РАБОТОСПОСОБНОСТИ, КОМПЬЮТЕРНЫЕ СБОИ ИЛИ "
-"ПОЛОМКИ, ИЛИ ЛЮБОЙ ДРУГОЙ УЩЕРБ ИЛИ ПОТЕРИ, ВОЗНИКАЮЩИЕ ВСЛЕДСТВИЕ ИЛИ "
-"СВЯЗАННЫЕ С ИСПОЛЬЗОВАНИЕМ ДОКУМЕНТА ИЛИ ИЗМЕНЁННЫХ ВЕРСИЙ ДОКУМЕНТА, ДАЖЕ "
-"ЕСЛИ СТОРОНА БЫЛА УВЕДОМЛЕНА О ВОЗМОЖНОСТИ ТАКОГО УЩЕРБА."
-
-#: 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 ""
-"ДОКУМЕНТ И ИЗМЕНЁННЫЕ ВЕРСИИ ДОКУМЕНТА ПРЕДОСТАВЛЯЮТСЯ ПОЛЬЗОВАТЕЛЮ НА "
-"УСЛОВИЯХ ЛИЦЕНЗИИ GNU FREE DOCUMENTATION LICENSE С УВЕДОМЛЕНИЕМ О ТОМ, ЧТО: "
-"<placeholder-1/>"
-
-#: C/empathy.xml:44(firstname)
-msgid "Milo"
-msgstr "Milo"
-
-#: C/empathy.xml:45(surname)
-msgid "Casagrande"
-msgstr "Casagrande"
-
-#: C/empathy.xml:48(email)
-msgid "milo_casagrande@yahoo.it"
-msgstr "milo_casagrande@yahoo.it"
-
-#: C/empathy.xml:52(firstname)
-msgid "Seth"
-msgstr "Seth"
-
-#: C/empathy.xml:53(surname)
-msgid "Dudenhofer"
-msgstr "Dudenhofer"
-
-#: C/empathy.xml:56(email)
-msgid "sdudenhofer@gmail.com"
-msgstr "sdudenhofer@gmail.com"
-
-#: C/empathy.xml:75(revnumber)
-msgid "Empathy Manual V2.0"
-msgstr "Руководство по Empathy версии 2.0"
-
-#: C/empathy.xml:76(date)
-msgid "April 2008"
-msgstr "Апрель 2008 г."
-
-#: C/empathy.xml:78(para)
-msgid "Milo Casagrande <email>milo_casagrande@yahoo.it</email>"
-msgstr "Milo Casagrande <email>milo_casagrande@yahoo.it</email>"
-
-#: C/empathy.xml:81(para)
-msgid "Seth Dudenhofer <email>sdudenhofer@gmail.com</email>"
-msgstr "Seth Dudenhofer <email>sdudenhofer@gmail.com</email>"
-
-#: C/empathy.xml:89(releaseinfo)
-msgid "This manual describes version 2.24 of Empathy."
-msgstr "Это руководство описывает приложение Empathy версии 2.24."
-
-#: C/empathy.xml:93(title)
-msgid "Feedback"
-msgstr "Обратная связь"
-
-#: C/empathy.xml:94(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 ""
-"Чтобы сообщить об ошибке или сделать предложение по <application>Empathy</application> "
-"или этому руководству, посетите <ulink url=\"ghelp:gnome-feedback\" type="
-"\"help\">страницу обратной связи GNOME</ulink> и следуйте дальнейшим указаниям."
-
-#: C/empathy.xml:102(para)
-msgid "Empathy is an application for instant messaging."
-msgstr "Empathy — это приложение для обмена мгновенными сообщениями."
-
-#: C/empathy.xml:110(primary) C/empathy.xml:0(application)
-msgid "Empathy"
-msgstr "Empathy"
-
-#: C/empathy.xml:113(primary)
-msgid "empathy"
-msgstr "empathy"
-
-#: C/empathy.xml:114(secondary)
-msgid "istant messaging"
-msgstr "обмен мгновенными сообщениями"
-
-#: C/empathy.xml:118(title)
-msgid "Introduction"
-msgstr "Введение"
-
-#: C/empathy.xml:119(para)
-msgid ""
-"<application>Empathy</application> is a multi-protocol instant messaging "
-"program for the GNOME Desktop. With <application>Empathy</application> you "
-"can keep in touch with all of your friends through lots of supported instant "
-"messaging services."
-msgstr ""
-"<application>Empathy</application> — приложение обмена мгновенными сообщениями для "
-"рабочего стола GNOME, поддерживающее множество протоколов. "
-"<application>Empathy</application> позволяет быть на связи со всеми друзьями "
-"с помощью большого количества поддерживаемых сервисов мгновенных сообщений."
-
-#: C/empathy.xml:129(acronym)
-msgid "AIM"
-msgstr "AIM"
-
-#: C/empathy.xml:133(para)
-msgid "Google Talk"
-msgstr "Google Talk"
-
-#: C/empathy.xml:138(para)
-msgid "ICQ"
-msgstr "ICQ"
-
-#: C/empathy.xml:144(acronym)
-msgid "IRC"
-msgstr "IRC"
-
-#: C/empathy.xml:148(para)
-msgid "Jabber"
-msgstr "Jabber"
-
-#: C/empathy.xml:154(acronym)
-msgid "MSN"
-msgstr "MSN"
-
-#: C/empathy.xml:158(para) C/empathy.xml:441(para)
-msgid "Salut"
-msgstr "Salut"
-
-#: C/empathy.xml:164(acronym)
-msgid "SIP"
-msgstr "SIP"
-
-#: C/empathy.xml:168(para)
-msgid "Yahoo"
-msgstr "Yahoo"
-
-#: C/empathy.xml:124(para)
-msgid ""
-"<application>Empathy</application> supports the following services: "
-"<placeholder-1/>"
-msgstr ""
-"<application>Empathy</application> поддерживает следующие сервисы: "
-"<placeholder-1/>"
-
-#: C/empathy.xml:177(title)
-msgid "Getting Started"
-msgstr "Начало работы"
-
-#: C/empathy.xml:180(title)
-msgid "Starting Empathy"
-msgstr "Запуск Empathy"
-
-#: C/empathy.xml:181(para)
-msgid "You can start <application>Empathy</application> in the following ways:"
-msgstr "Запустить <application>Empathy</application> можно следующим образом:"
-
-#: C/empathy.xml:185(term)
-msgid "<guimenu>Applications</guimenu> menu"
-msgstr "Меню <guimenu>Приложения</guimenu>"
-
-#: C/empathy.xml:187(para)
-msgid ""
-"Choose <menuchoice><guisubmenu>Internet</guisubmenu><guimenuitem>Empathy "
-"Instant Messenger</guimenuitem></menuchoice>."
-msgstr ""
-"Выберите <menuchoice><guisubmenu>Интернет</guisubmenu><guimenuitem>Empathy</"
-"guimenuitem></menuchoice>."
-
-#: C/empathy.xml:196(term)
-msgid "Command line"
-msgstr "Командная строка"
-
-#: C/empathy.xml:198(para)
-msgid "Type <command>empathy</command> and then press <keycap>Enter</keycap>."
-msgstr "Наберите <command>empathy</command> и нажмите клавишу <keycap>Enter</keycap>."
-
-#: C/empathy.xml:207(title)
-msgid "When You Start Empathy"
-msgstr "Работа с Empathy"
-
-#: C/empathy.xml:212(title)
-msgid "<application>Empathy</application> Main Window"
-msgstr "Главное окно <application>Empathy</application>"
-
-#: C/empathy.xml:219(phrase)
-msgid ""
-"Shows <placeholder-1/> main window. Contains the titlebar, the menubar, "
-"contact list, status icon and status arrow button list."
-msgstr ""
-"Показывает <placeholder-1/> главное окно, содержащее заголовок, меню, список "
-"контактов, значок состояния и кнопку выбора состояния."
-
-#: C/empathy.xml:208(para)
-msgid ""
-"When you start <application>Empathy</application> the following window is "
-"shown. <placeholder-1/>"
-msgstr ""
-"При запуске <application>Empathy</application> появляется следующее окно. "
-"<placeholder-1/>"
-
-#: C/empathy.xml:234(title)
-msgid "<application>Empathy</application> Main Components"
-msgstr "Главные компоненты <application>Empathy</application>"
-
-#: C/empathy.xml:241(para)
-msgid "Component"
-msgstr "Компонент"
-
-#: C/empathy.xml:244(para)
-msgid "Description"
-msgstr "Описание"
-
-#: C/empathy.xml:251(para)
-msgid "Menubar"
-msgstr "Меню"
-
-#: C/empathy.xml:254(para)
-msgid ""
-"Contains menus used to perform actions in <application>Empathy</application>."
-msgstr ""
-"Содержит меню для выполнения различных действий в <application>Empathy</"
-"application>."
-
-#: C/empathy.xml:261(para)
-msgid "Status Drop-Down List"
-msgstr "Выпадающий список состояний"
-
-#: C/empathy.xml:264(para)
-msgid "Allows to update the user's status."
-msgstr "Позволяет изменять состояние пользователя."
-
-#: C/empathy.xml:271(para)
-msgid "Account Button"
-msgstr "Кнопка учётной записи"
-
-#: C/empathy.xml:274(para)
-msgid "Opens the <guilabel>Accounts</guilabel> dialog."
-msgstr "Открывает диалог <guilabel>Учётные записи</guilabel>."
-
-#: C/empathy.xml:281(para)
-msgid "Contact List"
-msgstr "Список контактов"
-
-#: C/empathy.xml:284(para)
-msgid "Shows all the available contacts and their associated status."
-msgstr "Показывает все доступные контакты и их состояния."
-
-#: C/empathy.xml:230(para)
-msgid ""
-"<xref linkend=\"empathy-TBL-1\"/> describes the components of "
-"<application>Empathy</application>'s main 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 ""
-"<xref linkend=\"empathy-TBL-1\"/> описывает компоненты главного окна "
-"<application>Empathy</application>. <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>"
-
-#: C/empathy.xml:297(title)
-msgid "When You Start Empathy for the First Time"
-msgstr "При первом запуске Empathy"
-
-#: C/empathy.xml:303(title)
-msgid "<application>Empathy</application> Accounts Dialog"
-msgstr "Диалог учётных записей <application>Empathy</application>"
-
-#: C/empathy.xml:310(phrase)
-msgid "Shows <placeholder-1/> account creation dialog."
-msgstr "Отображает <placeholder-1/> диалог создания учетной записи."
-
-#: C/empathy.xml:298(para)
-msgid ""
-"When you start <application>Empathy</application> for the first time and you "
-"don't have configured any account yet, the following dialog is shown. "
-"<placeholder-1/>"
-msgstr ""
-"При первом запуске в <application>Empathy</application> ещё не "
-"настроены учетные записеи, поэтому появляется следующий диалог. "
-"<placeholder-1/>"
-
-#: C/empathy.xml:319(para)
-msgid ""
-"From here, you can configure and create your accounts. See <xref linkend="
-"\"empathy-accounts\"/> for more information."
-msgstr ""
-"Здесь можно настроить существующую или создать новую учетную запись. "
-"Обратитесь к <xref linkend=\"empathy-accounts\"/> за дополнительной "
-"информацией."
-
-#: C/empathy.xml:328(title)
-msgid "Accounts"
-msgstr "Учётные записи"
-
-#: C/empathy.xml:329(para)
-msgid ""
-"To use <application>Empathy</application> you need at least one account of "
-"the supported services."
-msgstr ""
-"Перед использованием <application>Empathy</application> необходимо иметь "
-"хотя бы одну учётную запись в поддерживаемом сервисе."
-
-#: C/empathy.xml:332(para)
-msgid ""
-"If you don't already have an account and you don't have your <emphasis>user "
-"name</emphasis> and <emphasis>password</emphasis>, you need to register a "
-"new account (see <xref linkend=\"empathy-register-account\"/>)."
-msgstr ""
-"При отсутствии зарегистрированной учётной записи: <emphasis>имени "
-"пользователя</emphasis> и <emphasis>пароля</emphasis>, её необходимо "
-"получить (см. <xref linkend=\"empathy-register-account\"/>)."
-
-#: C/empathy.xml:337(para)
-msgid ""
-"In order to talk with other users (called <emphasis>contatcs</emphasis>), "
-"you need to use the same service they are using. If, for example, one "
-"contact is using the <emphasis role=\"strong\">Jabber</emphasis> service, "
-"you need to have an account registerd with that service."
-msgstr ""
-"Чтобы общаться с пользователями (называемыми <emphasis>контактами</"
-"emphasis>), необходимо использовать тот же сервис, что и нужный пользователь. "
-"Например, если один контакт использует сервис <emphasis role=\"strong"
-"\">Jabber</emphasis>, вам необходимо так же иметь учётную запись этого "
-"сервиса."
-
-#: C/empathy.xml:344(para)
-msgid ""
-"<application>Empathy</application> can handle as many accounts on any "
-"supported services as you want and you can have them all open at the same "
-"time."
-msgstr ""
-"<application>Empathy</application> может одновременно открыть и обслуживать "
-"любое количество учётных записей любого сервиса."
-
-#: C/empathy.xml:350(title)
-msgid "Registering an Account"
-msgstr "Регистрация учётной записи"
-
-#: C/empathy.xml:351(para)
-msgid ""
-"You can freely register an account on any of the following services. Follow "
-"the instructions reported on each website on how to register your new "
-"account. At the end of the registration process you should have a "
-"<emphasis>user name</emphasis> (or an <emphasis>account ID</emphasis>) and a "
-"<emphasis>password</emphasis> that you will use to create the account in "
-"<application>Empathy</application>."
-msgstr ""
-"Можно свободно зарегистрировать новую учетную запись в любом из "
-"перечисленных сервисе. Для чего необходимо следовать инструкциям на веб-"
-"сайте соответствующего сервиса. По завершении регистрации будут получены "
-"<emphasis>имя пользователя</emphasis> (или <emphasis>Идентификатор "
-"пользователя</emphasis>) и <emphasis>пароль</emphasis> которые необходимо "
-"использовать при создании учётной записи в <application>Empathy</application>."
-
-#. Translators: try to find a localized version of the
-#. registration service website
-#: C/empathy.xml:369(para)
-msgid ""
-"The <ulink type=\"http\" url=\"http://dashboard.aim.com/aim\">AIM</ulink> "
-"service."
-msgstr ""
-"Сервис <ulink type=\"http\" url=\"http://dashboard.aim.com/aim\">AIM</ulink>."
-
-#. Translators: try to find a localized version of the
-#. registration service website
-#: C/empathy.xml:376(para)
-msgid ""
-"The <ulink type=\"http\" url=\"http://www.google.com/talk/\">Google Talk</"
-"ulink> service."
-msgstr ""
-"Сервис <ulink type=\"http\" url=\"http://www.google.com/talk/\">Google Talk</"
-"ulink>."
-
-#. Translators: try to find a localized version of the
-#. registration service website
-#: C/empathy.xml:384(para)
-msgid ""
-"The <ulink type=\"http\" url=\"https://www.icq.com/register/\">ICQ</ulink> "
-"service."
-msgstr ""
-"Сервис <ulink type=\"http\" url=\"https://www.icq.com/register/\">ICQ</"
-"ulink>."
-
-#. Translators: try to find a localized version of the
-#. registration service website
-#: C/empathy.xml:391(para)
-msgid ""
-"The <ulink type=\"http\" url=\"https://accountservices.passport.net\">MSN</"
-"ulink> service."
-msgstr ""
-"Сервис <ulink type=\"http\" url=\"https://accountservices.passport.net"
-"\">MSN</ulink>."
-
-#. Translators: try to find a localized version of the
-#. registration service website
-#: C/empathy.xml:398(para)
-msgid ""
-"The <ulink type=\"http\" url=\"https://login.yahoo.com/config/login\">Yahoo</"
-"ulink> service."
-msgstr ""
-"Сервис <ulink type=\"http\" url=\"https://login.yahoo.com/config/login"
-"\">Yahoo</ulink>."
-
-#: C/empathy.xml:360(para)
-msgid "Click on the name of the service to visit its website: <placeholder-1/>"
-msgstr ""
-"Щёлкните мышью на имени сервиса или посетите его веб-сайт: <placeholder-1/>"
-
-#: C/empathy.xml:404(para)
-msgid ""
-"For registering a <acronym>SIP</acronym> account, you can use one of the "
-"following service:"
-msgstr ""
-"Для получения учетной записи <acronym>SIP</acronym>, можно использовать один "
-"из следующих сервисов:"
-
-#. Translators: try to find a localized version of the
-#. registration service website
-#: C/empathy.xml:413(para)
-msgid ""
-"The <ulink type=\"http\" url=\"http://www.ekiga.net/user/reg/index.php?"
-"phplib_Session=c1d85267756241f8190e5fc21b029a62\">Ekiga</ulink> service."
-msgstr ""
-"Сервис <ulink type=\"http\" url=\"http://www.ekiga.net/user/reg/index.php?"
-"phplib_Session=c1d85267756241f8190e5fc21b029a62\">Ekiga</ulink>."
-
-#. Translators: try to find a localized version of the
-#. registration service website
-#: C/empathy.xml:420(para)
-msgid ""
-"The <ulink type=\"http\" url=\"http://account2.freeworlddialup.com/index.php?"
-"section_id=94\"><acronym>FWD</acronym></ulink> (Free World Dialup) service."
-msgstr ""
-"Сервис <ulink type=\"http\" url=\"http://account2.freeworlddialup.com/index."
-"php?section_id=94\"><acronym>FWD</acronym></ulink> (Free World Dialup)."
-
-#. Translators: try to find a localized version of the
-#. registration service website
-#: C/empathy.xml:428(para)
-msgid ""
-"The <ulink type=\"http\" url=\"https://signup.sipphone.com/new-users/app?"
-"class=NewUser;proc=start\">Sipphone</ulink> service."
-msgstr ""
-"Сервис <ulink type=\"http\" url=\"https://signup.sipphone.com/new-users/app?"
-"class=NewUser;proc=start\">Sipphone</ulink>."
-
-#: C/empathy.xml:434(para)
-msgid ""
-"You can use one of the following services if you already have a <emphasis "
-"role=\"strong\">Jabber</emphasis> account:"
-msgstr ""
-"Если имеется учётная запись <emphasis role=\"strong\">Jabber</emphasis>, "
-"можно использовать один из перечисленных сервисов:"
-
-#: C/empathy.xml:450(title)
-msgid "Creating an Account"
-msgstr "Создание учётной записи"
-
-#: C/empathy.xml:455(para) C/empathy.xml:501(para) C/empathy.xml:523(para)
-msgid ""
-"From the <link linkend=\"empathy-FIG-mainwindow\">main window </link> "
-"(<guilabel>Contact List</guilabel>) click on the account button to open the "
-"<guilabel>Accounts</guilabel> dialog."
-msgstr ""
-"В <link linkend=\"empathy-FIG-mainwindow\">главном окне</link> "
-"(<guilabel>Список контактов</guilabel>) следует нажать кнопку учётной "
-"записи, чтобы открыть диалог <guilabel>Учётных записей</guilabel>."
-
-#: C/empathy.xml:463(para)
-msgid "Click on the <guibutton>Add</guibutton> button."
-msgstr "Щёлкните по кнопке <guibutton>Добавить</guibutton>."
-
-#: C/empathy.xml:468(para)
-msgid ""
-"From the <guilabel>Type</guilabel> drop-down list choose the service you "
-"wish to create an account for, then click on the <guibutton>Create</"
-"guibutton> button."
-msgstr ""
-"Из выпадающего списка <guilabel>Тип</guilabel> необходимо выбрать "
-"используемый сервис, затем нажать кнопку <guibutton>Создать</guibutton>."
-
-#: C/empathy.xml:475(para)
-msgid ""
-"Fill the required fields with your <emphasis>user name</emphasis> and "
-"<emphasis>password</emphasis>."
-msgstr ""
-"Заполнить соответствующие поля <emphasis>именем пользователя</"
-"emphasis> и <emphasis>паролем</emphasis>."
-
-#: C/empathy.xml:481(para)
-msgid ""
-"To enable the new account, select the <guilabel>Enabled</guilabel> check-box "
-"next to the name of the account."
-msgstr ""
-"Чтобы включить новую учётную запись, необходимо установить флажок "
-"<guilabel>Включено</guilabel> напротив имени учётной записи."
-
-#: C/empathy.xml:451(para)
-msgid "To create an account, proceed as follow: <placeholder-1/>"
-msgstr "Для создания учётной записи следуйте указаниям: <placeholder-1/>"
-
-#: C/empathy.xml:494(title)
-msgid "Disabling and Removing an Account"
-msgstr "Отключение и удаление учётной записи"
-
-#: C/empathy.xml:495(para)
-msgid "To disable an account, proceed as follow:"
-msgstr "Для отключения учётной записи необходимо выполнить следующее:"
-
-#: C/empathy.xml:509(para)
-msgid ""
-"Select the account you wish to disable in the box on the left of the dialog "
-"and deselect the <guilabel>Enabled</guilabel> check-box."
-msgstr ""
-"Выбрать учётную запись для отключения в рамке в левой части диалога и снять "
-"флажок <guilabel>Включено</guilabel>."
-
-#: C/empathy.xml:517(para)
-msgid "To remove an account, proceed as follow:"
-msgstr "Для удаления учётной записи необходимо выполнить следующее:"
-
-#: C/empathy.xml:531(para)
-msgid ""
-"Select the account you wish to disable in the box on the left of the dialog."
-msgstr "Выбрать учетную запись для удаления в левой части диалога."
-
-#: C/empathy.xml:537(para)
-msgid "Click on the <guibutton>Remove</guibutton> button."
-msgstr "Нажать на кнопку <guibutton>Удалить</guibutton>."
-
-#: C/empathy.xml:542(para)
-msgid ""
-"A dialog will be shown asking for confirmation. Click on the "
-"<guibutton>Remove</guibutton> button to remove the account."
-msgstr ""
-"После этого появится диалог подтверждения удаления. Для удаления учётной "
-"записи следует нажать на кнопку <guibutton>Удалить</guibutton>."
-
-#: C/empathy.xml:553(title)
-msgid "Contacts"
-msgstr "Контакты"
-
-#: C/empathy.xml:554(para)
-msgid ""
-"All the contacts are handled within <application>Empathy</application>'s "
-"<link linkend=\"empathy-FIG-mainwindow\">main window</link>."
-msgstr ""
-"Вся работа с контактами производится в <link linkend=\"empathy-FIG-mainwindow"
-"\">главном окне</link> <application>Empathy</application>."
-
-#: C/empathy.xml:559(title)
-msgid "Adding a Contact"
-msgstr "Добавление контакта"
-
-#: C/empathy.xml:560(para)
-msgid "To add a new contact, proceed as follow:"
-msgstr "Для добавления нового контакта следует выполнить следующее:"
-
-#: C/empathy.xml:566(para)
-msgid ""
-"From the <link linkend=\"empathy-FIG-mainwindow\">main window</link> choose "
-"<menuchoice><guimenu>Chat</guimenu><guimenuitem>Add Contact...</"
-"guimenuitem></menuchoice>. The <guilabel>New Contact</guilabel> dialog will "
-"be shown."
-msgstr ""
-"В <link linkend=\"empathy-FIG-mainwindow\">главном окне</link> выбрать "
-"пункт <menuchoice><guimenu>Разговор</guimenu><guimenuitem>Добавить собеседника...</"
-"guimenuitem></menuchoice>. Появится диалог <guilabel>Новый собеседник</"
-"guilabel>."
-
-#: C/empathy.xml:576(para)
-msgid ""
-"From the <guilabel>Account</guilabel> drop-down list, choose the service "
-"used by the contact you are adding."
-msgstr ""
-"Из выпадающего списка <guilabel>Учётная запись</guilabel> указать сервис, "
-"используемый добавляемым контактом."
-
-#: C/empathy.xml:582(para)
-msgid ""
-"In the <guilabel>Identifier</guilabel> text-box type the <emphasis>address</"
-"emphasis> of the contact in the form of <userinput><replaceable>user name</"
-"replaceable>@<replaceable>service\n"
-"\t domain</replaceable></userinput>."
-msgstr ""
-"В поле <guilabel>Идентификатор</guilabel> ввести <emphasis>адрес</emphasis> "
-"контакта в виде <userinput><replaceable>имя пользователя</"
-"replaceable>@<replaceable>сервис\n"
-"\t домен</replaceable></userinput>."
-
-#: C/empathy.xml:591(para)
-msgid ""
-"In the <guilabel>Alias</guilabel> text-box type the name you want to give at "
-"the the new contact."
-msgstr ""
-"В поле <guilabel>Псевдоним</guilabel> ввести имя, под которым будет "
-"отображаться контакт."
-
-#: C/empathy.xml:597(para)
-msgid "Click on <guibutton>Add</guibutton> to add the new contact."
-msgstr "Нажать на кнопку <guibutton>Добавить</guibutton>."
-
-#: C/empathy.xml:605(title)
-msgid "Removing a Contact"
-msgstr "Удаление собеседника"
-
-#: C/empathy.xml:606(para)
-msgid "To remove a contact, proceed as follow:"
-msgstr "Для удаления собеседника необходимо выполнить следующее:"
-
-#: C/empathy.xml:612(para)
-msgid ""
-"From the <link linkend=\"empathy-FIG-mainwindow\">main window</link>, select "
-"the contact you would like to remove and right-click on it."
-msgstr ""
-"В <link linkend=\"empathy-FIG-mainwindow\">главном окне</link>выбрать "
-"собеседника для удаления и щёлкнуть на нём правой кнопкой мыши."
-
-#: C/empathy.xml:619(para)
-msgid ""
-"From the popup menu, choose <guilabel>Remove</guilabel> to remove the "
-"contact."
-msgstr "В всплывающем меню выбрать пункт <guilabel>Удалить</guilabel>."
-
-#: C/empathy.xml:628(title)
-msgid "Modifying a Contact"
-msgstr "Изменение данных собеседника"
-
-#. Put one translator per line, in the form of NAME <EMAIL>, YEAR1, YEAR2.
-#: C/empathy.xml:0(None)
-msgid "translator-credits"
-msgstr "Никита Белобров <qvzqvz@gmail.com>, 2008"
diff --git a/help/sl/sl.po b/help/sl/sl.po
deleted file mode 100644
index 9f3f4c59..00000000
--- a/help/sl/sl.po
+++ /dev/null
@@ -1,2496 +0,0 @@
-# Slovenian translation for empathy-help.
-# This file is distributed under the same license as the empathy-help package.
-# Andrej Žnidaršič <andrej.znidarsic@gmail.com>, 2010.
-msgid ""
-msgstr ""
-"Project-Id-Version: Empathy manual\n"
-"POT-Creation-Date: 2012-03-08 13:26+0000\n"
-"PO-Revision-Date: \n"
-"Last-Translator: Andrej Žnidaršič <andrej.znidarsic@gmail.com>\n"
-"Language-Team: Slovenian GNOME Translation Team <gnome-si@googlegroups.com>\n"
-"Language: \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"
-
-#. Put one translator per line, in the form NAME <EMAIL>, YEAR1, YEAR2
-msgctxt "_"
-msgid "translator-credits"
-msgstr "Andrej Žnidaršič <andrej.znidarsic@gmail.com>"
-
-#. This is a reference to an external file such as an image or video. When
-#. the file changes, the md5 hash will change to let you know you need to
-#. update your localized copy. The msgstr is not used at all. Set it to
-#. whatever you like once you have updated your copy of the file.
-#.
-#. This is a reference to an external file such as an image or video. When
-#. the file changes, the md5 hash will change to let you know you need to
-#. update your localized copy. The msgstr is not used at all. Set it to
-#. whatever you like once you have updated your copy of the file.
-#: C/index.page:28(media)
-msgctxt "_"
-msgid "external ref='figures/empathy-logo.png' md5='1afc419a644e90b16393807e35cb5cb2'"
-msgstr "external ref='figures/empathy-logo.png' md5='1afc419a644e90b16393807e35cb5cb2'"
-
-#: C/index.page:7(info/title)
-msgctxt "link"
-msgid "Empathy Internet Messenger"
-msgstr "Empathy hipni sporočilnik"
-
-#: C/index.page:8(info/title)
-msgctxt "text"
-msgid "Empathy Internet Messenger"
-msgstr "Empathy hipni sporočilnik"
-
-#: C/index.page:19(credit/name)
-#: C/add-account.page:21(credit/name)
-#: C/audio-call.page:19(credit/name)
-#: C/audio-video.page:17(credit/name)
-#: C/create-account.page:19(credit/name)
-#: C/disable-account.page:21(credit/name)
-#: C/favorite-rooms.page:14(credit/name)
-#: C/geolocation.page:17(credit/name)
-#: C/geolocation-not-showing.page:17(credit/name)
-#: C/geolocation-privacy.page:17(credit/name)
-#: C/geolocation-supported.page:16(credit/name)
-#: C/geolocation-turn.page:18(credit/name)
-#: C/geolocation-what-is.page:18(credit/name)
-#: C/group-conversations.page:19(credit/name)
-#: C/hide-contacts.page:11(credit/name)
-#: C/import-account.page:23(credit/name)
-#: C/introduction.page:13(credit/name)
-#: C/irc-commands.page:10(credit/name)
-#: C/irc-join-pwd.page:17(credit/name)
-#: C/irc-join-room.page:16(credit/name)
-#: C/irc-manage.page:19(credit/name)
-#: C/irc-nick-password.page:18(credit/name)
-#: C/irc-send-file.page:16(credit/name)
-#: C/irc-start-conversation.page:15(credit/name)
-#: C/link-contacts.page:15(credit/name)
-#: C/prev-conv.page:17(credit/name)
-#: C/prob-conn-acctdisabled.page:19(credit/name)
-#: C/prob-conn-auth.page:21(credit/name)
-#: C/prob-conn-name.page:18(credit/name)
-#: C/prob-conn-neterror.page:19(credit/name)
-#: C/remove-account.page:19(credit/name)
-#: C/salut-protocol.page:18(credit/name)
-#: C/send-file.page:21(credit/name)
-#: C/set-custom-status.page:19(credit/name)
-#: C/share-desktop.page:14(credit/name)
-#: C/status-icons.page:16(credit/name)
-#: C/video-call.page:22(credit/name)
-msgid "Milo Casagrande"
-msgstr "Milo Casagrande"
-
-#: C/index.page:23(license/p)
-#: C/account-irc.page:20(license/p)
-#: C/account-jabber.page:18(license/p)
-#: C/accounts-window.page:22(license/p)
-#: C/add-account.page:29(license/p)
-#: C/add-contact.page:22(license/p)
-#: C/audio-call.page:23(license/p)
-#: C/audio-video.page:21(license/p)
-#: C/change-status.page:28(license/p)
-#: C/create-account.page:23(license/p)
-#: C/disable-account.page:29(license/p)
-#: C/favorite-rooms.page:18(license/p)
-#: C/geolocation.page:21(license/p)
-#: C/geolocation-not-showing.page:21(license/p)
-#: C/geolocation-privacy.page:21(license/p)
-#: C/geolocation-supported.page:20(license/p)
-#: C/geolocation-turn.page:22(license/p)
-#: C/geolocation-what-is.page:22(license/p)
-#: C/group-conversations.page:23(license/p)
-#: C/hide-contacts.page:15(license/p)
-#: C/import-account.page:31(license/p)
-#: C/introduction.page:17(license/p)
-#: C/irc-commands.page:14(license/p)
-#: C/irc-join-pwd.page:21(license/p)
-#: C/irc-join-room.page:20(license/p)
-#: C/irc-manage.page:23(license/p)
-#: C/irc-nick-password.page:22(license/p)
-#: C/irc-send-file.page:20(license/p)
-#: C/irc-start-conversation.page:19(license/p)
-#: C/link-contacts.page:19(license/p)
-#: C/prev-conv.page:25(license/p)
-#: C/prob-conn-acctdisabled.page:23(license/p)
-#: C/prob-conn-auth.page:25(license/p)
-#: C/prob-conn-name.page:22(license/p)
-#: C/prob-conn-neterror.page:23(license/p)
-#: C/prob-conn.page:18(license/p)
-#: C/remove-account.page:23(license/p)
-#: C/salut-protocol.page:22(license/p)
-#: C/send-file.page:25(license/p)
-#: C/send-message.page:21(license/p)
-#: C/set-custom-status.page:23(license/p)
-#: C/share-desktop.page:22(license/p)
-#: C/status-icons.page:24(license/p)
-#: C/video-call.page:26(license/p)
-msgid "Creative Commons Share Alike 3.0"
-msgstr "Dovoljenje Creative Commons - deljenje pod istimi pogoji 3.0"
-
-#: C/index.page:27(page/title)
-msgid "<media type=\"image\" mime=\"image/png\" src=\"figures/empathy-logo.png\"> Empathy Internet Messenger logo </media> Empathy Internet Messenger"
-msgstr "<media type=\"image\" mime=\"image/png\" src=\"figures/empathy-logo.png\">Logotip hipnega sporočilnika Empathy</media> Empathy hipni sporočilnik"
-
-#: C/index.page:35(section/title)
-msgid "Account Management"
-msgstr "Upravljanje z računi"
-
-#: C/index.page:39(section/title)
-msgid "Contact Management"
-msgstr "Upravljanje stikov"
-
-#: C/index.page:43(section/title)
-msgid "Text Conversations"
-msgstr "Besedilni pogovori"
-
-#: C/index.page:47(section/title)
-msgid "Audio and Video Conversations"
-msgstr "Zvočni in video pogovori"
-
-#: C/index.page:51(section/title)
-msgid "Advanced Actions"
-msgstr "Napredna dejanja"
-
-#: C/index.page:55(section/title)
-#: C/irc-manage.page:57(section/title)
-msgid "Common Problems"
-msgstr "Pogoste težave"
-
-#. This is a reference to an external file such as an image or video. When
-#. the file changes, the md5 hash will change to let you know you need to
-#. update your localized copy. The msgstr is not used at all. Set it to
-#. whatever you like once you have updated your copy of the file.
-#: C/account-irc.page:106(media)
-msgctxt "_"
-msgid "external ref='figures/gtk-add.png' md5='a856b499d8d4681b70b5ce6f25bc5c6d'"
-msgstr "external ref='figures/gtk-add.png' md5='a856b499d8d4681b70b5ce6f25bc5c6d'"
-
-#. This is a reference to an external file such as an image or video. When
-#. the file changes, the md5 hash will change to let you know you need to
-#. update your localized copy. The msgstr is not used at all. Set it to
-#. whatever you like once you have updated your copy of the file.
-#.
-#. This is a reference to an external file such as an image or video. When
-#. the file changes, the md5 hash will change to let you know you need to
-#. update your localized copy. The msgstr is not used at all. Set it to
-#. whatever you like once you have updated your copy of the file.
-#.
-#. This is a reference to an external file such as an image or video. When
-#. the file changes, the md5 hash will change to let you know you need to
-#. update your localized copy. The msgstr is not used at all. Set it to
-#. whatever you like once you have updated your copy of the file.
-#.
-#. This is a reference to an external file such as an image or video. When
-#. the file changes, the md5 hash will change to let you know you need to
-#. update your localized copy. The msgstr is not used at all. Set it to
-#. whatever you like once you have updated your copy of the file.
-#: C/account-irc.page:109(media)
-#: C/prob-conn-auth.page:58(media)
-#: C/prob-conn-name.page:44(media)
-#: C/prob-conn-neterror.page:59(media)
-msgctxt "_"
-msgid "external ref='figures/gtk-edit.png' md5='4f21b451732817be0604fe3e2c8da98b'"
-msgstr "external ref='figures/gtk-edit.png' md5='4f21b451732817be0604fe3e2c8da98b'"
-
-#. This is a reference to an external file such as an image or video. When
-#. the file changes, the md5 hash will change to let you know you need to
-#. update your localized copy. The msgstr is not used at all. Set it to
-#. whatever you like once you have updated your copy of the file.
-#: C/account-irc.page:112(media)
-msgctxt "_"
-msgid "external ref='figures/gtk-remove.png' md5='215e3a325a3dd619874e35c30a018bb6'"
-msgstr "external ref='figures/gtk-remove.png' md5='215e3a325a3dd619874e35c30a018bb6'"
-
-#: C/account-irc.page:8(info/desc)
-msgid "Additional information necessary for connecting to IRC networks."
-msgstr "Dodatni podatki, potrebni za povezovanje z omrežji IRC."
-
-#: C/account-irc.page:16(credit/name)
-#: C/account-jabber.page:14(credit/name)
-#: C/accounts-window.page:18(credit/name)
-#: C/add-account.page:25(credit/name)
-#: C/disable-account.page:25(credit/name)
-#: C/import-account.page:27(credit/name)
-#: C/prev-conv.page:21(credit/name)
-#: C/status-icons.page:20(credit/name)
-msgid "Shaun McCance"
-msgstr "Shaun McCance"
-
-#: C/account-irc.page:31(page/title)
-msgid "IRC account details"
-msgstr "Podrobnosti računa IRC"
-
-#: C/account-irc.page:33(page/p)
-msgid "IRC accounts require different information than many other types of accounts. To create an IRC account, you must specify at least an IRC network and a nickname. This page details the information you can provide for an IRC account."
-msgstr "Računi IRC zahtevajo drugačne podatke kot veliko drugih vrst računov. Za ustvarjanje računa IRC morate navesti vsaj omrežje IRC in vzdevek. Ta stran vsebuje podrobnosti, ki jih lahko navedete za vaš račun IRC."
-
-#: C/account-irc.page:39(note/p)
-#: C/irc-manage.page:37(note/p)
-msgid "You must have the <sys>telepathy-idle</sys> package installed to use IRC in <app>Empathy</app>."
-msgstr "Za uporabo IRC-a v <app>Empathy</app> morate imeti nameščen paket <sys>telepathy-idle</sys>."
-
-#: C/account-irc.page:45(item/title)
-#: C/account-irc.page:120(item/title)
-msgid "<gui>Network</gui>"
-msgstr "<gui>Omrežje</gui>"
-
-#: C/account-irc.page:46(item/p)
-msgid "IRC is an open system that allows people to run separate IRC networks. Each network is distinct and has its own users and chat rooms. <app>Empathy</app> lists the most popular networks in the <gui>Network</gui> drop-down list. You can add additional networks. See <link xref=\"#networks\"/> below."
-msgstr "IRC je odprt sistem, ki ljudem omogoča poganjanje ločenih omrežij IRC. Vsako omrežje je ločeno in ima svoje uporabnike in klepetalnice. <app>Empathy</app> v spustnemu seznamu <gui>Omrežje</gui> vsebuje najbolj priljubljena omrežja. Dodate lahko dodatna omrežja. Oglejte si <link xref=\"#networks\"/> spodaj."
-
-#: C/account-irc.page:53(item/title)
-msgid "<gui>Nickname</gui>"
-msgstr "<gui>Vzdevek</gui>"
-
-#: C/account-irc.page:54(item/p)
-msgid "Your nickname is your unique name on the IRC network. Only one person on a network may use a given nickname. If you get an error message that says <link xref=\"prob-conn-name\" role=\"error-msg\"/> you will need to change your nickname."
-msgstr "Vaš vzdevek je vaše edinstveno ime na omrežju IRC. Le ena oseba na omrežju lahko uporablja dani vzdevek. V primeru da dobite sporočilo napake <link xref=\"prob-conn-name\" role=\"error-msg\"/> boste morali spremeniti svoj vzdevek."
-
-#: C/account-irc.page:60(item/title)
-msgid "<gui>Password</gui>"
-msgstr "<gui>Geslo</gui>"
-
-#: C/account-irc.page:61(item/p)
-msgid "Some servers, particularly those on private networks, require a password to connect. If you are authorized to use the network, the network administrators should provide you with a password."
-msgstr "Nekateri strežniki, še posebno tisti na zasebnih omrežjih zahtevajo geslo za povezavo. V primeru da ste overjeni za uporabo omrežja, vam bodo skrbniki omrežja priskrbeli geslo. "
-
-#: C/account-irc.page:65(note/title)
-msgid "NickServ Passwords"
-msgstr "Gelsa NickServ"
-
-#: C/account-irc.page:66(note/p)
-msgid "On some networks, nicknames can be registered using a service known as NickServ. <app>Empathy</app> does not directly support nickname passwords. On some networks, including the popular freenode network, server passwords are automatically forwarded to NickServ, allowing you to set this field to identify yourself with NickServ. See <link xref=\"irc-nick-password\"/> for more details."
-msgstr "Na nekaterih omrežjih je vzdevke mogoče ustvariti z uporabo storitve NickServ. <app>Empathy</app> gesel vzdevkov ne podpira neposredno. Na nekaterih omrežjih, vključno s priljubljenim omrežjem FreeNode, so strežniška gesla samodejno posredovana NickServ, kar vam omogoča nastavitev tega polja za identifikacijo z NickServ. Za več podrobnosti si oglejte <link xref=\"irc-nick-password\"/>."
-
-#: C/account-irc.page:76(item/title)
-msgid "<gui>Real name</gui>"
-msgstr "<gui>Pravo ime</gui>"
-
-#: C/account-irc.page:77(item/p)
-msgid "You can provide your real name in addition to your nickname. Other users will be able to see this when they view your information."
-msgstr "Poleg vašega vzdevka lahko navedete tudi svoje pravo ime. Ostali uporabniki ga bodo lahko videli, ko si ogledajo vaše podrobnosti."
-
-#: C/account-irc.page:81(item/title)
-msgid "<gui>Quit message</gui>"
-msgstr "<gui>Sporočilo končanja</gui>"
-
-#: C/account-irc.page:82(item/p)
-msgid "When you go offline, a quit message is sent to all the chat rooms you’re in and to all the users you’re having a private conversation with. Use this field to provide a custom quit message."
-msgstr "Ko prekinete povezavo, je sporočilo končanja poslano vsem klepetalnicam, v katerih ste in vsem uporabnikom s katerimi imate zasebni pogovor. Uporabite to polje za sporočilo končanja po meri."
-
-#: C/account-irc.page:94(info/title)
-msgctxt "link"
-msgid "IRC Networks"
-msgstr "Omrežja IRC"
-
-#: C/account-irc.page:97(section/title)
-msgid "Networks"
-msgstr "Omrežja"
-
-#: C/account-irc.page:99(section/p)
-msgid "<app>Empathy</app> includes a list of popular IRC networks. If you wish to another IRC network, you can add it to the list. You can also modify networks and remove them from the list."
-msgstr "<app>Empathy</app> vključuje seznam priljubljenih omrežij IRC. V primeru da želite uporabljati drugo omrežje IRC ga lahko dodate na seznam. Omrežja lahko tudi spreminjate in jih odstranjujete s seznama. You can also modify networks and remove them from the list."
-
-#: C/account-irc.page:104(item/p)
-msgid "To add a network to the list, click <media type=\"image\" mime=\"image/png\" src=\"figures/gtk-add.png\" width=\"16\" height=\"16\">Add</media>."
-msgstr "Za dodajanje omrežja na seznamu kliknite <media type=\"image\" mime=\"image/png\" src=\"figures/gtk-add.png\" width=\"16\" height=\"16\">Dodaj</media>."
-
-#: C/account-irc.page:107(item/p)
-msgid "To modify a network in the list, select the network and click <media type=\"image\" mime=\"image/png\" src=\"figures/gtk-edit.png\" width=\"16\" height=\"16\">Edit</media>."
-msgstr "Za spremembo omrežja v seznamu izberite omrežje in kliknite <media type=\"image\" mime=\"image/png\" src=\"figures/gtk-edit.png\" width=\"16\" height=\"16\">Uredi</media>."
-
-#: C/account-irc.page:110(item/p)
-msgid "To remove a network from the list, select the network and click <media type=\"image\" mime=\"image/png\" src=\"figures/gtk-remove.png\" width=\"16\" height=\"16\">Remove</media>."
-msgstr "Za odstranitev omrežja s seznama izberite omrežje in kliknite <media type=\"image\" mime=\"image/png\" src=\"figures/gtk-remove.png\" width=\"16\" height=\"16\">Odstrani</media>."
-
-#: C/account-irc.page:115(section/p)
-msgid "When adding or modifying a network, you can enter the following information:"
-msgstr "Ob dodajanju ali spreminjanju omrežja lahko vnesete naslednje podatke:"
-
-#: C/account-irc.page:121(item/p)
-msgid "This is the name of the network as you want it to appear in the list of networks."
-msgstr "To je ime omrežja, ki se bo pojavilo v seznamu omrežij."
-
-#: C/account-irc.page:125(item/title)
-msgid "<gui>Charset</gui>"
-msgstr "<gui>Znakovni nabor</gui>"
-
-#: C/account-irc.page:126(item/p)
-msgid "This specifies the character encoding that is typically used on this network. A character encoding is a specific way of recording characters internally in a computer. There are many character encodings, and you need to use the same character encoding as other users to see their messages correctly."
-msgstr "To navede znakovno kodiranje, ki je običajno uporabljano na temu omrežju. Znakovno kodiranje je določen način notranjega zapisovanja znakov v računalniku. Obstaja več znakovnih kodiranj. Za pravilen ogled sporočil drugih uporabnikov morate uporabljati isto znakovno kodiranje kot oni."
-
-#: C/account-irc.page:135(item/p)
-msgid "By default, <app>Empathy</app> uses UTF-8, a modern character encoding that can handle text from most of the world's languages. Another common encoding for English and some other Western languages is ISO-8859-1."
-msgstr "Privzeto <app>Empathy</app> uporablja UTF-8, priljubljeno znakovno kodiranje, ki lahko upravlja z večino svetovnih jezikov. Drugo pogosto kodiranje za slovenščino in nekatere druge srednjeevropske jezike je ISO-8859-2."
-
-#: C/account-irc.page:141(item/title)
-msgid "<gui>Servers</gui>"
-msgstr "<gui>Strežniki</gui>"
-
-#: C/account-irc.page:142(item/p)
-msgid "An IRC network may have many servers you can connect to. When you are connected to a server on a particular network, you can communicate with all users on all other servers on that network. You can add and remove servers for this network using the <gui>Add</gui> and <gui>Remove</gui> buttons."
-msgstr "Omrežje IRC ima lahko veliko strežnikov na katere se lahko povežete. Ko ste povezani na strežnik na določenemu omrežju se lahko sporazumevate z vsemi uporabniki na vseh ostalih strežnikih na temu omrežju. Omrežju lahko dodate ali odstranite strežnike z uporabo gumbov <gui>Dodaj</gui> in <gui>Odstrani</gui>."
-
-#: C/account-irc.page:147(item/p)
-msgid "When a server is selected, click the field under <gui>Server</gui> or <gui>Port</gui> to edit it. Alternatively, use the left and right arrow keys to focus the field, and press the space bar to begin editing."
-msgstr "Ko je strežnik izbran za urejanje kliknite na <gui>Strežnik</gui> ali <gui>Vrata</gui>. Namesto tega lahko uporabite puščici levo in desno za žariščenje na polje in pritisnite preslednico za začetek urejanja."
-
-#: C/account-irc.page:151(item/p)
-msgid "Select the check box in the <gui>SSL</gui> column to encrypt all communication with a server. Note that this does not prevent other users on the network from seeing what you write on public chat rooms."
-msgstr "Izberite izbirno polje v stolpcu <gui>SSL</gui> za šifriranje vse komunikacije s strežnikom. Vedite da to ostalim uporabnikom na omrežju ne preprečuje ogleda vnosov, ki ste jih napisali v javne klepetalnice."
-
-#: C/account-jabber.page:7(info/desc)
-msgid "Advanced options for Jabber and Google Talk accounts."
-msgstr "Napredne možnosti za račune Jabber in Google Talk. "
-
-#: C/account-jabber.page:29(page/title)
-msgid "Jabber account details"
-msgstr "Podrobnosti računa Jabber"
-
-#: C/account-jabber.page:31(page/p)
-msgid "Most Jabber accounts will require only a login ID and a password to connect. For some accounts or on certain types of networks, you may need to enter additional information in the <gui>Advanced</gui> section. Normally, you will not need to use the advanced options below. For general instructions on adding an account, see <link xref=\"add-account\"/>."
-msgstr "Večina računov Jabber bo za povezavo zahtevala le ID prijave in geslo. Za nekatere računa na nekaterih vrstah omrežij boste morda morali vnesti dodatne podatke v odsek <gui>Napredno</gui>. Običajno vam naprednih možnosti spodaj ne bo treba uporabljati. Za splošna navodila o dodajanju računa si oglejte <link xref=\"add-account\" />."
-
-#: C/account-jabber.page:39(note/p)
-msgid "Google Talk is a type of Jabber account. These instructions hold for Google Talk accounts as well."
-msgstr "Google Talk je vrsta računa Jabber. Ta navodila veljajo tudi za računa Google Talk."
-
-#: C/account-jabber.page:45(item/title)
-msgid "<gui>Encryption required (TLS/SSL)</gui>"
-msgstr "<gui>Zahtevano je šifriranje (TLS/SSL)</gui>"
-
-#: C/account-jabber.page:46(item/title)
-msgid "<gui>Ignore SSL certificate errors</gui>"
-msgstr "<gui>Prezri napake potrdil SSL</gui>"
-
-#: C/account-jabber.page:47(item/p)
-msgid "Whenever possible, communication between <app>Empathy</app> and the Jabber server is encrypted. If encrypted communication is not possible, messages may be sent unencrypted. Select <gui>Encryption required</gui> to prevent <app>Empathy</app> from communicating with the Jabber server when encryption is not possible."
-msgstr "Kadar je mogoče je sporazumevanje med <app>Empathy</app> in strežnikom Jabber šifrirana. V primeru da šifrirana komunikacija ni mogoča, morda morda sporočila poslana nešifrirano. Izberite <gui>Zahtevano šifriranj</gui> za preprečitev komunikacije <app>Empathy</app> s strežniki Jabber, ko šifriranje ni mogoče."
-
-#: C/account-jabber.page:52(item/p)
-msgid "Some Jabber servers may encrypt data using invalid certificates, or using certificates from unknown authorities. If you trust the server you are connecting to, you can select <gui>Ignore SSL certificate errors</gui> to allow encrypted communication with invalid certificates."
-msgstr "Nekateri strežniki Jabber lahko šifrirajo podatke z neveljavnimi potrdili ali s potrdili neznanih overiteljev potrdil. V primeru da strežniku na katerega se povezujete zaupate, izberite <gui>Prezri napake potrdil SSL</gui> za omogočitev šifriranja sporazumevanja z neveljavnimi potrdili."
-
-#: C/account-jabber.page:59(item/title)
-msgid "<gui>Resource</gui>"
-msgstr "<b>Vir</b>"
-
-#: C/account-jabber.page:60(item/title)
-msgid "<gui>Priority</gui>"
-msgstr "<gui>Prednost</gui>"
-
-#: C/account-jabber.page:61(item/p)
-msgid "If you have multiple applications (for instance, on separate computers) connected to your account at the same time, you can set a resource to uniquely identify each one. By default, <app>Empathy</app> will use <input>Telepathy</input> as the resource."
-msgstr "V primeru da je z vašim računi hkrati povezanih več programov (na primer na ločenih računalnikih) lahko nastavite vir za edinstveno identifikacijo vsakega. Privzeto bo <app>Empathy</app> kot vir uporabil <input>Telepathy</input>."
-
-#: C/account-jabber.page:65(item/p)
-msgid "You can set the priority to specify which application should receive incoming messages from your contacts. New messages will be sent to the application with the highest priority."
-msgstr "Nastavite lahko prednost za navedbo kateri programi naj prejmejo dohodna sporočila od vaših stikov. Nova sporočila bodo poslana programu z najvišjo prednostjo."
-
-#: C/account-jabber.page:70(item/title)
-msgid "<gui>Override server settings</gui>"
-msgstr "Kliknite <gui>Prepiši nastavitve strežnika</gui>."
-
-#: C/account-jabber.page:71(item/p)
-msgid "<app>Empathy</app> will use default settings to connect to the Jabber server based on your login ID. For some Jabber servers, you will need to enter custom server settings manually. These settings should be provided for you by your Jabber provider."
-msgstr "<app>Empathy</app> bo uporabljal privzete nastavitve za povezovanje s strežnikom Jabber na osnovi vašega ID-ja prijave. Za nekatere strežnike Jabber boste morali ročno vnesti nastavitve strežnika po meri. Te nastavitve bi vam moral dati vaš ponudnik Jabber."
-
-#: C/accounts-window.page:11(info/desc)
-msgid "Add, modify, and delete accounts."
-msgstr "Dodajanje, spreminjanje in brisanje računov."
-
-#: C/accounts-window.page:33(page/title)
-msgid "Accounts Window"
-msgstr "Okno računov"
-
-#: C/accounts-window.page:35(page/p)
-msgid "The <gui>Accounts</gui> window allows you to add, modify, and delete accounts."
-msgstr "Okno <gui>Računi</gui> vam omogoča dodajanje, spreminjanje in brisanje računov."
-
-#: C/accounts-window.page:43(section/title)
-msgid "Account Details"
-msgstr "Podrobnosti računa"
-
-#: C/accounts-window.page:44(section/p)
-msgid "For most types of accounts, you can simply enter a login ID and a password. Certain accounts or account types, however, may require additional information."
-msgstr "Za večino vrst računov lahko enostavno vnesete ID prijave in geslo. Nekateri računi ali vrste računov morda zahtevajo dodatne podatke."
-
-#: C/add-account.page:9(info/desc)
-msgid "Add a new account to <app>Empathy</app>."
-msgstr "Dodajanje novega računa v <app>Empathy</app>."
-
-#: C/add-account.page:40(page/title)
-msgid "Add a new account"
-msgstr "Dodajanje novega računa"
-
-#: C/add-account.page:42(page/p)
-msgid "You can add instant messaging accounts from any supported service to communicate with all of your contacts in <app>Empathy</app>. For some account providers, these steps will also allow you to register for a new account. For more details, see <link xref=\"create-account\"/>."
-msgstr "Račune hipnega sporočanja za sporazumevanje z vsemi svojimi stiki v <app>Empathy</app> lahko dodate s katerekoli podprte naprave. Za nekatere ponudnike računov vam bodo ti koraki omogočili tudi ustvarjanje novega računa. Za več podrobnosti si oglejte <link xref=\"create-account\"/>."
-
-#: C/add-account.page:49(item/p)
-#: C/disable-account.page:49(item/p)
-#: C/irc-nick-password.page:50(item/p)
-#: C/remove-account.page:43(item/p)
-msgid "From the <gui>Contact List</gui> window, choose <guiseq><gui>Edit</gui> <gui>Accounts</gui></guiseq>, or press <key>F4</key>."
-msgstr "V oknu <gui>Seznam stikov</gui> izberite <guiseq><gui>Uredi</gui><gui>Računi</gui></guiseq> ali pritisnite <key>F4</key>."
-
-#: C/add-account.page:53(item/p)
-msgid "Click <gui style=\"button\">+</gui>."
-msgstr "Kliknite <gui style=\"button\">+</gui>."
-
-#: C/add-account.page:58(item/p)
-msgid "From the <gui>Protocol</gui> drop-down list, select the type of account you wish to add."
-msgstr "Na spustnemu seznamu <gui>Protokol</gui> izberite vrsto računa, ki jo želite dodati."
-
-#: C/add-account.page:62(item/p)
-msgid "If you do not already have a registered account, select <gui>Create a new account on the server</gui>. This feature is not available for all account types, and may not work with some account providers. See <link xref=\"create-account\"/> for more information."
-msgstr "V primeru da še niste ustvarili novega račun, izberite <gui>Ustvari nov račun na strežniku</gui>. Ta zmožnost ni na voljo za vse vrste računov in morda ne bo delovala z nekaterimi ponudniki računov. Za več podrobnosti si oglejte <link xref=\"create-account\"/>. "
-
-#: C/add-account.page:69(item/p)
-msgid "Enter the required information. For most accounts, you will only need a login ID and a password. Some accounts may require additional information. See <link xref=\"accounts-window#details\"/>for more information."
-msgstr "Vnesite zahtevane podatke. Za večino računov boste potrebovali le ID prijave in geslo. Nekateri računi morda zahtevajo dodatne podrobnosti. Za več podrobnosti si oglejte <link xref=\"accounts-window#details\"/>."
-
-#: C/add-account.page:74(item/p)
-#: C/import-account.page:61(item/p)
-#: C/irc-nick-password.page:63(item/p)
-msgid "Click <gui style=\"button\">Apply</gui>."
-msgstr "Kliknite <gui style=\"button\">Uveljavi</gui>."
-
-#: C/add-account.page:81(note/p)
-msgid "To change the name that identifies the account in the <gui>Accounts</gui> window, select the account from the list on the left and either click on the name or press the space bar. Edit the account name and press <key>Enter</key> when you’re finished."
-msgstr "Za spremembo imena, ki identificira račun v oknu <gui>Računi</gui>, izberite račun s seznama na levi ali kliknite na ime ali pritisnite preslednico. Uredite ime računa in pritisnite <key>Enter</key>, ko ste končali."
-
-#: C/add-contact.page:9(info/desc)
-msgid "Add someone to the contact list."
-msgstr "Dodajanje nekoga na seznam stikov."
-
-#: C/add-contact.page:18(credit/name)
-#: C/change-status.page:24(credit/name)
-#: C/prob-conn-acctdisabled.page:15(credit/name)
-#: C/prob-conn-auth.page:17(credit/name)
-#: C/prob-conn-neterror.page:15(credit/name)
-#: C/prob-conn.page:14(credit/name)
-#: C/send-file.page:17(credit/name)
-#: C/send-message.page:17(credit/name)
-msgid "Phil Bull"
-msgstr "Phil Bull"
-
-#: C/add-contact.page:33(page/title)
-msgid "Add someone to your list of contacts"
-msgstr "Dodajanje nekoga na vaš seznam stikov"
-
-#: C/add-contact.page:37(item/p)
-msgid "Choose <guiseq><gui>Chat</gui><gui>Add Contact</gui></guiseq>."
-msgstr "Izberite <guiseq><gui>Klepet</gui><gui>Dodaj stik</gui></guiseq>."
-
-#: C/add-contact.page:40(item/p)
-msgid "From the <gui>Account</gui> drop-down list, select the account you wish to use to connect to your contact. Your contact will need to be using the same service as the account you select."
-msgstr "Na spustnemu seznamu <gui>Račun</gui> izberite račun, ki ga želite uporabiti za povezovanje z vašim stikom. Vaš stik bo moral uporabiti isto storitev kot račun, ki ste ga izbrali."
-
-#: C/add-contact.page:45(item/p)
-msgid "In the <gui>Identifier</gui> field, enter your contact’s login ID, username, screen name, or other appropriate identifier for the service type."
-msgstr "V polju <gui>Določilo</gui> vnesite ID vašega stika, uporabniško ime, prikazano ime ali drugo primerno določilo za vrsto storitve."
-
-#: C/add-contact.page:49(item/p)
-msgid "In the <gui>Alias</gui> field, type your contact’s name as you would like it to appear in your contact list."
-msgstr "V polje <gui>Vzdevek</gui> vtipkajte ime vašega stika, kot naj se pojavi v vašemu seznamu stikov."
-
-#: C/add-contact.page:53(item/p)
-msgid "Click <gui>Add</gui> to add the person to your list of contacts."
-msgstr "Za dodajanje osebe na vaš seznam stikov kliknite <gui>Dodaj</gui>."
-
-#: C/add-contact.page:61(note/p)
-msgid "To add a new person to your list of contacts, you need to be connected to the Internet and to your account."
-msgstr "Za dodajanje nove osebe na vaš seznam stikov morate biti povezani na medmrežje in na vaš račun."
-
-#. This is a reference to an external file such as an image or video. When
-#. the file changes, the md5 hash will change to let you know you need to
-#. update your localized copy. The msgstr is not used at all. Set it to
-#. whatever you like once you have updated your copy of the file.
-#.
-#. This is a reference to an external file such as an image or video. When
-#. the file changes, the md5 hash will change to let you know you need to
-#. update your localized copy. The msgstr is not used at all. Set it to
-#. whatever you like once you have updated your copy of the file.
-#.
-#. This is a reference to an external file such as an image or video. When
-#. the file changes, the md5 hash will change to let you know you need to
-#. update your localized copy. The msgstr is not used at all. Set it to
-#. whatever you like once you have updated your copy of the file.
-#: C/audio-call.page:36(media)
-#: C/audio-video.page:70(media)
-#: C/video-call.page:39(media)
-msgctxt "_"
-msgid "external ref='figures/camera-web.png' md5='8166b4372f25b78cbf5a64fe2eac2ce5'"
-msgstr "external ref='figures/camera-web.png' md5='8166b4372f25b78cbf5a64fe2eac2ce5'"
-
-#: C/audio-call.page:9(info/desc)
-msgid "Call your contacts over the Internet."
-msgstr "Klic vaših stikov preko medmrežja."
-
-#: C/audio-call.page:27(page/title)
-msgid "Start an audio conversation"
-msgstr "Začenjanje zvočnega pogovora"
-
-#: C/audio-call.page:29(page/p)
-msgid "You can call your contacts and have an audio conversation with them. This features only works with certain types of accounts, and it requires the other person to have an application that supports audio calls."
-msgstr "Svoje stike lahko pokličete in imate z njimi zvočni pogovor. Ta zmožnost deluje le z določenimi vrstami računov in pod pogojem da ima druga oseba program, ki podpira zvočne klice."
-
-#: C/audio-call.page:34(item/p)
-msgid "From the <gui>Contact List</gui> window, click the <media type=\"image\" mime=\"image/png\" src=\"figures/camera-web.png\">video call</media> icon next to the name of the contact you wish to call and choose <gui style=\"menuitem\">Audio Call</gui>."
-msgstr "V oknu <gui>Seznam stikov</gui> kliknite ikono <media type=\"image\" mime=\"image/png\" src=\"figures/camera-web.png\">video klic</media> poleg imena stika, ki ga želite poklicati in izberite <gui style=\"menuitem\">Zvočni klic</gui>."
-
-#: C/audio-call.page:42(item/p)
-#: C/video-call.page:44(item/p)
-msgid "A new window will open. When the connection is established, you will see <gui>Connected</gui> at the bottom of the window, along with the total conversation time."
-msgstr "Odprlo se bo novo okno. Ko je povezava vzpostavljena boste na dnu okna videli <gui>Povezano</gui> skupaj s celotnim časom pogovora."
-
-#: C/audio-call.page:48(item/p)
-#: C/video-call.page:49(item/p)
-msgid "To end the conversation, click on <gui style=\"button\">Hang up</gui>."
-msgstr "Za končanje pogovora izberite <guiseq><gui style=\"menu\">Klic</gui><gui style=\"menuitem\">Odloži</gui></guiseq>."
-
-#: C/audio-call.page:55(note/p)
-msgid "To turn an audio conversation into a video conversation, choose <guiseq><gui style=\"menu\">Video</gui> <gui style=\"menuitem\">Video On</gui></guiseq>."
-msgstr "Za spremembo zvočnega pogovora v video pogovor izberite <guiseq><gui style=\"menu\">Video</gui><gui style=\"menuitem\">Vklopi video</gui></guiseq>."
-
-#: C/audio-call.page:63(section/title)
-msgid "Start an audio conversation with a meta-contact"
-msgstr "Začetek zvočnega pogovora z meta-stikom"
-
-#: C/audio-call.page:66(item/p)
-#: C/send-message.page:53(item/p)
-#: C/video-call.page:64(item/p)
-msgid "From the <gui>Contact List</gui> window, right-click on the meta-contact."
-msgstr "V oknu <gui>Seznam stikov</gui> desno kliknite na meta-stik."
-
-#: C/audio-call.page:71(item/p)
-msgid "Select the contact you want to have the conversation, and from the menu select <gui style=\"menuitem\">Audio Call</gui>."
-msgstr "Desno kliknite na ime stika s katerim želite imeti pogovor in izberite <gui>Zvočni klic</gui>."
-
-#: C/audio-call.page:78(note/p)
-#: C/send-message.page:65(note/p)
-#: C/video-call.page:76(note/p)
-msgid "To recognize if a contact is a <em>meta-contact</em>, move your mouse on a contact in the <gui>Contact List</gui> window, and stop over it for a second: a small pop-up message will appear showing the number of the contacts that form the meta-contact."
-msgstr "Če želite videti ali je stik <em>meta-stik</em>, premaknite miško na stik v oknu <gui>Seznam stikov</gui> in se nad njim za trenutek zaustavite: pojavilo se bo majhno sporočilo, ki prikazuje število stikov, ki tvorijo meta-stik."
-
-#. This is a reference to an external file such as an image or video. When
-#. the file changes, the md5 hash will change to let you know you need to
-#. update your localized copy. The msgstr is not used at all. Set it to
-#. whatever you like once you have updated your copy of the file.
-#: C/audio-video.page:58(media)
-msgctxt "_"
-msgid "external ref='figures/audio-input-microphone.png' md5='8d89026b66a263a3bc5b1f0665948567'"
-msgstr "external ref='figures/audio-input-microphone.png' md5='8d89026b66a263a3bc5b1f0665948567'"
-
-#: C/audio-video.page:8(info/desc)
-msgid "Information on when it is possible to have an audio or video conversation."
-msgstr "Podatki kdaj je mogoče imeti zvočni ali video pogovor."
-
-#: C/audio-video.page:32(page/title)
-msgid "Audio and video support"
-msgstr "Podpora za zvok in video"
-
-#: C/audio-video.page:34(page/p)
-msgid "You can only have audio and video conversation with contacts who are using an application which also supports this feature. When your contacts support audio or video conversations, you will see the following icons next to their names in the contact list:"
-msgstr "Zvočne in video pogovor imate lahko le s stiki, ki uporabljajo program s podporo te zmožnosti. V primeru da vaši stiki podpirajo zvočne ali video pogovore lahko vidite naslednje ikone poleg njihovih imen na seznamu stikov:"
-
-#: C/audio-video.page:43(td/p)
-msgid "Icon"
-msgstr "Ikona"
-
-#: C/audio-video.page:48(td/p)
-msgid "Description"
-msgstr "Opis"
-
-#: C/audio-video.page:57(td/p)
-msgid "<media type=\"image\" mime=\"image/png\" src=\"figures/audio-input-microphone.png\"> Icon for audio conversation </media>"
-msgstr "<media type=\"image\" mime=\"image/png\" src=\"figures/audio-input-microphone.png\"> Ikona za zvočni pogovor </media>"
-
-#: C/audio-video.page:64(td/p)
-msgid "The contact is able to have an audio conversation."
-msgstr "Stik lahko ima zvočni pogovor."
-
-#: C/audio-video.page:69(td/p)
-msgid "<media type=\"image\" mime=\"image/png\" src=\"figures/camera-web.png\"> Icon for video conversation </media>"
-msgstr "V sporočilu napake kliknite na ikono <media type=\"image\" mime=\"image/png\" src=\"figures/camera-web.png\">Ikona za video pogovor</media>."
-
-#: C/audio-video.page:76(td/p)
-msgid "The contact is able to have a video conversation."
-msgstr "Stik lahko ima video pogovor."
-
-#: C/audio-video.page:83(note/p)
-msgid "In order to have an audio conversation, you need to have a sound card that is supported by your operating system, and a working microphone."
-msgstr "Za zvočni pogovor morate imeti zvočno kartico, ki jo vaš operacijski sistem podpira, in delujoči mikrofon. "
-
-#: C/audio-video.page:87(note/p)
-msgid "In order to have a video conversation, you need to have a webcam that is supported by your operating system, and a working microphone."
-msgstr "Za video pogovor morate imeti spletno kamero, ki jo vaš operacijski sistem podpira, in delujoči mikrofon."
-
-#: C/audio-video.page:95(section/title)
-msgid "Supported Account Types"
-msgstr "Podprte vrste računov"
-
-#: C/audio-video.page:97(section/p)
-msgid "You can only have audio and video conversations using accounts on certain supported services. The following table lists whether audio and video is supported for each type of account."
-msgstr "Video in zvočne pogovore imate lahko le z uporabo računov na določenih podprtih storitvah. Naslednja razpredelnica našteva ali sta zvok in video podprta za vsako vrsto računa."
-
-#: C/audio-video.page:102(note/p)
-msgid "Account types are provided by plugins. Your system may not have all of the following types available, or it may have types not listed here. Updated plugins may make audio or video conversations possible on account types that are listed as unsupported here."
-msgstr "Vrste računov zagotavljajo vstavki. Vaš sistem morda nima na voljo vseh sledečih vrst, ali morda vsebuje vrste, ki tukaj niso naštete. Posodobljeni vstavki lahko omogočijo zvočni ali video klepet na vrstah računov, ki so tukaj naštete kot nepodprte."
-
-#: C/audio-video.page:128(td/p)
-msgid "Service"
-msgstr "Storitev"
-
-#: C/audio-video.page:129(td/p)
-msgid "Audio"
-msgstr "Zvok"
-
-#: C/audio-video.page:130(td/p)
-msgid "Video"
-msgstr "Video"
-
-#: C/audio-video.page:135(td/p)
-msgid "AIM"
-msgstr "AIM"
-
-#: C/audio-video.page:136(td/p)
-#: C/audio-video.page:137(td/p)
-#: C/audio-video.page:141(td/p)
-#: C/audio-video.page:142(td/p)
-#: C/audio-video.page:146(td/p)
-#: C/audio-video.page:147(td/p)
-#: C/audio-video.page:156(td/p)
-#: C/audio-video.page:157(td/p)
-#: C/audio-video.page:161(td/p)
-#: C/audio-video.page:162(td/p)
-#: C/audio-video.page:166(td/p)
-#: C/audio-video.page:167(td/p)
-#: C/audio-video.page:181(td/p)
-#: C/audio-video.page:182(td/p)
-#: C/audio-video.page:186(td/p)
-#: C/audio-video.page:187(td/p)
-#: C/audio-video.page:191(td/p)
-#: C/audio-video.page:192(td/p)
-#: C/audio-video.page:196(td/p)
-#: C/audio-video.page:197(td/p)
-#: C/audio-video.page:201(td/p)
-#: C/audio-video.page:202(td/p)
-#: C/audio-video.page:211(td/p)
-#: C/audio-video.page:212(td/p)
-#: C/audio-video.page:216(td/p)
-#: C/audio-video.page:217(td/p)
-msgid "No"
-msgstr "Ne"
-
-#: C/audio-video.page:140(td/p)
-msgid "Facebook Chat"
-msgstr "Facebook klepet"
-
-#: C/audio-video.page:145(td/p)
-msgid "gadugadu"
-msgstr "gadugadu"
-
-#: C/audio-video.page:150(td/p)
-msgid "Google Talk"
-msgstr "Google Talk"
-
-#: C/audio-video.page:151(td/p)
-#: C/audio-video.page:152(td/p)
-#: C/audio-video.page:171(td/p)
-#: C/audio-video.page:172(td/p)
-#: C/audio-video.page:176(td/p)
-#: C/audio-video.page:177(td/p)
-#: C/audio-video.page:206(td/p)
-#: C/audio-video.page:207(td/p)
-msgid "Yes"
-msgstr "Da"
-
-#: C/audio-video.page:155(td/p)
-msgid "Groupwise"
-msgstr "Groupwise"
-
-#: C/audio-video.page:160(td/p)
-msgid "ICQ"
-msgstr "ICQ"
-
-#: C/audio-video.page:165(td/p)
-#: C/create-account.page:107(section/title)
-msgid "IRC"
-msgstr "IRC"
-
-#: C/audio-video.page:170(td/p)
-#: C/create-account.page:60(section/title)
-msgid "Jabber"
-msgstr "Jabber"
-
-#: C/audio-video.page:175(td/p)
-msgid "MSN"
-msgstr "MSN"
-
-#: C/audio-video.page:180(td/p)
-msgid "myspace"
-msgstr "myspace"
-
-#: C/audio-video.page:185(td/p)
-msgid "qq"
-msgstr "qq"
-
-#: C/audio-video.page:190(td/p)
-#: C/create-account.page:78(section/title)
-msgid "People Nearby"
-msgstr "Ljudje v bližini"
-
-#: C/audio-video.page:195(td/p)
-msgid "sametime"
-msgstr "sametime"
-
-#: C/audio-video.page:200(td/p)
-msgid "silc"
-msgstr "silc"
-
-#: C/audio-video.page:205(td/p)
-#: C/create-account.page:89(section/title)
-msgid "SIP"
-msgstr "SIP"
-
-#: C/audio-video.page:210(td/p)
-msgid "Yahoo!"
-msgstr "Yahoo!"
-
-#: C/audio-video.page:215(td/p)
-msgid "zephyr"
-msgstr "zephyr"
-
-#: C/change-status.page:9(info/desc)
-msgid "Change your status to advertise your availability to your contacts."
-msgstr "Spremenite svoje stanje za oglaševanje vaše razpoložljivosti vašim stikom."
-
-#: C/change-status.page:39(page/title)
-msgid "Change your status"
-msgstr "Sprememba stanja"
-
-#: C/change-status.page:41(page/p)
-msgid "You can set your status to indicate your availability to your contacts. <app>Empathy</app> allows you to select from a list of defined statuses."
-msgstr "Nastavite lahko svoje stanje za nakaz vaše razpoložljivosti vašim stikov. <app>Empathy</app> vam omogoča izbiro s seznama določenih stanj."
-
-#: C/change-status.page:46(item/p)
-msgid "Click on the drop-down list at the top of the <gui>Contact List</gui> window."
-msgstr "Kliknite na spustni seznam na vrhu okna <gui>Seznam stikov</gui>."
-
-#: C/change-status.page:51(item/p)
-msgid "Select a status from the list."
-msgstr "Izberite stanje s seznama"
-
-#: C/change-status.page:57(page/p)
-msgid "See <link xref=\"status-icons\"/> for a list of the built-in statuses and what they mean. You can also <link xref=\"set-custom-status\">add custom status messages</link> to provide more information about your availability to your contacts."
-msgstr "Oglejte si <link xref=\"status-icons\"/> za seznam vgrajenih stanj in kaj pomenijo. Lahko tudi <link xref=\"set-custom-message\">dodate sporočila stanja po meri</link> za več podrobnosti o vaši razpoložljivosti svojim stikom."
-
-#: C/change-status.page:63(note/p)
-msgid "If you do not use your computer for a while, or if the screensaver is on, the status will be automatically set to Away."
-msgstr "V primeru da svojega računalnika nekaj časa ne uporabljate, ali če je ohranjevalnik zaslona vklopljen bo stanje samodejno nastavljeno na Odsoten."
-
-#: C/create-account.page:9(info/desc)
-msgid "Register for an account with one of the supported messaging services."
-msgstr "Ustvarjanje računa z eno od podprtih storitev sporočanja."
-
-#: C/create-account.page:34(page/title)
-msgid "Register for a new account"
-msgstr "Ustvarjanje novega računa"
-
-#: C/create-account.page:36(page/p)
-msgid "Most account types require you to create an account with a account provider before you can connect using instant messaging applications like <app>Empathy</app>. With some account providers, you can use <app>Empathy</app> to register for a new account, using the same steps as you would to <link xref=\"add-account\">add an account</link>."
-msgstr "Večina vrst računov pred povezovanjem s programom hipnega sporočanja kot je <app>Empathy</app> zahteva ustvarjanje računa s ponudnikom računa. Za nekatere ponudnike računov je mogoče za ustvarjanje novega računa uporabiti <app>Empathy</app> z uporabo enakih korakov kot za <link xref=\"add-account\">dodajanje računa</link>."
-
-#: C/create-account.page:42(page/p)
-msgid "This page provides information on creating a new account for various types of accounts. Your account provider should give you a login ID and a password, as well as any additional information you need to connect using <app>Empathy</app>."
-msgstr "Ta stran zagotavlja podatke o ustvarjanju novih računov za različne vrste računov. Vaš ponudnik računa vam bi moral dati ID prijave in geslo ter morebitne dodatne podatke, ki jih potrebujete za povezavo z <app>Empathy</app>."
-
-#: C/create-account.page:47(section/title)
-msgid "Facebook"
-msgstr "Facebook"
-
-#: C/create-account.page:48(section/p)
-msgid "Facebook is one of the most-used social networks. It allows users to create their own profile and to communicate with their friends."
-msgstr "Facebook je eno od najbolj uporabljanih družabnih omrežij. Uporabnikom dovoljuje ustvarjanje njihovega lastnega profila in komunikacijo s prijatelji."
-
-#: C/create-account.page:52(section/p)
-msgid "To use Facebook to communicate with your friends, you will need to create a new account from the website: <link href=\"http://www.facebook.com\">www.facebook.com</link>."
-msgstr "Za uporabo Facebooka za komunikacijo s prijatelji boste morali ustvariti nov račun na spletni strani: <link href=\"http://www.facebook.com\">www.facebook.com</link>."
-
-#: C/create-account.page:62(section/p)
-msgid "Jabber is an open instant messaging system. Like email, Jabber allows you to choose your account provider and communicate with all other Jabber users, regardless of their account provider."
-msgstr "Jabber je odprt sistem takojšnjega sporočanja. Tako kot elektronska pošta, vam Jabber omogoča izbiro vašega ponudnika računa in sporočanje z vsemi drugimi uporabniki Jabber ne glede na njihovega ponudnika računa. "
-
-#: C/create-account.page:66(section/p)
-msgid "You will need to create a new account with a Jabber provider. There are many free providers; one popular provider is <link href=\"http://register.jabber.org/\">Jabber.org</link>."
-msgstr "S ponudnikom Jabber boste morali ustvariti nov račun. Obstaja veliko brezplačnih podudnikov; en priljubljen ponudnik je <link href=\"http://register.jabber.org/\">Jabber.org</link>."
-
-#: C/create-account.page:71(note/p)
-msgid "If you use Google Mail or Google Talk, you already have a Jabber account. Google Talk is a Jabber service. Simply use your Google Mail address and password in <app>Empathy</app> to connect."
-msgstr "V primeru da uporabljate GMail ali Google Talk že imate račun Jabber. Google Talk je storitev Jabber. Za povezavo v <app>Empathy</app> enostavno uporabite svoj GMail naslov in geslo. "
-
-#: C/create-account.page:80(section/p)
-msgid "You do not need to create an account with a service provider to use this feature. This service works whenever you are connected to a local network, such as a wireless hotspot. It automatically finds all other users on the network who are also using this service."
-msgstr "Za uporabo te zmožnosti vam ni treba ustvariti računa s ponudnikom storitve. Ta storitev deluje kadarkoli ste povezani na krajevno omrežje kot je brezžična vroča točka. Samodejno najde ostale uporabnike na omrežju, ki tudi uporabljajo to storitev."
-
-#: C/create-account.page:85(section/p)
-msgid "For more information, see <link xref=\"salut-protocol\"/>."
-msgstr "Za več podrobnosti si oglejte <link xref=\"salut-protocol\"/>."
-
-#: C/create-account.page:91(section/p)
-msgid "SIP is an open system which allows users to have audio and video conversations over the Internet. You need to create an account with a SIP provider. You can communicate with all other SIP users, regardless of which SIP provider they use."
-msgstr "SIP je odprt sistem, ki uporabnikom omogoča zvočne in video pogovore preko medmrežja. S ponudnikom SIP morate ustvariti račun. Sporazumevate se lahko z vsemi drugimi uporabniki SIP, ne glede na to katerega ponudnika SIP uporabljajo."
-
-#: C/create-account.page:97(note/p)
-msgid "Due to technical differences, the free <link href=\"https://www.ekiga.net/index.php?page=register\">Ekiga.net</link> service does not currently work with <app>Empathy</app>."
-msgstr "Zaradi tehničnih razlik brezplačna storitev <link href=\"https://www.ekiga.net/index.php?page=register\">Ekiga.net</link> ne deluje z <app>Empathy</app>."
-
-#: C/create-account.page:102(section/p)
-msgid "Some SIP providers allow you to call normal phones from your computer. Generally, you will need to subscribe to a paid service for this feature."
-msgstr "Nekateri podnudniki SIP vam z vašega računalnika omogočajo klic na običajne telefone. V splošnem se morate za uporabo te zmožnosti naroči na plačljivo storitev. "
-
-#: C/create-account.page:109(section/p)
-msgid "You do not need to register for an account to use IRC. Although you specify a nickname when you add an IRC account to <app>Empathy</app>, this nickname is only established each time you connect. If another user is using the nickname, you will need to choose a new nickname."
-msgstr "Za uporabo IRC-a vam ni treba ustvariti računa. Čeprav ob dodajanju računa IRC v <app>Empathy</app> navedete vzdevek, je vzdevek vzpostavljen ob vsaki povezavi. V primeru da vzdevek uporablja drug uporabnik, boste morali izbrati nov vzdevek. "
-
-#: C/create-account.page:114(section/p)
-msgid "Some IRC networks use a service called NickServ to allow users to protect their nicknames. See <link xref=\"irc-nick-password\"/> for more information."
-msgstr "Nekatera omrežja IRC uporabljajo storitev z imenom NickServ, ki uporabnikom omogoča zaščito njihovih vzdevkov. Za več podrobnosti si oglejte <link xref=\"irc-nick-password\"/>."
-
-#: C/create-account.page:117(section/p)
-msgid "Some IRC servers are password protected. You will need to know the password to connect to these servers. Generally, these are private IRC networks."
-msgstr "Nekateri strežniki IRC so zaščiteni z geslom. Za povezavo s temi strežniki boste morali poznati geslo. V splošnem so to zasebna omrežja IRC."
-
-#: C/create-account.page:122(section/title)
-msgid "Proprietary Services"
-msgstr "Lastniške storitve"
-
-#: C/create-account.page:124(section/p)
-msgid "There are many proprietary instant messaging services that have been developed by different companies or organizations. <app>Empathy</app> allows you to connect to an existing account for most popular services. To create a new account with one of these services, you will need to visit the service’s web site and agree to its terms of use."
-msgstr "Različna podjetja in organizacije so razvile veliko lastniških storitev hipnega sporočanja. <app>Empathy</app> vam omogoča povezavo z obstoječim računom za večino priljubljenih storitev. Za ustvarjanje novega računa z eno od teh storitev boste morali obiskati spletišče storitve in se strinjati s pogoji uporabe."
-
-#: C/create-account.page:132(item/p)
-msgid "<link href=\"http://dashboard.aim.com/aim\">AIM</link>"
-msgstr "<link href=\"http://dashboard.aim.com/aim\">AIM</link>"
-
-#: C/create-account.page:137(item/p)
-msgid "<link href=\"https://www.icq.com/register/\">ICQ</link>"
-msgstr "<link href=\"https://www.icq.com/register/\">ICQ</link>"
-
-#: C/create-account.page:142(item/p)
-msgid "<link href=\"https://accountservices.passport.net\">MSN</link>"
-msgstr "<link href=\"https://accountservices.passport.net\">MSN</link>"
-
-#: C/create-account.page:147(item/p)
-msgid "<link href=\"https://login.yahoo.com/config/login\">Yahoo!</link>"
-msgstr "<link href=\"https://login.yahoo.com/config/login\">Yahoo!</link>"
-
-#: C/disable-account.page:9(info/desc)
-msgid "Prevent <app>Empathy</app> from automatically logging in to an account."
-msgstr "Preprečitev samodejnega prijavljanja <app>Empathy</app> v račun."
-
-#: C/disable-account.page:40(page/title)
-msgid "Disable an account"
-msgstr "Onemogočitev računa"
-
-#: C/disable-account.page:42(page/p)
-msgid "You can disable an account to prevent <app>Empathy</app> from logging in to it without removing the account entirely. You may wish to disable and re-enable an account if you only want to be logged in to the account at certain times, but you still want to use <app>Empathy</app> for other accounts."
-msgstr "Za preprečitev prijave v <app>Empaty</app> brez odstranitve računa lahko račun onemogočite. Morda želite račun onemogočiti in ponovno omogočiti v primeru da želite biti v račun prijavljeni le ob določenih časih, toda želite <app>Empathy</app> še vedno uporabiti za druge račune. "
-
-#: C/disable-account.page:53(item/p)
-msgid "Select the account you wish to disable from the accounts list on the left side of the window."
-msgstr "Izberite račun, ki ga želite onemogočiti, s seznama računov na levi strani okna."
-
-#: C/disable-account.page:57(item/p)
-msgid "On the right side of the window, switch it off."
-msgstr "Na desni strani okna ga izklopite."
-
-#: C/disable-account.page:62(page/p)
-msgid "To re-enable the account, switch it on."
-msgstr "Za ponovno omogočitev računa ga vklopite."
-
-#: C/favorite-rooms.page:10(info/desc)
-msgid "Set, join and manage favorite rooms."
-msgstr "Nastavite, pridružite se in upravljajte priljubljene sobe."
-
-#: C/favorite-rooms.page:29(page/title)
-msgid "Favorite rooms"
-msgstr "Priljubljene sobe"
-
-#: C/favorite-rooms.page:32(section/title)
-msgid "Set a room as a favorite"
-msgstr "Nastavi sobo kot priljubljeno"
-
-#: C/favorite-rooms.page:35(item/p)
-msgid "Join a room."
-msgstr "Pridružite se sobi."
-
-#: C/favorite-rooms.page:40(item/p)
-msgid "See <link xref=\"irc-join-room\"/> for more information on how to join an IRC room."
-msgstr "Za več podrobnosti kako se pridružiti sobi IRC si oglejte <link xref=\"irc-join-room\"/>. "
-
-#: C/favorite-rooms.page:46(item/p)
-msgid "See <link xref=\"group-conversations\"/> for more information on how to start or join a group conversation."
-msgstr "Za več podrobnosti kako začeti ali se pridružiti skupinskemu pogovoru si oglejte <link xref=\"group-conversations\"/>."
-
-#: C/favorite-rooms.page:54(item/p)
-msgid "From the conversation window, choose <guiseq><gui>Conversation</gui><gui>Favorite Chat Room</gui></guiseq>."
-msgstr "V oknu pogovora izberite <guiseq><gui>Pogovor</gui><gui>Priljubljena klepetalnica</gui></guiseq>."
-
-#: C/favorite-rooms.page:63(section/title)
-msgid "Join favorite rooms"
-msgstr "Pridruži se priljubljenim sobam"
-
-#: C/favorite-rooms.page:66(item/p)
-#: C/send-file.page:40(item/p)
-msgid "From the <gui>Contact List</gui> window, perform one of the following:"
-msgstr "V oknu <gui>Seznam stikov</gui> izvedite eno od naslednjega:"
-
-#: C/favorite-rooms.page:71(item/p)
-msgid "Press <key>F5</key>."
-msgstr "Pritisnite <key>F5</key>."
-
-#: C/favorite-rooms.page:76(item/p)
-msgid "Choose <guiseq><gui>Room</gui><gui>Join Favorites</gui></guiseq>, to join all your favorite rooms."
-msgstr "Izberite <guiseq><gui>Soba</gui><gui>Pridruži se priljubljenim</gui></guiseq>, za pridružitev vsem vašim priljubljenim sobam."
-
-#: C/favorite-rooms.page:82(item/p)
-msgid "Choose <gui>Room</gui>, and select the favorite room you want to join."
-msgstr "Izberite <gui>Soba</gui> in izberite sobo, ki se ji želite pridružiti."
-
-#: C/favorite-rooms.page:90(note/p)
-msgid "To join a favorite room, you need to be connected to the Internet and to your account."
-msgstr "Za pridružitev priljubljeni sobi morate biti povezani z medmrežjem in z vašim računom."
-
-#: C/favorite-rooms.page:98(section/title)
-msgid "Manage favorite rooms"
-msgstr "Upravljanje s priljubljenimi sobami"
-
-#: C/favorite-rooms.page:101(item/p)
-msgid "From the <gui>Contact List</gui> window, choose <guiseq><gui>Room</gui><gui>Manage Favorites</gui></guiseq>."
-msgstr "V oknu <gui>Seznam stikov</gui> izberite <guiseq><gui>Soba</gui><gui>Upravljaj priljubljene</gui></guiseq>."
-
-#: C/favorite-rooms.page:107(item/p)
-msgid "From the <gui>Account</gui> drop-down list, select the account you want to manage the favorite rooms of."
-msgstr "V spustnemu seznamu <gui>Račun</gui> izberite račun, katerega priljubljene sobe želite upravljati."
-
-#: C/favorite-rooms.page:111(item/p)
-msgid "Select <gui>All</gui> to see all you favorite rooms."
-msgstr "Izberite <gui>Vse</gui> za ogled vseh svojih priljubljenih sob."
-
-#: C/favorite-rooms.page:116(item/p)
-msgid "Select the favorite room you want to manage:"
-msgstr "Izberite priljubljeno sobo, ki jo želite upravljati:"
-
-#: C/favorite-rooms.page:121(item/p)
-msgid "Select the <gui>Auto-Connect</gui> check-box in order to automatically join that room when you connect to your account."
-msgstr "Izberite izbirno polje <gui>Samodejna povezava</gui> za samodejno povezovanje s to sobo, ko se povežete s svojim računom."
-
-#: C/favorite-rooms.page:127(item/p)
-msgid "Click on <gui>Remove</gui> to remove the room from your favorites."
-msgstr "Za odstranitev sobe iz svojih priljubljenih kliknite na <gui>Odstrani</gui>."
-
-#: C/favorite-rooms.page:134(item/p)
-msgid "When done, click <gui>Close</gui>."
-msgstr "Ko ste končali, kliknite <gui>Zapri</gui>."
-
-#: C/geolocation.page:8(info/desc)
-msgid "Use and understand geolocation in <app>Empathy</app>."
-msgstr "Uporabite in razumite geolego v <app>Empathy</app>."
-
-#: C/geolocation.page:32(page/title)
-msgid "Geographical position"
-msgstr "Geografska lega"
-
-#: C/geolocation.page:35(section/title)
-msgid "Geolocation"
-msgstr "Geo-lega"
-
-#: C/geolocation.page:39(section/title)
-msgid "Fix common problems"
-msgstr "Popravi pogoste napake"
-
-#: C/geolocation-not-showing.page:8(info/desc)
-msgid "<app>Empathy</app> does not publish my geographical position."
-msgstr "<app>Empathy</app> ne objavi mojega geografskega položaja."
-
-#: C/geolocation-not-showing.page:32(page/title)
-msgid "Geographical position not published"
-msgstr "Geografska lega ni objavljena"
-
-#: C/geolocation-not-showing.page:34(page/p)
-msgid "If your contacts cannot see your location, <app>Empathy</app> might not be able to discover with a good margin of precision your geographical position."
-msgstr "V primeru da vaši stiki ne morejo videti vašega položaj, <app>Empathy</app> morda ne more odkriti vašega geografskega položaja z dobro natančnostjo. "
-
-#: C/geolocation-not-showing.page:38(page/p)
-msgid "In this case, your position will not be published, but you are still able to see the location of your contacts."
-msgstr "V temu primeru vaš položaj ne bo objavljen, toda še vedno boste lahko videli položaje vaših stikov."
-
-#: C/geolocation-not-showing.page:42(page/p)
-msgid "If you want to publish your geographical position, you can try to use an external device such as a GPS."
-msgstr "V primeru da želite objaviti vaš geografski položaj, lahko poskusite z uporabo zunanje naprave kot je GPS."
-
-#: C/geolocation-not-showing.page:48(note/p)
-msgid "In order to publish your geographical location, your Jabber server needs to support the Personal Eventing Protocal (PEP). A list of <link href=\"http://coccinella.im/servers/servers_by_pubsub_pep.html\">servers which support PEP</link> is maintained online. Google Talk does not support this feature at this time."
-msgstr "Za objavo svojega geografskega položaja, mora vaš strežnik Jabber podpirati Osebni protokol dogodkov (PEP). Seznam <link href=\"http://coccinella.im/servers/servers_by_pubsub_pep.html\">strežnikov s podporo PEP</link> je vdrževan na spletu. Google Talk trenutno te zmožnosti ne podpira."
-
-#: C/geolocation-privacy.page:8(info/desc)
-msgid "What information are sent and to who."
-msgstr "Kateri podatki so poslani in komu."
-
-#: C/geolocation-privacy.page:32(page/title)
-msgid "Geolocation Privacy"
-msgstr "Zasebnost Geo-lege"
-
-#: C/geolocation-privacy.page:35(section/title)
-msgid "What information is sent"
-msgstr "Kateri podatki so poslani"
-
-#: C/geolocation-privacy.page:36(section/p)
-msgid "What is possible to send is: your country, region, locality, area, street, building, floor, room, and postal code, longitude, latitude and altitude, speed and bearing."
-msgstr "Mogoče je poslati: državo, regijo, krajevnost, področje, ulico, zgradbo, nadstropje, sobo, poštno številko, zemljepisno širino in dolžino, nadmorsko višino, hitrost in smer."
-
-#: C/geolocation-privacy.page:40(section/p)
-msgid "The accuracy and the quantity of information about your geographical position are based on the software or on the infrastructure used to discover your position."
-msgstr "Natančnost in kakovost podatkov o vašemu geografskemu položaju je odvisna od programov infrastrukture uporabljene za odkritje vašega položaja."
-
-#: C/geolocation-privacy.page:44(section/p)
-msgid "Different kind of networks may have different accuracy settings, and may send different information. The use of external devices such as GPS or mobile phone will increase the accuracy of the information sent."
-msgstr "Drugačne vrste omrežij imajo morda različne vrste natančnosti in lahko pošljejo različne podatke. Uporaba zunanjih naprav kot sta GPS in mobilni telefon bo povečalo natančnost poslanih podatkov."
-
-#: C/geolocation-privacy.page:49(section/p)
-msgid "When the privacy mode is enabled, nothing more precise than your city will be sent, even if you are using an external device."
-msgstr "Ko je omogočen način zasebnosti, ne bo poslano nič bolj natančno kot vaše mesto, tudi če uporabljate zunanjo napravo."
-
-#: C/geolocation-privacy.page:56(section/title)
-msgid "Who can see the information sent"
-msgstr "Kdo lahko vidi poslane podatke"
-
-#: C/geolocation-privacy.page:57(section/p)
-msgid "Only your contacts can see your geographical position."
-msgstr "Vaš geografski položaj lahko vidijo le vaši stiki."
-
-#: C/geolocation-privacy.page:63(section/title)
-msgid "What is the privacy mode"
-msgstr "Kaj je način zasebnosti"
-
-#: C/geolocation-privacy.page:64(section/p)
-msgid "The privacy mode, enabled by default, is a reduced accuracy mode that will decrease the accuracy of the geographical position sent to your contacts."
-msgstr "Način zasebnosti je privzeto omogočen način zmanjšane natančnosti, ki bo zmanjšal natančnost geografskega položaja poslanega vašim stikom."
-
-#: C/geolocation-privacy.page:71(section/title)
-msgid "Privacy overview"
-msgstr "Pregled zasebnosti"
-
-#: C/geolocation-privacy.page:72(section/p)
-msgid "Overview of the various geolocation privacy settings in <app>Empathy</app>."
-msgstr "Pregled različnih nastavitev zasebnosti geo-lege v <app>Empathy</app>. "
-
-#: C/geolocation-privacy.page:77(item/p)
-msgid "Geolocation is not enabled by default."
-msgstr "Geolega privzeto ni omogočena."
-
-#: C/geolocation-privacy.page:82(item/p)
-msgid "Privacy mode is enabled by default."
-msgstr "Način zasebnosti je privzeto omogočen."
-
-#: C/geolocation-privacy.page:87(item/p)
-msgid "Privacy mode prevails even when using external and more precise devices."
-msgstr "Način zasebnosti prevlada celo pri uporabi zunanjih in bolj natančnih naprav."
-
-#: C/geolocation-privacy.page:92(item/p)
-msgid "Only your contacts can see your position."
-msgstr "Vaš položaj lahko vidijo le vaši stiki."
-
-#: C/geolocation-supported.page:7(info/desc)
-msgid "Services that supports geolocation and compatibility."
-msgstr "Storitve, ki podpirajo geo-lego in združljivost."
-
-#: C/geolocation-supported.page:31(page/title)
-msgid "Supported services"
-msgstr "Podprte storitve"
-
-#: C/geolocation-supported.page:33(page/p)
-msgid "The geolocation feature at the moment is compatible only with the Jabber service. In order to use it, you and your contacts need to have a Jabber account."
-msgstr "Zmožnost geo-lege je trenutno združljiva le s storitvijo Jabber. Za uporabo zmožnosti morate imeti vi in vaš stik račun Jabber."
-
-#: C/geolocation-supported.page:39(note/p)
-msgid "It is necessary that also the server you are using supports the geolocation feature. Most of the Jabber servers support it. See your service website documentation for more information."
-msgstr "Zahtevano je, da strežnik, ki ga uporabljate, podpira zmožnost geo-lege. Podpira jo večina strežnikov Jabber. Za več podrobnosti si oglejte si dokumentacijo na spletišču vaše storitve."
-
-#: C/geolocation-supported.page:47(section/title)
-msgid "Compatibility"
-msgstr "Združljivost"
-
-#: C/geolocation-supported.page:49(section/p)
-msgid "<app>Empathy</app> geolocation feature is not compatible with other geographical position services such as <em>Google Latitude</em>, <em>Yahoo Fire Eagle</em> or <em>Brightkite</em>."
-msgstr "Zmožnost geo-lege <app>Empathy</app> ni združljiva z drugimi storitvami geografskih položajev kot so <em>Google Latitude</em>, <em>Yahoo Fire Eagle</em> ali <em>Brightkite</em>."
-
-#: C/geolocation-turn.page:9(info/desc)
-msgid "How to activate and deactivate geolocation in <app>Empathy</app>."
-msgstr "Kako omogočiti in onemogočiti geo-lego v <app>Empathy</app>."
-
-#: C/geolocation-turn.page:33(page/title)
-msgid "Activate/Deactivate geolocation"
-msgstr "Omogoči/onemogoči geo-lego"
-
-#: C/geolocation-turn.page:37(item/p)
-msgid "Choose <guiseq><gui>Edit</gui><gui>Preferences</gui></guiseq>."
-msgstr "Izberite <guiseq><gui>Uredi</gui><gui>Možnosti</gui></guiseq>."
-
-#: C/geolocation-turn.page:42(item/p)
-msgid "Select the <gui>Location</gui> tab."
-msgstr "Izberite zavihek <gui>Mesto</gui>."
-
-#: C/geolocation-turn.page:47(item/p)
-msgid "Select <gui>Publish location to my contacts</gui> to activate geolocation."
-msgstr "Za omogočenje geo-lege izberite <gui>Objavi položaj mojim stikom</gui> za objavo geo-lege."
-
-#: C/geolocation-turn.page:50(item/p)
-msgid "To deactivate geolocation, deselect it."
-msgstr "Za onemogočenje geo-lege odstranite njeno izbiro."
-
-#: C/geolocation-turn.page:55(item/p)
-msgid "To increase the accuracy of your position, deselect <gui>Reduce location accuracy</gui>."
-msgstr "Za povečanje natančnosti vašega položaja odstranite izbiro <gui>Zmanjšaj natančnost položaja</gui>. "
-
-#: C/geolocation-turn.page:61(item/p)
-msgid "If you have an external device like a GPS or want to send a more accurate position, select the appropriate option in the <gui>Location sources</gui> section."
-msgstr "V primeru da imate zunanjo napravo kot je GPS ali želite poslati bolj natančen položaj, izberite primerno možnost v odseku <gui>Viri mesta</gui>."
-
-#: C/geolocation-what-is.page:9(info/desc)
-msgid "Understanding geolocation."
-msgstr "Razumevanje geo-lege."
-
-#: C/geolocation-what-is.page:33(page/title)
-msgid "What is geolocation"
-msgstr "Kaj je geo-lega"
-
-#: C/geolocation-what-is.page:35(page/p)
-msgid "Geolocation allows you to identify the real geographical location of a computer or a device connected to the Internet."
-msgstr "Geo-lega vam omogoča identifikacijo pravega geografskega položaja računalnika ali naprave povezane na medmrežje."
-
-#: C/geolocation-what-is.page:37(page/p)
-msgid "With geolocation in <app>Empathy</app> you can:"
-msgstr "Z geo-lego v <app>Empathy</app> lahko:"
-
-#: C/geolocation-what-is.page:42(item/p)
-msgid "Publish your geographical location to your contacts."
-msgstr "Objavite svoj geografski položaj svojim stikom."
-
-#: C/geolocation-what-is.page:47(item/p)
-msgid "See your contacts’ geographical location and quickly contact them."
-msgstr "Oglejte si geografski položaj vaših stikov in hitro stopite v stik z njimi."
-
-#: C/geolocation-what-is.page:52(item/p)
-msgid "Set the accuracy of your location and the device used to discover your location."
-msgstr "Nastavite natančnost vašega položaja in napravo uporabljeno za odkritje vašega položaja."
-
-#: C/geolocation-what-is.page:60(note/p)
-msgid "In order to see your contacts’ geographical locations, they need to use a service and an application that supports geolocation."
-msgstr "Za ogled geografskih položajev vaših stikov, morajo uporabiti storitev in program, ki podpira geo-lego."
-
-#: C/group-conversations.page:8(info/desc)
-msgid "Start or join a group conversation with your contacts."
-msgstr "Začetek ali pridružitev skupinskemu pogovoru z vašimi stiki."
-
-#: C/group-conversations.page:34(page/title)
-msgid "Group conversations"
-msgstr "Skupinski pogovori"
-
-#: C/group-conversations.page:36(page/p)
-msgid "Group conversations permits you to have text conversations with more than one contact at the same time."
-msgstr "Skupinski pogovori vam omogočajo besedilne pogovor z več kot enim stikom hkrati."
-
-#: C/group-conversations.page:40(page/p)
-msgid "To have a group conversation you need to have a registered account with either Jabber or Google Talk, or a People Nearby account."
-msgstr "Za skupinski pogovor morate imeti ustvarjen račun Jabber ali Google Talk ali račun Ljudje v bližini."
-
-#: C/group-conversations.page:46(note/p)
-msgid "You can have a group conversation only with the contacts that are using the same service as yours."
-msgstr "Skupinske pogovore lahko imate le s stiki, ki uporabljajo enako storitev kot vi."
-
-#: C/group-conversations.page:54(section/title)
-msgid "Start a group conversation"
-msgstr "Začenjanje skupinskega pogovora"
-
-#: C/group-conversations.page:58(item/p)
-#: C/group-conversations.page:122(item/p)
-#: C/irc-join-room.page:39(item/p)
-msgid "From the <gui>Contact List</gui> window, choose <guiseq><gui>Room</gui><gui>Join</gui></guiseq>."
-msgstr "V okno <gui>Seznam stikov</gui> izberite <guiseq><gui>Soba</gui><gui>Pridruži se</gui></guiseq>."
-
-#: C/group-conversations.page:63(item/p)
-msgid "From the <gui>Account</gui> drop-down list, select the account you want to use for the group conversation."
-msgstr "V spustnemu seznamu <gui>Račun</gui> izberite račun, ki ga želite uporabiti za skupinski pogovor."
-
-#: C/group-conversations.page:69(item/p)
-msgid "In the <gui>Server</gui> text box, type the name of server in which the conversation will be hosted."
-msgstr "V besedilno polje <gui>Strežnik</gui> vnesite ime strežnika za gostovanje pogovora."
-
-#: C/group-conversations.page:73(item/p)
-msgid "Leave it empty if it will be on the current server."
-msgstr "Polje pustite prazno, če bo soba na trenutnemu strežniku."
-
-#: C/group-conversations.page:78(item/p)
-msgid "In the <gui>Room</gui> text box, type the name you want to give to the conversation."
-msgstr "V besedilno polje <gui>Soba</gui> vpišite ime, ki ga želite dati pogovoru."
-
-#: C/group-conversations.page:82(note/p)
-msgid "This will be the name of the room you are going to have a conversation. This name will be publicly available for other people to join. It is not possible to create a private room."
-msgstr "To bo bilo ime sobe za pogovor. To ime bo javno dostopno za druge ljudi, ki se želijo pridružiti. Zasebne sobe ni mogoče ustvariti."
-
-#: C/group-conversations.page:90(item/p)
-msgid "To invite other contacts to join the group conversation, from the <gui>Contact List</gui> window, select the contact you want to invite, and perform one of the following:"
-msgstr "Za povabilo drugih stikov v skupinski pogovor v oknu <gui>Seznam stikov</gui> izberite stik, ki ga želite povabiti, in izvedite nekaj od naslednjega:"
-
-#: C/group-conversations.page:97(item/p)
-msgid "Right-click on the contact and choose <gui>Invite to chatroom</gui>."
-msgstr "Desno kliknite na stik in izberite <gui>Povabi v kelepetalnico</gui>."
-
-#: C/group-conversations.page:102(item/p)
-msgid "Choose <guiseq><gui>Edit</gui><gui>Contact</gui><gui>Invite to chatroom</gui></guiseq>."
-msgstr "Izberite <guiseq><gui>Uredi</gui><gui>Stik</gui><gui>Povabi v klepetalnico</gui></guiseq>."
-
-#: C/group-conversations.page:107(item/p)
-msgid "If you have more than one group conversation open, select the one you want to invite your contacts."
-msgstr "V primeru da imate odprt več kot en skupinski pogovor izberite tistega v katerega želite povabiti svoje stike."
-
-#: C/group-conversations.page:118(section/title)
-msgid "Join a group conversation"
-msgstr "Pridružitev skupinskemu pogovoru"
-
-#: C/group-conversations.page:128(item/p)
-msgid "Expand the <gui>Room List</gui> section to see all the existing rooms."
-msgstr "Razširite odsek <gui>Seznam sob</gui> za ogled vseh obstoječih sob."
-
-#: C/group-conversations.page:133(item/p)
-msgid "Double-click on the name of a room to join it."
-msgstr "Dvokliknite na ime sobe za pridružitev."
-
-#: C/group-conversations.page:139(section/p)
-msgid "It is not possible to join all existing rooms. Some of the rooms might require a password, or might be invitation only. <app>Empathy</app> does not support these kind of rooms."
-msgstr "Ni se mogoče povezati z vsemi obstoječimi sobami. Nekatere sobe morda zahtevajo geslo, ali so dostopne le z vabilom. <app>Empathy</app> ne podpira teh vrst sob."
-
-#: C/hide-contacts.page:8(info/desc)
-msgid "Hide the offline contacts from your <gui>Contact List</gui>."
-msgstr "Skritje nepovezanih stikov iz vašega <gui>Seznama stikov</gui>."
-
-#: C/hide-contacts.page:19(page/title)
-msgid "Hide offline contacts"
-msgstr "Skrij nepovezane stike"
-
-#: C/hide-contacts.page:21(page/p)
-msgid "Normally, <app>Empathy</app> shows all your contacts: those that are online, with which you can have a conversation, and also those that are offline."
-msgstr "Običajno <app>Emapthy</app> prikaže vse vaše stike: povezane, s katerimi lahko imate pogovor, in nepovezane."
-
-#: C/hide-contacts.page:25(page/p)
-msgid "To hide the contacts that are offline:"
-msgstr "Za skritje nepovezanih stikov:"
-
-#: C/hide-contacts.page:31(item/p)
-msgid "From the <gui>Contact List</gui> window, choose <guiseq><gui>View</gui> <gui>Offline Contacts</gui></guiseq>, or press <keyseq><key>Ctrl</key> <key>H</key></keyseq>."
-msgstr "V oknu <gui>Seznam stikov</gui> izberite <guiseq><gui>Pogled</gui><gui>Nepovezani stiki</gui></guiseq> ali pritisnite <keyseq><key>Ctrl</key><key>H</key></keyseq>."
-
-#: C/hide-contacts.page:36(item/p)
-msgid "To show the offline contacts again, repeat the same procedure above."
-msgstr "Za ponoven prikaz nepovezanih stikov, ponovite postopek zgoraj."
-
-#: C/import-account.page:10(info/desc)
-msgid "Import an account from another instant messaging application."
-msgstr "Uvozite račun iz drugega programa hipnega sporočanja."
-
-#: C/import-account.page:19(credit/name)
-msgid "Peter Haslam"
-msgstr "Peter Haslam"
-
-#: C/import-account.page:42(page/title)
-msgid "Import an existing account"
-msgstr "Uvoz obstoječega računa"
-
-#: C/import-account.page:44(page/p)
-msgid "The first time you run <app>Empathy</app>, it will offer to import your accounts from other instant messaging applications. Currently, the only supported application is <app>Pidgin</app>."
-msgstr "Ob prvem zagonu <app>Empathy</app>, vam bo ponudil uvoz računov iz drugih programov hipnega sporočanja. Trenutno je edini podprti program <app>Pidgin</app>."
-
-#: C/import-account.page:50(item/p)
-msgid "Run <app>Empathy</app> for the first time. An assistant will offer you a number of options to create new accounts."
-msgstr "Prvič poženite <app>Empathy</app>. Pomočnik vam bo ponudil več možnosti za ustvarjanje novih računov."
-
-#: C/import-account.page:54(item/p)
-msgid "Select <gui>Yes, import my account details from</gui> and click <gui>Forward</gui>."
-msgstr "Izberite <gui>Da, uvozi podrobnosti mojega računa iz</gui> in kliknite <gui>Naprej</gui>."
-
-#: C/import-account.page:58(item/p)
-msgid "Select the check box next to each account you wish to import."
-msgstr "Izberite izbirno bolje poleg vsakega računa, ki ga želite uvoziti."
-
-#: C/import-account.page:66(note/p)
-msgid "It is not currently possible to import accounts after you have completed the first-run assistant."
-msgstr "Trenutno računov po končanju pomočnika prvega zagona ni mogoče uvažati."
-
-#. This is a reference to an external file such as an image or video. When
-#. the file changes, the md5 hash will change to let you know you need to
-#. update your localized copy. The msgstr is not used at all. Set it to
-#. whatever you like once you have updated your copy of the file.
-#: C/introduction.page:41(media)
-msgctxt "_"
-msgid "external ref='figures/empathy-main-window.png' md5='54908dcb2588beddb15ef0968d2c2582'"
-msgstr "external ref='figures/empathy-main-window.png' md5='54908dcb2588beddb15ef0968d2c2582'"
-
-#: C/introduction.page:9(info/desc)
-msgid "Introduction to the <app>Empathy</app> instant messenger."
-msgstr "Uvod v <app>Empathy</app> hipni sporočevalnik."
-
-#: C/introduction.page:21(page/title)
-msgid "Introduction"
-msgstr "Uvod"
-
-#: C/introduction.page:23(page/p)
-msgid "<app>Empathy</app> is an instant messaging application for the GNOME Desktop. It supports text messaging, voice &amp; video calls, file transfers, and all the most used messaging systems such as MSN and Google Talk."
-msgstr "<app>Empathy</app> je program hipnega sporočanja za namizje GNOME. Podpira besedilno sporočanje, zvočne in video klice, prenose datotek in najbolj uporabljene sisteme za sporočanje kot sta MSN in Google Talk."
-
-#: C/introduction.page:28(page/p)
-msgid "<app>Empathy</app> includes features that help you better collaborate while at work, and that let you easily keep in touch with your friends."
-msgstr "<app>Empathy</app> vključuje zmožnosti, ki vam pomagajo sodelovati pri delu in zmožnosti, ki vam omogočajo vzdrževanje stikov s svojimi prijatelji."
-
-#: C/introduction.page:32(page/p)
-msgid "Using <app>Empathy</app>, you can group all the conversations in a single window, have multiple windows for different kind of conversations, easily search through your previous conversations, and share your desktop in just two clicks."
-msgstr "Z <app>Empathy</app> lahko vse pogovore združite v eno okno, ali imate več oken za različne vrste pogovorov; enostavno iščete skozi svoje predhodne pogovore in date svoje namizje v souporabo s samo dvema klikoma."
-
-#: C/introduction.page:39(figure/title)
-msgid "<gui>Contact List</gui> window"
-msgstr "Okno <gui>Seznam stikov</gui>"
-
-#: C/introduction.page:40(figure/desc)
-msgid "<app>Empathy</app> main window"
-msgstr "Glavno okno <app>Empathy</app>"
-
-#: C/introduction.page:42(media/p)
-msgid "<app>Empathy</app> main window."
-msgstr "Glavno okno <app>Empathy</app>."
-
-#: C/irc-commands.page:7(info/desc)
-msgid "The supported IRC commands."
-msgstr "Podprti ukazi IRC"
-
-#: C/irc-commands.page:18(page/title)
-msgid "Supported IRC commands"
-msgstr "Podprti ukazi IRC"
-
-#: C/irc-commands.page:19(page/p)
-msgid "To see the list of the supported IRC commands, in a chat room type <input>/help</input> and press <key>Enter</key>."
-msgstr "Za ogled seznama podprtih ukazov IRC v klepetalnico vpišite <input>/help</input> in pritisnite <key>Enter</key>."
-
-#: C/irc-commands.page:24(note/p)
-msgid "All commands available have a small description on their usage."
-msgstr "Vsi razpoložljivi ukazi imajo kratek opis njihove uporabe. "
-
-#: C/irc-join-pwd.page:9(info/desc)
-msgid "Enter password-protected IRC chat rooms."
-msgstr "Vstop v z geslom zaščitene klepetalnice IRC."
-
-#: C/irc-join-pwd.page:25(page/title)
-msgid "Join a protected IRC chat room"
-msgstr "Pridružitev zaščiteni klepetalnici IRC"
-
-#: C/irc-join-pwd.page:27(page/p)
-msgid "On some IRC networks, private IRC rooms may be protected with a password. If you know the password, use the following steps to join:"
-msgstr "Na nekaterih omrežjih IRC so zasebne sobe IRC morda zaščitene z geslom. Če geslo poznate, uporabite naslednje korake za pridružitev:"
-
-#: C/irc-join-pwd.page:33(item/p)
-msgid "<link xref=\"irc-join-room\">Join the room</link> as normal."
-msgstr "<link xref=\"irc-join-room\">Pridružite se sobi</link> kot običajno."
-
-#: C/irc-join-pwd.page:38(item/p)
-msgid "Empathy will prompt you for a password. Enter the password for the IRC chat room and click <gui style=\"button\">Join</gui>."
-msgstr "Empathy vas bo pozval za geslo. Vpišite geslo klepetalnice IRC in kliknite na <gui style=\"button\">Pridruži se</gui>."
-
-#: C/irc-join-room.page:8(info/desc)
-msgid "Join an IRC channel."
-msgstr "Pridružitev kanalu IRC"
-
-#: C/irc-join-room.page:31(page/title)
-msgid "Join an IRC chat room"
-msgstr "Pridružitev klepetalnici IRC"
-
-#: C/irc-join-room.page:33(page/p)
-msgid "You can join IRC chat rooms (also known as IRC channels) on any IRC network you’re connected to. To connect to an IRC network, see <link xref=\"add-account\"/> and <link xref=\"account-irc\"/>."
-msgstr "Pridružite se lahko klepetalnicam IRC (poznane so tudi kot kanali IRC) na kateremukoli omrežju IRC. Za povezavo z omrežjem IRC si oglejte <link xref=\"add-account\"/> in <link xref=\"account-irc\"/>."
-
-#: C/irc-join-room.page:45(item/p)
-msgid "From the <gui>Account</gui> drop-down list, select the IRC account that corresponds to the network you want to use."
-msgstr "V spustnemu seznamu <gui>Račun</gui> izberite račun IRC, ki ustreza omrežju, ki ga želite uporabiti."
-
-#: C/irc-join-room.page:51(item/p)
-msgid "In the <gui>Room</gui> text box, type the name of the channel you want to join. IRC channel names start with the hash character (<sys>#</sys>)."
-msgstr "V besedilno polje <gui>Soba</gui> vnesite ime kanala, ki se mu želite pridružiti. Imena kanalov IRC se začnejo z znakom (<sys>#</sys>)."
-
-#: C/irc-join-room.page:57(item/p)
-msgid "Click <gui>Join</gui> to enter the room."
-msgstr "Kliknite <gui>Pridruži se</gui> za vstop v sobo."
-
-#: C/irc-join-room.page:64(note/p)
-msgid "To join multiple rooms, you need to repeat the steps above for each room."
-msgstr "Za pridružitev več sobam boste morali ponoviti korake zgoraj za vsako sobo."
-
-#: C/irc-manage.page:9(info/desc)
-msgid "How to use IRC with <app>Empathy</app>."
-msgstr "Kako uporabiti IRC z <app>Empathy</app>."
-
-#: C/irc-manage.page:34(page/title)
-msgid "Internet Relay Chat (IRC)"
-msgstr "Klepet IRC"
-
-#: C/irc-manage.page:41(when/p)
-msgid "<link action=\"install:telepathy-idle\" xref=\"index\" style=\"button\">Install telepathy-idle</link>"
-msgstr "<link action=\"install:telepathy-idle\" xref=\"index\" style=\"button\">Namestite telepathy-idle</link>"
-
-#: C/irc-manage.page:48(info/title)
-msgctxt "link"
-msgid "IRC Chat Rooms and Conversations"
-msgstr "Pogovori in klepetalnice IRC"
-
-#: C/irc-manage.page:50(section/title)
-msgid "Chat Rooms and Conversations"
-msgstr "Klepetalnice in pogovori"
-
-#: C/irc-manage.page:55(info/title)
-msgctxt "link"
-msgid "Common IRC Problems"
-msgstr "Pogoste težave z IRC-em"
-
-#: C/irc-nick-password.page:10(info/desc)
-msgid "Protect your nickname to prevent other IRC users from using it."
-msgstr "Zaščitite vaš vzdevek in preprečite da bi ga uporabljali drugi uporabniki IRC."
-
-#: C/irc-nick-password.page:33(page/title)
-msgid "Use a nickname password on IRC"
-msgstr "Uporaba gesla vzdevka na IRC-u"
-
-#: C/irc-nick-password.page:35(page/p)
-msgid "On some IRC networks, you can register your nickname with a service called NickServ. By sending special messages to NickServ, you can set your password and identify yourself. Some IRC chat rooms may not allow you to join without a registered nickname."
-msgstr "Na nekaterih omrežjih IRC lahko ustvarite svoj vzdevek s storitvijo z imenom NickServ. S pošiljanjem posebnih sporočil NickServ lahko nastavite svojo geslo in se identificirate. Nekatere sobe klepeta IRC vam morda ne dovolijo pridružitve brez vpisanega vzdevka. "
-
-#: C/irc-nick-password.page:40(page/p)
-msgid "<app>Empathy</app> does not currently support nickname registration. Some IRC networks, however, will automatically forward a <em>server password</em> to NickServ. On these networks, you can use the IRC password in <app>Empathy</app> to identify yourself to NickServ. The popular freenode network is known to have this feature."
-msgstr "<app>Empathy</app> trenutno ne podpira ustvarjanja vzdevkov. Nekatera omrežja IRC bodo NickServ samodejno posredovala <em>geslo strežnika</em>. Na teh omrežjih lahko uporabite geslo IRC v <app>Empathy</app> za identifikacijo sebe NickServ. Priljubljeno omrežje FreeNode ima to zmožnost."
-
-#: C/irc-nick-password.page:46(page/p)
-msgid "To set an IRC server password:"
-msgstr "Za nastavitev gesla strežnika IRC:"
-
-#: C/irc-nick-password.page:54(item/p)
-msgid "Select the IRC account from the list on the left of the dialog."
-msgstr "Izberite račun IRC s seznama na levi strani pogovornega okna."
-
-#: C/irc-nick-password.page:57(item/p)
-msgid "In the <gui>Password</gui> field, type the password you used to register your nikcname."
-msgstr "V polje <gui>Geslo</gui> vtipkajte geslo, ki ste ga uporabili za ustvarjanje svojega vzdevka."
-
-#: C/irc-nick-password.page:69(note/p)
-msgid "These instructions only allow you to use a password-protected nickname on certain IRC networks. It is not currently possible to register an IRC nickname or change your nickname password using <app>Empathy</app>."
-msgstr "Ta navodila vam dovolijo uporabo z geslom zaščitenega vzdevka na določenih omrežjih IRC. Trenutno z <app>Empathy</app> ni mogoče ustvariti vzdevka IRC ali spremeniti svojega vzdevka ali gesla. "
-
-#: C/irc-send-file.page:9(info/desc)
-msgid "<app>Empathy</app> does not currently support sending files using IRC."
-msgstr "<app>Empathy</app> trenutno ne podpira pošiljanja datotek preko IRC-a."
-
-#: C/irc-send-file.page:31(page/title)
-msgid "Send files over IRC"
-msgstr "Pošiljanje datotek preko IRC-a"
-
-#: C/irc-send-file.page:33(page/p)
-msgid "It is not currently possible to send files using IRC."
-msgstr "Trenutno preko IRC-a ni mogoče pošiljati datotek."
-
-#: C/irc-start-conversation.page:8(info/desc)
-msgid "Start a conversation with an IRC contact."
-msgstr "Začetek pogovora s stikom IRC."
-
-#: C/irc-start-conversation.page:30(page/title)
-msgid "Chat with somebody on IRC"
-msgstr "Klepet z nekom na IRC-u"
-
-#: C/irc-start-conversation.page:32(page/p)
-msgid "You can hold private conversations with other IRC users, outside of the public IRC chat rooms. To start a conversation with another IRC user:"
-msgstr "Z drugimi uporabniki IRC imate lahko zasebne pogovore zunaj javnih klepetalnic IRC. Za začetek pogovora z drugim uporabnikom IRC:"
-
-#: C/irc-start-conversation.page:37(item/p)
-msgid "In the contact list for an IRC chat room, double click the name of the user you want to chat with. Alternatively, right click the name of the user and choose <gui>Chat</gui>."
-msgstr "Na seznamu stikov klepetalnice IRC dvokliknite ime uporabnika s katerim želite klepetati. Namesto tega lahko desno kliknete na ima uporabnika in izberete <gui>Klepet</gui>."
-
-#: C/irc-start-conversation.page:45(item/p)
-msgid "The IRC room contact list is not the same as <app>Empathy</app> contact list. It contains a list of users in the IRC chat room you joined. Different rooms can have different contacts listed."
-msgstr "Seznam stikov sobe IRC ni enak kot seznam stikov <app>Empathy</app>. Vsebuje seznam uporabnikov v klepetalnicah IRC, ki ste se jim pridružili. Različne sobe imajo lahko različne sezname stikov."
-
-#: C/irc-start-conversation.page:52(item/p)
-msgid "The IRC room contact list is usually on the right side of the IRC room window. If you do not see it, choose <guiseq><gui>Conversation</gui><gui>Show Contact List</gui></guiseq>."
-msgstr "Seznam stikov sobe IRC je običajno na desni strani okna sobe IRC. V primeru da ga ne vidite izberite <guiseq><gui>Pogovor</gui><gui>Pokaži seznam stikov</gui></guiseq>."
-
-#: C/license.page:8(info/desc)
-msgid "Legal information."
-msgstr "Pravni podatki."
-
-#: C/license.page:11(page/title)
-msgid "License"
-msgstr "Licenca"
-
-#: C/license.page:12(page/p)
-msgid "This work is distributed under a CreativeCommons Attribution-Share Alike 3.0 Unported license."
-msgstr "Ta delo je distribuirano pod CreativeCommons Attribution-Share Alike 3.0 Unported license."
-
-#: C/license.page:20(page/p)
-msgid "You are free:"
-msgstr "Prosto lahko:"
-
-#: C/license.page:25(item/title)
-msgid "<em>To share</em>"
-msgstr "<em>Delite</em>"
-
-#: C/license.page:26(item/p)
-msgid "To copy, distribute and transmit the work."
-msgstr "Za kopiranje, distribuiranje in prenašanje dela."
-
-#: C/license.page:29(item/title)
-msgid "<em>To remix</em>"
-msgstr "<em>Predelate</em>"
-
-#: C/license.page:30(item/p)
-msgid "To adapt the work."
-msgstr "Prilagajanje dela"
-
-#: C/license.page:33(page/p)
-msgid "Under the following conditions:"
-msgstr "Pod naslednjimi pogoji:"
-
-#: C/license.page:38(item/title)
-msgid "<em>Attribution</em>"
-msgstr "<em>Priznanje avtorstva</em>"
-
-#: C/license.page:39(item/p)
-msgid "You must attribute the work in the manner specified by the author or licensor (but not in any way that suggests that they endorse you or your use of the work)."
-msgstr "Delo morate prilastiti na način, ki ga je navedel avtor ali dajalec licence (toda ne na kakršenkoli način, ki predlaga spodbudo vas ali vaše uporabe dela)."
-
-#: C/license.page:46(item/title)
-msgid "<em>Share Alike</em>"
-msgstr "<em>Deljenje pod enakimi pogoji</em>"
-
-#: C/license.page:47(item/p)
-msgid "If you alter, transform, or build upon this work, you may distribute the resulting work only under the same, similar or a compatible license."
-msgstr "V primeru da spremenite, preoblikujete ali nadgradite to delo, lahko nastalo delo distribuirate le pod enako, podobno ali združljivo licenco."
-
-#: C/license.page:53(page/p)
-msgid "For the full text of the license, see the <link href=\"http://creativecommons.org/licenses/by-sa/3.0/legalcode\">CreativeCommons website</link>, or read the full <link href=\"http://creativecommons.org/licenses/by-sa/3.0/\">Commons Deed</link>."
-msgstr "Za polno besedilo licence si oglejte <link href=\"http://creativecommons.org/licenses/by-sa/3.0/legalcode\">spletišče CreativeCommons</link>, ali preberite polno besedilo<link href=\"http://creativecommons.org/licenses/by-sa/3.0/\">Commons Deed</link>."
-
-#: C/link-contacts.page:11(info/desc)
-msgid "Merge and separate different contacts into a single one."
-msgstr "Združite in ločite različne stike v enega."
-
-#: C/link-contacts.page:25(page/title)
-msgid "Combine and separate contacts"
-msgstr "Združevanje in ločevanje stikov"
-
-#: C/link-contacts.page:26(page/p)
-msgid "If one, or more, of your contacts has multiple accounts with different messaging services, you can combine these contacts into a single one."
-msgstr "Če ima eden ali več vaših stikov več računov z različnimi storitvami sporočanja, jih lahko združite v enega."
-
-#: C/link-contacts.page:30(page/p)
-msgid "The resulting contact is called a <em>meta-contact</em>: a contact composed from different single contacts."
-msgstr "Nastali stik se imenuje <em>meta-stik</em>: stik sestavljen iz več različnih stikov."
-
-#: C/link-contacts.page:34(page/p)
-msgid "If you have a Jane Smith contact that is using three different messaging services like:"
-msgstr "V primeru da imate Janeza Novaka, ki uporablja tri različne storitve sporočanja kot:"
-
-#: C/link-contacts.page:40(item/p)
-msgid "janes@facebook"
-msgstr "janez@facebook"
-
-#: C/link-contacts.page:45(item/p)
-msgid "jane.smith@gmail"
-msgstr "janez.novak@gmail"
-
-#: C/link-contacts.page:50(item/p)
-msgid "jane_smith@hotmail"
-msgstr "janez_novak@hotmail"
-
-#: C/link-contacts.page:55(page/p)
-msgid "You can combine these contacts into a single Jane Smith one."
-msgstr "Te stike lahko združite v en stik Janez Novak."
-
-#: C/link-contacts.page:60(section/title)
-msgid "Combining contacts"
-msgstr "Združevanje stikov"
-
-#: C/link-contacts.page:63(item/p)
-msgid "From the <gui>Contact List</gui> window, right-click one of the contact that has different accounts, and select <gui style=\"menuitem\">Link Contacts...</gui>."
-msgstr "V oknu <gui>Seznam stikov</gui> desno kliknite na enega od stikov, ki ima različne računa in izberite <gui style=\"menuitem\">Poveži stike ...</gui>."
-
-#: C/link-contacts.page:70(item/p)
-msgid "From the left pane in the <gui>Link Contacts</gui> window, select the contacts you want to combine."
-msgstr "V levem pladnju v oknu <gui>Poveži stike</gui> izberite stike, ki jih želite združiti."
-
-#: C/link-contacts.page:76(item/p)
-msgid "Click <gui style=\"button\">Link</gui>."
-msgstr "Kliknite <gui style=\"button\">Poveži</gui>."
-
-#: C/link-contacts.page:82(note/p)
-msgid "When a meta-contact has been created, the default contact that will be used to have a conversation with when you double-click on it, is the contact with the highest presence on-line."
-msgstr "Ko je bil meta-stik ustvarjen, bo za pogovarjanje uporabljen stik z najpogostejšo povezanostjo."
-
-#: C/link-contacts.page:91(section/title)
-msgid "Separating contacts"
-msgstr "Ločevanje stikov"
-
-#: C/link-contacts.page:94(item/p)
-msgid "From the <gui>Contact List</gui>, right-click the contact to separate, and select <gui style=\"menuitem\">Link Contacts...</gui>."
-msgstr "V <gui>Seznamu stikov</gui> desno kliknite na stik za ločevanje in izberite <gui style=\"menuitem\">Poveži stike ...</gui>."
-
-#: C/link-contacts.page:100(item/p)
-msgid "Click <gui style=\"button\">Unlink</gui>."
-msgstr "Kliknite <gui style=\"button\">Razveži</gui>."
-
-#: C/prev-conv.page:8(info/desc)
-msgid "Browse or search your previous conversations."
-msgstr "Brskanje ali iskanje po preteklih pogovorih."
-
-#: C/prev-conv.page:36(page/title)
-msgid "View previous conversations"
-msgstr "Ogled preteklih pogovorov"
-
-#: C/prev-conv.page:38(page/p)
-msgid "<app>Empathy</app> automatically saves all your text conversations you have with your contacts. You can <link xref=\"#search\">search through all of your previous conversations</link> or <link xref=\"#browse\">browse previous conversations</link> by contact and date."
-msgstr "<app>Empathy</app> samodejno shrani vse vaše besedilne pogovore z vašimi stiki. Lahko <link xref=\"#search\">iščete po vseh vaših predhodnih pogovorih</link> ali <link xref=\"#browse\">brskate predhodne pogovore</link> po stiku in datumu."
-
-#: C/prev-conv.page:46(note/p)
-msgid "You do not need to be connected to the Internet to view and search your previous conversations."
-msgstr "Za ogled in iskanje vaših predhodnih pogovorov vam ni treba biti povezan na medmrežje."
-
-#: C/prev-conv.page:53(section/title)
-msgid "Search previous conversations"
-msgstr "Iskanje predhodnih pogovorov"
-
-#: C/prev-conv.page:55(section/p)
-msgid "You can perform a full-text search through all of your previous conversations."
-msgstr "Izvedete lahko iskanje celega besedila skozi vse vaše predhodne pogovore."
-
-#: C/prev-conv.page:59(item/p)
-#: C/prev-conv.page:87(item/p)
-msgid "From the <gui>Contact List</gui> window, choose <guiseq><gui>View</gui> <gui>Previous Conversations</gui></guiseq>. Alternatively, press <key>F3</key>."
-msgstr "V oknu <gui>Seznam stikov</gui> izberite <guiseq><gui>Pogled</gui><gui>Pretekli pogovori</gui></guiseq>. Namesto tega lahko pritisnete <key>F3</key>."
-
-#: C/prev-conv.page:63(item/p)
-msgid "Select an account from the drop-down list in the top. A list of contacts and chat room for that account will be shown below."
-msgstr "Izberite račun s spustnega seznama na vrhu. Seznam vseh stikov in klepetalnic za ta račun bo prikazan spodaj."
-
-#: C/prev-conv.page:67(item/p)
-msgid "Type the text you want to search for in the <gui>Search</gui> text field."
-msgstr "Vnesite besedilo, ki ga želite najti, v besedilno polje <gui>Iskanje</gui>."
-
-#: C/prev-conv.page:71(item/p)
-msgid "Any conversations that matched your search terms will be shown. By default, conversations are ordered by date."
-msgstr "Katerikoli pogovori, ki se skladajo z vašimi iskalnimi pogoji bodo prikazani v seznamu pod iskalnim poljem. Privzeto so pogovori razvrščeni po datumu."
-
-#: C/prev-conv.page:80(section/title)
-msgid "Browse previous conversations"
-msgstr "Brskaj predhodne pogovore"
-
-#: C/prev-conv.page:82(section/p)
-msgid "You can browse your previous conversations with your contacts or in chat rooms by date."
-msgstr "Svoje predhodne pogovore s svojimi stiki ali klepetalnicami lahko brskate po datumu."
-
-#: C/prev-conv.page:91(item/p)
-msgid "Select an account from the drop-down list in the top left. A list of contacts and chat room for that account will be shown below."
-msgstr "Izberite račun s spustnega seznama zgoraj levo. Seznam vseh stikov in klepetalnic za ta račun bo prikazan spodaj."
-
-#: C/prev-conv.page:95(item/p)
-msgid "Select a contact or chat room to view your previous conversations from. By default the most recent conversation will be shown."
-msgstr "Izberite stik ali klepetalnico za ogled svojih predhodnih pogovorov. Privzeto bodo prikazani najbolj nedavni stiki."
-
-#: C/prev-conv.page:99(item/p)
-msgid "You can browse your conversations by date. Days on which you had a conversation with the selected contact will be shown in bold text. Click a date to select it. Click the arrows next to the month and year to browse earlier dates."
-msgstr "Svoje pogovore lahko brskate po datumu. Dnevi ob katerih ste imeli pogovor z izbranim stikom bodo prikazni krepko. Kliknite na datum za izbiro. Kliknite puščice poleg meseca in leta za brskanje zgodnejših datumov."
-
-#: C/prev-conv.page:105(section/p)
-msgid "You can search for text in the conversations by typing into the search field at the top. The matching conversations will be showed."
-msgstr "Besedilo v prikazanemu pogovoru lahko iščete s pisanjem v iskalno polje na vrhu. Skladajoče besedilo bo poudarjeno."
-
-#: C/prev-conv.page:111(note/p)
-msgid "You can quickly view the previous conversations with one of your contacts from the <gui>Contact List</gui> window. Simply right click the contact and choose <gui>Previous Conversations</gui>. The <gui>Previous Conversations</gui> window will open with that contact already selected."
-msgstr "Predhodne pogovore z enim od svojih stikov si lahko hitro ogledate v oknu <gui>Seznam stikov</gui>. Desno kliknite na stik in izberite <gui>Ogled predhodnih pogovorov</gui>. Odprlo se bo okno <gui>Predhodni pogovori</gui> s predhodno izbranim stikom."
-
-#: C/prob-conn-acctdisabled.page:7(info/desc)
-msgid "The instant messaging account that you want to use is not enabled in the list of accounts."
-msgstr "Račun hipnega sporočanja, ki ga želite uporabiti ni omogočen na seznamu računov."
-
-#: C/prob-conn-acctdisabled.page:34(page/title)
-msgid "My account is not enabled"
-msgstr "Moj račun ni omogočen"
-
-#: C/prob-conn-acctdisabled.page:36(page/p)
-msgid "If the instant messaging account that you want to use is not enabled in the drop-down account list when you try to start a new conversation or join a room, your account details may not be correct."
-msgstr "V primeru da račun hipnega sporočanja, ki ga želite uporabiti, v spustnemu seznamu računov ob poskusu začetka novega pogovora ali pridružitve sobe ni omogočen, so morda podrobnosti vašega računa nepravilne. "
-
-#: C/prob-conn-acctdisabled.page:44(item/p)
-#: C/prob-conn-auth.page:45(item/p)
-#: C/prob-conn-neterror.page:53(item/p)
-msgid "Make sure that you are connected to the Internet, or to a local area network."
-msgstr "Prepričajte se, da ste povezani na medmrežje ali na krajevno omrežje."
-
-#: C/prob-conn-acctdisabled.page:49(item/p)
-msgid "Choose <guiseq><gui>Edit</gui><gui>Accounts</gui></guiseq> and select the account that is not working."
-msgstr "Izberite <guiseq><gui>Uredi</gui><gui>Računi</gui></guiseq> in izberite račun, ki ne deluje."
-
-#: C/prob-conn-acctdisabled.page:55(item/p)
-#: C/prob-conn-auth.page:63(item/p)
-msgid "Type your username and password again to make sure that they are correct."
-msgstr "Ponovno vpišite svoje uporabniško ime in geslo ter se prepričajte da sta pravilna."
-
-#: C/prob-conn-acctdisabled.page:60(item/p)
-#: C/prob-conn-neterror.page:64(item/p)
-msgid "Check in the <gui>Advanced</gui> section that all the details are correct. You should be able to find these details from the website of the messaging service."
-msgstr "V odseku <gui>Napredno</gui> preverite, da so vse podrobnosti pravilne. Te podrobnosti bi morali najti na spletišču storitve sporočanja."
-
-#: C/prob-conn-acctdisabled.page:66(item/p)
-msgid "Check that the account is switched on."
-msgstr "Preverite, da je račun vklopljen."
-
-#: C/prob-conn-auth.page:8(info/desc)
-msgid "An error message which says “<gui>Authentication failed</gui>” appears in the main window."
-msgstr "V glavnemu oknu se pojavi sporočilo napake, ki pravi “<gui>Overitev je spodletela</gui>”."
-
-#: C/prob-conn-auth.page:36(page/title)
-msgid "I get a message that says “Authentication failed”"
-msgstr "Dobil sporočilo, ki pravi “Overitev je spodletela”"
-
-#: C/prob-conn-auth.page:38(page/p)
-msgid "This kind of error happens when your instant messaging service is not allowing you to connect because it does not recognize your username or password for some reason."
-msgstr "Ta vrsta napake se zgodi, ko vam storitev takojšnjega sporočanja ne dovoli povezave ker zaradi nekega vzroka ne prepozna vašega uporabniškega imena ali gesla."
-
-#: C/prob-conn-auth.page:50(item/p)
-msgid "Make sure that you have registered an account with the service you are trying to connect to. If you do not have an account, most services will not allow you to connect."
-msgstr "Prepričajte se, da ste ustvarili račun za storitev s katero se želite povezati. V primeru da nimate računa, vam večina storitev ne bo dovolila povezave."
-
-#: C/prob-conn-auth.page:57(item/p)
-#: C/prob-conn-name.page:43(item/p)
-#: C/prob-conn-neterror.page:58(item/p)
-msgid "Click the <media type=\"image\" mime=\"image/png\" src=\"figures/gtk-edit.png\">edit</media> icon in the error message."
-msgstr "V sporočilu napake kliknite na ikono <media type=\"image\" mime=\"image/png\" src=\"figures/gtk-edit.png\">uredi</media>."
-
-#: C/prob-conn-auth.page:68(item/p)
-msgid "Deselect the <gui>Enabled</gui>, and then select it again to try to reconnect to the service."
-msgstr "Odstranite izbiro <gui>Omogočeno</gui> in jo nato ponovno izberite za poskus ponovne povezave s storitvijo."
-
-#: C/prob-conn-name.page:9(info/title)
-msgctxt "link:error-msg"
-msgid "“Name in use”"
-msgstr "“Ime v uporabi”"
-
-#: C/prob-conn-name.page:10(info/desc)
-msgid "An error message which says “<gui>Name in use</gui>” appears in the main window."
-msgstr "V glavnemu oknu se pojavi sporočilo napake, ki pravi “<gui>Ime v uporabi</gui>”."
-
-#: C/prob-conn-name.page:33(page/title)
-msgid "I get a message that says “Name in use”"
-msgstr "Dobim sporočilo, ki pravi “Ime v uporabi” "
-
-#: C/prob-conn-name.page:35(page/p)
-msgid "This kind of error happens when you try to connect to your IRC account and you are using a nickname that is already being used by someone else on that particular network."
-msgstr "Ta vrsta napak se zgodi, ko se poskusite povezati s svojim računom IRC in uporabljate vzdevek, ki ga na istemu omrežju že uporablja nekdo drug. "
-
-#: C/prob-conn-name.page:51(item/p)
-msgid "In the <gui>Nickname</gui> text box, type a new nickname."
-msgstr "V besedilno polje <gui>Vzdevek</gui> vpišite nov vzdevek."
-
-#: C/prob-conn-name.page:56(item/p)
-msgid "If you have registered that nickname within the network you are using, set the password for that nickname. For more information, see <link xref=\"irc-nick-password\"/>."
-msgstr "V primeru da ste ta vzdevek ustvarili v omrežju, ki ga uporabljate, nastavite geslo za ta vzdevek. Za več podrobnosti si oglejte <link xref=\"irc-nick-password\"/>."
-
-#: C/prob-conn-name.page:65(item/p)
-#: C/prob-conn-neterror.page:79(item/p)
-msgid "Switch the account off, and then switch it on to try to reconnect to the service."
-msgstr "Izklopite račun in ga ponovno vklopite za poskus ponovne povezave s storitvijo."
-
-#: C/prob-conn-neterror.page:7(info/desc)
-msgid "An error message which says “<gui>Network error</gui>” appears in the main window."
-msgstr "V glavnemu oknu se pojavi sporočilo napake, ki pravi “<gui>Network error</gui>”."
-
-#: C/prob-conn-neterror.page:34(page/title)
-msgid "I get a message that says “Network error”"
-msgstr "Dobim sporočilo, ki pravi “Napaka omrežja”"
-
-#: C/prob-conn-neterror.page:42(page/p)
-msgid "This kind of error happens when <app>Empathy</app> cannot communicate with the instant messaging service for some reason."
-msgstr "Ta vrsta napake se zgodi, ko <app>Empathy</app> zaradi nekega vzroka ne more komunicirati s storitvijo hipnega sporočanja. "
-
-#: C/prob-conn-neterror.page:46(page/p)
-msgid "Also, this kind of error happens when you try to use an IRC account without setting a nickname."
-msgstr "Ta vrsta napake se zgodi, ko poskušate uporabiti račun IRC brez nastavitve vzdevka."
-
-#: C/prob-conn-neterror.page:87(section/title)
-msgid "Proxy support"
-msgstr "Podpora posredniških strežnikov"
-
-#: C/prob-conn-neterror.page:88(section/p)
-msgid "At the moment <app>Empathy</app> can not be configured to work with a proxy."
-msgstr "Trenutno <app>Empathy</app> ni mogoče nastaviti za delo s posredovalnim strežnikom."
-
-#: C/prob-conn.page:7(info/desc)
-msgid "Diagnose common problems connecting to an instant messaging service."
-msgstr "Diagnoza pogostih težav pri povezovanju s storitvijo takojšnjega sporočanja."
-
-#: C/prob-conn.page:29(page/title)
-msgid "Problems connecting to an instant messaging service"
-msgstr "Težave s povezovanjem s storitvijo hipnega sporočanja"
-
-#: C/remove-account.page:8(info/desc)
-msgid "Completely remove an account from <app>Empathy</app>."
-msgstr "Popolnoma odstrani račun iz <app>Empathy</app>."
-
-#: C/remove-account.page:34(page/title)
-msgid "Remove an account"
-msgstr "Odstranitev računa"
-
-#: C/remove-account.page:36(page/p)
-msgid "You can completely remove an account from <app>Empathy</app> if you no longer wish to use the account. If you wish to use the account in <app>Empathy</app> again in the future, you will have to add your account details again."
-msgstr "V primeru da računa ne želite več uporabljati, lahko račun popolnoma odstranite iz <app>Empathy</app>. V primeru da želite v prihodnosti račun v <app>Empathy</app> ponovno uporabljati boste morali ponovno dodati podrobnosti svojega računa."
-
-#: C/remove-account.page:47(item/p)
-msgid "Select the account you wish to remove from the accounts list on the left side of the window."
-msgstr "Na seznamu računov na levi strani okna izberite račun, ki ga želite odstraniti."
-
-#: C/remove-account.page:51(item/p)
-msgid "Click <gui style=\"button\">-</gui>."
-msgstr "Kliknite <gui style=\"button\">-</gui>."
-
-#: C/remove-account.page:54(item/p)
-msgid "A dialog will be shown asking for confirmation. Click the <gui>Remove</gui> button to permanently remove the account."
-msgstr "Pojavilo se pogovorno okno, ki vas bo spraševalo za potrditev. Kliknite gumb <gui>Odstrani</gui> za odstranitev računa."
-
-#: C/remove-account.page:60(note/p)
-msgid "Even after removing an account, <app>Empathy</app> does not delete your conversation history for that account."
-msgstr "Tudi po odstraniti računa <app>Empathy</app> ne izbriše zgodovine vaših pogovorov za ta račun."
-
-#: C/salut-protocol.page:8(info/desc)
-msgid "Understanding the People Nearby feature."
-msgstr "Razumevanje zmožnosti ljudje v bližini."
-
-#: C/salut-protocol.page:33(page/title)
-msgid "What is People Nearby?"
-msgstr "Kaj je \"Ljudje v bližini\"?"
-
-#: C/salut-protocol.page:40(page/p)
-msgid "The People Nearby service is a serverless communication service: you do not need to connect and authenticate to a central server in order to use it."
-msgstr "Storitev ljudje v bližini je storitev sporočanja brez strežnika: za uporabo se vam ni potrebno povezati in overiti s centralnim strežnikom."
-
-#: C/salut-protocol.page:45(page/p)
-msgid "This kind of serverless messaging system is restricted to a local area network and an active Internet connection is not necessary."
-msgstr "Ta vrsta sistema sporočanja brez strežnika je omejena na krajevno omrežje in dejavna medmrežna povezava ni potrebna."
-
-#: C/salut-protocol.page:49(page/p)
-msgid "The people that use this service inside the same local area network will be auto-discovered, and it will be possible to send them messages and files as with other services."
-msgstr "Ljudje, ki uporabljajo to storitev znotraj istega krajevnega omrežja, bodo samodejno odkriti in mogoče jim bo poslati sporočila in datoteke kot z ostalimi storitvami. "
-
-#: C/salut-protocol.page:54(page/p)
-msgid "All the modern local area networks should be able to support this kind of service."
-msgstr "Vsa novejša krajevna omrežja bi morala podpirati to vrsto storitve."
-
-#: C/send-file.page:8(info/desc)
-msgid "Send a file from your computer to one of your contacts."
-msgstr "Pošljite datoteko s svojega računalnika enemu od svojih stikov."
-
-#: C/send-file.page:36(page/title)
-msgid "Send files"
-msgstr "Pošiljanje datotek"
-
-#: C/send-file.page:45(item/p)
-msgid "Right click on the contact you want to send a file to, and choose <gui>Send file</gui>."
-msgstr "Desno kliknite na stik, kateremu želite poslati datoteko in izberite <gui>Pošlji datoteko</gui>."
-
-#: C/send-file.page:50(item/p)
-msgid "Click on the contact you want to send a file, and choose <guiseq><gui>Edit</gui> <gui>Contact</gui><gui>Send file</gui></guiseq>."
-msgstr "Kliknite na stik, kateremu želite poslati datoteko in izberite <guiseq><gui>Uredi</gui><gui>Stik</gui><gui>Pošlji datoteko</gui></guiseq>."
-
-#: C/send-file.page:58(item/p)
-msgid "Select the file to send, and click on <gui>Send</gui>."
-msgstr "Izberite datoteko za pošiljanje in kliknite na <gui>Pošlji</gui>."
-
-#: C/send-file.page:63(item/p)
-msgid "The <gui>File Transfers</gui> window will appear."
-msgstr "Pojavilo se bo okno <gui>Prenosi datotek</gui>."
-
-#: C/send-file.page:66(item/p)
-msgid "Wait for your contact to accept the file transfer, or click <gui>Stop</gui> to halt the transfer."
-msgstr "Počakajte da vaš stik sprejme prenos datotek ali kliknite <gui>Zaustavi</gui> za zaustavitev prenosa."
-
-#: C/send-file.page:72(item/p)
-msgid "Once the transfer is finished, it is possible to close the <gui>File Transfers</gui> window."
-msgstr "Ko je prenos končan, je mogoče okno <gui>Prenosi datotek</gui> zapreti."
-
-#: C/send-file.page:80(note/p)
-msgid "If you have multiple finished transfers listed in the window, click on <gui>Clear</gui> to empty the list. This will only remove the files from the list and will not delete them from your computer."
-msgstr "V primeru da imate v oknu več končanih prenosov, kliknite na <gui>Počisti</gui> za spraznjene seznama. To bo datoteke le odstranilo s seznama in jih ne bo izbrisalo z vašega računalnika."
-
-#: C/send-file.page:87(note/p)
-msgid "It is possible to send files only using the following services: <em>Jabber</em>, <em>Google Talk</em> and <em>People Nearby</em>."
-msgstr "Pošiljanje datotek je mogoče samo z uporabo naslednjih storitev: <em>Jabber</em>, <em>Google Talk</em> in <em>Ljudje v bližini</em>."
-
-#: C/send-file.page:93(note/p)
-msgid "In order to send a file to someone, you need to be connected to the Internet, or to a local area network."
-msgstr "Za pošiljanje datotek morate biti povezani na medmrežje ali krajevno omrežje."
-
-#: C/send-message.page:8(info/desc)
-msgid "Send a message to one of your contacts."
-msgstr "Pošljite sporočilo enemu od vaših stikov."
-
-#: C/send-message.page:32(page/title)
-msgid "Send a message to someone"
-msgstr "Pošiljanje sporočila nekomu"
-
-#: C/send-message.page:36(item/p)
-msgid "From the <gui>Contact List</gui> window, double-click the name of the contact that you want to have a conversation with."
-msgstr "V <gui>Seznamu stikov</gui> dvokliknite ime stika s katerim želite imeti pogovor."
-
-#: C/send-message.page:42(item/p)
-msgid "A new window will open. Type a message into the box at the bottom of the window and press <key>Enter</key> to send it."
-msgstr "Odprlo se bo novo okno. Vpišite sporočilo v polje na dnu okna in pritisnite <key>Enter</key> za pošiljanje."
-
-#: C/send-message.page:50(section/title)
-msgid "Send a message to a meta-contact"
-msgstr "Pošiljanje sporočila meta-stiku"
-
-#: C/send-message.page:58(item/p)
-msgid "Select the contact you want to have the conversation, and from the menu select <gui style=\"menuitem\">Chat</gui>."
-msgstr "Izberite ime stika s katerim želite imeti pogovor in izberite <gui style=\"menuitem\">Klepet</gui>."
-
-#: C/set-custom-status.page:9(info/desc)
-msgid "Add, edit or delete personal messages for your status."
-msgstr "Dodajanje, urejanje ali brisanje osebnih sporočil za vaša stanja."
-
-#: C/set-custom-status.page:15(credit/name)
-msgid "Jim Campbell"
-msgstr "Jim Campbell"
-
-#: C/set-custom-status.page:34(page/title)
-msgid "Set a custom message"
-msgstr "Nastavitev sporočila po meri"
-
-#: C/set-custom-status.page:36(page/p)
-msgid "Sometimes you may want to set a custom message for your status, for example to let people know that you will be unavailable for a certain period of time."
-msgstr "Včasih si morda želite nastaviti sporočilo po meri za vaše stanje, na primer da ljudem sporočite da določen čas ne boste na voljo."
-
-#: C/set-custom-status.page:40(page/p)
-msgid "It is possible to set a custom message based on the different statuses available."
-msgstr "Sporočilo po meri je mogoče nastaviti na osnovi različnih razpoložljivih stanj."
-
-#: C/set-custom-status.page:46(item/p)
-#: C/set-custom-status.page:82(item/p)
-msgid "From the <gui>Contact List</gui> window, click on the drop-down list at the top."
-msgstr "V oknu <gui>Seznam stikov</gui> kliknite na spustni seznam na vrhu."
-
-#: C/set-custom-status.page:52(item/p)
-msgid "Select the status you want to add a custom message to. You have to select the one identified with the label <gui>Custom Message</gui>."
-msgstr "Izberite stanje, kateremu želite dodati sporočilu po meri. Izbrati morate sporočilo z oznako <gui>Sporočilo po meri</gui>."
-
-#: C/set-custom-status.page:58(item/p)
-msgid "Enter your custom message in the text box at the top of the window, and press <key>Enter</key> to set the message."
-msgstr "V besedilno polje na vrhu okna vnesite sporočilo po meri in pritisnite <key>Enter</key> za nastavitev sporočila. "
-
-#: C/set-custom-status.page:64(item/p)
-msgid "If you want to set the custom message as a favorite, saving it in order to use it again, click on the little heart on the right of the text box where you wrote your custom message."
-msgstr "V primeru da želite nastaviti sporočilo po meri kot priljubljeno in ga shraniti za ponovno uporabo, kliknite na majhno zvezdico na desni besedilnega polja, kjer ste napisali sporočilo po meri."
-
-#: C/set-custom-status.page:69(item/p)
-msgid "If you do not do it, the custom message will not be available the next time you use <app>Empathy</app>. It will be saved only for the current session."
-msgstr "V primeru da tega ne storite sporočilo ne bo na voljo, ko naslednjič uporabite <app>Empathy</app>. Shranjeno bo le za trenutno sejo."
-
-#: C/set-custom-status.page:78(section/title)
-msgid "Edit and remove a custom message"
-msgstr "Urejanje, odstranjevanje in dodajanje sporočila po meri"
-
-#: C/set-custom-status.page:88(item/p)
-msgid "Select <gui>Edit Custom Message</gui>."
-msgstr "Izberite <gui>Uredi sporočilo po meri</gui>."
-
-#: C/set-custom-status.page:95(item/p)
-msgid "To edit a custom message:"
-msgstr "Za urejanje sporočila po meri:"
-
-#: C/set-custom-status.page:100(item/p)
-msgid "From the <gui>Saved Presets</gui> box, select the status message you want to edit and double-click on it."
-msgstr "V polju <gui>Shranjene prednastavljene</gui> izberite sporočilo stanja, ki ga želite uredi, in ga dvokliknite."
-
-#: C/set-custom-status.page:106(item/p)
-msgid "Type the new custom message and press <key>Enter</key> to modify it."
-msgstr "Vnesite novo sporočilo po meri in pritisnite <key>Enter</key> za njegovo spremembo."
-
-#: C/set-custom-status.page:113(item/p)
-msgid "To remove a custom message:"
-msgstr "Za odstranitev sporočila po meri:"
-
-#: C/set-custom-status.page:118(item/p)
-msgid "From the <gui>Saved Presets</gui> box, select the status message you want to remove."
-msgstr "V polju <gui>Shranjene prednastavljene</gui> izberite sporočilo stanja, ki ga želite odstraniti."
-
-#: C/set-custom-status.page:124(item/p)
-msgid "Click on the <gui>Remove</gui> button."
-msgstr "Kliknite na gumb <gui>Odstrani</gui>."
-
-#: C/set-custom-status.page:133(item/p)
-msgid "When finished, click on <gui>Close</gui>."
-msgstr "Ko ste končali kliknite na <gui>Zapri</gui>."
-
-#: C/set-custom-status.page:140(note/p)
-msgid "When you edit a custom message, it will not be set as the current status message. You will need to select it from the <gui>Contact List</gui> window."
-msgstr "Ko urejate ali dodajate novo sporočilo po meri, ne bo nastavljeno kot trenutno sporočilo stanja. Morali ga boste izbrati v oknu <gui>Seznam stikov</gui>."
-
-#: C/share-desktop.page:7(info/desc)
-msgid "Show your desktop to your contacts."
-msgstr "Dajte namizje v souporabo s svojimi stiki."
-
-#: C/share-desktop.page:18(credit/name)
-msgid "Ekaterina Gerasimova"
-msgstr "Ekaterina Gerasimova"
-
-#: C/share-desktop.page:33(page/title)
-msgid "Share your desktop"
-msgstr "Dajte vaše namizje v souporabo"
-
-#: C/share-desktop.page:35(page/p)
-msgid "It is possible to share your desktop with some of your contacts. You can use this functionality to show your desktop to your contacts to, for example, ask for help or help your contacts resolve a problem."
-msgstr "Z nekaterimi stiki je mogoče dati svoje namizje v souporabo ali začeti uporabljati njihovo namizje. To zmožnost lahko uporabljate za prikaz svojega namizja vašim stikom, za iskanje pomoči ali za pomoč svojim stikom pri odpravljanju težav."
-
-#: C/share-desktop.page:42(note/p)
-msgid "To be able to share your desktop, you need to have a VNC server, which has support for the feature, installed on your system. <app>Vino</app>, the GNOME VNC server, has the required support."
-msgstr "Za zmožnost souporabe namizja boste morali imeti nameščen strežnik VNC z ustrezno podporo. <app>Vino</app>, GNOME strežnik VNC ima zahtevano podporo."
-
-#: C/share-desktop.page:51(item/p)
-msgid "From the <gui>Contact List</gui> window, do one of the following:"
-msgstr "V oknu <gui>Seznam stikov</gui> izvedite eno od naslednjega:"
-
-#: C/share-desktop.page:56(item/p)
-msgid "Select the contact you want to share your desktop with and choose <guiseq><gui>Edit</gui><gui>Contact</gui> <gui>Share My Desktop</gui></guiseq>."
-msgstr "Izberite stik kateremu želite dati svoje namizje v souporabo in izberite <guiseq><gui>Uredi</gui><gui>Stik</gui><gui>Daj moje namizje v souporabo</gui></guiseq>."
-
-#: C/share-desktop.page:63(item/p)
-msgid "Right-click on the name of the contact you want to share your desktop with and select <gui>Share My Desktop</gui>."
-msgstr "Desno kliknite na ime stika kateremu želite dati namizje v souporabo in izberite <gui>Daj moje namizje v souporabo</gui>."
-
-#: C/share-desktop.page:71(item/p)
-msgid "An invitation to view your desktop will be sent to the contact you have selected. To view your desktop, they will need to accept it."
-msgstr "Povabilo za ogled vašega namizja bo bilo poslano izbranemu stiku. Za ogled vašega namizja ga bo moral sprejeti."
-
-#: C/share-desktop.page:77(item/p)
-msgid "You can disconnect the contact from your computer using your desktop sharing application."
-msgstr "Povezavo stika s svojim oddaljenim namizjem lahko prekinete s programom souporabe namizja."
-
-#: C/share-desktop.page:82(note/p)
-msgid "For more information about how to use the remote desktop sharing application, refer to its help."
-msgstr "Za več podrobnosti kako uporabiti program oddaljenega pregledovalnika namizja se sklicujte na pomoč."
-
-#: C/share-desktop.page:90(page/p)
-msgid "When you share your desktop with someone else, it is possible to experience system performance slowdown and low Internet speed."
-msgstr "Ko svoje namizje date v souporabo z nekom drugim, boste morda opazili upočasnjeno delovanje sistema in nizko hitrost medmrežja."
-
-#: C/share-desktop.page:96(note/p)
-msgid "Some of your contacts may not be able to use this feature. It is necessary for them to have version 2.28, or newer, of <app>Empathy</app> and a compatible remote desktop viewer application installed in their system."
-msgstr "Vsi stiki morda ne podpirajo te zmožnosti. Stiki morajo imeti vsaj <app>Empathy</app> različico 2.28 in na svojemu sistemu nameščen program pregledovalnika oddaljenega namizja."
-
-#. This is a reference to an external file such as an image or video. When
-#. the file changes, the md5 hash will change to let you know you need to
-#. update your localized copy. The msgstr is not used at all. Set it to
-#. whatever you like once you have updated your copy of the file.
-#: C/status-icons.page:39(media)
-msgctxt "_"
-msgid "external ref='figures/available.png' md5='2196b2f0ad4ce26fdb7b9d48e75d1947'"
-msgstr "external ref='figures/available.png' md5='2196b2f0ad4ce26fdb7b9d48e75d1947'"
-
-#. This is a reference to an external file such as an image or video. When
-#. the file changes, the md5 hash will change to let you know you need to
-#. update your localized copy. The msgstr is not used at all. Set it to
-#. whatever you like once you have updated your copy of the file.
-#: C/status-icons.page:45(media)
-msgctxt "_"
-msgid "external ref='figures/busy.png' md5='15eb2adff5faedf97b0cb9105d09410a'"
-msgstr "external ref='figures/busy.png' md5='15eb2adff5faedf97b0cb9105d09410a'"
-
-#. This is a reference to an external file such as an image or video. When
-#. the file changes, the md5 hash will change to let you know you need to
-#. update your localized copy. The msgstr is not used at all. Set it to
-#. whatever you like once you have updated your copy of the file.
-#: C/status-icons.page:53(media)
-msgctxt "_"
-msgid "external ref='figures/away.png' md5='9c504d6ffa0cf1a9cc8933d16e1bea33'"
-msgstr "external ref='figures/away.png' md5='9c504d6ffa0cf1a9cc8933d16e1bea33'"
-
-#. This is a reference to an external file such as an image or video. When
-#. the file changes, the md5 hash will change to let you know you need to
-#. update your localized copy. The msgstr is not used at all. Set it to
-#. whatever you like once you have updated your copy of the file.
-#.
-#. This is a reference to an external file such as an image or video. When
-#. the file changes, the md5 hash will change to let you know you need to
-#. update your localized copy. The msgstr is not used at all. Set it to
-#. whatever you like once you have updated your copy of the file.
-#: C/status-icons.page:62(media)
-#: C/status-icons.page:69(media)
-msgctxt "_"
-msgid "external ref='figures/offline.png' md5='c5b0c21181cbd6e13f8909243c0fa964'"
-msgstr "external ref='figures/offline.png' md5='c5b0c21181cbd6e13f8909243c0fa964'"
-
-#: C/status-icons.page:7(info/desc)
-msgid "Understanding the various statuses and status icons."
-msgstr "Razumevanje različnih stanj in ikon stanja."
-
-#: C/status-icons.page:35(page/title)
-msgid "Status Types and Icons"
-msgstr "Vrste stanj in ikone"
-
-#: C/status-icons.page:39(item/title)
-msgid "<media type=\"image\" mime=\"image/png\" src=\"figures/available.png\">Available icon</media> <gui>Available</gui>"
-msgstr "<media type=\"image\" mime=\"image/png\" src=\"figures/available.png\">Ikona na voljo</media> <gui>Na voljo</gui>"
-
-#: C/status-icons.page:41(item/p)
-msgid "Use the <em>Available</em> status when you are at your computer and able to chat with your contacts. You can set a custom message for this status."
-msgstr "Stanje <em>Na voljo</em> uporabite, ko ste za računalnikom in zmožni klepetati s svojimi stiki. Za to stanje lahko nastavite sporočilo po meri."
-
-#: C/status-icons.page:45(item/title)
-msgid "<media type=\"image\" mime=\"image/png\" src=\"figures/busy.png\">Busy icon</media> <gui>Busy</gui>"
-msgstr "<media type=\"image\" mime=\"image/png\" src=\"figures/busy.png\">Ikona zaposleno</media> <gui>Zaposleno</gui>"
-
-#: C/status-icons.page:47(item/p)
-msgid "Use the <em>Busy</em> status to let your contacts know that you don’t want to chat right now. They can still contact you, for instance if they have something urgent they need to discuss. By default, <app>Empathy</app> will not use notification bubbles and sounds when you are busy. You can set a custom message for this status."
-msgstr "Uporabite stanje <em>Zaposlen</em> da bodo vaši stiki vedeli, da trenutno ne želite klepetati. Še vedno lahko vzpostavijo stik z vami, na primer če želijo razpravljati o nečem nujnem. Privzeto <app>Empathy</app> ne uporablja zvokov in balonskih opomnikov, ko ste zaposleni. Za to stanje lahko nastavite sporočilo po meri."
-
-#: C/status-icons.page:53(item/title)
-msgid "<media type=\"image\" mime=\"image/png\" src=\"figures/away.png\">Away icon</media> <gui>Away</gui>"
-msgstr "<media type=\"image\" mime=\"image/png\" src=\"figures/away.png\">Ikona odsotno</media> <gui>Odsotno</gui>"
-
-#: C/status-icons.page:55(item/p)
-msgid "Use the <em>Away</em> status when you are going away from your computer. <app>Empathy</app> automatically sets your status to Away if you do not use your computer for a while, or if your screensaver is on. By default, <app>Empathy</app> will not use notification bubbles and sounds when you are away. You can set a custom message for this status."
-msgstr "Stanje <em>Odsoten</em> uporabite, ko greste proč od računalnika. <app>Empathy</app> vaše stanje samodejno nastavi na odsoten, če računalnika nekaj časa ne uporabljate ali če je vklopljen vaš ohranjevalnik zaslona. Privzeto <app>Empathy</app> ne bo uporabljal zvokov in obvestilnih balončkov, ko ste odsotni. Za to stanje lahko nastavite sporočilo po meri."
-
-#: C/status-icons.page:62(item/title)
-msgid "<media type=\"image\" mime=\"image/png\" src=\"figures/offline.png\">Offline icon</media> <gui>Invisible</gui>"
-msgstr "<media type=\"image\" mime=\"image/png\" src=\"figures/offline.png\">Ikona nepovezano</media> <gui>Nevidno</gui>"
-
-#: C/status-icons.page:64(item/p)
-msgid "When you set your status to <em>Invisible</em>, you will appear as offline to your contacts. You will still be connected to your accounts, and you still see your contacts’ statuses and start conversations with them."
-msgstr "Ko nastavite svoje stanje na <em>Nevidno</em>, boste za vaše stike videti nepovezani. Še vedno boste povezani s svojimi računi in še vedno boste videli stanja svojih stikov in lahko začeli pogovore z njimi. "
-
-#: C/status-icons.page:69(item/title)
-msgid "<media type=\"image\" mime=\"image/png\" src=\"figures/offline.png\">Offline icon</media> <gui>Offline</gui>"
-msgstr "<media type=\"image\" mime=\"image/png\" src=\"figures/offline.png\">Ikona nepovezano</media> <gui>Nepovezano</gui>"
-
-#: C/status-icons.page:71(item/p)
-msgid "Setting your status to <em>Offline</em> disconnects you from all of your accounts."
-msgstr "Nastavitev vašega stanja na <em>Nepovezano</em> prekine povezavo z vsemi vašimi računi."
-
-#: C/video-call.page:10(info/desc)
-msgid "Start a video conversation with one of your contacts."
-msgstr "Začnite video pogovor z enim od vaših stikov"
-
-#: C/video-call.page:29(page/title)
-msgid "Start a video conversation"
-msgstr "Začenjanje video konference"
-
-#: C/video-call.page:31(page/p)
-msgid "If you have a webcam, you can call your contacts and have a video conversation with them. This feature only works with certain types of accounts, and it requires the other person to have an application that supports video calls."
-msgstr "V primeru da imate spletno kamero, lahko svoje stike pokličite in imate z njimi video pogovor. Ta zmožnost deluje le z določenimi vrstami računov in zahteva, da ima druga oseba program, ki podpira video klice."
-
-#: C/video-call.page:38(item/p)
-msgid "From the <gui>Contact List</gui> window, click the <media type=\"image\" mime=\"image/png\" src=\"figures/camera-web.png\">video call</media> icon next to the name of the contact you wish to call and choose <gui style=\"menuitem\">Video Call</gui>."
-msgstr "V oknu <gui>Seznam stikov</gui> kliknite ikono <media type=\"image\" mime=\"image/png\" src=\"figures/camera-web.png\">video klic</media> poleg imena stika, ki ga želite poklicati, in izberite <gui style=\"menuitem\">Video klic</gui>. Namesto tega lahko desno kliknete na stik in izberete <gui style=\"menuitem\">Video klic</gui>. "
-
-#: C/video-call.page:55(note/p)
-msgid "To turn a video conversation into an audio conversation, choose <guiseq><gui style=\"menu\">Video</gui><gui style=\"menuitem\">Video Off</gui></guiseq>."
-msgstr "Za pretvorbo video pogovora v zvočni pogovor izberite <guiseq><gui style=\"menu\">Video</gui><gui style=\"menuitem\">Izklopi</gui></guiseq>."
-
-#: C/video-call.page:61(section/title)
-msgid "Start a video conversation with a meta-contact"
-msgstr "Začnite video pogovor z enim od svojih meta-stikov"
-
-#: C/video-call.page:69(item/p)
-msgid "Select the contact you want to have the conversation, and from the menu select <gui style=\"menuitem\">Video Call</gui>."
-msgstr "Desno kliknite na ime stika s katerim želite imeti pogovor in izberite <gui style=\"menuitem\">Klepet</gui>."
-
-#~ msgid "milo@ubuntu.com"
-#~ msgstr "milo@ubuntu.com"
-
-#~ msgid "shaunm@gnome.org"
-#~ msgstr "shaunm@gnome.org"
-
-#~ msgid "Available icon"
-#~ msgstr "Ikona stanja na voljo"
-
-#~ msgid "Available"
-#~ msgstr "Na voljo"
-
-#~ msgid "Busy icon"
-#~ msgstr "Ikona zasedenosti"
-
-#~ msgid "Busy"
-#~ msgstr "Zaseden"
-
-#~ msgid "Away icon"
-#~ msgstr "Ikona odsotnosti"
-
-#~ msgid "Away"
-#~ msgstr "Odsoten"
-
-#~ msgid "Offline icon"
-#~ msgstr "Ikona nepovezanosti"
-
-#~ msgid "Invisible"
-#~ msgstr "Neviden"
-
-#~ msgid "Offline"
-#~ msgstr "Nepovezano"
-
-#~ msgid "kittykat3756@gmail.com"
-#~ msgstr "kittykat3756@gmail.com"
-
-#~ msgid "jwcampbell@gmail.com"
-#~ msgstr "jwcampbell@gmail.com"
-
-#~ msgid "Edit, remove and add a custom message"
-#~ msgstr "Urejanje, odstranjevanje in dodajanje sporočila po meri"
-
-#~ msgid ""
-#~ "To add a new custom message, from the <gui>Add New Preset</gui> section:"
-#~ msgstr ""
-#~ "Za dodajanje novega sporočila po meri iz odseka <gui>Dodajanje nove "
-#~ "prednastavljene</gui>:"
-
-#~ msgid ""
-#~ "Click on the drop-down list to select the status you want to set a custom "
-#~ "message to."
-#~ msgstr ""
-#~ "Kliknite na spustni seznam za izbiro stanja kateremu želite nastaviti "
-#~ "sporočilo po meri. "
-
-#~ msgid "Click on the text box, and type the new custom message."
-#~ msgstr "Kliknite na besedilno polje in vpišite novo sporočilo po meri."
-
-#~ msgid "Click on <gui>Add</gui> to add the new message to the presets ones."
-#~ msgstr ""
-#~ "Kliknite na <gui>Dodaj</gui> za dodajanje novega sporočila k "
-#~ "prednastavljenim."
-
-#~ msgid "philbull@gmail.com"
-#~ msgstr "philbull@gmail.com"
-
-#, fuzzy
-#~ msgid "I'd like to see this played up a bit more."
-#~ msgstr "?"
-
-#~ msgid "shaunm"
-#~ msgstr "shaunm"
-
-#~ msgid ""
-#~ "Empathy no longer allows you to create an IRC account without a valid "
-#~ "nick. I've removed the guide link. Remove the text."
-#~ msgstr ""
-#~ "Empathy vam ne dovoli ustvarjanje računa IRC brez veljavnega vzdevka. "
-#~ "Povezava vodiča je bila odstranjena. Odstrani besedilo."
-
-#~ msgid "Install telepathy-idle"
-#~ msgstr "Namesite telepathy-idle"
-
-#~ msgid "peter.haslam@freenet.de"
-#~ msgstr "peter.haslam@freenet.de"
-
-#~ msgid "Icon for audio conversation"
-#~ msgstr "Ikona za zvočni pogovor"
-
-#~ msgid "Icon for video conversation"
-#~ msgstr "Ikona za video pogovor"
-
-#~ msgid ""
-#~ "I'd like to do tables like this using nothing for No and ✔ for Yes, but "
-#~ "we need to look at the accessibility impact. I've <link href=\"http://"
-#~ "mail.gnome.org/archives/gnome-doc-list/2009-September/msg00006.html"
-#~ "\">asked the accessibility team</link> for input."
-#~ msgstr ""
-#~ "Želim narediti razporeditve kot je ta z uporabo Ne in ✔ za Ja, toda "
-#~ "potrebno je pogledati vpliv na dostopnost. Za mnenje sem <link href="
-#~ "\"http://mail.gnome.org/archives/gnome-doc-list/2009-September/msg00006."
-#~ "html\">vprašal ekipo dostopnosti</link> ."
-
-#~ msgid ""
-#~ "There's recent work on telepathy-butterfly and papyon to support audio "
-#~ "and video for MSN. It might be released in time for 2.28, but since it "
-#~ "doesn't follow the Gnome release schedule, I can't be sure. If it looks "
-#~ "like it's going to ship, let's mark it Yes."
-#~ msgstr ""
-#~ "Nedavno delo na telepathy-butterfly in papayon podpira zvok in video za "
-#~ "MSN. Morda bo podpora izšla v 2.28, toda ker ne sledi razporeditvi izdaje "
-#~ "Gnome, ni mogoče biti prepričan. V primeru da je videti, kot da bo "
-#~ "podpora izšla, jo bom označil z Da."
-
-#~ msgid "Resource"
-#~ msgstr "Vir"
-
-#~ msgid "Priority"
-#~ msgstr "Prednost"
-
-#~ msgid "Network"
-#~ msgstr "Omrežje"
-
-#~ msgid "Nickname"
-#~ msgstr "Vzdevek"
-
-#~ msgid "Password"
-#~ msgstr "Geslo"
-
-#~ msgid "Quit message"
-#~ msgstr "Končaj sporočilo"
-
-#~ msgid "Charset"
-#~ msgstr "Nabor znakov"
-
-#~ msgid "Servers"
-#~ msgstr "Strežniki"
-
-#~ msgid ""
-#~ "In order to be able to share your desktop or to remotely use your "
-#~ "contacts desktop, it is necessary to have a remote desktop viewer "
-#~ "application installed in your system."
-#~ msgstr ""
-#~ "Za souporabo svojega namizja ali za oddaljeno uporabo namizja svojega "
-#~ "stika morate imeti na svojemu sistemu nameščen program oddaljenega "
-#~ "pregledovalnika namizja."
-
-#~ msgid ""
-#~ "A request will be sent to the contact you want to share your desktop "
-#~ "with. If they accept, the default remote desktop viewer application will "
-#~ "be launched in order to permit you to disconnect the user that is "
-#~ "controlling your desktop."
-#~ msgstr ""
-#~ "Vašemu stiku bo poslana zahteva za souporabo namizja. V primeru da "
-#~ "zahtevo sprejme, se bo zagnal privzeti oddaljeni pregledovalnik namizja, "
-#~ "ki vam bo omogočal prekinitev povezave z uporabnikom, ki nadzira vaše "
-#~ "namizje."
-
-#~ msgid "Click on <gui style=\"button\">Remove</gui>."
-#~ msgstr "Kliknite <gui style=\"button\">Odstrani</gui>."
-
-#~ msgid ""
-#~ "Deselect the <gui>Enabled</gui> check-box next to the name of your "
-#~ "account, and then select it again to try to reconnect to the service."
-#~ msgstr ""
-#~ "Odstranite izbiro izbirnega polja <gui>Omogočeno</gui> poleg imena "
-#~ "svojega računa, in jo nato ponovno izberite za poskus ponovne povezave s "
-#~ "storitvijo."
-
-#~ msgid ""
-#~ "Check that the <gui style=\"checkbox\">Enabled</gui> check-box is "
-#~ "selected. If it is not, select the check-box to enable the account."
-#~ msgstr ""
-#~ "Preverite, če je izbrano izbirno polje <gui style=\"checkbox\">Omogočeno</"
-#~ "gui>. Če ni, ga izberite in s tem omogočite račun."
-
-#~ msgid ""
-#~ "Highlighting text is quirky: <link href=\"http://bugzilla.gnome.org/"
-#~ "show_bug.cgi?id=593733\">#593733</link>. If there's an actual "
-#~ "highlighting going on, independent of the selection (like in yellow or "
-#~ "something), we can use the term \"highlight\". Otherwise we need to use "
-#~ "the term \"select\". Watch that bug."
-#~ msgstr ""
-#~ "Poudarjanje besedila je čudno: <link href=\"http://bugzilla.gnome.org/"
-#~ "show_bug.cgi?id=593733\">#593733</link>. V primeru da pride do dejanskega "
-#~ "poudarjanja neodvisno od izbire (na primer v rumeni barvi), lahko "
-#~ "uporabimo izraz \"poudarjanje\". V nasprotnemu primeru moramo uporabiti "
-#~ "\"izbira\". Opazujte ta hrošč."
-
-#~ msgid "Select the <gui>Search</gui> tab."
-#~ msgstr "Izberite zavihek <gui>Iskanje</gui>."
-
-#~ msgid ""
-#~ "In the <gui>For</gui> field, type the text you want to search for. Click "
-#~ "<gui>Find</gui> or press <key>Enter</key>."
-#~ msgstr ""
-#~ "V polje <gui>Za</gui>, vtipkajte besedilo, ki ga želite iskati. Kliknite "
-#~ "<gui>išči</gui> ali pritisnite <key>Enter</key>."
-
-#~ msgid ""
-#~ "Click on a conversation to view it. <app>Empathy</app> will select the "
-#~ "text in the conversation that matched your search terms."
-#~ msgstr ""
-#~ "Za ogled pogovora kliknite nanj. <app>Empathy</app> bo izbral besedilo v "
-#~ "pogovoru, ki se sklada z vašimi pogoji iskanja."
-
-#~ msgid "Select the <gui>Conversations</gui> tab."
-#~ msgstr "Izberite zavihek <gui>Pogovori</gui>."
-
-#~ msgid ""
-#~ "Deselect <gui style=\"checkbox\">Enabled</gui> on the right side of the "
-#~ "window."
-#~ msgstr ""
-#~ "Odstranite izbiro <gui style=\"checkbox\">Omogočeno</gui> na desni strani "
-#~ "okna."
-
-#~ msgid "Click <gui style=\"button\">Log in</gui>."
-#~ msgstr "Kliknite <gui style=\"button\">Prijava</gui>."
-
-#~ msgid ""
-#~ "To turn a video conversation into an audio conversation, choose "
-#~ "<guiseq><gui style=\"menu\">Video</gui><gui style=\"menuitem\">Video Off</"
-#~ "gui></guiseq>, or click the <media type=\"image\" mime=\"image/png\" src="
-#~ "\"figures/camera-web.png\">video call</media> toolbar button to deselect "
-#~ "it."
-#~ msgstr ""
-#~ "Za spremembo video pogovora v zvočni pogovor izberite<guiseq><gui style="
-#~ "\"menu\">Video</gui><gui style=\"menuitem\">Izklopi video</gui></guiseq> "
-#~ "ali v orodni vrstici kliknite gumb <media type=\"image\" mime=\"image/png"
-#~ "\" src=\"figures/camera-web.png\">video klic</media> za odstranitev "
-#~ "njegove izbire."
-
-#~ msgid ""
-#~ "Click on the trash icon next to the account name to remove the account."
-#~ msgstr "Kliknite na ikono smeti poleg imena računa za njegovo odstranitev."
-
-#~ msgid "To join such a room, if you know the password:"
-#~ msgstr "Za pridružitev takšni sobi, v primeru da veste geslo:"
-
-#~ msgid ""
-#~ "There are a number of popular free SIP account providers; one popular "
-#~ "provider is <link href=\"https://signup.sipphone.com/new-users/app?"
-#~ "class=NewUser;proc=start\">Sipphone</link>."
-#~ msgstr ""
-#~ "Obstaja veliko brezplačnih ponudnikov SIP; eden od priljubljenih "
-#~ "ponudnikov je <link href=\"https://signup.sipphone.com/new-users/app?"
-#~ "class=NewUser;proc=start\">Sipphone</link>."
-
-#~ msgid ""
-#~ "From the <gui>Contact List</gui> window, click the <media type=\"image\" "
-#~ "mime=\"image/png\" src=\"figures/audio-input-microphone.png\">audio call</"
-#~ "media> icon next to the name of the contact you wish to call and choose "
-#~ "<gui style=\"menuitem\">Audio Call</gui>. Alternatively, right click the "
-#~ "contact and choose <gui style=\"menuitem\">Audio Call</gui>."
-#~ msgstr ""
-#~ "V oknu <gui>Seznam stikov</gui> kliknite ikono <media type=\"image\" mime="
-#~ "\"image/png\" src=\"figures/audio-input-microphone.png\">zvočni klic</"
-#~ "media> poleg imena stika, ki ga želite klicati in izberite <gui style="
-#~ "\"menuitem\">Zvočni klic</gui>. Dodatno lahko desno kliknete na stik in "
-#~ "izberete <gui style=\"menuitem\">Zvočni klic</gui>."
-
-#~ msgid ""
-#~ "To turn an audio conversation into a video conversation, choose "
-#~ "<guiseq><gui style=\"menu\">Video</gui><gui style=\"menuitem\">Video On</"
-#~ "gui></guiseq>, or click the <media type=\"image\" mime=\"image/png\" src="
-#~ "\"figures/camera-web.png\">video call</media> toolbar button to select it."
-#~ msgstr ""
-#~ "Za spremembo zvočnega pogovora v video pogovor izberite <guiseq><gui "
-#~ "style=\"menu\">Video</gui><gui style=\"menuitem\">Video vklopljen</gui></"
-#~ "guiseq> ali za izbiro kliknite na gumb <media type=\"image\" mime=\"image/"
-#~ "png\" src=\"figures/camera-web.png\">video klic</media> v orodni vrstici."
diff --git a/help/sv/figures/empathy-main-window.png b/help/sv/figures/empathy-main-window.png
deleted file mode 100644
index 4d98333b..00000000
--- a/help/sv/figures/empathy-main-window.png
+++ /dev/null
Binary files differ
diff --git a/help/sv/figures/empathy-new-account.png b/help/sv/figures/empathy-new-account.png
deleted file mode 100644
index c9641b27..00000000
--- a/help/sv/figures/empathy-new-account.png
+++ /dev/null
Binary files differ
diff --git a/help/sv/sv.po b/help/sv/sv.po
deleted file mode 100644
index 899b69fd..00000000
--- a/help/sv/sv.po
+++ /dev/null
@@ -1,859 +0,0 @@
-msgid ""
-msgstr ""
-"Project-Id-Version: empathy docs\n"
-"POT-Creation-Date: 2009-02-02 20:10+0000\n"
-"PO-Revision-Date: 2009-02-19 23: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"
-
-#. When image changes, this message will be marked fuzzy or untranslated for you.
-#. It doesn't matter what you translate it to: it's not used at all.
-#: C/empathy.xml:238(None)
-msgid "@@image: 'figures/empathy-main-window.png'; md5=38259a866f38ff1f754828e46d2b0e5c"
-msgstr "@@image: 'figures/empathy-main-window.png'; md5=38259a866f38ff1f754828e46d2b0e5c"
-
-#: C/empathy.xml:27(title)
-#| msgid "<application>Empathy</application> Manual V2.0"
-msgid "<application>Empathy</application> Manual V2.1"
-msgstr "Handbok för <application>Empathy</application> v2.1"
-
-#: C/empathy.xml:30(year)
-msgid "2008, 2009"
-msgstr "2008, 2009"
-
-#: C/empathy.xml:31(holder)
-#: C/empathy.xml:37(publishername)
-#: C/empathy.xml:48(orgname)
-#: C/empathy.xml:56(orgname)
-#: C/empathy.xml:87(para)
-#: C/empathy.xml:101(para)
-msgid "Ubuntu Documentation Project"
-msgstr "Ubuntus dokumentationsprojekt"
-
-#: 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 "Tillstånd att kopiera, distribuera och/eller modifiera detta dokument ges under villkoren i GNU Free Documentation License (GFDL), version 1.1 eller senare, utgivet av Free Software Foundation utan standardavsnitt och omslagstexter. En kopia av GFDL finns att hämta på denna <ulink type=\"help\" url=\"ghelp:fdl\">länk</ulink> eller i filen COPYING-DOCS som medföljer denna handbok."
-
-#: 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 "Denna handbok utgör en av flera GNOME-handböcker som distribueras under villkoren i GFDL. Om du vill distribuera denna handbok separat från övriga handböcker kan du göra detta genom att lägga till en kopia av licensavtalet i handboken enligt instruktionerna i avsnitt 6 i licensavtalet."
-
-#: 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 "Flera namn på produkter och tjänster är registrerade varumärken. I de fall dessa namn förekommer i GNOME-dokumentation - och medlemmarna i GNOME-dokumentationsprojektet är medvetna om dessa varumärken - är de skrivna med versaler eller med inledande versal."
-
-#: 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 "DOKUMENTET TILLHANDAHÅLLS I \"BEFINTLIGT SKICK\" UTAN NÅGRA SOM HELST GARANTIER, VARE SIG UTTRYCKLIGA ELLER UNDERFÖRSTÅDDA, INKLUSIVE, MEN INTE BEGRÄNSAT TILL, GARANTIER ATT DOKUMENTET ELLER EN MODIFIERAD VERSION AV DOKUMENTET INTE INNEHÅLLER NÅGRA FELAKTIGHETER, ÄR LÄMPLIGT FÖR ETT VISST ÄNDAMÅL ELLER INTE STRIDER MOT LAG. HELA RISKEN VAD GÄLLER KVALITET, EXAKTHET OCH UTFÖRANDE AV DOKUMENTET OCH MODIFIERADE VERSIONER AV DOKUMENTET LIGGER HELT OCH HÅLLET PÅ ANVÄNDAREN. OM ETT DOKUMENT ELLER EN MODIFIERAD VERSION AV ETT DOKUMENT SKULLE VISA SIG INNEHÅLLA FELAKTIGHETER I NÅGOT HÄNSEENDE ÄR DET DU (INTE DEN URSPRUNGLIGA SKRIBENTEN, FÖRFATTAREN ELLER NÅGON ANNAN MEDARBETARE) SOM FÅR STÅ FÖR ALLA EVENTUELLA KOSTNADER FÖR SERVICE, REPARATIONER ELLER KORRIGERINGAR. DENNA GARANTIFRISKRIVNING UTGÖR EN VÄSENTLIG DEL AV DETTA LICENSAVTAL. DETTA INNEBÄR ATT ALL ANVÄNDNING AV ETT DOKUMENT ELLER EN MODIFIERAD VERSION AV ETT DOKUMENT BEVILJAS ENDAST UNDER DENNA ANSVARSFRISKRIVNING; OCH"
-
-#: 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 "UNDER INGA OMSTÄNDIGHETER ELLER INOM RAMEN FÖR NÅGON LAGSTIFTNING, OAVSETT OM DET GÄLLER KRÄNKNING (INKLUSIVE VÅRDSLÖSHET), KONTRAKT ELLER DYLIKT, SKA FÖRFATTAREN, DEN URSPRUNGLIGA SKRIBENTEN ELLER ANNAN MEDARBETARE ELLER ÅTERFÖRSÄLJARE AV DOKUMENTET ELLER AV EN MODIFIERAD VERSION AV DOKUMENTET ELLER NÅGON LEVERANTÖR TILL NÅGON AV NÄMNDA PARTER STÄLLAS ANSVARIG GENTEMOT NÅGON FÖR NÅGRA DIREKTA, INDIREKTA, SÄRSKILDA ELLER OFÖRUTSEDDA SKADOR ELLER FÖLJDSKADOR AV NÅGOT SLAG, INKLUSIVE, MEN INTE BEGRÄNSAT TILL, SKADOR BETRÄFFANDE FÖRLORAD GOODWILL, HINDER I ARBETET, DATORHAVERI ELLER NÅGRA ANDRA TÄNKBARA SKADOR ELLER FÖRLUSTER SOM KAN UPPKOMMA PÅ GRUND AV ELLER RELATERAT TILL ANVÄNDNINGEN AV DOKUMENTET ELLER MODIFIERADE VERSIONER AV DOKUMENTET, ÄVEN OM PART SKA HA BLIVIT INFORMERAD OM MÖJLIGHETEN TILL SÅDANA SKADOR."
-
-#: 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 "DOKUMENTET OCH MODIFIERADE VERSIONER AV DOKUMENTET TILLHANDAHÅLLS UNDER VILLKOREN I GNU FREE DOCUMENTATION LICENSE ENDAST UNDER FÖLJANDE FÖRUTSÄTTNINGAR: <placeholder-1/>"
-
-#: C/empathy.xml:45(firstname)
-msgid "Milo"
-msgstr "Milo"
-
-#: C/empathy.xml:46(surname)
-msgid "Casagrande"
-msgstr "Casagrande"
-
-#: C/empathy.xml:49(email)
-msgid "milo@ubuntu.com"
-msgstr "milo@ubuntu.com"
-
-#: C/empathy.xml:53(firstname)
-msgid "Seth"
-msgstr "Seth"
-
-#: C/empathy.xml:54(surname)
-msgid "Dudenhofer"
-msgstr "Dudenhofer"
-
-#: C/empathy.xml:57(email)
-msgid "sdudenhofer@gmail.com"
-msgstr "sdudenhofer@gmail.com"
-
-#: C/empathy.xml:81(revnumber)
-#| msgid "Empathy Manual V2.0"
-msgid "Empathy Manual V2.1"
-msgstr "Handbok för Empathy v2.1"
-
-#: C/empathy.xml:82(date)
-msgid "January 2009"
-msgstr "Januari 2009"
-
-#: C/empathy.xml:84(para)
-#: C/empathy.xml:95(para)
-#| msgid "Milo Casagrande <email>milo_casagrande@yahoo.it</email>"
-msgid "Milo Casagrande <email>milo@ubuntu.com</email>"
-msgstr "Milo Casagrande <email>milo@ubuntu.com</email>"
-
-#: C/empathy.xml:92(revnumber)
-msgid "Empathy Manual V2.0"
-msgstr "Handbok för Empathy v2.0"
-
-#: C/empathy.xml:93(date)
-msgid "April 2008"
-msgstr "April 2008"
-
-#: C/empathy.xml:98(para)
-msgid "Seth Dudenhofer <email>sdudenhofer@gmail.com</email>"
-msgstr "Seth Dudenhofer <email>sdudenhofer@gmail.com</email>"
-
-#: C/empathy.xml:106(releaseinfo)
-#| msgid "This manual describes version 2.24 of Empathy."
-msgid "This manual describes version 2.26 of Empathy."
-msgstr "Denna handbok beskriver version 2.26 av Empathy."
-
-#: C/empathy.xml:110(title)
-msgid "Feedback"
-msgstr "Återkoppling"
-
-#: C/empathy.xml:111(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 "För att rapportera ett fel eller föreslå någonting angående programmet <application>Empathy</application> eller den här handboken, följ anvisningarna på <ulink url=\"ghelp:gnome-feedback\" type=\"help\">GNOME:s återkopplingssida</ulink>."
-
-#: C/empathy.xml:119(para)
-msgid "Empathy is an application for instant messaging."
-msgstr "Empathy är ett program för snabbmeddelanden."
-
-#: C/empathy.xml:127(primary)
-#: C/empathy.xml:0(application)
-msgid "Empathy"
-msgstr "Empathy"
-
-#: C/empathy.xml:130(primary)
-msgid "empathy"
-msgstr "empathy"
-
-#: C/empathy.xml:131(secondary)
-msgid "istant messaging"
-msgstr "snabbmeddelanden"
-
-#: C/empathy.xml:135(title)
-msgid "Introduction"
-msgstr "Introduktion"
-
-#: C/empathy.xml:136(para)
-msgid "<application>Empathy</application> is a multi-protocol instant messaging program for the GNOME Desktop. With <application>Empathy</application> you can keep in touch with all of your friends through lots of supported instant messaging services."
-msgstr "<application>Empathy</application> är en snabbmeddelandeklient för flera protokoll för GNOME-skrivbordet. Med <application>Empathy</application> kan du hålla kontakten med alla dina vänner genom många olika snabbmeddelandetjänster."
-
-#: C/empathy.xml:146(acronym)
-msgid "AIM"
-msgstr "AIM"
-
-#: C/empathy.xml:150(para)
-msgid "Google Talk"
-msgstr "Google Talk"
-
-#: C/empathy.xml:155(para)
-msgid "ICQ"
-msgstr "ICQ"
-
-#: C/empathy.xml:161(acronym)
-msgid "IRC"
-msgstr "IRC"
-
-#: C/empathy.xml:165(para)
-msgid "Jabber (or <acronym>XMPP</acronym>)"
-msgstr "Jabber (eller <acronym>XMPP</acronym>)"
-
-#: C/empathy.xml:171(acronym)
-msgid "MSN"
-msgstr "MSN"
-
-#: C/empathy.xml:175(para)
-#: C/empathy.xml:442(para)
-msgid "Salut"
-msgstr "Salut"
-
-#: C/empathy.xml:181(acronym)
-msgid "SIP"
-msgstr "SIP"
-
-#: C/empathy.xml:185(para)
-msgid "Yahoo"
-msgstr "Yahoo"
-
-#: C/empathy.xml:190(para)
-msgid "And many others..."
-msgstr ""
-
-#: C/empathy.xml:141(para)
-msgid "<application>Empathy</application> supports the following services: <placeholder-1/>"
-msgstr "<application>Empathy</application> har stöd för följande tjänster: <placeholder-1/>"
-
-#: C/empathy.xml:199(title)
-msgid "Getting Started"
-msgstr "Komma igång"
-
-#: C/empathy.xml:202(title)
-msgid "Starting Empathy"
-msgstr "Starta Empathy"
-
-#: C/empathy.xml:203(para)
-msgid "You can start <application>Empathy</application> in the following ways:"
-msgstr "Du kan starta <application>Empathy</application> på följande sätt:"
-
-#: C/empathy.xml:207(term)
-msgid "<guimenu>Applications</guimenu> menu"
-msgstr "<guimenu>Program</guimenu>-menyn"
-
-#: C/empathy.xml:209(para)
-msgid "Choose <menuchoice><guisubmenu>Internet</guisubmenu><guimenuitem>Empathy Instant Messenger</guimenuitem></menuchoice>."
-msgstr "Välj <menuchoice><guisubmenu>Internet</guisubmenu><guimenuitem>Snabbmeddelandeklienten Empathy</guimenuitem></menuchoice>."
-
-#: C/empathy.xml:218(term)
-msgid "Command line"
-msgstr "Kommandorad"
-
-#: C/empathy.xml:220(para)
-msgid "Type <command>empathy</command> and then press <keycap>Enter</keycap>."
-msgstr "Ange <command>empathy</command> och tryck sedan på <keycap>Enter</keycap>."
-
-#: C/empathy.xml:229(title)
-msgid "When You Start Empathy"
-msgstr "När du startar Empathy"
-
-#: C/empathy.xml:234(title)
-msgid "<application>Empathy</application> Main Window"
-msgstr "Huvudfönstret i <application>Empathy</application>"
-
-#: C/empathy.xml:241(phrase)
-msgid "Shows <placeholder-1/> main window. Contains the titlebar, the menubar, contact list, status icon and status arrow button list."
-msgstr "Visar <placeholder-1/> huvudfönstret. Innehåller titellisten, menyraden, kontaktlista, statusikon och knapplista för statuspil."
-
-#: C/empathy.xml:230(para)
-msgid "When you start <application>Empathy</application> the following window is shown. <placeholder-1/>"
-msgstr "När du startar <application>Empathy</application> visas följande fönster. <placeholder-1/>"
-
-#: C/empathy.xml:256(title)
-msgid "<application>Empathy</application> Main Components"
-msgstr "Huvudkomponenter i <application>Empathy</application>"
-
-#: C/empathy.xml:263(para)
-msgid "Component"
-msgstr "Komponent"
-
-#: C/empathy.xml:266(para)
-msgid "Description"
-msgstr "Beskrivning"
-
-#: C/empathy.xml:273(para)
-msgid "Menubar"
-msgstr "Menyrad"
-
-#: C/empathy.xml:276(para)
-msgid "Contains menus used to perform actions in <application>Empathy</application>."
-msgstr "Innehåller menyer som används för att genomföra åtgärder i <application>Empathy</application>."
-
-#: C/empathy.xml:283(para)
-msgid "Status Drop-Down List"
-msgstr "Rullgardinslista för status"
-
-#: C/empathy.xml:286(para)
-#, fuzzy
-#| msgid "Allows to update the user's status."
-msgid "Allows to update the status."
-msgstr "Tillåter uppdatering av användarens status."
-
-#: C/empathy.xml:293(para)
-msgid "Account Button"
-msgstr "Kontoknapp"
-
-#: C/empathy.xml:296(para)
-msgid "Opens the <guilabel>Accounts</guilabel> dialog."
-msgstr "Öppnar dialogrutan <guilabel>Konton</guilabel>."
-
-#: C/empathy.xml:303(para)
-msgid "Contact List"
-msgstr "Kontaktlista"
-
-#: C/empathy.xml:306(para)
-msgid "Shows all the available contacts and their associated status."
-msgstr "Visar alla tillgängliga kontakter och deras status."
-
-#: C/empathy.xml:252(para)
-msgid "<xref linkend=\"empathy-TBL-1\"/> describes the components of <application>Empathy</application>'s main 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 "<xref linkend=\"empathy-TBL-1\"/> beskriver komponenterna i <application>Empathy</application>s huvudfönster. <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>"
-
-#: C/empathy.xml:320(title)
-msgid "Accounts"
-msgstr "Konton"
-
-#: C/empathy.xml:321(para)
-msgid "To use <application>Empathy</application> you need at least one account of the supported services."
-msgstr "Du behöver åtminstone ett konto från någon tjänst som stöds för att använda <application>Empathy</application>."
-
-#: C/empathy.xml:324(para)
-msgid "If you don't already have an account and you don't have your <emphasis>user name</emphasis> and <emphasis>password</emphasis>, you need to register a new account (see <xref linkend=\"empathy-register-account\"/>)."
-msgstr "Om du inte redan har ett konto och du inte har ditt <emphasis>användarnamn</emphasis> och <emphasis>lösenord</emphasis> så behöver du registrera ett nytt konto (se <xref linkend=\"empathy-register-account\"/>)."
-
-#: C/empathy.xml:329(para)
-#, fuzzy
-#| msgid ""
-#| "In order to talk with other users (called <emphasis>contatcs</emphasis>), "
-#| "you need to use the same service they are using. If, for example, one "
-#| "contact is using the <emphasis role=\"strong\">Jabber</emphasis> service, "
-#| "you need to have an account registerd with that service."
-msgid "In order to talk with other users, also called <emphasis>contacts</emphasis>, you need to use the same service they are using. If, for example, one contact is using the <emphasis role=\"strong\">Jabber</emphasis> service, you need to have an account registered with that service."
-msgstr "För att kunna prata med andra användare (kallade <emphasis>kontakter</emphasis>) så behöver du använda samma tjänst som de användare. Om, till exempel, en kontakt använder tjänster <emphasis role=\"strong\">Jabber</emphasis> så behöver du ha ett konto registrerat hos den tjänsten."
-
-#: C/empathy.xml:336(para)
-msgid "<application>Empathy</application> can handle as many accounts on any supported services as you want and you can have them all open at the same time."
-msgstr "<application>Empathy</application> kan hantera så många konton på alla tjänster som stöds som du vill och du kan ha alla öppnade samtidigt."
-
-#: C/empathy.xml:342(title)
-msgid "Registering an Account"
-msgstr "Registrera ett konto"
-
-#: C/empathy.xml:343(para)
-msgid "You can freely register an account on any of the following services. Follow the instructions reported on each website on how to register your new account. At the end of the registration process you should have a <emphasis>user name</emphasis> (or an <emphasis>account ID</emphasis>) and a <emphasis>password</emphasis> that you will use to create the account in <application>Empathy</application>."
-msgstr "Du kan helt gratis registrera ett konto på någon av följande tjänster. Följ instruktionerna på varje webbplats för information om hur man registrerar ett nytt konto. Vid slutet av registreringsprocessen så kommer du att ha ett <emphasis>användarnamn</emphasis> (eller ett <emphasis>konto-ID</emphasis>) och ett <emphasis>lösenord</emphasis> som du kommer att använda för att skapa kontot i <application>Empathy</application>."
-
-#. Translators: try to find a localized version of the
-#. registration service website
-#: C/empathy.xml:361(para)
-msgid "The <ulink type=\"http\" url=\"http://dashboard.aim.com/aim\">AIM</ulink> service."
-msgstr "Tjänsten <ulink type=\"http\" url=\"http://dashboard.aim.com/aim\">AIM</ulink>."
-
-#. Translators: try to find a localized version of the
-#. registration service website
-#: C/empathy.xml:368(para)
-msgid "The <ulink type=\"http\" url=\"http://www.google.com/talk/\">Google Talk</ulink> service."
-msgstr "Tjänsten <ulink type=\"http\" url=\"http://www.google.com/talk/\">Google Talk</ulink>."
-
-#. Translators: try to find a localized version of the
-#. registration service website
-#: C/empathy.xml:376(para)
-msgid "The <ulink type=\"http\" url=\"https://www.icq.com/register/\">ICQ</ulink> service."
-msgstr "Tjänsten <ulink type=\"http\" url=\"https://www.icq.com/register/\">ICQ</ulink>."
-
-#. Translators: try to find a localized version of the
-#. registration service website
-#: C/empathy.xml:383(para)
-msgid "The <ulink type=\"http\" url=\"https://accountservices.passport.net\">MSN</ulink> service."
-msgstr "Tjänsten <ulink type=\"http\" url=\"https://accountservices.passport.net\">MSN</ulink>."
-
-#. Translators: try to find a localized version of the
-#. registration service website
-#: C/empathy.xml:390(para)
-msgid "The <ulink type=\"http\" url=\"https://login.yahoo.com/config/login\">Yahoo</ulink> service."
-msgstr "Tjänsten <ulink type=\"http\" url=\"https://login.yahoo.com/config/login\">Yahoo</ulink>."
-
-#: C/empathy.xml:352(para)
-msgid "Click on the name of the service to visit its website: <placeholder-1/>"
-msgstr "Klicka på namnet för tjänsten för att besöka dess webbplats: <placeholder-1/>"
-
-#: C/empathy.xml:396(para)
-msgid "For registering a <acronym>SIP</acronym> account, you can use one of the following service:"
-msgstr "Du kan använda någon av följande tjänster för att registrera ett <acronym>SIP</acronym>-konto:"
-
-#. Translators: try to find a localized version of the
-#. registration service website
-#: C/empathy.xml:405(para)
-#, fuzzy
-#| msgid ""
-#| "The <ulink type=\"http\" url=\"https://www.icq.com/register/\">ICQ</"
-#| "ulink> service."
-msgid "The <ulink type=\"http\" url=\"https://www.ekiga.net/index.php?page=register\">Ekiga</ulink> service."
-msgstr "Tjänsten <ulink type=\"http\" url=\"https://www.icq.com/register/\">ICQ</ulink>."
-
-#. Translators: try to find a localized version of the
-#. registration service website
-#: C/empathy.xml:412(para)
-msgid "The <ulink type=\"http\" url=\"http://account2.freeworlddialup.com/index.php?section_id=94\"><acronym>FWD</acronym></ulink> (Free World Dialup) service."
-msgstr "Tjänsten <ulink type=\"http\" url=\"http://account2.freeworlddialup.com/index.php?section_id=94\"><acronym>FWD</acronym></ulink> (Free World Dialup)."
-
-#. Translators: try to find a localized version of the
-#. registration service website
-#: C/empathy.xml:420(para)
-msgid "The <ulink type=\"http\" url=\"https://signup.sipphone.com/new-users/app?class=NewUser;proc=start\">Sipphone</ulink> service."
-msgstr "Tjänsten <ulink type=\"http\" url=\"https://signup.sipphone.com/new-users/app?class=NewUser;proc=start\">Sipphone</ulink>."
-
-#: C/empathy.xml:426(para)
-msgid "For registering a <emphasis role=\"strong\">Jabber</emphasis> account, you can use the automatic account creation of <application>Empathy</application>. Not all Jabber service providers support the automatic creation of accounts, one service provider known to work with <application>Empathy</application> is <ulink type=\"http\" url=\"http://www.jabber.org/web/Jabber.org\">jabber.org</ulink>."
-msgstr ""
-
-#: C/empathy.xml:434(para)
-#, fuzzy
-#| msgid ""
-#| "For registering a <acronym>SIP</acronym> account, you can use one of the "
-#| "following service:"
-msgid "If you already have a <emphasis role=\"strong\">Jabber</emphasis> account, you can use one of the following services:"
-msgstr "Du kan använda någon av följande tjänster för att registrera ett <acronym>SIP</acronym>-konto:"
-
-#: C/empathy.xml:451(title)
-#, fuzzy
-#| msgid ""
-#| "Contains menus used to perform actions in <application>Empathy</"
-#| "application>."
-msgid "Adding your Account to <application>Empathy</application>"
-msgstr "Innehåller menyer som används för att genomföra åtgärder i <application>Empathy</application>."
-
-#: C/empathy.xml:456(para)
-#: C/empathy.xml:534(para)
-#: C/empathy.xml:586(para)
-#: C/empathy.xml:619(para)
-#: C/empathy.xml:649(para)
-#: C/empathy.xml:672(para)
-#, fuzzy
-#| msgid ""
-#| "From the <link linkend=\"empathy-FIG-mainwindow\">main window </link> "
-#| "(<guilabel>Contact List</guilabel>) click on the account button to open "
-#| "the <guilabel>Accounts</guilabel> dialog."
-msgid "From the <link linkend=\"empathy-FIG-mainwindow\">main window </link> (<guilabel>Contact List</guilabel>) click on the account button or press <keycap>F4</keycap> to open the <guilabel>Accounts</guilabel> dialog."
-msgstr "Klicka på kontoknappen för att öppna dialogrutan <guilabel>Konton</guilabel> från <link linkend=\"empathy-FIG-mainwindow\">huvudfönstret </link> (<guilabel>Kontaktlista</guilabel>) "
-
-#: C/empathy.xml:468(para)
-#: C/empathy.xml:485(para)
-#, fuzzy
-#| msgid ""
-#| "From the <guilabel>Type</guilabel> drop-down list choose the service you "
-#| "wish to create an account for, then click on the <guibutton>Create</"
-#| "guibutton> button."
-msgid "From the <guilabel>Type</guilabel> drop-down list choose the service you wish to add an account for, then click on the <guibutton>Create</guibutton> button."
-msgstr "Välj den tjänst som du vill skapa ett konto för från rullgardinslistan <guilabel>Typ</guilabel>. Klicka sedan på knappen <guibutton>Skapa</guibutton>."
-
-#: C/empathy.xml:464(para)
-#, fuzzy
-#| msgid ""
-#| "When you start <application>Empathy</application> the following window is "
-#| "shown. <placeholder-1/>"
-msgid "If it is the first time you launch <application>Empathy</application>: <placeholder-1/>"
-msgstr "När du startar <application>Empathy</application> visas följande fönster. <placeholder-1/>"
-
-#: C/empathy.xml:480(para)
-#, fuzzy
-#| msgid "Click on the <guibutton>Add</guibutton> button."
-msgid "Click on the <guilabel>Add</guilabel> button."
-msgstr "Klicka på knappen <guibutton>Lägg till</guibutton>."
-
-#: C/empathy.xml:476(para)
-msgid "Otherwise: <placeholder-1/>"
-msgstr ""
-
-#: C/empathy.xml:495(para)
-#, fuzzy
-#| msgid ""
-#| "If you don't already have an account and you don't have your "
-#| "<emphasis>user name</emphasis> and <emphasis>password</emphasis>, you "
-#| "need to register a new account (see <xref linkend=\"empathy-register-"
-#| "account\"/>)."
-msgid "Fill the required fields with your <emphasis>user name</emphasis> and <emphasis>password</emphasis>. Optionally, you can modify some advanced options. For more information, see <xref linkend=\"empathy-advanced-options\"/>."
-msgstr "Om du inte redan har ett konto och du inte har ditt <emphasis>användarnamn</emphasis> och <emphasis>lösenord</emphasis> så behöver du registrera ett nytt konto (se <xref linkend=\"empathy-register-account\"/>)."
-
-#: C/empathy.xml:504(para)
-#: C/empathy.xml:567(para)
-#, fuzzy
-#| msgid ""
-#| "To enable the new account, select the <guilabel>Enabled</guilabel> check-"
-#| "box next to the name of the account."
-msgid "To enable the new account, select the <guilabel>Enabled</guilabel> check-box next to the name of the account in the box on the left."
-msgstr "Välj kryssrutan <guilabel>Aktiverad</guilabel> bredvid namnet för kontot för att aktivera det nya kontot."
-
-#: C/empathy.xml:452(para)
-#, fuzzy
-#| msgid ""
-#| "When you start <application>Empathy</application> the following window is "
-#| "shown. <placeholder-1/>"
-msgid "To add your account to <application>Empathy</application>, proceed as follows: <placeholder-1/>"
-msgstr "När du startar <application>Empathy</application> visas följande fönster. <placeholder-1/>"
-
-#: C/empathy.xml:514(title)
-#| msgid "Creating an Account"
-msgid "Importing Accounts"
-msgstr "Importera konton"
-
-#: C/empathy.xml:515(para)
-msgid "If you use another instant messaging program, you can import the accounts from that program into <application>Empathy</application>"
-msgstr ""
-
-#: C/empathy.xml:521(para)
-msgid "At the moment <application>Empathy</application> can import the accounts only from the instant messaging program <application>Pidgin</application>. For more information about <application>Pidgin</application>, see the <ulink type=\"http\" url=\"http://www.pidgin.im/\">Pidgin website</ulink>."
-msgstr ""
-
-#: C/empathy.xml:542(para)
-msgid "Click on the <guibutton>Import Accounts...</guibutton> button to open the <guilabel>Import Accounts</guilabel> dialog."
-msgstr ""
-
-#: C/empathy.xml:549(para)
-#, fuzzy
-#| msgid ""
-#| "Select the account you wish to disable in the box on the left of the "
-#| "dialog and deselect the <guilabel>Enabled</guilabel> check-box."
-msgid "Select the accounts you would like to import by clicking on the <guilabel>Import</guilabel> check-box."
-msgstr "Välj det konto som du vill inaktivera i rutan till vänster i dialogrutan och avmarkera kryssrutan <guilabel>Aktiverad</guilabel>."
-
-#: C/empathy.xml:555(para)
-msgid "When you have selected all the desired accounts, click <guibutton>OK</guibutton> to import them. If you don't want to import the accounts, click <guibutton>Cancel</guibutton>."
-msgstr ""
-
-#: C/empathy.xml:563(para)
-#, fuzzy
-#| msgid ""
-#| "When you start <application>Empathy</application> the following window is "
-#| "shown. <placeholder-1/>"
-msgid "When you import a new account into <application>Empathy</application>, it will not be enabled by default."
-msgstr "När du startar <application>Empathy</application> visas följande fönster. <placeholder-1/>"
-
-#: C/empathy.xml:530(para)
-#, fuzzy
-#| msgid ""
-#| "When you start <application>Empathy</application> the following window is "
-#| "shown. <placeholder-1/>"
-msgid "To import the accounts into <application>Empathy</application>, proceed as follows: <placeholder-1/>"
-msgstr "När du startar <application>Empathy</application> visas följande fönster. <placeholder-1/>"
-
-#: C/empathy.xml:579(title)
-#| msgid "Creating an Account"
-msgid "Editing an Account"
-msgstr "Redigera ett konto"
-
-#: C/empathy.xml:594(para)
-#, fuzzy
-#| msgid ""
-#| "Select the account you wish to disable in the box on the left of the "
-#| "dialog."
-msgid "Select the account you wish to edit in the box on the left."
-msgstr "Välj det konto som du vill inaktivera i rutan till vänster i dialogrutan."
-
-#: C/empathy.xml:600(para)
-msgid "Modify the desired data."
-msgstr ""
-
-#: C/empathy.xml:580(para)
-msgid "To edit one of your accounts, i.e. to change the <emphasis>password</emphasis> or your <emphasis>user name</emphasis>, proceed as follows: <placeholder-1/>"
-msgstr ""
-
-#: C/empathy.xml:608(para)
-msgid "Based on the type of the account, it is possibile to edit different settings."
-msgstr ""
-
-#: C/empathy.xml:627(para)
-#, fuzzy
-#| msgid ""
-#| "Select the account you wish to disable in the box on the left of the "
-#| "dialog."
-msgid "Select the account you wish to edit in the box on the left and double-click on it's name."
-msgstr "Välj det konto som du vill inaktivera i rutan till vänster i dialogrutan."
-
-#: C/empathy.xml:633(para)
-msgid "Change the name of the account as you desire."
-msgstr ""
-
-#: C/empathy.xml:614(para)
-#, fuzzy
-#| msgid ""
-#| "When you start <application>Empathy</application> the following window is "
-#| "shown. <placeholder-1/>"
-msgid "To modify the identifier of an account, how <application>Empathy</application> identifies an account, proceed as follows: <placeholder-1/>"
-msgstr "När du startar <application>Empathy</application> visas följande fönster. <placeholder-1/>"
-
-#: C/empathy.xml:642(title)
-msgid "Disabling and Removing an Account"
-msgstr "Inaktivera och ta bort ett konto"
-
-#: C/empathy.xml:643(para)
-#| msgid "To disable an account, proceed as follow:"
-msgid "To disable an account, proceed as follows:"
-msgstr "Gör följande för att inaktivera ett konto:"
-
-#: C/empathy.xml:658(para)
-msgid "Select the account you wish to disable in the box on the left of the dialog and deselect the <guilabel>Enabled</guilabel> check-box."
-msgstr "Välj det konto som du vill inaktivera i rutan till vänster i dialogrutan och avmarkera kryssrutan <guilabel>Aktiverad</guilabel>."
-
-#: C/empathy.xml:666(para)
-#| msgid "To remove an account, proceed as follow:"
-msgid "To remove an account, proceed as follows:"
-msgstr "Gör följande för att ta bort ett konto:"
-
-#: C/empathy.xml:681(para)
-msgid "Select the account you wish to disable in the box on the left of the dialog."
-msgstr "Välj det konto som du vill inaktivera i rutan till vänster i dialogrutan."
-
-#: C/empathy.xml:687(para)
-msgid "Click on the <guibutton>Remove</guibutton> button."
-msgstr "Klicka på knappen <guibutton>Ta bort</guibutton>."
-
-#: C/empathy.xml:692(para)
-msgid "A dialog will be shown asking for confirmation. Click on the <guibutton>Remove</guibutton> button to remove the account."
-msgstr "En dialogruta kommer att visas som frågar efter bekräftelse. Klicka på knappen <guibutton>Ta bort</guibutton> för att ta bort kontot."
-
-#: C/empathy.xml:702(title)
-msgid "Editing Personal Information"
-msgstr "Redigera personlig information"
-
-#: C/empathy.xml:703(para)
-msgid "To change your personal information, your alias and your icon (the image that other contacts will see of you), for each of your accounts, proceed as follows:"
-msgstr ""
-
-#: C/empathy.xml:711(para)
-#, fuzzy
-#| msgid ""
-#| "From the <link linkend=\"empathy-FIG-mainwindow\">main window</link> "
-#| "choose <menuchoice><guimenu>Chat</guimenu><guimenuitem>Add Contact...</"
-#| "guimenuitem></menuchoice>. The <guilabel>New Contact</guilabel> dialog "
-#| "will be shown."
-msgid "From the <link linkend=\"empathy-FIG-mainwindow\">main window</link>, select <menuchoice><guimenu>Edit</guimenu><guimenuitem>Personal Information</guimenuitem></menuchoice>."
-msgstr "Välj <menuchoice><guimenu>Chatt</guimenu><guimenuitem>Lägg till kontakt...</guimenuitem></menuchoice> från <link linkend=\"empathy-FIG-mainwindow\">huvudfönstret</link>. Dialogrutan <guilabel>Ny kontakt</guilabel> kommer att visas."
-
-#: C/empathy.xml:720(para)
-#, fuzzy
-#| msgid ""
-#| "From the <guilabel>Account</guilabel> drop-down list, choose the service "
-#| "used by the contact you are adding."
-msgid "From the <guilabel>Account</guilabel> drop-down list, choose the account you want to edit."
-msgstr "Välj den tjänst som används av kontakten som du lägger till från rullgardinslistan <guilabel>Konto</guilabel>."
-
-#: C/empathy.xml:726(para)
-#, fuzzy
-#| msgid ""
-#| "In the <guilabel>Alias</guilabel> text-box type the name you want to give "
-#| "at the the new contact."
-msgid "In the <guilabel>Alias</guilabel> text box, write your new alias."
-msgstr "Ange namnet som du vill ge den nya kontakten i textrutan <guilabel>Alias</guilabel>."
-
-#: C/empathy.xml:732(para)
-msgid "To change your icon, click on the person-looking button and choose an image file."
-msgstr ""
-
-#: C/empathy.xml:738(para)
-#: C/empathy.xml:919(para)
-#: C/empathy.xml:953(para)
-#| msgid "Click on the <guibutton>Remove</guibutton> button."
-msgid "When done, click <guibutton>Close</guibutton>."
-msgstr "Klicka på <guibutton>Stäng</guibutton> när du är färdig."
-
-#: C/empathy.xml:746(para)
-msgid "An <emphasis>alias</emphasis> is an alternative way you can identify yourself. You can use your real name or your nickname."
-msgstr ""
-
-#: C/empathy.xml:756(title)
-msgid "Advanced Options"
-msgstr "Avancerade alternativ"
-
-#: C/empathy.xml:757(para)
-msgid "TODO"
-msgstr ""
-
-#: C/empathy.xml:765(title)
-msgid "Contacts and Groups"
-msgstr "Kontakter och grupper"
-
-#: C/empathy.xml:766(para)
-msgid "All the contacts are handled within <application>Empathy</application>'s <link linkend=\"empathy-FIG-mainwindow\">main window</link>."
-msgstr "Alla kontakter hanteras i <application>Empathy</application>s <link linkend=\"empathy-FIG-mainwindow\">huvudfönster</link>."
-
-#: C/empathy.xml:770(para)
-msgid "You can add or remove a contact or you can edit the information of a particular contact. It is also possibile to arrange contacts in groups. You can have a group for your work contacts, one for you family contacts, and so on."
-msgstr ""
-
-#: C/empathy.xml:777(title)
-#| msgid "Removing a Contact"
-msgid "Adding and Removing a Contact"
-msgstr "Lägg till och ta bort en kontakt"
-
-#: C/empathy.xml:778(para)
-#| msgid "To add a new contact, proceed as follow:"
-msgid "To add a new contact, proceed as follows:"
-msgstr "Gör följande för att lägga till en ny kontakt:"
-
-#: C/empathy.xml:784(para)
-msgid "From the <link linkend=\"empathy-FIG-mainwindow\">main window</link> choose <menuchoice><guimenu>Chat</guimenu><guimenuitem>Add Contact...</guimenuitem></menuchoice>. The <guilabel>New Contact</guilabel> dialog will be shown."
-msgstr "Välj <menuchoice><guimenu>Chatt</guimenu><guimenuitem>Lägg till kontakt...</guimenuitem></menuchoice> från <link linkend=\"empathy-FIG-mainwindow\">huvudfönstret</link>. Dialogrutan <guilabel>Ny kontakt</guilabel> kommer att visas."
-
-#: C/empathy.xml:794(para)
-msgid "From the <guilabel>Account</guilabel> drop-down list, choose the service used by the contact you are adding."
-msgstr "Välj den tjänst som används av kontakten som du lägger till från rullgardinslistan <guilabel>Konto</guilabel>."
-
-#: C/empathy.xml:800(para)
-#, fuzzy
-#| msgid ""
-#| "In the <guilabel>Identifier</guilabel> text-box type the "
-#| "<emphasis>address</emphasis> of the contact in the form of "
-#| "<userinput><replaceable>user name</replaceable>@<replaceable>service\n"
-#| "\t domain</replaceable></userinput>."
-msgid ""
-"In the <guilabel>Identifier</guilabel> text box type the <emphasis>address</emphasis> of the contact in the form of <userinput><replaceable>user name</replaceable>@<replaceable>service\n"
-"\t domain</replaceable></userinput>."
-msgstr ""
-"Ange <emphasis>adressen</emphasis> för kontakten i formatet <userinput><replaceable>användarnamn</replaceable>@<replaceable>tjänst\n"
-"\t domän</replaceable></userinput> i textrutan <guilabel>Identifierare</guilabel> ."
-
-#: C/empathy.xml:809(para)
-#, fuzzy
-#| msgid ""
-#| "In the <guilabel>Alias</guilabel> text-box type the name you want to give "
-#| "at the the new contact."
-msgid "In the <guilabel>Alias</guilabel> text box type the name you want to give at the the new contact."
-msgstr "Ange namnet som du vill ge den nya kontakten i textrutan <guilabel>Alias</guilabel>."
-
-#: C/empathy.xml:815(para)
-msgid "Click on <guibutton>Add</guibutton> to add the new contact."
-msgstr "Klicka på <guibutton>Lägg till</guibutton> för att lägga till den nya kontakten."
-
-#: C/empathy.xml:821(para)
-#| msgid "To remove a contact, proceed as follow:"
-msgid "To remove a contact, proceed as follows:"
-msgstr "Gör följande för att ta bort en kontakt:"
-
-#: C/empathy.xml:827(para)
-msgid "From the <link linkend=\"empathy-FIG-mainwindow\">main window</link>, select the contact you would like to remove and right-click on it."
-msgstr "Markera den kontakt som du vill ta bort och högerklicka på den från <link linkend=\"empathy-FIG-mainwindow\">huvudfönstret</link>."
-
-#: C/empathy.xml:834(para)
-msgid "From the popup menu, choose <guilabel>Remove</guilabel> to remove the contact."
-msgstr ""
-
-#: C/empathy.xml:843(para)
-#: C/empathy.xml:879(para)
-msgid "An <emphasis>alias</emphasis> is an alternative way you can identify that particular contact. You can use the real name or the nickname of that person."
-msgstr ""
-
-#: C/empathy.xml:852(title)
-#| msgid "Adding a Contact"
-msgid "Editing a Contact"
-msgstr "Redigera en kontakt"
-
-#: C/empathy.xml:853(para)
-#| msgid "To remove a contact, proceed as follow:"
-msgid "To edit a contact, proceed as follows:"
-msgstr "Gör följande för att redigera en kontakt:"
-
-#: C/empathy.xml:859(para)
-#: C/empathy.xml:901(para)
-#, fuzzy
-#| msgid ""
-#| "From the <link linkend=\"empathy-FIG-mainwindow\">main window</link> "
-#| "choose <menuchoice><guimenu>Chat</guimenu><guimenuitem>Add Contact...</"
-#| "guimenuitem></menuchoice>. The <guilabel>New Contact</guilabel> dialog "
-#| "will be shown."
-msgid "From the <link linkend=\"empathy-FIG-mainwindow\">main window</link>, select the contact you would like to modify and choose <menuchoice><guimenu>Edit</guimenu><guisubmenu>Account</guisubmenu><guimenuitem>Modify</guimenuitem></menuchoice>, or right-click on it and choose <guilabel>Modify</guilabel>."
-msgstr "Välj <menuchoice><guimenu>Chatt</guimenu><guimenuitem>Lägg till kontakt...</guimenuitem></menuchoice> från <link linkend=\"empathy-FIG-mainwindow\">huvudfönstret</link>. Dialogrutan <guilabel>Ny kontakt</guilabel> kommer att visas."
-
-#: C/empathy.xml:872(para)
-msgid "From the <guilabel>Edit Contact Information</guilabel> dialog, you can modify the <emphasis>alias</emphasis> and the <emphasis>group</emphasis> of the contact."
-msgstr ""
-
-#: C/empathy.xml:886(para)
-msgid "For more information about groups, see <xref linkend=\"empathy-add-contact-group\"/> and <xref linkend=\"empathy-add-group\"/>."
-msgstr ""
-
-#: C/empathy.xml:894(title)
-#| msgid "Adding a Contact"
-msgid "Adding a Contact to a Group"
-msgstr "Lägg till en kontakt till en grupp"
-
-#: C/empathy.xml:895(para)
-#, fuzzy
-#| msgid "To add a new contact, proceed as follow:"
-msgid "To add a contact to one or more groups, proceed as follows:"
-msgstr "Gör följande för att lägga till en ny kontakt:"
-
-#: C/empathy.xml:913(para)
-#, fuzzy
-#| msgid ""
-#| "In the <guilabel>Alias</guilabel> text-box type the name you want to give "
-#| "at the the new contact."
-msgid "From the <guilabel>Groups</guilabel> section, select the group, or groups, you want to add the contact to."
-msgstr "Ange namnet som du vill ge den nya kontakten i textrutan <guilabel>Alias</guilabel>."
-
-#: C/empathy.xml:928(title)
-msgid "Adding a New Group"
-msgstr "Lägg till en ny grupp"
-
-#: C/empathy.xml:929(para)
-#| msgid "To add a new contact, proceed as follow:"
-msgid "To add a new group, proceed as follows:"
-msgstr "Gör följande för att lägga till en ny grupp:"
-
-#: C/empathy.xml:935(para)
-#, fuzzy
-#| msgid ""
-#| "From the <link linkend=\"empathy-FIG-mainwindow\">main window</link> "
-#| "choose <menuchoice><guimenu>Chat</guimenu><guimenuitem>Add Contact...</"
-#| "guimenuitem></menuchoice>. The <guilabel>New Contact</guilabel> dialog "
-#| "will be shown."
-msgid "From the <link linkend=\"empathy-FIG-mainwindow\">main window</link>, select one contact and choose <menuchoice><guimenu>Edit</guimenu><guisubmenu>Account</guisubmenu><guimenuitem>Modify</guimenuitem></menuchoice>, or right-click on it and choose <guilabel>Modify</guilabel>."
-msgstr "Välj <menuchoice><guimenu>Chatt</guimenu><guimenuitem>Lägg till kontakt...</guimenuitem></menuchoice> från <link linkend=\"empathy-FIG-mainwindow\">huvudfönstret</link>. Dialogrutan <guilabel>Ny kontakt</guilabel> kommer att visas."
-
-#: C/empathy.xml:946(para)
-#, fuzzy
-#| msgid ""
-#| "From the <guilabel>Type</guilabel> drop-down list choose the service you "
-#| "wish to create an account for, then click on the <guibutton>Create</"
-#| "guibutton> button."
-msgid "In the <guilabel>Groups</guilabel> section, write the name of the group you want to add and then click on <guibutton>Add Group</guibutton>."
-msgstr "Välj den tjänst som du vill skapa ett konto för från rullgardinslistan <guilabel>Typ</guilabel>. Klicka sedan på knappen <guibutton>Skapa</guibutton>."
-
-#. Put one translator per line, in the form of NAME <EMAIL>, YEAR1, YEAR2.
-#: C/empathy.xml:0(None)
-msgid "translator-credits"
-msgstr "Daniel Nylander <po@danielnylander.se>, 2008, 2009"
-
-#~ msgid ""
-#~ "@@image: 'figures/empathy-new-account.png'; "
-#~ "md5=6c1e0d8c709125d387e975e5738b8c0f"
-#~ msgstr ""
-#~ "@@image: 'figures/empathy-new-account.png'; "
-#~ "md5=6c1e0d8c709125d387e975e5738b8c0f"
-#~ msgid "2008"
-#~ msgstr "2008"
-#~ msgid "milo_casagrande@yahoo.it"
-#~ msgstr "milo_casagrande@yahoo.it"
-#~ msgid "Jabber"
-#~ msgstr "Jabber"
-#~ msgid "When You Start Empathy for the First Time"
-#~ msgstr "När du startar Empathy för första gången"
-#~ msgid "<application>Empathy</application> Accounts Dialog"
-#~ msgstr "Kontodialogrutan i <application>Empathy</application>"
-#~ msgid "Shows <placeholder-1/> account creation dialog."
-#~ msgstr "Visar <placeholder-1/> kontoskapandedialogen."
-#~ msgid ""
-#~ "When you start <application>Empathy</application> for the first time and "
-#~ "you don't have configured any account yet, the following dialog is shown. "
-#~ "<placeholder-1/>"
-#~ msgstr ""
-#~ "När du startar <application>Empathy</application> för första gången och "
-#~ "du inte har konfigurerats några konton än så kommer följande dialogruta "
-#~ "att visas. <placeholder-1/>"
-#~ msgid ""
-#~ "From here, you can configure and create your accounts. See <xref linkend="
-#~ "\"empathy-accounts\"/> for more information."
-#~ msgstr ""
-#~ "Här du kan konfigurera och skapa dina konton. Se <xref linkend=\"empathy-"
-#~ "accounts\"/> för mer information."
-#~ msgid ""
-#~ "The <ulink type=\"http\" url=\"http://www.ekiga.net/user/reg/index.php?"
-#~ "phplib_Session=c1d85267756241f8190e5fc21b029a62\">Ekiga</ulink> service."
-#~ msgstr ""
-#~ "Tjänsten <ulink type=\"http\" url=\"http://www.ekiga.net/user/reg/index."
-#~ "php?phplib_Session=c1d85267756241f8190e5fc21b029a62\">Ekiga</ulink>"
-#~ msgid ""
-#~ "You can use one of the following services if you already have a <emphasis "
-#~ "role=\"strong\">Jabber</emphasis> account:"
-#~ msgstr ""
-#~ "Du kan använda en av följande tjänster om du redan har ett <emphasis role="
-#~ "\"strong\">Jabber</emphasis>-konto:"
-#~ msgid ""
-#~ "Fill the required fields with your <emphasis>user name</emphasis> and "
-#~ "<emphasis>password</emphasis>."
-#~ msgstr ""
-#~ "Fyll i de nödvändiga fälten med ditt <emphasis>användarnamn</emphasis> "
-#~ "och <emphasis>lösenord</emphasis>."
-#~ msgid "To create an account, proceed as follow: <placeholder-1/>"
-#~ msgstr "Gör följande för att skapa ett konto: <placeholder-1/>"
-#~ msgid "Contacts"
-#~ msgstr "Kontakter"
-#~ msgid "Modifying a Contact"
-#~ msgstr "Ändra en kontakt"
-
diff --git a/help/te/te.po b/help/te/te.po
deleted file mode 100644
index c164460e..00000000
--- a/help/te/te.po
+++ /dev/null
@@ -1,2757 +0,0 @@
-# Telugu translation for empathy.
-# Copyright (C) 2011, 2012 Swecha Telugu Localisation Team <localization@swecha.net>
-# This file is distributed under the same license as the empathy package.
-# Bhuvan Krishna <bhuvan@swecha.net>, 2012.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: empathy master\n"
-"POT-Creation-Date: 2012-03-25 08:28+0000\n"
-"PO-Revision-Date: 2012-03-25 14:52+0530\n"
-"Last-Translator: Bhuvan Krishna <bhuvan@swecha.net>\n"
-"Language-Team: Telugu <indlinux-telugu@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=2; plural=(n!=1);\n"
-
-#. Put one translator per line, in the form NAME <EMAIL>, YEAR1, YEAR2
-msgctxt "_"
-msgid "translator-credits"
-msgstr "అనువాదకుల-పరపతులు"
-
-#. This is a reference to an external file such as an image or video. When
-#. the file changes, the md5 hash will change to let you know you need to
-#. update your localized copy. The msgstr is not used at all. Set it to
-#. whatever you like once you have updated your copy of the file.
-#.
-#. This is a reference to an external file such as an image or video. When
-#. the file changes, the md5 hash will change to let you know you need to
-#. update your localized copy. The msgstr is not used at all. Set it to
-#. whatever you like once you have updated your copy of the file.
-#: C/index.page:28(media)
-msgctxt "_"
-msgid ""
-"external ref='figures/empathy-logo.png' "
-"md5='1afc419a644e90b16393807e35cb5cb2'"
-msgstr ""
-
-#: C/index.page:7(info/title)
-msgctxt "link"
-msgid "Empathy Internet Messenger"
-msgstr ""
-
-#: C/index.page:8(info/title)
-msgctxt "text"
-msgid "Empathy Internet Messenger"
-msgstr ""
-
-#: C/index.page:19(credit/name) C/add-account.page:21(credit/name)
-#: C/audio-call.page:19(credit/name) C/audio-video.page:17(credit/name)
-#: C/create-account.page:19(credit/name)
-#: C/disable-account.page:21(credit/name)
-#: C/favorite-rooms.page:14(credit/name) C/geolocation.page:17(credit/name)
-#: C/geolocation-not-showing.page:17(credit/name)
-#: C/geolocation-privacy.page:17(credit/name)
-#: C/geolocation-supported.page:16(credit/name)
-#: C/geolocation-turn.page:18(credit/name)
-#: C/geolocation-what-is.page:18(credit/name)
-#: C/group-conversations.page:19(credit/name)
-#: C/hide-contacts.page:11(credit/name) C/import-account.page:23(credit/name)
-#: C/introduction.page:13(credit/name) C/irc-commands.page:10(credit/name)
-#: C/irc-join-pwd.page:17(credit/name) C/irc-join-room.page:16(credit/name)
-#: C/irc-manage.page:19(credit/name) C/irc-nick-password.page:18(credit/name)
-#: C/irc-send-file.page:16(credit/name)
-#: C/irc-start-conversation.page:15(credit/name)
-#: C/link-contacts.page:15(credit/name) C/prev-conv.page:17(credit/name)
-#: C/prob-conn-acctdisabled.page:19(credit/name)
-#: C/prob-conn-auth.page:21(credit/name) C/prob-conn-name.page:18(credit/name)
-#: C/prob-conn-neterror.page:19(credit/name)
-#: C/remove-account.page:19(credit/name) C/salut-protocol.page:18(credit/name)
-#: C/send-file.page:21(credit/name) C/set-custom-status.page:19(credit/name)
-#: C/share-desktop.page:14(credit/name) C/status-icons.page:16(credit/name)
-#: C/video-call.page:22(credit/name)
-msgid "Milo Casagrande"
-msgstr ""
-
-#: C/index.page:23(license/p) C/account-irc.page:20(license/p)
-#: C/account-jabber.page:18(license/p) C/accounts-window.page:22(license/p)
-#: C/add-account.page:29(license/p) C/add-contact.page:22(license/p)
-#: C/audio-call.page:23(license/p) C/audio-video.page:21(license/p)
-#: C/change-status.page:28(license/p) C/create-account.page:23(license/p)
-#: C/disable-account.page:29(license/p) C/favorite-rooms.page:18(license/p)
-#: C/geolocation.page:21(license/p)
-#: C/geolocation-not-showing.page:21(license/p)
-#: C/geolocation-privacy.page:21(license/p)
-#: C/geolocation-supported.page:20(license/p)
-#: C/geolocation-turn.page:22(license/p)
-#: C/geolocation-what-is.page:22(license/p)
-#: C/group-conversations.page:23(license/p) C/hide-contacts.page:15(license/p)
-#: C/import-account.page:31(license/p) C/introduction.page:17(license/p)
-#: C/irc-commands.page:14(license/p) C/irc-join-pwd.page:21(license/p)
-#: C/irc-join-room.page:20(license/p) C/irc-manage.page:23(license/p)
-#: C/irc-nick-password.page:22(license/p) C/irc-send-file.page:20(license/p)
-#: C/irc-start-conversation.page:19(license/p)
-#: C/link-contacts.page:19(license/p) C/prev-conv.page:25(license/p)
-#: C/prob-conn-acctdisabled.page:23(license/p)
-#: C/prob-conn-auth.page:25(license/p) C/prob-conn-name.page:22(license/p)
-#: C/prob-conn-neterror.page:23(license/p) C/prob-conn.page:18(license/p)
-#: C/remove-account.page:23(license/p) C/salut-protocol.page:22(license/p)
-#: C/send-file.page:25(license/p) C/send-message.page:21(license/p)
-#: C/set-custom-status.page:23(license/p) C/share-desktop.page:22(license/p)
-#: C/status-icons.page:24(license/p) C/video-call.page:26(license/p)
-msgid "Creative Commons Share Alike 3.0"
-msgstr ""
-
-#: C/index.page:27(page/title)
-msgid ""
-"<media type=\"image\" mime=\"image/png\" src=\"figures/empathy-logo.png\"> "
-"Empathy Internet Messenger logo </media> Empathy Internet Messenger"
-msgstr ""
-
-#: C/index.page:35(section/title)
-msgid "Account Management"
-msgstr ""
-
-#: C/index.page:39(section/title)
-msgid "Contact Management"
-msgstr ""
-
-#: C/index.page:43(section/title)
-msgid "Text Conversations"
-msgstr ""
-
-#: C/index.page:47(section/title)
-msgid "Audio and Video Conversations"
-msgstr ""
-
-#: C/index.page:51(section/title)
-msgid "Advanced Actions"
-msgstr ""
-
-#: C/index.page:55(section/title) C/irc-manage.page:57(section/title)
-msgid "Common Problems"
-msgstr ""
-
-#. This is a reference to an external file such as an image or video. When
-#. the file changes, the md5 hash will change to let you know you need to
-#. update your localized copy. The msgstr is not used at all. Set it to
-#. whatever you like once you have updated your copy of the file.
-#: C/account-irc.page:106(media)
-msgctxt "_"
-msgid ""
-"external ref='figures/gtk-add.png' md5='a856b499d8d4681b70b5ce6f25bc5c6d'"
-msgstr ""
-
-#. This is a reference to an external file such as an image or video. When
-#. the file changes, the md5 hash will change to let you know you need to
-#. update your localized copy. The msgstr is not used at all. Set it to
-#. whatever you like once you have updated your copy of the file.
-#.
-#. This is a reference to an external file such as an image or video. When
-#. the file changes, the md5 hash will change to let you know you need to
-#. update your localized copy. The msgstr is not used at all. Set it to
-#. whatever you like once you have updated your copy of the file.
-#.
-#. This is a reference to an external file such as an image or video. When
-#. the file changes, the md5 hash will change to let you know you need to
-#. update your localized copy. The msgstr is not used at all. Set it to
-#. whatever you like once you have updated your copy of the file.
-#.
-#. This is a reference to an external file such as an image or video. When
-#. the file changes, the md5 hash will change to let you know you need to
-#. update your localized copy. The msgstr is not used at all. Set it to
-#. whatever you like once you have updated your copy of the file.
-#: C/account-irc.page:109(media) C/prob-conn-auth.page:58(media)
-#: C/prob-conn-name.page:44(media) C/prob-conn-neterror.page:59(media)
-msgctxt "_"
-msgid ""
-"external ref='figures/gtk-edit.png' md5='4f21b451732817be0604fe3e2c8da98b'"
-msgstr ""
-
-#. This is a reference to an external file such as an image or video. When
-#. the file changes, the md5 hash will change to let you know you need to
-#. update your localized copy. The msgstr is not used at all. Set it to
-#. whatever you like once you have updated your copy of the file.
-#: C/account-irc.page:112(media)
-msgctxt "_"
-msgid ""
-"external ref='figures/gtk-remove.png' md5='215e3a325a3dd619874e35c30a018bb6'"
-msgstr ""
-
-#: C/account-irc.page:8(info/desc)
-msgid "Additional information necessary for connecting to IRC networks."
-msgstr ""
-
-#: C/account-irc.page:16(credit/name) C/account-jabber.page:14(credit/name)
-#: C/accounts-window.page:18(credit/name) C/add-account.page:25(credit/name)
-#: C/disable-account.page:25(credit/name)
-#: C/import-account.page:27(credit/name) C/prev-conv.page:21(credit/name)
-#: C/status-icons.page:20(credit/name)
-msgid "Shaun McCance"
-msgstr ""
-
-#: C/account-irc.page:31(page/title)
-msgid "IRC account details"
-msgstr ""
-
-#: C/account-irc.page:33(page/p)
-msgid ""
-"IRC accounts require different information than many other types of "
-"accounts. To create an IRC account, you must specify at least an IRC network "
-"and a nickname. This page details the information you can provide for an IRC "
-"account."
-msgstr ""
-
-#: C/account-irc.page:39(note/p) C/irc-manage.page:37(note/p)
-msgid ""
-"You must have the <sys>telepathy-idle</sys> package installed to use IRC in "
-"<app>Empathy</app>."
-msgstr ""
-
-#: C/account-irc.page:45(item/title) C/account-irc.page:120(item/title)
-msgid "<gui>Network</gui>"
-msgstr "<gui>అల్లిక</gui>"
-
-#: C/account-irc.page:46(item/p)
-msgid ""
-"IRC is an open system that allows people to run separate IRC networks. Each "
-"network is distinct and has its own users and chat rooms. <app>Empathy</app> "
-"lists the most popular networks in the <gui>Network</gui> drop-down list. "
-"You can add additional networks. See <link xref=\"#networks\"/> below."
-msgstr ""
-
-#: C/account-irc.page:53(item/title)
-msgid "<gui>Nickname</gui>"
-msgstr "<gui>మారుపేరు</gui>"
-
-#: C/account-irc.page:54(item/p)
-msgid ""
-"Your nickname is your unique name on the IRC network. Only one person on a "
-"network may use a given nickname. If you get an error message that says "
-"<link xref=\"prob-conn-name\" role=\"error-msg\"/> you will need to change "
-"your nickname."
-msgstr ""
-
-#: C/account-irc.page:60(item/title)
-msgid "<gui>Password</gui>"
-msgstr "<gui>రహస్యపదం</gui>"
-
-#: C/account-irc.page:61(item/p)
-msgid ""
-"Some servers, particularly those on private networks, require a password to "
-"connect. If you are authorized to use the network, the network "
-"administrators should provide you with a password."
-msgstr ""
-
-#: C/account-irc.page:65(note/title)
-msgid "NickServ Passwords"
-msgstr ""
-
-#: C/account-irc.page:66(note/p)
-msgid ""
-"On some networks, nicknames can be registered using a service known as "
-"NickServ. <app>Empathy</app> does not directly support nickname passwords. "
-"On some networks, including the popular freenode network, server passwords "
-"are automatically forwarded to NickServ, allowing you to set this field to "
-"identify yourself with NickServ. See <link xref=\"irc-nick-password\"/> for "
-"more details."
-msgstr ""
-
-#: C/account-irc.page:76(item/title)
-msgid "<gui>Real name</gui>"
-msgstr "<gui>అసలు పేరును</gui>"
-
-#: C/account-irc.page:77(item/p)
-msgid ""
-"You can provide your real name in addition to your nickname. Other users "
-"will be able to see this when they view your information."
-msgstr ""
-
-#: C/account-irc.page:81(item/title)
-msgid "<gui>Quit message</gui>"
-msgstr ""
-
-#: C/account-irc.page:82(item/p)
-msgid ""
-"When you go offline, a quit message is sent to all the chat rooms you’re in "
-"and to all the users you’re having a private conversation with. Use this "
-"field to provide a custom quit message."
-msgstr ""
-
-#: C/account-irc.page:94(info/title)
-msgctxt "link"
-msgid "IRC Networks"
-msgstr ""
-
-#: C/account-irc.page:97(section/title)
-msgid "Networks"
-msgstr "అల్లిక"
-
-#: C/account-irc.page:99(section/p)
-msgid ""
-"<app>Empathy</app> includes a list of popular IRC networks. If you wish to "
-"another IRC network, you can add it to the list. You can also modify "
-"networks and remove them from the list."
-msgstr ""
-
-#: C/account-irc.page:104(item/p)
-msgid ""
-"To add a network to the list, click <media type=\"image\" mime=\"image/png\" "
-"src=\"figures/gtk-add.png\" width=\"16\" height=\"16\">Add</media>."
-msgstr ""
-
-#: C/account-irc.page:107(item/p)
-msgid ""
-"To modify a network in the list, select the network and click <media type="
-"\"image\" mime=\"image/png\" src=\"figures/gtk-edit.png\" width=\"16\" "
-"height=\"16\">Edit</media>."
-msgstr ""
-
-#: C/account-irc.page:110(item/p)
-msgid ""
-"To remove a network from the list, select the network and click <media type="
-"\"image\" mime=\"image/png\" src=\"figures/gtk-remove.png\" width=\"16\" "
-"height=\"16\">Remove</media>."
-msgstr ""
-
-#: C/account-irc.page:115(section/p)
-msgid ""
-"When adding or modifying a network, you can enter the following information:"
-msgstr ""
-
-#: C/account-irc.page:121(item/p)
-msgid ""
-"This is the name of the network as you want it to appear in the list of "
-"networks."
-msgstr ""
-
-#: C/account-irc.page:125(item/title)
-msgid "<gui>Charset</gui>"
-msgstr "<gui>అక్షర సమితి</gui>"
-
-#: C/account-irc.page:126(item/p)
-msgid ""
-"This specifies the character encoding that is typically used on this "
-"network. A character encoding is a specific way of recording characters "
-"internally in a computer. There are many character encodings, and you need "
-"to use the same character encoding as other users to see their messages "
-"correctly."
-msgstr ""
-
-#: C/account-irc.page:135(item/p)
-msgid ""
-"By default, <app>Empathy</app> uses UTF-8, a modern character encoding that "
-"can handle text from most of the world's languages. Another common encoding "
-"for English and some other Western languages is ISO-8859-1."
-msgstr ""
-
-#: C/account-irc.page:141(item/title)
-msgid "<gui>Servers</gui>"
-msgstr "<gui>సేవికలు</gui>"
-
-#: C/account-irc.page:142(item/p)
-msgid ""
-"An IRC network may have many servers you can connect to. When you are "
-"connected to a server on a particular network, you can communicate with all "
-"users on all other servers on that network. You can add and remove servers "
-"for this network using the <gui>Add</gui> and <gui>Remove</gui> buttons."
-msgstr ""
-
-#: C/account-irc.page:147(item/p)
-msgid ""
-"When a server is selected, click the field under <gui>Server</gui> or "
-"<gui>Port</gui> to edit it. Alternatively, use the left and right arrow keys "
-"to focus the field, and press the space bar to begin editing."
-msgstr ""
-
-#: C/account-irc.page:151(item/p)
-msgid ""
-"Select the check box in the <gui>SSL</gui> column to encrypt all "
-"communication with a server. Note that this does not prevent other users on "
-"the network from seeing what you write on public chat rooms."
-msgstr ""
-
-#: C/account-jabber.page:7(info/desc)
-msgid "Advanced options for Jabber and Google Talk accounts."
-msgstr ""
-
-#: C/account-jabber.page:29(page/title)
-msgid "Jabber account details"
-msgstr ""
-
-#: C/account-jabber.page:31(page/p)
-msgid ""
-"Most Jabber accounts will require only a login ID and a password to connect. "
-"For some accounts or on certain types of networks, you may need to enter "
-"additional information in the <gui>Advanced</gui> section. Normally, you "
-"will not need to use the advanced options below. For general instructions on "
-"adding an account, see <link xref=\"add-account\"/>."
-msgstr ""
-
-#: C/account-jabber.page:39(note/p)
-msgid ""
-"Google Talk is a type of Jabber account. These instructions hold for Google "
-"Talk accounts as well."
-msgstr ""
-
-#: C/account-jabber.page:45(item/title)
-msgid "<gui>Encryption required (TLS/SSL)</gui>"
-msgstr ""
-
-#: C/account-jabber.page:46(item/title)
-msgid "<gui>Ignore SSL certificate errors</gui>"
-msgstr ""
-
-#: C/account-jabber.page:47(item/p)
-msgid ""
-"Whenever possible, communication between <app>Empathy</app> and the Jabber "
-"server is encrypted. If encrypted communication is not possible, messages "
-"may be sent unencrypted. Select <gui>Encryption required</gui> to prevent "
-"<app>Empathy</app> from communicating with the Jabber server when encryption "
-"is not possible."
-msgstr ""
-
-#: C/account-jabber.page:52(item/p)
-msgid ""
-"Some Jabber servers may encrypt data using invalid certificates, or using "
-"certificates from unknown authorities. If you trust the server you are "
-"connecting to, you can select <gui>Ignore SSL certificate errors</gui> to "
-"allow encrypted communication with invalid certificates."
-msgstr ""
-
-#: C/account-jabber.page:59(item/title)
-msgid "<gui>Resource</gui>"
-msgstr "<gui>వనరు</gui>"
-
-#: C/account-jabber.page:60(item/title)
-msgid "<gui>Priority</gui>"
-msgstr "<gui>ప్రాధాన్యత</gui>"
-
-#: C/account-jabber.page:61(item/p)
-msgid ""
-"If you have multiple applications (for instance, on separate computers) "
-"connected to your account at the same time, you can set a resource to "
-"uniquely identify each one. By default, <app>Empathy</app> will use "
-"<input>Telepathy</input> as the resource."
-msgstr ""
-
-#: C/account-jabber.page:65(item/p)
-msgid ""
-"You can set the priority to specify which application should receive "
-"incoming messages from your contacts. New messages will be sent to the "
-"application with the highest priority."
-msgstr ""
-
-#: C/account-jabber.page:70(item/title)
-msgid "<gui>Override server settings</gui>"
-msgstr ""
-
-#: C/account-jabber.page:71(item/p)
-msgid ""
-"<app>Empathy</app> will use default settings to connect to the Jabber server "
-"based on your login ID. For some Jabber servers, you will need to enter "
-"custom server settings manually. These settings should be provided for you "
-"by your Jabber provider."
-msgstr ""
-
-#: C/accounts-window.page:11(info/desc)
-msgid "Add, modify, and delete accounts."
-msgstr ""
-
-#: C/accounts-window.page:33(page/title)
-msgid "Accounts Window"
-msgstr ""
-
-#: C/accounts-window.page:35(page/p)
-msgid ""
-"The <gui>Accounts</gui> window allows you to add, modify, and delete "
-"accounts."
-msgstr ""
-
-#: C/accounts-window.page:43(section/title)
-msgid "Account Details"
-msgstr "ఖాతా వివరాలు"
-
-#: C/accounts-window.page:44(section/p)
-msgid ""
-"For most types of accounts, you can simply enter a login ID and a password. "
-"Certain accounts or account types, however, may require additional "
-"information."
-msgstr ""
-
-#: C/add-account.page:9(info/desc)
-msgid "Add a new account to <app>Empathy</app>."
-msgstr ""
-
-#: C/add-account.page:40(page/title)
-msgid "Add a new account"
-msgstr "ఒక కొత్త ఖాతాను జోడించు"
-
-#: C/add-account.page:42(page/p)
-msgid ""
-"You can add instant messaging accounts from any supported service to "
-"communicate with all of your contacts in <app>Empathy</app>. For some "
-"account providers, these steps will also allow you to register for a new "
-"account. For more details, see <link xref=\"create-account\"/>."
-msgstr ""
-
-#: C/add-account.page:49(item/p) C/disable-account.page:49(item/p)
-#: C/irc-nick-password.page:50(item/p) C/remove-account.page:43(item/p)
-msgid ""
-"From the <gui>Contact List</gui> window, choose <guiseq><gui>Edit</gui> "
-"<gui>Accounts</gui></guiseq>, or press <key>F4</key>."
-msgstr ""
-
-#: C/add-account.page:53(item/p)
-msgid "Click <gui style=\"button\">+</gui>."
-msgstr ""
-
-#: C/add-account.page:58(item/p)
-msgid ""
-"From the <gui>Protocol</gui> drop-down list, select the type of account you "
-"wish to add."
-msgstr ""
-
-#: C/add-account.page:62(item/p)
-msgid ""
-"If you do not already have a registered account, select <gui>Create a new "
-"account on the server</gui>. This feature is not available for all account "
-"types, and may not work with some account providers. See <link xref=\"create-"
-"account\"/> for more information."
-msgstr ""
-
-#: C/add-account.page:69(item/p)
-msgid ""
-"Enter the required information. For most accounts, you will only need a "
-"login ID and a password. Some accounts may require additional information. "
-"See <link xref=\"accounts-window#details\"/>for more information."
-msgstr ""
-
-#: C/add-account.page:74(item/p) C/import-account.page:61(item/p)
-#: C/irc-nick-password.page:63(item/p)
-msgid "Click <gui style=\"button\">Apply</gui>."
-msgstr ""
-
-#: C/add-account.page:81(note/p)
-msgid ""
-"To change the name that identifies the account in the <gui>Accounts</gui> "
-"window, select the account from the list on the left and either click on the "
-"name or press the space bar. Edit the account name and press <key>Enter</"
-"key> when you’re finished."
-msgstr ""
-
-#: C/add-contact.page:9(info/desc)
-msgid "Add someone to the contact list."
-msgstr ""
-
-#: C/add-contact.page:18(credit/name) C/change-status.page:24(credit/name)
-#: C/prob-conn-acctdisabled.page:15(credit/name)
-#: C/prob-conn-auth.page:17(credit/name)
-#: C/prob-conn-neterror.page:15(credit/name) C/prob-conn.page:14(credit/name)
-#: C/send-file.page:17(credit/name) C/send-message.page:17(credit/name)
-msgid "Phil Bull"
-msgstr ""
-
-#: C/add-contact.page:33(page/title)
-msgid "Add someone to your list of contacts"
-msgstr ""
-
-#: C/add-contact.page:37(item/p)
-msgid "Choose <guiseq><gui>Chat</gui><gui>Add Contact</gui></guiseq>."
-msgstr ""
-
-#: C/add-contact.page:40(item/p)
-msgid ""
-"From the <gui>Account</gui> drop-down list, select the account you wish to "
-"use to connect to your contact. Your contact will need to be using the same "
-"service as the account you select."
-msgstr ""
-
-#: C/add-contact.page:45(item/p)
-msgid ""
-"In the <gui>Identifier</gui> field, enter your contact’s login ID, username, "
-"screen name, or other appropriate identifier for the service type."
-msgstr ""
-
-#: C/add-contact.page:49(item/p)
-msgid ""
-"In the <gui>Alias</gui> field, type your contact’s name as you would like it "
-"to appear in your contact list."
-msgstr ""
-
-#: C/add-contact.page:53(item/p)
-msgid "Click <gui>Add</gui> to add the person to your list of contacts."
-msgstr ""
-
-#: C/add-contact.page:61(note/p)
-msgid ""
-"To add a new person to your list of contacts, you need to be connected to "
-"the Internet and to your account."
-msgstr ""
-
-#. This is a reference to an external file such as an image or video. When
-#. the file changes, the md5 hash will change to let you know you need to
-#. update your localized copy. The msgstr is not used at all. Set it to
-#. whatever you like once you have updated your copy of the file.
-#.
-#. This is a reference to an external file such as an image or video. When
-#. the file changes, the md5 hash will change to let you know you need to
-#. update your localized copy. The msgstr is not used at all. Set it to
-#. whatever you like once you have updated your copy of the file.
-#.
-#. This is a reference to an external file such as an image or video. When
-#. the file changes, the md5 hash will change to let you know you need to
-#. update your localized copy. The msgstr is not used at all. Set it to
-#. whatever you like once you have updated your copy of the file.
-#: C/audio-call.page:36(media) C/audio-video.page:70(media)
-#: C/video-call.page:39(media)
-msgctxt "_"
-msgid ""
-"external ref='figures/camera-web.png' md5='8166b4372f25b78cbf5a64fe2eac2ce5'"
-msgstr ""
-
-#: C/audio-call.page:9(info/desc)
-msgid "Call your contacts over the Internet."
-msgstr ""
-
-#: C/audio-call.page:27(page/title)
-msgid "Start an audio conversation"
-msgstr ""
-
-#: C/audio-call.page:29(page/p)
-msgid ""
-"You can call your contacts and have an audio conversation with them. This "
-"features only works with certain types of accounts, and it requires the "
-"other person to have an application that supports audio calls."
-msgstr ""
-
-#: C/audio-call.page:34(item/p)
-msgid ""
-"From the <gui>Contact List</gui> window, click the <media type=\"image\" "
-"mime=\"image/png\" src=\"figures/camera-web.png\">video call</media> icon "
-"next to the name of the contact you wish to call and choose <gui style="
-"\"menuitem\">Audio Call</gui>."
-msgstr ""
-
-#: C/audio-call.page:42(item/p) C/video-call.page:44(item/p)
-msgid ""
-"A new window will open. When the connection is established, you will see "
-"<gui>Connected</gui> at the bottom of the window, along with the total "
-"conversation time."
-msgstr ""
-
-#: C/audio-call.page:48(item/p) C/video-call.page:49(item/p)
-msgid "To end the conversation, click on <gui style=\"button\">Hang up</gui>."
-msgstr ""
-
-#: C/audio-call.page:55(note/p)
-msgid ""
-"To turn an audio conversation into a video conversation, choose <guiseq><gui "
-"style=\"menu\">Video</gui> <gui style=\"menuitem\">Video On</gui></guiseq>."
-msgstr ""
-
-#: C/audio-call.page:63(section/title)
-msgid "Start an audio conversation with a meta-contact"
-msgstr ""
-
-#: C/audio-call.page:66(item/p) C/send-message.page:53(item/p)
-#: C/video-call.page:64(item/p)
-msgid ""
-"From the <gui>Contact List</gui> window, right-click on the meta-contact."
-msgstr ""
-
-#: C/audio-call.page:71(item/p)
-msgid ""
-"Select the contact you want to have the conversation, and from the menu "
-"select <gui style=\"menuitem\">Audio Call</gui>."
-msgstr ""
-
-#: C/audio-call.page:78(note/p) C/send-message.page:65(note/p)
-#: C/video-call.page:76(note/p)
-msgid ""
-"To recognize if a contact is a <em>meta-contact</em>, move your mouse on a "
-"contact in the <gui>Contact List</gui> window, and stop over it for a "
-"second: a small pop-up message will appear showing the number of the "
-"contacts that form the meta-contact."
-msgstr ""
-
-#. This is a reference to an external file such as an image or video. When
-#. the file changes, the md5 hash will change to let you know you need to
-#. update your localized copy. The msgstr is not used at all. Set it to
-#. whatever you like once you have updated your copy of the file.
-#: C/audio-video.page:58(media)
-msgctxt "_"
-msgid ""
-"external ref='figures/audio-input-microphone.png' "
-"md5='8d89026b66a263a3bc5b1f0665948567'"
-msgstr ""
-
-#: C/audio-video.page:8(info/desc)
-msgid ""
-"Information on when it is possible to have an audio or video conversation."
-msgstr ""
-
-#: C/audio-video.page:32(page/title)
-msgid "Audio and video support"
-msgstr ""
-
-#: C/audio-video.page:34(page/p)
-msgid ""
-"You can only have audio and video conversation with contacts who are using "
-"an application which also supports this feature. When your contacts support "
-"audio or video conversations, you will see the following icons next to their "
-"names in the contact list:"
-msgstr ""
-
-#: C/audio-video.page:43(td/p)
-msgid "Icon"
-msgstr "ప్రతిమ"
-
-#: C/audio-video.page:48(td/p)
-msgid "Description"
-msgstr "వివరణ"
-
-#: C/audio-video.page:57(td/p)
-msgid ""
-"<media type=\"image\" mime=\"image/png\" src=\"figures/audio-input-"
-"microphone.png\"> Icon for audio conversation </media>"
-msgstr ""
-
-#: C/audio-video.page:64(td/p)
-msgid "The contact is able to have an audio conversation."
-msgstr ""
-
-#: C/audio-video.page:69(td/p)
-msgid ""
-"<media type=\"image\" mime=\"image/png\" src=\"figures/camera-web.png\"> "
-"Icon for video conversation </media>"
-msgstr ""
-
-#: C/audio-video.page:76(td/p)
-msgid "The contact is able to have a video conversation."
-msgstr ""
-
-#: C/audio-video.page:83(note/p)
-msgid ""
-"In order to have an audio conversation, you need to have a sound card that "
-"is supported by your operating system, and a working microphone."
-msgstr ""
-
-#: C/audio-video.page:87(note/p)
-msgid ""
-"In order to have a video conversation, you need to have a webcam that is "
-"supported by your operating system, and a working microphone."
-msgstr ""
-
-#: C/audio-video.page:95(section/title)
-msgid "Supported Account Types"
-msgstr ""
-
-#: C/audio-video.page:97(section/p)
-msgid ""
-"You can only have audio and video conversations using accounts on certain "
-"supported services. The following table lists whether audio and video is "
-"supported for each type of account."
-msgstr ""
-
-#: C/audio-video.page:102(note/p)
-msgid ""
-"Account types are provided by plugins. Your system may not have all of the "
-"following types available, or it may have types not listed here. Updated "
-"plugins may make audio or video conversations possible on account types that "
-"are listed as unsupported here."
-msgstr ""
-
-#: C/audio-video.page:128(td/p)
-msgid "Service"
-msgstr "సేవ"
-
-#: C/audio-video.page:129(td/p)
-msgid "Audio"
-msgstr "ధ్వని"
-
-#: C/audio-video.page:130(td/p)
-msgid "Video"
-msgstr "దృశ్యం"
-
-#: C/audio-video.page:135(td/p)
-msgid "AIM"
-msgstr "AIM"
-
-#: C/audio-video.page:136(td/p) C/audio-video.page:137(td/p)
-#: C/audio-video.page:141(td/p) C/audio-video.page:142(td/p)
-#: C/audio-video.page:146(td/p) C/audio-video.page:147(td/p)
-#: C/audio-video.page:156(td/p) C/audio-video.page:157(td/p)
-#: C/audio-video.page:161(td/p) C/audio-video.page:162(td/p)
-#: C/audio-video.page:166(td/p) C/audio-video.page:167(td/p)
-#: C/audio-video.page:181(td/p) C/audio-video.page:182(td/p)
-#: C/audio-video.page:186(td/p) C/audio-video.page:187(td/p)
-#: C/audio-video.page:191(td/p) C/audio-video.page:192(td/p)
-#: C/audio-video.page:196(td/p) C/audio-video.page:197(td/p)
-#: C/audio-video.page:201(td/p) C/audio-video.page:202(td/p)
-#: C/audio-video.page:211(td/p) C/audio-video.page:212(td/p)
-#: C/audio-video.page:216(td/p) C/audio-video.page:217(td/p)
-msgid "No"
-msgstr "లేదు"
-
-#: C/audio-video.page:140(td/p)
-msgid "Facebook Chat"
-msgstr "Facebook చాట్"
-
-#: C/audio-video.page:145(td/p)
-msgid "gadugadu"
-msgstr "gadugadu"
-
-#: C/audio-video.page:150(td/p)
-msgid "Google Talk"
-msgstr "Google Talk"
-
-#: C/audio-video.page:151(td/p) C/audio-video.page:152(td/p)
-#: C/audio-video.page:171(td/p) C/audio-video.page:172(td/p)
-#: C/audio-video.page:176(td/p) C/audio-video.page:177(td/p)
-#: C/audio-video.page:206(td/p) C/audio-video.page:207(td/p)
-msgid "Yes"
-msgstr "అవును"
-
-#: C/audio-video.page:155(td/p)
-msgid "Groupwise"
-msgstr "Groupwise"
-
-#: C/audio-video.page:160(td/p)
-msgid "ICQ"
-msgstr "ICQ"
-
-#: C/audio-video.page:165(td/p) C/create-account.page:107(section/title)
-msgid "IRC"
-msgstr "IRC"
-
-#: C/audio-video.page:170(td/p) C/create-account.page:60(section/title)
-msgid "Jabber"
-msgstr "Jabber"
-
-#: C/audio-video.page:175(td/p)
-msgid "MSN"
-msgstr "MSN"
-
-#: C/audio-video.page:180(td/p)
-msgid "myspace"
-msgstr "myspace"
-
-#: C/audio-video.page:185(td/p)
-msgid "qq"
-msgstr "qq"
-
-#: C/audio-video.page:190(td/p) C/create-account.page:78(section/title)
-msgid "People Nearby"
-msgstr "సమీపంలో వ్యక్తులు"
-
-#: C/audio-video.page:195(td/p)
-msgid "sametime"
-msgstr "sametime"
-
-#: C/audio-video.page:200(td/p)
-msgid "silc"
-msgstr "silc"
-
-#: C/audio-video.page:205(td/p) C/create-account.page:89(section/title)
-msgid "SIP"
-msgstr "SIP"
-
-#: C/audio-video.page:210(td/p)
-msgid "Yahoo!"
-msgstr "Yahoo!"
-
-#: C/audio-video.page:215(td/p)
-msgid "zephyr"
-msgstr "zephyr"
-
-#: C/change-status.page:9(info/desc)
-msgid "Change your status to advertise your availability to your contacts."
-msgstr ""
-
-#: C/change-status.page:39(page/title)
-msgid "Change your status"
-msgstr ""
-
-#: C/change-status.page:41(page/p)
-msgid ""
-"You can set your status to indicate your availability to your contacts. "
-"<app>Empathy</app> allows you to select from a list of defined statuses."
-msgstr ""
-
-#: C/change-status.page:46(item/p)
-msgid ""
-"Click on the drop-down list at the top of the <gui>Contact List</gui> window."
-msgstr ""
-
-#: C/change-status.page:51(item/p)
-msgid "Select a status from the list."
-msgstr ""
-
-#: C/change-status.page:57(page/p)
-msgid ""
-"See <link xref=\"status-icons\"/> for a list of the built-in statuses and "
-"what they mean. You can also <link xref=\"set-custom-status\">add custom "
-"status messages</link> to provide more information about your availability "
-"to your contacts."
-msgstr ""
-
-#: C/change-status.page:63(note/p)
-msgid ""
-"If you do not use your computer for a while, or if the screensaver is on, "
-"the status will be automatically set to Away."
-msgstr ""
-
-#: C/create-account.page:9(info/desc)
-msgid "Register for an account with one of the supported messaging services."
-msgstr ""
-
-#: C/create-account.page:34(page/title)
-msgid "Register for a new account"
-msgstr ""
-
-#: C/create-account.page:36(page/p)
-msgid ""
-"Most account types require you to create an account with a account provider "
-"before you can connect using instant messaging applications like "
-"<app>Empathy</app>. With some account providers, you can use <app>Empathy</"
-"app> to register for a new account, using the same steps as you would to "
-"<link xref=\"add-account\">add an account</link>."
-msgstr ""
-
-#: C/create-account.page:42(page/p)
-msgid ""
-"This page provides information on creating a new account for various types "
-"of accounts. Your account provider should give you a login ID and a "
-"password, as well as any additional information you need to connect using "
-"<app>Empathy</app>."
-msgstr ""
-
-#: C/create-account.page:47(section/title)
-msgid "Facebook"
-msgstr "Facebook"
-
-#: C/create-account.page:48(section/p)
-msgid ""
-"Facebook is one of the most-used social networks. It allows users to create "
-"their own profile and to communicate with their friends."
-msgstr ""
-
-#: C/create-account.page:52(section/p)
-msgid ""
-"To use Facebook to communicate with your friends, you will need to create a "
-"new account from the website: <link href=\"http://www.facebook.com\">www."
-"facebook.com</link>."
-msgstr ""
-
-#: C/create-account.page:62(section/p)
-msgid ""
-"Jabber is an open instant messaging system. Like email, Jabber allows you to "
-"choose your account provider and communicate with all other Jabber users, "
-"regardless of their account provider."
-msgstr ""
-
-#: C/create-account.page:66(section/p)
-msgid ""
-"You will need to create a new account with a Jabber provider. There are many "
-"free providers; one popular provider is <link href=\"http://register.jabber."
-"org/\">Jabber.org</link>."
-msgstr ""
-
-#: C/create-account.page:71(note/p)
-msgid ""
-"If you use Google Mail or Google Talk, you already have a Jabber account. "
-"Google Talk is a Jabber service. Simply use your Google Mail address and "
-"password in <app>Empathy</app> to connect."
-msgstr ""
-
-#: C/create-account.page:80(section/p)
-msgid ""
-"You do not need to create an account with a service provider to use this "
-"feature. This service works whenever you are connected to a local network, "
-"such as a wireless hotspot. It automatically finds all other users on the "
-"network who are also using this service."
-msgstr ""
-
-#: C/create-account.page:85(section/p)
-msgid "For more information, see <link xref=\"salut-protocol\"/>."
-msgstr ""
-
-#: C/create-account.page:91(section/p)
-msgid ""
-"SIP is an open system which allows users to have audio and video "
-"conversations over the Internet. You need to create an account with a SIP "
-"provider. You can communicate with all other SIP users, regardless of which "
-"SIP provider they use."
-msgstr ""
-
-#: C/create-account.page:97(note/p)
-msgid ""
-"Due to technical differences, the free <link href=\"https://www.ekiga.net/"
-"index.php?page=register\">Ekiga.net</link> service does not currently work "
-"with <app>Empathy</app>."
-msgstr ""
-
-#: C/create-account.page:102(section/p)
-msgid ""
-"Some SIP providers allow you to call normal phones from your computer. "
-"Generally, you will need to subscribe to a paid service for this feature."
-msgstr ""
-
-#: C/create-account.page:109(section/p)
-msgid ""
-"You do not need to register for an account to use IRC. Although you specify "
-"a nickname when you add an IRC account to <app>Empathy</app>, this nickname "
-"is only established each time you connect. If another user is using the "
-"nickname, you will need to choose a new nickname."
-msgstr ""
-
-#: C/create-account.page:114(section/p)
-msgid ""
-"Some IRC networks use a service called NickServ to allow users to protect "
-"their nicknames. See <link xref=\"irc-nick-password\"/> for more information."
-msgstr ""
-
-#: C/create-account.page:117(section/p)
-msgid ""
-"Some IRC servers are password protected. You will need to know the password "
-"to connect to these servers. Generally, these are private IRC networks."
-msgstr ""
-
-#: C/create-account.page:122(section/title)
-msgid "Proprietary Services"
-msgstr ""
-
-#: C/create-account.page:124(section/p)
-msgid ""
-"There are many proprietary instant messaging services that have been "
-"developed by different companies or organizations. <app>Empathy</app> allows "
-"you to connect to an existing account for most popular services. To create a "
-"new account with one of these services, you will need to visit the service’s "
-"web site and agree to its terms of use."
-msgstr ""
-
-#: C/create-account.page:132(item/p)
-msgid "<link href=\"http://dashboard.aim.com/aim\">AIM</link>"
-msgstr ""
-
-#: C/create-account.page:137(item/p)
-msgid "<link href=\"https://www.icq.com/register/\">ICQ</link>"
-msgstr ""
-
-#: C/create-account.page:142(item/p)
-msgid "<link href=\"https://accountservices.passport.net\">MSN</link>"
-msgstr ""
-
-#: C/create-account.page:147(item/p)
-msgid "<link href=\"https://login.yahoo.com/config/login\">Yahoo!</link>"
-msgstr ""
-
-#: C/disable-account.page:9(info/desc)
-msgid "Prevent <app>Empathy</app> from automatically logging in to an account."
-msgstr ""
-
-#: C/disable-account.page:40(page/title)
-msgid "Disable an account"
-msgstr ""
-
-#: C/disable-account.page:42(page/p)
-msgid ""
-"You can disable an account to prevent <app>Empathy</app> from logging in to "
-"it without removing the account entirely. You may wish to disable and re-"
-"enable an account if you only want to be logged in to the account at certain "
-"times, but you still want to use <app>Empathy</app> for other accounts."
-msgstr ""
-
-#: C/disable-account.page:53(item/p)
-msgid ""
-"Select the account you wish to disable from the accounts list on the left "
-"side of the window."
-msgstr ""
-
-#: C/disable-account.page:57(item/p)
-msgid "On the right side of the window, switch it off."
-msgstr ""
-
-#: C/disable-account.page:62(page/p)
-msgid "To re-enable the account, switch it on."
-msgstr ""
-
-#: C/favorite-rooms.page:10(info/desc)
-msgid "Set, join and manage favorite rooms."
-msgstr ""
-
-#: C/favorite-rooms.page:29(page/title)
-msgid "Favorite rooms"
-msgstr ""
-
-#: C/favorite-rooms.page:32(section/title)
-msgid "Set a room as a favorite"
-msgstr ""
-
-#: C/favorite-rooms.page:35(item/p)
-msgid "Join a room."
-msgstr ""
-
-#: C/favorite-rooms.page:40(item/p)
-msgid ""
-"See <link xref=\"irc-join-room\"/> for more information on how to join an "
-"IRC room."
-msgstr ""
-
-#: C/favorite-rooms.page:46(item/p)
-msgid ""
-"See <link xref=\"group-conversations\"/> for more information on how to "
-"start or join a group conversation."
-msgstr ""
-
-#: C/favorite-rooms.page:54(item/p)
-msgid ""
-"From the conversation window, choose <guiseq><gui>Conversation</"
-"gui><gui>Favorite Chat Room</gui></guiseq>."
-msgstr ""
-
-#: C/favorite-rooms.page:63(section/title)
-msgid "Join favorite rooms"
-msgstr ""
-
-#: C/favorite-rooms.page:66(item/p) C/send-file.page:40(item/p)
-msgid "From the <gui>Contact List</gui> window, perform one of the following:"
-msgstr ""
-
-#: C/favorite-rooms.page:71(item/p)
-msgid "Press <key>F5</key>."
-msgstr ""
-
-#: C/favorite-rooms.page:76(item/p)
-msgid ""
-"Choose <guiseq><gui>Room</gui><gui>Join Favorites</gui></guiseq>, to join "
-"all your favorite rooms."
-msgstr ""
-
-#: C/favorite-rooms.page:82(item/p)
-msgid "Choose <gui>Room</gui>, and select the favorite room you want to join."
-msgstr ""
-
-#: C/favorite-rooms.page:90(note/p)
-msgid ""
-"To join a favorite room, you need to be connected to the Internet and to "
-"your account."
-msgstr ""
-
-#: C/favorite-rooms.page:98(section/title)
-msgid "Manage favorite rooms"
-msgstr ""
-
-#: C/favorite-rooms.page:101(item/p)
-msgid ""
-"From the <gui>Contact List</gui> window, choose <guiseq><gui>Room</"
-"gui><gui>Manage Favorites</gui></guiseq>."
-msgstr ""
-
-#: C/favorite-rooms.page:107(item/p)
-msgid ""
-"From the <gui>Account</gui> drop-down list, select the account you want to "
-"manage the favorite rooms of."
-msgstr ""
-
-#: C/favorite-rooms.page:111(item/p)
-msgid "Select <gui>All</gui> to see all you favorite rooms."
-msgstr ""
-
-#: C/favorite-rooms.page:116(item/p)
-msgid "Select the favorite room you want to manage:"
-msgstr ""
-
-#: C/favorite-rooms.page:121(item/p)
-msgid ""
-"Select the <gui>Auto-Connect</gui> check-box in order to automatically join "
-"that room when you connect to your account."
-msgstr ""
-
-#: C/favorite-rooms.page:127(item/p)
-msgid "Click on <gui>Remove</gui> to remove the room from your favorites."
-msgstr ""
-
-#: C/favorite-rooms.page:134(item/p)
-msgid "When done, click <gui>Close</gui>."
-msgstr ""
-
-#: C/geolocation.page:8(info/desc)
-msgid "Use and understand geolocation in <app>Empathy</app>."
-msgstr ""
-
-#: C/geolocation.page:32(page/title)
-msgid "Geographical position"
-msgstr ""
-
-#: C/geolocation.page:35(section/title)
-msgid "Geolocation"
-msgstr ""
-
-#: C/geolocation.page:39(section/title)
-msgid "Fix common problems"
-msgstr ""
-
-#: C/geolocation-not-showing.page:8(info/desc)
-msgid "<app>Empathy</app> does not publish my geographical position."
-msgstr ""
-
-#: C/geolocation-not-showing.page:32(page/title)
-msgid "Geographical position not published"
-msgstr ""
-
-#: C/geolocation-not-showing.page:34(page/p)
-msgid ""
-"If your contacts cannot see your location, <app>Empathy</app> might not be "
-"able to discover with a good margin of precision your geographical position."
-msgstr ""
-
-#: C/geolocation-not-showing.page:38(page/p)
-msgid ""
-"In this case, your position will not be published, but you are still able to "
-"see the location of your contacts."
-msgstr ""
-
-#: C/geolocation-not-showing.page:42(page/p)
-msgid ""
-"If you want to publish your geographical position, you can try to use an "
-"external device such as a GPS."
-msgstr ""
-
-#: C/geolocation-not-showing.page:48(note/p)
-msgid ""
-"In order to publish your geographical location, your Jabber server needs to "
-"support the Personal Eventing Protocal (PEP). A list of <link href=\"http://"
-"coccinella.im/servers/servers_by_pubsub_pep.html\">servers which support "
-"PEP</link> is maintained online. Google Talk does not support this feature "
-"at this time."
-msgstr ""
-
-#: C/geolocation-privacy.page:8(info/desc)
-msgid "What information are sent and to who."
-msgstr ""
-
-#: C/geolocation-privacy.page:32(page/title)
-msgid "Geolocation Privacy"
-msgstr ""
-
-#: C/geolocation-privacy.page:35(section/title)
-msgid "What information is sent"
-msgstr ""
-
-#: C/geolocation-privacy.page:36(section/p)
-msgid ""
-"What is possible to send is: your country, region, locality, area, street, "
-"building, floor, room, and postal code, longitude, latitude and altitude, "
-"speed and bearing."
-msgstr ""
-
-#: C/geolocation-privacy.page:40(section/p)
-msgid ""
-"The accuracy and the quantity of information about your geographical "
-"position are based on the software or on the infrastructure used to discover "
-"your position."
-msgstr ""
-
-#: C/geolocation-privacy.page:44(section/p)
-msgid ""
-"Different kind of networks may have different accuracy settings, and may "
-"send different information. The use of external devices such as GPS or "
-"mobile phone will increase the accuracy of the information sent."
-msgstr ""
-
-#: C/geolocation-privacy.page:49(section/p)
-msgid ""
-"When the privacy mode is enabled, nothing more precise than your city will "
-"be sent, even if you are using an external device."
-msgstr ""
-
-#: C/geolocation-privacy.page:56(section/title)
-msgid "Who can see the information sent"
-msgstr ""
-
-#: C/geolocation-privacy.page:57(section/p)
-msgid "Only your contacts can see your geographical position."
-msgstr ""
-
-#: C/geolocation-privacy.page:63(section/title)
-msgid "What is the privacy mode"
-msgstr ""
-
-#: C/geolocation-privacy.page:64(section/p)
-msgid ""
-"The privacy mode, enabled by default, is a reduced accuracy mode that will "
-"decrease the accuracy of the geographical position sent to your contacts."
-msgstr ""
-
-#: C/geolocation-privacy.page:71(section/title)
-msgid "Privacy overview"
-msgstr ""
-
-#: C/geolocation-privacy.page:72(section/p)
-msgid ""
-"Overview of the various geolocation privacy settings in <app>Empathy</app>."
-msgstr ""
-
-#: C/geolocation-privacy.page:77(item/p)
-msgid "Geolocation is not enabled by default."
-msgstr ""
-
-#: C/geolocation-privacy.page:82(item/p)
-msgid "Privacy mode is enabled by default."
-msgstr ""
-
-#: C/geolocation-privacy.page:87(item/p)
-msgid ""
-"Privacy mode prevails even when using external and more precise devices."
-msgstr ""
-
-#: C/geolocation-privacy.page:92(item/p)
-msgid "Only your contacts can see your position."
-msgstr ""
-
-#: C/geolocation-supported.page:7(info/desc)
-msgid "Services that supports geolocation and compatibility."
-msgstr ""
-
-#: C/geolocation-supported.page:31(page/title)
-msgid "Supported services"
-msgstr ""
-
-#: C/geolocation-supported.page:33(page/p)
-msgid ""
-"The geolocation feature at the moment is compatible only with the Jabber "
-"service. In order to use it, you and your contacts need to have a Jabber "
-"account."
-msgstr ""
-
-#: C/geolocation-supported.page:39(note/p)
-msgid ""
-"It is necessary that also the server you are using supports the geolocation "
-"feature. Most of the Jabber servers support it. See your service website "
-"documentation for more information."
-msgstr ""
-
-#: C/geolocation-supported.page:47(section/title)
-msgid "Compatibility"
-msgstr ""
-
-#: C/geolocation-supported.page:49(section/p)
-msgid ""
-"<app>Empathy</app> geolocation feature is not compatible with other "
-"geographical position services such as <em>Google Latitude</em>, <em>Yahoo "
-"Fire Eagle</em> or <em>Brightkite</em>."
-msgstr ""
-
-#: C/geolocation-turn.page:9(info/desc)
-msgid "How to activate and deactivate geolocation in <app>Empathy</app>."
-msgstr ""
-
-#: C/geolocation-turn.page:33(page/title)
-msgid "Activate/Deactivate geolocation"
-msgstr ""
-
-#: C/geolocation-turn.page:37(item/p)
-msgid "Choose <guiseq><gui>Edit</gui><gui>Preferences</gui></guiseq>."
-msgstr ""
-
-#: C/geolocation-turn.page:42(item/p)
-msgid "Select the <gui>Location</gui> tab."
-msgstr ""
-
-#: C/geolocation-turn.page:47(item/p)
-msgid ""
-"Select <gui>Publish location to my contacts</gui> to activate geolocation."
-msgstr ""
-
-#: C/geolocation-turn.page:50(item/p)
-msgid "To deactivate geolocation, deselect it."
-msgstr ""
-
-#: C/geolocation-turn.page:55(item/p)
-msgid ""
-"To increase the accuracy of your position, deselect <gui>Reduce location "
-"accuracy</gui>."
-msgstr ""
-
-#: C/geolocation-turn.page:61(item/p)
-msgid ""
-"If you have an external device like a GPS or want to send a more accurate "
-"position, select the appropriate option in the <gui>Location sources</gui> "
-"section."
-msgstr ""
-
-#: C/geolocation-what-is.page:9(info/desc)
-msgid "Understanding geolocation."
-msgstr ""
-
-#: C/geolocation-what-is.page:33(page/title)
-msgid "What is geolocation"
-msgstr ""
-
-#: C/geolocation-what-is.page:35(page/p)
-msgid ""
-"Geolocation allows you to identify the real geographical location of a "
-"computer or a device connected to the Internet."
-msgstr ""
-
-#: C/geolocation-what-is.page:37(page/p)
-msgid "With geolocation in <app>Empathy</app> you can:"
-msgstr ""
-
-#: C/geolocation-what-is.page:42(item/p)
-msgid "Publish your geographical location to your contacts."
-msgstr ""
-
-#: C/geolocation-what-is.page:47(item/p)
-msgid "See your contacts’ geographical location and quickly contact them."
-msgstr ""
-
-#: C/geolocation-what-is.page:52(item/p)
-msgid ""
-"Set the accuracy of your location and the device used to discover your "
-"location."
-msgstr ""
-
-#: C/geolocation-what-is.page:60(note/p)
-msgid ""
-"In order to see your contacts’ geographical locations, they need to use a "
-"service and an application that supports geolocation."
-msgstr ""
-
-#: C/group-conversations.page:8(info/desc)
-msgid "Start or join a group conversation with your contacts."
-msgstr ""
-
-#: C/group-conversations.page:34(page/title)
-msgid "Group conversations"
-msgstr ""
-
-#: C/group-conversations.page:36(page/p)
-msgid ""
-"Group conversations permits you to have text conversations with more than "
-"one contact at the same time."
-msgstr ""
-
-#: C/group-conversations.page:40(page/p)
-msgid ""
-"To have a group conversation you need to have a registered account with "
-"either Jabber or Google Talk, or a People Nearby account."
-msgstr ""
-
-#: C/group-conversations.page:46(note/p)
-msgid ""
-"You can have a group conversation only with the contacts that are using the "
-"same service as yours."
-msgstr ""
-
-#: C/group-conversations.page:54(section/title)
-msgid "Start a group conversation"
-msgstr ""
-
-#: C/group-conversations.page:58(item/p)
-#: C/group-conversations.page:122(item/p) C/irc-join-room.page:39(item/p)
-msgid ""
-"From the <gui>Contact List</gui> window, choose <guiseq><gui>Room</"
-"gui><gui>Join</gui></guiseq>."
-msgstr ""
-
-#: C/group-conversations.page:63(item/p)
-msgid ""
-"From the <gui>Account</gui> drop-down list, select the account you want to "
-"use for the group conversation."
-msgstr ""
-
-#: C/group-conversations.page:69(item/p)
-msgid ""
-"In the <gui>Server</gui> text box, type the name of server in which the "
-"conversation will be hosted."
-msgstr ""
-
-#: C/group-conversations.page:73(item/p)
-msgid "Leave it empty if it will be on the current server."
-msgstr ""
-
-#: C/group-conversations.page:78(item/p)
-msgid ""
-"In the <gui>Room</gui> text box, type the name you want to give to the "
-"conversation."
-msgstr ""
-
-#: C/group-conversations.page:82(note/p)
-msgid ""
-"This will be the name of the room you are going to have a conversation. This "
-"name will be publicly available for other people to join. It is not possible "
-"to create a private room."
-msgstr ""
-
-#: C/group-conversations.page:90(item/p)
-msgid ""
-"To invite other contacts to join the group conversation, from the "
-"<gui>Contact List</gui> window, select the contact you want to invite, and "
-"perform one of the following:"
-msgstr ""
-
-#: C/group-conversations.page:97(item/p)
-msgid "Right-click on the contact and choose <gui>Invite to chatroom</gui>."
-msgstr ""
-
-#: C/group-conversations.page:102(item/p)
-msgid ""
-"Choose <guiseq><gui>Edit</gui><gui>Contact</gui><gui>Invite to chatroom</"
-"gui></guiseq>."
-msgstr ""
-
-#: C/group-conversations.page:107(item/p)
-msgid ""
-"If you have more than one group conversation open, select the one you want "
-"to invite your contacts."
-msgstr ""
-
-#: C/group-conversations.page:118(section/title)
-msgid "Join a group conversation"
-msgstr ""
-
-#: C/group-conversations.page:128(item/p)
-msgid "Expand the <gui>Room List</gui> section to see all the existing rooms."
-msgstr ""
-
-#: C/group-conversations.page:133(item/p)
-msgid "Double-click on the name of a room to join it."
-msgstr ""
-
-#: C/group-conversations.page:139(section/p)
-msgid ""
-"It is not possible to join all existing rooms. Some of the rooms might "
-"require a password, or might be invitation only. <app>Empathy</app> does not "
-"support these kind of rooms."
-msgstr ""
-
-#: C/hide-contacts.page:8(info/desc)
-msgid "Hide the offline contacts from your <gui>Contact List</gui>."
-msgstr ""
-
-#: C/hide-contacts.page:19(page/title)
-msgid "Hide offline contacts"
-msgstr ""
-
-#: C/hide-contacts.page:21(page/p)
-msgid ""
-"Normally, <app>Empathy</app> shows all your contacts: those that are online, "
-"with which you can have a conversation, and also those that are offline."
-msgstr ""
-
-#: C/hide-contacts.page:25(page/p)
-msgid "To hide the contacts that are offline:"
-msgstr ""
-
-#: C/hide-contacts.page:31(item/p)
-msgid ""
-"From the <gui>Contact List</gui> window, choose <guiseq><gui>View</gui> "
-"<gui>Offline Contacts</gui></guiseq>, or press <keyseq><key>Ctrl</key> "
-"<key>H</key></keyseq>."
-msgstr ""
-
-#: C/hide-contacts.page:36(item/p)
-msgid "To show the offline contacts again, repeat the same procedure above."
-msgstr ""
-
-#: C/import-account.page:10(info/desc)
-msgid "Import an account from another instant messaging application."
-msgstr ""
-
-#: C/import-account.page:19(credit/name)
-msgid "Peter Haslam"
-msgstr ""
-
-#: C/import-account.page:42(page/title)
-msgid "Import an existing account"
-msgstr ""
-
-#: C/import-account.page:44(page/p)
-msgid ""
-"The first time you run <app>Empathy</app>, it will offer to import your "
-"accounts from other instant messaging applications. Currently, the only "
-"supported application is <app>Pidgin</app>."
-msgstr ""
-
-#: C/import-account.page:50(item/p)
-msgid ""
-"Run <app>Empathy</app> for the first time. An assistant will offer you a "
-"number of options to create new accounts."
-msgstr ""
-
-#: C/import-account.page:54(item/p)
-msgid ""
-"Select <gui>Yes, import my account details from</gui> and click "
-"<gui>Forward</gui>."
-msgstr ""
-
-#: C/import-account.page:58(item/p)
-msgid "Select the check box next to each account you wish to import."
-msgstr ""
-
-#: C/import-account.page:66(note/p)
-msgid ""
-"It is not currently possible to import accounts after you have completed the "
-"first-run assistant."
-msgstr ""
-
-#. This is a reference to an external file such as an image or video. When
-#. the file changes, the md5 hash will change to let you know you need to
-#. update your localized copy. The msgstr is not used at all. Set it to
-#. whatever you like once you have updated your copy of the file.
-#: C/introduction.page:41(media)
-msgctxt "_"
-msgid ""
-"external ref='figures/empathy-main-window.png' "
-"md5='54908dcb2588beddb15ef0968d2c2582'"
-msgstr ""
-
-#: C/introduction.page:9(info/desc)
-msgid "Introduction to the <app>Empathy</app> instant messenger."
-msgstr ""
-
-#: C/introduction.page:21(page/title)
-msgid "Introduction"
-msgstr ""
-
-#: C/introduction.page:23(page/p)
-msgid ""
-"<app>Empathy</app> is an instant messaging application for the GNOME "
-"Desktop. It supports text messaging, voice &amp; video calls, file "
-"transfers, and all the most used messaging systems such as MSN and Google "
-"Talk."
-msgstr ""
-
-#: C/introduction.page:28(page/p)
-msgid ""
-"<app>Empathy</app> includes features that help you better collaborate while "
-"at work, and that let you easily keep in touch with your friends."
-msgstr ""
-
-#: C/introduction.page:32(page/p)
-msgid ""
-"Using <app>Empathy</app>, you can group all the conversations in a single "
-"window, have multiple windows for different kind of conversations, easily "
-"search through your previous conversations, and share your desktop in just "
-"two clicks."
-msgstr ""
-
-#: C/introduction.page:39(figure/title)
-msgid "<gui>Contact List</gui> window"
-msgstr ""
-
-#: C/introduction.page:40(figure/desc)
-msgid "<app>Empathy</app> main window"
-msgstr ""
-
-#: C/introduction.page:42(media/p)
-msgid "<app>Empathy</app> main window."
-msgstr ""
-
-#: C/irc-commands.page:7(info/desc)
-msgid "The supported IRC commands."
-msgstr ""
-
-#: C/irc-commands.page:18(page/title)
-msgid "Supported IRC commands"
-msgstr ""
-
-#: C/irc-commands.page:19(page/p)
-msgid ""
-"To see the list of the supported IRC commands, in a chat room type <input>/"
-"help</input> and press <key>Enter</key>."
-msgstr ""
-
-#: C/irc-commands.page:24(note/p)
-msgid "All commands available have a small description on their usage."
-msgstr ""
-
-#: C/irc-join-pwd.page:9(info/desc)
-msgid "Enter password-protected IRC chat rooms."
-msgstr ""
-
-#: C/irc-join-pwd.page:25(page/title)
-msgid "Join a protected IRC chat room"
-msgstr ""
-
-#: C/irc-join-pwd.page:27(page/p)
-msgid ""
-"On some IRC networks, private IRC rooms may be protected with a password. If "
-"you know the password, use the following steps to join:"
-msgstr ""
-
-#: C/irc-join-pwd.page:33(item/p)
-msgid "<link xref=\"irc-join-room\">Join the room</link> as normal."
-msgstr ""
-
-#: C/irc-join-pwd.page:38(item/p)
-msgid ""
-"Empathy will prompt you for a password. Enter the password for the IRC chat "
-"room and click <gui style=\"button\">Join</gui>."
-msgstr ""
-
-#: C/irc-join-room.page:8(info/desc)
-msgid "Join an IRC channel."
-msgstr ""
-
-#: C/irc-join-room.page:31(page/title)
-msgid "Join an IRC chat room"
-msgstr ""
-
-#: C/irc-join-room.page:33(page/p)
-msgid ""
-"You can join IRC chat rooms (also known as IRC channels) on any IRC network "
-"you’re connected to. To connect to an IRC network, see <link xref=\"add-"
-"account\"/> and <link xref=\"account-irc\"/>."
-msgstr ""
-
-#: C/irc-join-room.page:45(item/p)
-msgid ""
-"From the <gui>Account</gui> drop-down list, select the IRC account that "
-"corresponds to the network you want to use."
-msgstr ""
-
-#: C/irc-join-room.page:51(item/p)
-msgid ""
-"In the <gui>Room</gui> text box, type the name of the channel you want to "
-"join. IRC channel names start with the hash character (<sys>#</sys>)."
-msgstr ""
-
-#: C/irc-join-room.page:57(item/p)
-msgid "Click <gui>Join</gui> to enter the room."
-msgstr ""
-
-#: C/irc-join-room.page:64(note/p)
-msgid ""
-"To join multiple rooms, you need to repeat the steps above for each room."
-msgstr ""
-
-#: C/irc-manage.page:9(info/desc)
-msgid "How to use IRC with <app>Empathy</app>."
-msgstr ""
-
-#: C/irc-manage.page:34(page/title)
-msgid "Internet Relay Chat (IRC)"
-msgstr ""
-
-#: C/irc-manage.page:41(when/p)
-msgid ""
-"<link action=\"install:telepathy-idle\" xref=\"index\" style=\"button"
-"\">Install telepathy-idle</link>"
-msgstr ""
-
-#: C/irc-manage.page:48(info/title)
-msgctxt "link"
-msgid "IRC Chat Rooms and Conversations"
-msgstr ""
-
-#: C/irc-manage.page:50(section/title)
-msgid "Chat Rooms and Conversations"
-msgstr ""
-
-#: C/irc-manage.page:55(info/title)
-msgctxt "link"
-msgid "Common IRC Problems"
-msgstr ""
-
-#: C/irc-nick-password.page:10(info/desc)
-msgid "Protect your nickname to prevent other IRC users from using it."
-msgstr ""
-
-#: C/irc-nick-password.page:33(page/title)
-msgid "Use a nickname password on IRC"
-msgstr ""
-
-#: C/irc-nick-password.page:35(page/p)
-msgid ""
-"On some IRC networks, you can register your nickname with a service called "
-"NickServ. By sending special messages to NickServ, you can set your password "
-"and identify yourself. Some IRC chat rooms may not allow you to join without "
-"a registered nickname."
-msgstr ""
-
-#: C/irc-nick-password.page:40(page/p)
-msgid ""
-"<app>Empathy</app> does not currently support nickname registration. Some "
-"IRC networks, however, will automatically forward a <em>server password</em> "
-"to NickServ. On these networks, you can use the IRC password in "
-"<app>Empathy</app> to identify yourself to NickServ. The popular freenode "
-"network is known to have this feature."
-msgstr ""
-
-#: C/irc-nick-password.page:46(page/p)
-msgid "To set an IRC server password:"
-msgstr ""
-
-#: C/irc-nick-password.page:54(item/p)
-msgid "Select the IRC account from the list on the left of the dialog."
-msgstr ""
-
-#: C/irc-nick-password.page:57(item/p)
-msgid ""
-"In the <gui>Password</gui> field, type the password you used to register "
-"your nikcname."
-msgstr ""
-
-#: C/irc-nick-password.page:69(note/p)
-msgid ""
-"These instructions only allow you to use a password-protected nickname on "
-"certain IRC networks. It is not currently possible to register an IRC "
-"nickname or change your nickname password using <app>Empathy</app>."
-msgstr ""
-
-#: C/irc-send-file.page:9(info/desc)
-msgid "<app>Empathy</app> does not currently support sending files using IRC."
-msgstr ""
-
-#: C/irc-send-file.page:31(page/title)
-msgid "Send files over IRC"
-msgstr ""
-
-#: C/irc-send-file.page:33(page/p)
-msgid "It is not currently possible to send files using IRC."
-msgstr ""
-
-#: C/irc-start-conversation.page:8(info/desc)
-msgid "Start a conversation with an IRC contact."
-msgstr ""
-
-#: C/irc-start-conversation.page:30(page/title)
-msgid "Chat with somebody on IRC"
-msgstr ""
-
-#: C/irc-start-conversation.page:32(page/p)
-msgid ""
-"You can hold private conversations with other IRC users, outside of the "
-"public IRC chat rooms. To start a conversation with another IRC user:"
-msgstr ""
-
-#: C/irc-start-conversation.page:37(item/p)
-msgid ""
-"In the contact list for an IRC chat room, double click the name of the user "
-"you want to chat with. Alternatively, right click the name of the user and "
-"choose <gui>Chat</gui>."
-msgstr ""
-
-#: C/irc-start-conversation.page:45(item/p)
-msgid ""
-"The IRC room contact list is not the same as <app>Empathy</app> contact "
-"list. It contains a list of users in the IRC chat room you joined. Different "
-"rooms can have different contacts listed."
-msgstr ""
-
-#: C/irc-start-conversation.page:52(item/p)
-msgid ""
-"The IRC room contact list is usually on the right side of the IRC room "
-"window. If you do not see it, choose <guiseq><gui>Conversation</"
-"gui><gui>Show Contact List</gui></guiseq>."
-msgstr ""
-
-#: C/license.page:8(info/desc)
-msgid "Legal information."
-msgstr ""
-
-#: C/license.page:11(page/title)
-msgid "License"
-msgstr ""
-
-#: C/license.page:12(page/p)
-msgid ""
-"This work is distributed under a CreativeCommons Attribution-Share Alike 3.0 "
-"Unported license."
-msgstr ""
-
-#: C/license.page:20(page/p)
-msgid "You are free:"
-msgstr ""
-
-#: C/license.page:25(item/title)
-msgid "<em>To share</em>"
-msgstr ""
-
-#: C/license.page:26(item/p)
-msgid "To copy, distribute and transmit the work."
-msgstr ""
-
-#: C/license.page:29(item/title)
-msgid "<em>To remix</em>"
-msgstr ""
-
-#: C/license.page:30(item/p)
-msgid "To adapt the work."
-msgstr ""
-
-#: C/license.page:33(page/p)
-msgid "Under the following conditions:"
-msgstr ""
-
-#: C/license.page:38(item/title)
-msgid "<em>Attribution</em>"
-msgstr ""
-
-#: C/license.page:39(item/p)
-msgid ""
-"You must attribute the work in the manner specified by the author or "
-"licensor (but not in any way that suggests that they endorse you or your use "
-"of the work)."
-msgstr ""
-
-#: C/license.page:46(item/title)
-msgid "<em>Share Alike</em>"
-msgstr ""
-
-#: C/license.page:47(item/p)
-msgid ""
-"If you alter, transform, or build upon this work, you may distribute the "
-"resulting work only under the same, similar or a compatible license."
-msgstr ""
-
-#: C/license.page:53(page/p)
-msgid ""
-"For the full text of the license, see the <link href=\"http://"
-"creativecommons.org/licenses/by-sa/3.0/legalcode\">CreativeCommons website</"
-"link>, or read the full <link href=\"http://creativecommons.org/licenses/by-"
-"sa/3.0/\">Commons Deed</link>."
-msgstr ""
-
-#: C/link-contacts.page:11(info/desc)
-msgid "Merge and separate different contacts into a single one."
-msgstr ""
-
-#: C/link-contacts.page:25(page/title)
-msgid "Combine and separate contacts"
-msgstr ""
-
-#: C/link-contacts.page:26(page/p)
-msgid ""
-"If one, or more, of your contacts has multiple accounts with different "
-"messaging services, you can combine these contacts into a single one."
-msgstr ""
-
-#: C/link-contacts.page:30(page/p)
-msgid ""
-"The resulting contact is called a <em>meta-contact</em>: a contact composed "
-"from different single contacts."
-msgstr ""
-
-#: C/link-contacts.page:34(page/p)
-msgid ""
-"If you have a Jane Smith contact that is using three different messaging "
-"services like:"
-msgstr ""
-
-#: C/link-contacts.page:40(item/p)
-msgid "janes@facebook"
-msgstr ""
-
-#: C/link-contacts.page:45(item/p)
-msgid "jane.smith@gmail"
-msgstr ""
-
-#: C/link-contacts.page:50(item/p)
-msgid "jane_smith@hotmail"
-msgstr ""
-
-#: C/link-contacts.page:55(page/p)
-msgid "You can combine these contacts into a single Jane Smith one."
-msgstr ""
-
-#: C/link-contacts.page:60(section/title)
-msgid "Combining contacts"
-msgstr ""
-
-#: C/link-contacts.page:63(item/p)
-msgid ""
-"From the <gui>Contact List</gui> window, right-click one of the contact that "
-"has different accounts, and select <gui style=\"menuitem\">Link Contacts...</"
-"gui>."
-msgstr ""
-
-#: C/link-contacts.page:70(item/p)
-msgid ""
-"From the left pane in the <gui>Link Contacts</gui> window, select the "
-"contacts you want to combine."
-msgstr ""
-
-#: C/link-contacts.page:76(item/p)
-msgid "Click <gui style=\"button\">Link</gui>."
-msgstr ""
-
-#: C/link-contacts.page:82(note/p)
-msgid ""
-"When a meta-contact has been created, the default contact that will be used "
-"to have a conversation with when you double-click on it, is the contact with "
-"the highest presence on-line."
-msgstr ""
-
-#: C/link-contacts.page:91(section/title)
-msgid "Separating contacts"
-msgstr ""
-
-#: C/link-contacts.page:94(item/p)
-msgid ""
-"From the <gui>Contact List</gui>, right-click the contact to separate, and "
-"select <gui style=\"menuitem\">Link Contacts...</gui>."
-msgstr ""
-
-#: C/link-contacts.page:100(item/p)
-msgid "Click <gui style=\"button\">Unlink</gui>."
-msgstr ""
-
-#: C/prev-conv.page:8(info/desc)
-msgid "Browse or search your previous conversations."
-msgstr ""
-
-#: C/prev-conv.page:36(page/title)
-msgid "View previous conversations"
-msgstr ""
-
-#: C/prev-conv.page:38(page/p)
-msgid ""
-"<app>Empathy</app> automatically saves all your text conversations you have "
-"with your contacts. You can <link xref=\"#search\">search through all of "
-"your previous conversations</link> or <link xref=\"#browse\">browse previous "
-"conversations</link> by contact and date."
-msgstr ""
-
-#: C/prev-conv.page:46(note/p)
-msgid ""
-"You do not need to be connected to the Internet to view and search your "
-"previous conversations."
-msgstr ""
-
-#: C/prev-conv.page:53(section/title)
-msgid "Search previous conversations"
-msgstr ""
-
-#: C/prev-conv.page:55(section/p)
-msgid ""
-"You can perform a full-text search through all of your previous "
-"conversations."
-msgstr ""
-
-#: C/prev-conv.page:59(item/p) C/prev-conv.page:87(item/p)
-msgid ""
-"From the <gui>Contact List</gui> window, choose <guiseq><gui>View</gui> "
-"<gui>Previous Conversations</gui></guiseq>. Alternatively, press <key>F3</"
-"key>."
-msgstr ""
-
-#: C/prev-conv.page:63(item/p)
-msgid ""
-"Select an account from the drop-down list in the top. A list of contacts and "
-"chat room for that account will be shown below."
-msgstr ""
-
-#: C/prev-conv.page:67(item/p)
-msgid ""
-"Type the text you want to search for in the <gui>Search</gui> text field."
-msgstr ""
-
-#: C/prev-conv.page:71(item/p)
-msgid ""
-"Any conversations that matched your search terms will be shown. By default, "
-"conversations are ordered by date."
-msgstr ""
-
-#: C/prev-conv.page:80(section/title)
-msgid "Browse previous conversations"
-msgstr ""
-
-#: C/prev-conv.page:82(section/p)
-msgid ""
-"You can browse your previous conversations with your contacts or in chat "
-"rooms by date."
-msgstr ""
-
-#: C/prev-conv.page:91(item/p)
-msgid ""
-"Select an account from the drop-down list in the top left. A list of "
-"contacts and chat room for that account will be shown below."
-msgstr ""
-
-#: C/prev-conv.page:95(item/p)
-msgid ""
-"Select a contact or chat room to view your previous conversations from. By "
-"default the most recent conversation will be shown."
-msgstr ""
-
-#: C/prev-conv.page:99(item/p)
-msgid ""
-"You can browse your conversations by date. Days on which you had a "
-"conversation with the selected contact will be shown in bold text. Click a "
-"date to select it. Click the arrows next to the month and year to browse "
-"earlier dates."
-msgstr ""
-
-#: C/prev-conv.page:105(section/p)
-msgid ""
-"You can search for text in the conversations by typing into the search field "
-"at the top. The matching conversations will be showed."
-msgstr ""
-
-#: C/prev-conv.page:111(note/p)
-msgid ""
-"You can quickly view the previous conversations with one of your contacts "
-"from the <gui>Contact List</gui> window. Simply right click the contact and "
-"choose <gui>Previous Conversations</gui>. The <gui>Previous Conversations</"
-"gui> window will open with that contact already selected."
-msgstr ""
-
-#: C/prob-conn-acctdisabled.page:7(info/desc)
-msgid ""
-"The instant messaging account that you want to use is not enabled in the "
-"list of accounts."
-msgstr ""
-
-#: C/prob-conn-acctdisabled.page:34(page/title)
-msgid "My account is not enabled"
-msgstr ""
-
-#: C/prob-conn-acctdisabled.page:36(page/p)
-msgid ""
-"If the instant messaging account that you want to use is not enabled in the "
-"drop-down account list when you try to start a new conversation or join a "
-"room, your account details may not be correct."
-msgstr ""
-
-#: C/prob-conn-acctdisabled.page:44(item/p) C/prob-conn-auth.page:45(item/p)
-#: C/prob-conn-neterror.page:53(item/p)
-msgid ""
-"Make sure that you are connected to the Internet, or to a local area network."
-msgstr ""
-
-#: C/prob-conn-acctdisabled.page:49(item/p)
-msgid ""
-"Choose <guiseq><gui>Edit</gui><gui>Accounts</gui></guiseq> and select the "
-"account that is not working."
-msgstr ""
-
-#: C/prob-conn-acctdisabled.page:55(item/p) C/prob-conn-auth.page:63(item/p)
-msgid ""
-"Type your username and password again to make sure that they are correct."
-msgstr ""
-
-#: C/prob-conn-acctdisabled.page:60(item/p)
-#: C/prob-conn-neterror.page:64(item/p)
-msgid ""
-"Check in the <gui>Advanced</gui> section that all the details are correct. "
-"You should be able to find these details from the website of the messaging "
-"service."
-msgstr ""
-
-#: C/prob-conn-acctdisabled.page:66(item/p)
-msgid "Check that the account is switched on."
-msgstr ""
-
-#: C/prob-conn-auth.page:8(info/desc)
-msgid ""
-"An error message which says “<gui>Authentication failed</gui>” appears in "
-"the main window."
-msgstr ""
-
-#: C/prob-conn-auth.page:36(page/title)
-msgid "I get a message that says “Authentication failed”"
-msgstr ""
-
-#: C/prob-conn-auth.page:38(page/p)
-msgid ""
-"This kind of error happens when your instant messaging service is not "
-"allowing you to connect because it does not recognize your username or "
-"password for some reason."
-msgstr ""
-
-#: C/prob-conn-auth.page:50(item/p)
-msgid ""
-"Make sure that you have registered an account with the service you are "
-"trying to connect to. If you do not have an account, most services will not "
-"allow you to connect."
-msgstr ""
-
-#: C/prob-conn-auth.page:57(item/p) C/prob-conn-name.page:43(item/p)
-#: C/prob-conn-neterror.page:58(item/p)
-msgid ""
-"Click the <media type=\"image\" mime=\"image/png\" src=\"figures/gtk-edit.png"
-"\">edit</media> icon in the error message."
-msgstr ""
-
-#: C/prob-conn-auth.page:68(item/p)
-msgid ""
-"Deselect the <gui>Enabled</gui>, and then select it again to try to "
-"reconnect to the service."
-msgstr ""
-
-#: C/prob-conn-name.page:9(info/title)
-msgctxt "link:error-msg"
-msgid "“Name in use”"
-msgstr ""
-
-#: C/prob-conn-name.page:10(info/desc)
-msgid ""
-"An error message which says “<gui>Name in use</gui>” appears in the main "
-"window."
-msgstr ""
-
-#: C/prob-conn-name.page:33(page/title)
-msgid "I get a message that says “Name in use”"
-msgstr ""
-
-#: C/prob-conn-name.page:35(page/p)
-msgid ""
-"This kind of error happens when you try to connect to your IRC account and "
-"you are using a nickname that is already being used by someone else on that "
-"particular network."
-msgstr ""
-
-#: C/prob-conn-name.page:51(item/p)
-msgid "In the <gui>Nickname</gui> text box, type a new nickname."
-msgstr ""
-
-#: C/prob-conn-name.page:56(item/p)
-msgid ""
-"If you have registered that nickname within the network you are using, set "
-"the password for that nickname. For more information, see <link xref=\"irc-"
-"nick-password\"/>."
-msgstr ""
-
-#: C/prob-conn-name.page:65(item/p) C/prob-conn-neterror.page:79(item/p)
-msgid ""
-"Switch the account off, and then switch it on to try to reconnect to the "
-"service."
-msgstr ""
-
-#: C/prob-conn-neterror.page:7(info/desc)
-msgid ""
-"An error message which says “<gui>Network error</gui>” appears in the main "
-"window."
-msgstr ""
-
-#: C/prob-conn-neterror.page:34(page/title)
-msgid "I get a message that says “Network error”"
-msgstr ""
-
-#: C/prob-conn-neterror.page:42(page/p)
-msgid ""
-"This kind of error happens when <app>Empathy</app> cannot communicate with "
-"the instant messaging service for some reason."
-msgstr ""
-
-#: C/prob-conn-neterror.page:46(page/p)
-msgid ""
-"Also, this kind of error happens when you try to use an IRC account without "
-"setting a nickname."
-msgstr ""
-
-#: C/prob-conn-neterror.page:87(section/title)
-msgid "Proxy support"
-msgstr ""
-
-#: C/prob-conn-neterror.page:88(section/p)
-msgid ""
-"At the moment <app>Empathy</app> can not be configured to work with a proxy."
-msgstr ""
-
-#: C/prob-conn.page:7(info/desc)
-msgid "Diagnose common problems connecting to an instant messaging service."
-msgstr ""
-
-#: C/prob-conn.page:29(page/title)
-msgid "Problems connecting to an instant messaging service"
-msgstr ""
-
-#: C/remove-account.page:8(info/desc)
-msgid "Completely remove an account from <app>Empathy</app>."
-msgstr ""
-
-#: C/remove-account.page:34(page/title)
-msgid "Remove an account"
-msgstr ""
-
-#: C/remove-account.page:36(page/p)
-msgid ""
-"You can completely remove an account from <app>Empathy</app> if you no "
-"longer wish to use the account. If you wish to use the account in "
-"<app>Empathy</app> again in the future, you will have to add your account "
-"details again."
-msgstr ""
-
-#: C/remove-account.page:47(item/p)
-msgid ""
-"Select the account you wish to remove from the accounts list on the left "
-"side of the window."
-msgstr ""
-
-#: C/remove-account.page:51(item/p)
-msgid "Click <gui style=\"button\">-</gui>."
-msgstr ""
-
-#: C/remove-account.page:54(item/p)
-msgid ""
-"A dialog will be shown asking for confirmation. Click the <gui>Remove</gui> "
-"button to permanently remove the account."
-msgstr ""
-
-#: C/remove-account.page:60(note/p)
-msgid ""
-"Even after removing an account, <app>Empathy</app> does not delete your "
-"conversation history for that account."
-msgstr ""
-
-#: C/salut-protocol.page:8(info/desc)
-msgid "Understanding the People Nearby feature."
-msgstr ""
-
-#: C/salut-protocol.page:33(page/title)
-msgid "What is People Nearby?"
-msgstr ""
-
-#: C/salut-protocol.page:40(page/p)
-msgid ""
-"The People Nearby service is a serverless communication service: you do not "
-"need to connect and authenticate to a central server in order to use it."
-msgstr ""
-
-#: C/salut-protocol.page:45(page/p)
-msgid ""
-"This kind of serverless messaging system is restricted to a local area "
-"network and an active Internet connection is not necessary."
-msgstr ""
-
-#: C/salut-protocol.page:49(page/p)
-msgid ""
-"The people that use this service inside the same local area network will be "
-"auto-discovered, and it will be possible to send them messages and files as "
-"with other services."
-msgstr ""
-
-#: C/salut-protocol.page:54(page/p)
-msgid ""
-"All the modern local area networks should be able to support this kind of "
-"service."
-msgstr ""
-
-#: C/send-file.page:8(info/desc)
-msgid "Send a file from your computer to one of your contacts."
-msgstr ""
-
-#: C/send-file.page:36(page/title)
-msgid "Send files"
-msgstr ""
-
-#: C/send-file.page:45(item/p)
-msgid ""
-"Right click on the contact you want to send a file to, and choose <gui>Send "
-"file</gui>."
-msgstr ""
-
-#: C/send-file.page:50(item/p)
-msgid ""
-"Click on the contact you want to send a file, and choose <guiseq><gui>Edit</"
-"gui> <gui>Contact</gui><gui>Send file</gui></guiseq>."
-msgstr ""
-
-#: C/send-file.page:58(item/p)
-msgid "Select the file to send, and click on <gui>Send</gui>."
-msgstr ""
-
-#: C/send-file.page:63(item/p)
-msgid "The <gui>File Transfers</gui> window will appear."
-msgstr ""
-
-#: C/send-file.page:66(item/p)
-msgid ""
-"Wait for your contact to accept the file transfer, or click <gui>Stop</gui> "
-"to halt the transfer."
-msgstr ""
-
-#: C/send-file.page:72(item/p)
-msgid ""
-"Once the transfer is finished, it is possible to close the <gui>File "
-"Transfers</gui> window."
-msgstr ""
-
-#: C/send-file.page:80(note/p)
-msgid ""
-"If you have multiple finished transfers listed in the window, click on "
-"<gui>Clear</gui> to empty the list. This will only remove the files from the "
-"list and will not delete them from your computer."
-msgstr ""
-
-#: C/send-file.page:87(note/p)
-msgid ""
-"It is possible to send files only using the following services: <em>Jabber</"
-"em>, <em>Google Talk</em> and <em>People Nearby</em>."
-msgstr ""
-
-#: C/send-file.page:93(note/p)
-msgid ""
-"In order to send a file to someone, you need to be connected to the "
-"Internet, or to a local area network."
-msgstr ""
-
-#: C/send-message.page:8(info/desc)
-msgid "Send a message to one of your contacts."
-msgstr ""
-
-#: C/send-message.page:32(page/title)
-msgid "Send a message to someone"
-msgstr ""
-
-#: C/send-message.page:36(item/p)
-msgid ""
-"From the <gui>Contact List</gui> window, double-click the name of the "
-"contact that you want to have a conversation with."
-msgstr ""
-
-#: C/send-message.page:42(item/p)
-msgid ""
-"A new window will open. Type a message into the box at the bottom of the "
-"window and press <key>Enter</key> to send it."
-msgstr ""
-
-#: C/send-message.page:50(section/title)
-msgid "Send a message to a meta-contact"
-msgstr ""
-
-#: C/send-message.page:58(item/p)
-msgid ""
-"Select the contact you want to have the conversation, and from the menu "
-"select <gui style=\"menuitem\">Chat</gui>."
-msgstr ""
-
-#: C/set-custom-status.page:9(info/desc)
-msgid "Add, edit or delete personal messages for your status."
-msgstr ""
-
-#: C/set-custom-status.page:15(credit/name)
-msgid "Jim Campbell"
-msgstr ""
-
-#: C/set-custom-status.page:34(page/title)
-msgid "Set a custom message"
-msgstr ""
-
-#: C/set-custom-status.page:36(page/p)
-msgid ""
-"Sometimes you may want to set a custom message for your status, for example "
-"to let people know that you will be unavailable for a certain period of time."
-msgstr ""
-
-#: C/set-custom-status.page:40(page/p)
-msgid ""
-"It is possible to set a custom message based on the different statuses "
-"available."
-msgstr ""
-
-#: C/set-custom-status.page:46(item/p) C/set-custom-status.page:82(item/p)
-msgid ""
-"From the <gui>Contact List</gui> window, click on the drop-down list at the "
-"top."
-msgstr ""
-
-#: C/set-custom-status.page:52(item/p)
-msgid ""
-"Select the status you want to add a custom message to. You have to select "
-"the one identified with the label <gui>Custom Message</gui>."
-msgstr ""
-
-#: C/set-custom-status.page:58(item/p)
-msgid ""
-"Enter your custom message in the text box at the top of the window, and "
-"press <key>Enter</key> to set the message."
-msgstr ""
-
-#: C/set-custom-status.page:64(item/p)
-msgid ""
-"If you want to set the custom message as a favorite, saving it in order to "
-"use it again, click on the little heart on the right of the text box where "
-"you wrote your custom message."
-msgstr ""
-
-#: C/set-custom-status.page:69(item/p)
-msgid ""
-"If you do not do it, the custom message will not be available the next time "
-"you use <app>Empathy</app>. It will be saved only for the current session."
-msgstr ""
-
-#: C/set-custom-status.page:78(section/title)
-msgid "Edit and remove a custom message"
-msgstr ""
-
-#: C/set-custom-status.page:88(item/p)
-msgid "Select <gui>Edit Custom Message</gui>."
-msgstr ""
-
-#: C/set-custom-status.page:95(item/p)
-msgid "To edit a custom message:"
-msgstr ""
-
-#: C/set-custom-status.page:100(item/p)
-msgid ""
-"From the <gui>Saved Presets</gui> box, select the status message you want to "
-"edit and double-click on it."
-msgstr ""
-
-#: C/set-custom-status.page:106(item/p)
-msgid "Type the new custom message and press <key>Enter</key> to modify it."
-msgstr ""
-
-#: C/set-custom-status.page:113(item/p)
-msgid "To remove a custom message:"
-msgstr ""
-
-#: C/set-custom-status.page:118(item/p)
-msgid ""
-"From the <gui>Saved Presets</gui> box, select the status message you want to "
-"remove."
-msgstr ""
-
-#: C/set-custom-status.page:124(item/p)
-msgid "Click on the <gui>Remove</gui> button."
-msgstr ""
-
-#: C/set-custom-status.page:133(item/p)
-msgid "When finished, click on <gui>Close</gui>."
-msgstr ""
-
-#: C/set-custom-status.page:140(note/p)
-msgid ""
-"When you edit a custom message, it will not be set as the current status "
-"message. You will need to select it from the <gui>Contact List</gui> window."
-msgstr ""
-
-#: C/share-desktop.page:7(info/desc)
-msgid "Show your desktop to your contacts."
-msgstr ""
-
-#: C/share-desktop.page:18(credit/name)
-msgid "Ekaterina Gerasimova"
-msgstr ""
-
-#: C/share-desktop.page:33(page/title)
-msgid "Share your desktop"
-msgstr ""
-
-#: C/share-desktop.page:35(page/p)
-msgid ""
-"It is possible to share your desktop with some of your contacts. You can use "
-"this functionality to show your desktop to your contacts to, for example, "
-"ask for help or help your contacts resolve a problem."
-msgstr ""
-
-#: C/share-desktop.page:42(note/p)
-msgid ""
-"To be able to share your desktop, you need to have a VNC server, which has "
-"support for the feature, installed on your system. <app>Vino</app>, the "
-"GNOME VNC server, has the required support."
-msgstr ""
-
-#: C/share-desktop.page:51(item/p)
-msgid "From the <gui>Contact List</gui> window, do one of the following:"
-msgstr ""
-
-#: C/share-desktop.page:56(item/p)
-msgid ""
-"Select the contact you want to share your desktop with and choose "
-"<guiseq><gui>Edit</gui><gui>Contact</gui> <gui>Share My Desktop</gui></"
-"guiseq>."
-msgstr ""
-
-#: C/share-desktop.page:63(item/p)
-msgid ""
-"Right-click on the name of the contact you want to share your desktop with "
-"and select <gui>Share My Desktop</gui>."
-msgstr ""
-
-#: C/share-desktop.page:71(item/p)
-msgid ""
-"An invitation to view your desktop will be sent to the contact you have "
-"selected. To view your desktop, they will need to accept it."
-msgstr ""
-
-#: C/share-desktop.page:77(item/p)
-msgid ""
-"You can disconnect the contact from your computer using your desktop sharing "
-"application."
-msgstr ""
-
-#: C/share-desktop.page:82(note/p)
-msgid ""
-"For more information about how to use the remote desktop sharing "
-"application, refer to its help."
-msgstr ""
-
-#: C/share-desktop.page:90(page/p)
-msgid ""
-"When you share your desktop with someone else, it is possible to experience "
-"system performance slowdown and low Internet speed."
-msgstr ""
-
-#: C/share-desktop.page:96(note/p)
-msgid ""
-"Some of your contacts may not be able to use this feature. It is necessary "
-"for them to have version 2.28, or newer, of <app>Empathy</app> and a "
-"compatible remote desktop viewer application installed in their system."
-msgstr ""
-
-#. This is a reference to an external file such as an image or video. When
-#. the file changes, the md5 hash will change to let you know you need to
-#. update your localized copy. The msgstr is not used at all. Set it to
-#. whatever you like once you have updated your copy of the file.
-#: C/status-icons.page:39(media)
-msgctxt "_"
-msgid ""
-"external ref='figures/available.png' md5='2196b2f0ad4ce26fdb7b9d48e75d1947'"
-msgstr ""
-
-#. This is a reference to an external file such as an image or video. When
-#. the file changes, the md5 hash will change to let you know you need to
-#. update your localized copy. The msgstr is not used at all. Set it to
-#. whatever you like once you have updated your copy of the file.
-#: C/status-icons.page:45(media)
-msgctxt "_"
-msgid "external ref='figures/busy.png' md5='15eb2adff5faedf97b0cb9105d09410a'"
-msgstr ""
-
-#. This is a reference to an external file such as an image or video. When
-#. the file changes, the md5 hash will change to let you know you need to
-#. update your localized copy. The msgstr is not used at all. Set it to
-#. whatever you like once you have updated your copy of the file.
-#: C/status-icons.page:53(media)
-msgctxt "_"
-msgid "external ref='figures/away.png' md5='9c504d6ffa0cf1a9cc8933d16e1bea33'"
-msgstr ""
-
-#. This is a reference to an external file such as an image or video. When
-#. the file changes, the md5 hash will change to let you know you need to
-#. update your localized copy. The msgstr is not used at all. Set it to
-#. whatever you like once you have updated your copy of the file.
-#.
-#. This is a reference to an external file such as an image or video. When
-#. the file changes, the md5 hash will change to let you know you need to
-#. update your localized copy. The msgstr is not used at all. Set it to
-#. whatever you like once you have updated your copy of the file.
-#: C/status-icons.page:62(media) C/status-icons.page:69(media)
-msgctxt "_"
-msgid ""
-"external ref='figures/offline.png' md5='c5b0c21181cbd6e13f8909243c0fa964'"
-msgstr ""
-
-#: C/status-icons.page:7(info/desc)
-msgid "Understanding the various statuses and status icons."
-msgstr ""
-
-#: C/status-icons.page:35(page/title)
-msgid "Status Types and Icons"
-msgstr ""
-
-#: C/status-icons.page:39(item/title)
-msgid ""
-"<media type=\"image\" mime=\"image/png\" src=\"figures/available.png"
-"\">Available icon</media> <gui>Available</gui>"
-msgstr ""
-
-#: C/status-icons.page:41(item/p)
-msgid ""
-"Use the <em>Available</em> status when you are at your computer and able to "
-"chat with your contacts. You can set a custom message for this status."
-msgstr ""
-
-#: C/status-icons.page:45(item/title)
-msgid ""
-"<media type=\"image\" mime=\"image/png\" src=\"figures/busy.png\">Busy icon</"
-"media> <gui>Busy</gui>"
-msgstr ""
-
-#: C/status-icons.page:47(item/p)
-msgid ""
-"Use the <em>Busy</em> status to let your contacts know that you don’t want "
-"to chat right now. They can still contact you, for instance if they have "
-"something urgent they need to discuss. By default, <app>Empathy</app> will "
-"not use notification bubbles and sounds when you are busy. You can set a "
-"custom message for this status."
-msgstr ""
-
-#: C/status-icons.page:53(item/title)
-msgid ""
-"<media type=\"image\" mime=\"image/png\" src=\"figures/away.png\">Away icon</"
-"media> <gui>Away</gui>"
-msgstr ""
-
-#: C/status-icons.page:55(item/p)
-msgid ""
-"Use the <em>Away</em> status when you are going away from your computer. "
-"<app>Empathy</app> automatically sets your status to Away if you do not use "
-"your computer for a while, or if your screensaver is on. By default, "
-"<app>Empathy</app> will not use notification bubbles and sounds when you are "
-"away. You can set a custom message for this status."
-msgstr ""
-
-#: C/status-icons.page:62(item/title)
-msgid ""
-"<media type=\"image\" mime=\"image/png\" src=\"figures/offline.png\">Offline "
-"icon</media> <gui>Invisible</gui>"
-msgstr ""
-
-#: C/status-icons.page:64(item/p)
-msgid ""
-"When you set your status to <em>Invisible</em>, you will appear as offline "
-"to your contacts. You will still be connected to your accounts, and you "
-"still see your contacts’ statuses and start conversations with them."
-msgstr ""
-
-#: C/status-icons.page:69(item/title)
-msgid ""
-"<media type=\"image\" mime=\"image/png\" src=\"figures/offline.png\">Offline "
-"icon</media> <gui>Offline</gui>"
-msgstr ""
-
-#: C/status-icons.page:71(item/p)
-msgid ""
-"Setting your status to <em>Offline</em> disconnects you from all of your "
-"accounts."
-msgstr ""
-
-#: C/video-call.page:10(info/desc)
-msgid "Start a video conversation with one of your contacts."
-msgstr ""
-
-#: C/video-call.page:29(page/title)
-msgid "Start a video conversation"
-msgstr ""
-
-#: C/video-call.page:31(page/p)
-msgid ""
-"If you have a webcam, you can call your contacts and have a video "
-"conversation with them. This feature only works with certain types of "
-"accounts, and it requires the other person to have an application that "
-"supports video calls."
-msgstr ""
-
-#: C/video-call.page:38(item/p)
-msgid ""
-"From the <gui>Contact List</gui> window, click the <media type=\"image\" "
-"mime=\"image/png\" src=\"figures/camera-web.png\">video call</media> icon "
-"next to the name of the contact you wish to call and choose <gui style="
-"\"menuitem\">Video Call</gui>."
-msgstr ""
-
-#: C/video-call.page:55(note/p)
-msgid ""
-"To turn a video conversation into an audio conversation, choose <guiseq><gui "
-"style=\"menu\">Video</gui><gui style=\"menuitem\">Video Off</gui></guiseq>."
-msgstr ""
-
-#: C/video-call.page:61(section/title)
-msgid "Start a video conversation with a meta-contact"
-msgstr ""
-
-#: C/video-call.page:69(item/p)
-msgid ""
-"Select the contact you want to have the conversation, and from the menu "
-"select <gui style=\"menuitem\">Video Call</gui>."
-msgstr ""
diff --git a/help/zh_CN/zh_CN.po b/help/zh_CN/zh_CN.po
deleted file mode 100644
index de41b6a3..00000000
--- a/help/zh_CN/zh_CN.po
+++ /dev/null
@@ -1,3528 +0,0 @@
-# Chinese (China) translation for empathy.
-# Copyright (C) 2010 empathy's COPYRIGHT HOLDER
-# This file is distributed under the same license as the empathy package.
-# Lavande <lavande@thislove.cz.cc>, 2010
-# Tao Wang <dancefire@gmail.com>, 2010
-# lainme <lainme993@gmail.com>, 2011
-# Guanhao Yin <yinguanhao@gmail.com>, 2011
-# tuhaihe <wangdianjin@linuxdeepin.com>, 2012
-# Wylmer Wang <wantinghard@gmail.com>, 2012
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: empathy master\n"
-"POT-Creation-Date: 2013-04-15 22:03+0000\n"
-"PO-Revision-Date: 2012-02-14 13:34+0800\n"
-"Last-Translator: Wylmer Wang <wantinghard@gmail.com>\n"
-"Language-Team: Chinese (China) <i18n-zh@googlegroups.com>\n"
-"Language: zh-CN\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"
-
-#. Put one translator per line, in the form NAME <EMAIL>, YEAR1, YEAR2
-#, fuzzy
-#| msgid "translator-credits"
-msgctxt "_"
-msgid "translator-credits"
-msgstr ""
-"Lavande <lavande@thislove.cz.cc>, 2010\n"
-"Tao Wang <dancefire@gmail.com>, 2010\n"
-"lainme <lainme993@gmail.com>, 2011\n"
-"Guanhao Yin <yinguanhao@gmail.com>, 2011\n"
-"tuhaihe <wangdianjin@linuxdeepin.com>, 2012"
-
-#: C/index.page:8(info/title)
-#, fuzzy
-#| msgid "Empathy Internet Messenger"
-msgctxt "link"
-msgid "Empathy Internet Messenger"
-msgstr "Empathy 网络聊天工具"
-
-#: C/index.page:9(info/title)
-#, fuzzy
-#| msgid "Empathy Internet Messenger"
-msgctxt "text"
-msgid "Empathy Internet Messenger"
-msgstr "Empathy 网络聊天工具"
-
-#: C/index.page:20(credit/name) C/add-account.page:21(credit/name)
-#: C/audio-call.page:22(credit/name) C/audio-video.page:17(credit/name)
-#: C/create-account.page:19(credit/name)
-#: C/disable-account.page:21(credit/name)
-#: C/favorite-rooms.page:14(credit/name) C/geolocation.page:17(credit/name)
-#: C/geolocation-not-showing.page:17(credit/name)
-#: C/geolocation-privacy.page:17(credit/name)
-#: C/geolocation-supported.page:16(credit/name)
-#: C/geolocation-turn.page:18(credit/name)
-#: C/geolocation-what-is.page:18(credit/name)
-#: C/group-conversations.page:19(credit/name)
-#: C/hide-contacts.page:11(credit/name) C/import-account.page:23(credit/name)
-#: C/introduction.page:13(credit/name) C/irc-commands.page:10(credit/name)
-#: C/irc-join-pwd.page:17(credit/name) C/irc-join-room.page:16(credit/name)
-#: C/irc-manage.page:19(credit/name) C/irc-nick-password.page:18(credit/name)
-#: C/irc-send-file.page:16(credit/name)
-#: C/irc-start-conversation.page:15(credit/name)
-#: C/link-contacts.page:15(credit/name) C/prev-conv.page:17(credit/name)
-#: C/prob-conn-acctdisabled.page:19(credit/name)
-#: C/prob-conn-auth.page:21(credit/name) C/prob-conn-name.page:18(credit/name)
-#: C/prob-conn-neterror.page:19(credit/name)
-#: C/remove-account.page:19(credit/name) C/salut-protocol.page:18(credit/name)
-#: C/send-file.page:21(credit/name) C/set-custom-status.page:19(credit/name)
-#: C/share-desktop.page:14(credit/name) C/status-icons.page:16(credit/name)
-#: C/video-call.page:25(credit/name)
-msgid "Milo Casagrande"
-msgstr "Milo Casagrande"
-
-#: C/index.page:24(license/p) C/account-irc.page:20(license/p)
-#: C/account-jabber.page:18(license/p) C/accounts-window.page:22(license/p)
-#: C/add-account.page:29(license/p) C/add-contact.page:22(license/p)
-#: C/audio-call.page:31(license/p) C/audio-video.page:21(license/p)
-#: C/change-status.page:28(license/p) C/create-account.page:23(license/p)
-#: C/disable-account.page:29(license/p) C/favorite-rooms.page:18(license/p)
-#: C/geolocation.page:21(license/p)
-#: C/geolocation-not-showing.page:21(license/p)
-#: C/geolocation-privacy.page:21(license/p)
-#: C/geolocation-supported.page:20(license/p)
-#: C/geolocation-turn.page:22(license/p)
-#: C/geolocation-what-is.page:22(license/p)
-#: C/group-conversations.page:23(license/p) C/hide-contacts.page:15(license/p)
-#: C/import-account.page:31(license/p) C/introduction.page:17(license/p)
-#: C/irc-commands.page:14(license/p) C/irc-join-pwd.page:21(license/p)
-#: C/irc-join-room.page:20(license/p) C/irc-manage.page:28(license/p)
-#: C/irc-nick-password.page:22(license/p) C/irc-send-file.page:20(license/p)
-#: C/irc-start-conversation.page:19(license/p)
-#: C/link-contacts.page:19(license/p) C/overview.page:20(license/p)
-#: C/prev-conv.page:25(license/p) C/prob-conn-acctdisabled.page:23(license/p)
-#: C/prob-conn-auth.page:25(license/p) C/prob-conn-name.page:22(license/p)
-#: C/prob-conn-neterror.page:23(license/p) C/prob-conn.page:18(license/p)
-#: C/remove-account.page:23(license/p) C/salut-protocol.page:22(license/p)
-#: C/send-file.page:25(license/p) C/send-message.page:21(license/p)
-#: C/set-custom-status.page:23(license/p) C/share-desktop.page:22(license/p)
-#: C/status-icons.page:24(license/p) C/video-call.page:34(license/p)
-msgid "Creative Commons Share Alike 3.0"
-msgstr "知识共享-相同方式共享 (Creative Commons Share Alike) 3.0"
-
-#: C/index.page:30(media/span)
-#, fuzzy
-#| msgid "Empathy Internet Messenger"
-msgid "Empathy Internet Messenger logo"
-msgstr "Empathy 网络聊天工具"
-
-#: C/index.page:28(page/title)
-#, fuzzy
-#| msgid "Empathy Internet Messenger"
-msgid "<_:media-1/> Empathy Internet Messenger"
-msgstr "Empathy 网络聊天工具"
-
-#: C/index.page:36(section/title)
-msgid "Account Management"
-msgstr "帐号管理"
-
-#: C/index.page:40(section/title)
-msgid "Contact Management"
-msgstr "联系人管理"
-
-#: C/index.page:44(section/title)
-msgid "Text Conversations"
-msgstr "文字聊天"
-
-#: C/index.page:48(section/title)
-msgid "Audio and Video Conversations"
-msgstr "语音和视频聊天"
-
-#: C/index.page:52(section/title)
-msgid "Advanced Actions"
-msgstr "高级操作"
-
-#: C/index.page:56(section/title) C/irc-manage.page:64(section/title)
-msgid "Common Problems"
-msgstr "常见问题"
-
-#. This is a reference to an external file such as an image or video. When
-#. the file changes, the md5 hash will change to let you know you need to
-#. update your localized copy. The msgstr is not used at all. Set it to
-#. whatever you like once you have updated your copy of the file.
-#: C/account-irc.page:106(media)
-#, fuzzy
-#| msgid "@@image: 'figures/gtk-add.png'; md5=a856b499d8d4681b70b5ce6f25bc5c6d"
-msgctxt "_"
-msgid ""
-"external ref='figures/gtk-add.png' md5='a856b499d8d4681b70b5ce6f25bc5c6d'"
-msgstr "@@image: 'figures/gtk-add.png'; md5=a856b499d8d4681b70b5ce6f25bc5c6d"
-
-#. This is a reference to an external file such as an image or video. When
-#. the file changes, the md5 hash will change to let you know you need to
-#. update your localized copy. The msgstr is not used at all. Set it to
-#. whatever you like once you have updated your copy of the file.
-#.
-#. This is a reference to an external file such as an image or video. When
-#. the file changes, the md5 hash will change to let you know you need to
-#. update your localized copy. The msgstr is not used at all. Set it to
-#. whatever you like once you have updated your copy of the file.
-#.
-#. This is a reference to an external file such as an image or video. When
-#. the file changes, the md5 hash will change to let you know you need to
-#. update your localized copy. The msgstr is not used at all. Set it to
-#. whatever you like once you have updated your copy of the file.
-#.
-#. This is a reference to an external file such as an image or video. When
-#. the file changes, the md5 hash will change to let you know you need to
-#. update your localized copy. The msgstr is not used at all. Set it to
-#. whatever you like once you have updated your copy of the file.
-#: C/account-irc.page:109(media) C/prob-conn-auth.page:58(media)
-#: C/prob-conn-name.page:44(media) C/prob-conn-neterror.page:59(media)
-#, fuzzy
-#| msgid ""
-#| "@@image: 'figures/gtk-edit.png'; md5=4f21b451732817be0604fe3e2c8da98b"
-msgctxt "_"
-msgid ""
-"external ref='figures/gtk-edit.png' md5='4f21b451732817be0604fe3e2c8da98b'"
-msgstr "@@image: 'figures/gtk-edit.png'; md5=4f21b451732817be0604fe3e2c8da98b"
-
-#. This is a reference to an external file such as an image or video. When
-#. the file changes, the md5 hash will change to let you know you need to
-#. update your localized copy. The msgstr is not used at all. Set it to
-#. whatever you like once you have updated your copy of the file.
-#: C/account-irc.page:112(media)
-#, fuzzy
-#| msgid ""
-#| "@@image: 'figures/gtk-remove.png'; md5=215e3a325a3dd619874e35c30a018bb6"
-msgctxt "_"
-msgid ""
-"external ref='figures/gtk-remove.png' md5='215e3a325a3dd619874e35c30a018bb6'"
-msgstr ""
-"@@image: 'figures/gtk-remove.png'; md5=215e3a325a3dd619874e35c30a018bb6"
-
-#: C/account-irc.page:8(info/desc)
-msgid "Additional information necessary for connecting to IRC networks."
-msgstr "连接 IRC 网络需要的额外信息。"
-
-#: C/account-irc.page:16(credit/name) C/account-jabber.page:14(credit/name)
-#: C/accounts-window.page:18(credit/name) C/add-account.page:25(credit/name)
-#: C/disable-account.page:25(credit/name)
-#: C/import-account.page:27(credit/name) C/prev-conv.page:21(credit/name)
-#: C/status-icons.page:20(credit/name)
-msgid "Shaun McCance"
-msgstr "Shaun McCance"
-
-#: C/account-irc.page:31(page/title)
-msgid "IRC account details"
-msgstr "IRC 帐号详情"
-
-#: C/account-irc.page:33(page/p)
-msgid ""
-"IRC accounts require different information than many other types of "
-"accounts. To create an IRC account, you must specify at least an IRC network "
-"and a nickname. This page details the information you can provide for an IRC "
-"account."
-msgstr ""
-"IRC 帐号需要与其他类型的帐号不同的信息。要创建 IRC 帐号,您至少需要指定一个 "
-"IRC 网络和一个昵称。本页详细介绍了您可以为一个 IRC 帐号提供的信息。"
-
-#: C/account-irc.page:39(note/p) C/irc-manage.page:42(note/p)
-msgid ""
-"You must have the <sys>telepathy-idle</sys> package installed to use IRC in "
-"<app>Empathy</app>."
-msgstr ""
-"要在 <app>Empathy</app> 中使用 IRC,您必须安装 <sys>telepathy-idle</sys> 包。"
-
-#: C/account-irc.page:45(item/title) C/account-irc.page:120(item/title)
-msgid "<gui>Network</gui>"
-msgstr ""
-
-#: C/account-irc.page:46(item/p)
-msgid ""
-"IRC is an open system that allows people to run separate IRC networks. Each "
-"network is distinct and has its own users and chat rooms. <app>Empathy</app> "
-"lists the most popular networks in the <gui>Network</gui> drop-down list. "
-"You can add additional networks. See <link xref=\"#networks\"/> below."
-msgstr ""
-"IRC 是一种开放的系统,它允许人们运行各自的 IRC 网络。每个网络是独立的,有特有"
-"的用户和聊天室。<app>Empathy</app> 在 <gui>网络</gui> 下拉列表中列出了一些最"
-"流行的网络。您可以添加其他的网络。参看下面的<link xref=\"#networks\"/>。"
-
-#: C/account-irc.page:53(item/title)
-msgid "<gui>Nickname</gui>"
-msgstr ""
-
-#: C/account-irc.page:54(item/p)
-msgid ""
-"Your nickname is your unique name on the IRC network. Only one person on a "
-"network may use a given nickname. If you get an error message that says "
-"<link xref=\"prob-conn-name\" role=\"error-msg\"/> you will need to change "
-"your nickname."
-msgstr ""
-"您的昵称是您在 IRC 网络上的唯一性的名字。只有一个人可以使用某个特定的昵称。如"
-"果您得到<link xref=\"prob-conn-name\" role=\"error-msg\"/>错误信息,您需要改"
-"变您的昵称。"
-
-#: C/account-irc.page:60(item/title)
-msgid "<gui>Password</gui>"
-msgstr ""
-
-#: C/account-irc.page:61(item/p)
-msgid ""
-"Some servers, particularly those on private networks, require a password to "
-"connect. If you are authorized to use the network, the network "
-"administrators should provide you with a password."
-msgstr ""
-"一些服务器,尤其是那些私有网络,需要密码才能连接。如果您被授权使用,网络的管"
-"理员应当为您提供了密码。"
-
-#: C/account-irc.page:65(note/title)
-msgid "NickServ Passwords"
-msgstr "NickServ 密码"
-
-#: C/account-irc.page:66(note/p)
-msgid ""
-"On some networks, nicknames can be registered using a service known as "
-"NickServ. <app>Empathy</app> does not directly support nickname passwords. "
-"On some networks, including the popular freenode network, server passwords "
-"are automatically forwarded to NickServ, allowing you to set this field to "
-"identify yourself with NickServ. See <link xref=\"irc-nick-password\"/> for "
-"more details."
-msgstr ""
-"在某些网络上,昵称可以通过一种叫做 NickServ 的服务被注册。<app>Empathy</app> "
-"并不直接支持昵称密码。在某些网络上,包括流行的 freenode 网络,服务器密码会被"
-"自动转发给 NickServ,从而允许您设置此项向 NickServ 证明您自己。更多信息参见"
-"<link xref=\"irc-nick-password\"/>。"
-
-#: C/account-irc.page:76(item/title)
-#, fuzzy
-#| msgid "Real name"
-msgid "<gui>Real name</gui>"
-msgstr "真实姓名"
-
-#: C/account-irc.page:77(item/p)
-msgid ""
-"You can provide your real name in addition to your nickname. Other users "
-"will be able to see this when they view your information."
-msgstr ""
-"除了昵称,您还可以提供您的真实姓名。其他用户查看您的信息时可以看到您的真实姓"
-"名。"
-
-#: C/account-irc.page:81(item/title)
-#, fuzzy
-#| msgid "Select <gui>Edit Custom Message</gui>."
-msgid "<gui>Quit message</gui>"
-msgstr "选择<gui>编辑自定义消息</gui>。"
-
-#: C/account-irc.page:82(item/p)
-msgid ""
-"When you go offline, a quit message is sent to all the chat rooms you’re in "
-"and to all the users you’re having a private conversation with. Use this "
-"field to provide a custom quit message."
-msgstr ""
-"当您离线时,一个退出消息会被发送给所有您加入的聊天室和正在与您进行私人聊天的"
-"用户。设置此项以提供自定义的退出消息。"
-
-#: C/account-irc.page:94(info/title)
-#, fuzzy
-#| msgid "IRC Networks"
-msgctxt "link"
-msgid "IRC Networks"
-msgstr "IRC 网络"
-
-#: C/account-irc.page:97(section/title)
-msgid "Networks"
-msgstr "网络"
-
-#: C/account-irc.page:99(section/p)
-msgid ""
-"<app>Empathy</app> includes a list of popular IRC networks. If you wish to "
-"another IRC network, you can add it to the list. You can also modify "
-"networks and remove them from the list."
-msgstr ""
-"<app>Empathy</app> 包括了一份常用 IRC 网络的列表。如果您想使用其他的 IRC 网"
-"络,您可以将其添加到这个列表中。您也可以修改网络或从列表中删除网络。"
-
-#: C/account-irc.page:104(item/p)
-msgid ""
-"To add a network to the list, click <media type=\"image\" mime=\"image/png\" "
-"src=\"figures/gtk-add.png\" width=\"16\" height=\"16\">Add</media>."
-msgstr ""
-"要想列表中添加网络,点击<media type=\"image\" mime=\"image/png\" src="
-"\"figures/gtk-add.png\" width=\"16\" height=\"16\">添加</media>。"
-
-#: C/account-irc.page:107(item/p)
-msgid ""
-"To modify a network in the list, select the network and click <media type="
-"\"image\" mime=\"image/png\" src=\"figures/gtk-edit.png\" width=\"16\" "
-"height=\"16\">Edit</media>."
-msgstr ""
-"要修改列表中的网络,选择那个网络并点击<media type=\"image\" mime=\"image/png"
-"\" src=\"figures/gtk-edit.png\" width=\"16\" height=\"16\">编辑</media>。"
-
-#: C/account-irc.page:110(item/p)
-msgid ""
-"To remove a network from the list, select the network and click <media type="
-"\"image\" mime=\"image/png\" src=\"figures/gtk-remove.png\" width=\"16\" "
-"height=\"16\">Remove</media>."
-msgstr ""
-"要从列表中删除网络,选择要删除的网络并点击<media type=\"image\" mime=\"image/"
-"png\" src=\"figures/gtk-remove.png\" width=\"16\" height=\"16\">删除</"
-"media>。"
-
-#: C/account-irc.page:115(section/p)
-msgid ""
-"When adding or modifying a network, you can enter the following information:"
-msgstr "在添加或修改一个网络时,您可以输入下列信息:"
-
-#: C/account-irc.page:121(item/p)
-msgid ""
-"This is the name of the network as you want it to appear in the list of "
-"networks."
-msgstr "这是您希望网络显示在网络列表中的名字。"
-
-#: C/account-irc.page:125(item/title)
-#, fuzzy
-#| msgid "<gui>Contact List</gui> window"
-msgid "<gui>Charset</gui>"
-msgstr "<gui>联系人列表</gui>窗口"
-
-#: C/account-irc.page:126(item/p)
-msgid ""
-"This specifies the character encoding that is typically used on this "
-"network. A character encoding is a specific way of recording characters "
-"internally in a computer. There are many character encodings, and you need "
-"to use the same character encoding as other users to see their messages "
-"correctly."
-msgstr ""
-"这指明了网络上常用的字符编码。字符编码是计算机内部记录字符的一种特定方式。有"
-"许多不同的字符编码,您需要与其他用户使用同样的字符编码才能正确地看到他们的信"
-"息。"
-
-#: C/account-irc.page:135(item/p)
-msgid ""
-"By default, <app>Empathy</app> uses UTF-8, a modern character encoding that "
-"can handle text from most of the world's languages. Another common encoding "
-"for English and some other Western languages is ISO-8859-1."
-msgstr ""
-"默认地,<app>Empathy</app> 使用 UTF-8,一种能够处理世界上大多数语言的现代化的"
-"字符编码。简体中文常用的编码还有 GB18030,GBK 和 GB2312。"
-
-#: C/account-irc.page:141(item/title)
-msgid "<gui>Servers</gui>"
-msgstr ""
-
-#: C/account-irc.page:142(item/p)
-msgid ""
-"An IRC network may have many servers you can connect to. When you are "
-"connected to a server on a particular network, you can communicate with all "
-"users on all other servers on that network. You can add and remove servers "
-"for this network using the <gui>Add</gui> and <gui>Remove</gui> buttons."
-msgstr ""
-"一个 IRC 网络可能有许多服务器供您连接。当您连接到一个特定网络的服务器后,您可"
-"以和同一网络中所有服务器的用户交流。您可以为一个网络添加或删除服务器,使用"
-"<gui>添加</gui>或<gui>删除</gui>按钮。"
-
-#: C/account-irc.page:147(item/p)
-msgid ""
-"When a server is selected, click the field under <gui>Server</gui> or "
-"<gui>Port</gui> to edit it. Alternatively, use the left and right arrow keys "
-"to focus the field, and press the space bar to begin editing."
-msgstr ""
-"当一个服务器被选择后,点击<gui>服务器</gui>或<gui>端口</gui>下方的字段来编辑"
-"它。或者,使用左右方向键来聚焦某个字段,并按空格键开始编辑。"
-
-#: C/account-irc.page:151(item/p)
-msgid ""
-"Select the check box in the <gui>SSL</gui> column to encrypt all "
-"communication with a server. Note that this does not prevent other users on "
-"the network from seeing what you write on public chat rooms."
-msgstr ""
-"选择 <gui>SSL</gui> 列中的复选框以加密与服务器间的所有通讯。注意这并不能意味"
-"着其他用户不能看到您在公共聊天室中的发言。"
-
-#: C/account-jabber.page:7(info/desc)
-msgid "Advanced options for Jabber and Google Talk accounts."
-msgstr "Jabber 和 Google Talk 帐号的高级选项。"
-
-#: C/account-jabber.page:29(page/title)
-msgid "Jabber account details"
-msgstr "Jabber 帐号详情"
-
-#: C/account-jabber.page:31(page/p)
-msgid ""
-"Most Jabber accounts will require only a login ID and a password to connect. "
-"For some accounts or on certain types of networks, you may need to enter "
-"additional information in the <gui>Advanced</gui> section. Normally, you "
-"will not need to use the advanced options below. For general instructions on "
-"adding an account, see <link xref=\"add-account\"/>."
-msgstr ""
-"大多 Jabber 帐号只需要登录 ID 和密码就可以连接。但对于某些帐号或某些网络,您"
-"可能需要在<gui>高级</gui>选项卡中输入一些额外的信息。通常,您不需要使用下面的"
-"这些高级选项。添加帐号的一般指导参见<link xref=\"add-account\"/>。"
-
-#: C/account-jabber.page:39(note/p)
-msgid ""
-"Google Talk is a type of Jabber account. These instructions hold for Google "
-"Talk accounts as well."
-msgstr "Google Talk 是一种 Jabber 帐号。这些指南对 Google Talk 帐号同样适用。"
-
-#: C/account-jabber.page:45(item/title)
-#, fuzzy
-#| msgid "Encryption required (TLS/SSL)"
-msgid "<gui>Encryption required (TLS/SSL)</gui>"
-msgstr "需要加密(TLS/SSL)"
-
-#: C/account-jabber.page:46(item/title)
-#, fuzzy
-#| msgid "Ignore SSL certificate errors"
-msgid "<gui>Ignore SSL certificate errors</gui>"
-msgstr "忽略 SSL 证书错误"
-
-#: C/account-jabber.page:47(item/p)
-msgid ""
-"Whenever possible, communication between <app>Empathy</app> and the Jabber "
-"server is encrypted. If encrypted communication is not possible, messages "
-"may be sent unencrypted. Select <gui>Encryption required</gui> to prevent "
-"<app>Empathy</app> from communicating with the Jabber server when encryption "
-"is not possible."
-msgstr ""
-"只要有可能,<app>Empathy</app> 与 Jabber 服务器之间的通讯就会被加密。如果不可"
-"能加密,消息就可能被明文发送。选择<gui>需要加密</gui>以阻止不能加密时 "
-"<app>Empathy</app> 与 Jabber 服务器进行明文通讯。"
-
-#: C/account-jabber.page:52(item/p)
-msgid ""
-"Some Jabber servers may encrypt data using invalid certificates, or using "
-"certificates from unknown authorities. If you trust the server you are "
-"connecting to, you can select <gui>Ignore SSL certificate errors</gui> to "
-"allow encrypted communication with invalid certificates."
-msgstr ""
-"有些 Jabber 服务器可能使用不合法的证书加密数据,或者使用来自未知的证书认证机"
-"构的证书。如果您信任您的服务器,您可以选择<gui>忽略 SSL 证书错误</gui>以允许"
-"使用不合法的证书进行加密通讯。"
-
-#: C/account-jabber.page:59(item/title)
-msgid "<gui>Resource</gui>"
-msgstr ""
-
-#: C/account-jabber.page:60(item/title)
-msgid "<gui>Priority</gui>"
-msgstr ""
-
-#: C/account-jabber.page:61(item/p)
-msgid ""
-"If you have multiple applications (for instance, on separate computers) "
-"connected to your account at the same time, you can set a resource to "
-"uniquely identify each one. By default, <app>Empathy</app> will use "
-"<input>Telepathy</input> as the resource."
-msgstr ""
-"如果您有多个应用程序(比如,在另一台计算机上)同时连接了您的帐号,您可以设置“资"
-"源”以唯一地标识每一个连接的程序。默认地,<app>Empathy</app> 会使用 "
-"<input>Telepathy</input> 作为“资源”。"
-
-#: C/account-jabber.page:65(item/p)
-msgid ""
-"You can set the priority to specify which application should receive "
-"incoming messages from your contacts. New messages will be sent to the "
-"application with the highest priority."
-msgstr ""
-"您可以设置优先级以指定哪一个程序优先收到您的联系人发送来的消息。新的消息会被"
-"发送给优先级最高的程序。"
-
-#: C/account-jabber.page:70(item/title)
-#, fuzzy
-#| msgid "Override server settings"
-msgid "<gui>Override server settings</gui>"
-msgstr "覆盖服务器设置"
-
-#: C/account-jabber.page:71(item/p)
-msgid ""
-"<app>Empathy</app> will use default settings to connect to the Jabber server "
-"based on your login ID. For some Jabber servers, you will need to enter "
-"custom server settings manually. These settings should be provided for you "
-"by your Jabber provider."
-msgstr ""
-"<app>Empathy</app> 会根据您的登录 ID 以默认的设置连接 Jabber 服务器。对某些 "
-"Jabber 服务器,您需要人工输入一些服务器设置。这些设置应该由您的 Jabber 服务提"
-"供商提供。"
-
-#: C/accounts-window.page:11(info/desc)
-msgid "Add, modify, and delete accounts."
-msgstr "添加、修改和删除帐号。"
-
-#: C/accounts-window.page:33(page/title)
-msgid "Accounts Window"
-msgstr "帐号窗口"
-
-#: C/accounts-window.page:35(page/p)
-msgid ""
-"The <gui>Accounts</gui> window allows you to add, modify, and delete "
-"accounts."
-msgstr "<gui>帐号</gui>窗口允许您添加、修改和删除帐号。"
-
-#: C/accounts-window.page:43(section/title)
-msgid "Account Details"
-msgstr "帐号详细信息"
-
-#: C/accounts-window.page:44(section/p)
-msgid ""
-"For most types of accounts, you can simply enter a login ID and a password. "
-"Certain accounts or account types, however, may require additional "
-"information."
-msgstr ""
-"对于大多数的帐号,您只需要输入登录 ID 和密码。但有些帐号或有些类型的帐号可能"
-"需要额外的信息。"
-
-#: C/add-account.page:9(info/desc)
-msgid "Add a new account to <app>Empathy</app>."
-msgstr "向 <app>Empathy</app> 添加新帐号。"
-
-#: C/add-account.page:40(page/title)
-msgid "Add a new account"
-msgstr "添加一个新帐号"
-
-#: C/add-account.page:42(page/p)
-msgid ""
-"You can add instant messaging accounts from any supported service to "
-"communicate with all of your contacts in <app>Empathy</app>. For some "
-"account providers, these steps will also allow you to register for a new "
-"account. For more details, see <link xref=\"create-account\"/>."
-msgstr ""
-"您可以添加任何支持的服务的即时消息帐号,以在 <app>Empathy</app> 中与您的联系"
-"人交流。对于某些帐号提供商,这些步骤也允许您注册新帐号。更多细节参见<link "
-"xref=\"create-account\"/>。"
-
-#: C/add-account.page:49(item/p) C/disable-account.page:49(item/p)
-#: C/irc-nick-password.page:50(item/p) C/remove-account.page:43(item/p)
-#, fuzzy
-#| msgid ""
-#| "From the <gui>Contact List</gui> window, choose <guiseq><gui>Edit</"
-#| "gui><gui>Accounts</gui></guiseq>, or press <key>F4</key>."
-msgid ""
-"From the <gui>Contact List</gui> window, choose <guiseq><gui>Edit</gui> "
-"<gui>Accounts</gui></guiseq>, or press <key>F4</key>."
-msgstr ""
-"在<gui>联系人列表</gui>窗口中,选择<guiseq><gui>编辑</gui><gui>帐号</gui></"
-"guiseq>,或按<key>F4</key>。"
-
-# 这个在显示时,也是一个“+“,建议保留
-#: C/add-account.page:53(item/p)
-msgid "Click <gui style=\"button\">+</gui>."
-msgstr "点击<gui style=\"button\">+</gui>。"
-
-#: C/add-account.page:58(item/p)
-msgid ""
-"From the <gui>Protocol</gui> drop-down list, select the type of account you "
-"wish to add."
-msgstr "在<gui>协议</gui>下拉列表,选择您要创建的帐号类型。"
-
-#: C/add-account.page:62(item/p)
-msgid ""
-"If you do not already have a registered account, select <gui>Create a new "
-"account on the server</gui>. This feature is not available for all account "
-"types, and may not work with some account providers. See <link xref=\"create-"
-"account\"/> for more information."
-msgstr ""
-"如果您还没有注册帐号,选择<gui>在服务器上创建新的帐号</gui>。这个功能并不是对"
-"于每一种帐号都可用,也可能对于某些帐号提供商不可用。更多信息参见<link xref="
-"\"create-account\"/>。"
-
-#: C/add-account.page:69(item/p)
-msgid ""
-"Enter the required information. For most accounts, you will only need a "
-"login ID and a password. Some accounts may require additional information. "
-"See <link xref=\"accounts-window#details\"/>for more information."
-msgstr ""
-"输入必要的信息。对于大多数帐号,您只需要输入登录 ID 和密码。有些帐号可能需要"
-"更多信息。参见<link xref=\"accounts-window#details\"/>获取更多信息。"
-
-#: C/add-account.page:74(item/p) C/import-account.page:61(item/p)
-#: C/irc-nick-password.page:63(item/p)
-msgid "Click <gui style=\"button\">Apply</gui>."
-msgstr "点击<gui style=\"button\">应用</gui>。"
-
-#: C/add-account.page:81(note/p)
-msgid ""
-"To change the name that identifies the account in the <gui>Accounts</gui> "
-"window, select the account from the list on the left and either click on the "
-"name or press the space bar. Edit the account name and press <key>Enter</"
-"key> when you’re finished."
-msgstr ""
-"要改变帐号在<gui>帐号</gui>窗口中的作为标识的名字,在左侧的列表中选择帐号,然"
-"后点击名字或者按空格键。编辑帐号的名字,完成后按<key>Enter</key>。"
-
-#: C/add-contact.page:9(info/desc)
-msgid "Add someone to the contact list."
-msgstr "添加某人到联系人列表。"
-
-#: C/add-contact.page:18(credit/name) C/change-status.page:24(credit/name)
-#: C/prob-conn-acctdisabled.page:15(credit/name)
-#: C/prob-conn-auth.page:17(credit/name)
-#: C/prob-conn-neterror.page:15(credit/name) C/prob-conn.page:14(credit/name)
-#: C/send-file.page:17(credit/name) C/send-message.page:17(credit/name)
-msgid "Phil Bull"
-msgstr "Phil Bull"
-
-#: C/add-contact.page:33(page/title)
-msgid "Add someone to your list of contacts"
-msgstr "添加某人到您的联系人列表"
-
-#: C/add-contact.page:37(item/p)
-msgid "Choose <guiseq><gui>Chat</gui><gui>Add Contact</gui></guiseq>."
-msgstr "选择<guiseq><gui>聊天</gui><gui>添加联系人</gui></guiseq>。"
-
-#: C/add-contact.page:40(item/p)
-msgid ""
-"From the <gui>Account</gui> drop-down list, select the account you wish to "
-"use to connect to your contact. Your contact will need to be using the same "
-"service as the account you select."
-msgstr ""
-"在 <gui>帐号</gui> 下拉列表中,选择您用来与您的联系人联系的帐号。您的联系人需"
-"要使用与您选择的帐号相同的服务。"
-
-#: C/add-contact.page:45(item/p)
-msgid ""
-"In the <gui>Identifier</gui> field, enter your contact’s login ID, username, "
-"screen name, or other appropriate identifier for the service type."
-msgstr ""
-"在 <gui>标识符</gui> 一栏中,输入这种服务中您的联系人的登录 ID,用户名,显示"
-"名或其他合适的标识符。"
-
-#: C/add-contact.page:49(item/p)
-msgid ""
-"In the <gui>Alias</gui> field, type your contact’s name as you would like it "
-"to appear in your contact list."
-msgstr "在 <gui>别名</gui> 中,输入您希望这个联系人显示在联系人列表中的名字。"
-
-#: C/add-contact.page:53(item/p)
-msgid "Click <gui>Add</gui> to add the person to your list of contacts."
-msgstr "点击<gui>添加</gui>将此人添加到您的联系人列表。"
-
-#: C/add-contact.page:61(note/p)
-msgid ""
-"To add a new person to your list of contacts, you need to be connected to "
-"the Internet and to your account."
-msgstr "要添加联系人到您的联系人列表,您需要连接因特网和您的帐号。"
-
-#: C/audio-call.page:10(info/desc)
-msgid "Call your contacts over the Internet."
-msgstr "通过互联网呼叫您的联系人。"
-
-#: C/audio-call.page:26(credit/name) C/overview.page:16(credit/name)
-#: C/share-desktop.page:18(credit/name) C/video-call.page:29(credit/name)
-msgid "Ekaterina Gerasimova"
-msgstr "Ekaterina Gerasimova"
-
-#: C/audio-call.page:35(page/title)
-msgid "Start an audio conversation"
-msgstr "开始语音聊天"
-
-#: C/audio-call.page:37(page/p)
-#, fuzzy
-#| msgid ""
-#| "You can call your contacts and have an audio conversation with them. This "
-#| "features only works with certain types of accounts, and it requires the "
-#| "other person to have an application that supports audio calls."
-msgid ""
-"You can call your contacts and have an audio conversation with them. This "
-"features only works with certain types of accounts and it requires the other "
-"person to have an application that supports audio calls."
-msgstr ""
-"您可以呼叫您的联系人,与他们进行语音聊天。这个功能仅对于一些特定类型的帐号可"
-"用,并且需要另一个人使用的应用程序也支持语音呼叫。"
-
-#: C/audio-call.page:43(item/p)
-#, fuzzy
-#| msgid ""
-#| "Select the contact you want to have the conversation, and from the menu "
-#| "select <gui style=\"menuitem\">Audio Call</gui>."
-msgid ""
-"Right-click on the contact that you want to call and select <gui style="
-"\"menuitem\">Audio Call</gui>."
-msgstr ""
-"选择您想要交谈的联系人,然后在菜单中选择<gui style=\"menuitem\">语音呼叫</"
-"gui>。"
-
-#: C/audio-call.page:49(item/p) C/video-call.page:50(item/p)
-#, fuzzy
-#| msgid ""
-#| "A new window will open. When the connection is established, you will see "
-#| "<gui>Connected</gui> at the bottom of the window, along with the total "
-#| "conversation time."
-msgid ""
-"A new window will open. When the connection is established, you will see the "
-"total conversation time at the bottom of the window."
-msgstr ""
-"一个新窗口会被打开。连接建立后,您将在窗口底部看到<gui>已连接</gui>,以及总会"
-"话时间。"
-
-#: C/audio-call.page:55(item/p)
-#, fuzzy
-#| msgid ""
-#| "To end the conversation, click on <gui style=\"button\">Hang up</gui>."
-msgid ""
-"To end the conversation, click the <gui style=\"button\">hand up</gui> "
-"button."
-msgstr "点击<gui style=\"button\">挂断</gui>以结束会话。"
-
-#: C/audio-call.page:63(note/p)
-#, fuzzy
-#| msgid ""
-#| "To turn an audio conversation into a video conversation, choose "
-#| "<guiseq><gui style=\"menu\">Video</gui><gui style=\"menuitem\">Video On</"
-#| "gui></guiseq>."
-msgid ""
-"To turn an audio conversation into a video conversation, choose <guiseq><gui "
-"style=\"menu\">Video</gui> <gui style=\"menuitem\">Video On</gui></guiseq>."
-msgstr ""
-"要将语音会话转为视频会话,选择 <guiseq><gui style=\"menu\">视频</gui><gui "
-"style=\"menuitem\">视频开启</gui></guiseq>。"
-
-#: C/audio-call.page:71(section/title)
-msgid "Start an audio conversation with a meta-contact"
-msgstr "向一位元联系人发起语音会话"
-
-#: C/audio-call.page:74(item/p) C/send-message.page:53(item/p)
-#: C/video-call.page:68(item/p)
-msgid ""
-"From the <gui>Contact List</gui> window, right-click on the meta-contact."
-msgstr "在<gui>联系人列表</gui>窗口,右键点击该元联系人。"
-
-#: C/audio-call.page:79(item/p)
-msgid ""
-"Select the contact you want to have the conversation, and from the menu "
-"select <gui style=\"menuitem\">Audio Call</gui>."
-msgstr ""
-"选择您想要交谈的联系人,然后在菜单中选择<gui style=\"menuitem\">语音呼叫</"
-"gui>。"
-
-#: C/audio-call.page:86(note/p) C/send-message.page:65(note/p)
-#: C/video-call.page:80(note/p)
-msgid ""
-"To recognize if a contact is a <em>meta-contact</em>, move your mouse on a "
-"contact in the <gui>Contact List</gui> window, and stop over it for a "
-"second: a small pop-up message will appear showing the number of the "
-"contacts that form the meta-contact."
-msgstr ""
-"要识别一个联系人是否是<em>元联系人</em>,将您的鼠标移动到<gui>联系人列表</"
-"gui>窗口中的一个联系人上,并停留几秒钟:一个小弹出消息会显示这个元联系人是由"
-"几个联系人组成的。"
-
-#. This is a reference to an external file such as an image or video. When
-#. the file changes, the md5 hash will change to let you know you need to
-#. update your localized copy. The msgstr is not used at all. Set it to
-#. whatever you like once you have updated your copy of the file.
-#: C/audio-video.page:58(media)
-msgctxt "_"
-msgid "external ref='figures/audio-input-microphone.png' md5='__failed__'"
-msgstr ""
-
-#. This is a reference to an external file such as an image or video. When
-#. the file changes, the md5 hash will change to let you know you need to
-#. update your localized copy. The msgstr is not used at all. Set it to
-#. whatever you like once you have updated your copy of the file.
-#: C/audio-video.page:70(media)
-msgctxt "_"
-msgid "external ref='figures/camera-web.png' md5='__failed__'"
-msgstr ""
-
-#: C/audio-video.page:8(info/desc)
-msgid ""
-"Information on when it is possible to have an audio or video conversation."
-msgstr "语音或视频会话的条件。"
-
-#: C/audio-video.page:32(page/title)
-msgid "Audio and video support"
-msgstr "语音和视频支持"
-
-#: C/audio-video.page:34(page/p)
-msgid ""
-"You can only have audio and video conversation with contacts who are using "
-"an application which also supports this feature. When your contacts support "
-"audio or video conversations, you will see the following icons next to their "
-"names in the contact list:"
-msgstr ""
-"您的联系人也在使用支持语音和视频会话的程序时,您才可以和他们进行语音、视频会"
-"话。如果您的联系人可以进行语音或视频会话,您将在联系人列表中他们的姓名旁看到"
-"下列图标:"
-
-#: C/audio-video.page:43(td/p)
-msgid "Icon"
-msgstr "图标"
-
-#: C/audio-video.page:48(td/p)
-msgid "Description"
-msgstr "描述"
-
-#: C/audio-video.page:57(td/p)
-#, fuzzy
-#| msgid ""
-#| "Click the <media type=\"image\" mime=\"image/png\" src=\"figures/gtk-edit."
-#| "png\">edit</media> icon in the error message."
-msgid ""
-"<media type=\"image\" mime=\"image/png\" src=\"figures/audio-input-"
-"microphone.png\"> Icon for audio conversation </media>"
-msgstr ""
-"点击错误提示信息上的<media type=\"image\" mime=\"image/png\" src=\"figures/"
-"gtk-edit.png\">编辑</media>图标。"
-
-#: C/audio-video.page:64(td/p)
-msgid "The contact is able to have an audio conversation."
-msgstr "联系人可以进行语音聊天。"
-
-#: C/audio-video.page:69(td/p)
-#, fuzzy
-#| msgid ""
-#| "Click the <media type=\"image\" mime=\"image/png\" src=\"figures/gtk-edit."
-#| "png\">edit</media> icon in the error message."
-msgid ""
-"<media type=\"image\" mime=\"image/png\" src=\"figures/camera-web.png\"> "
-"Icon for video conversation </media>"
-msgstr ""
-"点击错误提示信息上的<media type=\"image\" mime=\"image/png\" src=\"figures/"
-"gtk-edit.png\">编辑</media>图标。"
-
-#: C/audio-video.page:76(td/p)
-msgid "The contact is able to have a video conversation."
-msgstr "联系人可以进行视频聊天。"
-
-#: C/audio-video.page:83(note/p)
-msgid ""
-"In order to have an audio conversation, you need to have a sound card that "
-"is supported by your operating system, and a working microphone."
-msgstr ""
-"要进行语音聊天,您需要有一块声卡,且您的操作系统必需支持它,还需要一个能正常"
-"工作的麦克风。"
-
-#: C/audio-video.page:87(note/p)
-msgid ""
-"In order to have a video conversation, you need to have a webcam that is "
-"supported by your operating system, and a working microphone."
-msgstr "要进行视频聊天,您需要操作系统支持的摄像头,及可以正常工作的麦克风。"
-
-#: C/audio-video.page:95(section/title)
-msgid "Supported Account Types"
-msgstr "支持的帐号类型"
-
-#: C/audio-video.page:97(section/p)
-msgid ""
-"You can only have audio and video conversations using accounts on certain "
-"supported services. The following table lists whether audio and video is "
-"supported for each type of account."
-msgstr ""
-"只有一些特定类型的帐号支持语音或视频聊天。下表列出了每种类型的帐号的语音、视"
-"频支持情况。"
-
-#: C/audio-video.page:102(note/p)
-msgid ""
-"Account types are provided by plugins. Your system may not have all of the "
-"following types available, or it may have types not listed here. Updated "
-"plugins may make audio or video conversations possible on account types that "
-"are listed as unsupported here."
-msgstr ""
-"帐号类型是由插件提供的。您的系统上不一定有以下列出的全部类型,也可能有一些类"
-"型没有在下面列出。插件的升级可能使下表中不支持语音或视频的帐号类型获得支持。"
-
-#: C/audio-video.page:128(td/p)
-msgid "Service"
-msgstr "服务"
-
-#: C/audio-video.page:129(td/p)
-msgid "Audio"
-msgstr "语音"
-
-#: C/audio-video.page:130(td/p)
-msgid "Video"
-msgstr "视频"
-
-#: C/audio-video.page:135(td/p)
-msgid "AIM"
-msgstr "AIM"
-
-#: C/audio-video.page:136(td/p) C/audio-video.page:137(td/p)
-#: C/audio-video.page:141(td/p) C/audio-video.page:142(td/p)
-#: C/audio-video.page:146(td/p) C/audio-video.page:147(td/p)
-#: C/audio-video.page:156(td/p) C/audio-video.page:157(td/p)
-#: C/audio-video.page:161(td/p) C/audio-video.page:162(td/p)
-#: C/audio-video.page:166(td/p) C/audio-video.page:167(td/p)
-#: C/audio-video.page:181(td/p) C/audio-video.page:182(td/p)
-#: C/audio-video.page:186(td/p) C/audio-video.page:187(td/p)
-#: C/audio-video.page:191(td/p) C/audio-video.page:192(td/p)
-#: C/audio-video.page:196(td/p) C/audio-video.page:197(td/p)
-#: C/audio-video.page:201(td/p) C/audio-video.page:202(td/p)
-#: C/audio-video.page:211(td/p) C/audio-video.page:212(td/p)
-#: C/audio-video.page:216(td/p) C/audio-video.page:217(td/p)
-msgid "No"
-msgstr "否"
-
-#: C/audio-video.page:140(td/p)
-msgid "Facebook Chat"
-msgstr "Facebook 聊天"
-
-#: C/audio-video.page:145(td/p)
-msgid "gadugadu"
-msgstr "gadugadu"
-
-#: C/audio-video.page:150(td/p)
-msgid "Google Talk"
-msgstr "Google Talk"
-
-#: C/audio-video.page:151(td/p) C/audio-video.page:152(td/p)
-#: C/audio-video.page:171(td/p) C/audio-video.page:172(td/p)
-#: C/audio-video.page:176(td/p) C/audio-video.page:177(td/p)
-#: C/audio-video.page:206(td/p) C/audio-video.page:207(td/p)
-msgid "Yes"
-msgstr "是"
-
-#: C/audio-video.page:155(td/p)
-msgid "Groupwise"
-msgstr "Groupwise"
-
-#: C/audio-video.page:160(td/p)
-msgid "ICQ"
-msgstr "ICQ"
-
-#: C/audio-video.page:165(td/p) C/create-account.page:107(section/title)
-msgid "IRC"
-msgstr "IRC"
-
-#: C/audio-video.page:170(td/p) C/create-account.page:60(section/title)
-msgid "Jabber"
-msgstr "Jabber"
-
-#: C/audio-video.page:175(td/p)
-msgid "MSN"
-msgstr "MSN"
-
-#: C/audio-video.page:180(td/p)
-msgid "myspace"
-msgstr "myspace"
-
-#: C/audio-video.page:185(td/p)
-msgid "qq"
-msgstr "qq"
-
-#: C/audio-video.page:190(td/p) C/create-account.page:78(section/title)
-msgid "People Nearby"
-msgstr "附近的人"
-
-#: C/audio-video.page:195(td/p)
-msgid "sametime"
-msgstr "sametime"
-
-#: C/audio-video.page:200(td/p)
-msgid "silc"
-msgstr "silc"
-
-#: C/audio-video.page:205(td/p) C/create-account.page:89(section/title)
-msgid "SIP"
-msgstr "SIP"
-
-#: C/audio-video.page:210(td/p)
-msgid "Yahoo!"
-msgstr "Yahoo!"
-
-#: C/audio-video.page:215(td/p)
-msgid "zephyr"
-msgstr "zephyr"
-
-#: C/change-status.page:9(info/desc)
-msgid "Change your status to advertise your availability to your contacts."
-msgstr "改变您的状态以向您的联系人表明您是否闲暇。"
-
-#: C/change-status.page:39(page/title)
-msgid "Change your status"
-msgstr "改变您的状态"
-
-#: C/change-status.page:41(page/p)
-msgid ""
-"You can set your status to indicate your availability to your contacts. "
-"<app>Empathy</app> allows you to select from a list of defined statuses."
-msgstr ""
-"您可以改变您的状态,从而向联系人表明您现在是否闲暇。<app>Empathy</app> 允许您"
-"从一些定义好的状态中选择一个。"
-
-#: C/change-status.page:46(item/p)
-msgid ""
-"Click on the drop-down list at the top of the <gui>Contact List</gui> window."
-msgstr "点击 <gui>联系人列表</gui> 窗口顶部的下拉列表。"
-
-#: C/change-status.page:51(item/p)
-msgid "Select a status from the list."
-msgstr "从列表中选择一个状态。"
-
-#: C/change-status.page:57(page/p)
-msgid ""
-"See <link xref=\"status-icons\"/> for a list of the built-in statuses and "
-"what they mean. You can also <link xref=\"set-custom-status\">add custom "
-"status messages</link> to provide more information about your availability "
-"to your contacts."
-msgstr ""
-"内置状态及其含义参见<link xref=\"status-icons\"/>。您也可以<link xref=\"set-"
-"custom-message\">添加自定义消息</link>来向您的联系人提供更多有关您当前状态的"
-"信息。"
-
-#: C/change-status.page:63(note/p)
-msgid ""
-"If you do not use your computer for a while, or if the screensaver is on, "
-"the status will be automatically set to Away."
-msgstr ""
-"如果您一段时间不使用计算机,或屏幕保护开始运行,您的状态会自动变为“离开”。"
-
-#: C/create-account.page:9(info/desc)
-msgid "Register for an account with one of the supported messaging services."
-msgstr "为某种支持的服务注册帐号。"
-
-#: C/create-account.page:34(page/title)
-msgid "Register for a new account"
-msgstr "注册一个新帐号"
-
-#: C/create-account.page:36(page/p)
-msgid ""
-"Most account types require you to create an account with a account provider "
-"before you can connect using instant messaging applications like "
-"<app>Empathy</app>. With some account providers, you can use <app>Empathy</"
-"app> to register for a new account, using the same steps as you would to "
-"<link xref=\"add-account\">add an account</link>."
-msgstr ""
-"大多帐号类型需要您在使用 <app>Empathy</app> 这样的即时通讯软件连接之前先建立"
-"帐号。但对于某些帐号提供商,您可以使用 <app>Empathy</app> 来注册新帐号,使用"
-"与 <link xref=\"add-account\">添加帐号</link> 相同的步骤。"
-
-#: C/create-account.page:42(page/p)
-msgid ""
-"This page provides information on creating a new account for various types "
-"of accounts. Your account provider should give you a login ID and a "
-"password, as well as any additional information you need to connect using "
-"<app>Empathy</app>."
-msgstr ""
-"这一页是关于建立各种类型的帐号的。您应当已经从您的帐号提供商那里得到了登录 "
-"ID 和密码,以及其他使用 <app>Empathy</app> 连接这个帐号需要的信息。"
-
-#: C/create-account.page:47(section/title)
-msgid "Facebook"
-msgstr "Facebook"
-
-#: C/create-account.page:48(section/p)
-msgid ""
-"Facebook is one of the most-used social networks. It allows users to create "
-"their own profile and to communicate with their friends."
-msgstr ""
-"Facebook 是最常用的社交网络之一。它允许用户对自己进行个性化的描述并与朋友们交"
-"流。"
-
-#: C/create-account.page:52(section/p)
-msgid ""
-"To use Facebook to communicate with your friends, you will need to create a "
-"new account from the website: <link href=\"http://www.facebook.com\">www."
-"facebook.com</link>."
-msgstr ""
-"要使用 Facebook 与您的朋友们交流,您需要在其网站上建立一个新帐号:<link href="
-"\"http://www.facebook.com\">www.facebook.com</link>。"
-
-#: C/create-account.page:62(section/p)
-msgid ""
-"Jabber is an open instant messaging system. Like email, Jabber allows you to "
-"choose your account provider and communicate with all other Jabber users, "
-"regardless of their account provider."
-msgstr ""
-"Jabber 是一种开放的即时通讯系统。像 email 一样,Jabber 允许您选择帐号提供商,"
-"并与其他 Jabber 用户交流,无论他们使用哪里帐号提供商。"
-
-#: C/create-account.page:66(section/p)
-msgid ""
-"You will need to create a new account with a Jabber provider. There are many "
-"free providers; one popular provider is <link href=\"http://register.jabber."
-"org/\">Jabber.org</link>."
-msgstr ""
-"您需要在某个 Jabber 服务提供商那里建立帐号。有许多 Jabber 服务提供商,<link "
-"href=\"http://register.jabber.org/\">Jabber.org</link> 是很流行的一个。"
-
-#: C/create-account.page:71(note/p)
-msgid ""
-"If you use Google Mail or Google Talk, you already have a Jabber account. "
-"Google Talk is a Jabber service. Simply use your Google Mail address and "
-"password in <app>Empathy</app> to connect."
-msgstr ""
-"如果您使用 Google Mail 或者 Google Talk,那么您已经拥有 Jabber 帐号了。"
-"Google Talk 就是一个 Jabber 服务。您只需要使用您的 Google Mail 地址和密码在 "
-"<app>Empathy</app> 中连接。"
-
-#: C/create-account.page:80(section/p)
-msgid ""
-"You do not need to create an account with a service provider to use this "
-"feature. This service works whenever you are connected to a local network, "
-"such as a wireless hotspot. It automatically finds all other users on the "
-"network who are also using this service."
-msgstr ""
-"要使用这个服务,您并不需要在某个服务提供商那里创建帐号,只需要连接到一个本地"
-"网络,比如一个无线热点。它会自动发现网络中使用这个服务的其他用户。"
-
-#: C/create-account.page:85(section/p)
-msgid "For more information, see <link xref=\"salut-protocol\"/>."
-msgstr "更多信息参见<link xref=\"salut-protocol\"/>。"
-
-#: C/create-account.page:91(section/p)
-msgid ""
-"SIP is an open system which allows users to have audio and video "
-"conversations over the Internet. You need to create an account with a SIP "
-"provider. You can communicate with all other SIP users, regardless of which "
-"SIP provider they use."
-msgstr ""
-"SIP 是一种允许用户通过互联网进行语音和视频会话的开放系统。您需要在某个 SIP 服"
-"务提供商处创建帐号。您可以和其他的 SIP 用户交流,无论他们的 SIP 服务提供商与"
-"您是否相同。"
-
-#: C/create-account.page:97(note/p)
-msgid ""
-"Due to technical differences, the free <link href=\"https://www.ekiga.net/"
-"index.php?page=register\">Ekiga.net</link> service does not currently work "
-"with <app>Empathy</app>."
-msgstr ""
-"由于技术上的差别,免费的 <link href=\"https://www.ekiga.net/index.php?"
-"page=register\">Ekiga.net</link> 服务目前在 <app>Empathy</app> 中还不能使用。"
-
-#: C/create-account.page:102(section/p)
-msgid ""
-"Some SIP providers allow you to call normal phones from your computer. "
-"Generally, you will need to subscribe to a paid service for this feature."
-msgstr ""
-"有些 SIP 服务提供商允许用您的计算机呼叫一般的电话。通常,您需要订阅某种付费服"
-"务才能使用这个功能。"
-
-#: C/create-account.page:109(section/p)
-msgid ""
-"You do not need to register for an account to use IRC. Although you specify "
-"a nickname when you add an IRC account to <app>Empathy</app>, this nickname "
-"is only established each time you connect. If another user is using the "
-"nickname, you will need to choose a new nickname."
-msgstr ""
-"您不需要注册帐号就可以使用 IRC。尽管您在 <app>Empathy</app> 中添加 IRC 帐号时"
-"指定了一个昵称,这个昵称只是您每次连接时才建立。如果有其他用户在使用这个昵"
-"称,您需要选择一个其他昵称。"
-
-#: C/create-account.page:114(section/p)
-msgid ""
-"Some IRC networks use a service called NickServ to allow users to protect "
-"their nicknames. See <link xref=\"irc-nick-password\"/> for more information."
-msgstr ""
-"有些 IRC 网络上有一种叫做 NickServ 的服务,允许用户保护他们的昵称。更多信息参"
-"见<link xref=\"irc-nick-password\"/>。"
-
-#: C/create-account.page:117(section/p)
-msgid ""
-"Some IRC servers are password protected. You will need to know the password "
-"to connect to these servers. Generally, these are private IRC networks."
-msgstr ""
-"有些 IRC 服务器是被密码保护的。您需要知道密码才能连接到这些服务器。通常,这样"
-"的服务器是私有的。"
-
-#: C/create-account.page:122(section/title)
-msgid "Proprietary Services"
-msgstr "专有的服务"
-
-#: C/create-account.page:124(section/p)
-msgid ""
-"There are many proprietary instant messaging services that have been "
-"developed by different companies or organizations. <app>Empathy</app> allows "
-"you to connect to an existing account for most popular services. To create a "
-"new account with one of these services, you will need to visit the service’s "
-"web site and agree to its terms of use."
-msgstr ""
-"许多不同的公司或组织开发了一些专营的即时消息服务。<app>Empathy</app> 允许您连"
-"接大多常见服务的既存帐号。要为这样的服务创建帐号,您需要访问其网站并同意其使"
-"用条款。"
-
-#: C/create-account.page:132(item/p)
-msgid "<link href=\"http://dashboard.aim.com/aim\">AIM</link>"
-msgstr ""
-
-#: C/create-account.page:137(item/p)
-msgid "<link href=\"https://www.icq.com/register/\">ICQ</link>"
-msgstr ""
-
-#: C/create-account.page:142(item/p)
-msgid "<link href=\"https://accountservices.passport.net\">MSN</link>"
-msgstr ""
-
-#: C/create-account.page:147(item/p)
-msgid "<link href=\"https://login.yahoo.com/config/login\">Yahoo!</link>"
-msgstr ""
-
-#: C/disable-account.page:9(info/desc)
-msgid "Prevent <app>Empathy</app> from automatically logging in to an account."
-msgstr "使 <app>Empathy</app> 不要自动登录一个帐号。"
-
-#: C/disable-account.page:40(page/title)
-msgid "Disable an account"
-msgstr "禁用一个帐号"
-
-#: C/disable-account.page:42(page/p)
-msgid ""
-"You can disable an account to prevent <app>Empathy</app> from logging in to "
-"it without removing the account entirely. You may wish to disable and re-"
-"enable an account if you only want to be logged in to the account at certain "
-"times, but you still want to use <app>Empathy</app> for other accounts."
-msgstr ""
-"您可以禁用一个帐号以阻止 <app>Empathy</app> 自动登录这个帐号而不必将其彻底删"
-"除。您可能想要禁用、启用某个帐号如果您只想偶尔登录这个帐号,但又想使用 "
-"<app>Empathy</app> 中的其他帐号。"
-
-#: C/disable-account.page:53(item/p)
-msgid ""
-"Select the account you wish to disable from the accounts list on the left "
-"side of the window."
-msgstr "在窗口左侧的帐号列表中,选择您想要禁用的帐号。"
-
-#: C/disable-account.page:57(item/p)
-msgid "On the right side of the window, switch it off."
-msgstr "在窗口的右侧关闭它。"
-
-#: C/disable-account.page:62(page/p)
-msgid "To re-enable the account, switch it on."
-msgstr "要重新启用这个帐号,则开启它。"
-
-#: C/favorite-rooms.page:10(info/desc)
-msgid "Set, join and manage favorite rooms."
-msgstr "设立,加入或管理聊天室收藏。"
-
-#: C/favorite-rooms.page:29(page/title)
-msgid "Favorite rooms"
-msgstr "聊天室收藏"
-
-#: C/favorite-rooms.page:32(section/title)
-msgid "Set a room as a favorite"
-msgstr "收藏一个聊天室"
-
-#: C/favorite-rooms.page:35(item/p)
-msgid "Join a room."
-msgstr "加入一个聊天室。"
-
-#: C/favorite-rooms.page:40(item/p)
-msgid ""
-"See <link xref=\"irc-join-room\"/> for more information on how to join an "
-"IRC room."
-msgstr "关于如何加入 IRC 聊天室,参见 <link xref=\"irc-join-room\"/>。"
-
-#: C/favorite-rooms.page:46(item/p)
-msgid ""
-"See <link xref=\"group-conversations\"/> for more information on how to "
-"start or join a group conversation."
-msgstr ""
-"关于如何发起或加入群组聊天,参见 <link xref=\"group-conversations\"/>。"
-
-#: C/favorite-rooms.page:54(item/p)
-msgid ""
-"From the conversation window, choose <guiseq><gui>Conversation</"
-"gui><gui>Favorite Chat Room</gui></guiseq>."
-msgstr ""
-"在会话窗口,选择 <guiseq><gui>会话</gui><gui>收藏聊天室</gui></guiseq>。"
-
-#: C/favorite-rooms.page:63(section/title)
-msgid "Join favorite rooms"
-msgstr "加入收藏的聊天室"
-
-#: C/favorite-rooms.page:66(item/p) C/send-file.page:40(item/p)
-msgid "From the <gui>Contact List</gui> window, perform one of the following:"
-msgstr "在<gui>联系人列表</gui>窗口,执行下列操作之一:"
-
-#: C/favorite-rooms.page:71(item/p)
-msgid "Press <key>F5</key>."
-msgstr "按 <key>F5</key> 键。"
-
-#: C/favorite-rooms.page:76(item/p)
-msgid ""
-"Choose <guiseq><gui>Room</gui><gui>Join Favorites</gui></guiseq>, to join "
-"all your favorite rooms."
-msgstr ""
-"选择 <guiseq><gui>聊天室</gui><gui>加入已收藏的聊天室</gui></guiseq>,以加入"
-"您之前收藏的聊天室。"
-
-#: C/favorite-rooms.page:82(item/p)
-msgid "Choose <gui>Room</gui>, and select the favorite room you want to join."
-msgstr "选择 <gui>聊天室</gui>,并选择您要加入的已收藏的聊天室。"
-
-#: C/favorite-rooms.page:90(note/p)
-msgid ""
-"To join a favorite room, you need to be connected to the Internet and to "
-"your account."
-msgstr "要加入一个已收藏的聊天室,您必须连接互联网和您的帐号。"
-
-#: C/favorite-rooms.page:98(section/title)
-msgid "Manage favorite rooms"
-msgstr "管理聊天室收藏"
-
-#: C/favorite-rooms.page:101(item/p)
-msgid ""
-"From the <gui>Contact List</gui> window, choose <guiseq><gui>Room</"
-"gui><gui>Manage Favorites</gui></guiseq>."
-msgstr ""
-"在 <gui>联系人列表</gui> 窗口,选择 <guiseq><gui>聊天室</gui><gui>管理收藏夹"
-"</gui></guiseq>。"
-
-#: C/favorite-rooms.page:107(item/p)
-msgid ""
-"From the <gui>Account</gui> drop-down list, select the account you want to "
-"manage the favorite rooms of."
-msgstr "在 <gui>帐号</gui> 下拉列表中,选择您要管理聊天室收藏的帐号。"
-
-#: C/favorite-rooms.page:111(item/p)
-msgid "Select <gui>All</gui> to see all you favorite rooms."
-msgstr "选择 <gui>全部</gui> 以看到搜有您收藏的聊天室。"
-
-#: C/favorite-rooms.page:116(item/p)
-msgid "Select the favorite room you want to manage:"
-msgstr "选择您要管理的收藏:"
-
-#: C/favorite-rooms.page:121(item/p)
-msgid ""
-"Select the <gui>Auto-Connect</gui> check-box in order to automatically join "
-"that room when you connect to your account."
-msgstr "选择 <gui>自动连接</gui>,则您连接到您的帐号后,会自动加入这个聊天室。"
-
-#: C/favorite-rooms.page:127(item/p)
-msgid "Click on <gui>Remove</gui> to remove the room from your favorites."
-msgstr "点击 <gui>删除</gui> 以从收藏夹中删除这个聊天室。"
-
-#: C/favorite-rooms.page:134(item/p)
-msgid "When done, click <gui>Close</gui>."
-msgstr "完成后,点击 <gui>关闭</gui>。"
-
-#: C/geolocation.page:8(info/desc)
-msgid "Use and understand geolocation in <app>Empathy</app>."
-msgstr "使用和了解 <app>Empathy</app> 中的地理位置。"
-
-#: C/geolocation.page:32(page/title)
-msgid "Geographical position"
-msgstr "地理位置"
-
-#: C/geolocation.page:35(section/title)
-msgid "Geolocation"
-msgstr "地理位置"
-
-#: C/geolocation.page:39(section/title)
-msgid "Fix common problems"
-msgstr "修复常见问题"
-
-#: C/geolocation-not-showing.page:8(info/desc)
-msgid "<app>Empathy</app> does not publish my geographical position."
-msgstr "<app>Empathy</app> 没有发布我的地理位置。"
-
-#: C/geolocation-not-showing.page:32(page/title)
-msgid "Geographical position not published"
-msgstr "地理位置没有被公布。"
-
-#: C/geolocation-not-showing.page:34(page/p)
-msgid ""
-"If your contacts cannot see your location, <app>Empathy</app> might not be "
-"able to discover with a good margin of precision your geographical position."
-msgstr ""
-"如果您的联系人不能看到您的位置,可能是因为 <app>Empathy</app> 无法发现有一定"
-"精度的您的地理位置信息。"
-
-#: C/geolocation-not-showing.page:38(page/p)
-msgid ""
-"In this case, your position will not be published, but you are still able to "
-"see the location of your contacts."
-msgstr ""
-"在这种情况下,您的位置信息不会被公布,但您仍可以看到您的联系人的位置信息。"
-
-#: C/geolocation-not-showing.page:42(page/p)
-msgid ""
-"If you want to publish your geographical position, you can try to use an "
-"external device such as a GPS."
-msgstr "如果您想要公布您的地理位置,您可以试一试使用 GPS 等外部设备。"
-
-#: C/geolocation-not-showing.page:48(note/p)
-msgid ""
-"In order to publish your geographical location, your Jabber server needs to "
-"support the Personal Eventing Protocal (PEP). A list of <link href=\"http://"
-"coccinella.im/servers/servers_by_pubsub_pep.html\">servers which support "
-"PEP</link> is maintained online. Google Talk does not support this feature "
-"at this time."
-msgstr ""
-"要发布您的地理位置,您的 Jabber 服务器必须支持 Personal Eventing Protocal "
-"(PEP)。互联网上有人维护着一份<link href=\"http://coccinella.im/servers/"
-"servers_by_pubsub_pep.html\">支持 PEP 的服务器列表</link>。Google Talk 目前不"
-"支持 PEP。"
-
-#: C/geolocation-privacy.page:8(info/desc)
-msgid "What information are sent and to who."
-msgstr "发送了什么信息,发送给谁了?"
-
-#: C/geolocation-privacy.page:32(page/title)
-msgid "Geolocation Privacy"
-msgstr "地理位置隐私"
-
-#: C/geolocation-privacy.page:35(section/title)
-msgid "What information is sent"
-msgstr "什么信息被发送了"
-
-#: C/geolocation-privacy.page:36(section/p)
-msgid ""
-"What is possible to send is: your country, region, locality, area, street, "
-"building, floor, room, and postal code, longitude, latitude and altitude, "
-"speed and bearing."
-msgstr ""
-"有可能被发送的信息:您所在的国家,地区,地方,区域,街道,建筑,楼层,房间,"
-"邮政编码及经纬度,您的速度和方向。"
-
-#: C/geolocation-privacy.page:40(section/p)
-msgid ""
-"The accuracy and the quantity of information about your geographical "
-"position are based on the software or on the infrastructure used to discover "
-"your position."
-msgstr "您的地理位置信息的精度和质量取决于软件或者用于发现您的位置的设施。"
-
-#: C/geolocation-privacy.page:44(section/p)
-msgid ""
-"Different kind of networks may have different accuracy settings, and may "
-"send different information. The use of external devices such as GPS or "
-"mobile phone will increase the accuracy of the information sent."
-msgstr ""
-"不同的网络可能有不同的精度设置,可能发送不同的信息。使用外部设备,如 GPS 或手"
-"机,可以增加发送的信息的精度。"
-
-#: C/geolocation-privacy.page:49(section/p)
-msgid ""
-"When the privacy mode is enabled, nothing more precise than your city will "
-"be sent, even if you are using an external device."
-msgstr ""
-"当隐私模式被启用后,只有您所在的城市信息会被发送,即使您正在使用外部设备。"
-
-#: C/geolocation-privacy.page:56(section/title)
-msgid "Who can see the information sent"
-msgstr "谁会看到这些发送出去的信息"
-
-#: C/geolocation-privacy.page:57(section/p)
-msgid "Only your contacts can see your geographical position."
-msgstr "只有您的联系人可以看到您的地理位置。"
-
-#: C/geolocation-privacy.page:63(section/title)
-msgid "What is the privacy mode"
-msgstr "什么是隐私模式"
-
-#: C/geolocation-privacy.page:64(section/p)
-msgid ""
-"The privacy mode, enabled by default, is a reduced accuracy mode that will "
-"decrease the accuracy of the geographical position sent to your contacts."
-msgstr ""
-"隐私模式是精度降低模式,它会降低发送给您的联系人的地理位置信息的精度。隐私模"
-"式默认开启。"
-
-#: C/geolocation-privacy.page:71(section/title)
-msgid "Privacy overview"
-msgstr "隐私概述"
-
-#: C/geolocation-privacy.page:72(section/p)
-msgid ""
-"Overview of the various geolocation privacy settings in <app>Empathy</app>."
-msgstr "<app>Empathy</app> 中一些关于地理位置隐私的选项的概况。"
-
-#: C/geolocation-privacy.page:77(item/p)
-msgid "Geolocation is not enabled by default."
-msgstr "地理位置默认不开启。"
-
-#: C/geolocation-privacy.page:82(item/p)
-msgid "Privacy mode is enabled by default."
-msgstr "隐私模式默认被激活"
-
-#: C/geolocation-privacy.page:87(item/p)
-msgid ""
-"Privacy mode prevails even when using external and more precise devices."
-msgstr "即使在使用精度更高的外部设备,隐私模式也会发挥作用。"
-
-#: C/geolocation-privacy.page:92(item/p)
-msgid "Only your contacts can see your position."
-msgstr "只有您的联系人可以看到您的位置。"
-
-#: C/geolocation-supported.page:7(info/desc)
-msgid "Services that supports geolocation and compatibility."
-msgstr "支持地理位置的服务和及其兼容性。"
-
-#: C/geolocation-supported.page:31(page/title)
-msgid "Supported services"
-msgstr "支持的设备"
-
-#: C/geolocation-supported.page:33(page/p)
-msgid ""
-"The geolocation feature at the moment is compatible only with the Jabber "
-"service. In order to use it, you and your contacts need to have a Jabber "
-"account."
-msgstr ""
-"目前,只有 Jabber 服务与地理位置功能兼容。要使用地理位置,您和您的联系人必须"
-"有 Jabber 帐号。"
-
-#: C/geolocation-supported.page:39(note/p)
-msgid ""
-"It is necessary that also the server you are using supports the geolocation "
-"feature. Most of the Jabber servers support it. See your service website "
-"documentation for more information."
-msgstr ""
-"而且,您使用的服务器也需要支持地理位置功能。大多 Jabber 服务器都支持。要了解"
-"更多,请参看您的服务提供者的网站文档。"
-
-#: C/geolocation-supported.page:47(section/title)
-msgid "Compatibility"
-msgstr "兼容性"
-
-#: C/geolocation-supported.page:49(section/p)
-msgid ""
-"<app>Empathy</app> geolocation feature is not compatible with other "
-"geographical position services such as <em>Google Latitude</em>, <em>Yahoo "
-"Fire Eagle</em> or <em>Brightkite</em>."
-msgstr ""
-"<app>Empathy</app> 的地理位置功能与其他一些地理位置信息服务并不兼容,如 "
-"<em>Google Latitude</em>,<em>Yahoo Fire Eggle</em> 和 <em>Brightkite</em>。"
-
-#: C/geolocation-turn.page:9(info/desc)
-msgid "How to activate and deactivate geolocation in <app>Empathy</app>."
-msgstr "在 <app>Empathy</app> 中如何激活和禁用地理位置。"
-
-#: C/geolocation-turn.page:33(page/title)
-msgid "Activate/Deactivate geolocation"
-msgstr "激活/禁用地理位置"
-
-#: C/geolocation-turn.page:37(item/p)
-msgid "Choose <guiseq><gui>Edit</gui><gui>Preferences</gui></guiseq>."
-msgstr "选择<guiseq><gui>编辑</gui><gui>首选项</gui></guiseq>。"
-
-#: C/geolocation-turn.page:42(item/p)
-msgid "Select the <gui>Location</gui> tab."
-msgstr "选择<gui>位置</gui>标签。"
-
-#: C/geolocation-turn.page:47(item/p)
-msgid ""
-"Select <gui>Publish location to my contacts</gui> to activate geolocation."
-msgstr "选择 <gui>向我的联系人公布位置信息</gui> 以激活地理位置。"
-
-#: C/geolocation-turn.page:50(item/p)
-msgid "To deactivate geolocation, deselect it."
-msgstr "要禁用地理位置,请取消选择。"
-
-#: C/geolocation-turn.page:55(item/p)
-msgid ""
-"To increase the accuracy of your position, deselect <gui>Reduce location "
-"accuracy</gui>."
-msgstr "要提高您的位置的精度,请取消选择 <gui>降低位置信息精度</gui>。"
-
-#: C/geolocation-turn.page:61(item/p)
-msgid ""
-"If you have an external device like a GPS or want to send a more accurate "
-"position, select the appropriate option in the <gui>Location sources</gui> "
-"section."
-msgstr ""
-"如果您有 GPS 这样的外部设备,或者想要发送更加精确的位置信息,在<gui>位置来源"
-"</gui>选项卡中选择适当的选项。"
-
-#: C/geolocation-what-is.page:9(info/desc)
-msgid "Understanding geolocation."
-msgstr "了解地理位置。"
-
-#: C/geolocation-what-is.page:33(page/title)
-msgid "What is geolocation"
-msgstr "什么是地理位置"
-
-#: C/geolocation-what-is.page:35(page/p)
-msgid ""
-"Geolocation allows you to identify the real geographical location of a "
-"computer or a device connected to the Internet."
-msgstr "地理位置允许您确定连接到网络的一台电脑或设备在地理上的真实位置。"
-
-#: C/geolocation-what-is.page:37(page/p)
-msgid "With geolocation in <app>Empathy</app> you can:"
-msgstr "通过 <app>Empathy</app> 中的地理位置,您可以:"
-
-#: C/geolocation-what-is.page:42(item/p)
-msgid "Publish your geographical location to your contacts."
-msgstr "公布您的地理位置给联系人。"
-
-#: C/geolocation-what-is.page:47(item/p)
-msgid "See your contacts’ geographical location and quickly contact them."
-msgstr "查看联系人的地址位置并快速联系他们。"
-
-#: C/geolocation-what-is.page:52(item/p)
-msgid ""
-"Set the accuracy of your location and the device used to discover your "
-"location."
-msgstr "设置您的地理位置的精度及可以用来发现您的地理位置的设备。"
-
-#: C/geolocation-what-is.page:60(note/p)
-msgid ""
-"In order to see your contacts’ geographical locations, they need to use a "
-"service and an application that supports geolocation."
-msgstr "您的联系人必须使用支持地理位置的程序,您才能看到他们的地理位置。"
-
-#: C/group-conversations.page:8(info/desc)
-msgid "Start or join a group conversation with your contacts."
-msgstr "开始和您的联系人进行群组聊天,或加入群组聊天。"
-
-#: C/group-conversations.page:34(page/title)
-msgid "Group conversations"
-msgstr "群组聊天"
-
-#: C/group-conversations.page:36(page/p)
-msgid ""
-"Group conversations permits you to have text conversations with more than "
-"one contact at the same time."
-msgstr "在群组聊天中,您可以和不止一位联系人同时进行文字交谈。"
-
-#: C/group-conversations.page:40(page/p)
-msgid ""
-"To have a group conversation you need to have a registered account with "
-"either Jabber or Google Talk, or a People Nearby account."
-msgstr ""
-"要进行群组聊天您需要注册有 Jabber 帐号或者 Google Talk 帐号,或者“附近的人”账"
-"户。"
-
-#: C/group-conversations.page:46(note/p)
-msgid ""
-"You can have a group conversation only with the contacts that are using the "
-"same service as yours."
-msgstr "您只能和那些与您使用同样的服务的联系人进行群组聊天。"
-
-#: C/group-conversations.page:54(section/title)
-msgid "Start a group conversation"
-msgstr "开始群组聊天"
-
-#: C/group-conversations.page:58(item/p)
-#: C/group-conversations.page:122(item/p) C/irc-join-room.page:39(item/p)
-msgid ""
-"From the <gui>Contact List</gui> window, choose <guiseq><gui>Room</"
-"gui><gui>Join</gui></guiseq>."
-msgstr ""
-"在 <gui>联系人列表</gui> 窗口,选择 <guiseq><gui>聊天室</gui><gui>加入</"
-"gui></guiseq>。"
-
-#: C/group-conversations.page:63(item/p)
-msgid ""
-"From the <gui>Account</gui> drop-down list, select the account you want to "
-"use for the group conversation."
-msgstr "在 <gui>帐号</gui> 下拉列表中,选择一个帐号用来进行群组聊天。"
-
-#: C/group-conversations.page:69(item/p)
-msgid ""
-"In the <gui>Server</gui> text box, type the name of server in which the "
-"conversation will be hosted."
-msgstr "在 <gui>服务器</gui> 文本框中,输入将会承载这次聊天的服务器名称。"
-
-#: C/group-conversations.page:73(item/p)
-msgid "Leave it empty if it will be on the current server."
-msgstr "如果要使用当前服务器,请将其留空。"
-
-#: C/group-conversations.page:78(item/p)
-msgid ""
-"In the <gui>Room</gui> text box, type the name you want to give to the "
-"conversation."
-msgstr "在 <gui>聊天室</gui> 文本框中,输入您为这次群组聊天起的名字。"
-
-#: C/group-conversations.page:82(note/p)
-msgid ""
-"This will be the name of the room you are going to have a conversation. This "
-"name will be publicly available for other people to join. It is not possible "
-"to create a private room."
-msgstr ""
-"这将是您进行群组聊天的聊天室的名字。这个名字会被大家看到以使大家可以加入。您"
-"不能建立一个私人的聊天室。"
-
-#: C/group-conversations.page:90(item/p)
-msgid ""
-"To invite other contacts to join the group conversation, from the "
-"<gui>Contact List</gui> window, select the contact you want to invite, and "
-"perform one of the following:"
-msgstr ""
-"要邀请其他联系人加入这次群组聊天,在 <gui>联系人列表</gui> 窗口,选择您想要邀"
-"请的联系人,并进行下列操作中的某一项:"
-
-#: C/group-conversations.page:97(item/p)
-msgid "Right-click on the contact and choose <gui>Invite to chatroom</gui>."
-msgstr "右键点击联系人,并选择 <gui>邀请到聊天室</gui>。"
-
-#: C/group-conversations.page:102(item/p)
-msgid ""
-"Choose <guiseq><gui>Edit</gui><gui>Contact</gui><gui>Invite to chatroom</"
-"gui></guiseq>."
-msgstr ""
-"选择 <guiseq><gui>编辑</gui><gui>联系人</gui><gui>邀请到聊天室</gui></"
-"guiseq>。"
-
-#: C/group-conversations.page:107(item/p)
-msgid ""
-"If you have more than one group conversation open, select the one you want "
-"to invite your contacts."
-msgstr "如果您打开了不止一个群组聊天,选择您想要邀请联系人加入的那个。"
-
-#: C/group-conversations.page:118(section/title)
-msgid "Join a group conversation"
-msgstr "加入群组聊天。"
-
-#: C/group-conversations.page:128(item/p)
-msgid "Expand the <gui>Room List</gui> section to see all the existing rooms."
-msgstr "展开<gui>聊天室列表</gui>选项卡来查看所有存在的房间。"
-
-#: C/group-conversations.page:133(item/p)
-msgid "Double-click on the name of a room to join it."
-msgstr "双击房间的名称加入。"
-
-#: C/group-conversations.page:139(section/p)
-msgid ""
-"It is not possible to join all existing rooms. Some of the rooms might "
-"require a password, or might be invitation only. <app>Empathy</app> does not "
-"support these kind of rooms."
-msgstr ""
-"并非所有的聊天室都可以加入。有些聊天室可能需要密码,有些只有收到邀请才能加"
-"入。<app>Empathy</app> 不支持这些房间。"
-
-#: C/hide-contacts.page:8(info/desc)
-msgid "Hide the offline contacts from your <gui>Contact List</gui>."
-msgstr "在 <gui>联系人列表</gui> 中隐藏离线联系人。"
-
-#: C/hide-contacts.page:19(page/title)
-msgid "Hide offline contacts"
-msgstr "隐藏离线的联系人"
-
-#: C/hide-contacts.page:21(page/p)
-msgid ""
-"Normally, <app>Empathy</app> shows all your contacts: those that are online, "
-"with which you can have a conversation, and also those that are offline."
-msgstr ""
-"一般情况下,<app>Empathy</app> 会显示您所有的联系人:您可以与之进行会话的在线"
-"的联系人,和那些离线的联系人。"
-
-#: C/hide-contacts.page:25(page/p)
-msgid "To hide the contacts that are offline:"
-msgstr "要隐藏离线的联系人:"
-
-#: C/hide-contacts.page:31(item/p)
-#, fuzzy
-#| msgid ""
-#| "From the <gui>Contact List</gui> window, choose <guiseq><gui>View</"
-#| "gui><gui>Offline Contacts</gui></guiseq>, or press <keyseq><key>Ctrl</"
-#| "key><key>H</key></keyseq>."
-msgid ""
-"From the <gui>Contact List</gui> window, choose <guiseq><gui>View</gui> "
-"<gui>Offline Contacts</gui></guiseq>, or press <keyseq><key>Ctrl</key> "
-"<key>H</key></keyseq>."
-msgstr ""
-"在 <gui>联系人列表</gui> 窗口,选择 <guiseq><gui>查看</gui><gui>离线联系人</"
-"gui></guiseq>,或按下 <keyseq><key>Ctrl</key><key>H</key></keyseq>。"
-
-#: C/hide-contacts.page:36(item/p)
-msgid "To show the offline contacts again, repeat the same procedure above."
-msgstr "要再次显示离线的联系人,重复上面的步骤。"
-
-#: C/import-account.page:10(info/desc)
-msgid "Import an account from another instant messaging application."
-msgstr "从其他即时聊天程序中导入帐号。"
-
-#: C/import-account.page:19(credit/name)
-msgid "Peter Haslam"
-msgstr "Peter Haslam"
-
-#: C/import-account.page:42(page/title)
-msgid "Import an existing account"
-msgstr "导入已存在的帐号"
-
-#: C/import-account.page:44(page/p)
-msgid ""
-"The first time you run <app>Empathy</app>, it will offer to import your "
-"accounts from other instant messaging applications. Currently, the only "
-"supported application is <app>Pidgin</app>."
-msgstr ""
-"<app>Empathy</app> 第一次运行时,会提示您可以从其他即时通讯程序中导入帐号。目"
-"前,支持的程序只有 <app>Pidgin</app>。"
-
-#: C/import-account.page:50(item/p)
-msgid ""
-"Run <app>Empathy</app> for the first time. An assistant will offer you a "
-"number of options to create new accounts."
-msgstr ""
-"第一次运行 <app>Empathy</app>,一个助理程序会提供若干选项以创建新帐号。"
-
-#: C/import-account.page:54(item/p)
-msgid ""
-"Select <gui>Yes, import my account details from</gui> and click "
-"<gui>Forward</gui>."
-msgstr "选择 <gui>有,请导入我的帐号信息</gui> 并点击 <gui>前进</gui>。"
-
-#: C/import-account.page:58(item/p)
-msgid "Select the check box next to each account you wish to import."
-msgstr "选择每个您想要导入的帐号旁的复选框。"
-
-#: C/import-account.page:66(note/p)
-msgid ""
-"It is not currently possible to import accounts after you have completed the "
-"first-run assistant."
-msgstr "目前,您只能在第一次运行时的助理程序中导入帐号。"
-
-#. This is a reference to an external file such as an image or video. When
-#. the file changes, the md5 hash will change to let you know you need to
-#. update your localized copy. The msgstr is not used at all. Set it to
-#. whatever you like once you have updated your copy of the file.
-#: C/introduction.page:41(media)
-#, fuzzy
-#| msgid ""
-#| "@@image: 'figures/empathy-main-window.png'; "
-#| "md5=54908dcb2588beddb15ef0968d2c2582"
-msgctxt "_"
-msgid ""
-"external ref='figures/empathy-main-window.png' "
-"md5='54908dcb2588beddb15ef0968d2c2582'"
-msgstr ""
-"@@image: 'figures/empathy-main-window.png'; "
-"md5=54908dcb2588beddb15ef0968d2c2582"
-
-#: C/introduction.page:9(info/desc)
-msgid "Introduction to the <app>Empathy</app> instant messenger."
-msgstr "介绍 <app>Empathy</app> 即时聊天工具。"
-
-#: C/introduction.page:21(page/title)
-msgid "Introduction"
-msgstr "介绍"
-
-#: C/introduction.page:23(page/p)
-msgid ""
-"<app>Empathy</app> is an instant messaging application for the GNOME "
-"Desktop. It supports text messaging, voice &amp; video calls, file "
-"transfers, and all the most used messaging systems such as MSN and Google "
-"Talk."
-msgstr ""
-"<app>Empathy</app> 是 GNOME 桌面的即时通讯程序。它支持文字消息,语音和视频呼"
-"叫,文件传输,支持最常用的即时通讯系统,包括 MSN 和 Google Talk."
-
-#: C/introduction.page:28(page/p)
-msgid ""
-"<app>Empathy</app> includes features that help you better collaborate while "
-"at work, and that let you easily keep in touch with your friends."
-msgstr ""
-"<app>Empathy</app> 可以帮助您在工作中更好的合作,也可以帮助您与您的朋友们保持"
-"联系。"
-
-#: C/introduction.page:32(page/p)
-msgid ""
-"Using <app>Empathy</app>, you can group all the conversations in a single "
-"window, have multiple windows for different kind of conversations, easily "
-"search through your previous conversations, and share your desktop in just "
-"two clicks."
-msgstr ""
-"使用 <app>Empathy</app>,您可以将所有的会话组织在同一个窗口中,或者为不同类型"
-"的会话使用不同的窗口,还可以很容易地搜索之前的会话,或者共享您的桌面,只需要"
-"两次点击。"
-
-#: C/introduction.page:39(figure/title)
-msgid "<gui>Contact List</gui> window"
-msgstr "<gui>联系人列表</gui>窗口"
-
-#: C/introduction.page:40(figure/desc)
-msgid "<app>Empathy</app> main window"
-msgstr "<app>Empathy</app> 主窗口"
-
-#: C/introduction.page:42(media/p)
-msgid "<app>Empathy</app> main window."
-msgstr "<app>Empathy</app> 主窗口。"
-
-#: C/irc-commands.page:7(info/desc)
-msgid "The supported IRC commands."
-msgstr "支持的 IRC 命令。"
-
-#: C/irc-commands.page:18(page/title)
-msgid "Supported IRC commands"
-msgstr "支持的 IRC 命令"
-
-#: C/irc-commands.page:19(page/p)
-msgid ""
-"To see the list of the supported IRC commands, in a chat room type <input>/"
-"help</input> and press <key>Enter</key>."
-msgstr ""
-"要查看支持的 IRC 命令的列表,在一个聊天室中输入<input>/help</input>并按"
-"<key>Enter</key>。"
-
-#: C/irc-commands.page:24(note/p)
-msgid "All commands available have a small description on their usage."
-msgstr "所有可用命令都有一个简单的用法描述。"
-
-#: C/irc-join-pwd.page:9(info/desc)
-msgid "Enter password-protected IRC chat rooms."
-msgstr "进入有密码保护的 IRC 聊天室。"
-
-#: C/irc-join-pwd.page:25(page/title)
-msgid "Join a protected IRC chat room"
-msgstr "加入一个受保护的 IRC 聊天室"
-
-#: C/irc-join-pwd.page:27(page/p)
-msgid ""
-"On some IRC networks, private IRC rooms may be protected with a password. If "
-"you know the password, use the following steps to join:"
-msgstr ""
-"在某些 IRC 网络上,私人的 IRC 房间可以被密码保护。如果您知道这密码,按照下面"
-"的步骤加入:"
-
-#: C/irc-join-pwd.page:33(item/p)
-msgid "<link xref=\"irc-join-room\">Join the room</link> as normal."
-msgstr "如往常一样<link xref=\"irc-join-room\">加入房间</link>。"
-
-#: C/irc-join-pwd.page:38(item/p)
-msgid ""
-"Empathy will prompt you for a password. Enter the password for the IRC chat "
-"room and click <gui style=\"button\">Join</gui>."
-msgstr ""
-"Empathy 会提示您输入密码。输入这个 IRC 聊天室的密码并点击 <gui style=\"button"
-"\">加入</gui>。"
-
-#: C/irc-join-room.page:8(info/desc)
-msgid "Join an IRC channel."
-msgstr "加入一个 IRC 频道。"
-
-#: C/irc-join-room.page:31(page/title)
-msgid "Join an IRC chat room"
-msgstr "加入一个 IRC 聊天室"
-
-#: C/irc-join-room.page:33(page/p)
-msgid ""
-"You can join IRC chat rooms (also known as IRC channels) on any IRC network "
-"you’re connected to. To connect to an IRC network, see <link xref=\"add-"
-"account\"/> and <link xref=\"account-irc\"/>."
-msgstr ""
-"您可以加入您已经连接的所有 IRC 网络上的 IRC 聊天室(也称为 IRC 频道)。要连接一"
-"个 IRC 网络,参见 <link xref=\"add-account\"/> and <link xref=\"account-irc"
-"\"/>。"
-
-#: C/irc-join-room.page:45(item/p)
-msgid ""
-"From the <gui>Account</gui> drop-down list, select the IRC account that "
-"corresponds to the network you want to use."
-msgstr "在 <gui>帐号</gui> 下拉列表中,选择与您想要使用的网络对应的 IRC 帐号。"
-
-#: C/irc-join-room.page:51(item/p)
-msgid ""
-"In the <gui>Room</gui> text box, type the name of the channel you want to "
-"join. IRC channel names start with the hash character (<sys>#</sys>)."
-msgstr ""
-"在 <gui>聊天室</gui> 文本框中,输入您想要加入的频道的名称。IRC 频道名称以井号"
-"(<sys>#</sys>)开头。"
-
-#: C/irc-join-room.page:57(item/p)
-msgid "Click <gui>Join</gui> to enter the room."
-msgstr "点击<gui>加入</gui>来进入房间。"
-
-#: C/irc-join-room.page:64(note/p)
-msgid ""
-"To join multiple rooms, you need to repeat the steps above for each room."
-msgstr "要加入多个房间,您需要对每个房间重复上面的步骤。"
-
-#: C/irc-manage.page:9(info/desc)
-msgid "How to use IRC with <app>Empathy</app>."
-msgstr "如何在 <app>Empathy</app> 中使用 IRC。"
-
-#: C/irc-manage.page:23(credit/name)
-msgid "Sindhu S"
-msgstr ""
-
-#: C/irc-manage.page:39(page/title)
-msgid "Internet Relay Chat (IRC)"
-msgstr "互联网中继聊天(IRC)"
-
-#: C/irc-manage.page:47(when/p)
-msgid ""
-"<link action=\"install:telepathy-idle\" xref=\"index\"> Install telepathy-"
-"idle</link>"
-msgstr ""
-
-#: C/irc-manage.page:55(info/title)
-#, fuzzy
-#| msgid "IRC Chat Rooms and Conversations"
-msgctxt "link"
-msgid "IRC Chat Rooms and Conversations"
-msgstr "IRC 聊天室和会话"
-
-#: C/irc-manage.page:57(section/title)
-msgid "Chat Rooms and Conversations"
-msgstr "聊天室和会话"
-
-#: C/irc-manage.page:62(info/title)
-#, fuzzy
-#| msgid "Common IRC Problems"
-msgctxt "link"
-msgid "Common IRC Problems"
-msgstr "常见 IRC 问题"
-
-#: C/irc-nick-password.page:10(info/desc)
-msgid "Protect your nickname to prevent other IRC users from using it."
-msgstr "保护您的昵称,以防其他 IRC 用户使用。"
-
-#: C/irc-nick-password.page:33(page/title)
-msgid "Use a nickname password on IRC"
-msgstr "在 IRC 中使用昵称和密码"
-
-#: C/irc-nick-password.page:35(page/p)
-msgid ""
-"On some IRC networks, you can register your nickname with a service called "
-"NickServ. By sending special messages to NickServ, you can set your password "
-"and identify yourself. Some IRC chat rooms may not allow you to join without "
-"a registered nickname."
-msgstr ""
-"在某些 IRC 网络上,您可以通过 NickServ 服务注册您的昵称。通过向 NickServ 发送"
-"特殊的消息,您可以设置密码来认证您自己。一些 IRC 聊天室可能不允许您加入,除非"
-"您有注册过的昵称。"
-
-#: C/irc-nick-password.page:40(page/p)
-msgid ""
-"<app>Empathy</app> does not currently support nickname registration. Some "
-"IRC networks, however, will automatically forward a <em>server password</em> "
-"to NickServ. On these networks, you can use the IRC password in "
-"<app>Empathy</app> to identify yourself to NickServ. The popular freenode "
-"network is known to have this feature."
-msgstr ""
-"<app>Empathy</app> 目前还不支持昵称注册。但一些 IRC 网络会自动向 NickServ 发"
-"送一个 <em>服务器密码</em>。在这样的网络上,您可以在 <app>Empathy</app> 中使"
-"用这样的密码向 NickServ 认证您自己。流行的 freenode 网络就有这个功能。"
-
-#: C/irc-nick-password.page:46(page/p)
-msgid "To set an IRC server password:"
-msgstr "设置一个 IRC 密码:"
-
-#: C/irc-nick-password.page:54(item/p)
-msgid "Select the IRC account from the list on the left of the dialog."
-msgstr "在左侧的对话框中选择一个 IRC 帐号"
-
-#: C/irc-nick-password.page:57(item/p)
-msgid ""
-"In the <gui>Password</gui> field, type the password you used to register "
-"your nikcname."
-msgstr "在 <gui>密码</gui> 一栏中,输入您注册您的昵称时使用的密码。"
-
-#: C/irc-nick-password.page:69(note/p)
-msgid ""
-"These instructions only allow you to use a password-protected nickname on "
-"certain IRC networks. It is not currently possible to register an IRC "
-"nickname or change your nickname password using <app>Empathy</app>."
-msgstr ""
-"这些说明只是允许您在特定的 IRC 网络上使用密码保护的昵称。目前在 "
-"<app>Empathy</app> 中还不能注册 IRC 昵称或修改密码。"
-
-#: C/irc-send-file.page:9(info/desc)
-msgid "<app>Empathy</app> does not currently support sending files using IRC."
-msgstr "<app>Empathy</app> 目前不支持 IRC 传文件。"
-
-#: C/irc-send-file.page:31(page/title)
-msgid "Send files over IRC"
-msgstr "通过 IRC 传送文件"
-
-#: C/irc-send-file.page:33(page/p)
-msgid "It is not currently possible to send files using IRC."
-msgstr "目前无法用 IRC 传送文件。"
-
-#: C/irc-start-conversation.page:8(info/desc)
-msgid "Start a conversation with an IRC contact."
-msgstr "向一位 IRC 联系人发起会话。"
-
-#: C/irc-start-conversation.page:30(page/title)
-msgid "Chat with somebody on IRC"
-msgstr "与 IRC 中某人聊天"
-
-#: C/irc-start-conversation.page:32(page/p)
-msgid ""
-"You can hold private conversations with other IRC users, outside of the "
-"public IRC chat rooms. To start a conversation with another IRC user:"
-msgstr ""
-"您可以在公共的 IRC 聊天室之外与其他的 IRC 用户进行私人聊天。要与另一位 IRC 用"
-"户进行会话:"
-
-#: C/irc-start-conversation.page:37(item/p)
-msgid ""
-"In the contact list for an IRC chat room, double click the name of the user "
-"you want to chat with. Alternatively, right click the name of the user and "
-"choose <gui>Chat</gui>."
-msgstr ""
-"在一个 IRC 聊天室的联系人列表中,双击您想要聊天的用户。或者,右键点击用户的姓"
-"名并选择 <gui>聊天</gui>"
-
-#: C/irc-start-conversation.page:45(item/p)
-msgid ""
-"The IRC room contact list is not the same as <app>Empathy</app> contact "
-"list. It contains a list of users in the IRC chat room you joined. Different "
-"rooms can have different contacts listed."
-msgstr ""
-"IRC 聊天室的联系人列表与 <app>Empathy</app> 的联系人列表不同。它包含了您加入"
-"的这个 IRC 聊天室中的用户列表。不同的聊天室可能有不同的联系人列表。"
-
-#: C/irc-start-conversation.page:52(item/p)
-msgid ""
-"The IRC room contact list is usually on the right side of the IRC room "
-"window. If you do not see it, choose <guiseq><gui>Conversation</"
-"gui><gui>Show Contact List</gui></guiseq>."
-msgstr ""
-"IRC 聊天室的联系人列表通常位于窗口右侧。如果您没有看到它,选择 <guiseq><gui>"
-"对话</gui><gui>显示联系人列表</gui></guiseq>。"
-
-#: C/license.page:8(info/desc)
-msgid "Legal information."
-msgstr "法律信息。"
-
-#: C/license.page:11(page/title)
-msgid "License"
-msgstr "许可"
-
-#: C/license.page:12(page/p)
-msgid ""
-"This work is distributed under a CreativeCommons Attribution-Share Alike 3.0 "
-"Unported license."
-msgstr ""
-"本作品在 CreativeCommons Attribution-Share Alike 3.0 Unported license下发布。"
-
-#: C/license.page:20(page/p)
-msgid "You are free:"
-msgstr "您可以自由:"
-
-#: C/license.page:25(item/title)
-#, fuzzy
-#| msgid "To share"
-msgid "<em>To share</em>"
-msgstr "分享"
-
-#: C/license.page:26(item/p)
-msgid "To copy, distribute and transmit the work."
-msgstr "复制、分发或者传播作品。"
-
-#: C/license.page:29(item/title)
-#, fuzzy
-#| msgid "To remix"
-msgid "<em>To remix</em>"
-msgstr "再创作"
-
-#: C/license.page:30(item/p)
-msgid "To adapt the work."
-msgstr "修改作品。"
-
-#: C/license.page:33(page/p)
-msgid "Under the following conditions:"
-msgstr "需遵守一下条件:"
-
-#: C/license.page:38(item/title)
-#, fuzzy
-#| msgid "Attribution"
-msgid "<em>Attribution</em>"
-msgstr "署名"
-
-#: C/license.page:39(item/p)
-msgid ""
-"You must attribute the work in the manner specified by the author or "
-"licensor (but not in any way that suggests that they endorse you or your use "
-"of the work)."
-msgstr ""
-"您必须按照作者或许可人指定的方式对作品署名(但不能以任何方式暗示他们认可您或者"
-"您对作品的使用)。"
-
-#: C/license.page:46(item/title)
-#, fuzzy
-#| msgid "Share Alike"
-msgid "<em>Share Alike</em>"
-msgstr "相同方式共享"
-
-#: C/license.page:47(item/p)
-msgid ""
-"If you alter, transform, or build upon this work, you may distribute the "
-"resulting work only under the same, similar or a compatible license."
-msgstr ""
-"如果您改变、转换本作品或者以本作品为基础进行再创作,您应以相同、相似或者兼容"
-"的协议发布修改后的作品。"
-
-#: C/license.page:53(page/p)
-msgid ""
-"For the full text of the license, see the <link href=\"http://"
-"creativecommons.org/licenses/by-sa/3.0/legalcode\">CreativeCommons website</"
-"link>, or read the full <link href=\"http://creativecommons.org/licenses/by-"
-"sa/3.0/\">Commons Deed</link>."
-msgstr ""
-"许可的全文参见 <link href=\"http://creativecommons.org/licenses/by-sa/3.0/"
-"legalcode\">CreativeCommons 网站</link>,或者阅读完整的<link href=\"http://"
-"creativecommons.org/licenses/by-sa/3.0/\">通俗协议</link>。"
-
-#: C/link-contacts.page:11(info/desc)
-msgid "Merge and separate different contacts into a single one."
-msgstr "将不同的联系人合并分割为一个联系人。"
-
-#: C/link-contacts.page:25(page/title)
-msgid "Combine and separate contacts"
-msgstr "合并和分割联系人"
-
-#: C/link-contacts.page:26(page/p)
-msgid ""
-"If one, or more, of your contacts has multiple accounts with different "
-"messaging services, you can combine these contacts into a single one."
-msgstr "如果您的联系人有多个聊天服务的多个帐号,您可以将他们合并成一个联系人。"
-
-#: C/link-contacts.page:30(page/p)
-msgid ""
-"The resulting contact is called a <em>meta-contact</em>: a contact composed "
-"from different single contacts."
-msgstr "产生的联系人称为一个<em>元联系人</em>:由多个不同联系人组成的联系人。"
-
-#: C/link-contacts.page:34(page/p)
-msgid ""
-"If you have a Jane Smith contact that is using three different messaging "
-"services like:"
-msgstr "如果您有一个叫做 Jane Smith 的联系人,她使用三种不同的聊天服务:"
-
-#: C/link-contacts.page:40(item/p)
-msgid "janes@facebook"
-msgstr "janes@facebook"
-
-#: C/link-contacts.page:45(item/p)
-msgid "jane.smith@gmail"
-msgstr "jane.smith@gmail"
-
-#: C/link-contacts.page:50(item/p)
-msgid "jane_smith@hotmail"
-msgstr "jane_smith@hotmail"
-
-#: C/link-contacts.page:55(page/p)
-msgid "You can combine these contacts into a single Jane Smith one."
-msgstr "您可以将这些联系人合并成一个 Jane Smith."
-
-#: C/link-contacts.page:60(section/title)
-msgid "Combining contacts"
-msgstr "合并联系人"
-
-#: C/link-contacts.page:63(item/p)
-msgid ""
-"From the <gui>Contact List</gui> window, right-click one of the contact that "
-"has different accounts, and select <gui style=\"menuitem\">Link Contacts...</"
-"gui>."
-msgstr ""
-"在 <gui>联系人列表</gui> 窗口,右键点击有不同帐号的联系人,并选择 <gui style="
-"\"menuitem\">绑定联系人…</gui>"
-
-#: C/link-contacts.page:70(item/p)
-msgid ""
-"From the left pane in the <gui>Link Contacts</gui> window, select the "
-"contacts you want to combine."
-msgstr "在 <gui>绑定联系人</gui> 窗口的左窗格,选择您想要关联起来的联系人。"
-
-#: C/link-contacts.page:76(item/p)
-msgid "Click <gui style=\"button\">Link</gui>."
-msgstr "点击 <gui style=\"button\">绑定</gui>."
-
-#: C/link-contacts.page:82(note/p)
-msgid ""
-"When a meta-contact has been created, the default contact that will be used "
-"to have a conversation with when you double-click on it, is the contact with "
-"the highest presence on-line."
-msgstr ""
-"当一个元联系人被创建后,您双击该联系人时默认使用的联系人是有最高的在线状态的"
-"联系人。"
-
-#: C/link-contacts.page:91(section/title)
-msgid "Separating contacts"
-msgstr "分割联系人"
-
-#: C/link-contacts.page:94(item/p)
-msgid ""
-"From the <gui>Contact List</gui>, right-click the contact to separate, and "
-"select <gui style=\"menuitem\">Link Contacts...</gui>."
-msgstr ""
-"在 <gui>联系人列表</gui> 窗口中,右键点击要分割的联系人,并选择 <gui style="
-"\"menuitem\">绑定联系人…</gui>"
-
-#: C/link-contacts.page:100(item/p)
-msgid "Click <gui style=\"button\">Unlink</gui>."
-msgstr "点击 <gui style=\"button\">解除绑定</gui>。"
-
-#. This is a reference to an external file such as an image or video. When
-#. the file changes, the md5 hash will change to let you know you need to
-#. update your localized copy. The msgstr is not used at all. Set it to
-#. whatever you like once you have updated your copy of the file.
-#: C/overview.page:37(media)
-msgctxt "_"
-msgid ""
-"external ref='figures/video_overview.png' "
-"md5='6cfcfbd833bf2234537d402185c40596'"
-msgstr ""
-
-#. This is a reference to an external file such as an image or video. When
-#. the file changes, the md5 hash will change to let you know you need to
-#. update your localized copy. The msgstr is not used at all. Set it to
-#. whatever you like once you have updated your copy of the file.
-#: C/overview.page:38(media)
-msgctxt "_"
-msgid ""
-"external ref='figures/conf_overview.png' "
-"md5='74c58668fe89c84060f12f6b70a6b903'"
-msgstr ""
-
-#. This is a reference to an external file such as an image or video. When
-#. the file changes, the md5 hash will change to let you know you need to
-#. update your localized copy. The msgstr is not used at all. Set it to
-#. whatever you like once you have updated your copy of the file.
-#: C/overview.page:39(media)
-msgctxt "_"
-msgid ""
-"external ref='figures/croom_overview.png' "
-"md5='e9619d2c8420bc48a880c03dbc1ae084'"
-msgstr ""
-
-#: C/overview.page:8(info/desc)
-msgid "What instant messaging is and how you can use it."
-msgstr ""
-
-#: C/overview.page:12(credit/name)
-msgid "Aruna S"
-msgstr ""
-
-#: C/overview.page:24(page/title)
-msgid "Overview of instant messaging"
-msgstr ""
-
-#: C/overview.page:26(page/p)
-msgid ""
-"Instant messaging, sometimes abbreviated to IM, is a text-based means to "
-"communicate instantly over the internet and the local network. While some IM "
-"applications work with only one type of account, others, including <link "
-"xref=\"introduction\">Empathy</link>, provide IM facilities by using <link "
-"xref=\"add-account\">accounts</link> from different service providers. Some "
-"of these even support audio and video calling."
-msgstr ""
-
-#: C/overview.page:42(td/p)
-msgid "Video Conference"
-msgstr ""
-
-#: C/overview.page:43(td/p)
-#, fuzzy
-#| msgid "Group conversations"
-msgid "Group chats"
-msgstr "群组聊天"
-
-#: C/overview.page:44(td/p)
-#, fuzzy
-#| msgid "Favorite rooms"
-msgid "Chat rooms"
-msgstr "聊天室收藏"
-
-#: C/overview.page:48(page/p)
-msgid ""
-"Some instant messaging applications can be used to connect to chat rooms, "
-"online places where like-minded people meet to talk. One popular means to "
-"connect to several chat rooms is the Internet Relay Chat, also known as "
-"<link xref=\"irc-manage\">IRC</link>. IRC provides <link xref=\"irc-join-room"
-"\">public</link> chat rooms, which are open to anyone who creates an account "
-"on the IRC Server, and private chat rooms, which are <link xref=\"irc-join-"
-"pwd\">password protected</link> and open only to a select few."
-msgstr ""
-
-#: C/prev-conv.page:8(info/desc)
-msgid "Browse or search your previous conversations."
-msgstr "浏览或搜索您之前的会话。"
-
-#: C/prev-conv.page:36(page/title)
-msgid "View previous conversations"
-msgstr "查看之前的会话"
-
-#: C/prev-conv.page:38(page/p)
-msgid ""
-"<app>Empathy</app> automatically saves all your text conversations you have "
-"with your contacts. You can <link xref=\"#search\">search through all of "
-"your previous conversations</link> or <link xref=\"#browse\">browse previous "
-"conversations</link> by contact and date."
-msgstr ""
-"<app>Empathy</app> 自动保存您和联系人的所有文字会话。您可以<link xref="
-"\"#search\">搜索之前全部的会话</link>或者根据联系人和日期<link xref=\"#browse"
-"\">浏览之前的会话</link>。"
-
-#: C/prev-conv.page:46(note/p)
-msgid ""
-"You do not need to be connected to the Internet to view and search your "
-"previous conversations."
-msgstr "您不需要连接到网络来查看和搜索您之前的会话。"
-
-#: C/prev-conv.page:53(section/title)
-msgid "Search previous conversations"
-msgstr "搜索之前的会话"
-
-#: C/prev-conv.page:55(section/p)
-msgid ""
-"You can perform a full-text search through all of your previous "
-"conversations."
-msgstr "您可以在之前的所有会话中进行全文搜索。"
-
-#: C/prev-conv.page:59(item/p) C/prev-conv.page:87(item/p)
-#, fuzzy
-#| msgid ""
-#| "From the <gui>Contact List</gui> window, choose <guiseq><gui>View</"
-#| "gui><gui>Previous Conversations</gui></guiseq>. Alternatively, press "
-#| "<key>F3</key>."
-msgid ""
-"From the <gui>Contact List</gui> window, choose <guiseq><gui>View</gui> "
-"<gui>Previous Conversations</gui></guiseq>. Alternatively, press <key>F3</"
-"key>."
-msgstr ""
-"从<gui>联系人列表</gui>窗口,选择<guiseq><gui>查看</gui><gui>最近会话</gui></"
-"guiseq>。或者可以按<key>F3</key>键。"
-
-#: C/prev-conv.page:63(item/p)
-msgid ""
-"Select an account from the drop-down list in the top. A list of contacts and "
-"chat room for that account will be shown below."
-msgstr "在顶部的下拉列表中选择一个帐号。下方显示该帐号的联系人列表和聊天室。"
-
-#: C/prev-conv.page:67(item/p)
-msgid ""
-"Type the text you want to search for in the <gui>Search</gui> text field."
-msgstr "在<gui>搜索</gui>文本框输入您要搜索的文本。"
-
-#: C/prev-conv.page:71(item/p)
-msgid ""
-"Any conversations that matched your search terms will be shown. By default, "
-"conversations are ordered by date."
-msgstr "符合搜索条件的会话会显示在下面的列表中。会话默认按日期排序。"
-
-#: C/prev-conv.page:80(section/title)
-msgid "Browse previous conversations"
-msgstr "浏览之前的会话"
-
-#: C/prev-conv.page:82(section/p)
-msgid ""
-"You can browse your previous conversations with your contacts or in chat "
-"rooms by date."
-msgstr "您可以按时间顺序浏览之前和联系人或在聊天室中的会话。"
-
-#: C/prev-conv.page:91(item/p)
-msgid ""
-"Select an account from the drop-down list in the top left. A list of "
-"contacts and chat room for that account will be shown below."
-msgstr ""
-"在左上的下拉列表中选择一个帐号。下方会显示这个帐号的联系人和聊天室列表。"
-
-#: C/prev-conv.page:95(item/p)
-msgid ""
-"Select a contact or chat room to view your previous conversations from. By "
-"default the most recent conversation will be shown."
-msgstr "选择一个联系人或聊天室以查看之前的会话。默认显示的是最近的会话。"
-
-#: C/prev-conv.page:99(item/p)
-msgid ""
-"You can browse your conversations by date. Days on which you had a "
-"conversation with the selected contact will be shown in bold text. Click a "
-"date to select it. Click the arrows next to the month and year to browse "
-"earlier dates."
-msgstr ""
-"您可以按日期浏览您的会话。如果在某日您所选择的帐号有过会话,该日会以粗体显"
-"示。点击一个日期以选择它。点击月和年旁的箭头以浏览更早的日期。"
-
-#: C/prev-conv.page:105(section/p)
-msgid ""
-"You can search for text in the conversations by typing into the search field "
-"at the top. The matching conversations will be showed."
-msgstr ""
-"您可以在顶部的搜索栏中输入文字,以在会话中搜索文字。匹配的会话会显示出来。"
-
-#: C/prev-conv.page:111(note/p)
-msgid ""
-"You can quickly view the previous conversations with one of your contacts "
-"from the <gui>Contact List</gui> window. Simply right click the contact and "
-"choose <gui>Previous Conversations</gui>. The <gui>Previous Conversations</"
-"gui> window will open with that contact already selected."
-msgstr ""
-"在 <gui>联系人列表</gui> 窗口中,您可以快速查看与某个联系人之前进行过的会话。"
-"右键点击该联系人,选择 <gui>最近回话</gui>。与该联系人的<gui>最近会话</gui>窗"
-"口将会打开,并且选中该联系人。"
-
-#: C/prob-conn-acctdisabled.page:7(info/desc)
-msgid ""
-"The instant messaging account that you want to use is not enabled in the "
-"list of accounts."
-msgstr "您要连接的即时通信帐号没有在帐号列表中启用。"
-
-#: C/prob-conn-acctdisabled.page:34(page/title)
-msgid "My account is not enabled"
-msgstr "我的帐号没有启用"
-
-#: C/prob-conn-acctdisabled.page:36(page/p)
-msgid ""
-"If the instant messaging account that you want to use is not enabled in the "
-"drop-down account list when you try to start a new conversation or join a "
-"room, your account details may not be correct."
-msgstr ""
-"如果当您尝试开始一个新会话或者加入房间时,要使用的即时聊天帐号没有在下拉的账"
-"户列表中启用,您的帐号信息可能不正确。"
-
-#: C/prob-conn-acctdisabled.page:44(item/p) C/prob-conn-auth.page:45(item/p)
-#: C/prob-conn-neterror.page:53(item/p)
-msgid ""
-"Make sure that you are connected to the Internet, or to a local area network."
-msgstr "确保您已经连接到互联网,或者一个本地网络。"
-
-#: C/prob-conn-acctdisabled.page:49(item/p)
-msgid ""
-"Choose <guiseq><gui>Edit</gui><gui>Accounts</gui></guiseq> and select the "
-"account that is not working."
-msgstr ""
-"选择<guiseq><gui>编辑</gui><gui>帐号</gui></guiseq>,再选择不工作的帐号。"
-
-#: C/prob-conn-acctdisabled.page:55(item/p) C/prob-conn-auth.page:63(item/p)
-msgid ""
-"Type your username and password again to make sure that they are correct."
-msgstr "再次输入您的用户名和密码,以确保它们是正确的。"
-
-#: C/prob-conn-acctdisabled.page:60(item/p)
-#: C/prob-conn-neterror.page:64(item/p)
-msgid ""
-"Check in the <gui>Advanced</gui> section that all the details are correct. "
-"You should be able to find these details from the website of the messaging "
-"service."
-msgstr ""
-"检查<gui>高级</gui>选项卡中的所有细节是否正确。您应当可以从即时通讯服务商的网"
-"站上找到这些信息。"
-
-#: C/prob-conn-acctdisabled.page:66(item/p)
-msgid "Check that the account is switched on."
-msgstr "检查帐号是否开启。"
-
-#: C/prob-conn-auth.page:8(info/desc)
-msgid ""
-"An error message which says “<gui>Authentication failed</gui>” appears in "
-"the main window."
-msgstr "主窗口中显示了一个错误提示信息,“<gui>验证失败</gui>”。"
-
-#: C/prob-conn-auth.page:36(page/title)
-msgid "I get a message that says “Authentication failed”"
-msgstr "我收到“验证失败”的错误提示信息"
-
-#: C/prob-conn-auth.page:38(page/p)
-msgid ""
-"This kind of error happens when your instant messaging service is not "
-"allowing you to connect because it does not recognize your username or "
-"password for some reason."
-msgstr ""
-"这种错误发生在您的即时通信服务器无法确认您的身份,不允许您连接时。比如,因为"
-"某种原因,它无法识别您的用户名或者密码。"
-
-#: C/prob-conn-auth.page:50(item/p)
-msgid ""
-"Make sure that you have registered an account with the service you are "
-"trying to connect to. If you do not have an account, most services will not "
-"allow you to connect."
-msgstr ""
-"确保您已经在要连接的服务上注册了帐号。如果没有帐号,多数服务都不会允许您连"
-"接。"
-
-#: C/prob-conn-auth.page:57(item/p) C/prob-conn-name.page:43(item/p)
-#: C/prob-conn-neterror.page:58(item/p)
-msgid ""
-"Click the <media type=\"image\" mime=\"image/png\" src=\"figures/gtk-edit.png"
-"\">edit</media> icon in the error message."
-msgstr ""
-"点击错误提示信息上的<media type=\"image\" mime=\"image/png\" src=\"figures/"
-"gtk-edit.png\">编辑</media>图标。"
-
-#: C/prob-conn-auth.page:68(item/p)
-msgid ""
-"Deselect the <gui>Enabled</gui>, and then select it again to try to "
-"reconnect to the service."
-msgstr "取消选择<gui>已启用</gui>,然后再次选中以重新连接到服务器。"
-
-#: C/prob-conn-name.page:9(info/title)
-#, fuzzy
-#| msgid "“Name in use”"
-msgctxt "link:error-msg"
-msgid "“Name in use”"
-msgstr "“用户名已经被占用”"
-
-#: C/prob-conn-name.page:10(info/desc)
-msgid ""
-"An error message which says “<gui>Name in use</gui>” appears in the main "
-"window."
-msgstr "主窗口中显示了一个错误提示信息,“<gui>用户名已被占用</gui>”。"
-
-#: C/prob-conn-name.page:33(page/title)
-msgid "I get a message that says “Name in use”"
-msgstr "我收到“用户名已经被占用”的错误提示信息"
-
-#: C/prob-conn-name.page:35(page/p)
-msgid ""
-"This kind of error happens when you try to connect to your IRC account and "
-"you are using a nickname that is already being used by someone else on that "
-"particular network."
-msgstr ""
-"这种错误出现在您尝试连接到 IRC 帐号,然而您使用的昵称正在被该网络上其他人使用"
-"的情况下。"
-
-#: C/prob-conn-name.page:51(item/p)
-msgid "In the <gui>Nickname</gui> text box, type a new nickname."
-msgstr "在<gui>昵称</gui>文本框中,输入一个新昵称。"
-
-#: C/prob-conn-name.page:56(item/p)
-msgid ""
-"If you have registered that nickname within the network you are using, set "
-"the password for that nickname. For more information, see <link xref=\"irc-"
-"nick-password\"/>."
-msgstr ""
-"如果您在所用的网路中注册了这个昵称,请为该昵称设置密码。更多信息参见<link "
-"xref=\"irc-nick-password\"/>。"
-
-#: C/prob-conn-name.page:65(item/p) C/prob-conn-neterror.page:79(item/p)
-msgid ""
-"Switch the account off, and then switch it on to try to reconnect to the "
-"service."
-msgstr "关闭帐号,然后开启该帐号并尝试重新连接到服务。"
-
-#: C/prob-conn-neterror.page:7(info/desc)
-msgid ""
-"An error message which says “<gui>Network error</gui>” appears in the main "
-"window."
-msgstr "主窗口中显示了一个错误提示信息,“<gui>网络错误</gui>”。"
-
-#: C/prob-conn-neterror.page:34(page/title)
-msgid "I get a message that says “Network error”"
-msgstr "我收到“网络错误”的错误提示信息"
-
-#: C/prob-conn-neterror.page:42(page/p)
-msgid ""
-"This kind of error happens when <app>Empathy</app> cannot communicate with "
-"the instant messaging service for some reason."
-msgstr ""
-"这种错误在 <app>Empathy</app> 由于某种原因而无法和即时通讯服务器连上时出现。"
-
-#: C/prob-conn-neterror.page:46(page/p)
-msgid ""
-"Also, this kind of error happens when you try to use an IRC account without "
-"setting a nickname."
-msgstr "此外,这种错误也在您试图不设置昵称而使用 IRC 帐号时出现。"
-
-#: C/prob-conn-neterror.page:87(section/title)
-msgid "Proxy support"
-msgstr "代理支持"
-
-#: C/prob-conn-neterror.page:88(section/p)
-msgid ""
-"At the moment <app>Empathy</app> can not be configured to work with a proxy."
-msgstr "目前 <app>Empathy</app> 无法在代理下工作。"
-
-#: C/prob-conn.page:7(info/desc)
-msgid "Diagnose common problems connecting to an instant messaging service."
-msgstr "诊断连接到一个即时消息服务的常见问题。"
-
-#: C/prob-conn.page:29(page/title)
-msgid "Problems connecting to an instant messaging service"
-msgstr "连接到即时消息服务时的问题"
-
-#: C/remove-account.page:8(info/desc)
-msgid "Completely remove an account from <app>Empathy</app>."
-msgstr "从 <app>Empathy</app> 中完全地删除一个帐号。"
-
-#: C/remove-account.page:34(page/title)
-msgid "Remove an account"
-msgstr "删除帐号"
-
-#: C/remove-account.page:36(page/p)
-msgid ""
-"You can completely remove an account from <app>Empathy</app> if you no "
-"longer wish to use the account. If you wish to use the account in "
-"<app>Empathy</app> again in the future, you will have to add your account "
-"details again."
-msgstr ""
-"如果你不想再使用某个帐号,您可以从 <app>Empathy</app> 中完全地删除这个帐号。"
-"如果您将来又希望在 <app>Empathy</app> 中使用这个帐号了,您可以再添加这个账"
-"户。"
-
-#: C/remove-account.page:47(item/p)
-msgid ""
-"Select the account you wish to remove from the accounts list on the left "
-"side of the window."
-msgstr "在窗口左侧的帐号列表中选择您想要删除的帐号。"
-
-# 有个"-"的按钮图标,可以保持 - 不变。
-#: C/remove-account.page:51(item/p)
-msgid "Click <gui style=\"button\">-</gui>."
-msgstr "点击<gui style=\"button\">-</gui>。"
-
-#: C/remove-account.page:54(item/p)
-msgid ""
-"A dialog will be shown asking for confirmation. Click the <gui>Remove</gui> "
-"button to permanently remove the account."
-msgstr ""
-"一个弹出对话框会要求您确认删除。点击<gui>删除</gui>按钮来永久的删除这个帐号。"
-
-#: C/remove-account.page:60(note/p)
-msgid ""
-"Even after removing an account, <app>Empathy</app> does not delete your "
-"conversation history for that account."
-msgstr "即使删除了帐号,<app>Empathy</app> 也不会删除这个帐号的聊天记录。"
-
-#: C/salut-protocol.page:8(info/desc)
-msgid "Understanding the People Nearby feature."
-msgstr "理解附近的人(People Nearby)功能"
-
-#: C/salut-protocol.page:33(page/title)
-msgid "What is People Nearby?"
-msgstr "什么是“附近的人”?"
-
-#: C/salut-protocol.page:40(page/p)
-msgid ""
-"The People Nearby service is a serverless communication service: you do not "
-"need to connect and authenticate to a central server in order to use it."
-msgstr ""
-"附近的人(People Nearby)服务是一个无服务器的通讯服务:您不需要连接并认证到一个"
-"中央服务器来使用这个功能。"
-
-#: C/salut-protocol.page:45(page/p)
-msgid ""
-"This kind of serverless messaging system is restricted to a local area "
-"network and an active Internet connection is not necessary."
-msgstr "这类无服务器的通讯系统只局限于本地局域网,并且不需要互联网链接。"
-
-#: C/salut-protocol.page:49(page/p)
-msgid ""
-"The people that use this service inside the same local area network will be "
-"auto-discovered, and it will be possible to send them messages and files as "
-"with other services."
-msgstr ""
-"会自动的发现在同一个局域网中使用这个服务的人,并且可以给他们发送消息甚至文"
-"件,想其它服务一样。"
-
-#: C/salut-protocol.page:54(page/p)
-msgid ""
-"All the modern local area networks should be able to support this kind of "
-"service."
-msgstr "所有现代的本地局域网都应该可以支持这类服务。"
-
-#: C/send-file.page:8(info/desc)
-msgid "Send a file from your computer to one of your contacts."
-msgstr "从您的计算机发送文件给您的联系人。"
-
-#: C/send-file.page:36(page/title)
-msgid "Send files"
-msgstr "发送文件"
-
-#: C/send-file.page:45(item/p)
-msgid ""
-"Right click on the contact you want to send a file to, and choose <gui>Send "
-"file</gui>."
-msgstr "右键点击要向其发送文件的联系人,然后选择<gui>发送文件</gui>。"
-
-#: C/send-file.page:50(item/p)
-#, fuzzy
-#| msgid ""
-#| "Click on the contact you want to send a file, and choose "
-#| "<guiseq><gui>Edit</gui><gui>Contact</gui><gui>Send file</gui></guiseq>."
-msgid ""
-"Click on the contact you want to send a file, and choose <guiseq><gui>Edit</"
-"gui> <gui>Contact</gui><gui>Send file</gui></guiseq>."
-msgstr ""
-"点击要向其发送文件的联系人,然后选择<guiseq><gui>编辑</gui><gui>联系人</"
-"gui><gui>发送文件</gui></guiseq>。"
-
-#: C/send-file.page:58(item/p)
-msgid "Select the file to send, and click on <gui>Send</gui>."
-msgstr "选择要发送的文件,并点击<gui>发送</gui>。"
-
-#: C/send-file.page:63(item/p)
-msgid "The <gui>File Transfers</gui> window will appear."
-msgstr "<gui>文件传输</gui>窗口会被显示。"
-
-#: C/send-file.page:66(item/p)
-msgid ""
-"Wait for your contact to accept the file transfer, or click <gui>Stop</gui> "
-"to halt the transfer."
-msgstr "请等待您的联系人接受文件传输,或点击<gui>停止</gui>来终止传输。"
-
-#: C/send-file.page:72(item/p)
-msgid ""
-"Once the transfer is finished, it is possible to close the <gui>File "
-"Transfers</gui> window."
-msgstr "传输结束之后,就可以关闭<gui>文件传输</gui>窗口了。"
-
-#: C/send-file.page:80(note/p)
-msgid ""
-"If you have multiple finished transfers listed in the window, click on "
-"<gui>Clear</gui> to empty the list. This will only remove the files from the "
-"list and will not delete them from your computer."
-msgstr ""
-"如果窗口中列出了很多已经完成的传输,点击<gui>清除</gui>可以清空列表。这只会将"
-"列表清空,而不会从您的计算机上删除这些文件。"
-
-#: C/send-file.page:87(note/p)
-msgid ""
-"It is possible to send files only using the following services: <em>Jabber</"
-"em>, <em>Google Talk</em> and <em>People Nearby</em>."
-msgstr ""
-"只有使用下列服务才能发送文件:<em>Jabber</em>、<em>Google Talk</em>和<em>附近"
-"的人</em>。"
-
-#: C/send-file.page:93(note/p)
-msgid ""
-"In order to send a file to someone, you need to be connected to the "
-"Internet, or to a local area network."
-msgstr "要向别人发送文件,您需要连接到互联网,或本地局域网。"
-
-#: C/send-message.page:8(info/desc)
-msgid "Send a message to one of your contacts."
-msgstr "发送消息给一个您的联系人。"
-
-#: C/send-message.page:32(page/title)
-msgid "Send a message to someone"
-msgstr "向某人发送消息"
-
-#: C/send-message.page:36(item/p)
-msgid ""
-"From the <gui>Contact List</gui> window, double-click the name of the "
-"contact that you want to have a conversation with."
-msgstr "在<gui>联系人列表</gui>窗口中,双击要与之聊天的联系人的名字。"
-
-#: C/send-message.page:42(item/p)
-msgid ""
-"A new window will open. Type a message into the box at the bottom of the "
-"window and press <key>Enter</key> to send it."
-msgstr ""
-"一个新窗口会被打开。在窗口底部的文本框中输入一条消息,然后按<key>Enter</key>"
-"发送。"
-
-#: C/send-message.page:50(section/title)
-msgid "Send a message to a meta-contact"
-msgstr "向一位元联系人发送消息"
-
-#: C/send-message.page:58(item/p)
-msgid ""
-"Select the contact you want to have the conversation, and from the menu "
-"select <gui style=\"menuitem\">Chat</gui>."
-msgstr ""
-"选择您想要与之聊天的联系人,并在菜单中选择 <gui style=\"menuitem\">聊天</"
-"gui>。"
-
-#: C/set-custom-status.page:9(info/desc)
-msgid "Add, edit or delete personal messages for your status."
-msgstr "为您的状态添加、编辑或删除个人消息。"
-
-#: C/set-custom-status.page:15(credit/name)
-msgid "Jim Campbell"
-msgstr "Jim Campbell"
-
-#: C/set-custom-status.page:34(page/title)
-msgid "Set a custom message"
-msgstr "设置一个自定义消息"
-
-#: C/set-custom-status.page:36(page/p)
-msgid ""
-"Sometimes you may want to set a custom message for your status, for example "
-"to let people know that you will be unavailable for a certain period of time."
-msgstr ""
-"有时您也许想要为您的状态设置一个自定义消息,例如,让别人知道您可能在一段时间"
-"内不在。"
-
-#: C/set-custom-status.page:40(page/p)
-msgid ""
-"It is possible to set a custom message based on the different statuses "
-"available."
-msgstr "可以根据不同的状态来设置自定义消息。"
-
-#: C/set-custom-status.page:46(item/p) C/set-custom-status.page:82(item/p)
-msgid ""
-"From the <gui>Contact List</gui> window, click on the drop-down list at the "
-"top."
-msgstr "在<gui>联系人列表</gui>窗口,点击顶部的下拉列表。"
-
-#: C/set-custom-status.page:52(item/p)
-msgid ""
-"Select the status you want to add a custom message to. You have to select "
-"the one identified with the label <gui>Custom Message</gui>."
-msgstr ""
-"选择您希望添加自定义消息的状态。您必须选择有<gui>自定义消息</gui>标签标记的状"
-"态。"
-
-#: C/set-custom-status.page:58(item/p)
-msgid ""
-"Enter your custom message in the text box at the top of the window, and "
-"press <key>Enter</key> to set the message."
-msgstr ""
-"在窗口顶部的文本框中输入您的自定义消息,然后按<key>Enter</key>来设定这个消"
-"息。"
-
-#: C/set-custom-status.page:64(item/p)
-msgid ""
-"If you want to set the custom message as a favorite, saving it in order to "
-"use it again, click on the little heart on the right of the text box where "
-"you wrote your custom message."
-msgstr ""
-"如果您希望收藏一个自定义消息,即将它保存下来方便日后使用,请点击您撰写自定义"
-"消息的文本框右侧的心形符号。"
-
-#: C/set-custom-status.page:69(item/p)
-msgid ""
-"If you do not do it, the custom message will not be available the next time "
-"you use <app>Empathy</app>. It will be saved only for the current session."
-msgstr ""
-"如果您不这么做,那么下次您使用 <app>Empathy</app> 的时候,这个自定义消息就不"
-"会再出现。它只在 <app>Empathy</app> 本次运行期间被保留。"
-
-#: C/set-custom-status.page:78(section/title)
-msgid "Edit and remove a custom message"
-msgstr "编辑和删除自定义消息"
-
-#: C/set-custom-status.page:88(item/p)
-msgid "Select <gui>Edit Custom Message</gui>."
-msgstr "选择<gui>编辑自定义消息</gui>。"
-
-#: C/set-custom-status.page:95(item/p)
-msgid "To edit a custom message:"
-msgstr "要编辑自定义消息:"
-
-#: C/set-custom-status.page:100(item/p)
-msgid ""
-"From the <gui>Saved Presets</gui> box, select the status message you want to "
-"edit and double-click on it."
-msgstr "在<gui>已保存的自定义状态</gui>中,选择您想要编辑的状态消息并双击它。"
-
-#: C/set-custom-status.page:106(item/p)
-msgid "Type the new custom message and press <key>Enter</key> to modify it."
-msgstr "输入新的自定义消息并且按<key>Enter</key>来修改它。"
-
-#: C/set-custom-status.page:113(item/p)
-msgid "To remove a custom message:"
-msgstr "要删除自定义消息:"
-
-#: C/set-custom-status.page:118(item/p)
-msgid ""
-"From the <gui>Saved Presets</gui> box, select the status message you want to "
-"remove."
-msgstr "在<gui>已保存的自定义状态</gui>中,选择要删除的状态消息。"
-
-#: C/set-custom-status.page:124(item/p)
-msgid "Click on the <gui>Remove</gui> button."
-msgstr "点击<gui>删除</gui>按钮。"
-
-#: C/set-custom-status.page:133(item/p)
-msgid "When finished, click on <gui>Close</gui>."
-msgstr "完成后,点击<gui>关闭</gui>。"
-
-#: C/set-custom-status.page:140(note/p)
-msgid ""
-"When you edit a custom message, it will not be set as the current status "
-"message. You will need to select it from the <gui>Contact List</gui> window."
-msgstr ""
-"当您编辑自定义消息时,它不会被设为当前状态消息。您需要在<gui>联系人列表</gui>"
-"窗口中选中它。"
-
-#: C/share-desktop.page:7(info/desc)
-msgid "Show your desktop to your contacts."
-msgstr "向您的联系人展示您的桌面。"
-
-#: C/share-desktop.page:33(page/title)
-msgid "Share your desktop"
-msgstr "共享您的桌面"
-
-#: C/share-desktop.page:35(page/p)
-msgid ""
-"It is possible to share your desktop with some of your contacts. You can use "
-"this functionality to show your desktop to your contacts to, for example, "
-"ask for help or help your contacts resolve a problem."
-msgstr ""
-"您可以和联系人共享桌面。使用这个功能,您可以向联系人展示您的桌面,来寻求帮助"
-"或帮助联系人解决问题。"
-
-#: C/share-desktop.page:42(note/p)
-msgid ""
-"To be able to share your desktop, you need to have a VNC server, which has "
-"support for the feature, installed on your system. <app>Vino</app>, the "
-"GNOME VNC server, has the required support."
-msgstr ""
-"要共享您的桌面,您的系统中必须安装支持此功能的 VNC 服务器。<app>Vino</app>,"
-"GNOME 的 VNC 服务器,就有这项功能。"
-
-#: C/share-desktop.page:51(item/p)
-msgid "From the <gui>Contact List</gui> window, do one of the following:"
-msgstr "在<gui>联系人列表</gui>窗口,执行下列操作之一:"
-
-#: C/share-desktop.page:56(item/p)
-#, fuzzy
-#| msgid ""
-#| "Select the contact you want to share your desktop with and choose "
-#| "<guiseq><gui>Edit</gui><gui>Contact</gui><gui>Share My Desktop</gui></"
-#| "guiseq>."
-msgid ""
-"Select the contact you want to share your desktop with and choose "
-"<guiseq><gui>Edit</gui><gui>Contact</gui> <gui>Share My Desktop</gui></"
-"guiseq>."
-msgstr ""
-"选择您想要共享您的桌面的联系人,并选择 <guiseq><gui>编辑</gui><gui>联系人</"
-"gui><gui>共享我的桌面</gui></guiseq>。"
-
-#: C/share-desktop.page:63(item/p)
-msgid ""
-"Right-click on the name of the contact you want to share your desktop with "
-"and select <gui>Share My Desktop</gui>."
-msgstr ""
-"右键点击您想要共享您桌面的联系人的名字,然后选择<gui>共享我的桌面</gui>。"
-
-#: C/share-desktop.page:71(item/p)
-msgid ""
-"An invitation to view your desktop will be sent to the contact you have "
-"selected. To view your desktop, they will need to accept it."
-msgstr ""
-"您选择的联系人会收到一个查看您桌面的邀请。要查看您的桌面,他们需要接受邀请。"
-
-#: C/share-desktop.page:77(item/p)
-msgid ""
-"You can disconnect the contact from your computer using your desktop sharing "
-"application."
-msgstr "在您的桌面共享程序中,您可以断开您的联系人到您的计算机的连接。"
-
-#: C/share-desktop.page:82(note/p)
-msgid ""
-"For more information about how to use the remote desktop sharing "
-"application, refer to its help."
-msgstr "如果需要更多关于如何使用远程桌面查共享程序的信息,请参看其帮助。"
-
-#: C/share-desktop.page:90(page/p)
-msgid ""
-"When you share your desktop with someone else, it is possible to experience "
-"system performance slowdown and low Internet speed."
-msgstr ""
-"当您与其他人共享您的桌面的时候,可能会出现系统性能降低和网络速度下降的现象。"
-
-#: C/share-desktop.page:96(note/p)
-msgid ""
-"Some of your contacts may not be able to use this feature. It is necessary "
-"for them to have version 2.28, or newer, of <app>Empathy</app> and a "
-"compatible remote desktop viewer application installed in their system."
-msgstr ""
-"并非您的所有联系人都可以使用这个功能。他们必须使用 2.28 或更新版本的 "
-"<app>Empathy</app> 并且在安装了兼容的远程桌面查看器程序。"
-
-#. This is a reference to an external file such as an image or video. When
-#. the file changes, the md5 hash will change to let you know you need to
-#. update your localized copy. The msgstr is not used at all. Set it to
-#. whatever you like once you have updated your copy of the file.
-#: C/status-icons.page:39(media)
-#, fuzzy
-#| msgid ""
-#| "@@image: 'figures/available.png'; md5=2196b2f0ad4ce26fdb7b9d48e75d1947"
-msgctxt "_"
-msgid ""
-"external ref='figures/available.png' md5='2196b2f0ad4ce26fdb7b9d48e75d1947'"
-msgstr "@@image: 'figures/available.png'; md5=2196b2f0ad4ce26fdb7b9d48e75d1947"
-
-#. This is a reference to an external file such as an image or video. When
-#. the file changes, the md5 hash will change to let you know you need to
-#. update your localized copy. The msgstr is not used at all. Set it to
-#. whatever you like once you have updated your copy of the file.
-#: C/status-icons.page:45(media)
-#, fuzzy
-#| msgid "@@image: 'figures/busy.png'; md5=15eb2adff5faedf97b0cb9105d09410a"
-msgctxt "_"
-msgid "external ref='figures/busy.png' md5='15eb2adff5faedf97b0cb9105d09410a'"
-msgstr "@@image: 'figures/busy.png'; md5=15eb2adff5faedf97b0cb9105d09410a"
-
-#. This is a reference to an external file such as an image or video. When
-#. the file changes, the md5 hash will change to let you know you need to
-#. update your localized copy. The msgstr is not used at all. Set it to
-#. whatever you like once you have updated your copy of the file.
-#: C/status-icons.page:53(media)
-#, fuzzy
-#| msgid "@@image: 'figures/away.png'; md5=9c504d6ffa0cf1a9cc8933d16e1bea33"
-msgctxt "_"
-msgid "external ref='figures/away.png' md5='9c504d6ffa0cf1a9cc8933d16e1bea33'"
-msgstr "@@image: 'figures/away.png'; md5=9c504d6ffa0cf1a9cc8933d16e1bea33"
-
-#. This is a reference to an external file such as an image or video. When
-#. the file changes, the md5 hash will change to let you know you need to
-#. update your localized copy. The msgstr is not used at all. Set it to
-#. whatever you like once you have updated your copy of the file.
-#.
-#. This is a reference to an external file such as an image or video. When
-#. the file changes, the md5 hash will change to let you know you need to
-#. update your localized copy. The msgstr is not used at all. Set it to
-#. whatever you like once you have updated your copy of the file.
-#: C/status-icons.page:62(media) C/status-icons.page:69(media)
-#, fuzzy
-#| msgid "@@image: 'figures/offline.png'; md5=c5b0c21181cbd6e13f8909243c0fa964"
-msgctxt "_"
-msgid ""
-"external ref='figures/offline.png' md5='c5b0c21181cbd6e13f8909243c0fa964'"
-msgstr "@@image: 'figures/offline.png'; md5=c5b0c21181cbd6e13f8909243c0fa964"
-
-#: C/status-icons.page:7(info/desc)
-msgid "Understanding the various statuses and status icons."
-msgstr "理解各种状态和状态图标。"
-
-#: C/status-icons.page:35(page/title)
-msgid "Status Types and Icons"
-msgstr "状态的类别及其图标"
-
-#: C/status-icons.page:39(item/title)
-#, fuzzy
-#| msgid ""
-#| "Click the <media type=\"image\" mime=\"image/png\" src=\"figures/gtk-edit."
-#| "png\">edit</media> icon in the error message."
-msgid ""
-"<media type=\"image\" mime=\"image/png\" src=\"figures/available.png"
-"\">Available icon</media> <gui>Available</gui>"
-msgstr ""
-"点击错误提示信息上的<media type=\"image\" mime=\"image/png\" src=\"figures/"
-"gtk-edit.png\">编辑</media>图标。"
-
-#: C/status-icons.page:41(item/p)
-msgid ""
-"Use the <em>Available</em> status when you are at your computer and able to "
-"chat with your contacts. You can set a custom message for this status."
-msgstr ""
-"当您在电脑旁并且有空和您的联系人聊天时,使用<em>在线</em>状态。您可以为此状态"
-"自定一条消息。"
-
-#: C/status-icons.page:45(item/title)
-#, fuzzy
-#| msgid ""
-#| "Click the <media type=\"image\" mime=\"image/png\" src=\"figures/gtk-edit."
-#| "png\">edit</media> icon in the error message."
-msgid ""
-"<media type=\"image\" mime=\"image/png\" src=\"figures/busy.png\">Busy icon</"
-"media> <gui>Busy</gui>"
-msgstr ""
-"点击错误提示信息上的<media type=\"image\" mime=\"image/png\" src=\"figures/"
-"gtk-edit.png\">编辑</media>图标。"
-
-#: C/status-icons.page:47(item/p)
-msgid ""
-"Use the <em>Busy</em> status to let your contacts know that you don’t want "
-"to chat right now. They can still contact you, for instance if they have "
-"something urgent they need to discuss. By default, <app>Empathy</app> will "
-"not use notification bubbles and sounds when you are busy. You can set a "
-"custom message for this status."
-msgstr ""
-"使用<em>忙碌</em>以让您的联系人知道您当前不想聊天。他们仍然可以联系您,比如他"
-"们可能有急事需要讨论。默认地,当您忙碌时,<app>Empathy</app> 不会使用气泡提示"
-"和声音提示。您可以为此状态自定一条消息。"
-
-#: C/status-icons.page:53(item/title)
-#, fuzzy
-#| msgid ""
-#| "Click the <media type=\"image\" mime=\"image/png\" src=\"figures/gtk-edit."
-#| "png\">edit</media> icon in the error message."
-msgid ""
-"<media type=\"image\" mime=\"image/png\" src=\"figures/away.png\">Away icon</"
-"media> <gui>Away</gui>"
-msgstr ""
-"点击错误提示信息上的<media type=\"image\" mime=\"image/png\" src=\"figures/"
-"gtk-edit.png\">编辑</media>图标。"
-
-#: C/status-icons.page:55(item/p)
-msgid ""
-"Use the <em>Away</em> status when you are going away from your computer. "
-"<app>Empathy</app> automatically sets your status to Away if you do not use "
-"your computer for a while, or if your screensaver is on. By default, "
-"<app>Empathy</app> will not use notification bubbles and sounds when you are "
-"away. You can set a custom message for this status."
-msgstr ""
-"当您不在电脑旁时,使用<em>离开</em>状态。如果您一段时间内不使用电脑,或者屏幕"
-"保护打开了,<app>Empathy</app> 将自动设置您的状态为离开。默认地,当您离开时,"
-"<app>Empathy</app> 不会使用气泡提示和声音提示。您可以为此状态自定一条消息。"
-
-#: C/status-icons.page:62(item/title)
-#, fuzzy
-#| msgid ""
-#| "Click the <media type=\"image\" mime=\"image/png\" src=\"figures/gtk-edit."
-#| "png\">edit</media> icon in the error message."
-msgid ""
-"<media type=\"image\" mime=\"image/png\" src=\"figures/offline.png\">Offline "
-"icon</media> <gui>Invisible</gui>"
-msgstr ""
-"点击错误提示信息上的<media type=\"image\" mime=\"image/png\" src=\"figures/"
-"gtk-edit.png\">编辑</media>图标。"
-
-#: C/status-icons.page:64(item/p)
-msgid ""
-"When you set your status to <em>Invisible</em>, you will appear as offline "
-"to your contacts. You will still be connected to your accounts, and you "
-"still see your contacts’ statuses and start conversations with them."
-msgstr ""
-"当您将状态设置为<em>隐身</em>时,您的联系人会看到您已离线。但您仍然连接着您的"
-"帐号,并且可以看到您的联系人的状态,或者和他们聊天。"
-
-#: C/status-icons.page:69(item/title)
-#, fuzzy
-#| msgid ""
-#| "Click the <media type=\"image\" mime=\"image/png\" src=\"figures/gtk-edit."
-#| "png\">edit</media> icon in the error message."
-msgid ""
-"<media type=\"image\" mime=\"image/png\" src=\"figures/offline.png\">Offline "
-"icon</media> <gui>Offline</gui>"
-msgstr ""
-"点击错误提示信息上的<media type=\"image\" mime=\"image/png\" src=\"figures/"
-"gtk-edit.png\">编辑</media>图标。"
-
-#: C/status-icons.page:71(item/p)
-msgid ""
-"Setting your status to <em>Offline</em> disconnects you from all of your "
-"accounts."
-msgstr "将状态设置为<em>离线</em>将会断开您所有帐号的连接。"
-
-#: C/video-call.page:11(info/desc)
-msgid "Start a video conversation with one of your contacts."
-msgstr "同您的联系人进行视频聊天。"
-
-#: C/video-call.page:37(page/title)
-msgid "Start a video conversation"
-msgstr "开始视频聊天"
-
-#: C/video-call.page:39(page/p)
-msgid ""
-"If you have a webcam, you can call your contacts and have a video "
-"conversation with them. This feature only works with certain types of "
-"accounts, and it requires the other person to have an application that "
-"supports video calls."
-msgstr ""
-"如果您有网络摄像头,您可以呼叫您的联系人并和他们进行视频聊天。此功能仅特定类"
-"型的帐号可用,并需要对方使用的程序支持视频呼叫。"
-
-#: C/video-call.page:46(item/p)
-#, fuzzy
-#| msgid ""
-#| "Select the contact you want to have the conversation, and from the menu "
-#| "select <gui style=\"menuitem\">Video Call</gui>."
-msgid ""
-"Right-click on the contact that you want to call and select <gui style="
-"\"menuitem\">Video Call</gui>."
-msgstr ""
-"选择要聊天的联系人,然后在菜单中选择<gui style=\"menuitem\">视频呼叫</gui>"
-
-#: C/video-call.page:54(item/p)
-#, fuzzy
-#| msgid ""
-#| "To end the conversation, click on <gui style=\"button\">Hang up</gui>."
-msgid ""
-"To end the conversation, click on the <gui style=\"button\">hang up</gui> "
-"button."
-msgstr "点击<gui style=\"button\">挂断</gui>以结束会话。"
-
-#: C/video-call.page:60(note/p)
-msgid ""
-"To turn a video conversation into an audio conversation, choose <guiseq><gui "
-"style=\"menu\">Video</gui><gui style=\"menuitem\">Video Off</gui></guiseq>."
-msgstr ""
-"要将视频会话转为语音会话,选择 <guiseq><gui style=\"menu\">视频</gui><gui "
-"style=\"menuitem\">视频关闭</gui></guiseq>。"
-
-#: C/video-call.page:65(section/title)
-msgid "Start a video conversation with a meta-contact"
-msgstr "和一位元联系人进行视频聊天。"
-
-#: C/video-call.page:73(item/p)
-msgid ""
-"Select the contact you want to have the conversation, and from the menu "
-"select <gui style=\"menuitem\">Video Call</gui>."
-msgstr ""
-"选择要聊天的联系人,然后在菜单中选择<gui style=\"menuitem\">视频呼叫</gui>"
-
-#~ msgid ""
-#~ "@@image: 'figures/camera-web.png'; md5=8166b4372f25b78cbf5a64fe2eac2ce5"
-#~ msgstr ""
-#~ "@@image: 'figures/camera-web.png'; md5=8166b4372f25b78cbf5a64fe2eac2ce5"
-
-#~ msgid "milo@ubuntu.com"
-#~ msgstr "milo@ubuntu.com"
-
-#~ msgid ""
-#~ "From the <gui>Contact List</gui> window, click the <media type=\"image\" "
-#~ "mime=\"image/png\" src=\"figures/camera-web.png\">video call</media> icon "
-#~ "next to the name of the contact you wish to call and choose <gui style="
-#~ "\"menuitem\">Video Call</gui>."
-#~ msgstr ""
-#~ "在<gui>联系人列表</gui>窗口,点击您想呼叫的联系人的名字旁的<media type="
-#~ "\"image\" mime=\"image/png\" src=\"figures/camera-web.png\">视频呼叫</"
-#~ "media>图标并选择<gui style=\"menuitem\">视频呼叫</gui>。"
-
-#~ msgid "shaunm@gnome.org"
-#~ msgstr "shaunm@gnome.org"
-
-#~ msgid "Available icon"
-#~ msgstr "在线图标"
-
-#~ msgid "Available"
-#~ msgstr "在线"
-
-#~ msgid "Busy icon"
-#~ msgstr "忙碌图标"
-
-#~ msgid "Busy"
-#~ msgstr "忙碌"
-
-#~ msgid "Away icon"
-#~ msgstr "离开图标"
-
-#~ msgid "Away"
-#~ msgstr "离开"
-
-#~ msgid "Offline icon"
-#~ msgstr "离线图标"
-
-#~ msgid "Invisible"
-#~ msgstr "隐身"
-
-#~ msgid "Offline"
-#~ msgstr "离线"
-
-#~ msgid "kittykat3756@gmail.com"
-#~ msgstr "kittykat3756@gmail.com"
-
-#~ msgid "jwcampbell@gmail.com"
-#~ msgstr "jwcampbell@gmail.com"
-
-#~ msgid "philbull@gmail.com"
-#~ msgstr "philbull@gmail.com"
-
-#~ msgid "I'd like to see this played up a bit more."
-#~ msgstr "我希望看到更多的人来用这个。"
-
-#~ msgid "shaunm"
-#~ msgstr "shaunm"
-
-#~ msgid ""
-#~ "Empathy no longer allows you to create an IRC account without a valid "
-#~ "nick. I've removed the guide link. Remove the text."
-#~ msgstr ""
-#~ "没有有效昵称,Empathy 不允许您创建 IRC 帐号。软件已经移除指南链接。请移除"
-#~ "文本。"
-
-#~ msgid "Install telepathy-idle"
-#~ msgstr "安装 telepathy-idle"
-
-#~ msgid ""
-#~ "@@image: 'figures/empathy-logo.png'; md5=1afc419a644e90b16393807e35cb5cb2"
-#~ msgstr ""
-#~ "@@image: 'figures/empathy-logo.png'; md5=1afc419a644e90b16393807e35cb5cb2"
-
-#~ msgid ""
-#~ "<media type=\"image\" mime=\"image/png\" src=\"figures/empathy-logo.png"
-#~ "\"> Empathy Internet Messenger logo </media> Empathy Internet Messenger"
-#~ msgstr ""
-#~ "<media type=\"image\" mime=\"image/png\" src=\"figures/empathy-logo.png"
-#~ "\"> Empathy 网络聊天工具标识</media> Empathy 网络聊天工具"
-
-#~ msgid "peter.haslam@freenet.de"
-#~ msgstr "peter.haslam@freenet.de"
-
-#~ msgid ""
-#~ "@@image: 'figures/audio-input-microphone.png'; "
-#~ "md5=8d89026b66a263a3bc5b1f0665948567"
-#~ msgstr ""
-#~ "@@image: 'figures/audio-input-microphone.png'; "
-#~ "md5=8d89026b66a263a3bc5b1f0665948567"
-
-#~ msgid "Icon for audio conversation"
-#~ msgstr "语音聊天的图标"
-
-#~ msgid "Icon for video conversation"
-#~ msgstr "视频聊天的图标"
-
-#~ msgid ""
-#~ "I'd like to do tables like this using nothing for No and ✔ for Yes, but "
-#~ "we need to look at the accessibility impact. I've <link href=\"http://"
-#~ "mail.gnome.org/archives/gnome-doc-list/2009-September/msg00006.html"
-#~ "\">asked the accessibility team</link> for input."
-#~ msgstr ""
-#~ "我喜欢做表格时,用空白代替 No,✔ 代表 Yes,但还是要看通用性如何。我已经"
-#~ "<link href=\"http://mail.gnome.org/archives/gnome-doc-list/2009-September/"
-#~ "msg00006.html\">咨询通用性团队</link>发出请求。"
-
-#, fuzzy
-#~ msgid ""
-#~ "There's recent work on telepathy-butterfly and papyon to support audio "
-#~ "and video for MSN. It might be released in time for 2.28, but since it "
-#~ "doesn't follow the Gnome release schedule, I can't be sure. If it looks "
-#~ "like it's going to ship, let's mark it Yes."
-#~ msgstr ""
-#~ "最近 telepathy-butterfly 和 papyon 已经支持 MSN 音频呼叫和视频呼叫。有可能"
-#~ "它们在2月28日前及时发布,但该时间没有遵循 Gnome 发布计划,因此我不太确定。"
-#~ "如果八成能搭载的话,就标为 Yes。"
-
-#~ msgid ""
-#~ "From the <gui>Contact List</gui> window, click the <media type=\"image\" "
-#~ "mime=\"image/png\" src=\"figures/camera-web.png\">video call</media> icon "
-#~ "next to the name of the contact you wish to call and choose <gui style="
-#~ "\"menuitem\">Audio Call</gui>."
-#~ msgstr ""
-#~ "在 <gui>联系人列表</gui> 窗口,点击您想呼叫的联系人的名字旁的 <media type="
-#~ "\"image\" mime=\"image/png\" src=\"figures/camera-web.png\">视频呼叫</"
-#~ "media> 图标并选择 <gui style=\"menuitem\">语音呼叫</gui>。"
-
-#~ msgid "Resource"
-#~ msgstr "资源"
-
-#~ msgid "Priority"
-#~ msgstr "优先级"
-
-#~ msgid "Network"
-#~ msgstr "网络"
-
-#~ msgid "Nickname"
-#~ msgstr "昵称"
-
-#~ msgid "Password"
-#~ msgstr "密码"
-
-#~ msgid "Quit message"
-#~ msgstr "退出消息"
-
-#~ msgid "Charset"
-#~ msgstr "字符集"
-
-#~ msgid "Servers"
-#~ msgstr "服务器"
-
-#~ msgid "Edit, remove and add a custom message"
-#~ msgstr "编辑、删除和添加自定义消息"
-
-#~ msgid ""
-#~ "To add a new custom message, from the <gui>Add New Preset</gui> section:"
-#~ msgstr "要添加一条新的自定义消息,在<gui>添加新自定义状态</gui>选项卡:"
-
-#~ msgid ""
-#~ "Click on the drop-down list to select the status you want to set a custom "
-#~ "message to."
-#~ msgstr "点击下拉列表选择您想要设定自定义消息的状态。"
-
-#~ msgid "Click on the text box, and type the new custom message."
-#~ msgstr "点击文本框,输入新的自定义消息。"
-
-#~ msgid "Click on <gui>Add</gui> to add the new message to the presets ones."
-#~ msgstr "点击<gui>添加</gui>将新消息添加到已保存的的自定义消息列表中。"
-
-#~ msgid "Click on <gui style=\"button\">Remove</gui>."
-#~ msgstr "点击<gui style=\"button\">删除</gui>。"
-
-#~ msgid ""
-#~ "Deselect the <gui>Enabled</gui> check-box next to the name of your "
-#~ "account, and then select it again to try to reconnect to the service."
-#~ msgstr ""
-#~ "取消选择帐号旁边的<gui>已启用</gui>复选框,然后再次选中以重新连接到服务"
-#~ "器。"
-
-#~ msgid ""
-#~ "Check that the <gui style=\"checkbox\">Enabled</gui> check-box is "
-#~ "selected. If it is not, select the check-box to enable the account."
-#~ msgstr ""
-#~ "检查<gui style=\"checkbox\">已启用</gui>选框是否勾选。没有的勾选它已启用账"
-#~ "户。"
-
-#~ msgid "Select the <gui>Search</gui> tab."
-#~ msgstr "选择<gui>搜索</gui>标签。"
-
-#~ msgid ""
-#~ "In the <gui>For</gui> field, type the text you want to search for. Click "
-#~ "<gui>Find</gui> or press <key>Enter</key>."
-#~ msgstr ""
-#~ "在<gui>关键词</gui>中,输入您想要搜索的文字。点击<gui>查找</gui>或按"
-#~ "<key>Enter</key>。"
-
-#~ msgid ""
-#~ "Click on a conversation to view it. <app>Empathy</app> will select the "
-#~ "text in the conversation that matched your search terms."
-#~ msgstr ""
-#~ "点击一个会话以查看。<app>Empathy</app> 会选择这个会话中符合您搜索条件的文"
-#~ "字。"
-
-#~ msgid "Select the <gui>Conversations</gui> tab."
-#~ msgstr "选择<gui>会话</gui>标签。"
-
-#~ msgid ""
-#~ "Deselect <gui style=\"checkbox\">Enabled</gui> on the right side of the "
-#~ "window."
-#~ msgstr "在窗口右侧,取消选择 <gui style=\"checkbox\">启用</gui>。"
-
-#~ msgid "Click <gui style=\"button\">Log in</gui>."
-#~ msgstr "点击<gui style=\"button\">登入</gui>。"
diff --git a/libempathy-gtk/.gitignore b/libempathy-gtk/.gitignore
deleted file mode 100644
index 3e3f6f05..00000000
--- a/libempathy-gtk/.gitignore
+++ /dev/null
@@ -1,2 +0,0 @@
-empathy-gtk-marshal.*
-*.gladep
diff --git a/libempathy-gtk/Makefile.am b/libempathy-gtk/Makefile.am
deleted file mode 100644
index 19e07d50..00000000
--- a/libempathy-gtk/Makefile.am
+++ /dev/null
@@ -1,269 +0,0 @@
-SUBDIRS = egg-list-box
-
-include $(top_srcdir)/tools/flymake.mk
-
-AM_CPPFLAGS = \
- $(ERROR_CFLAGS) \
- -I$(top_srcdir)/tp-account-widgets \
- -I$(top_srcdir)/libempathy \
- -I$(top_srcdir)/extensions \
- -DDATADIR=\""$(datadir)"\" \
- -DPKGDATADIR=\""$(pkgdatadir)"\" \
- -DGCR_API_SUBJECT_TO_CHANGE \
- $(EMPATHY_CFLAGS) \
- $(YELL_CFLAGS) \
- $(ENCHANT_CFLAGS) \
- $(LIBCHAMPLAIN_CFLAGS) \
- $(GEOCLUE_CFLAGS) \
- $(GEOCODE_CFLAGS) \
- $(MEEGO_CFLAGS) \
- $(CHEESE_CFLAGS) \
- $(EGGLISTBOX_CFLAGS) \
- $(WARN_CFLAGS) \
- $(DISABLE_DEPRECATED)
-
-BUILT_SOURCES = \
- empathy-gtk-enum-types.h \
- empathy-gtk-enum-types.c
-
-libempathy_gtk_handwritten_source = \
- empathy-account-chooser.c \
- empathy-account-selector-dialog.c \
- empathy-avatar-image.c \
- empathy-bad-password-dialog.c \
- empathy-base-password-dialog.c \
- empathy-call-utils.c \
- empathy-cell-renderer-activatable.c \
- empathy-cell-renderer-expander.c \
- empathy-cell-renderer-text.c \
- empathy-chat.c \
- empathy-contact-blocking-dialog.c \
- empathy-contact-chooser.c \
- empathy-contact-search-dialog.c \
- empathy-contact-widget.c \
- empathy-dialpad-widget.c \
- empathy-dialpad-button.c \
- empathy-geometry.c \
- empathy-groups-widget.c \
- empathy-individual-dialogs.c \
- empathy-individual-edit-dialog.c \
- empathy-individual-information-dialog.c \
- empathy-individual-menu.c \
- empathy-individual-store.c \
- empathy-individual-store-channel.c \
- empathy-individual-store-manager.c \
- empathy-individual-view.c \
- empathy-individual-widget.c \
- empathy-input-text-view.c \
- empathy-local-xmpp-assistant-widget.c \
- empathy-log-window.c \
- empathy-new-account-dialog.c \
- empathy-new-message-dialog.c \
- empathy-new-call-dialog.c \
- empathy-notify-manager.c \
- empathy-password-dialog.c \
- empathy-presence-chooser.c \
- empathy-protocol-chooser.c \
- empathy-roster-contact.c \
- empathy-roster-group.c \
- empathy-roster-model.c \
- empathy-roster-model-aggregator.c \
- empathy-roster-model-manager.c \
- empathy-roster-view.c \
- empathy-search-bar.c \
- empathy-share-my-desktop.c \
- empathy-smiley-manager.c \
- empathy-sound-manager.c \
- empathy-spell.c \
- empathy-status-preset-dialog.c \
- empathy-string-parser.c \
- empathy-subscription-dialog.c \
- empathy-theme-manager.c \
- empathy-tls-dialog.c \
- empathy-ui-utils.c \
- empathy-plist.c \
- empathy-theme-adium.c \
- empathy-webkit-utils.c \
- $(NULL)
-
-libempathy_gtk_headers = \
- empathy-account-chooser.h \
- empathy-account-selector-dialog.h \
- empathy-avatar-image.h \
- empathy-bad-password-dialog.h \
- empathy-base-password-dialog.h \
- empathy-call-utils.h \
- empathy-cell-renderer-activatable.h \
- empathy-cell-renderer-expander.h \
- empathy-cell-renderer-text.h \
- empathy-chat.h \
- empathy-contact-blocking-dialog.h \
- empathy-contact-chooser.h \
- empathy-contact-search-dialog.h \
- empathy-contact-widget.h \
- empathy-dialpad-widget.h \
- empathy-dialpad-button.h \
- empathy-geometry.h \
- empathy-groups-widget.h \
- empathy-images.h \
- empathy-individual-dialogs.h \
- empathy-individual-edit-dialog.h \
- empathy-individual-information-dialog.h \
- empathy-individual-menu.h \
- empathy-individual-store.h \
- empathy-individual-store-channel.h \
- empathy-individual-store-manager.h \
- empathy-individual-view.h \
- empathy-individual-widget.h \
- empathy-input-text-view.h \
- empathy-local-xmpp-assistant-widget.h \
- empathy-log-window.h \
- empathy-new-account-dialog.h \
- empathy-new-message-dialog.h \
- empathy-new-call-dialog.h \
- empathy-notify-manager.h \
- empathy-password-dialog.h \
- empathy-presence-chooser.h \
- empathy-protocol-chooser.h \
- empathy-roster-contact.h \
- empathy-roster-group.h \
- empathy-roster-model.h \
- empathy-roster-model-aggregator.h \
- empathy-roster-model-manager.h \
- empathy-roster-view.h \
- empathy-search-bar.h \
- empathy-share-my-desktop.h \
- empathy-smiley-manager.h \
- empathy-sound-manager.h \
- empathy-spell.h \
- empathy-status-preset-dialog.h \
- empathy-string-parser.h \
- empathy-subscription-dialog.h \
- empathy-theme-manager.h \
- empathy-tls-dialog.h \
- empathy-ui-utils.h \
- empathy-plist.h \
- empathy-theme-adium.h \
- empathy-webkit-utils.h \
- $(NULL)
-
-pkglib_LTLIBRARIES = libempathy-gtk.la
-
-# libempathy-gtk's API is not stable and will never be, so use -release to make the
-# SONAME of the plugin library change with every Empathy release.
-libempathy_gtk_la_LDFLAGS = \
- -no-undefined \
- -release $(VERSION) \
- $(NULL)
-
-libempathy_gtk_la_SOURCES = \
- $(libempathy_gtk_handwritten_source) \
- $(libempathy_gtk_headers) \
- $(NULL)
-
-# do not distribute generated files
-nodist_libempathy_gtk_la_SOURCES =\
- $(BUILT_SOURCES)
-
-libempathy_gtk_la_LIBADD = \
- $(EMPATHY_LIBS) \
- $(EMPATHY_LIBS) \
- $(GTK_LIBS) \
- $(LIBNOTIFY_LIBS) \
- $(CANBERRA_LIBS) \
- $(ENCHANT_LIBS) \
- $(LIBCHAMPLAIN_LIBS) \
- $(GEOCLUE_LIBS) \
- $(GEOCODE_LIBS) \
- $(GCR_LIBS) \
- $(MEEGO_LIBS) \
- $(CHEESE_LIBS) \
- $(top_builddir)/tp-account-widgets/libtp-account-widgets.la \
- $(top_builddir)/libempathy-gtk/egg-list-box/libegglistbox.la \
- $(top_builddir)/libempathy/libempathy.la
-
-check_c_sources = \
- $(libempathy_gtk_handwritten_source) \
- $(libempathy_gtk_headers)
-include $(top_srcdir)/tools/check-coding-style.mk
-check-local: check-coding-style
-
-account_widgets_ui_files = \
- empathy-account-widget-generic.ui \
- empathy-account-widget-jabber.ui \
- empathy-account-widget-msn.ui \
- empathy-account-widget-sip.ui \
- empathy-account-widget-local-xmpp.ui \
- empathy-account-widget-irc.ui \
- empathy-account-widget-icq.ui \
- empathy-account-widget-yahoo.ui \
- empathy-account-widget-groupwise.ui \
- empathy-account-widget-aim.ui \
- $(NULL)
-
-uidir = $(datadir)/empathy
-ui_DATA = \
- empathy-contact-widget.ui \
- empathy-contact-blocking-dialog.ui \
- empathy-status-preset-dialog.ui \
- empathy-log-window.ui \
- empathy-chat.ui \
- empathy-search-bar.ui \
- empathy-individual-widget.ui
-
-empathy-gtk-enum-types.h: stamp-empathy-gtk-enum-types.h
- $(AM_V_GEN)true
-stamp-empathy-gtk-enum-types.h: Makefile $(libempathy_gtk_headers)
- $(AM_V_GEN)(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 "@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)
- $(AM_V_GEN)(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
-
-EXTRA_DIST = \
- $(ui_DATA)
-
-if HAVE_GEOCLUE
-libempathy_gtk_handwritten_source += \
- empathy-location-manager.c
-
-libempathy_gtk_headers += \
- empathy-location-manager.h
-else
-EXTRA_DIST += \
- empathy-location-manager.c \
- empathy-location-manager.h
-endif
-
-CLEANFILES = \
- $(BUILT_SOURCES) \
- stamp-empathy-gtk-enum-types.h
diff --git a/libempathy-gtk/egg-list-box b/libempathy-gtk/egg-list-box
deleted file mode 160000
-Subproject ce28bb7b142c3adfe007672300769daae1f9253
diff --git a/libempathy-gtk/empathy-account-chooser.c b/libempathy-gtk/empathy-account-chooser.c
deleted file mode 100644
index 69fc54fe..00000000
--- a/libempathy-gtk/empathy-account-chooser.c
+++ /dev/null
@@ -1,1103 +0,0 @@
-/*
- * Copyright (C) 2005-2007 Imendio AB
- * Copyright (C) 2007-2011 Collabora Ltd.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301 USA
- *
- * Authors: Martyn Russell <martyn@imendio.com>
- * Xavier Claessens <xclaesse@gmail.com>
- */
-
-#include "config.h"
-#include "empathy-account-chooser.h"
-
-#include <glib/gi18n-lib.h>
-#include <tp-account-widgets/tpaw-pixbuf-utils.h>
-
-#define DEBUG_FLAG EMPATHY_DEBUG_OTHER
-#include "empathy-debug.h"
-
-/**
- * SECTION:empathy-account-chooser
- * @title:EmpathyAccountChooser
- * @short_description: A widget used to choose from a list of accounts
- * @include: libempathy-gtk/empathy-account-chooser.h
- *
- * #EmpathyAccountChooser is a widget which extends #GtkComboBox to provide
- * a chooser of available accounts.
- */
-
-/**
- * EmpathyAccountChooser:
- * @parent: parent object
- *
- * Widget which extends #GtkComboBox to provide a chooser of available accounts.
- */
-
-struct _EmpathyAccountChooserPriv
-{
- TpAccountManager *manager;
- gboolean set_active_item;
- gboolean account_manually_set;
- gboolean has_all_option;
- EmpathyAccountChooserFilterFunc filter;
- gpointer filter_data;
- gboolean ready;
-
- TpAccount *select_when_ready;
-};
-
-typedef struct
-{
- EmpathyAccountChooser *self;
- TpAccount *account;
- gboolean set;
-} SetAccountData;
-
-typedef struct
-{
- EmpathyAccountChooser *self;
- TpAccount *account;
- GtkTreeIter *iter;
-} FilterResultCallbackData;
-
-static FilterResultCallbackData *
-filter_result_callback_data_new (EmpathyAccountChooser *self,
- TpAccount *account,
- GtkTreeIter *iter)
-{
- FilterResultCallbackData *data;
-
- g_return_val_if_fail (self != NULL, NULL);
- g_return_val_if_fail (account != NULL, NULL);
- g_return_val_if_fail (iter != NULL, NULL);
-
- data = g_slice_new0 (FilterResultCallbackData);
- data->self = g_object_ref (self);
- data->account = g_object_ref (account);
- data->iter = gtk_tree_iter_copy (iter);
-
- return data;
-}
-
-static void
-filter_result_callback_data_free (FilterResultCallbackData *data)
-{
- g_object_unref (data->self);
- g_object_unref (data->account);
- gtk_tree_iter_free (data->iter);
- g_slice_free (FilterResultCallbackData, data);
-}
-
-/* Distinguishes between store entries which are actually accounts, and special
- * items like the "All" entry and the separator below it, so they can be sorted
- * correctly. Higher-numbered entries will sort earlier.
- */
-typedef enum {
- ROW_ACCOUNT = 0,
- ROW_SEPARATOR,
- ROW_ALL
-} RowType;
-
-enum {
- COL_ACCOUNT_IMAGE,
- COL_ACCOUNT_TEXT,
- COL_ACCOUNT_ENABLED, /* Usually tied to connected state */
- COL_ACCOUNT_ROW_TYPE,
- COL_ACCOUNT_POINTER,
- COL_ACCOUNT_COUNT
-};
-
-static void account_chooser_account_validity_changed_cb (
- TpAccountManager *manager,
- TpAccount *account,
- gboolean valid,
- EmpathyAccountChooser *self);
-static void account_chooser_account_add_foreach (TpAccount *account,
- EmpathyAccountChooser *self);
-static void account_chooser_account_removed_cb (TpAccountManager *manager,
- TpAccount *account,
- EmpathyAccountChooser *self);
-static void account_chooser_account_remove_foreach (TpAccount *account,
- EmpathyAccountChooser *self);
-static void account_chooser_update_iter (EmpathyAccountChooser *self,
- GtkTreeIter *iter);
-static void account_chooser_status_changed_cb (TpAccount *account,
- guint old_status,
- guint new_status,
- guint reason,
- gchar *dbus_error_name,
- GHashTable *details,
- gpointer user_data);
-static gboolean account_chooser_separator_func (GtkTreeModel *model,
- GtkTreeIter *iter,
- EmpathyAccountChooser *self);
-static gboolean account_chooser_set_account_foreach (GtkTreeModel *model,
- GtkTreePath *path,
- GtkTreeIter *iter,
- SetAccountData *data);
-static void update_account (EmpathyAccountChooser *self,
- TpAccount *account);
-static gboolean select_account (EmpathyAccountChooser *self,
- TpAccount *account);
-
-enum {
- PROP_0,
- PROP_HAS_ALL_OPTION,
-};
-
-enum {
- READY,
- LAST_SIGNAL
-};
-
-static guint signals[LAST_SIGNAL] = { 0 };
-
-G_DEFINE_TYPE (EmpathyAccountChooser, empathy_account_chooser,
- GTK_TYPE_COMBO_BOX)
-
-static void
-empathy_account_chooser_init (EmpathyAccountChooser *self)
-{
- TpSimpleClientFactory *factory;
-
- self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self,
- EMPATHY_TYPE_ACCOUNT_CHOOSER, EmpathyAccountChooserPriv);
-
- self->priv->set_active_item = FALSE;
- self->priv->account_manually_set = FALSE;
- self->priv->filter = NULL;
- self->priv->filter_data = NULL;
-
- self->priv->manager = tp_account_manager_dup ();
-
- tp_g_signal_connect_object (self->priv->manager, "account-validity-changed",
- G_CALLBACK (account_chooser_account_validity_changed_cb), self, 0);
-
- tp_g_signal_connect_object (self->priv->manager, "account-removed",
- G_CALLBACK (account_chooser_account_removed_cb), self, 0);
-
- /* Make sure we'll have the capabilities feature on TpAccount's connection */
- factory = tp_proxy_get_factory (self->priv->manager);
-
- tp_simple_client_factory_add_account_features_varargs (factory,
- TP_ACCOUNT_FEATURE_CONNECTION, NULL);
- tp_simple_client_factory_add_connection_features_varargs (factory,
- TP_CONNECTION_FEATURE_CAPABILITIES, NULL);
-}
-
-static gint
-account_cmp (GtkTreeModel *model,
- GtkTreeIter *a,
- GtkTreeIter *b,
- gpointer user_data)
-{
- RowType a_type, b_type;
- gboolean a_enabled, b_enabled;
- gchar *a_text, *b_text;
- gint result;
-
- gtk_tree_model_get (model, a,
- COL_ACCOUNT_ENABLED, &a_enabled,
- COL_ACCOUNT_ROW_TYPE, &a_type,
- -1);
- gtk_tree_model_get (model, b,
- COL_ACCOUNT_ENABLED, &b_enabled,
- COL_ACCOUNT_ROW_TYPE, &b_type,
- -1);
-
- /* This assumes that we have at most one of each special row type. */
- if (a_type != b_type)
- /* Display higher-numbered special row types first. */
- return (b_type - a_type);
-
- /* Enabled accounts are displayed first */
- if (a_enabled != b_enabled)
- return a_enabled ? -1: 1;
-
- gtk_tree_model_get (model, a, COL_ACCOUNT_TEXT, &a_text, -1);
- gtk_tree_model_get (model, b, COL_ACCOUNT_TEXT, &b_text, -1);
-
- if (a_text == b_text)
- result = 0;
- else if (a_text == NULL)
- result = 1;
- else if (b_text == NULL)
- result = -1;
- else
- result = g_ascii_strcasecmp (a_text, b_text);
-
- g_free (a_text);
- g_free (b_text);
-
- return result;
-}
-
-static void
-account_connection_notify_cb (TpAccount *account,
- GParamSpec *spec,
- EmpathyAccountChooser *self)
-{
- update_account (self, account);
-}
-
-static void
-account_manager_prepared_cb (GObject *source_object,
- GAsyncResult *result,
- gpointer user_data)
-{
- GList *accounts, *l;
- TpAccountManager *manager = TP_ACCOUNT_MANAGER (source_object);
- EmpathyAccountChooser *self = user_data;
- GError *error = NULL;
-
- if (!tp_proxy_prepare_finish (manager, result, &error))
- {
- DEBUG ("Failed to prepare account manager: %s", error->message);
- g_error_free (error);
- return;
- }
-
- accounts = tp_account_manager_dup_valid_accounts (manager);
-
- for (l = accounts; l != NULL; l = l->next)
- {
- TpAccount *account = l->data;
-
- account_chooser_account_add_foreach (account, self);
-
- tp_g_signal_connect_object (account, "status-changed",
- G_CALLBACK (account_chooser_status_changed_cb),
- self, 0);
-
- /* We generally use the TpConnection from the account to filter it so,
- * just relying on the account status is not enough. In some case we the
- * status change can be notified while the TpConnection is still
- * preparing. */
- tp_g_signal_connect_object (account, "notify::connection",
- G_CALLBACK (account_connection_notify_cb),
- self, 0);
- }
-
- g_list_free_full (accounts, g_object_unref);
-
- if (self->priv->select_when_ready != NULL)
- {
- select_account (self, self->priv->select_when_ready);
-
- g_clear_object (&self->priv->select_when_ready);
- }
-
- self->priv->ready = TRUE;
- g_signal_emit (self, signals[READY], 0);
-}
-
-static void
-account_chooser_constructed (GObject *object)
-{
- EmpathyAccountChooser *self = (EmpathyAccountChooser *) object;
- GtkListStore *store;
- GtkCellRenderer *renderer;
- GtkComboBox *combobox;
-
- /* Set up combo box with new store */
- combobox = GTK_COMBO_BOX (self);
-
- gtk_cell_layout_clear (GTK_CELL_LAYOUT (combobox));
-
- store = gtk_list_store_new (COL_ACCOUNT_COUNT,
- GDK_TYPE_PIXBUF, /* Image */
- G_TYPE_STRING, /* Name */
- G_TYPE_BOOLEAN, /* Enabled */
- G_TYPE_UINT, /* Row type */
- TP_TYPE_ACCOUNT);
-
- gtk_tree_sortable_set_default_sort_func (GTK_TREE_SORTABLE (store),
- account_cmp, self, NULL);
- gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (store),
- GTK_TREE_SORTABLE_DEFAULT_SORT_COLUMN_ID, GTK_SORT_ASCENDING);
-
- 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,
- "pixbuf", COL_ACCOUNT_IMAGE,
- "sensitive", COL_ACCOUNT_ENABLED,
- 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 */
- tp_proxy_prepare_async (self->priv->manager, NULL,
- account_manager_prepared_cb, self);
-
- g_object_unref (store);
-
-}
-
-static void
-account_chooser_dispose (GObject *object)
-{
- EmpathyAccountChooser *self = EMPATHY_ACCOUNT_CHOOSER (object);
-
- g_clear_object (&self->priv->manager);
- g_clear_object (&self->priv->select_when_ready);
-
- G_OBJECT_CLASS (empathy_account_chooser_parent_class)->dispose (object);
-}
-
-static void
-account_chooser_get_property (GObject *object,
- guint param_id,
- GValue *value,
- GParamSpec *pspec)
-{
- EmpathyAccountChooser *self = (EmpathyAccountChooser *) object;
-
- switch (param_id)
- {
- case PROP_HAS_ALL_OPTION:
- g_value_set_boolean (value, self->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)
-{
- 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;
- };
-}
-
-static void
-empathy_account_chooser_class_init (EmpathyAccountChooserClass *klass)
-{
- GObjectClass *object_class = G_OBJECT_CLASS (klass);
-
- object_class->constructed = account_chooser_constructed;
- object_class->dispose = account_chooser_dispose;
- object_class->get_property = account_chooser_get_property;
- object_class->set_property = account_chooser_set_property;
-
- /**
- * EmpathyAccountChooser:has-all-option:
- *
- * Have an additional option in the list to mean all accounts.
- */
- 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));
-
- signals[READY] =
- g_signal_new ("ready",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_LAST,
- 0,
- NULL, NULL,
- g_cclosure_marshal_generic,
- G_TYPE_NONE,
- 0);
-
- g_type_class_add_private (object_class, sizeof (EmpathyAccountChooserPriv));
-}
-
-/**
- * empathy_account_chooser_new:
- *
- * Creates a new #EmpathyAccountChooser.
- *
- * Return value: A new #EmpathyAccountChooser
- */
-GtkWidget *
-empathy_account_chooser_new (void)
-{
- GtkWidget *self;
-
- self = g_object_new (EMPATHY_TYPE_ACCOUNT_CHOOSER, NULL);
-
- return self;
-}
-
-gboolean
-empathy_account_chooser_has_all_selected (EmpathyAccountChooser *self)
-{
- GtkTreeModel *model;
- GtkTreeIter iter;
- RowType type;
-
- g_return_val_if_fail (EMPATHY_IS_ACCOUNT_CHOOSER (self), FALSE);
-
- g_return_val_if_fail (self->priv->has_all_option == TRUE, FALSE);
-
- model = gtk_combo_box_get_model (GTK_COMBO_BOX (self));
- if (!gtk_combo_box_get_active_iter (GTK_COMBO_BOX (self), &iter))
- return FALSE;
-
- gtk_tree_model_get (model, &iter, COL_ACCOUNT_ROW_TYPE, &type, -1);
-
- return type == ROW_ALL;
-}
-
-/**
- * empathy_account_chooser_dup_account:
- * @self: an #EmpathyAccountChooser
- *
- * Returns the account which is currently selected in the chooser or %NULL
- * if there is no account selected. The #TpAccount returned should be
- * unrefed with g_object_unref() when finished with.
- *
- * Return value: a new ref to the #TpAccount currently selected, or %NULL.
- */
-TpAccount *
-empathy_account_chooser_dup_account (EmpathyAccountChooser *self)
-{
- TpAccount *account;
- GtkTreeModel *model;
- GtkTreeIter iter;
-
- g_return_val_if_fail (EMPATHY_IS_ACCOUNT_CHOOSER (self), NULL);
-
- model = gtk_combo_box_get_model (GTK_COMBO_BOX (self));
- if (!gtk_combo_box_get_active_iter (GTK_COMBO_BOX (self), &iter))
- return NULL;
-
- gtk_tree_model_get (model, &iter, COL_ACCOUNT_POINTER, &account, -1);
-
- return account;
-}
-
-/**
- * empathy_account_chooser_get_connection:
- * @self: an #EmpathyAccountChooser
- *
- * Returns a borrowed reference to the #TpConnection associated with the
- * account currently selected. The caller must reference the returned object
- * with g_object_ref() if it will be kept
- *
- * Return value: a borrowed reference to the #TpConnection associated with the
- * account curently selected.
- */
-TpConnection *
-empathy_account_chooser_get_connection (EmpathyAccountChooser *self)
-{
- TpAccount *account;
- TpConnection *connection;
-
- g_return_val_if_fail (EMPATHY_IS_ACCOUNT_CHOOSER (self), NULL);
-
- account = empathy_account_chooser_dup_account (self);
-
- /* if the returned account is NULL, then the account manager probably
- * hasn't been prepared yet. It should be safe to return NULL here
- * though. */
- if (account == NULL)
- return NULL;
-
- connection = tp_account_get_connection (account);
- g_object_unref (account);
-
- return connection;
-}
-
-static gboolean
-select_account (EmpathyAccountChooser *self,
- TpAccount *account)
-{
- GtkComboBox *combobox;
- GtkTreeModel *model;
- GtkTreeIter iter;
- SetAccountData data;
-
- g_return_val_if_fail (EMPATHY_IS_ACCOUNT_CHOOSER (self), FALSE);
-
- combobox = GTK_COMBO_BOX (self);
- model = gtk_combo_box_get_model (combobox);
- gtk_combo_box_get_active_iter (combobox, &iter);
-
- data.self = self;
- data.account = account;
- data.set = FALSE;
-
- gtk_tree_model_foreach (model,
- (GtkTreeModelForeachFunc) account_chooser_set_account_foreach,
- &data);
-
- self->priv->account_manually_set = data.set;
-
- return data.set;
-}
-
-/**
- * empathy_account_chooser_set_account:
- * @self: an #EmpathyAccountChooser
- * @account: a #TpAccount
- *
- * Sets the currently selected account to @account, if it exists in the list.
- *
- * Return value: whether the chooser was set to @account.
- */
-gboolean
-empathy_account_chooser_set_account (EmpathyAccountChooser *self,
- TpAccount *account)
-{
- if (self->priv->ready)
- return select_account (self, account);
-
- /* Account chooser is not ready yet, we'll try selecting the account once it
- * is */
- g_clear_object (&self->priv->select_when_ready);
-
- if (account != NULL)
- self->priv->select_when_ready = g_object_ref (account);
-
- return FALSE;
-}
-
-void
-empathy_account_chooser_set_all (EmpathyAccountChooser *self)
-{
- GtkComboBox *combobox;
- GtkTreeModel *model;
- GtkTreeIter iter;
-
- g_return_if_fail (EMPATHY_IS_ACCOUNT_CHOOSER (self));
-
- g_return_if_fail (self->priv->has_all_option);
-
- combobox = GTK_COMBO_BOX (self);
- model = gtk_combo_box_get_model (combobox);
-
- if (gtk_tree_model_get_iter_first (model, &iter))
- {
- /* 'All accounts' is the first row */
- gtk_combo_box_set_active_iter (combobox, &iter);
- self->priv->account_manually_set = TRUE;
- }
-}
-
-/**
- * empathy_account_chooser_get_has_all_option:
- * @self: an #EmpathyAccountChooser
- *
- * Returns whether @self has the #EmpathyAccountChooser:has-all-option
- * property set to true.
- *
- * Return value: whether @self has the #EmpathyAccountChooser:has-all-option
- * property enabled.
- */
-gboolean
-empathy_account_chooser_get_has_all_option (EmpathyAccountChooser *self)
-{
- g_return_val_if_fail (EMPATHY_IS_ACCOUNT_CHOOSER (self), FALSE);
-
- return self->priv->has_all_option;
-}
-
-/**
- * empathy_account_chooser_set_has_all_option:
- * @self: an #EmpathyAccountChooser
- * @has_all_option: a new value for the #EmpathyAccountChooser:has-all-option
- * property
- *
- * Sets the #EmpathyAccountChooser:has-all-option property.
- */
-void
-empathy_account_chooser_set_has_all_option (EmpathyAccountChooser *self,
- gboolean has_all_option)
-{
- GtkComboBox *combobox;
- GtkListStore *store;
- GtkTreeModel *model;
- GtkTreeIter iter;
-
- g_return_if_fail (EMPATHY_IS_ACCOUNT_CHOOSER (self));
-
- if (self->priv->has_all_option == has_all_option)
- return;
-
- combobox = GTK_COMBO_BOX (self);
- model = gtk_combo_box_get_model (combobox);
- store = GTK_LIST_STORE (model);
-
- self->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 (self),
- (GtkTreeViewRowSeparatorFunc)
- account_chooser_separator_func,
- self,
- 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,
- COL_ACCOUNT_ROW_TYPE, ROW_SEPARATOR,
- -1);
-
- gtk_list_store_prepend (store, &iter);
- gtk_list_store_set (store, &iter,
- COL_ACCOUNT_TEXT, _("All accounts"),
- COL_ACCOUNT_ENABLED, TRUE,
- COL_ACCOUNT_POINTER, NULL,
- COL_ACCOUNT_ROW_TYPE, ROW_ALL,
- -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 (self),
- (GtkTreeViewRowSeparatorFunc)
- NULL,
- NULL,
- NULL);
- }
-
- g_object_notify (G_OBJECT (self), "has-all-option");
-}
-
-static void
-account_chooser_account_validity_changed_cb (TpAccountManager *manager,
- TpAccount *account,
- gboolean valid,
- EmpathyAccountChooser *self)
-{
- if (valid)
- account_chooser_account_add_foreach (account, self);
- else
- account_chooser_account_remove_foreach (account, self);
-}
-
-static void
-account_chooser_account_add_foreach (TpAccount *account,
- EmpathyAccountChooser *self)
-{
- GtkListStore *store;
- GtkComboBox *combobox;
- GtkTreeIter iter;
- gint position;
-
- combobox = GTK_COMBO_BOX (self);
- 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 (self, &iter);
-}
-
-static void
-account_chooser_account_removed_cb (TpAccountManager *manager,
- TpAccount *account,
- EmpathyAccountChooser *self)
-{
- account_chooser_account_remove_foreach (account, self);
-}
-
-typedef struct
-{
- TpAccount *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;
- TpAccount *account;
- RowType type;
-
- gtk_tree_model_get (model, iter,
- COL_ACCOUNT_POINTER, &account,
- COL_ACCOUNT_ROW_TYPE, &type,
- -1);
-
- if (type != ROW_ACCOUNT)
- return FALSE;
-
- if (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 *self,
- TpAccount *account,
- GtkTreeIter *iter)
-{
- GtkListStore *store;
- GtkComboBox *combobox;
- FindAccountData data;
-
- combobox = GTK_COMBO_BOX (self);
- 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 (TpAccount *account,
- EmpathyAccountChooser *self)
-{
- GtkListStore *store;
- GtkComboBox *combobox;
- GtkTreeIter iter;
-
- combobox = GTK_COMBO_BOX (self);
- store = GTK_LIST_STORE (gtk_combo_box_get_model (combobox));
-
- if (account_chooser_find_account (self, account, &iter))
- gtk_list_store_remove (store, &iter);
-}
-
-static void
-account_chooser_filter_ready_cb (gboolean is_enabled,
- gpointer data)
-{
- FilterResultCallbackData *fr_data = data;
- EmpathyAccountChooser *self;
- TpAccount *account;
- GtkTreeIter *iter;
- GtkListStore *store;
- GtkComboBox *combobox;
- const gchar *icon_name;
- GdkPixbuf *pixbuf;
-
- self = fr_data->self;
- account = fr_data->account;
- iter = fr_data->iter;
- combobox = GTK_COMBO_BOX (self);
- store = GTK_LIST_STORE (gtk_combo_box_get_model (combobox));
-
- icon_name = tp_account_get_icon_name (account);
- pixbuf = tpaw_pixbuf_from_icon_name (icon_name,
- GTK_ICON_SIZE_BUTTON);
-
- gtk_list_store_set (store, iter,
- COL_ACCOUNT_IMAGE, pixbuf,
- COL_ACCOUNT_TEXT, tp_account_get_display_name (account),
- COL_ACCOUNT_ENABLED, is_enabled,
- -1);
-
- if (pixbuf != NULL)
- g_object_unref (pixbuf);
-
- /* set first connected account as active account */
- if (self->priv->account_manually_set == FALSE &&
- self->priv->set_active_item == FALSE && is_enabled)
- {
- self->priv->set_active_item = TRUE;
- gtk_combo_box_set_active_iter (combobox, iter);
- }
-
- filter_result_callback_data_free (fr_data);
-}
-
-static void
-account_chooser_update_iter (EmpathyAccountChooser *self,
- GtkTreeIter *iter)
-{
- GtkListStore *store;
- GtkComboBox *combobox;
- TpAccount *account;
- FilterResultCallbackData *data;
-
- combobox = GTK_COMBO_BOX (self);
- store = GTK_LIST_STORE (gtk_combo_box_get_model (combobox));
-
- gtk_tree_model_get (GTK_TREE_MODEL (store), iter,
- COL_ACCOUNT_POINTER, &account,
- -1);
-
- /* Skip rows without account associated */
- if (account == NULL)
- return;
-
- data = filter_result_callback_data_new (self, account, iter);
-
- if (self->priv->filter)
- self->priv->filter (account, account_chooser_filter_ready_cb,
- (gpointer) data, self->priv->filter_data);
- else
- account_chooser_filter_ready_cb (TRUE, (gpointer) data);
-
- g_object_unref (account);
-}
-
-static void
-update_account (EmpathyAccountChooser *self,
- TpAccount *account)
-{
- GtkTreeIter iter;
-
- if (account_chooser_find_account (self, account, &iter))
- account_chooser_update_iter (self, &iter);
-}
-
-static void
-account_chooser_status_changed_cb (TpAccount *account,
- guint old_status,
- guint new_status,
- guint reason,
- gchar *dbus_error_name,
- GHashTable *details,
- gpointer user_data)
-{
- EmpathyAccountChooser *self = user_data;
-
- update_account (self, account);
-}
-
-static gboolean
-account_chooser_separator_func (GtkTreeModel *model,
- GtkTreeIter *iter,
- EmpathyAccountChooser *self)
-{
- RowType row_type;
-
- gtk_tree_model_get (model, iter, COL_ACCOUNT_ROW_TYPE, &row_type, -1);
- return (row_type == ROW_SEPARATOR);
-}
-
-static gboolean
-account_chooser_set_account_foreach (GtkTreeModel *model,
- GtkTreePath *path,
- GtkTreeIter *iter,
- SetAccountData *data)
-{
- TpAccount *account;
- gboolean equal;
-
- gtk_tree_model_get (model, iter, COL_ACCOUNT_POINTER, &account, -1);
-
- equal = (data->account == account);
-
- if (account)
- g_object_unref (account);
-
- if (equal)
- {
- GtkComboBox *combobox;
-
- combobox = GTK_COMBO_BOX (data->self);
- 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 self)
-{
- account_chooser_update_iter (self, iter);
- return FALSE;
-}
-
-void
-empathy_account_chooser_refilter (EmpathyAccountChooser *self)
-{
- GtkTreeModel *model;
-
- self->priv->set_active_item = FALSE;
- model = gtk_combo_box_get_model (GTK_COMBO_BOX (self));
- gtk_tree_model_foreach (model, account_chooser_filter_foreach, self);
-}
-
-/**
- * empathy_account_chooser_set_filter:
- * @self: an #EmpathyAccountChooser
- * @filter: a filter
- * @user_data: data to pass to @filter, or %NULL
- *
- * Sets a filter on the @self so only accounts that are %TRUE in the eyes
- * of the filter are visible in the @self.
- */
-void
-empathy_account_chooser_set_filter (EmpathyAccountChooser *self,
- EmpathyAccountChooserFilterFunc filter,
- gpointer user_data)
-{
- g_return_if_fail (EMPATHY_IS_ACCOUNT_CHOOSER (self));
-
- self->priv->filter = filter;
- self->priv->filter_data = user_data;
-
- /* Refilter existing data */
- empathy_account_chooser_refilter (self);
-}
-
-/**
- * EmpathyAccountChooserFilterFunc:
- * @account: a #TpAccount
- * @user_data: user data, or %NULL
- *
- * A function which decides whether the account indicated by @account
- * is visible.
- *
- * Return value: whether the account indicated by @account is visible.
- */
-
-gboolean
-empathy_account_chooser_is_ready (EmpathyAccountChooser *self)
-{
- return self->priv->ready;
-}
-
-TpAccount *
-empathy_account_chooser_get_account (EmpathyAccountChooser *self)
-{
- TpAccount *account;
-
- account = empathy_account_chooser_dup_account (self);
- if (account == NULL)
- return NULL;
-
- g_object_unref (account);
-
- return account;
-}
-
-TpAccountManager *
-empathy_account_chooser_get_account_manager (EmpathyAccountChooser *self)
-{
- return self->priv->manager;
-}
-
-/* Pre-defined filters */
-
-/**
- * empathy_account_chooser_filter_is_connected:
- * @account: a #TpAccount
- * @callback: an #EmpathyAccountChooserFilterResultCallback accepting the result
- * @callback_data: data passed to the @callback
- * @user_data: user data or %NULL
- *
- * A useful #EmpathyAccountChooserFilterFunc that one could pass into
- * empathy_account_chooser_set_filter() and only show connected accounts.
- *
- * Returns (via the callback) TRUE is @account is connected
- */
-void
-empathy_account_chooser_filter_is_connected (TpAccount *account,
- EmpathyAccountChooserFilterResultCallback callback,
- gpointer callback_data,
- gpointer user_data)
-{
- gboolean is_connected =
- tp_account_get_connection_status (account, NULL)
- == TP_CONNECTION_STATUS_CONNECTED;
-
- callback (is_connected, callback_data);
-}
-
-/**
- * empathy_account_chooser_filter_supports_multichat:
- * @account: a #TpAccount
- * @callback: an #EmpathyAccountChooserFilterResultCallback accepting the result
- * @callback_data: data passed to the @callback
- * @user_data: user data or %NULL
- *
- * An #EmpathyAccountChooserFilterFunc that returns accounts that both
- * support multiuser text chat and are connected.
- *
- * Returns (via the callback) TRUE if @account both supports muc and
- * is connected
- */
-void
-empathy_account_chooser_filter_supports_chatrooms (TpAccount *account,
- EmpathyAccountChooserFilterResultCallback callback,
- gpointer callback_data,
- gpointer user_data)
-{
- TpConnection *connection;
- gboolean supported = FALSE;
- TpCapabilities *caps;
-
- /* check if CM supports multiuser text chat */
- connection = tp_account_get_connection (account);
- if (connection == NULL)
- goto out;
-
- caps = tp_connection_get_capabilities (connection);
- if (caps == NULL)
- goto out;
-
- supported = tp_capabilities_supports_text_chatrooms (caps);
-
-out:
- callback (supported, callback_data);
-}
diff --git a/libempathy-gtk/empathy-account-chooser.h b/libempathy-gtk/empathy-account-chooser.h
deleted file mode 100644
index 5302ad70..00000000
--- a/libempathy-gtk/empathy-account-chooser.h
+++ /dev/null
@@ -1,126 +0,0 @@
-/*
- * Copyright (C) 2005-2007 Imendio AB
- * Copyright (C) 2007-2011 Collabora Ltd.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301 USA
- *
- * Authors: Martyn Russell <martyn@imendio.com>
- * Xavier Claessens <xclaesse@gmail.com>
- */
-
-#ifndef __EMPATHY_ACCOUNT_CHOOSER_H__
-#define __EMPATHY_ACCOUNT_CHOOSER_H__
-
-#include <gtk/gtk.h>
-#include <telepathy-glib/telepathy-glib.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))
-
-/**
- * EmpathyAccountChooserFilterResultCallback:
- * @is_enabled: indicated whether the account should be enabled
- * @user_data: user data passed to the callback
- */
-typedef void (* EmpathyAccountChooserFilterResultCallback) (gboolean is_enabled,
- gpointer user_data);
-
-/**
- * EmpathyAccountChooserFilterFunc:
- * @account: a #TpAccount
- * @callback: an #EmpathyAccountChooserFilterResultCallback accepting the result
- * @callback_data: data passed to the @callback
- * @user_data: user data passed to the callback
- */
-typedef void (* EmpathyAccountChooserFilterFunc) (
- TpAccount *account,
- EmpathyAccountChooserFilterResultCallback callback,
- gpointer callback_data,
- gpointer user_data);
-
-
-typedef struct _EmpathyAccountChooser EmpathyAccountChooser;
-typedef struct _EmpathyAccountChooserClass EmpathyAccountChooserClass;
-typedef struct _EmpathyAccountChooserPriv EmpathyAccountChooserPriv;
-
-struct _EmpathyAccountChooser
-{
- GtkComboBox parent;
-
- /*<private>*/
- EmpathyAccountChooserPriv *priv;
-};
-
-struct _EmpathyAccountChooserClass
-{
- GtkComboBoxClass parent_class;
-};
-
-GType empathy_account_chooser_get_type (void) G_GNUC_CONST;
-
-GtkWidget * empathy_account_chooser_new (void);
-
-TpAccount * empathy_account_chooser_dup_account (EmpathyAccountChooser *self);
-TpAccount * empathy_account_chooser_get_account (EmpathyAccountChooser *self);
-
-gboolean empathy_account_chooser_set_account (EmpathyAccountChooser *self,
- TpAccount *account);
-
-TpConnection * empathy_account_chooser_get_connection (
- EmpathyAccountChooser *self);
-
-void empathy_account_chooser_set_all (EmpathyAccountChooser *self);
-
-TpAccountManager * empathy_account_chooser_get_account_manager (
- EmpathyAccountChooser *self);
-
-gboolean empathy_account_chooser_get_has_all_option (
- EmpathyAccountChooser *self);
-
-void empathy_account_chooser_set_has_all_option (EmpathyAccountChooser *self,
- gboolean has_all_option);
-
-gboolean empathy_account_chooser_has_all_selected (EmpathyAccountChooser *self);
-
-void empathy_account_chooser_set_filter (EmpathyAccountChooser *self,
- EmpathyAccountChooserFilterFunc filter,
- gpointer user_data);
-
-gboolean empathy_account_chooser_is_ready (EmpathyAccountChooser *self);
-
-void empathy_account_chooser_refilter (EmpathyAccountChooser *self);
-
-/* Pre-defined filters */
-
-void empathy_account_chooser_filter_is_connected (TpAccount *account,
- EmpathyAccountChooserFilterResultCallback callback,
- gpointer callback_data,
- gpointer user_data);
-
-void empathy_account_chooser_filter_supports_chatrooms (TpAccount *account,
- EmpathyAccountChooserFilterResultCallback callback,
- gpointer callback_data,
- gpointer user_data);
-
-G_END_DECLS
-
-#endif /* __EMPATHY_ACCOUNT_CHOOSER_H__ */
diff --git a/libempathy-gtk/empathy-account-selector-dialog.c b/libempathy-gtk/empathy-account-selector-dialog.c
deleted file mode 100644
index 0dd67ea7..00000000
--- a/libempathy-gtk/empathy-account-selector-dialog.c
+++ /dev/null
@@ -1,197 +0,0 @@
-/*
- * Copyright (C) 2011 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>
- */
-
-#include "config.h"
-#include "empathy-account-selector-dialog.h"
-
-enum
-{
- PROP_ACCOUNTS = 1
-};
-
-struct _EmpathyAccountSelectorDialogPrivate
-{
- GList *accounts;
-
- GtkWidget *treeview;
- GtkListStore *model;
-};
-
-enum
-{
- COL_ACCOUNT,
- COL_ICON,
- COL_NAME,
- NUM_COL
-};
-
-G_DEFINE_TYPE (EmpathyAccountSelectorDialog, empathy_account_selector_dialog, \
- GTK_TYPE_DIALOG)
-
-static void
-empathy_account_selector_dialog_set_property (GObject *object,
- guint property_id,
- const GValue *value,
- GParamSpec *pspec)
-{
- EmpathyAccountSelectorDialog *self = (EmpathyAccountSelectorDialog *) object;
-
- switch (property_id)
- {
- case PROP_ACCOUNTS:
- {
- GList *list;
-
- list = g_value_get_pointer (value);
-
- self->priv->accounts = g_list_copy (list);
- g_list_foreach (self->priv->accounts, (GFunc) g_object_ref, NULL);
- break;
- }
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
- }
-}
-
-static void
-empathy_account_selector_dialog_constructed (GObject *obj)
-{
- EmpathyAccountSelectorDialog *self = (EmpathyAccountSelectorDialog *) obj;
- GList *l;
-
- for (l = self->priv->accounts; l != NULL; l = g_list_next (l))
- {
- TpAccount *account = l->data;
-
- gtk_list_store_insert_with_values (GTK_LIST_STORE (self->priv->model),
- NULL, -1,
- COL_ACCOUNT, account,
- COL_ICON, tp_account_get_icon_name (account),
- COL_NAME, tp_account_get_display_name (account),
- -1);
- }
-
- G_OBJECT_CLASS (empathy_account_selector_dialog_parent_class)->constructed (
- obj);
-}
-
-static void
-empathy_account_selector_dialog_dispose (GObject *obj)
-{
- EmpathyAccountSelectorDialog *self = (EmpathyAccountSelectorDialog *) obj;
-
- g_list_free_full (self->priv->accounts, g_object_unref);
- self->priv->accounts = NULL;
-
- tp_clear_object (&self->priv->model);
-
- G_OBJECT_CLASS (empathy_account_selector_dialog_parent_class)->dispose (obj);
-}
-
-static void
-empathy_account_selector_dialog_class_init (
- EmpathyAccountSelectorDialogClass *klass)
-{
- GObjectClass *oclass = G_OBJECT_CLASS (klass);
- GParamSpec *spec;
-
- oclass->set_property = empathy_account_selector_dialog_set_property;
- oclass->constructed = empathy_account_selector_dialog_constructed;
- oclass->dispose = empathy_account_selector_dialog_dispose;
-
- spec = g_param_spec_pointer ("accounts", "accounts", "GList of TpAccount",
- G_PARAM_STATIC_STRINGS | G_PARAM_CONSTRUCT_ONLY | G_PARAM_WRITABLE);
- g_object_class_install_property (oclass, PROP_ACCOUNTS, spec);
-
- g_type_class_add_private (klass,
- sizeof (EmpathyAccountSelectorDialogPrivate));
-}
-
-static void
-empathy_account_selector_dialog_init (EmpathyAccountSelectorDialog *self)
-{
- GtkWidget *box;
- GtkCellRenderer *cell;
- GtkTreeViewColumn *column;
-
- self->priv = G_TYPE_INSTANCE_GET_PRIVATE ((self),
- EMPATHY_TYPE_ACCOUNT_SELECTOR_DIALOG,
- EmpathyAccountSelectorDialogPrivate);
-
- self->priv->model = gtk_list_store_new (NUM_COL,
- TP_TYPE_ACCOUNT, /* account */
- G_TYPE_STRING, /* icon name */
- G_TYPE_STRING); /* name */
-
- /* Create treeview */
- self->priv->treeview = gtk_tree_view_new_with_model (
- GTK_TREE_MODEL (self->priv->model));
-
- gtk_tree_view_set_headers_visible (GTK_TREE_VIEW (self->priv->treeview),
- FALSE);
-
- column = gtk_tree_view_column_new ();
- gtk_tree_view_column_set_expand (column, TRUE);
- gtk_tree_view_append_column (GTK_TREE_VIEW (self->priv->treeview), column);
-
- /* icon */
- 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_ICON);
-
- /* text */
- 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_NAME);
-
- box = gtk_dialog_get_content_area (GTK_DIALOG (self));
- gtk_box_pack_start (GTK_BOX (box), self->priv->treeview, TRUE, TRUE, 0);
-
- gtk_widget_show (self->priv->treeview);
-}
-
-GtkWidget *
-empathy_account_selector_dialog_new (GList *accounts)
-{
- return g_object_new (EMPATHY_TYPE_ACCOUNT_SELECTOR_DIALOG,
- "accounts", accounts,
- NULL);
-}
-
-TpAccount *
-empathy_account_selector_dialog_dup_selected (
- EmpathyAccountSelectorDialog *self)
-{
- GtkTreeSelection *selection;
- GtkTreeIter iter;
- GtkTreeModel *model;
- TpAccount *account;
-
- selection = gtk_tree_view_get_selection (
- GTK_TREE_VIEW (self->priv->treeview));
-
- if (!gtk_tree_selection_get_selected (selection, &model, &iter))
- return NULL;
-
- gtk_tree_model_get (model, &iter, COL_ACCOUNT, &account, -1);
-
- return account;
-}
diff --git a/libempathy-gtk/empathy-account-selector-dialog.h b/libempathy-gtk/empathy-account-selector-dialog.h
deleted file mode 100644
index 96bafb2d..00000000
--- a/libempathy-gtk/empathy-account-selector-dialog.h
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
- * Copyright (C) 2011 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>
- */
-
-#ifndef __EMPATHY_ACCOUNT_SELECTOR_DIALOG_H__
-#define __EMPATHY_ACCOUNT_SELECTOR_DIALOG_H__
-
-#include <gtk/gtk.h>
-#include <telepathy-glib/telepathy-glib.h>
-
-G_BEGIN_DECLS
-
-#define EMPATHY_TYPE_ACCOUNT_SELECTOR_DIALOG \
- (empathy_account_selector_dialog_get_type ())
-#define EMPATHY_ACCOUNT_SELECTOR_DIALOG(o) (G_TYPE_CHECK_INSTANCE_CAST ((o),\
- EMPATHY_TYPE_ACCOUNT_SELECTOR_DIALOG, EmpathyAccountSelectorDialog))
-#define EMPATHY_ACCOUNT_SELECTOR_DIALOG_CLASS(k) (G_TYPE_CHECK_CLASS_CAST ((k),\
- EMPATHY_TYPE_ACCOUNT_SELECTOR_DIALOG, EmpathyAccountSelectorDialogClass))
-#define EMPATHY_IS_ACCOUNT_SELECTOR_DIALOG(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o),\
- EMPATHY_TYPE_ACCOUNT_SELECTOR_DIALOG))
-#define EMPATHY_IS_ACCOUNT_SELECTOR_DIALOG_CLASS(k) (\
- G_TYPE_CHECK_CLASS_TYPE ((k), EMPATHY_TYPE_ACCOUNT_SELECTOR_DIALOG))
-#define EMPATHY_ACCOUNT_SELECTOR_DIALOG_GET_CLASS(o) (\
- G_TYPE_INSTANCE_GET_CLASS ((o), EMPATHY_TYPE_ACCOUNT_SELECTOR_DIALOG,\
- EmpathyAccountSelectorDialogClass))
-
-typedef struct _EmpathyAccountSelectorDialog EmpathyAccountSelectorDialog;
-typedef struct _EmpathyAccountSelectorDialogClass \
- EmpathyAccountSelectorDialogClass;
-typedef struct _EmpathyAccountSelectorDialogPrivate \
- EmpathyAccountSelectorDialogPrivate;
-
-struct _EmpathyAccountSelectorDialog {
- GtkDialog parent;
-
- EmpathyAccountSelectorDialogPrivate *priv;
-};
-
-struct _EmpathyAccountSelectorDialogClass {
- GtkDialogClass parent_class;
-};
-
-GType empathy_account_selector_dialog_get_type (void) G_GNUC_CONST;
-
-GtkWidget * empathy_account_selector_dialog_new (GList *accounts);
-
-TpAccount * empathy_account_selector_dialog_dup_selected (
- EmpathyAccountSelectorDialog *self);
-
-G_END_DECLS
-
-#endif /* __EMPATHY_ACCOUNT_SELECTOR_DIALOG_H__ */
diff --git a/libempathy-gtk/empathy-avatar-image.c b/libempathy-gtk/empathy-avatar-image.c
deleted file mode 100644
index 78a3e5ff..00000000
--- a/libempathy-gtk/empathy-avatar-image.c
+++ /dev/null
@@ -1,328 +0,0 @@
-/* -*- 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., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301 USA
- *
- * Authors: Xavier Claessens <xclaesse@gmail.com>
- */
-
-#include "config.h"
-#include "empathy-avatar-image.h"
-
-#include <glib/gi18n-lib.h>
-#include <gdk/gdkx.h>
-#include <tp-account-widgets/tpaw-pixbuf-utils.h>
-
-#include "empathy-ui-utils.h"
-#include "empathy-utils.h"
-
-/**
- * SECTION:empathy-avatar-image
- * @title: EmpathyAvatarImage
- * @short_description: A widget to display an avatar
- * @include: libempathy-gtk/empathy-avatar-image.h
- *
- * #EmpathyAvatarImage is a widget which displays an avatar.
- */
-
-/**
- * EmpathyAvatarImage:
- * @parent: parent object
- *
- * Widget which displays an avatar.
- */
-
-#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);
-
- if (xevent->type == 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;
- }
- }
- }
-
- return GDK_FILTER_CONTINUE;
-}
-
-static void
-avatar_image_add_filter (EmpathyAvatarImage *avatar_image)
-{
- Display *display;
- Window window;
- gint mask;
- XWindowAttributes attrs;
-
- mask = PropertyChangeMask;
-
- window = gdk_x11_get_default_root_xwindow ();
- display = gdk_x11_get_default_xdisplay ();
-
- gdk_error_trap_push ();
-
- XGetWindowAttributes (display, window, &attrs);
- mask |= attrs.your_event_mask;
-
- XSelectInput (display, window, mask);
-
- gdk_error_trap_pop_ignored ();
-
- 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;
- GtkAllocation allocation;
-
- 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);
-
- gtk_widget_get_allocation (priv->image, &allocation);
- width = allocation.width;
- height = 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 = tpaw_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 (gtk_widget_get_window (priv->image), &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;
-}
-
-/**
- * empathy_avatar_image_new:
- *
- * Creates a new #EmpathyAvatarImage.
- *
- * Return value: a new #EmpathyAvatarImage
- */
-GtkWidget *
-empathy_avatar_image_new (void)
-{
- EmpathyAvatarImage *avatar_image;
-
- avatar_image = g_object_new (EMPATHY_TYPE_AVATAR_IMAGE, NULL);
-
- return GTK_WIDGET (avatar_image);
-}
-
-/**
- * empathy_avatar_image_set:
- * @avatar_image: an #EmpathyAvatarImage
- * @avatar: the #EmpathyAvatar to set @avatar_image to
- *
- * Sets @avatar_image to display the avatar indicated by @avatar.
- */
-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 = tpaw_pixbuf_from_data ((gchar *) avatar->data,
- avatar->len);
- }
-
- if (!priv->pixbuf) {
- gtk_image_clear (GTK_IMAGE (priv->image));
- return;
- }
-
- scaled_pixbuf = tpaw_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/libempathy-gtk/empathy-avatar-image.h b/libempathy-gtk/empathy-avatar-image.h
deleted file mode 100644
index 65f088ec..00000000
--- a/libempathy-gtk/empathy-avatar-image.h
+++ /dev/null
@@ -1,61 +0,0 @@
-/* -*- 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., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301 USA
- *
- * Authors: Xavier Claessens <xclaesse@gmail.com>
- */
-
-#ifndef __EMPATHY_AVATAR_IMAGE_H__
-#define __EMPATHY_AVATAR_IMAGE_H__
-
-#include <gtk/gtk.h>
-
-#include "empathy-contact.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;
-
- /*<private>*/
- 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/libempathy-gtk/empathy-bad-password-dialog.c b/libempathy-gtk/empathy-bad-password-dialog.c
deleted file mode 100644
index 5cdb90d1..00000000
--- a/libempathy-gtk/empathy-bad-password-dialog.c
+++ /dev/null
@@ -1,190 +0,0 @@
-/*
- * empathy-bad-password-dialog.c - Source for EmpathyBadPasswordDialog
- * Copyright (C) 2010 Collabora Ltd.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-#include "config.h"
-#include "empathy-bad-password-dialog.h"
-
-#include <glib/gi18n-lib.h>
-
-#define DEBUG_FLAG EMPATHY_DEBUG_SASL
-#include "empathy-debug.h"
-
-G_DEFINE_TYPE (EmpathyBadPasswordDialog, empathy_bad_password_dialog,
- EMPATHY_TYPE_BASE_PASSWORD_DIALOG)
-
-enum {
- PROP_PASSWORD = 1,
-
- LAST_PROPERTY,
-};
-
-/* signal enum */
-enum {
- RETRY,
- LAST_SIGNAL,
-};
-
-static guint signals[LAST_SIGNAL] = {0};
-
-struct _EmpathyBadPasswordDialogPriv {
- gchar *password;
-};
-
-static void
-empathy_bad_password_dialog_get_property (GObject *object,
- guint property_id,
- GValue *value,
- GParamSpec *pspec)
-{
- EmpathyBadPasswordDialog *self = (EmpathyBadPasswordDialog *) object;
-
- switch (property_id)
- {
- case PROP_PASSWORD:
- g_value_set_string (value, self->priv->password);
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
- break;
- }
-}
-
-static void
-empathy_bad_password_dialog_set_property (GObject *object,
- guint property_id,
- const GValue *value,
- GParamSpec *pspec)
-{
- EmpathyBadPasswordDialog *self = (EmpathyBadPasswordDialog *) object;
-
- switch (property_id)
- {
- case PROP_PASSWORD:
- g_assert (self->priv->password == NULL); /* construct only */
- self->priv->password = g_value_dup_string (value);
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
- break;
- }
-}
-
-static void
-empathy_bad_password_dialog_finalize (GObject *object)
-{
- EmpathyBadPasswordDialog *self = (EmpathyBadPasswordDialog *) object;
-
- tp_clear_pointer (&self->priv->password, g_free);
-
- G_OBJECT_CLASS (empathy_bad_password_dialog_parent_class)->finalize (object);
-}
-
-static void
-bad_password_dialog_response_cb (GtkDialog *dialog,
- gint response,
- gpointer user_data)
-{
- EmpathyBadPasswordDialog *self = (EmpathyBadPasswordDialog *) dialog;
- EmpathyBasePasswordDialog *base = (EmpathyBasePasswordDialog *) dialog;
-
- if (response == GTK_RESPONSE_OK)
- {
- const gchar *password;
-
- password = gtk_entry_get_text (GTK_ENTRY (base->entry));
-
- g_signal_emit (self, signals[RETRY], 0, base->account, password);
- }
-
- gtk_widget_destroy (GTK_WIDGET (dialog));
-}
-
-static void
-empathy_bad_password_dialog_constructed (GObject *object)
-{
- EmpathyBadPasswordDialog *self = (EmpathyBadPasswordDialog *) object;
- EmpathyBasePasswordDialog *base = (EmpathyBasePasswordDialog *) object;
- gchar *text;
-
- G_OBJECT_CLASS (empathy_bad_password_dialog_parent_class)->constructed (
- object);
-
- text = g_strdup_printf (_("Authentication failed for account <b>%s</b>"),
- tp_account_get_display_name (base->account));
- gtk_message_dialog_set_markup (GTK_MESSAGE_DIALOG (self), text);
- g_free (text);
-
- if (self->priv->password != NULL)
- {
- gtk_entry_set_text (GTK_ENTRY (base->entry), self->priv->password);
-
- gtk_editable_select_region (GTK_EDITABLE (base->entry), 0, -1);
- }
-
- gtk_button_set_label (GTK_BUTTON (base->ok_button), _("Retry"));
-
- g_signal_connect (self, "response",
- G_CALLBACK (bad_password_dialog_response_cb), self);
-}
-
-static void
-empathy_bad_password_dialog_init (EmpathyBadPasswordDialog *self)
-{
- self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self,
- EMPATHY_TYPE_BAD_PASSWORD_DIALOG, EmpathyBadPasswordDialogPriv);
-}
-
-static void
-empathy_bad_password_dialog_class_init (EmpathyBadPasswordDialogClass *klass)
-{
- GParamSpec *pspec;
- GObjectClass *oclass = G_OBJECT_CLASS (klass);
-
- g_type_class_add_private (klass, sizeof (EmpathyBadPasswordDialogPriv));
-
- oclass->set_property = empathy_bad_password_dialog_set_property;
- oclass->get_property = empathy_bad_password_dialog_get_property;
- oclass->finalize = empathy_bad_password_dialog_finalize;
- oclass->constructed = empathy_bad_password_dialog_constructed;
-
- pspec = g_param_spec_string ("password", "Password",
- "The wrong password",
- NULL,
- G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
- g_object_class_install_property (oclass, PROP_PASSWORD, pspec);
-
- signals[RETRY] = g_signal_new ("retry",
- G_TYPE_FROM_CLASS (klass),
- G_SIGNAL_RUN_LAST, 0,
- NULL, NULL,
- g_cclosure_marshal_generic,
- G_TYPE_NONE, 2, TP_TYPE_ACCOUNT, G_TYPE_STRING);
-}
-
-GtkWidget *
-empathy_bad_password_dialog_new (TpAccount *account,
- const gchar *password)
-{
- g_return_val_if_fail (TP_IS_ACCOUNT (account), NULL);
-
- return g_object_new (EMPATHY_TYPE_BAD_PASSWORD_DIALOG,
- "account", account,
- "password", password,
- NULL);
-}
diff --git a/libempathy-gtk/empathy-bad-password-dialog.h b/libempathy-gtk/empathy-bad-password-dialog.h
deleted file mode 100644
index a7d0a6f8..00000000
--- a/libempathy-gtk/empathy-bad-password-dialog.h
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- * empathy-bad-password-dialog.h - Header for EmpathyBadPasswordDialog
- * Copyright (C) 2010 Collabora Ltd.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-#ifndef __EMPATHY_BAD_PASSWORD_DIALOG_H__
-#define __EMPATHY_BAD_PASSWORD_DIALOG_H__
-
-#include "empathy-base-password-dialog.h"
-
-G_BEGIN_DECLS
-
-typedef struct _EmpathyBadPasswordDialog EmpathyBadPasswordDialog;
-typedef struct _EmpathyBadPasswordDialogClass EmpathyBadPasswordDialogClass;
-typedef struct _EmpathyBadPasswordDialogPriv EmpathyBadPasswordDialogPriv;
-
-struct _EmpathyBadPasswordDialogClass {
- EmpathyBasePasswordDialogClass parent_class;
-};
-
-struct _EmpathyBadPasswordDialog {
- EmpathyBasePasswordDialog parent;
- EmpathyBadPasswordDialogPriv *priv;
-};
-
-GType empathy_bad_password_dialog_get_type (void);
-
-#define EMPATHY_TYPE_BAD_PASSWORD_DIALOG \
- (empathy_bad_password_dialog_get_type ())
-#define EMPATHY_BAD_PASSWORD_DIALOG(obj) \
- (G_TYPE_CHECK_INSTANCE_CAST((obj), EMPATHY_TYPE_BAD_PASSWORD_DIALOG, \
- EmpathyBadPasswordDialog))
-#define EMPATHY_BAD_PASSWORD_DIALOG_CLASS(klass) \
- (G_TYPE_CHECK_CLASS_CAST((klass), EMPATHY_TYPE_BAD_PASSWORD_DIALOG, \
- EmpathyBadPasswordDialogClass))
-#define EMPATHY_IS_BAD_PASSWORD_DIALOG(obj) \
- (G_TYPE_CHECK_INSTANCE_TYPE((obj), EMPATHY_TYPE_BAD_PASSWORD_DIALOG))
-#define EMPATHY_IS_BAD_PASSWORD_DIALOG_CLASS(klass) \
- (G_TYPE_CHECK_CLASS_TYPE((klass), EMPATHY_TYPE_BAD_PASSWORD_DIALOG))
-#define EMPATHY_BAD_PASSWORD_DIALOG_GET_CLASS(obj) \
- (G_TYPE_INSTANCE_GET_CLASS ((obj), EMPATHY_TYPE_BAD_PASSWORD_DIALOG, \
- EmpathyBadPasswordDialogClass))
-
-GtkWidget * empathy_bad_password_dialog_new (TpAccount *account,
- const gchar *password);
-
-G_END_DECLS
-
-#endif /* #ifndef __EMPATHY_BAD_PASSWORD_DIALOG_H__*/
diff --git a/libempathy-gtk/empathy-base-password-dialog.c b/libempathy-gtk/empathy-base-password-dialog.c
deleted file mode 100644
index f080cb7b..00000000
--- a/libempathy-gtk/empathy-base-password-dialog.c
+++ /dev/null
@@ -1,305 +0,0 @@
-/*
- * empathy-base-password-dialog.c - Source for EmpathyBasePasswordDialog
- * Copyright (C) 2010 Collabora Ltd.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-#include "config.h"
-#include "empathy-base-password-dialog.h"
-
-#include <glib/gi18n-lib.h>
-#include <tp-account-widgets/tpaw-utils.h>
-
-#include "empathy-utils.h"
-
-#define DEBUG_FLAG EMPATHY_DEBUG_SASL
-#include "empathy-debug.h"
-
-G_DEFINE_TYPE (EmpathyBasePasswordDialog, empathy_base_password_dialog,
- GTK_TYPE_MESSAGE_DIALOG)
-
-enum {
- PROP_ACCOUNT = 1,
-
- LAST_PROPERTY,
-};
-
-struct _EmpathyBasePasswordDialogPriv {
- gboolean grabbing;
-};
-
-static void
-empathy_base_password_dialog_get_property (GObject *object,
- guint property_id,
- GValue *value,
- GParamSpec *pspec)
-{
- EmpathyBasePasswordDialog *self = (EmpathyBasePasswordDialog *) object;
-
- switch (property_id)
- {
- case PROP_ACCOUNT:
- g_value_set_object (value, self->account);
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
- break;
- }
-}
-
-static void
-empathy_base_password_dialog_set_property (GObject *object,
- guint property_id,
- const GValue *value,
- GParamSpec *pspec)
-{
- EmpathyBasePasswordDialog *self = (EmpathyBasePasswordDialog *) object;
-
- switch (property_id)
- {
- case PROP_ACCOUNT:
- g_assert (self->account == NULL); /* construct only */
- self->account = g_value_dup_object (value);
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
- break;
- }
-}
-
-static void
-empathy_base_password_dialog_dispose (GObject *object)
-{
- EmpathyBasePasswordDialog *self = (EmpathyBasePasswordDialog *) object;
-
- tp_clear_object (&self->account);
-
- G_OBJECT_CLASS (empathy_base_password_dialog_parent_class)->dispose (object);
-}
-
-static void
-clear_icon_released_cb (GtkEntry *entry,
- GtkEntryIconPosition icon_pos,
- GdkEvent *event,
- gpointer user_data)
-{
- gtk_entry_set_text (entry, "");
-}
-
-static void
-password_entry_changed_cb (GtkEditable *entry,
- gpointer user_data)
-{
- EmpathyBasePasswordDialog *self = user_data;
- const gchar *str;
-
- str = gtk_entry_get_text (GTK_ENTRY (entry));
-
- gtk_entry_set_icon_sensitive (GTK_ENTRY (entry),
- GTK_ENTRY_ICON_SECONDARY, !TPAW_STR_EMPTY (str));
-
- gtk_widget_set_sensitive (self->ok_button,
- !TPAW_STR_EMPTY (str));
-}
-
-static void
-password_entry_activate_cb (GtkEntry *entry,
- EmpathyBasePasswordDialog *self)
-{
- gtk_dialog_response (GTK_DIALOG (self), GTK_RESPONSE_OK);
-}
-
-static gboolean
-base_password_dialog_grab_keyboard (GtkWidget *widget,
- GdkEvent *event,
- gpointer user_data)
-{
- EmpathyBasePasswordDialog *self = user_data;
-
- if (!self->priv->grabbing)
- {
- GdkDevice *device = gdk_event_get_device (event);
-
- if (device != NULL)
- {
- GdkGrabStatus status = gdk_device_grab (device,
- gtk_widget_get_window (widget),
- GDK_OWNERSHIP_WINDOW,
- FALSE,
- GDK_ALL_EVENTS_MASK,
- NULL,
- gdk_event_get_time (event));
-
- if (status != GDK_GRAB_SUCCESS)
- DEBUG ("Could not grab keyboard; grab status was %u", status);
- else
- self->priv->grabbing = TRUE;
- }
- else
- DEBUG ("Could not get the event device!");
- }
-
- return FALSE;
-}
-
-static gboolean
-base_password_dialog_ungrab_keyboard (GtkWidget *widget,
- GdkEvent *event,
- gpointer user_data)
-{
- EmpathyBasePasswordDialog *self = user_data;
-
- if (self->priv->grabbing)
- {
- GdkDevice *device = gdk_event_get_device (event);
-
- if (device != NULL)
- {
- gdk_device_ungrab (device, gdk_event_get_time (event));
- self->priv->grabbing = FALSE;
- }
- else
- DEBUG ("Could not get the event device!");
- }
-
- return FALSE;
-}
-
-static gboolean
-base_password_dialog_window_state_changed (GtkWidget *widget,
- GdkEventWindowState *event,
- gpointer data)
-{
- GdkWindowState state = gdk_window_get_state (gtk_widget_get_window (widget));
-
- if (state & GDK_WINDOW_STATE_WITHDRAWN
- || state & GDK_WINDOW_STATE_ICONIFIED
- || state & GDK_WINDOW_STATE_FULLSCREEN
- || state & GDK_WINDOW_STATE_MAXIMIZED)
- {
- base_password_dialog_ungrab_keyboard (widget, (GdkEvent *) event, data);
- }
- else
- {
- base_password_dialog_grab_keyboard (widget, (GdkEvent *) event, data);
- }
-
- return FALSE;
-}
-
-static void
-empathy_base_password_dialog_constructed (GObject *object)
-{
- EmpathyBasePasswordDialog *self;
- GtkWidget *icon;
- GtkBox *box;
- gchar *text;
-
- self = EMPATHY_BASE_PASSWORD_DIALOG (object);
-
- g_assert (self->account != NULL);
-
- self->priv->grabbing = FALSE;
-
- /* dialog */
- gtk_dialog_add_button (GTK_DIALOG (self),
- GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL);
-
- self->ok_button = gtk_dialog_add_button (GTK_DIALOG (self),
- GTK_STOCK_OK, GTK_RESPONSE_OK);
- gtk_widget_set_sensitive (self->ok_button, FALSE);
-
- text = g_strdup_printf (_("Enter your password for account\n<b>%s</b>"),
- tp_account_get_display_name (self->account));
- gtk_message_dialog_set_markup (GTK_MESSAGE_DIALOG (self), text);
- g_free (text);
-
- gtk_window_set_icon_name (GTK_WINDOW (self),
- GTK_STOCK_DIALOG_AUTHENTICATION);
-
- box = GTK_BOX (gtk_dialog_get_content_area (GTK_DIALOG (self)));
-
- /* dialog icon */
- icon = gtk_image_new_from_icon_name (
- tp_account_get_icon_name (self->account), GTK_ICON_SIZE_DIALOG);
- gtk_message_dialog_set_image (GTK_MESSAGE_DIALOG (self), icon);
- gtk_widget_show (icon);
-
- /* entry */
- self->entry = gtk_entry_new ();
- gtk_entry_set_visibility (GTK_ENTRY (self->entry), FALSE);
-
- /* entry clear icon */
- gtk_entry_set_icon_from_stock (GTK_ENTRY (self->entry),
- GTK_ENTRY_ICON_SECONDARY, GTK_STOCK_CLEAR);
- gtk_entry_set_icon_sensitive (GTK_ENTRY (self->entry),
- GTK_ENTRY_ICON_SECONDARY, FALSE);
-
- g_signal_connect (self->entry, "icon-release",
- G_CALLBACK (clear_icon_released_cb), NULL);
- g_signal_connect (self->entry, "changed",
- G_CALLBACK (password_entry_changed_cb), self);
- g_signal_connect (self->entry, "activate",
- G_CALLBACK (password_entry_activate_cb), self);
-
- gtk_box_pack_start (box, self->entry, FALSE, FALSE, 0);
- gtk_widget_show (self->entry);
-
- /* remember password ticky box */
- self->ticky = gtk_check_button_new_with_label (_("Remember password"));
-
- gtk_box_pack_start (box, self->ticky, FALSE, FALSE, 0);
-
- g_signal_connect (self, "window-state-event",
- G_CALLBACK (base_password_dialog_window_state_changed), self);
- g_signal_connect (self, "map-event",
- G_CALLBACK (base_password_dialog_grab_keyboard), self);
- g_signal_connect (self, "unmap-event",
- G_CALLBACK (base_password_dialog_ungrab_keyboard), self);
-
- gtk_widget_grab_focus (self->entry);
-
- gtk_window_set_position (GTK_WINDOW (self), GTK_WIN_POS_CENTER_ALWAYS);
-
- gtk_window_set_keep_above (GTK_WINDOW (self), TRUE);
-}
-
-static void
-empathy_base_password_dialog_init (EmpathyBasePasswordDialog *self)
-{
- self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self,
- EMPATHY_TYPE_BASE_PASSWORD_DIALOG, EmpathyBasePasswordDialogPriv);
-}
-
-static void
-empathy_base_password_dialog_class_init (EmpathyBasePasswordDialogClass *klass)
-{
- GParamSpec *pspec;
- GObjectClass *oclass = G_OBJECT_CLASS (klass);
-
- g_type_class_add_private (klass, sizeof (EmpathyBasePasswordDialogPriv));
-
- oclass->set_property = empathy_base_password_dialog_set_property;
- oclass->get_property = empathy_base_password_dialog_get_property;
- oclass->dispose = empathy_base_password_dialog_dispose;
- oclass->constructed = empathy_base_password_dialog_constructed;
-
- pspec = g_param_spec_object ("account", "The TpAccount",
- "The TpAccount to be used.",
- TP_TYPE_ACCOUNT,
- G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
- g_object_class_install_property (oclass, PROP_ACCOUNT, pspec);
-}
diff --git a/libempathy-gtk/empathy-base-password-dialog.h b/libempathy-gtk/empathy-base-password-dialog.h
deleted file mode 100644
index 0c8ff525..00000000
--- a/libempathy-gtk/empathy-base-password-dialog.h
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
- * empathy-base-password-dialog.h - Header for EmpathyBasePasswordDialog
- * Copyright (C) 2010 Collabora Ltd.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-#ifndef __EMPATHY_BASE_PASSWORD_DIALOG_H__
-#define __EMPATHY_BASE_PASSWORD_DIALOG_H__
-
-#include <gtk/gtk.h>
-#include <telepathy-glib/telepathy-glib.h>
-
-G_BEGIN_DECLS
-
-typedef struct _EmpathyBasePasswordDialog EmpathyBasePasswordDialog;
-typedef struct _EmpathyBasePasswordDialogClass EmpathyBasePasswordDialogClass;
-typedef struct _EmpathyBasePasswordDialogPriv EmpathyBasePasswordDialogPriv;
-
-struct _EmpathyBasePasswordDialogClass {
- GtkMessageDialogClass parent_class;
-};
-
-struct _EmpathyBasePasswordDialog {
- GtkMessageDialog parent;
- EmpathyBasePasswordDialogPriv *priv;
-
- /* protected */
- TpAccount *account;
- GtkWidget *entry;
- GtkWidget *ticky;
- GtkWidget *ok_button;
-};
-
-GType empathy_base_password_dialog_get_type (void);
-
-#define EMPATHY_TYPE_BASE_PASSWORD_DIALOG \
- (empathy_base_password_dialog_get_type ())
-#define EMPATHY_BASE_PASSWORD_DIALOG(obj) \
- (G_TYPE_CHECK_INSTANCE_CAST((obj), EMPATHY_TYPE_BASE_PASSWORD_DIALOG, \
- EmpathyBasePasswordDialog))
-#define EMPATHY_BASE_PASSWORD_DIALOG_CLASS(klass) \
- (G_TYPE_CHECK_CLASS_CAST((klass), EMPATHY_TYPE_BASE_PASSWORD_DIALOG, \
- EmpathyBasePasswordDialogClass))
-#define EMPATHY_IS_BASE_PASSWORD_DIALOG(obj) \
- (G_TYPE_CHECK_INSTANCE_TYPE((obj), EMPATHY_TYPE_BASE_PASSWORD_DIALOG))
-#define EMPATHY_IS_BASE_PASSWORD_DIALOG_CLASS(klass) \
- (G_TYPE_CHECK_CLASS_TYPE((klass), EMPATHY_TYPE_BASE_PASSWORD_DIALOG))
-#define EMPATHY_BASE_PASSWORD_DIALOG_GET_CLASS(obj) \
- (G_TYPE_INSTANCE_GET_CLASS ((obj), EMPATHY_TYPE_BASE_PASSWORD_DIALOG, \
- EmpathyBasePasswordDialogClass))
-
-G_END_DECLS
-
-#endif /* #ifndef __EMPATHY_BASE_PASSWORD_DIALOG_H__*/
diff --git a/libempathy-gtk/empathy-call-utils.c b/libempathy-gtk/empathy-call-utils.c
deleted file mode 100644
index ebb4c1d5..00000000
--- a/libempathy-gtk/empathy-call-utils.c
+++ /dev/null
@@ -1,232 +0,0 @@
-/*
- * Copyright (C) 2011 Collabora Ltd.
- *
- * The code contained in this file is free software; you can redistribute
- * it and/or modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either version
- * 2.1 of the License, or (at your option) any later version.
- *
- * This file is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this code; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- *
- * Authors: Emilio Pozuelo Monfort <emilio.pozuelo@collabora.co.uk>
- */
-
-#include "config.h"
-#include "empathy-call-utils.h"
-
-#include <glib/gi18n-lib.h>
-#include <gtk/gtk.h>
-
-#include "empathy-request-util.h"
-
-#define DEBUG_FLAG EMPATHY_DEBUG_OTHER
-#include "empathy-debug.h"
-
-static const gchar *
-get_error_display_message (GError *error)
-{
- if (error->domain != TP_ERROR)
- return _("There was an error starting the call");
-
- switch (error->code)
- {
- case TP_ERROR_NETWORK_ERROR:
- return _("Network error");
- case TP_ERROR_NOT_CAPABLE:
- return _("The specified contact doesn't support calls");
- case TP_ERROR_OFFLINE:
- return _("The specified contact is offline");
- case TP_ERROR_INVALID_HANDLE:
- return _("The specified contact is not valid");
- case TP_ERROR_EMERGENCY_CALLS_NOT_SUPPORTED:
- return _("Emergency calls are not supported on this protocol");
- case TP_ERROR_INSUFFICIENT_BALANCE:
- return _("You don't have enough credit in order to place this call");
- }
-
- return _("There was an error starting the call");
-}
-
-static void
-show_call_error (GError *error)
-{
- GtkWidget *dialog;
-
- dialog = gtk_message_dialog_new (NULL, 0,
- GTK_MESSAGE_ERROR, GTK_BUTTONS_CLOSE,
- "%s", get_error_display_message (error));
-
- g_signal_connect_swapped (dialog, "response",
- G_CALLBACK (gtk_widget_destroy),
- dialog);
-
- gtk_widget_show (dialog);
-}
-
-GHashTable *
-empathy_call_create_call_request (const gchar *contact,
- gboolean initial_audio,
- gboolean initial_video)
-{
- GHashTable *asv = tp_asv_new (
- TP_PROP_CHANNEL_CHANNEL_TYPE, G_TYPE_STRING,
- TP_IFACE_CHANNEL_TYPE_CALL,
- TP_PROP_CHANNEL_TARGET_HANDLE_TYPE, G_TYPE_UINT,
- TP_HANDLE_TYPE_CONTACT,
- TP_PROP_CHANNEL_TARGET_ID, G_TYPE_STRING,
- contact,
- NULL);
-
- /* Only add InitialAudio or InitialVideo if they are true: it should work
- * with genuinely voice-only CMs. */
- if (initial_audio)
- tp_asv_set_boolean (asv, TP_PROP_CHANNEL_TYPE_CALL_INITIAL_AUDIO,
- initial_audio);
- if (initial_video)
- tp_asv_set_boolean (asv, TP_PROP_CHANNEL_TYPE_CALL_INITIAL_VIDEO,
- initial_video);
-
- return asv;
-}
-
-static void
-create_call_channel_cb (GObject *source,
- GAsyncResult *result,
- gpointer user_data)
-{
- GError *error = NULL;
-
- if (tp_account_channel_request_create_channel_finish (
- TP_ACCOUNT_CHANNEL_REQUEST (source), result, &error))
- return;
-
- DEBUG ("Failed to create Call channel: %s", error->message);
-
- show_call_error (error);
-}
-
-/* Try to request a Call channel and fallback to StreamedMedia if that fails */
-static void
-call_new_with_streams (const gchar *contact,
- TpAccount *account,
- gboolean initial_audio,
- gboolean initial_video,
- gint64 timestamp)
-{
- GHashTable *call_request;
- TpAccountChannelRequest *call_req;
-
- /* Call */
- call_request = empathy_call_create_call_request (contact,
- initial_audio,
- initial_video);
-
- call_req = tp_account_channel_request_new (account, call_request, timestamp);
-
- g_hash_table_unref (call_request);
-
- tp_account_channel_request_create_channel_async (call_req,
- EMPATHY_CALL_BUS_NAME, NULL, create_call_channel_cb, NULL);
-
- g_object_unref (call_req);
-}
-
-void
-empathy_call_new_with_streams (const gchar *contact,
- TpAccount *account,
- gboolean initial_audio,
- gboolean initial_video,
- gint64 timestamp)
-{
- call_new_with_streams (contact, account, initial_audio, initial_video,
- timestamp);
-}
-
-/* Copied from telepathy-yell call-channel.c */
-void
-empathy_call_channel_send_video (TpCallChannel *self,
- gboolean send)
-{
- GPtrArray *contents;
- gboolean found = FALSE;
- guint i;
-
- g_return_if_fail (TP_IS_CALL_CHANNEL (self));
-
- /* Loop over all the contents, if some of them a video set all their
- * streams to sending, otherwise request a video channel in case we want to
- * sent */
- contents = tp_call_channel_get_contents (self);
- for (i = 0 ; i < contents->len ; i++)
- {
- TpCallContent *content = g_ptr_array_index (contents, i);
-
- if (tp_call_content_get_media_type (content) ==
- TP_MEDIA_STREAM_TYPE_VIDEO)
- {
- GPtrArray *streams;
- guint j;
-
- found = TRUE;
- streams = tp_call_content_get_streams (content);
- for (j = 0; j < streams->len; j++)
- {
- TpCallStream *stream = g_ptr_array_index (streams, j);
-
- tp_call_stream_set_sending_async (stream, send, NULL, NULL);
- }
- }
- }
-
- if (send && !found)
- {
- tp_call_channel_add_content_async (self, "video",
- TP_MEDIA_STREAM_TYPE_VIDEO, TP_MEDIA_STREAM_DIRECTION_BIDIRECTIONAL,
- NULL, NULL);
- }
-}
-
-/* Copied from telepathy-yell call-channel.c */
-TpSendingState
-empathy_call_channel_get_video_state (TpCallChannel *self)
-{
- TpSendingState result = TP_SENDING_STATE_NONE;
- GPtrArray *contents;
- guint i;
-
- g_return_val_if_fail (TP_IS_CALL_CHANNEL (self), TP_SENDING_STATE_NONE);
-
- contents = tp_call_channel_get_contents (self);
- for (i = 0 ; i < contents->len ; i++)
- {
- TpCallContent *content = g_ptr_array_index (contents, i);
-
- if (tp_call_content_get_media_type (content) ==
- TP_MEDIA_STREAM_TYPE_VIDEO)
- {
- GPtrArray *streams;
- guint j;
-
- streams = tp_call_content_get_streams (content);
- for (j = 0; j < streams->len; j++)
- {
- TpCallStream *stream = g_ptr_array_index (streams, j);
- TpSendingState state;
-
- state = tp_call_stream_get_local_sending_state (stream);
- if (state != TP_SENDING_STATE_PENDING_STOP_SENDING &&
- state > result)
- result = state;
- }
- }
- }
-
- return result;
-}
diff --git a/libempathy-gtk/empathy-call-utils.h b/libempathy-gtk/empathy-call-utils.h
deleted file mode 100644
index 788d828f..00000000
--- a/libempathy-gtk/empathy-call-utils.h
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * Copyright (C) 2011 Collabora Ltd.
- *
- * The code contained in this file is free software; you can redistribute
- * it and/or modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either version
- * 2.1 of the License, or (at your option) any later version.
- *
- * This file is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this code; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- *
- * Authors: Emilio Pozuelo Monfort <emilio.pozuelo@collabora.co.uk>
- */
-
-#ifndef __EMPATHY_CALL_UTILS_H__
-#define __EMPATHY_CALL_UTILS_H__
-
-#include <telepathy-glib/telepathy-glib.h>
-
-G_BEGIN_DECLS
-
-/* Calls */
-void empathy_call_new_with_streams (const gchar *contact,
- TpAccount *account,
- gboolean initial_audio,
- gboolean initial_video,
- gint64 timestamp);
-
-GHashTable * empathy_call_create_call_request (const gchar *contact,
- gboolean initial_audio,
- gboolean initial_video);
-
-TpSendingState empathy_call_channel_get_video_state (TpCallChannel *self);
-void empathy_call_channel_send_video (TpCallChannel *self,
- gboolean send);
-
-
-G_END_DECLS
-
-#endif /* __EMPATHY_CALL_UTILS_H__ */
diff --git a/libempathy-gtk/empathy-cell-renderer-activatable.c b/libempathy-gtk/empathy-cell-renderer-activatable.c
deleted file mode 100644
index bdbf1cb0..00000000
--- a/libempathy-gtk/empathy-cell-renderer-activatable.c
+++ /dev/null
@@ -1,196 +0,0 @@
-/*
- * Copyright (C) 2007 Raphael Slinckx <raphael@slinckx.net>
- * Copyright (C) 2007-2009 Collabora Ltd.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- *
- * Authors: Raphael Slinckx <raphael@slinckx.net>
- * Cosimo Cecchi <cosimo.cecchi@collabora.co.uk>
- */
-
-#include "config.h"
-#include "empathy-cell-renderer-activatable.h"
-
-#include "empathy-utils.h"
-
-enum {
- PATH_ACTIVATED,
- LAST_SIGNAL
-};
-
-enum {
- PROP_SHOW_ON_SELECT = 1
-};
-
-typedef struct {
- gboolean show_on_select;
-} EmpathyCellRendererActivatablePriv;
-
-static guint signals[LAST_SIGNAL];
-
-G_DEFINE_TYPE (EmpathyCellRendererActivatable,
- empathy_cell_renderer_activatable, GTK_TYPE_CELL_RENDERER_PIXBUF)
-
-#define GET_PRIV(obj) EMPATHY_GET_PRIV (obj, EmpathyCellRendererActivatable)
-
-static void
-empathy_cell_renderer_activatable_init (EmpathyCellRendererActivatable *cell)
-{
- cell->priv = G_TYPE_INSTANCE_GET_PRIVATE (cell,
- EMPATHY_TYPE_CELL_RENDERER_ACTIVATABLE,
- EmpathyCellRendererActivatablePriv);
-
- g_object_set (cell,
- "xpad", 0,
- "ypad", 0,
- "mode", GTK_CELL_RENDERER_MODE_ACTIVATABLE,
- "follow-state", TRUE,
- NULL);
-}
-
-static void
-cell_renderer_activatable_get_property (GObject *object,
- guint prop_id,
- GValue *value,
- GParamSpec *pspec)
-{
- EmpathyCellRendererActivatablePriv *priv = GET_PRIV (object);
-
- switch (prop_id)
- {
- case PROP_SHOW_ON_SELECT:
- g_value_set_boolean (value, priv->show_on_select);
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
- break;
- }
-}
-
-static void
-cell_renderer_activatable_set_property (GObject *object,
- guint prop_id,
- const GValue *value,
- GParamSpec *pspec)
-{
- EmpathyCellRendererActivatablePriv *priv = GET_PRIV (object);
-
- switch (prop_id)
- {
- case PROP_SHOW_ON_SELECT:
- priv->show_on_select = g_value_get_boolean (value);
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
- break;
- }
-}
-
-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,
- const GdkRectangle *background_area,
- const 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;
-}
-
-static void
-cell_renderer_activatable_render (
- GtkCellRenderer *cell,
- cairo_t *cr,
- GtkWidget *widget,
- const GdkRectangle *background_area,
- const GdkRectangle *cell_area,
- GtkCellRendererState flags)
-{
- EmpathyCellRendererActivatablePriv *priv = GET_PRIV (cell);
-
- if (priv->show_on_select && !(flags & (GTK_CELL_RENDERER_SELECTED)))
- return;
-
- GTK_CELL_RENDERER_CLASS
- (empathy_cell_renderer_activatable_parent_class)->render (
- cell, cr, widget, background_area, cell_area, flags);
-}
-
-static void
-empathy_cell_renderer_activatable_class_init (
- EmpathyCellRendererActivatableClass *klass)
-{
- GtkCellRendererClass *cell_class;
- GObjectClass *oclass;
-
- oclass = G_OBJECT_CLASS (klass);
- oclass->get_property = cell_renderer_activatable_get_property;
- oclass->set_property = cell_renderer_activatable_set_property;
-
- cell_class = GTK_CELL_RENDERER_CLASS (klass);
- cell_class->activate = cell_renderer_activatable_activate;
- cell_class->render = cell_renderer_activatable_render;
-
- signals[PATH_ACTIVATED] =
- g_signal_new ("path-activated",
- G_TYPE_FROM_CLASS (klass),
- G_SIGNAL_RUN_LAST,
- 0,
- NULL, NULL,
- g_cclosure_marshal_generic,
- G_TYPE_NONE,
- 1, G_TYPE_STRING);
-
- g_object_class_install_property (oclass, PROP_SHOW_ON_SELECT,
- g_param_spec_boolean ("show-on-select",
- "Show on select",
- "Whether the cell renderer should be shown only when it's selected",
- FALSE,
- G_PARAM_STATIC_STRINGS | G_PARAM_READWRITE));
-
- g_type_class_add_private (klass,
- sizeof (EmpathyCellRendererActivatablePriv));
-}
diff --git a/libempathy-gtk/empathy-cell-renderer-activatable.h b/libempathy-gtk/empathy-cell-renderer-activatable.h
deleted file mode 100644
index b4564ee7..00000000
--- a/libempathy-gtk/empathy-cell-renderer-activatable.h
+++ /dev/null
@@ -1,55 +0,0 @@
-/* -*- 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/gtk.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;
- gpointer priv;
-};
-
-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/libempathy-gtk/empathy-cell-renderer-expander.c b/libempathy-gtk/empathy-cell-renderer-expander.c
deleted file mode 100644
index 8653fae8..00000000
--- a/libempathy-gtk/empathy-cell-renderer-expander.c
+++ /dev/null
@@ -1,350 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * Copyright (C) 2006-2007 Imendio AB
- * Copyright (C) 2007-2011 Collabora Ltd.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301 USA
- *
- * Authors: Kristian Rietveld <kris@imendio.com>
- */
-
-#include "config.h"
-#include "empathy-cell-renderer-expander.h"
-
-#include "empathy-utils.h"
-
-#define GET_PRIV(obj) EMPATHY_GET_PRIV (obj, EmpathyCellRendererExpander)
-typedef struct {
- GtkExpanderStyle expander_style;
- gint expander_size;
-
- guint activatable : 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,
- const GdkRectangle *cell_area,
- gint *x_offset,
- gint *y_offset,
- gint *width,
- gint *height);
-static void empathy_cell_renderer_expander_render (GtkCellRenderer *cell,
- cairo_t *cr,
- GtkWidget *widget,
- const GdkRectangle *background_area,
- const GdkRectangle *cell_area,
- GtkCellRendererState flags);
-static gboolean empathy_cell_renderer_expander_activate (GtkCellRenderer *cell,
- GdkEvent *event,
- GtkWidget *widget,
- const gchar *path,
- const GdkRectangle *background_area,
- const 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;
-
- g_object_set (expander,
- "xpad", 2,
- "ypad", 2,
- "mode", GTK_CELL_RENDERER_MODE_ACTIVATABLE,
- NULL);
-}
-
-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)
-{
- (* 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,
- const GdkRectangle *cell_area,
- gint *x_offset,
- gint *y_offset,
- gint *width,
- gint *height)
-{
- EmpathyCellRendererExpander *expander;
- EmpathyCellRendererExpanderPriv *priv;
- gfloat xalign, yalign;
- guint xpad, ypad;
-
- expander = (EmpathyCellRendererExpander *) cell;
- priv = GET_PRIV (expander);
-
- g_object_get (cell,
- "xalign", &xalign,
- "yalign", &yalign,
- "xpad", &xpad,
- "ypad", &ypad,
- NULL);
-
- if (cell_area) {
- if (x_offset) {
- *x_offset = xalign * (cell_area->width - (priv->expander_size + (2 * xpad)));
- *x_offset = MAX (*x_offset, 0);
- }
-
- if (y_offset) {
- *y_offset = yalign * (cell_area->height - (priv->expander_size + (2 * ypad)));
- *y_offset = MAX (*y_offset, 0);
- }
- } else {
- if (x_offset)
- *x_offset = 0;
-
- if (y_offset)
- *y_offset = 0;
- }
-
- if (width)
- *width = xpad * 2 + priv->expander_size;
-
- if (height)
- *height = ypad * 2 + priv->expander_size;
-}
-
-static void
-empathy_cell_renderer_expander_render (GtkCellRenderer *cell,
- cairo_t *cr,
- GtkWidget *widget,
- const GdkRectangle *background_area,
- const GdkRectangle *cell_area,
- GtkCellRendererState flags)
-{
- EmpathyCellRendererExpander *expander;
- EmpathyCellRendererExpanderPriv *priv;
- gint x_offset, y_offset;
- guint xpad, ypad;
- GtkStyleContext *style;
- GtkStateFlags state;
-
- expander = (EmpathyCellRendererExpander *) cell;
- priv = GET_PRIV (expander);
-
- empathy_cell_renderer_expander_get_size (cell, widget,
- (GdkRectangle *) cell_area,
- &x_offset, &y_offset,
- NULL, NULL);
-
- g_object_get (cell,
- "xpad", &xpad,
- "ypad", &ypad,
- NULL);
-
- style = gtk_widget_get_style_context (widget);
-
- gtk_style_context_save (style);
- gtk_style_context_add_class (style, GTK_STYLE_CLASS_EXPANDER);
-
- state = gtk_cell_renderer_get_state (cell, widget, flags);
-
- if (priv->expander_style == GTK_EXPANDER_COLLAPSED)
- state |= GTK_STATE_FLAG_NORMAL;
- else
- state |= GTK_STATE_FLAG_ACTIVE;
-
- gtk_style_context_set_state (style, state);
-
- gtk_render_expander (style,
- cr,
- cell_area->x + x_offset + xpad,
- cell_area->y + y_offset + ypad,
- priv->expander_size,
- priv->expander_size);
-
- gtk_style_context_restore (style);
-}
-
-static gboolean
-empathy_cell_renderer_expander_activate (GtkCellRenderer *cell,
- GdkEvent *event,
- GtkWidget *widget,
- const gchar *path_string,
- const GdkRectangle *background_area,
- const GdkRectangle *cell_area,
- GtkCellRendererState flags)
-{
- EmpathyCellRendererExpanderPriv *priv;
- GtkTreePath *path;
-
- 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;
- }
-
- if (gtk_tree_view_row_expanded (GTK_TREE_VIEW (widget), path)) {
- gtk_tree_view_collapse_row (GTK_TREE_VIEW (widget), path);
- } else {
- gtk_tree_view_expand_row (GTK_TREE_VIEW (widget), path, FALSE);
- }
-
- gtk_tree_path_free (path);
-
- return TRUE;
-}
diff --git a/libempathy-gtk/empathy-cell-renderer-expander.h b/libempathy-gtk/empathy-cell-renderer-expander.h
deleted file mode 100644
index 00e36f54..00000000
--- a/libempathy-gtk/empathy-cell-renderer-expander.h
+++ /dev/null
@@ -1,60 +0,0 @@
-/* -*- 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., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301 USA
- *
- * Authors: Kristian Rietveld <kris@imendio.com>
- */
-
-#ifndef __EMPATHY_CELL_RENDERER_EXPANDER_H__
-#define __EMPATHY_CELL_RENDERER_EXPANDER_H__
-
-#include <gtk/gtk.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/libempathy-gtk/empathy-cell-renderer-text.c b/libempathy-gtk/empathy-cell-renderer-text.c
deleted file mode 100644
index 8b488f19..00000000
--- a/libempathy-gtk/empathy-cell-renderer-text.c
+++ /dev/null
@@ -1,403 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * Copyright (C) 2004-2007 Imendio AB
- * Copyright (C) 2010 Collabora Ltd
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301 USA
- *
- * Authors: Mikael Hallendal <micke@imendio.com>
- */
-
-#include "config.h"
-#include "empathy-cell-renderer-text.h"
-
-#include <tp-account-widgets/tpaw-utils.h>
-
-#include "empathy-utils.h"
-
-#define GET_PRIV(obj) EMPATHY_GET_PRIV (obj, EmpathyCellRendererText)
-typedef struct {
- gchar *name;
- TpConnectionPresenceType presence_type;
- gchar *status;
- gboolean is_group;
-
- gboolean is_valid;
- gboolean is_selected;
-
- gchar **types;
-
- gboolean compact;
-} 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_render (GtkCellRenderer *cell,
- cairo_t *cr,
- GtkWidget *widget,
- const GdkRectangle *background_area,
- const GdkRectangle *cell_area,
- GtkCellRendererState flags);
-static void cell_renderer_text_update_text (EmpathyCellRendererText *cell,
- GtkWidget *widget,
- gboolean selected);
-
-/* Properties */
-enum {
- PROP_0,
- PROP_NAME,
- PROP_PRESENCE_TYPE,
- PROP_STATUS,
- PROP_IS_GROUP,
- PROP_COMPACT,
- PROP_CLIENT_TYPES
-};
-
-G_DEFINE_TYPE (EmpathyCellRendererText, empathy_cell_renderer_text, GTK_TYPE_CELL_RENDERER_TEXT);
-
-static void
-cell_renderer_text_get_preferred_height_for_width (GtkCellRenderer *renderer,
- GtkWidget *widget,
- gint width,
- gint *minimum_size,
- gint *natural_size)
-{
- EmpathyCellRendererText *self = EMPATHY_CELL_RENDERER_TEXT (renderer);
- EmpathyCellRendererTextPriv *priv = GET_PRIV (self);
-
- /* Only update if not already valid so we get the right size. */
- cell_renderer_text_update_text (self, widget, priv->is_selected);
-
- GTK_CELL_RENDERER_CLASS (empathy_cell_renderer_text_parent_class)->
- get_preferred_height_for_width (renderer, widget, width,
- minimum_size, natural_size);
-}
-
-
-static void
-empathy_cell_renderer_text_class_init (EmpathyCellRendererTextClass *klass)
-{
- GObjectClass *object_class;
- GtkCellRendererClass *cell_class;
- GParamSpec *spec;
-
- 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_preferred_height_for_width = cell_renderer_text_get_preferred_height_for_width;
- cell_class->render = cell_renderer_text_render;
-
- spec = g_param_spec_string ("name", "Name", "Contact name", NULL,
- G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
- g_object_class_install_property (object_class, PROP_NAME, spec);
-
- spec = g_param_spec_uint ("presence-type", "TpConnectionPresenceType",
- "The contact's presence type",
- 0, G_MAXUINT, /* Telepathy enum, can be extended */
- TP_CONNECTION_PRESENCE_TYPE_UNKNOWN,
- G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
- g_object_class_install_property (object_class, PROP_PRESENCE_TYPE,
- spec);
-
- spec = g_param_spec_string ("status", "Status message",
- "Contact's custom status message", NULL,
- G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
- g_object_class_install_property (object_class, PROP_STATUS, spec);
-
- spec = g_param_spec_boolean ("is-group", "Is group",
- "Whether this cell is a group", FALSE,
- G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
- g_object_class_install_property (object_class, PROP_IS_GROUP, spec);
-
- spec = g_param_spec_boolean ("compact", "Compact",
- "TRUE to show the status alongside the contact name;"
- "FALSE to show it on its own line",
- FALSE, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
- g_object_class_install_property (object_class, PROP_COMPACT, spec);
-
- spec = g_param_spec_boxed ("client-types", "Contact client types",
- "Client types of the contact",
- G_TYPE_STRV, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
- g_object_class_install_property (object_class, PROP_CLIENT_TYPES, spec);
-
- 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->compact = FALSE;
-}
-
-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_strfreev (priv->types);
-
- (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_PRESENCE_TYPE:
- g_value_set_uint (value, priv->presence_type);
- 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_COMPACT:
- g_value_set_boolean (value, priv->compact);
- break;
- case PROP_CLIENT_TYPES:
- g_value_set_boxed (value, priv->types);
- 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_PRESENCE_TYPE:
- priv->presence_type = g_value_get_uint (value);
- 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_COMPACT:
- priv->compact = g_value_get_boolean (value);
- priv->is_valid = FALSE;
- break;
- case PROP_CLIENT_TYPES:
- g_strfreev (priv->types);
- priv->types = g_value_dup_boxed (value);
- priv->is_valid = FALSE;
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, pspec);
- break;
- }
-}
-
-static void
-cell_renderer_text_render (GtkCellRenderer *cell,
- cairo_t *cr,
- GtkWidget *widget,
- const GdkRectangle *background_area,
- const GdkRectangle *cell_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, cr,
- widget,
- background_area,
- cell_area,
- flags);
-}
-
-static void
-cell_renderer_text_update_text (EmpathyCellRendererText *cell,
- GtkWidget *widget,
- gboolean selected)
-{
- EmpathyCellRendererTextPriv *priv;
- const PangoFontDescription *font_desc;
- PangoAttrList *attr_list;
- PangoAttribute *attr_color = NULL, *attr_size;
- GtkStyleContext *style;
- gchar *str;
- gint font_size;
-
- 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_context (widget);
-
- attr_list = pango_attr_list_new ();
-
- font_desc = gtk_style_context_get_font (style, GTK_STATE_FLAG_NORMAL);
- font_size = pango_font_description_get_size (font_desc);
- attr_size = pango_attr_size_new (font_size / 1.2);
- attr_size->start_index = strlen (priv->name) + 1;
- attr_size->end_index = -1;
- pango_attr_list_insert (attr_list, attr_size);
-
- if (!selected) {
- GdkRGBA color;
-
- gtk_style_context_get_color (style, 0, &color);
-
- attr_color = pango_attr_foreground_new (color.red * 0xffff,
- color.green * 0xffff,
- color.blue * 0xffff);
- attr_color->start_index = attr_size->start_index;
- attr_color->end_index = -1;
- pango_attr_list_insert (attr_list, attr_color);
- }
-
- if (priv->compact) {
- if (TPAW_STR_EMPTY (priv->status)) {
- str = g_strdup (priv->name);
- } else {
- str = g_strdup_printf ("%s %s", priv->name, priv->status);
- }
- } else {
- const gchar *status = priv->status;
- gboolean on_a_phone = FALSE;
-
- if (TPAW_STR_EMPTY (priv->status)) {
- status = empathy_presence_get_default_message (priv->presence_type);
- }
-
- if (!priv->is_group &&
- empathy_client_types_contains_mobile_device (priv->types)) {
- on_a_phone = TRUE;
- /* We want the phone black. */
- if (attr_color)
- attr_color->start_index += 3;
- }
-
- if (status == NULL)
- str = g_strdup (priv->name);
- else
- str = g_strdup_printf ("%s\n%s%s", priv->name,
- on_a_phone ? "☎ " : "",
- 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/libempathy-gtk/empathy-cell-renderer-text.h b/libempathy-gtk/empathy-cell-renderer-text.h
deleted file mode 100644
index 48ded962..00000000
--- a/libempathy-gtk/empathy-cell-renderer-text.h
+++ /dev/null
@@ -1,54 +0,0 @@
-/* -*- 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., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301 USA
- *
- * Authors: Mikael Hallendal <micke@imendio.com>
- */
-
-#ifndef __EMPATHY_CELL_RENDERER_TEXT_H__
-#define __EMPATHY_CELL_RENDERER_TEXT_H__
-
-#include <gtk/gtk.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/libempathy-gtk/empathy-chat.c b/libempathy-gtk/empathy-chat.c
deleted file mode 100644
index a7364e4c..00000000
--- a/libempathy-gtk/empathy-chat.c
+++ /dev/null
@@ -1,4588 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * Copyright (C) 2002-2007 Imendio AB
- * Copyright (C) 2007-2010 Collabora Ltd.
- * Copyright (C) 2012 Red Hat, Inc.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301 USA
- *
- * Authors: 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>
- */
-
-/* for GCompletion */
-#define GLIB_DISABLE_DEPRECATION_WARNINGS 1
-
-#include "config.h"
-#include "empathy-chat.h"
-
-#include <glib/gi18n-lib.h>
-#include <tp-account-widgets/tpaw-keyring.h>
-#include <tp-account-widgets/tpaw-builder.h>
-#include <tp-account-widgets/tpaw-utils.h>
-
-#include "empathy-client-factory.h"
-#include "empathy-gsettings.h"
-#include "empathy-individual-information-dialog.h"
-#include "empathy-individual-store-channel.h"
-#include "empathy-individual-view.h"
-#include "empathy-input-text-view.h"
-#include "empathy-request-util.h"
-#include "empathy-search-bar.h"
-#include "empathy-smiley-manager.h"
-#include "empathy-spell.h"
-#include "empathy-string-parser.h"
-#include "empathy-theme-manager.h"
-#include "empathy-ui-utils.h"
-#include "empathy-utils.h"
-#include "extensions.h"
-
-#define DEBUG_FLAG EMPATHY_DEBUG_CHAT
-#include "empathy-debug.h"
-
-#define IS_ENTER(v) (v == GDK_KEY_Return || v == GDK_KEY_ISO_Enter || v == GDK_KEY_KP_Enter)
-#define COMPOSING_STOP_TIMEOUT 5
-
-#define GET_PRIV(obj) EMPATHY_GET_PRIV (obj, EmpathyChat)
-struct _EmpathyChatPriv {
- EmpathyTpChat *tp_chat;
- TpAccount *account;
- gchar *id;
- gchar *name;
- gchar *subject;
- EmpathyContact *self_contact;
- EmpathyContact *remote_contact;
- gboolean show_contacts;
-
- GSettings *gsettings_chat;
- GSettings *gsettings_ui;
-
- TplLogManager *log_manager;
- TplLogWalker *log_walker;
- /* Are we watching for scrolling movements? */
- gboolean watch_scroll;
- /* Maximum page size of the chat->view. */
- guint max_page_size;
- /* The offset from the lower edge of the chat->view before it
- * expanded to fit in the newly fetched logs. This is to
- * restore the chat->view to the page it was on before the
- * latest batch of logs were inserted. */
- guint scroll_offset;
-
- TpAccountManager *account_manager;
- GList *input_history;
- GList *input_history_current;
- GList *compositors;
- GCompletion *completion;
- guint composing_stop_timeout_id;
- guint block_events_timeout_id;
- TpHandleType handle_type;
- gint contacts_width;
- gboolean has_input_vscroll;
-
- /* TRUE if spell checking is enabled, FALSE otherwise.
- * This is to keep track of the last state of spell checking
- * when it changes. */
- gboolean spell_checking_enabled;
-
- /* These store the signal handler ids for the enclosed text entry. */
- gulong insert_text_id;
- gulong delete_range_id;
- gulong notify_cursor_position_id;
-
- /* Source func ID for update_misspelled_words () */
- guint update_misspelled_words_id;
- /* Source func ID for save_paned_pos_timeout () */
- guint save_paned_pos_id;
- /* Source func ID for chat_contacts_visible_timeout_cb () */
- guint contacts_visible_id;
-
- GtkWidget *widget;
- GtkWidget *hpaned;
- GtkWidget *vbox_left;
- GtkWidget *scrolled_window_chat;
- GtkWidget *scrolled_window_input;
- GtkWidget *scrolled_window_contacts;
- GtkWidget *hbox_topic;
- GtkWidget *expander_topic;
- GtkWidget *label_topic;
- GtkWidget *contact_list_view;
- GtkWidget *info_bar_vbox;
- GtkWidget *search_bar;
-
- guint unread_messages;
- guint unread_messages_when_offline;
- /* TRUE if the pending messages can be displayed. This is to avoid to show
- * pending messages *before* messages from logs. (#603980) */
- gboolean can_show_pending;
-
- /* FIXME: retrieving_backlogs flag is a workaround for Bug#610994 and should
- * be differently handled since it introduces another race condition, which
- * is really hard to occur, but still possible.
- *
- * With the current workaround (which has the race above), we need to be
- * sure to ACK any pending messages only when the retrieval of backlogs is
- * finished, that's why using retrieving_backlogs flag.
- * empathy_chat_messages_read () will check this variable and not ACK
- * anything when TRUE. It will be set TRUE at chat_constructed () and set
- * back to FALSE when the backlog has been retrieved and the pending
- * messages actually showed to the user.
- *
- * Race condition introduced with this workaround:
- * Scenario: a message is pending, the user is notified and selects the tab.
- * the tab with a pending message is focused before the messages are properly
- * shown (since the preparation of the window is slower AND async WRT the
- * tab showing), which means the user won't see any new messages (rare but
- * possible), if he/she will change tab focus before the messages are
- * properly shown, the tab will be set as 'seen' and the user won't be
- * notified again about the already notified pending messages when the
- * messages in tab will be properly shown */
- gboolean retrieving_backlogs;
- gboolean sms_channel;
-
- /* we need to know whether populate-popup happened in response to
- * the keyboard or the mouse. We can't ask GTK for the most recent
- * event, because it will be a notify event. Instead we track it here */
- GdkEventType most_recent_event_type;
-
- /* A regex matching our own current nickname in the room, or %NULL if
- * !empathy_chat_is_room (). */
- GRegex *highlight_regex;
-
- /* TRUE if empathy_chat_is_room () and there are unread highlighted messages.
- * Cleared by empathy_chat_messages_read (). */
- gboolean highlighted;
-};
-
-typedef struct {
- gchar *text; /* Original message that was specified
- * upon entry creation. */
- gchar *modified_text; /* Message that was modified by user.
- * When no modifications were made, it is NULL */
-} InputHistoryEntry;
-
-enum {
- COMPOSING,
- NEW_MESSAGE,
- PART_COMMAND_ENTERED,
- LAST_SIGNAL
-};
-
-enum {
- PROP_0,
- PROP_TP_CHAT,
- PROP_ACCOUNT,
- PROP_ID,
- PROP_NAME,
- PROP_SUBJECT,
- PROP_REMOTE_CONTACT,
- PROP_SHOW_CONTACTS,
- PROP_SMS_CHANNEL,
- PROP_N_MESSAGES_SENDING,
- PROP_NB_UNREAD_MESSAGES,
-};
-
-static guint signals[LAST_SIGNAL] = { 0 };
-
-G_DEFINE_TYPE (EmpathyChat, empathy_chat, GTK_TYPE_BOX);
-
-static gboolean chat_scrollable_connect (gpointer user_data);
-static gboolean update_misspelled_words (gpointer data);
-
-static void
-chat_get_property (GObject *object,
- guint param_id,
- GValue *value,
- GParamSpec *pspec)
-{
- EmpathyChat *chat = EMPATHY_CHAT (object);
- 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_take_string (value, empathy_chat_dup_name (chat));
- 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;
- case PROP_SHOW_CONTACTS:
- g_value_set_boolean (value, priv->show_contacts);
- break;
- case PROP_SMS_CHANNEL:
- g_value_set_boolean (value, priv->sms_channel);
- break;
- case PROP_N_MESSAGES_SENDING:
- g_value_set_uint (value,
- empathy_chat_get_n_messages_sending (chat));
- break;
- case PROP_NB_UNREAD_MESSAGES:
- g_value_set_uint (value,
- empathy_chat_get_nb_unread_messages (chat));
- 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;
- case PROP_SHOW_CONTACTS:
- empathy_chat_set_show_contacts (chat, g_value_get_boolean (value));
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, pspec);
- break;
- };
-}
-
-static void
-account_reconnected (EmpathyChat *chat,
- TpAccount *account)
-{
- EmpathyChatPriv *priv = GET_PRIV (chat);
-
- DEBUG ("Account reconnected, request a new Text channel");
-
- /* FIXME: Ideally we should ask to handle ourself the channel so we can
- * report the error if any but this is blocked by
- * https://bugs.freedesktop.org/show_bug.cgi?id=13422 */
- switch (priv->handle_type) {
- case TP_HANDLE_TYPE_CONTACT:
- if (priv->sms_channel)
- empathy_sms_contact_id (
- account, priv->id,
- TP_USER_ACTION_TIME_NOT_USER_ACTION,
- NULL, NULL);
- else
- empathy_chat_with_contact_id (
- account, priv->id,
- TP_USER_ACTION_TIME_NOT_USER_ACTION,
- NULL, NULL);
- break;
- case TP_HANDLE_TYPE_ROOM:
- empathy_join_muc (account, priv->id,
- TP_USER_ACTION_TIME_NOT_USER_ACTION);
- break;
- case TP_HANDLE_TYPE_NONE:
- case TP_HANDLE_TYPE_LIST:
- case TP_HANDLE_TYPE_GROUP:
- default:
- g_assert_not_reached ();
- break;
- }
-
- g_object_unref (chat);
-}
-
-static void
-chat_new_connection_cb (TpAccount *account,
- guint old_status,
- guint new_status,
- guint reason,
- gchar *dbus_error_name,
- GHashTable *details,
- EmpathyChat *chat)
-{
- EmpathyChatPriv *priv = GET_PRIV (chat);
-
- if (new_status != TP_CONNECTION_STATUS_CONNECTED)
- return;
-
- if (priv->tp_chat != NULL || account != priv->account ||
- priv->handle_type == TP_HANDLE_TYPE_NONE ||
- TPAW_STR_EMPTY (priv->id))
- return;
-
- g_object_ref (chat);
-
- account_reconnected (chat, 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 void
-set_chate_state_cb (GObject *source,
- GAsyncResult *result,
- gpointer user_data)
-{
- GError *error = NULL;
-
- if (!tp_text_channel_set_chat_state_finish (TP_TEXT_CHANNEL (source), result,
- &error)) {
- DEBUG ("Failed to set chat state: %s", error->message);
- g_error_free (error);
- }
-}
-
-static void
-set_chat_state (EmpathyChat *self,
- TpChannelChatState state)
-{
- EmpathyChatPriv *priv = GET_PRIV (self);
-
- if (!tp_proxy_has_interface_by_id (priv->tp_chat,
- TP_IFACE_QUARK_CHANNEL_INTERFACE_CHAT_STATE))
- return;
-
- tp_text_channel_set_chat_state_async (TP_TEXT_CHANNEL (priv->tp_chat), state,
- set_chate_state_cb, self);
-}
-
-static gboolean
-chat_composing_stop_timeout_cb (EmpathyChat *chat)
-{
- EmpathyChatPriv *priv;
- gboolean send_chat_states;
-
- priv = GET_PRIV (chat);
-
- priv->composing_stop_timeout_id = 0;
- send_chat_states = g_settings_get_boolean (priv->gsettings_chat,
- EMPATHY_PREFS_CHAT_SEND_CHAT_STATES);
- if (!send_chat_states) {
- set_chat_state (chat, TP_CHANNEL_CHAT_STATE_ACTIVE);
- } else {
- set_chat_state (chat, TP_CHANNEL_CHAT_STATE_PAUSED);
- }
-
- return FALSE;
-}
-
-static void
-chat_composing_start (EmpathyChat *chat)
-{
- EmpathyChatPriv *priv;
- gboolean send_chat_states;
-
- priv = GET_PRIV (chat);
-
- send_chat_states = g_settings_get_boolean (priv->gsettings_chat,
- EMPATHY_PREFS_CHAT_SEND_CHAT_STATES);
- if (!send_chat_states) {
- return;
- }
-
- if (priv->composing_stop_timeout_id) {
- /* Just restart the timeout */
- chat_composing_remove_timeout (chat);
- } else {
- set_chat_state (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)
-{
- chat_composing_remove_timeout (chat);
- set_chat_state (chat, TP_CHANNEL_CHAT_STATE_ACTIVE);
-}
-
-static gint
-chat_input_history_entry_cmp (InputHistoryEntry *entry,
- const gchar *text)
-{
- if (!tp_strdiff (entry->text, text)) {
- if (entry->modified_text != NULL) {
- /* Modified entry and single string cannot be equal. */
- return 1;
- }
- return 0;
- }
- return 1;
-}
-
-static InputHistoryEntry *
-chat_input_history_entry_new_with_text (const gchar *text)
-{
- InputHistoryEntry *entry;
- entry = g_slice_new0 (InputHistoryEntry);
- entry->text = g_strdup (text);
-
- return entry;
-}
-
-static void
-chat_input_history_entry_free (InputHistoryEntry *entry)
-{
- g_free (entry->text);
- g_free (entry->modified_text);
- g_slice_free (InputHistoryEntry, entry);
-}
-
-static void
-chat_input_history_entry_revert (InputHistoryEntry *entry)
-{
- g_free (entry->modified_text);
- entry->modified_text = NULL;
-}
-
-static void
-chat_input_history_entry_update_text (InputHistoryEntry *entry,
- const gchar *text)
-{
- gchar *old;
-
- if (!tp_strdiff (text, entry->text)) {
- g_free (entry->modified_text);
- entry->modified_text = NULL;
- return;
- }
-
- old = entry->modified_text;
- entry->modified_text = g_strdup (text);
- g_free (old);
-}
-
-static const gchar *
-chat_input_history_entry_get_text (InputHistoryEntry *entry)
-{
- if (entry == NULL) {
- return NULL;
- }
-
- if (entry->modified_text != NULL) {
- return entry->modified_text;
- }
- return entry->text;
-}
-
-static GList *
-chat_input_history_remove_item (GList *list,
- GList *item)
-{
- list = g_list_remove_link (list, item);
- chat_input_history_entry_free (item->data);
- g_list_free_1 (item);
- return list;
-}
-
-static void
-chat_input_history_revert (EmpathyChat *chat)
-{
- EmpathyChatPriv *priv;
- GList *list;
- GList *item1;
- GList *item2;
- InputHistoryEntry *entry;
-
- priv = GET_PRIV (chat);
- list = priv->input_history;
-
- if (list == NULL) {
- DEBUG ("No input history");
- return;
- }
-
- /* Delete temporary entry */
- if (priv->input_history_current != NULL) {
- item1 = list;
- list = chat_input_history_remove_item (list, item1);
- if (priv->input_history_current == item1) {
- /* Removed temporary entry was current entry */
- priv->input_history = list;
- priv->input_history_current = NULL;
- return;
- }
- }
- else {
- /* There is no entry to revert */
- return;
- }
-
- /* Restore the current history entry to original value */
- item1 = priv->input_history_current;
- entry = item1->data;
- chat_input_history_entry_revert (entry);
-
- /* Remove restored entry if there is other occurance before this entry */
- item2 = g_list_find_custom (list, chat_input_history_entry_get_text (entry),
- (GCompareFunc) chat_input_history_entry_cmp);
- if (item2 != item1) {
- list = chat_input_history_remove_item (list, item1);
- }
- else {
- /* Remove other occurance of the restored entry */
- item2 = g_list_find_custom (item1->next,
- chat_input_history_entry_get_text (entry),
- (GCompareFunc) chat_input_history_entry_cmp);
- if (item2 != NULL) {
- list = chat_input_history_remove_item (list, item2);
- }
- }
-
- priv->input_history_current = NULL;
- priv->input_history = list;
-}
-
-static void
-chat_input_history_add (EmpathyChat *chat,
- const gchar *str,
- gboolean temporary)
-{
- EmpathyChatPriv *priv;
- GList *list;
- GList *item;
- InputHistoryEntry *entry;
-
- priv = GET_PRIV (chat);
-
- list = priv->input_history;
-
- /* Remove any other occurances of this entry, if not temporary */
- if (!temporary) {
- while ((item = g_list_find_custom (list, str,
- (GCompareFunc) chat_input_history_entry_cmp)) != NULL) {
- list = chat_input_history_remove_item (list, item);
- }
-
- /* Trim the list to the last 10 items */
- while (g_list_length (list) > 10) {
- item = g_list_last (list);
- if (item != NULL) {
- list = chat_input_history_remove_item (list, item);
- }
- }
- }
-
-
-
- /* Add new entry */
- entry = chat_input_history_entry_new_with_text (str);
- list = g_list_prepend (list, entry);
-
- /* Set the list and the current item pointer */
- priv->input_history = list;
- if (temporary) {
- priv->input_history_current = list;
- }
- else {
- priv->input_history_current = NULL;
- }
-}
-
-static const gchar *
-chat_input_history_get_next (EmpathyChat *chat)
-{
- EmpathyChatPriv *priv;
- GList *item;
- const gchar *msg;
-
- priv = GET_PRIV (chat);
-
- if (priv->input_history == NULL) {
- DEBUG ("No input history, next entry is NULL");
- return NULL;
- }
- g_assert (priv->input_history_current != NULL);
-
- if ((item = g_list_next (priv->input_history_current)) == NULL)
- {
- item = priv->input_history_current;
- }
-
- msg = chat_input_history_entry_get_text (item->data);
-
- DEBUG ("Returning next entry: '%s'", msg);
-
- priv->input_history_current = item;
-
- return msg;
-}
-
-static const gchar *
-chat_input_history_get_prev (EmpathyChat *chat)
-{
- EmpathyChatPriv *priv;
- GList *item;
- const gchar *msg;
-
- g_return_val_if_fail (EMPATHY_IS_CHAT (chat), NULL);
-
- priv = GET_PRIV (chat);
-
- if (priv->input_history == NULL) {
- DEBUG ("No input history, previous entry is NULL");
- return NULL;
- }
-
- if (priv->input_history_current == NULL)
- {
- return NULL;
- }
- else if ((item = g_list_previous (priv->input_history_current)) == NULL)
- {
- item = priv->input_history_current;
- }
-
- msg = chat_input_history_entry_get_text (item->data);
-
- DEBUG ("Returning previous entry: '%s'", msg);
-
- priv->input_history_current = item;
-
- return msg;
-}
-
-static void
-chat_input_history_update (EmpathyChat *chat,
- GtkTextBuffer *buffer)
-{
- EmpathyChatPriv *priv;
- GtkTextIter start, end;
- gchar *text;
- InputHistoryEntry *entry;
-
- priv = GET_PRIV (chat);
-
- gtk_text_buffer_get_bounds (buffer, &start, &end);
- text = gtk_text_buffer_get_text (buffer, &start, &end, FALSE);
-
- if (priv->input_history_current == NULL) {
- /* Add the current text temporarily to the history */
- chat_input_history_add (chat, text, TRUE);
- g_free (text);
- return;
- }
-
- /* Save the changes in the history */
- entry = priv->input_history_current->data;
- if (tp_strdiff (chat_input_history_entry_get_text (entry), text)) {
- chat_input_history_entry_update_text (entry, text);
- }
-
- g_free (text);
-}
-
-typedef struct {
- EmpathyChat *chat;
- gchar *message;
-} ChatCommandMsgData;
-
-static void
-chat_command_msg_cb (GObject *source,
- GAsyncResult *result,
- gpointer user_data)
-{
- ChatCommandMsgData *data = user_data;
- GError *error = NULL;
- TpChannel *channel;
-
- channel = tp_account_channel_request_ensure_and_observe_channel_finish (
- TP_ACCOUNT_CHANNEL_REQUEST (source), result, &error);
-
- if (channel == NULL) {
- DEBUG ("Failed to get channel: %s", error->message);
- g_error_free (error);
-
- empathy_theme_adium_append_event (data->chat->view,
- _("Failed to open private chat"));
- goto OUT;
- }
-
- if (!TPAW_STR_EMPTY (data->message) && TP_IS_TEXT_CHANNEL (channel)) {
- TpTextChannel *text = (TpTextChannel *) channel;
- TpMessage *msg;
-
- msg = tp_client_message_new_text (TP_CHANNEL_TEXT_MESSAGE_TYPE_NORMAL,
- data->message);
-
- tp_text_channel_send_message_async (text, msg, 0, NULL, NULL);
-
- g_object_unref (msg);
- }
-
- g_object_unref (channel);
-
-OUT:
- g_free (data->message);
- g_slice_free (ChatCommandMsgData, data);
-}
-
-static gboolean
-nick_command_supported (EmpathyChat *chat)
-{
- EmpathyChatPriv * priv = GET_PRIV (chat);
- TpConnection *connection;
-
- connection = tp_channel_get_connection (TP_CHANNEL (priv->tp_chat));
- return tp_proxy_has_interface_by_id (connection,
- EMP_IFACE_QUARK_CONNECTION_INTERFACE_RENAMING);
-}
-
-static gboolean
-part_command_supported (EmpathyChat *chat)
-{
- EmpathyChatPriv * priv = GET_PRIV (chat);
-
- return tp_proxy_has_interface_by_id (priv->tp_chat,
- TP_IFACE_QUARK_CHANNEL_INTERFACE_GROUP);
-}
-
-static void
-chat_command_clear (EmpathyChat *chat,
- GStrv strv)
-{
- empathy_theme_adium_clear (chat->view);
-}
-
-static void
-chat_command_topic (EmpathyChat *chat,
- GStrv strv)
-{
- EmpathyChatPriv *priv = GET_PRIV (chat);
-
- if (!empathy_tp_chat_supports_subject (priv->tp_chat)) {
- empathy_theme_adium_append_event (chat->view,
- _("Topic not supported on this conversation"));
- return;
- }
-
- if (!empathy_tp_chat_can_set_subject (priv->tp_chat)) {
- empathy_theme_adium_append_event (chat->view,
- _("You are not allowed to change the topic"));
- return;
- }
-
- empathy_tp_chat_set_subject (priv->tp_chat, strv[1]);
-}
-
-void
-empathy_chat_join_muc (EmpathyChat *chat,
- const gchar *room)
-{
- EmpathyChatPriv *priv = GET_PRIV (chat);
-
- empathy_join_muc (priv->account, room,
- empathy_get_current_action_time ());
-}
-
-static void
-chat_command_join (EmpathyChat *chat,
- GStrv strv)
-{
- guint i = 0;
-
- GStrv rooms = g_strsplit_set (strv[1], ", ", -1);
-
- /* FIXME: Ideally we should ask to handle ourself the channel so we can
- * report the error if any but this is blocked by
- * https://bugs.freedesktop.org/show_bug.cgi?id=13422 */
- while (rooms[i] != NULL) {
- /* ignore empty strings */
- if (!TPAW_STR_EMPTY (rooms[i])) {
- empathy_chat_join_muc (chat, rooms[i]);
- }
- i++;
- }
- g_strfreev (rooms);
-}
-
-static void
-chat_command_part (EmpathyChat *chat,
- GStrv strv)
-{
- g_signal_emit (chat, signals[PART_COMMAND_ENTERED], 0, strv);
-}
-
-static void
-chat_command_msg_internal (EmpathyChat *chat,
- const gchar *contact_id,
- const gchar *message)
-{
- EmpathyChatPriv *priv = GET_PRIV (chat);
- ChatCommandMsgData *data;
- TpAccountChannelRequest *req;
- GHashTable *request;
-
- request = tp_asv_new (
- TP_PROP_CHANNEL_CHANNEL_TYPE, G_TYPE_STRING, TP_IFACE_CHANNEL_TYPE_TEXT,
- TP_PROP_CHANNEL_TARGET_HANDLE_TYPE, G_TYPE_UINT, TP_HANDLE_TYPE_CONTACT,
- TP_PROP_CHANNEL_TARGET_ID, G_TYPE_STRING, contact_id,
- NULL);
-
- req = tp_account_channel_request_new (priv->account, request,
- empathy_get_current_action_time ());
-
- /* FIXME: We should probably search in members alias. But this
- * is enough for IRC */
- data = g_slice_new (ChatCommandMsgData);
- data->chat = chat;
- data->message = g_strdup (message);
-
- tp_account_channel_request_ensure_and_observe_channel_async (req,
- EMPATHY_CHAT_BUS_NAME, NULL, chat_command_msg_cb, data);
-
- g_object_unref (req);
- g_hash_table_unref (request);
-}
-
-static void
-chat_command_query (EmpathyChat *chat,
- GStrv strv)
-{
- /* If <message> part is not defined,
- * strv[2] will be the terminal NULL */
- chat_command_msg_internal (chat, strv[1], strv[2]);
-}
-
-static void
-chat_command_msg (EmpathyChat *chat,
- GStrv strv)
-{
- chat_command_msg_internal (chat, strv[1], strv[2]);
-}
-
-static void
-callback_for_request_rename (TpProxy *proxy,
- const GError *error,
- gpointer user_data,
- GObject *weak_object)
-{
- if (error != NULL) {
- DEBUG ("Call to RequestRename method failed: %s",error->message);
- }
-}
-
-static void
-chat_command_nick (EmpathyChat *chat,
- GStrv strv)
-{
- EmpathyChatPriv *priv = GET_PRIV (chat);
- TpProxy *proxy;
-
- proxy = TP_PROXY (tp_account_get_connection (priv->account));
-
- emp_cli_connection_interface_renaming_call_request_rename (proxy, -1,
- strv[1], callback_for_request_rename, NULL, NULL, NULL);
-}
-
-static void
-chat_command_me (EmpathyChat *chat,
- GStrv strv)
-{
- EmpathyChatPriv *priv = GET_PRIV (chat);
- TpMessage *message;
- TpTextChannel *channel;
-
- channel = (TpTextChannel *) (priv->tp_chat);
-
- if (!tp_text_channel_supports_message_type (channel,
- TP_CHANNEL_TEXT_MESSAGE_TYPE_ACTION)) {
- /* Action message are not supported, 'simulate' the action */
- gchar *tmp;
-
- /* The TpChat can't be ready if it doesn't have the self contact */
- g_assert (priv->self_contact != NULL);
-
- tmp = g_strdup_printf ("%s %s", empathy_contact_get_alias (priv->self_contact),
- strv[1]);
- message = tp_client_message_new_text (TP_CHANNEL_TEXT_MESSAGE_TYPE_NORMAL,
- tmp);
- g_free (tmp);
- }
- else {
- message = tp_client_message_new_text (TP_CHANNEL_TEXT_MESSAGE_TYPE_ACTION,
- strv[1]);
- }
-
- empathy_tp_chat_send (priv->tp_chat, message);
- g_object_unref (message);
-}
-
-static void
-chat_command_say (EmpathyChat *chat,
- GStrv strv)
-{
- EmpathyChatPriv *priv = GET_PRIV (chat);
- TpMessage *message;
-
- message = tp_client_message_new_text (TP_CHANNEL_TEXT_MESSAGE_TYPE_NORMAL,
- strv[1]);
- empathy_tp_chat_send (priv->tp_chat, message);
- g_object_unref (message);
-}
-
-static void
-whois_got_contact_cb (GObject *source,
- GAsyncResult *result,
- gpointer user_data)
-{
- EmpathyChat *chat = user_data;
- EmpathyContact *contact;
- FolksIndividual *individual;
-
- contact = empathy_client_factory_dup_contact_by_id_finish (
- EMPATHY_CLIENT_FACTORY (source), result, NULL);
-
- if (contact == NULL) {
- empathy_theme_adium_append_event (chat->view, _("Invalid contact ID"));
- goto out;
- }
-
- individual = empathy_ensure_individual_from_tp_contact (
- empathy_contact_get_tp_contact (contact));
- empathy_display_individual_info (individual);
-
- g_object_unref (individual);
- g_object_unref (contact);
-
-out:
- g_object_unref (chat);
-}
-
-static void
-chat_command_whois (EmpathyChat *chat,
- GStrv strv)
-{
- EmpathyChatPriv *priv = GET_PRIV (chat);
- TpConnection *conn;
- EmpathyClientFactory *factory;
-
- conn = tp_channel_get_connection ((TpChannel *) priv->tp_chat);
- factory = empathy_client_factory_dup ();
-
- /* Element 0 of 'strv' is "whois"; element 1 is the contact ID
- * entered by the user (including spaces, if any). */
- empathy_client_factory_dup_contact_by_id_async (factory, conn, strv[1],
- whois_got_contact_cb, g_object_ref (chat));
-
- g_object_unref (factory);
-}
-
-static void
-chat_command_whale (EmpathyChat *chat,
- GStrv strv)
-{
- EmpathyChatPriv *priv = GET_PRIV (chat);
- TpMessage *message;
-
- message = tp_client_message_new_text (TP_CHANNEL_TEXT_MESSAGE_TYPE_NORMAL,
- "\n\n\n"
- "•_______________•");
- empathy_tp_chat_send (priv->tp_chat, message);
- g_object_unref (message);
-}
-
-static void
-chat_command_babywhale (EmpathyChat *chat,
- GStrv strv)
-{
- EmpathyChatPriv *priv = GET_PRIV (chat);
- TpMessage *message;
-
- message = tp_client_message_new_text (TP_CHANNEL_TEXT_MESSAGE_TYPE_NORMAL,
- "\n"
- "•_____•");
- empathy_tp_chat_send (priv->tp_chat, message);
- g_object_unref (message);
-}
-
-static void
-chat_command_inspector (EmpathyChat *chat,
- GStrv strv)
-{
- if (EMPATHY_IS_THEME_ADIUM (chat->view)) {
- empathy_theme_adium_show_inspector (
- EMPATHY_THEME_ADIUM (chat->view));
- }
-}
-
-static void chat_command_help (EmpathyChat *chat, GStrv strv);
-
-typedef void (*ChatCommandFunc) (EmpathyChat *chat, GStrv strv);
-
-typedef struct {
- const gchar *prefix;
- guint min_parts;
- guint max_parts;
- ChatCommandFunc func;
- gboolean (*is_supported)(EmpathyChat *chat);
- const gchar *help;
-} ChatCommandItem;
-
-static ChatCommandItem commands[] = {
- {"clear", 1, 1, chat_command_clear, NULL,
- N_("/clear: clear all messages from the current conversation")},
-
- {"topic", 2, 2, chat_command_topic, NULL,
- N_("/topic <topic>: set the topic of the current conversation")},
-
- {"join", 2, 2, chat_command_join, NULL,
- N_("/join <chat room ID>: join a new chat room")},
-
- {"j", 2, 2, chat_command_join, NULL,
- N_("/j <chat room ID>: join a new chat room")},
-
- /* FIXME: https://bugzilla.gnome.org/show_bug.cgi?id=643295 */
- {"part", 1, 3, chat_command_part, part_command_supported,
- N_("/part [<chat room ID>] [<reason>]: leave the chat room, "
- "by default the current one")},
-
- {"query", 2, 3, chat_command_query, NULL,
- N_("/query <contact ID> [<message>]: open a private chat")},
-
- {"msg", 3, 3, chat_command_msg, NULL,
- N_("/msg <contact ID> <message>: open a private chat")},
-
- {"nick", 2, 2, chat_command_nick, nick_command_supported,
- N_("/nick <nickname>: change your nickname on the current server")},
-
- {"me", 2, 2, chat_command_me, NULL,
- N_("/me <message>: send an ACTION message to the current conversation")},
-
- {"say", 2, 2, chat_command_say, NULL,
- N_("/say <message>: send <message> to the current conversation. "
- "This is used to send a message starting with a '/'. For example: "
- "\"/say /join is used to join a new chat room\"")},
-
- {"whois", 2, 2, chat_command_whois, NULL,
- N_("/whois <contact ID>: display information about a contact")},
-
- {"help", 1, 2, chat_command_help, NULL,
- N_("/help [<command>]: show all supported commands. "
- "If <command> is defined, show its usage.")},
-
- {"inspector", 1, 1, chat_command_inspector, NULL, NULL},
-
- {"whale", 1, 1, chat_command_whale, NULL, NULL},
- {"babywhale", 1, 1, chat_command_babywhale, NULL, NULL},
-};
-
-static void
-chat_command_show_help (EmpathyChat *chat,
- ChatCommandItem *item)
-{
- gchar *str;
-
- if (item->help == NULL) {
- return;
- }
-
- str = g_strdup_printf (_("Usage: %s"), _(item->help));
- empathy_theme_adium_append_event (chat->view, str);
- g_free (str);
-}
-
-static void
-chat_command_help (EmpathyChat *chat,
- GStrv strv)
-{
- guint i;
-
- /* If <command> part is not defined,
- * strv[1] will be the terminal NULL */
- if (strv[1] == NULL) {
- for (i = 0; i < G_N_ELEMENTS (commands); i++) {
- if (commands[i].is_supported != NULL) {
- if (!commands[i].is_supported (chat)) {
- continue;
- }
- }
- if (commands[i].help == NULL) {
- continue;
- }
- empathy_theme_adium_append_event (chat->view,
- _(commands[i].help));
- }
- return;
- }
-
- for (i = 0; i < G_N_ELEMENTS (commands); i++) {
- if (g_ascii_strcasecmp (strv[1], commands[i].prefix) == 0) {
- if (commands[i].is_supported != NULL) {
- if (!commands[i].is_supported (chat)) {
- break;
- }
- }
- if (commands[i].help == NULL) {
- break;
- }
- chat_command_show_help (chat, &commands[i]);
- return;
- }
- }
-
- empathy_theme_adium_append_event (chat->view,
- _("Unknown command"));
-}
-
-static GStrv
-chat_command_parse (const gchar *text, guint max_parts)
-{
- GPtrArray *array;
- gchar *item;
-
- DEBUG ("Parse command, parts=%d text=\"%s\":", max_parts, text);
-
- array = g_ptr_array_sized_new (max_parts + 1);
- while (max_parts > 1) {
- const gchar *end;
-
- /* Skip white spaces */
- while (g_ascii_isspace (*text)) {
- text++;
- }
-
- /* Search the end of this part, until first space. */
- for (end = text; *end != '\0' && !g_ascii_isspace (*end); end++)
- /* Do nothing */;
- if (*end == '\0') {
- break;
- }
-
- item = g_strndup (text, end - text);
- g_ptr_array_add (array, item);
- DEBUG ("\tITEM: \"%s\"", item);
-
- text = end;
- max_parts--;
- }
-
- /* Append last part if not empty */
- item = g_strstrip (g_strdup (text));
- if (!TPAW_STR_EMPTY (item)) {
- g_ptr_array_add (array, item);
- DEBUG ("\tITEM: \"%s\"", item);
- } else {
- g_free (item);
- }
-
- /* Make the array NULL-terminated */
- g_ptr_array_add (array, NULL);
-
- return (GStrv) g_ptr_array_free (array, FALSE);
-}
-
-static gboolean
-has_prefix_case (const gchar *s,
- const gchar *prefix)
-{
- return g_ascii_strncasecmp (s, prefix, strlen (prefix)) == 0;
-}
-
-static void
-chat_send (EmpathyChat *chat,
- const gchar *msg)
-{
- EmpathyChatPriv *priv;
- TpMessage *message;
- guint i;
-
- if (TPAW_STR_EMPTY (msg)) {
- return;
- }
-
- priv = GET_PRIV (chat);
-
- chat_input_history_add (chat, msg, FALSE);
-
- if (msg[0] == '/') {
- gboolean second_slash = FALSE;
- const gchar *iter = msg + 1;
-
- for (i = 0; i < G_N_ELEMENTS (commands); i++) {
- GStrv strv;
- guint strv_len;
- gchar c;
-
- if (!has_prefix_case (msg + 1, commands[i].prefix)) {
- continue;
- }
- c = *(msg + 1 + strlen (commands[i].prefix));
- if (c != '\0' && !g_ascii_isspace (c)) {
- continue;
- }
- if (commands[i].is_supported != NULL) {
- if (!commands[i].is_supported (chat)) {
- continue;
- }
- }
-
- /* We can't use g_strsplit here because it does
- * not deal correctly if we have more than one space
- * between args */
- strv = chat_command_parse (msg + 1, commands[i].max_parts);
-
- strv_len = g_strv_length (strv);
- if (strv_len < commands[i].min_parts ||
- strv_len > commands[i].max_parts) {
- chat_command_show_help (chat, &commands[i]);
- g_strfreev (strv);
- return;
- }
-
- commands[i].func (chat, strv);
- g_strfreev (strv);
- return;
- }
-
- /* Also allow messages with two slashes before the
- * first space, so it is possible to send a /unix/path.
- * This heuristic is kind of crap. */
- while (*iter != '\0' && !g_ascii_isspace (*iter)) {
- if (*iter == '/') {
- second_slash = TRUE;
- break;
- }
- iter++;
- }
-
- if (!second_slash) {
- empathy_theme_adium_append_event (chat->view,
- _("Unknown command; see /help for the available"
- " commands"));
- return;
- }
- }
-
- message = tp_client_message_new_text (TP_CHANNEL_TEXT_MESSAGE_TYPE_NORMAL,
- msg);
- empathy_tp_chat_send (priv->tp_chat, message);
- g_object_unref (message);
-}
-
-static void
-chat_input_text_view_send (EmpathyChat *chat)
-{
- GtkTextBuffer *buffer;
- GtkTextIter start, end;
- gchar *msg;
-
- 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);
- /* delete input history modifications */
- chat_input_history_revert (chat);
-
- chat_send (chat, msg);
- g_free (msg);
-}
-
-static void
-chat_state_changed_cb (EmpathyTpChat *tp_chat,
- TpContact *tp_contact,
- TpChannelChatState state,
- EmpathyChat *chat)
-{
- EmpathyChatPriv *priv;
- GList *l;
- gboolean was_composing;
- EmpathyContact *contact;
-
- priv = GET_PRIV (chat);
-
- contact = empathy_contact_dup_from_tp_contact (tp_contact);
-
- if (empathy_contact_is_user (contact)) {
- /* We don't care about our own chat state */
- goto out;
- }
-
- 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);
- }
-
-out:
- g_object_unref (contact);
-}
-
-static GRegex *
-get_highlight_regex_for (const gchar *name)
-{
- GRegex *regex;
- gchar *name_esc, *pattern;
- GError *error = NULL;
-
- name_esc = g_regex_escape_string (name, -1);
- pattern = g_strdup_printf ("\\b%s\\b", name_esc);
- regex = g_regex_new (pattern, G_REGEX_CASELESS | G_REGEX_OPTIMIZE, 0,
- &error);
-
- if (regex == NULL) {
- DEBUG ("couldn't compile regex /%s/: %s", pattern,
- error->message);
-
- g_error_free (error);
- }
-
- g_free (pattern);
- g_free (name_esc);
-
- return regex;
-}
-
-/* Called when priv->self_contact changes, or priv->self_contact:alias changes.
- * Only connected if empathy_chat_is_room() is TRUE, for obvious-ish reasons.
- */
-static void
-chat_self_contact_alias_changed_cb (EmpathyChat *chat)
-{
- EmpathyChatPriv *priv = GET_PRIV (chat);
-
- tp_clear_pointer (&priv->highlight_regex, g_regex_unref);
-
- if (priv->self_contact != NULL) {
- const gchar *alias = empathy_contact_get_alias (priv->self_contact);
-
- g_return_if_fail (alias != NULL);
- priv->highlight_regex = get_highlight_regex_for (alias);
- }
-}
-
-static gboolean
-chat_should_highlight (EmpathyChat *chat,
- EmpathyMessage *message)
-{
- EmpathyChatPriv *priv = GET_PRIV (chat);
- const gchar *msg;
- TpChannelTextMessageFlags flags;
-
- g_return_val_if_fail (EMPATHY_IS_MESSAGE (message), FALSE);
-
- if (!empathy_chat_is_room (chat)) {
- return FALSE;
- }
-
- if (!empathy_message_is_incoming (message)) {
- return FALSE;
- }
-
- msg = empathy_message_get_body (message);
- if (!msg) {
- return FALSE;
- }
-
- flags = empathy_message_get_flags (message);
- if (flags & TP_CHANNEL_TEXT_MESSAGE_FLAG_SCROLLBACK) {
- /* FIXME: Ideally we shouldn't highlight scrollback messages only if they
- * have already been received by the user before (and so are in the logs) */
- return FALSE;
- }
-
- if (priv->highlight_regex == NULL) {
- return FALSE;
- }
-
- return g_regex_match (priv->highlight_regex, msg, 0, NULL);
-}
-
-static void
-chat_message_received (EmpathyChat *chat,
- EmpathyMessage *message,
- gboolean pending)
-{
- EmpathyChatPriv *priv = GET_PRIV (chat);
- EmpathyContact *sender;
-
- sender = empathy_message_get_sender (message);
-
- if (empathy_message_is_edit (message)) {
- DEBUG ("Editing message '%s' to '%s'",
- empathy_message_get_supersedes (message),
- empathy_message_get_body (message));
-
- empathy_theme_adium_edit_message (chat->view, message);
- } else {
- gboolean should_highlight = chat_should_highlight (chat, message);
-
- if (should_highlight) {
- priv->highlighted = TRUE;
- }
-
- DEBUG ("Appending new message '%s' from %s (%d)",
- empathy_message_get_token (message),
- empathy_contact_get_alias (sender),
- empathy_contact_get_handle (sender));
-
- empathy_theme_adium_append_message (chat->view, message, should_highlight);
-
- if (empathy_message_is_incoming (message)) {
- priv->unread_messages++;
- g_object_notify (G_OBJECT (chat), "nb-unread-messages");
- }
-
- g_signal_emit (chat, signals[NEW_MESSAGE], 0, message, pending,
- should_highlight);
- }
-
- /* We received a message so the contact is no longer
- * composing */
- chat_state_changed_cb (priv->tp_chat, empathy_contact_get_tp_contact (sender),
- TP_CHANNEL_CHAT_STATE_ACTIVE,
- chat);
-}
-
-static void
-chat_message_received_cb (EmpathyTpChat *tp_chat,
- EmpathyMessage *message,
- EmpathyChat *chat)
-{
- chat_message_received (chat, message, FALSE);
-}
-
-static void
-chat_message_acknowledged_cb (EmpathyTpChat *tp_chat,
- EmpathyMessage *message,
- EmpathyChat *chat)
-{
- EmpathyChatPriv *priv = GET_PRIV (chat);
-
- empathy_theme_adium_message_acknowledged (chat->view,
- message);
-
- if (!empathy_message_is_edit (message)) {
- priv->unread_messages--;
- g_object_notify (G_OBJECT (chat), "nb-unread-messages");
- }
-}
-
-static void
-append_balance_error (EmpathyChat *chat,
- const gchar *message_body)
-{
- EmpathyChatPriv *priv = GET_PRIV (chat);
- TpConnection *conn = tp_channel_get_connection (TP_CHANNEL (priv->tp_chat));
- const gchar *uri = tp_connection_get_balance_uri (conn);
- const gchar *error = _("insufficient balance to send message");
- gchar *str, *str_markup = NULL;
-
- if (message_body != NULL) {
- str = g_strdup_printf (_("Error sending message '%s': %s"), message_body, error);
- } else {
- str = g_strdup_printf (_("Error sending message: %s"), error);
- }
-
- if (!tp_str_empty (uri)) {
- /* translators: error used when user doesn't have enough credit on his
- * account to send the message. */
- gchar *markup_error = g_strdup_printf (_("insufficient balance to send message."
- " <a href='%s'>Top up</a>."), uri);
-
- if (message_body != NULL) {
- gchar *escaped_body = g_markup_escape_text (message_body, -1);
-
- str_markup = g_strdup_printf (_("Error sending message '%s': %s"),
- escaped_body, markup_error);
-
- g_free (escaped_body);
- } else {
- str_markup = g_strdup_printf (_("Error sending message: %s"), markup_error);
- }
-
- g_free (markup_error);
- }
-
- if (str_markup != NULL)
- empathy_theme_adium_append_event_markup (chat->view, str_markup, str);
- else
- empathy_theme_adium_append_event (chat->view, str);
-
- g_free (str);
- g_free (str_markup);
-}
-
-static void
-chat_send_error_cb (EmpathyTpChat *tp_chat,
- const gchar *message_body,
- TpChannelTextSendError error_code,
- const gchar *dbus_error,
- EmpathyChat *chat)
-{
- const gchar *error = NULL;
- gchar *str;
-
- if (!tp_strdiff (dbus_error, TP_ERROR_STR_INSUFFICIENT_BALANCE)) {
- append_balance_error (chat, message_body);
- return;
- } else if (!tp_strdiff (dbus_error, TP_ERROR_STR_NOT_CAPABLE)) {
- error = _("not capable");
- }
-
- if (error == NULL) {
- /* if we didn't find a dbus-error, try the old error */
- switch (error_code) {
- case TP_CHANNEL_TEXT_SEND_ERROR_OFFLINE:
- error = _("offline");
- break;
- case TP_CHANNEL_TEXT_SEND_ERROR_INVALID_CONTACT:
- error = _("invalid contact");
- break;
- case TP_CHANNEL_TEXT_SEND_ERROR_PERMISSION_DENIED:
- error = _("permission denied");
- break;
- case TP_CHANNEL_TEXT_SEND_ERROR_TOO_LONG:
- error = _("too long message");
- break;
- case TP_CHANNEL_TEXT_SEND_ERROR_NOT_IMPLEMENTED:
- error = _("not implemented");
- break;
- case TP_CHANNEL_TEXT_SEND_ERROR_UNKNOWN:
- default:
- error = _("unknown");
- break;
- }
- }
-
- if (message_body != NULL) {
- str = g_strdup_printf (_("Error sending message '%s': %s"),
- message_body, error);
- }
- else {
- str = g_strdup_printf (_("Error sending message: %s"), error);
- }
-
- empathy_theme_adium_append_event (chat->view, str);
- g_free (str);
-}
-
-static void
-chat_topic_label_size_allocate_cb (GtkLabel *label,
- GtkAllocation *allocation,
- EmpathyChat *chat)
-{
- EmpathyChatPriv *priv = GET_PRIV (chat);
-
- if (!gtk_label_get_line_wrap (label)) {
- if (pango_layout_is_ellipsized (gtk_label_get_layout (label)))
- gtk_widget_show (priv->expander_topic);
- else
- gtk_widget_hide (priv->expander_topic);
-
- return;
- }
-}
-
-static void
-chat_topic_expander_activate_cb (GtkExpander *expander,
- GParamSpec *param_spec,
- EmpathyChat *chat)
-{
- EmpathyChatPriv *priv = GET_PRIV (chat);
-
- if (gtk_expander_get_expanded (expander)) {
- gtk_label_set_ellipsize (GTK_LABEL (priv->label_topic), PANGO_ELLIPSIZE_NONE);
- gtk_label_set_line_wrap (GTK_LABEL (priv->label_topic), TRUE);
- } else {
- gtk_label_set_ellipsize (GTK_LABEL (priv->label_topic), PANGO_ELLIPSIZE_END);
- gtk_label_set_line_wrap (GTK_LABEL (priv->label_topic), FALSE);
- }
-}
-
-static void
-chat_subject_changed_cb (EmpathyChat *chat)
-{
- EmpathyChatPriv *priv = GET_PRIV (chat);
-
- g_free (priv->subject);
- priv->subject = g_strdup (empathy_tp_chat_get_subject (priv->tp_chat));
- g_object_notify (G_OBJECT (chat), "subject");
-
- if (TPAW_STR_EMPTY (priv->subject)) {
- gtk_widget_hide (priv->hbox_topic);
- } else {
- gchar *markup_topic;
- gchar *markup_text;
-
- markup_topic = tpaw_add_link_markup (priv->subject);
- markup_text = g_strdup_printf ("<span weight=\"bold\">%s</span> %s",
- _("Topic:"), markup_topic);
-
- gtk_label_set_markup (GTK_LABEL (priv->label_topic), markup_text);
- g_free (markup_text);
- g_free (markup_topic);
-
- gtk_widget_show (priv->hbox_topic);
- }
- if (priv->block_events_timeout_id == 0) {
- gchar *str = NULL;
-
- if (!TPAW_STR_EMPTY (priv->subject)) {
- const gchar *actor = empathy_tp_chat_get_subject_actor (priv->tp_chat);
-
- if (tp_str_empty (actor)) {
- str = g_strdup_printf (_("Topic set to: %s"), priv->subject);
- } else {
- str = g_strdup_printf (_("Topic set by %s to: %s"),
- actor, priv->subject);
- }
- } else if (empathy_tp_chat_supports_subject (priv->tp_chat)) {
- /* No need to display this 'event' is no topic can be defined anyway */
- str = g_strdup (_("No topic defined"));
- }
-
- if (str != NULL) {
- empathy_theme_adium_append_event (EMPATHY_CHAT (chat)->view, str);
- g_free (str);
- }
- }
-}
-
-static void
-chat_title_changed_cb (EmpathyChat *chat)
-{
- EmpathyChatPriv *priv = GET_PRIV (chat);
-
- g_free (priv->name);
- priv->name = g_strdup (empathy_tp_chat_get_title (priv->tp_chat));
- g_object_notify (G_OBJECT (chat), "name");
-}
-
-static gboolean
-chat_input_text_get_word_from_iter (GtkTextIter *iter,
- GtkTextIter *start,
- GtkTextIter *end)
-{
- GtkTextIter word_start = *iter;
- GtkTextIter word_end = *iter;
- GtkTextIter tmp;
-
- if (gtk_text_iter_inside_word (&word_end) &&
- !gtk_text_iter_ends_word (&word_end)) {
- gtk_text_iter_forward_word_end (&word_end);
- }
-
- tmp = word_end;
-
- if (gtk_text_iter_get_char (&tmp) == '\'') {
- gtk_text_iter_forward_char (&tmp);
-
- if (g_unichar_isalpha (gtk_text_iter_get_char (&tmp))) {
- gtk_text_iter_forward_word_end (&word_end);
- }
- }
-
-
- if (gtk_text_iter_inside_word (&word_start) ||
- gtk_text_iter_ends_word (&word_start)) {
- if (!gtk_text_iter_starts_word (&word_start) ||
- gtk_text_iter_equal (&word_start, &word_end)) {
- gtk_text_iter_backward_word_start (&word_start);
- }
-
- tmp = word_start;
- gtk_text_iter_backward_char (&tmp);
-
- if (gtk_text_iter_get_char (&tmp) == '\'') {
- gtk_text_iter_backward_char (&tmp);
-
- if (g_unichar_isalpha (gtk_text_iter_get_char (&tmp))) {
- gtk_text_iter_backward_word_start (&word_start);
- }
- }
- }
-
- *start = word_start;
- *end = word_end;
- return TRUE;
-}
-
-static void
-chat_input_text_buffer_insert_text_cb (GtkTextBuffer *buffer,
- GtkTextIter *location,
- gchar *text,
- gint len,
- EmpathyChat *chat)
-{
- GtkTextIter iter, pos;
-
- /* Remove all misspelled tags in the inserted text.
- * This happens when text is inserted within a misspelled word. */
- gtk_text_buffer_get_iter_at_offset (buffer, &iter,
- gtk_text_iter_get_offset (location) - len);
- gtk_text_buffer_remove_tag_by_name (buffer, "misspelled",
- &iter, location);
-
- gtk_text_buffer_get_iter_at_mark (buffer, &pos, gtk_text_buffer_get_insert (buffer));
-
- do {
- GtkTextIter start, end;
- gchar *str;
-
- if (!chat_input_text_get_word_from_iter (&iter, &start, &end))
- continue;
-
- str = gtk_text_buffer_get_text (buffer, &start, &end, FALSE);
-
- if (gtk_text_iter_in_range (&pos, &start, &end) ||
- gtk_text_iter_equal (&pos, &end) ||
- empathy_spell_check (str)) {
- gtk_text_buffer_remove_tag_by_name (buffer, "misspelled", &start, &end);
- } else {
- gtk_text_buffer_apply_tag_by_name (buffer, "misspelled", &start, &end);
- }
-
- g_free (str);
-
- } while (gtk_text_iter_forward_word_end (&iter) &&
- gtk_text_iter_compare (&iter, location) <= 0);
-}
-
-static void
-chat_input_text_buffer_delete_range_cb (GtkTextBuffer *buffer,
- GtkTextIter *start,
- GtkTextIter *end,
- EmpathyChat *chat)
-{
- GtkTextIter word_start, word_end;
-
- if (chat_input_text_get_word_from_iter (start, &word_start, &word_end)) {
- gtk_text_buffer_remove_tag_by_name (buffer, "misspelled",
- &word_start, &word_end);
- }
-}
-
-static void
-chat_input_text_buffer_changed_cb (GtkTextBuffer *buffer,
- EmpathyChat *chat)
-{
- if (gtk_text_buffer_get_char_count (buffer) == 0) {
- chat_composing_stop (chat);
- } else {
- chat_composing_start (chat);
- }
-}
-
-static void
-chat_input_text_buffer_notify_cursor_position_cb (GtkTextBuffer *buffer,
- GParamSpec *pspec,
- EmpathyChat *chat)
-{
- GtkTextIter pos;
- GtkTextIter prev_pos;
- GtkTextIter word_start;
- GtkTextIter word_end;
- GtkTextMark *mark;
- gchar *str;
-
- mark = gtk_text_buffer_get_mark (buffer, "previous-cursor-position");
-
- gtk_text_buffer_get_iter_at_mark (buffer, &pos,
- gtk_text_buffer_get_insert (buffer));
- gtk_text_buffer_get_iter_at_mark (buffer, &prev_pos, mark);
-
- if (!chat_input_text_get_word_from_iter (&prev_pos, &word_start, &word_end))
- goto out;
-
- if (!gtk_text_iter_in_range (&pos, &word_start, &word_end) &&
- !gtk_text_iter_equal (&pos, &word_end)) {
- str = gtk_text_buffer_get_text (buffer,
- &word_start, &word_end, FALSE);
-
- if (!empathy_spell_check (str)) {
- gtk_text_buffer_apply_tag_by_name (buffer,
- "misspelled", &word_start, &word_end);
- } else {
- gtk_text_buffer_remove_tag_by_name (buffer,
- "misspelled", &word_start, &word_end);
- }
-
- g_free (str);
- }
-
-out:
- gtk_text_buffer_move_mark (buffer, mark, &pos);
-}
-
-static gboolean
-empathy_isspace_cb (gunichar c,
- gpointer data)
-{
- return g_unichar_isspace (c);
-}
-
-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);
-
- priv->most_recent_event_type = event->type;
-
- /* Catch ctrl+up/down so we can traverse messages we sent */
- if ((event->state & GDK_CONTROL_MASK) &&
- (event->keyval == GDK_KEY_Up ||
- event->keyval == GDK_KEY_Down)) {
- GtkTextBuffer *buffer;
- const gchar *str;
-
- buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (chat->input_text_view));
- chat_input_history_update (chat, buffer);
-
- if (event->keyval == GDK_KEY_Up) {
- str = chat_input_history_get_next (chat);
- } else {
- str = chat_input_history_get_prev (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_text_view_im_context_filter_keypress (view, event)) {
- gtk_text_view_reset_im_context (view);
- 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_KEY_Page_Up) {
- adj = gtk_scrolled_window_get_vadjustment (GTK_SCROLLED_WINDOW (text_view_sw));
- gtk_adjustment_set_value (adj, gtk_adjustment_get_value (adj) - gtk_adjustment_get_page_size (adj));
- return TRUE;
- }
- if ((event->state & GDK_CONTROL_MASK) != GDK_CONTROL_MASK &&
- event->keyval == GDK_KEY_Page_Down) {
- adj = gtk_scrolled_window_get_vadjustment (GTK_SCROLLED_WINDOW (text_view_sw));
- val = MIN (gtk_adjustment_get_value (adj) + gtk_adjustment_get_page_size (adj),
- gtk_adjustment_get_upper (adj) - gtk_adjustment_get_page_size (adj));
- gtk_adjustment_set_value (adj, val);
- return TRUE;
- }
- if (event->keyval == GDK_KEY_Escape) {
- empathy_search_bar_hide (EMPATHY_SEARCH_BAR (priv->search_bar));
- }
- if (!(event->state & (GDK_CONTROL_MASK | GDK_SHIFT_MASK)) &&
- event->keyval == GDK_KEY_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));
- if (gtk_text_iter_backward_find_char (&start, &empathy_isspace_cb, NULL, NULL)) {
- gtk_text_iter_set_offset (&start, gtk_text_iter_get_offset (&start) + 1);
- }
- is_start_of_buffer = gtk_text_iter_is_start (&start);
-
- list = empathy_tp_chat_get_members (priv->tp_chat);
- g_completion_add_items (priv->completion, list);
-
- nick = gtk_text_buffer_get_text (buffer, &start, &current, FALSE);
- completed_list = g_completion_complete (priv->completion,
- nick,
- &completed);
-
- g_free (nick);
-
- if (completed) {
- guint len;
- const gchar *text;
- GString *message = NULL;
- GList *l;
-
- 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_alias (completed_list->data);
- } else {
- text = completed;
-
- /* Print all hits to the scrollback view, so the
- * user knows what possibilities he has.
- * Fixes #599779
- * */
- message = g_string_new ("");
- for (l = completed_list; l != NULL; l = l->next) {
- g_string_append (message, empathy_contact_get_alias (l->data));
- g_string_append (message, " - ");
- }
- empathy_theme_adium_append_event (chat->view, message->str);
- g_string_free (message, TRUE);
- }
-
- gtk_text_buffer_insert_at_cursor (buffer, text, strlen (text));
-
- if (len == 1 && is_start_of_buffer) {
- gchar *complete_char;
-
- complete_char = g_settings_get_string (
- priv->gsettings_chat,
- EMPATHY_PREFS_CHAT_NICK_COMPLETION_CHAR);
-
- if (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 void
-chat_input_realize_cb (GtkWidget *widget,
- EmpathyChat *chat)
-{
- DEBUG ("Setting focus to the input text view");
- if (gtk_widget_is_sensitive (widget)) {
- gtk_widget_grab_focus (widget);
- }
-}
-
-static void
-chat_input_has_focus_notify_cb (GtkWidget *widget,
- GParamSpec *pspec,
- EmpathyChat *chat)
-{
- empathy_theme_adium_focus_toggled (chat->view, gtk_widget_has_focus (widget));
-}
-
-static void
-chat_insert_smiley_activate_cb (EmpathySmileyManager *manager,
- EmpathySmiley *smiley,
- gpointer user_data)
-{
- EmpathyChat *chat = EMPATHY_CHAT (user_data);
- GtkTextBuffer *buffer;
- GtkTextIter iter;
-
- 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->str, -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_spelling_menu_activate_cb (GtkMenuItem *menu_item,
- EmpathyChatSpell *chat_spell)
-{
- empathy_chat_correct_word (chat_spell->chat,
- &(chat_spell->start),
- &(chat_spell->end),
- gtk_menu_item_get_label (menu_item));
-}
-
-
-static GtkWidget *
-chat_spelling_build_suggestions_menu (const gchar *code,
- EmpathyChatSpell *chat_spell)
-{
- GList *suggestions, *l;
- GtkWidget *menu, *menu_item;
-
- suggestions = empathy_spell_get_suggestions (code, chat_spell->word);
- if (suggestions == NULL)
- return NULL;
-
- menu = gtk_menu_new ();
- for (l = suggestions; l; l = l->next) {
- menu_item = gtk_menu_item_new_with_label (l->data);
- g_signal_connect (G_OBJECT (menu_item), "activate",
- G_CALLBACK (chat_spelling_menu_activate_cb),
- chat_spell);
- gtk_menu_shell_append (GTK_MENU_SHELL (menu), menu_item);
- }
- empathy_spell_free_suggestions (suggestions);
-
- gtk_widget_show_all (menu);
-
- return menu;
-}
-
-static GtkWidget *
-chat_spelling_build_menu (EmpathyChatSpell *chat_spell)
-{
- GtkWidget *menu, *submenu, *item;
- GList *codes, *l;
-
- codes = empathy_spell_get_enabled_language_codes ();
- g_assert (codes != NULL);
-
- if (g_list_length (codes) > 1) {
- menu = gtk_menu_new ();
-
- for (l = codes; l; l = l->next) {
- const gchar *code, *name;
-
- code = l->data;
- name = empathy_spell_get_language_name (code);
- if (!name)
- continue;
-
- item = gtk_image_menu_item_new_with_label (name);
-
- submenu = chat_spelling_build_suggestions_menu (
- code, chat_spell);
- if (submenu == NULL)
- gtk_widget_set_sensitive (item, FALSE);
- else
- gtk_menu_item_set_submenu (GTK_MENU_ITEM (item),
- submenu);
- gtk_menu_shell_prepend (GTK_MENU_SHELL (menu), item);
- }
- } else {
- menu = chat_spelling_build_suggestions_menu (codes->data,
- chat_spell);
- if (menu == NULL) {
- menu = gtk_menu_new ();
- item = gtk_menu_item_new_with_label (_("(No Suggestions)"));
- gtk_widget_set_sensitive (item, FALSE);
- gtk_menu_shell_append (GTK_MENU_SHELL (menu), item);
- }
- }
- g_list_free (codes);
-
- gtk_widget_show_all (menu);
-
- return menu;
-}
-
-typedef struct {
- EmpathyChat *chat;
- gchar *word;
- gchar *code;
-} EmpathyChatWord;
-
-static EmpathyChatWord *
-chat_word_new (EmpathyChat *chat,
- const gchar *word,
- const gchar *code)
-{
- EmpathyChatWord *chat_word;
-
- chat_word = g_slice_new0 (EmpathyChatWord);
-
- chat_word->chat = g_object_ref (chat);
- chat_word->word = g_strdup (word);
- chat_word->code = g_strdup (code);
-
- return chat_word;
-}
-
-static void
-chat_word_free (EmpathyChatWord *chat_word)
-{
- g_object_unref (chat_word->chat);
- g_free (chat_word->word);
- g_free (chat_word->code);
- g_slice_free (EmpathyChatWord, chat_word);
-}
-
-static void
-chat_add_to_dictionary_activate_cb (GtkMenuItem *menu_item,
- EmpathyChatWord *chat_word)
-{
- EmpathyChatPriv *priv = GET_PRIV (chat_word->chat);
-
- empathy_spell_add_to_dictionary (chat_word->code,
- chat_word->word);
- priv->update_misspelled_words_id =
- g_idle_add (update_misspelled_words, chat_word->chat);
-}
-
-static GtkWidget *
-chat_spelling_build_add_to_dictionary_item (EmpathyChatSpell *chat_spell)
-{
- GtkWidget *menu, *item, *lang_item, *image;
- GList *codes, *l;
- gchar *label;
- const gchar *code, *name;
- EmpathyChatWord *chat_word;
-
- codes = empathy_spell_get_enabled_language_codes ();
- g_assert (codes != NULL);
- if (g_list_length (codes) > 1) {
- /* translators: %s is the selected word */
- label = g_strdup_printf (_("Add '%s' to Dictionary"),
- chat_spell->word);
- item = gtk_image_menu_item_new_with_mnemonic (label);
- g_free (label);
- image = gtk_image_new_from_icon_name (GTK_STOCK_ADD,
- GTK_ICON_SIZE_MENU);
- gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (item),
- image);
-
- menu = gtk_menu_new ();
-
- for (l = codes; l; l = l->next) {
- code = l->data;
- name = empathy_spell_get_language_name (code);
- if (name == NULL)
- continue;
-
- lang_item = gtk_image_menu_item_new_with_label (name);
-
- chat_word= chat_word_new (chat_spell->chat,
- chat_spell->word, code);
- g_object_set_data_full (G_OBJECT (lang_item),
- "chat-word", chat_word,
- (GDestroyNotify) chat_word_free);
-
- g_signal_connect (G_OBJECT (lang_item), "activate",
- G_CALLBACK (chat_add_to_dictionary_activate_cb),
- chat_word);
- gtk_menu_shell_prepend (GTK_MENU_SHELL (menu), lang_item);
- }
- gtk_menu_item_set_submenu (GTK_MENU_ITEM (item), menu);
- } else {
- code = codes->data;
- name = empathy_spell_get_language_name (code);
- g_assert (name != NULL);
- /* translators: first %s is the selected word,
- * second %s is the language name of the target dictionary */
- label = g_strdup_printf (_("Add '%s' to %s Dictionary"),
- chat_spell->word, name);
- item = gtk_image_menu_item_new_with_mnemonic (label);
- g_free (label);
- image = gtk_image_new_from_icon_name (GTK_STOCK_ADD,
- GTK_ICON_SIZE_MENU);
- gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (item), image);
-
- chat_word = chat_word_new (chat_spell->chat, chat_spell->word,
- code);
- g_object_set_data_full (G_OBJECT (item), "chat-word", chat_word,
- (GDestroyNotify) chat_word_free);
-
- g_signal_connect (G_OBJECT (item), "activate",
- G_CALLBACK (chat_add_to_dictionary_activate_cb),
- chat_word);
- }
- g_list_free (codes);
-
- gtk_widget_show_all (item);
-
- return item;
-}
-
-static void
-chat_text_send_cb (GtkMenuItem *menuitem,
- EmpathyChat *chat)
-{
- chat_input_text_view_send (chat);
-}
-
-static gboolean
-chat_input_button_press_event_cb (GtkTextView *view,
- GdkEventButton *event,
- EmpathyChat *chat)
-{
- EmpathyChatPriv *priv = GET_PRIV (chat);
-
- priv->most_recent_event_type = event->type;
-
- return FALSE;
-}
-
-static void
-chat_input_populate_popup_cb (GtkTextView *view,
- GtkMenu *menu,
- EmpathyChat *chat)
-{
- EmpathyChatPriv *priv = GET_PRIV (chat);
- GtkTextBuffer *buffer;
- GtkTextTagTable *table;
- GtkTextTag *tag;
- gint x, y;
- GtkTextIter iter, start, end;
- GtkWidget *item;
- gchar *str = NULL;
- EmpathyChatSpell *chat_spell;
- GtkWidget *spell_menu;
- GtkWidget *spell_item;
- EmpathySmileyManager *smiley_manager;
- GtkWidget *smiley_menu;
- GtkWidget *image;
-
- buffer = gtk_text_view_get_buffer (view);
-
- /* 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_image_menu_item_new_with_mnemonic (_("Insert Smiley"));
- image = gtk_image_new_from_icon_name ("face-smile",
- GTK_ICON_SIZE_MENU);
- gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (item), image);
- gtk_menu_shell_prepend (GTK_MENU_SHELL (menu), item);
- gtk_widget_show (item);
-
- smiley_manager = empathy_smiley_manager_dup_singleton ();
- smiley_menu = empathy_smiley_menu_new (smiley_manager,
- chat_insert_smiley_activate_cb,
- chat);
- gtk_menu_item_set_submenu (GTK_MENU_ITEM (item), smiley_menu);
- g_object_unref (smiley_manager);
-
- /* Add the Send menu item. */
- gtk_text_buffer_get_bounds (buffer, &start, &end);
- str = gtk_text_buffer_get_text (buffer, &start, &end, FALSE);
- if (!TPAW_STR_EMPTY (str)) {
- item = gtk_menu_item_new_with_mnemonic (_("_Send"));
- g_signal_connect (G_OBJECT (item), "activate",
- G_CALLBACK (chat_text_send_cb), chat);
- gtk_menu_shell_prepend (GTK_MENU_SHELL (menu), item);
- gtk_widget_show (item);
- }
- str = NULL;
-
- /* Add the spell check menu item. */
- table = gtk_text_buffer_get_tag_table (buffer);
- tag = gtk_text_tag_table_lookup (table, "misspelled");
-
- switch (priv->most_recent_event_type) {
- case GDK_BUTTON_PRESS:
- /* get the location from the pointer */
- gdk_window_get_device_position (gtk_widget_get_window (GTK_WIDGET (view)),
- gdk_device_manager_get_client_pointer (gdk_display_get_device_manager (
- gtk_widget_get_display (GTK_WIDGET (view)))), &x, &y, NULL);
-
- 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);
- break;
-
- default:
- g_warn_if_reached ();
- /* assume the KEY_PRESS case */
-
- case GDK_KEY_PRESS:
- /* get the location from the cursor */
- gtk_text_buffer_get_iter_at_mark (buffer, &iter,
- gtk_text_buffer_get_insert (buffer));
- break;
-
- }
-
- 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 (!TPAW_STR_EMPTY (str)) {
- 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);
-
- /* Spelling suggestions */
- item = gtk_image_menu_item_new_with_mnemonic (_("_Spelling Suggestions"));
- image = gtk_image_new_from_icon_name (GTK_STOCK_SPELL_CHECK,
- GTK_ICON_SIZE_MENU);
- gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (item), image);
-
- spell_menu = chat_spelling_build_menu (chat_spell);
- gtk_menu_item_set_submenu (GTK_MENU_ITEM (item), spell_menu);
-
-
- spell_item = gtk_separator_menu_item_new ();
- gtk_menu_shell_append (GTK_MENU_SHELL (spell_menu), spell_item);
- gtk_widget_show (spell_item);
-
- /* Add to dictionary */
- spell_item = chat_spelling_build_add_to_dictionary_item (chat_spell);
-
- gtk_menu_shell_append (GTK_MENU_SHELL (spell_menu), spell_item);
- gtk_widget_show (spell_item);
-
- gtk_menu_shell_prepend (GTK_MENU_SHELL (menu), item);
- gtk_widget_show (item);
- }
-}
-
-
-static gboolean
-chat_log_filter (TplEvent *event,
- gpointer user_data)
-{
- EmpathyChat *chat = EMPATHY_CHAT (user_data);
- EmpathyChatPriv *priv = GET_PRIV (chat);
- EmpathyMessage *message;
- const GList *pending;
- bool retval = FALSE;
-
- g_return_val_if_fail (TPL_IS_EVENT (event), FALSE);
- g_return_val_if_fail (EMPATHY_IS_CHAT (chat), FALSE);
-
- pending = empathy_tp_chat_get_pending_messages (priv->tp_chat);
- message = empathy_message_from_tpl_log_event (event);
-
- for (; pending; pending = g_list_next (pending)) {
- if (empathy_message_equal (message, pending->data))
- goto out;
- }
-
- retval = TRUE;
-
-out:
- g_object_unref (message);
- return retval;
-}
-
-
-static void
-show_pending_messages (EmpathyChat *chat) {
- EmpathyChatPriv *priv = GET_PRIV (chat);
- const GList *messages, *l;
-
- g_return_if_fail (EMPATHY_IS_CHAT (chat));
-
- if (chat->view == NULL || priv->tp_chat == NULL)
- return;
-
- if (!priv->can_show_pending)
- return;
-
- messages = empathy_tp_chat_get_pending_messages (priv->tp_chat);
-
- for (l = messages; l != NULL ; l = g_list_next (l)) {
- EmpathyMessage *message = EMPATHY_MESSAGE (l->data);
- chat_message_received (chat, message, TRUE);
- }
-}
-
-
-static gboolean
-chat_scrollable_set_value (gpointer user_data)
-{
- EmpathyChat *chat = EMPATHY_CHAT (user_data);
- EmpathyChatPriv *priv = GET_PRIV (chat);
- GtkAdjustment *adjustment;
- guint upper;
-
- adjustment = gtk_scrollable_get_vadjustment (
- GTK_SCROLLABLE (chat->view));
-
- /* Set the chat->view's adjustment back to the value it had
- * before it grew as a result of new logs being inserted.
- */
- upper = (guint) gtk_adjustment_get_upper (adjustment);
- gtk_adjustment_set_value (adjustment, upper - priv->scroll_offset);
-
- return G_SOURCE_REMOVE;
-}
-
-static void
-got_filtered_messages_cb (GObject *walker,
- GAsyncResult *result,
- gpointer user_data)
-{
- GList *l;
- GList *messages;
- EmpathyChat *chat = EMPATHY_CHAT (user_data);
- EmpathyChatPriv *priv = GET_PRIV (chat);
- GError *error = NULL;
-
- if (!tpl_log_walker_get_events_finish (TPL_LOG_WALKER (walker),
- result, &messages, &error)) {
- DEBUG ("%s. Aborting.", error->message);
- empathy_theme_adium_append_event (chat->view,
- _("Failed to retrieve recent logs"));
- g_error_free (error);
- goto out;
- }
-
- for (l = g_list_last (messages); l; l = g_list_previous (l)) {
- EmpathyMessage *message;
-
- g_assert (TPL_IS_EVENT (l->data));
-
- message = empathy_message_from_tpl_log_event (l->data);
- g_object_unref (l->data);
-
- if (empathy_message_is_edit (message)) {
- /* this is an edited message, create a synthetic event
- * using the supersedes token and
- * original-message-sent timestamp, that we can then
- * replace */
- EmpathyMessage *syn_msg = g_object_new (
- EMPATHY_TYPE_MESSAGE,
- "body", "",
- "token", empathy_message_get_supersedes (message),
- "type", empathy_message_get_tptype (message),
- "timestamp", empathy_message_get_original_timestamp (message),
- "incoming", empathy_message_is_incoming (message),
- "is-backlog", TRUE,
- "receiver", empathy_message_get_receiver (message),
- "sender", empathy_message_get_sender (message),
- NULL);
-
- empathy_theme_adium_prepend_message (chat->view, syn_msg,
- chat_should_highlight (chat, syn_msg));
- empathy_theme_adium_edit_message (chat->view, message);
-
- g_object_unref (syn_msg);
- } else {
- /* append the latest message */
- empathy_theme_adium_prepend_message (chat->view, message,
- chat_should_highlight (chat, message));
- }
-
- g_object_unref (message);
- }
- g_list_free (messages);
-
-out:
- /* FIXME: See Bug#610994, we are forcing the ACK of the queue. See comments
- * about it in EmpathyChatPriv definition */
- priv->retrieving_backlogs = FALSE;
- empathy_chat_messages_read (chat);
-
- /* Turn back on scrolling */
- empathy_theme_adium_scroll (chat->view, TRUE);
-
- /* We start watching the scrolling movements only after the first
- * batch of logs have been fetched. Otherwise, if the
- * chat->view's page size is too small the scrollbar might hit
- * the upper edge and trigger another batch of logs to be
- * fetched.
- */
- if (G_UNLIKELY (!priv->watch_scroll &&
- !tpl_log_walker_is_end (priv->log_walker))) {
- /* The pending messages need not be shown after the
- * first batch of logs have been displayed */
- priv->can_show_pending = TRUE;
- show_pending_messages (chat);
-
- priv->watch_scroll = TRUE;
- g_idle_add_full (G_PRIORITY_LOW, chat_scrollable_connect,
- g_object_ref (chat), g_object_unref);
- }
- else {
- GtkAdjustment *adjustment;
- guint upper;
- guint value;
-
- /* The chat->view's adjustment won't change unless we
- * return to the main loop. Save the current offset
- * from the lower edge (or the upper value of the
- * adjustment) so that we can restore it later once the
- * adjustment grows.
- */
- adjustment = gtk_scrollable_get_vadjustment (
- GTK_SCROLLABLE (chat->view));
- upper = (guint) gtk_adjustment_get_upper (adjustment);
- value = (guint) gtk_adjustment_get_value (adjustment);
- priv->scroll_offset = upper - value;
-
- g_idle_add_full (G_PRIORITY_LOW, chat_scrollable_set_value,
- g_object_ref (chat), g_object_unref);
- }
-
- g_object_unref (chat);
-}
-
-static gboolean
-chat_add_logs (EmpathyChat *chat)
-{
- EmpathyChatPriv *priv = GET_PRIV (chat);
-
- if (!priv->id) {
- return G_SOURCE_REMOVE;
- }
-
- /* Turn off scrolling temporarily */
- empathy_theme_adium_scroll (chat->view, FALSE);
-
- tpl_log_walker_get_events_async (priv->log_walker, 5,
- got_filtered_messages_cb, g_object_ref (chat));
-
- return G_SOURCE_REMOVE;
-}
-
-static void
-chat_schedule_logs (EmpathyChat *chat)
-{
- EmpathyChatPriv *priv = GET_PRIV (chat);
-
- if (priv->retrieving_backlogs)
- return;
-
- priv->retrieving_backlogs = TRUE;
- g_timeout_add_full (G_PRIORITY_LOW, 500, /* ms */
- (GSourceFunc) chat_add_logs, g_object_ref (chat), g_object_unref);
-}
-
-static void
-chat_view_adjustment_changed_cb (GtkAdjustment *adjustment,
- gpointer user_data)
-{
- EmpathyChat *chat = EMPATHY_CHAT (user_data);
- EmpathyChatPriv *priv = GET_PRIV (chat);
- guint page_size;
-
- if (tpl_log_walker_is_end (priv->log_walker)) {
- g_signal_handlers_disconnect_by_func (adjustment,
- chat_view_adjustment_changed_cb, user_data);
- return;
- }
-
- page_size = (guint) gtk_adjustment_get_page_size (adjustment);
- if (page_size <= priv->max_page_size)
- return;
-
- /* We need to fetch more logs if the page size of the view
- * increases, so that there is no empty space at the top.
- */
- if (G_LIKELY (priv->max_page_size != 0))
- chat_schedule_logs (chat);
-
- priv->max_page_size = page_size;
-}
-
-static void
-chat_view_adjustment_value_changed_cb (GtkAdjustment *adjustment,
- gpointer user_data)
-{
- EmpathyChat *chat = EMPATHY_CHAT (user_data);
- EmpathyChatPriv *priv = GET_PRIV (chat);
- guint lower;
- guint value;
-
- if (tpl_log_walker_is_end (priv->log_walker)) {
- g_signal_handlers_disconnect_by_func (adjustment,
- chat_view_adjustment_value_changed_cb, user_data);
- return;
- }
-
- lower = (guint) gtk_adjustment_get_lower (adjustment);
- value = (guint) gtk_adjustment_get_value (adjustment);
- if (value != lower)
- return;
-
- /* Request for more logs to be fetched if the user hit the
- * upper edge of the chat->view.
- */
- chat_schedule_logs (chat);
-}
-
-static gboolean
-chat_scrollable_connect (gpointer user_data)
-{
- EmpathyChat *chat = EMPATHY_CHAT (user_data);
- GtkAdjustment *adjustment;
-
- adjustment = gtk_scrollable_get_vadjustment (
- GTK_SCROLLABLE (chat->view));
-
- g_signal_connect (adjustment, "changed",
- G_CALLBACK (chat_view_adjustment_changed_cb), chat);
- g_signal_connect (adjustment, "value-changed",
- G_CALLBACK (chat_view_adjustment_value_changed_cb), chat);
-
- return G_SOURCE_REMOVE;
-}
-
-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 gchar *
-build_part_message (guint reason,
- const gchar *name,
- EmpathyContact *actor,
- const gchar *message)
-{
- GString *s = g_string_new ("");
- const gchar *actor_name = NULL;
-
- if (actor != NULL) {
- actor_name = empathy_contact_get_alias (actor);
- }
-
- /* Having an actor only really makes sense for a few actions... */
- switch (reason) {
- case TP_CHANNEL_GROUP_CHANGE_REASON_OFFLINE:
- g_string_append_printf (s, _("%s has disconnected"), name);
- break;
- case TP_CHANNEL_GROUP_CHANGE_REASON_KICKED:
- if (actor_name != NULL) {
- /* translators: reverse the order of these arguments
- * if the kicked should come before the kicker in your locale.
- */
- g_string_append_printf (s, _("%1$s was kicked by %2$s"),
- name, actor_name);
- } else {
- g_string_append_printf (s, _("%s was kicked"), name);
- }
- break;
- case TP_CHANNEL_GROUP_CHANGE_REASON_BANNED:
- if (actor_name != NULL) {
- /* translators: reverse the order of these arguments
- * if the banned should come before the banner in your locale.
- */
- g_string_append_printf (s, _("%1$s was banned by %2$s"),
- name, actor_name);
- } else {
- g_string_append_printf (s, _("%s was banned"), name);
- }
- break;
- default:
- g_string_append_printf (s, _("%s has left the room"), name);
- }
-
- if (!TPAW_STR_EMPTY (message)) {
- /* Note to translators: this string is appended to
- * notifications like "foo has left the room", with the message
- * given by the user living the room. If this poses a problem,
- * please let us know. :-)
- */
- g_string_append_printf (s, _(" (%s)"), message);
- }
-
- return g_string_free (s, FALSE);
-}
-
-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);
- const gchar *name = empathy_contact_get_alias (contact);
- gchar *str;
-
- g_return_if_fail (TP_CHANNEL_GROUP_CHANGE_REASON_RENAMED != reason);
-
- if (priv->block_events_timeout_id != 0)
- return;
-
- if (is_member) {
- str = g_strdup_printf (_("%s has joined the room"),
- name);
- } else {
- str = build_part_message (reason, name, actor, message);
- }
-
- empathy_theme_adium_append_event (chat->view, str);
- g_free (str);
-}
-
-static void
-chat_member_renamed_cb (EmpathyTpChat *tp_chat,
- EmpathyContact *old_contact,
- EmpathyContact *new_contact,
- guint reason,
- gchar *message,
- EmpathyChat *chat)
-{
- EmpathyChatPriv *priv = GET_PRIV (chat);
-
- g_return_if_fail (TP_CHANNEL_GROUP_CHANGE_REASON_RENAMED == reason);
-
- if (priv->block_events_timeout_id == 0) {
- gchar *str;
-
- str = g_strdup_printf (_("%s is now known as %s"),
- empathy_contact_get_alias (old_contact),
- empathy_contact_get_alias (new_contact));
- empathy_theme_adium_append_event (chat->view, str);
- g_free (str);
- }
-
-}
-
-static gboolean
-chat_contacts_visible_timeout_cb (gpointer chat)
-{
- EmpathyChatPriv *priv = GET_PRIV (chat);
-
- /* Relax the size request */
- gtk_widget_set_size_request (priv->vbox_left, -1, -1);
-
- /* Set the position of the slider. This must be done here because
- * GtkPaned need to know its size allocation and it will be settled only
- * after the gtk_window_resize () tough effect. */
- if (priv->contacts_width > 0) {
- gtk_paned_set_position (GTK_PANED (priv->hpaned),
- priv->contacts_width);
- }
-
- priv->contacts_visible_id = 0;
-
- return FALSE;
-}
-
-static void
-chat_update_contacts_visibility (EmpathyChat *chat,
- gboolean show)
-{
- EmpathyChatPriv *priv = GET_PRIV (chat);
-
- if (!priv->scrolled_window_contacts) {
- return;
- }
-
- if (priv->remote_contact != NULL) {
- show = FALSE;
- }
-
- if (show && priv->contact_list_view == NULL) {
- EmpathyIndividualStore *store;
- gint min_width;
- GtkAllocation allocation;
-
- /* 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 */
- gtk_widget_get_allocation (priv->vbox_left, &allocation);
- min_width = MIN (allocation.width, 250);
- gtk_widget_set_size_request (priv->vbox_left, min_width, -1);
-
- /* There is no way to know when the window resize will happen
- * since it is WM's decision. Let's hope it won't be longer. */
- if (priv->contacts_visible_id != 0)
- g_source_remove (priv->contacts_visible_id);
- priv->contacts_visible_id = g_timeout_add (500,
- chat_contacts_visible_timeout_cb, chat);
-
- store = EMPATHY_INDIVIDUAL_STORE (
- empathy_individual_store_channel_new ((TpChannel *) priv->tp_chat));
-
- empathy_individual_store_set_show_groups (store, FALSE);
-
- priv->contact_list_view = GTK_WIDGET (empathy_individual_view_new (store,
- EMPATHY_INDIVIDUAL_VIEW_FEATURE_INDIVIDUAL_TOOLTIP,
- EMPATHY_INDIVIDUAL_FEATURE_ADD_CONTACT |
- EMPATHY_INDIVIDUAL_FEATURE_CHAT |
- EMPATHY_INDIVIDUAL_FEATURE_CALL |
- EMPATHY_INDIVIDUAL_FEATURE_LOG |
- EMPATHY_INDIVIDUAL_FEATURE_INFO));
-
- empathy_individual_view_set_show_offline (
- EMPATHY_INDIVIDUAL_VIEW (priv->contact_list_view), TRUE);
- empathy_individual_view_set_show_uninteresting (
- EMPATHY_INDIVIDUAL_VIEW (priv->contact_list_view), TRUE);
-
- 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 if (!show) {
- priv->contacts_width = gtk_paned_get_position (GTK_PANED (priv->hpaned));
- gtk_widget_hide (priv->scrolled_window_contacts);
- if (priv->contact_list_view != NULL) {
- gtk_widget_destroy (priv->contact_list_view);
- priv->contact_list_view = NULL;
- }
- }
-}
-
-void
-empathy_chat_set_show_contacts (EmpathyChat *chat,
- gboolean show)
-{
- EmpathyChatPriv *priv = GET_PRIV (chat);
-
- priv->show_contacts = show;
-
- chat_update_contacts_visibility (chat, show);
-
- g_object_notify (G_OBJECT (chat), "show-contacts");
-}
-
-static void
-chat_self_contact_changed_cb (EmpathyChat *chat)
-{
- EmpathyChatPriv *priv = GET_PRIV (chat);
-
- if (priv->self_contact != NULL) {
- g_signal_handlers_disconnect_by_func (priv->self_contact,
- chat_self_contact_alias_changed_cb,
- chat);
- }
- g_clear_object (&priv->self_contact);
-
- priv->self_contact = empathy_tp_chat_get_self_contact (priv->tp_chat);
- if (priv->self_contact != NULL) {
- g_object_ref (priv->self_contact);
-
- if (empathy_chat_is_room (chat)) {
- g_signal_connect_swapped (priv->self_contact, "notify::alias",
- G_CALLBACK (chat_self_contact_alias_changed_cb),
- chat);
- }
- }
-
- chat_self_contact_alias_changed_cb (chat);
-}
-
-static void
-chat_remote_contact_changed_cb (EmpathyChat *chat)
-{
- EmpathyChatPriv *priv = GET_PRIV (chat);
-
- if (priv->remote_contact != NULL) {
- g_object_unref (priv->remote_contact);
- priv->remote_contact = NULL;
- }
-
- g_free (priv->id);
-
- priv->id = g_strdup (empathy_tp_chat_get_id (priv->tp_chat));
- priv->remote_contact = empathy_tp_chat_get_remote_contact (priv->tp_chat);
- if (priv->remote_contact != NULL) {
- g_object_ref (priv->remote_contact);
- priv->handle_type = TP_HANDLE_TYPE_CONTACT;
- }
- else if (priv->tp_chat != NULL) {
- tp_channel_get_handle ((TpChannel *) priv->tp_chat, &priv->handle_type);
- }
-
- chat_update_contacts_visibility (chat, priv->show_contacts);
-
- g_object_notify (G_OBJECT (chat), "remote-contact");
- g_object_notify (G_OBJECT (chat), "id");
-}
-
-static void
-chat_invalidated_cb (EmpathyTpChat *tp_chat,
- guint domain,
- gint code,
- gchar *message,
- EmpathyChat *chat)
-{
- EmpathyChatPriv *priv;
-
- priv = GET_PRIV (chat);
-
- if (!priv->tp_chat) {
- return;
- }
-
- chat_composing_remove_timeout (chat);
- g_object_unref (priv->tp_chat);
- priv->tp_chat = NULL;
- g_object_notify (G_OBJECT (chat), "tp-chat");
-
- empathy_theme_adium_append_event (chat->view, _("Disconnected"));
- gtk_widget_set_sensitive (chat->input_text_view, FALSE);
-
- chat_update_contacts_visibility (chat, FALSE);
-
- priv->unread_messages_when_offline = priv->unread_messages;
-}
-
-static gboolean
-update_misspelled_words (gpointer data)
-{
- EmpathyChat *chat = EMPATHY_CHAT (data);
- EmpathyChatPriv *priv = GET_PRIV (chat);
- GtkTextBuffer *buffer;
- GtkTextIter iter;
- gint length;
-
- buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (chat->input_text_view));
-
- gtk_text_buffer_get_end_iter (buffer, &iter);
- length = gtk_text_iter_get_offset (&iter);
- chat_input_text_buffer_insert_text_cb (buffer, &iter,
- NULL, length, chat);
-
- priv->update_misspelled_words_id = 0;
-
- return FALSE;
-}
-
-static void
-conf_spell_checking_cb (GSettings *gsettings_chat,
- const gchar *key,
- gpointer user_data)
-{
- EmpathyChat *chat = EMPATHY_CHAT (user_data);
- EmpathyChatPriv *priv = GET_PRIV (chat);
- gboolean spell_checker;
- GtkTextBuffer *buffer;
-
- if (strcmp (key, EMPATHY_PREFS_CHAT_SPELL_CHECKER_ENABLED) != 0)
- return;
-
- spell_checker = g_settings_get_boolean (gsettings_chat,
- EMPATHY_PREFS_CHAT_SPELL_CHECKER_ENABLED);
-
- if (!empathy_spell_supported ()) {
- spell_checker = FALSE;
- }
-
- buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (chat->input_text_view));
-
- if (spell_checker == priv->spell_checking_enabled) {
- if (spell_checker) {
- /* Possibly changed dictionaries,
- * update misspelled words. Need to do so in idle
- * so the spell checker is updated. */
- priv->update_misspelled_words_id =
- g_idle_add (update_misspelled_words, chat);
- }
-
- return;
- }
-
- if (spell_checker) {
- GtkTextIter iter;
-
- priv->notify_cursor_position_id = tp_g_signal_connect_object (
- buffer, "notify::cursor-position",
- G_CALLBACK (chat_input_text_buffer_notify_cursor_position_cb),
- chat, 0);
- priv->insert_text_id = tp_g_signal_connect_object (
- buffer, "insert-text",
- G_CALLBACK (chat_input_text_buffer_insert_text_cb),
- chat, G_CONNECT_AFTER);
- priv->delete_range_id = tp_g_signal_connect_object (
- buffer, "delete-range",
- G_CALLBACK (chat_input_text_buffer_delete_range_cb),
- chat, G_CONNECT_AFTER);
-
- gtk_text_buffer_create_tag (buffer, "misspelled",
- "underline", PANGO_UNDERLINE_ERROR,
- NULL);
-
- gtk_text_buffer_get_iter_at_mark (buffer, &iter,
- gtk_text_buffer_get_insert (buffer));
- gtk_text_buffer_create_mark (buffer, "previous-cursor-position",
- &iter, TRUE);
-
- /* Mark misspelled words in the existing buffer.
- * Need to do so in idle so the spell checker is updated. */
- priv->update_misspelled_words_id =
- g_idle_add (update_misspelled_words, chat);
- } else {
- GtkTextTagTable *table;
- GtkTextTag *tag;
-
- g_signal_handler_disconnect (buffer, priv->notify_cursor_position_id);
- priv->notify_cursor_position_id = 0;
- g_signal_handler_disconnect (buffer, priv->insert_text_id);
- priv->insert_text_id = 0;
- g_signal_handler_disconnect (buffer, priv->delete_range_id);
- priv->delete_range_id = 0;
-
- table = gtk_text_buffer_get_tag_table (buffer);
- tag = gtk_text_tag_table_lookup (table, "misspelled");
- gtk_text_tag_table_remove (table, tag);
-
- gtk_text_buffer_delete_mark_by_name (buffer,
- "previous-cursor-position");
- }
-
- priv->spell_checking_enabled = spell_checker;
-}
-
-static gboolean
-save_paned_pos_timeout (gpointer data)
-{
- EmpathyChat *self = data;
- gint hpaned_pos;
-
- hpaned_pos = gtk_paned_get_position (GTK_PANED (self->priv->hpaned));
-
- g_settings_set_int (self->priv->gsettings_ui,
- EMPATHY_PREFS_UI_CHAT_WINDOW_PANED_POS,
- hpaned_pos);
-
- return FALSE;
-}
-
-static gboolean
-chat_hpaned_pos_changed_cb (GtkWidget* hpaned,
- GParamSpec *spec,
- gpointer user_data)
-{
- EmpathyChat *chat = EMPATHY_CHAT (user_data);
-
- if (chat->priv->save_paned_pos_id != 0)
- g_source_remove (chat->priv->save_paned_pos_id);
-
- chat->priv->save_paned_pos_id = g_timeout_add_seconds (1,
- save_paned_pos_timeout, chat);
-
- return TRUE;
-}
-
-static void
-chat_create_ui (EmpathyChat *chat)
-{
- EmpathyChatPriv *priv = GET_PRIV (chat);
- GtkBuilder *gui;
- GList *list = NULL;
- gchar *filename;
- GtkTextBuffer *buffer;
- EmpathyThemeManager *theme_mgr;
-
- filename = empathy_file_lookup ("empathy-chat.ui",
- "libempathy-gtk");
- gui = tpaw_builder_get_file (filename,
- "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,
- "expander_topic", &priv->expander_topic,
- "label_topic", &priv->label_topic,
- "scrolled_window_contacts", &priv->scrolled_window_contacts,
- "info_bar_vbox", &priv->info_bar_vbox,
- NULL);
-
- tpaw_builder_connect (gui, chat,
- "expander_topic", "notify::expanded", chat_topic_expander_activate_cb,
- "label_topic", "size-allocate", chat_topic_label_size_allocate_cb,
- NULL);
-
- g_free (filename);
-
- /* Add message view. */
- theme_mgr = empathy_theme_manager_dup_singleton ();
- chat->view = empathy_theme_manager_create_view (theme_mgr);
- g_object_unref (theme_mgr);
- /* If this is a GtkTextView, it's set as a drag destination for text/plain
- and other types, even though it's non-editable and doesn't accept any
- drags. This steals drag motion for anything inside the scrollbars,
- making drag destinations on chat windows far less useful.
- */
- gtk_drag_dest_unset (GTK_WIDGET (chat->view));
- 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 = empathy_input_text_view_new ();
- g_signal_connect (chat->input_text_view, "notify::has-focus",
- G_CALLBACK (chat_input_has_focus_notify_cb),
- chat);
- 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, "realize",
- G_CALLBACK (chat_input_realize_cb),
- chat);
- g_signal_connect (chat->input_text_view, "button-press-event",
- G_CALLBACK (chat_input_button_press_event_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));
- tp_g_signal_connect_object (buffer, "changed",
- G_CALLBACK (chat_input_text_buffer_changed_cb),
- chat, 0);
- tp_g_signal_connect_object (priv->gsettings_chat,
- "changed::" EMPATHY_PREFS_CHAT_SPELL_CHECKER_ENABLED,
- G_CALLBACK (conf_spell_checking_cb), chat, 0);
- conf_spell_checking_cb (priv->gsettings_chat,
- EMPATHY_PREFS_CHAT_SPELL_CHECKER_ENABLED, chat);
- gtk_container_add (GTK_CONTAINER (priv->scrolled_window_input),
- chat->input_text_view);
- gtk_widget_show (chat->input_text_view);
-
- /* Add the (invisible) search bar */
- priv->search_bar = empathy_search_bar_new (chat->view);
- gtk_box_pack_start (GTK_BOX(priv->vbox_left),
- priv->search_bar,
- FALSE, FALSE, 0);
- gtk_box_reorder_child (GTK_BOX(priv->vbox_left), priv->search_bar, 1);
-
- /* Initialy hide the topic, will be shown if not empty */
- gtk_widget_hide (priv->hbox_topic);
-
- g_signal_connect (priv->hpaned, "notify::position",
- G_CALLBACK (chat_hpaned_pos_changed_cb),
- chat);
-
- /* Set widget focus order */
- list = g_list_append (NULL, priv->search_bar);
- list = g_list_append (list, 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_box_pack_start (GTK_BOX (chat), priv->widget, TRUE, TRUE, 0);
- g_object_unref (gui);
-}
-
-static void
-chat_finalize (GObject *object)
-{
- EmpathyChat *chat;
- EmpathyChatPriv *priv;
-
- chat = EMPATHY_CHAT (object);
- priv = GET_PRIV (chat);
-
- DEBUG ("Finalized: %p", object);
-
- if (priv->update_misspelled_words_id != 0)
- g_source_remove (priv->update_misspelled_words_id);
-
- if (priv->save_paned_pos_id != 0)
- g_source_remove (priv->save_paned_pos_id);
-
- if (priv->contacts_visible_id != 0)
- g_source_remove (priv->contacts_visible_id);
-
- g_object_unref (priv->gsettings_chat);
- g_object_unref (priv->gsettings_ui);
-
- g_list_foreach (priv->input_history, (GFunc) chat_input_history_entry_free, NULL);
- g_list_free (priv->input_history);
-
- g_list_foreach (priv->compositors, (GFunc) g_object_unref, NULL);
- g_list_free (priv->compositors);
-
- chat_composing_remove_timeout (chat);
-
- g_object_unref (priv->account_manager);
- g_object_unref (priv->log_manager);
- g_object_unref (priv->log_walker);
-
- if (priv->tp_chat) {
- g_signal_handlers_disconnect_by_func (priv->tp_chat,
- chat_invalidated_cb, chat);
- g_signal_handlers_disconnect_by_func (priv->tp_chat,
- chat_message_received_cb, chat);
- g_signal_handlers_disconnect_by_func (priv->tp_chat,
- chat_message_acknowledged_cb, chat);
- g_signal_handlers_disconnect_by_func (priv->tp_chat,
- chat_send_error_cb, chat);
- g_signal_handlers_disconnect_by_func (priv->tp_chat,
- chat_state_changed_cb, chat);
- g_signal_handlers_disconnect_by_func (priv->tp_chat,
- chat_members_changed_cb, chat);
- g_signal_handlers_disconnect_by_func (priv->tp_chat,
- chat_self_contact_changed_cb, chat);
- g_signal_handlers_disconnect_by_func (priv->tp_chat,
- chat_remote_contact_changed_cb, chat);
- g_signal_handlers_disconnect_by_func (priv->tp_chat,
- chat_title_changed_cb, chat);
- g_signal_handlers_disconnect_by_func (priv->tp_chat,
- chat_subject_changed_cb, chat);
- empathy_tp_chat_leave (priv->tp_chat, "");
- g_object_unref (priv->tp_chat);
- }
- if (priv->account) {
- g_object_unref (priv->account);
- }
- if (priv->self_contact) {
- g_signal_handlers_disconnect_by_func (priv->self_contact,
- chat_self_contact_alias_changed_cb,
- chat);
- g_object_unref (priv->self_contact);
- }
- 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_completion_free (priv->completion);
-
- tp_clear_pointer (&priv->highlight_regex, g_regex_unref);
-
- G_OBJECT_CLASS (empathy_chat_parent_class)->finalize (object);
-}
-
-static void
-chat_constructed (GObject *object)
-{
- EmpathyChat *chat = EMPATHY_CHAT (object);
- EmpathyChatPriv *priv = GET_PRIV (chat);
- TplEntity *target;
-
- if (priv->tp_chat != NULL) {
- TpChannel *channel = TP_CHANNEL (priv->tp_chat);
- TpConnection *conn = tp_channel_get_connection (channel);
- gboolean supports_avatars =
- tp_proxy_has_interface_by_id (conn,
- TP_IFACE_QUARK_CONNECTION_INTERFACE_AVATARS);
-
- empathy_theme_adium_set_show_avatars (chat->view,
- supports_avatars);
- }
-
- /* Add messages from last conversation */
- if (priv->handle_type == TP_HANDLE_TYPE_ROOM)
- target = tpl_entity_new_from_room_id (priv->id);
- else
- target = tpl_entity_new (priv->id, TPL_ENTITY_CONTACT, NULL, NULL);
-
- priv->log_walker = tpl_log_manager_walk_filtered_events (priv->log_manager, priv->account, target,
- TPL_EVENT_MASK_TEXT, chat_log_filter, chat);
- g_object_unref (target);
-
- if (priv->handle_type != TP_HANDLE_TYPE_ROOM) {
- /* First display logs from the logger and then display pending messages */
- chat_add_logs (chat);
- }
- else {
- /* Just display pending messages for rooms */
- priv->can_show_pending = TRUE;
- show_pending_messages (chat);
- }
-}
-
-static void
-empathy_chat_class_init (EmpathyChatClass *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;
-
- 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_PARAM_STATIC_STRINGS));
- g_object_class_install_property (object_class,
- PROP_ACCOUNT,
- g_param_spec_object ("account",
- "Account of the chat",
- "The account of the chat",
- TP_TYPE_ACCOUNT,
- G_PARAM_READABLE |
- G_PARAM_STATIC_STRINGS));
- g_object_class_install_property (object_class,
- PROP_ID,
- g_param_spec_string ("id",
- "Chat's id",
- "The id of the chat",
- NULL,
- G_PARAM_READABLE |
- G_PARAM_STATIC_STRINGS));
- g_object_class_install_property (object_class,
- PROP_NAME,
- g_param_spec_string ("name",
- "Chat's name",
- "The name of the chat",
- NULL,
- G_PARAM_READABLE |
- G_PARAM_STATIC_STRINGS));
- g_object_class_install_property (object_class,
- PROP_SUBJECT,
- g_param_spec_string ("subject",
- "Chat's subject",
- "The subject or topic of the chat",
- NULL,
- G_PARAM_READABLE |
- G_PARAM_STATIC_STRINGS));
- g_object_class_install_property (object_class,
- PROP_REMOTE_CONTACT,
- g_param_spec_object ("remote-contact",
- "The remote contact",
- "The remote contact is any",
- EMPATHY_TYPE_CONTACT,
- G_PARAM_READABLE |
- G_PARAM_STATIC_STRINGS));
- g_object_class_install_property (object_class,
- PROP_SHOW_CONTACTS,
- g_param_spec_boolean ("show-contacts",
- "Contacts' visibility",
- "The visibility of the contacts' list",
- TRUE,
- G_PARAM_READWRITE |
- G_PARAM_STATIC_STRINGS));
-
- g_object_class_install_property (object_class,
- PROP_SMS_CHANNEL,
- g_param_spec_boolean ("sms-channel",
- "SMS Channel",
- "TRUE if this channel is for sending SMSes",
- FALSE,
- G_PARAM_READABLE | G_PARAM_STATIC_STRINGS));
-
- g_object_class_install_property (object_class,
- PROP_N_MESSAGES_SENDING,
- g_param_spec_uint ("n-messages-sending",
- "Num Messages Sending",
- "The number of messages being sent",
- 0, G_MAXUINT, 0,
- G_PARAM_READABLE | G_PARAM_STATIC_STRINGS));
-
- g_object_class_install_property (object_class,
- PROP_NB_UNREAD_MESSAGES,
- g_param_spec_uint ("nb-unread-messages",
- "Num Unread Messages",
- "The number of unread messages",
- 0, G_MAXUINT, 0,
- G_PARAM_READABLE | G_PARAM_STATIC_STRINGS));
-
- signals[COMPOSING] =
- g_signal_new ("composing",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_LAST,
- 0,
- NULL, NULL,
- g_cclosure_marshal_generic,
- G_TYPE_NONE,
- 1, G_TYPE_BOOLEAN);
-
- /**
- * EmpathyChat::new-message:
- * @self: the #EmpathyChat
- * @message: the new message
- * @pending: whether the message was in the pending queue when @self
- * was created
- * @should_highlight: %TRUE if the message mentions the local user
- */
- signals[NEW_MESSAGE] =
- g_signal_new ("new-message",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_LAST,
- 0,
- NULL, NULL,
- g_cclosure_marshal_generic,
- G_TYPE_NONE,
- 3, EMPATHY_TYPE_MESSAGE, G_TYPE_BOOLEAN, G_TYPE_BOOLEAN);
-
- signals[PART_COMMAND_ENTERED] =
- g_signal_new ("part-command-entered",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_LAST,
- 0,
- NULL, NULL,
- g_cclosure_marshal_generic,
- G_TYPE_NONE,
- 1, G_TYPE_STRV);
-
- 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
-account_manager_prepared_cb (GObject *source_object,
- GAsyncResult *result,
- gpointer user_data)
-{
- GList *accounts, *l;
- TpAccountManager *account_manager = TP_ACCOUNT_MANAGER (source_object);
- EmpathyChat *chat = user_data;
- GError *error = NULL;
-
- if (!tp_proxy_prepare_finish (account_manager, result, &error)) {
- DEBUG ("Failed to prepare the account manager: %s", error->message);
- g_error_free (error);
- return;
- }
-
- accounts = tp_account_manager_dup_valid_accounts (account_manager);
-
- for (l = accounts; l != NULL; l = l->next) {
- TpAccount *account = l->data;
- tp_g_signal_connect_object (account, "status-changed",
- G_CALLBACK (chat_new_connection_cb),
- chat, 0);
- }
-
- g_list_free_full (accounts, g_object_unref);
-}
-
-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 = tpl_log_manager_dup_singleton ();
- priv->gsettings_chat = g_settings_new (EMPATHY_PREFS_CHAT_SCHEMA);
- priv->gsettings_ui = g_settings_new (EMPATHY_PREFS_UI_SCHEMA);
-
- priv->contacts_width = g_settings_get_int (priv->gsettings_ui,
- EMPATHY_PREFS_UI_CHAT_WINDOW_PANED_POS);
- priv->input_history = NULL;
- priv->input_history_current = NULL;
- priv->account_manager = tp_account_manager_dup ();
-
- tp_proxy_prepare_async (priv->account_manager, NULL,
- account_manager_prepared_cb, chat);
-
- priv->show_contacts = g_settings_get_boolean (priv->gsettings_chat,
- EMPATHY_PREFS_CHAT_SHOW_CONTACTS_IN_ROOMS);
-
- /* 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_alias);
- g_completion_set_compare (priv->completion, chat_contacts_completion_func);
-
- chat_create_ui (chat);
-}
-
-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;
-}
-
-typedef struct
-{
- EmpathyChat *self;
- GtkWidget *info_bar;
- gulong response_id;
- GtkWidget *button;
- GtkWidget *label;
- GtkWidget *entry;
- GtkWidget *spinner;
- gchar *password;
-} PasswordData;
-
-static void
-passwd_remember_button_cb (GtkButton *button,
- PasswordData *data)
-{
- gtk_info_bar_response (GTK_INFO_BAR (data->info_bar), GTK_RESPONSE_OK);
-}
-
-static void
-passwd_not_now_button_cb (GtkButton *button,
- PasswordData *data)
-{
- gtk_info_bar_response (GTK_INFO_BAR (data->info_bar), GTK_RESPONSE_NO);
-}
-
-static void
-remember_password_infobar_response_cb (GtkWidget *info_bar,
- gint response_id,
- PasswordData *data)
-{
- EmpathyChatPriv *priv = GET_PRIV (data->self);
-
- if (response_id == GTK_RESPONSE_OK) {
- DEBUG ("Saving room password");
- tpaw_keyring_set_room_password_async (priv->account,
- empathy_tp_chat_get_id (priv->tp_chat),
- data->password,
- NULL, NULL);
- }
-
- gtk_widget_destroy (info_bar);
- g_free (data->password);
- g_slice_free (PasswordData, data);
-}
-
-static void
-chat_prompt_to_save_password (EmpathyChat *self,
- PasswordData *data)
-{
- GtkWidget *content_area;
- GtkWidget *hbox;
- GtkWidget *image;
- GtkWidget *label;
- GtkWidget *alig;
- GtkWidget *button;
-
- /* save the password in case it needs to be saved */
- data->password = g_strdup (gtk_entry_get_text (GTK_ENTRY (data->entry)));
-
- /* Remove all previous widgets */
- content_area = gtk_info_bar_get_content_area (GTK_INFO_BAR (data->info_bar));
- gtk_container_forall (GTK_CONTAINER (content_area),
- (GtkCallback) gtk_widget_destroy, NULL);
- data->button = NULL;
- data->label = NULL;
- data->entry = NULL;
- data->spinner = NULL;
-
- gtk_info_bar_set_message_type (GTK_INFO_BAR (data->info_bar),
- GTK_MESSAGE_QUESTION);
-
- hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 5);
- gtk_box_pack_start (GTK_BOX (content_area), hbox, TRUE, TRUE, 0);
-
- /* Add image */
- image = gtk_image_new_from_stock (GTK_STOCK_DIALOG_AUTHENTICATION,
- GTK_ICON_SIZE_DIALOG);
- gtk_box_pack_start (GTK_BOX (hbox), image, FALSE, FALSE, 0);
-
- /* Add message */
- label = gtk_label_new (_("Would you like to store this password?"));
- gtk_box_pack_start (GTK_BOX (hbox), label, TRUE, TRUE, 0);
-
- /* Add 'Remember' button */
- alig = gtk_alignment_new (0, 0.5, 1, 0);
-
- button = gtk_button_new_with_label (_("Remember"));
- gtk_container_add (GTK_CONTAINER (alig), button);
- gtk_box_pack_start (GTK_BOX (hbox), alig, FALSE, FALSE, 0);
-
- g_signal_connect (button, "clicked", G_CALLBACK (passwd_remember_button_cb),
- data);
-
- /* Add 'Not now' button */
- alig = gtk_alignment_new (0, 0.5, 1, 0);
-
- button = gtk_button_new_with_label (_("Not now"));
- gtk_container_add (GTK_CONTAINER (alig), button);
- gtk_box_pack_start (GTK_BOX (hbox), alig, FALSE, FALSE, 0);
-
- g_signal_connect (button, "clicked", G_CALLBACK (passwd_not_now_button_cb),
- data);
-
- /* go! */
- g_signal_handler_disconnect (data->info_bar, data->response_id);
- g_signal_connect (data->info_bar, "response",
- G_CALLBACK (remember_password_infobar_response_cb), data);
-
- gtk_widget_show_all (data->info_bar);
-}
-
-static void
-provide_password_cb (GObject *tp_chat,
- GAsyncResult *res,
- gpointer user_data)
-{
- PasswordData *data = user_data;
- EmpathyChat *self = data->self;
- EmpathyChatPriv *priv = GET_PRIV (self);
- GError *error = NULL;
-
- if (!tp_channel_provide_password_finish (TP_CHANNEL (tp_chat), res,
- &error)) {
- DEBUG ("error: %s", error->message);
- /* FIXME: what should we do if that's another error? Close the channel?
- * Display the raw D-Bus error to the user isn't very useful */
- if (g_error_matches (error, TP_ERROR, TP_ERROR_AUTHENTICATION_FAILED)) {
- /* entry */
- gtk_entry_set_text (GTK_ENTRY (data->entry), "");
- gtk_widget_set_sensitive (data->entry, TRUE);
- gtk_widget_grab_focus (data->entry);
-
- /* info bar */
- gtk_info_bar_set_message_type (
- GTK_INFO_BAR (data->info_bar),
- GTK_MESSAGE_ERROR);
-
- /* button */
- gtk_widget_set_sensitive (data->button, TRUE);
- gtk_button_set_label (GTK_BUTTON (data->button),
- _("Retry"));
-
- /* label */
- gtk_label_set_text (GTK_LABEL (data->label),
- _("Wrong password; please try again:"));
-
- /* spinner */
- gtk_spinner_stop (GTK_SPINNER (data->spinner));
- gtk_widget_hide (data->spinner);
- }
- g_error_free (error);
- return;
- }
-
- /* ask whether they want to save the password */
- chat_prompt_to_save_password (self, data);
-
- /* Room joined */
- gtk_widget_set_sensitive (priv->hpaned, TRUE);
- gtk_widget_set_sensitive (self->input_text_view, TRUE);
- gtk_widget_grab_focus (self->input_text_view);
-}
-
-static void
-password_infobar_response_cb (GtkWidget *info_bar,
- gint response_id,
- PasswordData *data)
-{
- EmpathyChatPriv *priv = GET_PRIV (data->self);
- const gchar *password;
-
- if (response_id != GTK_RESPONSE_OK) {
- gtk_widget_destroy (info_bar);
- g_slice_free (PasswordData, data);
- return;
- }
-
- password = gtk_entry_get_text (GTK_ENTRY (data->entry));
-
- tp_channel_provide_password_async (TP_CHANNEL (priv->tp_chat), password,
- provide_password_cb, data);
-
- gtk_widget_set_sensitive (data->button, FALSE);
- gtk_widget_set_sensitive (data->entry, FALSE);
-
- gtk_spinner_start (GTK_SPINNER (data->spinner));
- gtk_widget_show (data->spinner);
-}
-
-static void
-password_entry_activate_cb (GtkWidget *entry,
- PasswordData *data)
-{
- gtk_info_bar_response (GTK_INFO_BAR (data->info_bar), GTK_RESPONSE_OK);
-}
-
-static void
-passwd_join_button_cb (GtkButton *button,
- PasswordData *data)
-{
- gtk_info_bar_response (GTK_INFO_BAR (data->info_bar), GTK_RESPONSE_OK);
-}
-
-static void
-clear_icon_released_cb (GtkEntry *entry,
- GtkEntryIconPosition icon_pos,
- GdkEvent *event,
- PasswordData *data)
-{
- gtk_entry_set_text (entry, "");
-}
-
-static void
-password_entry_changed_cb (GtkEditable *entry,
- PasswordData *data)
-{
- const gchar *str;
-
- str = gtk_entry_get_text (GTK_ENTRY (entry));
-
- gtk_entry_set_icon_sensitive (GTK_ENTRY (entry),
- GTK_ENTRY_ICON_SECONDARY, !TPAW_STR_EMPTY (str));
-}
-
-static void
-infobar_chat_invalidated_cb (TpProxy *proxy,
- guint domain,
- gint code,
- gchar *message,
- gpointer password_infobar)
-{
- /* Destroy the password infobar whenever a channel is invalidated
- * so we don't have multiple infobars when the MUC is rejoined */
- gtk_widget_destroy (GTK_WIDGET (password_infobar));
-}
-
-static void
-display_password_info_bar (EmpathyChat *self)
-{
- EmpathyChatPriv *priv = GET_PRIV (self);
- GtkWidget *info_bar;
- GtkWidget *content_area;
- GtkWidget *hbox;
- GtkWidget *image;
- GtkWidget *label;
- GtkWidget *entry;
- GtkWidget *alig;
- GtkWidget *button;
- GtkWidget *spinner;
- PasswordData *data;
-
- data = g_slice_new0 (PasswordData);
-
- info_bar = gtk_info_bar_new ();
- gtk_info_bar_set_message_type (GTK_INFO_BAR (info_bar),
- GTK_MESSAGE_QUESTION);
-
- content_area = gtk_info_bar_get_content_area (GTK_INFO_BAR (info_bar));
-
- hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 5);
- gtk_box_pack_start (GTK_BOX (content_area), hbox, TRUE, TRUE, 0);
-
- /* Add image */
- image = gtk_image_new_from_stock (GTK_STOCK_DIALOG_AUTHENTICATION,
- GTK_ICON_SIZE_DIALOG);
- gtk_box_pack_start (GTK_BOX (hbox), image, FALSE, FALSE, 0);
-
- /* Add message */
- label = gtk_label_new (_("This room is protected by a password:"));
- gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0);
-
- /* Add password entry */
- entry = gtk_entry_new ();
- gtk_entry_set_visibility (GTK_ENTRY (entry), FALSE);
- gtk_box_pack_start (GTK_BOX (hbox), entry, TRUE, TRUE, 0);
-
- gtk_entry_set_icon_from_stock (GTK_ENTRY (entry),
- GTK_ENTRY_ICON_SECONDARY, GTK_STOCK_CLEAR);
- gtk_entry_set_icon_sensitive (GTK_ENTRY (entry),
- GTK_ENTRY_ICON_SECONDARY, FALSE);
-
- g_signal_connect (entry, "icon-release",
- G_CALLBACK (clear_icon_released_cb), data);
- g_signal_connect (entry, "changed",
- G_CALLBACK (password_entry_changed_cb), data);
-
- g_signal_connect (entry, "activate",
- G_CALLBACK (password_entry_activate_cb), data);
-
- /* Focus the password entry once it's realized */
- g_signal_connect (entry, "realize", G_CALLBACK (gtk_widget_grab_focus), NULL);
-
- /* Add 'Join' button */
- alig = gtk_alignment_new (0, 0.5, 1, 0);
-
- button = gtk_button_new_with_label (_("Join"));
- gtk_container_add (GTK_CONTAINER (alig), button);
- gtk_box_pack_start (GTK_BOX (hbox), alig, FALSE, FALSE, 0);
-
- g_signal_connect (button, "clicked", G_CALLBACK (passwd_join_button_cb),
- data);
-
- /* Add spinner */
- spinner = gtk_spinner_new ();
- gtk_box_pack_end (GTK_BOX (hbox), spinner, FALSE, FALSE, 0);
-
- /* Save some data for messing around with later */
- data->self = self;
- data->info_bar = info_bar;
- data->button = button;
- data->label = label;
- data->entry = entry;
- data->spinner = spinner;
-
- gtk_box_pack_start (GTK_BOX (priv->info_bar_vbox), info_bar,
- TRUE, TRUE, 3);
- gtk_widget_show_all (hbox);
-
- tp_g_signal_connect_object (priv->tp_chat,
- "invalidated", G_CALLBACK (infobar_chat_invalidated_cb),
- info_bar, 0);
-
- data->response_id = g_signal_connect (info_bar, "response",
- G_CALLBACK (password_infobar_response_cb), data);
-
- gtk_widget_show_all (info_bar);
- /* ... but hide the spinner */
- gtk_widget_hide (spinner);
-
- /* prevent the user from typing anything */
- gtk_widget_set_sensitive (self->input_text_view, FALSE);
-}
-
-static void
-provide_saved_password_cb (GObject *tp_chat,
- GAsyncResult *res,
- gpointer user_data)
-{
- EmpathyChat *self = user_data;
- EmpathyChatPriv *priv = GET_PRIV (self);
- GError *error = NULL;
-
- if (!tp_channel_provide_password_finish (TP_CHANNEL (tp_chat), res,
- &error)) {
- DEBUG ("error: %s", error->message);
- /* FIXME: what should we do if that's another error? Close the channel?
- * Display the raw D-Bus error to the user isn't very useful */
- if (g_error_matches (error, TP_ERROR, TP_ERROR_AUTHENTICATION_FAILED)) {
- display_password_info_bar (self);
- gtk_widget_set_sensitive (priv->hpaned, FALSE);
- }
- g_error_free (error);
- return;
- }
-
- /* Room joined */
- gtk_widget_set_sensitive (priv->hpaned, TRUE);
- gtk_widget_grab_focus (self->input_text_view);
-}
-
-static void
-chat_room_got_password_cb (GObject *source,
- GAsyncResult *result,
- gpointer user_data)
-{
- EmpathyChat *self = user_data;
- EmpathyChatPriv *priv = GET_PRIV (self);
- const gchar *password;
- GError *error = NULL;
-
- password = tpaw_keyring_get_room_password_finish (priv->account,
- result, &error);
-
- if (error != NULL) {
- DEBUG ("Couldn't get room password: %s\n", error->message);
- g_clear_error (&error);
-
- display_password_info_bar (self);
- gtk_widget_set_sensitive (priv->hpaned, FALSE);
- return;
- }
-
- tp_channel_provide_password_async (TP_CHANNEL (priv->tp_chat), password,
- provide_saved_password_cb, self);
-}
-
-static void
-chat_password_needed_changed_cb (EmpathyChat *self)
-{
- EmpathyChatPriv *priv = GET_PRIV (self);
-
- if (tp_channel_password_needed (TP_CHANNEL (priv->tp_chat))) {
- tpaw_keyring_get_room_password_async (priv->account,
- empathy_tp_chat_get_id (priv->tp_chat),
- chat_room_got_password_cb, self);
- }
-}
-
-static void
-chat_sms_channel_changed_cb (EmpathyChat *self)
-{
- EmpathyChatPriv *priv = GET_PRIV (self);
-
- priv->sms_channel = tp_text_channel_is_sms_channel (
- (TpTextChannel *) priv->tp_chat);
- g_object_notify (G_OBJECT (self), "sms-channel");
-}
-
-static void
-chat_n_messages_sending_changed_cb (EmpathyChat *self)
-{
- g_object_notify (G_OBJECT (self), "n-messages-sending");
-}
-
-void
-empathy_chat_set_tp_chat (EmpathyChat *chat,
- EmpathyTpChat *tp_chat)
-{
- EmpathyChatPriv *priv = GET_PRIV (chat);
-
- g_return_if_fail (EMPATHY_IS_CHAT (chat));
- g_return_if_fail (EMPATHY_IS_TP_CHAT (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 (priv->tp_chat));
-
- g_signal_connect (tp_chat, "invalidated",
- G_CALLBACK (chat_invalidated_cb),
- chat);
- g_signal_connect (tp_chat, "message-received-empathy",
- G_CALLBACK (chat_message_received_cb),
- chat);
- g_signal_connect (tp_chat, "message_acknowledged",
- G_CALLBACK (chat_message_acknowledged_cb),
- chat);
- g_signal_connect (tp_chat, "send-error",
- G_CALLBACK (chat_send_error_cb),
- chat);
- g_signal_connect (tp_chat, "contact-chat-state-changed",
- G_CALLBACK (chat_state_changed_cb),
- chat);
- g_signal_connect (tp_chat, "members-changed",
- G_CALLBACK (chat_members_changed_cb),
- chat);
- g_signal_connect (tp_chat, "member-renamed",
- G_CALLBACK (chat_member_renamed_cb),
- chat);
- g_signal_connect_swapped (tp_chat, "notify::self-contact",
- G_CALLBACK (chat_self_contact_changed_cb),
- chat);
- g_signal_connect_swapped (tp_chat, "notify::remote-contact",
- G_CALLBACK (chat_remote_contact_changed_cb),
- chat);
- g_signal_connect_swapped (tp_chat, "notify::password-needed",
- G_CALLBACK (chat_password_needed_changed_cb),
- chat);
- g_signal_connect_swapped (tp_chat, "notify::is-sms-channel",
- G_CALLBACK (chat_sms_channel_changed_cb),
- chat);
- g_signal_connect_swapped (tp_chat, "notify::n-messages-sending",
- G_CALLBACK (chat_n_messages_sending_changed_cb),
- chat);
- g_signal_connect_swapped (tp_chat, "notify::title",
- G_CALLBACK (chat_title_changed_cb),
- chat);
- g_signal_connect_swapped (tp_chat, "notify::subject",
- G_CALLBACK (chat_subject_changed_cb),
- chat);
-
- /* Get initial value of properties */
- chat_sms_channel_changed_cb (chat);
- chat_self_contact_changed_cb (chat);
- chat_remote_contact_changed_cb (chat);
- chat_title_changed_cb (chat);
- chat_subject_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_theme_adium_append_event (chat->view, _("Connected"));
- }
- }
-
- g_object_notify (G_OBJECT (chat), "tp-chat");
- g_object_notify (G_OBJECT (chat), "id");
- g_object_notify (G_OBJECT (chat), "account");
-
- /* This is a noop when tp-chat is set at object construction time and causes
- * the pending messages to be show when it's set on the object after it has
- * been created */
- show_pending_messages (chat);
-
- /* check if a password is needed */
- chat_password_needed_changed_cb (chat);
-}
-
-TpAccount *
-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;
-}
-
-gchar *
-empathy_chat_dup_name (EmpathyChat *chat)
-{
- EmpathyChatPriv *priv = GET_PRIV (chat);
- const gchar *ret;
-
- g_return_val_if_fail (EMPATHY_IS_CHAT (chat), NULL);
-
- ret = priv->name;
-
- if (!ret && priv->remote_contact) {
- ret = empathy_contact_get_alias (priv->remote_contact);
- }
-
- if (!ret)
- ret = priv->id;
-
- if (!ret)
- ret = _("Conversation");
-
- if (priv->sms_channel)
- /* Translators: this string is a something like
- * "Escher Cat (SMS)" */
- return g_strdup_printf (_("%s (SMS)"), ret);
- else
- return g_strdup (ret);
-}
-
-const gchar *
-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;
-}
-
-GtkWidget *
-empathy_chat_get_contact_menu (EmpathyChat *chat)
-{
- EmpathyChatPriv *priv = GET_PRIV (chat);
- GtkWidget *menu = NULL;
- FolksIndividual *individual;
- TpContact *contact;
-
- g_return_val_if_fail (EMPATHY_IS_CHAT (chat), NULL);
-
- if (priv->remote_contact == NULL)
- return NULL;
-
- contact = empathy_contact_get_tp_contact (priv->remote_contact);
- if (contact == NULL)
- return NULL;
-
- individual = empathy_ensure_individual_from_tp_contact (contact);
-
- if (individual == NULL)
- return NULL;
-
- menu = empathy_individual_menu_new (individual, NULL,
- EMPATHY_INDIVIDUAL_FEATURE_CALL |
- EMPATHY_INDIVIDUAL_FEATURE_LOG |
- EMPATHY_INDIVIDUAL_FEATURE_INFO |
- EMPATHY_INDIVIDUAL_FEATURE_BLOCK, NULL);
-
- g_object_unref (individual);
-
- return menu;
-}
-
-void
-empathy_chat_clear (EmpathyChat *chat)
-{
- g_return_if_fail (EMPATHY_IS_CHAT (chat));
-
- empathy_theme_adium_clear (chat->view);
-}
-
-void
-empathy_chat_scroll_down (EmpathyChat *chat)
-{
- g_return_if_fail (EMPATHY_IS_CHAT (chat));
-
- empathy_theme_adium_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_has_selection (buffer)) {
- GtkClipboard *clipboard;
-
- clipboard = gtk_clipboard_get (GDK_SELECTION_CLIPBOARD);
-
- gtk_text_buffer_cut_clipboard (buffer, clipboard, TRUE);
- }
-}
-
-static gboolean
-copy_from_chat_view (EmpathyChat *chat)
-{
- if (!empathy_theme_adium_get_has_selection (chat->view))
- return FALSE;
-
- empathy_theme_adium_copy_clipboard (chat->view);
- return TRUE;
-}
-
-static gboolean
-copy_from_input (EmpathyChat *chat)
-{
- GtkTextBuffer *buffer;
- GtkClipboard *clipboard;
-
- buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (chat->input_text_view));
- if (!gtk_text_buffer_get_has_selection (buffer))
- return FALSE;
-
- clipboard = gtk_clipboard_get (GDK_SELECTION_CLIPBOARD);
- gtk_text_buffer_copy_clipboard (buffer, clipboard);
- return TRUE;
-}
-
-static gboolean
-copy_from_topic (EmpathyChat *chat)
-{
- EmpathyChatPriv *priv = GET_PRIV (chat);
- gint start_offset;
- gint end_offset;
- gchar *start;
- gchar *end;
- gchar *selection;
- const gchar *topic;
- GtkClipboard *clipboard;
-
- if (!gtk_label_get_selection_bounds (GTK_LABEL (priv->label_topic),
- &start_offset,
- &end_offset))
- return FALSE;
-
- topic = gtk_label_get_text (GTK_LABEL (priv->label_topic));
- start = g_utf8_offset_to_pointer (topic, start_offset);
- end = g_utf8_offset_to_pointer (topic, end_offset);
- selection = g_strndup (start, end - start);
-
- clipboard = gtk_clipboard_get (GDK_SELECTION_CLIPBOARD);
- gtk_clipboard_set_text (clipboard, selection, -1);
-
- g_free (selection);
- return TRUE;
-}
-
-void
-empathy_chat_copy (EmpathyChat *chat)
-{
- g_return_if_fail (EMPATHY_IS_CHAT (chat));
-
- if (copy_from_chat_view (chat))
- return;
-
- if (copy_from_input (chat))
- return;
-
- copy_from_topic (chat);
-}
-
-void
-empathy_chat_paste (EmpathyChat *chat)
-{
- GtkTextBuffer *buffer;
- GtkClipboard *clipboard;
- EmpathyChatPriv *priv;
-
- g_return_if_fail (EMPATHY_IS_CHAT (chat));
-
- priv = GET_PRIV (chat);
-
- if (gtk_widget_get_visible (priv->search_bar)) {
- empathy_search_bar_paste_clipboard (EMPATHY_SEARCH_BAR (priv->search_bar));
- return;
- }
-
- if (priv->tp_chat == NULL ||
- !gtk_widget_is_sensitive (chat->input_text_view))
- return;
-
- 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_find (EmpathyChat *chat)
-{
- EmpathyChatPriv *priv;
-
- g_return_if_fail (EMPATHY_IS_CHAT (chat));
-
- priv = GET_PRIV (chat);
-
- empathy_search_bar_show (EMPATHY_SEARCH_BAR (priv->search_bar));
-}
-
-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);
-}
-
-gboolean
-empathy_chat_is_room (EmpathyChat *chat)
-{
- EmpathyChatPriv *priv = GET_PRIV (chat);
-
- g_return_val_if_fail (EMPATHY_IS_CHAT (chat), FALSE);
-
- return (priv->handle_type == TP_HANDLE_TYPE_ROOM);
-}
-
-gboolean
-empathy_chat_is_highlighted (EmpathyChat *chat)
-{
- EmpathyChatPriv *priv = GET_PRIV (chat);
-
- g_return_val_if_fail (EMPATHY_IS_CHAT (chat), FALSE);
-
- return priv->highlighted;
-}
-
-guint
-empathy_chat_get_nb_unread_messages (EmpathyChat *self)
-{
- EmpathyChatPriv *priv = GET_PRIV (self);
-
- g_return_val_if_fail (EMPATHY_IS_CHAT (self), 0);
-
- return priv->unread_messages;
-}
-
-/* called when the messages have been read by user */
-void
-empathy_chat_messages_read (EmpathyChat *self)
-{
- EmpathyChatPriv *priv = GET_PRIV (self);
-
- g_return_if_fail (EMPATHY_IS_CHAT (self));
-
- /* FIXME: See Bug#610994, See comments about it in EmpathyChatPriv
- * definition. If we are still retrieving the backlogs, do not ACK */
- if (priv->retrieving_backlogs)
- return;
-
- if (priv->tp_chat != NULL) {
- tp_text_channel_ack_all_pending_messages_async (
- TP_TEXT_CHANNEL (priv->tp_chat), NULL, NULL);
- }
-
- priv->highlighted = FALSE;
-
- if (priv->unread_messages_when_offline > 0) {
- /* We can't ack those as the connection has gone away so just consider
- * them as read. */
- priv->unread_messages -= priv->unread_messages_when_offline;
- g_object_notify (G_OBJECT (self), "nb-unread-messages");
- priv->unread_messages_when_offline = 0;
- }
-}
-
-/* Return TRUE if on of the contacts in this chat is composing */
-gboolean
-empathy_chat_is_composing (EmpathyChat *chat)
-{
- return chat->priv->compositors != NULL;
-}
-
-gboolean
-empathy_chat_is_sms_channel (EmpathyChat *self)
-{
- EmpathyChatPriv *priv = GET_PRIV (self);
-
- g_return_val_if_fail (EMPATHY_IS_CHAT (self), 0);
-
- return priv->sms_channel;
-}
-
-guint
-empathy_chat_get_n_messages_sending (EmpathyChat *self)
-{
- EmpathyChatPriv *priv;
-
- g_return_val_if_fail (EMPATHY_IS_CHAT (self), 0);
-
- priv = GET_PRIV (self);
-
- if (priv->tp_chat == NULL) {
- return 0;
- } else {
- guint n_messages;
-
- g_object_get (priv->tp_chat,
- "n-messages-sending", &n_messages,
- NULL);
-
- return n_messages;
- }
-}
-
-gchar *
-empathy_chat_dup_text (EmpathyChat *self)
-{
- GtkTextBuffer *buffer;
- GtkTextIter start, end;
-
- buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (self->input_text_view));
-
- gtk_text_buffer_get_bounds (buffer, &start, &end);
- return gtk_text_buffer_get_text (buffer, &start, &end, FALSE);
-}
-
-void
-empathy_chat_set_text (EmpathyChat *self,
- const gchar *text)
-{
- GtkTextBuffer *buffer;
-
- buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (self->input_text_view));
-
- gtk_text_buffer_set_text (buffer, text, -1);
-}
diff --git a/libempathy-gtk/empathy-chat.h b/libempathy-gtk/empathy-chat.h
deleted file mode 100644
index 2a983622..00000000
--- a/libempathy-gtk/empathy-chat.h
+++ /dev/null
@@ -1,104 +0,0 @@
-/* -*- 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., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301 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/gtk.h>
-
-#include "empathy-contact.h"
-#include "empathy-theme-adium.h"
-#include "empathy-tp-chat.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;
-typedef struct _EmpathyChatPriv EmpathyChatPriv;
-
-struct _EmpathyChat {
- GtkBox parent;
- EmpathyChatPriv *priv;
-
- /* Protected */
- EmpathyThemeAdium *view;
- GtkWidget *input_text_view;
-};
-
-struct _EmpathyChatClass {
- GtkBoxClass 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);
-TpAccount * empathy_chat_get_account (EmpathyChat *chat);
-const gchar * empathy_chat_get_id (EmpathyChat *chat);
-gchar * empathy_chat_dup_name (EmpathyChat *chat);
-const gchar * empathy_chat_get_subject (EmpathyChat *chat);
-EmpathyContact * empathy_chat_get_remote_contact (EmpathyChat *chat);
-GtkWidget * empathy_chat_get_contact_menu (EmpathyChat *chat);
-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_find (EmpathyChat *chat);
-void empathy_chat_correct_word (EmpathyChat *chat,
- GtkTextIter *start,
- GtkTextIter *end,
- const gchar *new_word);
-void empathy_chat_join_muc (EmpathyChat *chat,
- const gchar *room);
-gboolean empathy_chat_is_room (EmpathyChat *chat);
-void empathy_chat_set_show_contacts (EmpathyChat *chat,
- gboolean show);
-guint empathy_chat_get_nb_unread_messages (EmpathyChat *chat);
-gboolean empathy_chat_is_highlighted (EmpathyChat *chat);
-void empathy_chat_messages_read (EmpathyChat *self);
-
-gboolean empathy_chat_is_composing (EmpathyChat *chat);
-
-gboolean empathy_chat_is_sms_channel (EmpathyChat *self);
-guint empathy_chat_get_n_messages_sending (EmpathyChat *self);
-
-gchar * empathy_chat_dup_text (EmpathyChat *self);
-void empathy_chat_set_text (EmpathyChat *self,
- const gchar *text);
-
-G_END_DECLS
-
-#endif /* __EMPATHY_CHAT_H__ */
diff --git a/libempathy-gtk/empathy-chat.ui b/libempathy-gtk/empathy-chat.ui
deleted file mode 100644
index 436c8dbe..00000000
--- a/libempathy-gtk/empathy-chat.ui
+++ /dev/null
@@ -1,124 +0,0 @@
-<?xml version="1.0"?>
-<interface>
- <requires lib="gtk+" version="2.16"/>
- <!-- interface-naming-policy toplevel-contextual -->
- <object class="GtkVBox" id="chat_widget">
- <property name="visible">True</property>
- <property name="border_width">4</property>
- <property name="orientation">vertical</property>
- <property name="spacing">6</property>
- <child>
- <object class="GtkVBox" id="info_bar_vbox">
- <property name="visible">True</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="position">2</property>
- </packing>
- </child>
- <child>
- <object class="GtkHPaned" id="hpaned">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <child>
- <object class="GtkVBox" id="vbox_left">
- <property name="visible">True</property>
- <property name="orientation">vertical</property>
- <property name="spacing">6</property>
- <child>
- <object class="GtkScrolledWindow" id="scrolled_window_chat">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="hscrollbar_policy">automatic</property>
- <property name="shadow_type">in</property>
- <child>
- <placeholder/>
- </child>
- </object>
- <packing>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkScrolledWindow" id="scrolled_window_input">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="hscrollbar_policy">never</property>
- <property name="vscrollbar_policy">never</property>
- <property name="shadow_type">in</property>
- <child>
- <placeholder/>
- </child>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="position">1</property>
- </packing>
- </child>
- </object>
- <packing>
- <property name="resize">True</property>
- <property name="shrink">True</property>
- </packing>
- </child>
- <child>
- <object 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">never</property>
- <property name="vscrollbar_policy">automatic</property>
- <property name="shadow_type">in</property>
- <child>
- <placeholder/>
- </child>
- </object>
- <packing>
- <property name="resize">False</property>
- <property name="shrink">True</property>
- </packing>
- </child>
- </object>
- <packing>
- <property name="position">2</property>
- </packing>
- </child>
- <child>
- <object class="GtkHBox" id="hbox_topic">
- <property name="visible">True</property>
- <property name="spacing">6</property>
- <child>
- <object class="GtkExpander" id="expander_topic">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <object 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">False</property>
- <property name="selectable">True</property>
- <property name="ellipsize">end</property>
- </object>
- <packing>
- <property name="position">1</property>
- </packing>
- </child>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="padding">2</property>
- <property name="position">1</property>
- </packing>
- </child>
- </object>
-</interface>
diff --git a/libempathy-gtk/empathy-contact-blocking-dialog.c b/libempathy-gtk/empathy-contact-blocking-dialog.c
deleted file mode 100644
index 046356ae..00000000
--- a/libempathy-gtk/empathy-contact-blocking-dialog.c
+++ /dev/null
@@ -1,724 +0,0 @@
-/*
- * empathy-contact-blocking-dialog.c
- *
- * EmpathyContactBlockingDialog
- *
- * Copyright (C) 2011 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: Danielle Madeley <danielle.madeley@collabora.co.uk>
- */
-
-#include "config.h"
-#include "empathy-contact-blocking-dialog.h"
-
-#include <glib/gi18n-lib.h>
-#include <tp-account-widgets/tpaw-builder.h>
-
-#include "empathy-account-chooser.h"
-#include "empathy-ui-utils.h"
-#include "empathy-utils.h"
-
-#define DEBUG_FLAG EMPATHY_DEBUG_OTHER
-#include "empathy-debug.h"
-
-#define GET_PRIVATE(o) (EMPATHY_CONTACT_BLOCKING_DIALOG (o)->priv)
-#define DECLARE_CALLBACK(func) \
- static void func (GObject *, GAsyncResult *, gpointer);
-
-G_DEFINE_TYPE (EmpathyContactBlockingDialog, empathy_contact_blocking_dialog,
- GTK_TYPE_DIALOG);
-
-struct _EmpathyContactBlockingDialogPrivate
-{
- guint block_account_changed;
-
- GtkListStore *blocked_contacts;
- GtkListStore *completion_contacts;
- GtkTreeSelection *selection;
-
- GtkWidget *account_chooser;
- GtkWidget *add_button;
- GtkWidget *add_contact_entry;
- GtkWidget *info_bar;
- GtkWidget *info_bar_label;
- GtkWidget *remove_button;
-
- TpConnection *current_conn;
-};
-
-enum /* blocked-contacts columns */
-{
- COL_BLOCKED_IDENTIFIER,
- COL_BLOCKED_CONTACT,
- N_BLOCKED_COLUMNS
-};
-
-enum /* completion_contacts columns */
-{
- COL_COMPLETION_IDENTIFIER,
- COL_COMPLETION_TEXT,
- N_COMPLETION_COLUMNS
-};
-
-static const char *
-get_pretty_conn_name (TpConnection *conn)
-{
- return tp_proxy_get_object_path (conn) + strlen (TP_CONN_OBJECT_PATH_BASE);
-}
-
-static void
-contact_blocking_dialog_filter_account_chooser (TpAccount *account,
- EmpathyAccountChooserFilterResultCallback callback,
- gpointer callback_data,
- gpointer user_data)
-{
- TpConnection *conn = tp_account_get_connection (account);
- gboolean enable;
-
- enable =
- conn != NULL &&
- tp_proxy_has_interface_by_id (conn,
- TP_IFACE_QUARK_CONNECTION_INTERFACE_CONTACT_BLOCKING);
-
- callback (enable, callback_data);
-}
-
-static void contact_blocking_dialog_account_changed (GtkWidget *,
- EmpathyContactBlockingDialog *);
-
-static void
-contact_blocking_dialog_refilter_account_chooser (
- EmpathyContactBlockingDialog *self)
-{
- EmpathyAccountChooser *chooser =
- EMPATHY_ACCOUNT_CHOOSER (self->priv->account_chooser);
- TpConnection *conn;
- gboolean enabled;
-
- DEBUG ("Refiltering account chooser");
-
- /* set the filter to refilter the account chooser */
- self->priv->block_account_changed++;
- empathy_account_chooser_set_filter (chooser,
- contact_blocking_dialog_filter_account_chooser, self);
- self->priv->block_account_changed--;
-
- conn = empathy_account_chooser_get_connection (chooser);
- enabled = (empathy_account_chooser_get_account (chooser) != NULL &&
- conn != NULL &&
- tp_proxy_has_interface_by_id (conn,
- TP_IFACE_QUARK_CONNECTION_INTERFACE_CONTACT_BLOCKING));
-
- if (!enabled)
- DEBUG ("No account selected");
-
- gtk_widget_set_sensitive (self->priv->add_button, enabled);
- gtk_widget_set_sensitive (self->priv->add_contact_entry, enabled);
-
- contact_blocking_dialog_account_changed (self->priv->account_chooser, self);
-}
-
-static void
-contact_blocking_dialog_add_blocked (
- EmpathyContactBlockingDialog *self,
- GPtrArray *blocked)
-{
- EmpathyContactBlockingDialogPrivate *priv = GET_PRIVATE (self);
- guint i;
-
- if (blocked == NULL)
- return;
-
- for (i = 0; i < blocked->len; i++)
- {
- TpContact *contact = g_ptr_array_index (blocked, i);
-
- gtk_list_store_insert_with_values (priv->blocked_contacts, NULL, -1,
- COL_BLOCKED_IDENTIFIER, tp_contact_get_identifier (contact),
- COL_BLOCKED_CONTACT, contact,
- -1);
- }
-}
-
-static void
-blocked_contacts_changed_cb (TpConnection *conn,
- GPtrArray *added,
- GPtrArray *removed,
- EmpathyContactBlockingDialog *self)
-{
- GtkTreeModel *model = GTK_TREE_MODEL (self->priv->blocked_contacts);
- GtkTreeIter iter;
- gboolean valid;
-
- DEBUG ("blocked contacts changed on %s: %u added, %u removed",
- get_pretty_conn_name (conn), added->len, removed->len);
-
- /* add contacts */
- contact_blocking_dialog_add_blocked (self, added);
-
- /* remove contacts */
- valid = gtk_tree_model_get_iter_first (model, &iter);
- while (valid)
- {
- TpContact *contact;
-
- gtk_tree_model_get (model, &iter,
- COL_BLOCKED_CONTACT, &contact,
- -1);
-
- if (tp_g_ptr_array_contains (removed, contact))
- valid = gtk_list_store_remove (self->priv->blocked_contacts, &iter);
- else
- valid = gtk_tree_model_iter_next (model, &iter);
-
- g_object_unref (contact);
- }
-}
-
-static void
-contact_blocking_dialog_connection_status_changed (TpAccount *account,
- guint old_status,
- guint new_status,
- guint reason,
- const char *dbus_reason,
- GHashTable *details,
- EmpathyContactBlockingDialog *self)
-{
- TpConnection *conn = tp_account_get_connection (account);
-
- switch (new_status)
- {
- case TP_CONNECTION_STATUS_DISCONNECTED:
- DEBUG ("Connection %s invalidated", get_pretty_conn_name (conn));
-
- contact_blocking_dialog_refilter_account_chooser (self);
- break;
-
- case TP_CONNECTION_STATUS_CONNECTING:
- break;
-
- case TP_CONNECTION_STATUS_CONNECTED:
- DEBUG ("Connection %s reconnected", get_pretty_conn_name (conn));
-
- contact_blocking_dialog_refilter_account_chooser (self);
- }
-}
-
-static void
-contact_blocking_dialog_am_prepared (GObject *am,
- GAsyncResult *result,
- gpointer user_data)
-{
- EmpathyContactBlockingDialog *self = user_data;
- GList *accounts, *ptr;
- GError *error = NULL;
-
- if (!tp_proxy_prepare_finish (am, result, &error))
- {
- g_critical ("Could not prepare Account Manager: %s", error->message);
- g_error_free (error);
- return;
- }
-
- accounts = tp_account_manager_dup_valid_accounts (TP_ACCOUNT_MANAGER (am));
-
- for (ptr = accounts; ptr != NULL; ptr = ptr->next)
- {
- TpAccount *account = ptr->data;
-
- tp_g_signal_connect_object (account, "status-changed",
- G_CALLBACK (contact_blocking_dialog_connection_status_changed),
- self, 0);
-
- contact_blocking_dialog_refilter_account_chooser (self);
- }
-
- g_list_free_full (accounts, g_object_unref);
-}
-
-static void
-contact_blocking_dialog_set_error (EmpathyContactBlockingDialog *self,
- const GError *error)
-{
- const char *msg = NULL;
-
- if (error->domain == TP_ERROR)
- {
- if (error->code == TP_ERROR_INVALID_HANDLE)
- msg = _("Unknown or invalid identifier");
- else if (error->code == TP_ERROR_NOT_AVAILABLE)
- msg = _("Contact blocking temporarily unavailable");
- else if (error->code == TP_ERROR_NOT_CAPABLE)
- msg = _("Contact blocking unavailable");
- else if (error->code == TP_ERROR_PERMISSION_DENIED)
- msg = _("Permission Denied");
- }
-
- if (msg == NULL)
- msg = _("Could not block contact");
-
- gtk_label_set_text (GTK_LABEL (self->priv->info_bar_label), msg);
- gtk_widget_show (self->priv->info_bar);
-}
-
-static void
-block_cb (GObject *source,
- GAsyncResult *result,
- gpointer user_data)
-{
- EmpathyContactBlockingDialog *self = user_data;
- GError *error = NULL;
-
- if (!tp_contact_block_finish (TP_CONTACT (source), result,
- &error))
- {
- DEBUG ("Error blocking contacts: %s", error->message);
-
- contact_blocking_dialog_set_error (
- EMPATHY_CONTACT_BLOCKING_DIALOG (self), error);
-
- g_error_free (error);
- return;
- }
-
- DEBUG ("Contact blocked");
-}
-
-static void
-block_contact_got_contact (GObject *source,
- GAsyncResult *result,
- gpointer user_data)
-{
- EmpathyContactBlockingDialog *self;
- TpConnection *conn = TP_CONNECTION (source);
- TpWeakRef *wr = user_data;
- TpContact *contact;
- GError *error = NULL;
-
- self = tp_weak_ref_dup_object (wr);
- if (self == NULL)
- goto finally;
-
- contact = tp_connection_dup_contact_by_id_finish (conn, result, &error);
- if (contact == NULL)
- {
- DEBUG ("Error getting contact on %s: %s",
- get_pretty_conn_name (conn), error->message);
-
- contact_blocking_dialog_set_error (
- EMPATHY_CONTACT_BLOCKING_DIALOG (self), error);
-
- g_error_free (error);
- goto finally;
- }
-
- tp_contact_block_async (contact, FALSE, block_cb, self);
- g_object_unref (contact);
-
-finally:
- g_clear_object (&self);
- tp_weak_ref_destroy (wr);
-}
-
-static void
-contact_blocking_dialog_add_contact (GtkWidget *widget,
- EmpathyContactBlockingDialog *self)
-{
- TpConnection *conn = empathy_account_chooser_get_connection (
- EMPATHY_ACCOUNT_CHOOSER (self->priv->account_chooser));
- const char *identifier;
-
- identifier = gtk_entry_get_text (
- GTK_ENTRY (self->priv->add_contact_entry));
-
- DEBUG ("Looking up handle for '%s' on %s",
- identifier, get_pretty_conn_name (conn));
-
- tp_connection_dup_contact_by_id_async (conn, identifier,
- 0, NULL, block_contact_got_contact,
- tp_weak_ref_new (self, NULL, NULL));
-
- gtk_entry_set_text (GTK_ENTRY (self->priv->add_contact_entry), "");
- gtk_widget_hide (self->priv->info_bar);
-}
-
-static void
-unblock_cb (GObject *source,
- GAsyncResult *result,
- gpointer user_data)
-{
- EmpathyContactBlockingDialog *self = user_data;
- GError *error = NULL;
-
- if (!tp_connection_unblock_contacts_finish (TP_CONNECTION (source), result,
- &error))
- {
- DEBUG ("Error unblocking contacts: %s", error->message);
-
- contact_blocking_dialog_set_error (
- EMPATHY_CONTACT_BLOCKING_DIALOG (self), error);
-
- g_error_free (error);
- return;
- }
-
- DEBUG ("Contacts unblocked");
-}
-
-static void
-contact_blocking_dialog_remove_contacts (GtkWidget *button,
- EmpathyContactBlockingDialog *self)
-{
- TpConnection *conn = empathy_account_chooser_get_connection (
- EMPATHY_ACCOUNT_CHOOSER (self->priv->account_chooser));
- GtkTreeModel *model;
- GList *rows, *ptr;
- GPtrArray *contacts;
-
- rows = gtk_tree_selection_get_selected_rows (self->priv->selection, &model);
-
- contacts = g_ptr_array_new_with_free_func (g_object_unref);
-
- for (ptr = rows; ptr != NULL; ptr = ptr->next)
- {
- GtkTreePath *path = ptr->data;
- GtkTreeIter iter;
- TpContact *contact;
-
- if (!gtk_tree_model_get_iter (model, &iter, path))
- continue;
-
- gtk_tree_model_get (model, &iter,
- COL_BLOCKED_CONTACT, &contact,
- -1);
-
- g_ptr_array_add (contacts, contact);
-
- gtk_tree_path_free (path);
- }
-
- g_list_free (rows);
-
- if (contacts->len > 0)
- {
- DEBUG ("Unblocking %u contacts", contacts->len);
-
- tp_connection_unblock_contacts_async (conn, contacts->len,
- (TpContact * const *) contacts->pdata, unblock_cb, self);
- }
-
- g_ptr_array_unref (contacts);
-}
-
-static void
-contact_blocking_dialog_account_changed (GtkWidget *account_chooser,
- EmpathyContactBlockingDialog *self)
-{
- TpConnection *conn = empathy_account_chooser_get_connection (
- EMPATHY_ACCOUNT_CHOOSER (account_chooser));
- GPtrArray *blocked;
- GPtrArray *members;
- guint i;
-
- if (self->priv->block_account_changed > 0)
- return;
-
- if (conn == self->priv->current_conn)
- return;
-
- /* clear the lists of contacts */
- gtk_list_store_clear (self->priv->blocked_contacts);
- gtk_list_store_clear (self->priv->completion_contacts);
-
- if (self->priv->current_conn != NULL)
- {
- g_signal_handlers_disconnect_by_func (self->priv->current_conn,
- blocked_contacts_changed_cb, self);
-
- g_clear_object (&self->priv->current_conn);
- }
-
- if (conn == NULL)
- return;
-
- DEBUG ("Account changed: %s", get_pretty_conn_name (conn));
-
- self->priv->current_conn = g_object_ref (conn);
-
- tp_g_signal_connect_object (conn, "blocked-contacts-changed",
- G_CALLBACK (blocked_contacts_changed_cb), self, 0);
-
- blocked = tp_connection_get_blocked_contacts (conn);
-
- DEBUG ("%u contacts blocked on %s",
- blocked != NULL ? blocked->len : 0, get_pretty_conn_name (conn));
-
- contact_blocking_dialog_add_blocked (self, blocked);
-
- DEBUG ("Loading contacts");
-
- members = tp_connection_dup_contact_list (conn);
-
- for (i = 0; i < members->len; i++)
- {
- TpContact *contact = g_ptr_array_index (members, i);
- gchar *tmpstr;
-
- tmpstr = g_strdup_printf ("%s (%s)",
- tp_contact_get_alias (contact),
- tp_contact_get_identifier (contact));
-
- gtk_list_store_insert_with_values (self->priv->completion_contacts,
- NULL, -1,
- COL_COMPLETION_IDENTIFIER, tp_contact_get_identifier (contact),
- COL_COMPLETION_TEXT, tmpstr,
- -1);
-
- g_free (tmpstr);
- }
-
- g_ptr_array_unref (members);
-}
-
-static void
-contact_blocking_dialog_view_selection_changed (GtkTreeSelection *selection,
- EmpathyContactBlockingDialog *self)
-{
- GList *rows = gtk_tree_selection_get_selected_rows (selection, NULL);
-
- /* update the sensitivity of the remove button */
- gtk_widget_set_sensitive (self->priv->remove_button, rows != NULL);
-
- g_list_foreach (rows, (GFunc) gtk_tree_path_free, NULL);
- g_list_free (rows);
-}
-
-static gboolean
-contact_selector_dialog_match_func (GtkEntryCompletion *completion,
- const gchar *key,
- GtkTreeIter *iter,
- gpointer user_data)
-{
- GtkTreeModel *model;
- gchar *str, *lower;
- gboolean v = FALSE;
-
- model = gtk_entry_completion_get_model (completion);
- if (model == NULL || iter == NULL)
- return FALSE;
-
- gtk_tree_model_get (model, iter, COL_COMPLETION_TEXT, &str, -1);
- lower = g_utf8_strdown (str, -1);
- if (strstr (lower, key))
- {
- DEBUG ("Key %s is matching name **%s**", key, str);
- v = TRUE;
- goto out;
- }
- g_free (str);
- g_free (lower);
-
- gtk_tree_model_get (model, iter, COL_COMPLETION_IDENTIFIER, &str, -1);
- lower = g_utf8_strdown (str, -1);
- if (strstr (lower, key))
- {
- DEBUG ("Key %s is matching ID **%s**", key, str);
- v = TRUE;
- goto out;
- }
-
-out:
- g_free (str);
- g_free (lower);
-
- return v;
-}
-
-static gboolean
-contact_selector_dialog_match_selected_cb (GtkEntryCompletion *widget,
- GtkTreeModel *model,
- GtkTreeIter *iter,
- EmpathyContactBlockingDialog *self)
-{
- gchar *id;
-
- if (iter == NULL || model == NULL)
- return FALSE;
-
- gtk_tree_model_get (model, iter, COL_COMPLETION_IDENTIFIER, &id, -1);
- gtk_entry_set_text (GTK_ENTRY (self->priv->add_contact_entry), id);
-
- DEBUG ("Got selected match **%s**", id);
-
- g_free (id);
-
- return TRUE;
-}
-
-static void
-contact_blocking_dialog_dispose (GObject *self)
-{
- EmpathyContactBlockingDialogPrivate *priv = GET_PRIVATE (self);
-
- g_clear_object (&priv->current_conn);
-
- G_OBJECT_CLASS (empathy_contact_blocking_dialog_parent_class)->dispose (self);
-}
-
-static void
-empathy_contact_blocking_dialog_class_init (
- EmpathyContactBlockingDialogClass *klass)
-{
- GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
-
- gobject_class->dispose = contact_blocking_dialog_dispose;
-
- g_type_class_add_private (gobject_class,
- sizeof (EmpathyContactBlockingDialogPrivate));
-}
-
-static void
-empathy_contact_blocking_dialog_init (EmpathyContactBlockingDialog *self)
-{
- GtkBuilder *gui;
- char *filename;
- GtkWidget *contents;
- GtkWidget *account_hbox, *blocked_contacts_view, *blocked_contacts_sw,
- *remove_toolbar;
- GtkEntryCompletion *completion;
- TpAccountManager *am;
- GtkStyleContext *context;
- TpSimpleClientFactory *factory;
-
- self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self,
- EMPATHY_TYPE_CONTACT_BLOCKING_DIALOG,
- EmpathyContactBlockingDialogPrivate);
-
- gtk_window_set_title (GTK_WINDOW (self), _("Edit Blocked Contacts"));
- gtk_dialog_add_button (GTK_DIALOG (self),
- GTK_STOCK_CLOSE, GTK_RESPONSE_CLOSE);
-
- filename = empathy_file_lookup ("empathy-contact-blocking-dialog.ui",
- "libempathy-gtk");
-
- gui = tpaw_builder_get_file (filename,
- "contents", &contents,
- "account-hbox", &account_hbox,
- "add-button", &self->priv->add_button,
- "add-contact-entry", &self->priv->add_contact_entry,
- "blocked-contacts", &self->priv->blocked_contacts,
- "blocked-contacts-sw", &blocked_contacts_sw,
- "blocked-contacts-view", &blocked_contacts_view,
- "remove-button", &self->priv->remove_button,
- "remove-toolbar", &remove_toolbar,
- NULL);
-
- tpaw_builder_connect (gui, self,
- "add-button", "clicked", contact_blocking_dialog_add_contact,
- "add-contact-entry", "activate", contact_blocking_dialog_add_contact,
- "remove-button", "clicked", contact_blocking_dialog_remove_contacts,
- NULL);
-
- /* join the remove toolbar to the treeview */
- context = gtk_widget_get_style_context (blocked_contacts_sw);
- gtk_style_context_set_junction_sides (context, GTK_JUNCTION_BOTTOM);
- context = gtk_widget_get_style_context (remove_toolbar);
- gtk_style_context_set_junction_sides (context, GTK_JUNCTION_TOP);
-
- /* add the contents to the dialog */
- gtk_container_add (
- GTK_CONTAINER (gtk_dialog_get_content_area (GTK_DIALOG (self))),
- contents);
- gtk_widget_show (contents);
-
- /* set up the tree selection */
- self->priv->selection = gtk_tree_view_get_selection (
- GTK_TREE_VIEW (blocked_contacts_view));
- gtk_tree_selection_set_mode (self->priv->selection, GTK_SELECTION_MULTIPLE);
- g_signal_connect (self->priv->selection, "changed",
- G_CALLBACK (contact_blocking_dialog_view_selection_changed), self);
-
- /* build the contact entry */
- self->priv->completion_contacts = gtk_list_store_new (N_COMPLETION_COLUMNS,
- G_TYPE_STRING, /* id */
- G_TYPE_STRING, /* text */
- TP_TYPE_CONTACT); /* contact */
-
- completion = gtk_entry_completion_new ();
- gtk_entry_completion_set_model (completion,
- GTK_TREE_MODEL (self->priv->completion_contacts));
- gtk_entry_completion_set_text_column (completion, COL_COMPLETION_TEXT);
- gtk_entry_completion_set_match_func (completion,
- contact_selector_dialog_match_func,
- NULL, NULL);
- g_signal_connect (completion, "match-selected",
- G_CALLBACK (contact_selector_dialog_match_selected_cb),
- self);
- gtk_entry_set_completion (GTK_ENTRY (self->priv->add_contact_entry),
- completion);
- g_object_unref (completion);
- g_object_unref (self->priv->completion_contacts);
-
- /* add the account chooser */
- self->priv->account_chooser = empathy_account_chooser_new ();
- contact_blocking_dialog_refilter_account_chooser (self);
- g_signal_connect (self->priv->account_chooser, "changed",
- G_CALLBACK (contact_blocking_dialog_account_changed), self);
-
- gtk_box_pack_start (GTK_BOX (account_hbox), self->priv->account_chooser,
- TRUE, TRUE, 0);
- gtk_widget_show (self->priv->account_chooser);
-
- /* add an error warning info bar */
- self->priv->info_bar = gtk_info_bar_new ();
- gtk_box_pack_start (GTK_BOX (contents), self->priv->info_bar, FALSE, TRUE, 0);
- gtk_info_bar_set_message_type (GTK_INFO_BAR (self->priv->info_bar),
- GTK_MESSAGE_ERROR);
-
- self->priv->info_bar_label = gtk_label_new ("");
- gtk_container_add (GTK_CONTAINER (
- gtk_info_bar_get_content_area (GTK_INFO_BAR (self->priv->info_bar))),
- self->priv->info_bar_label);
- gtk_widget_show (self->priv->info_bar_label);
-
- /* prepare the account manager */
- am = tp_account_manager_dup ();
-
- factory = tp_proxy_get_factory (am);
- tp_simple_client_factory_add_connection_features_varargs (factory,
- TP_CONNECTION_FEATURE_CONTACT_BLOCKING, NULL);
-
- tp_proxy_prepare_async (am, NULL, contact_blocking_dialog_am_prepared, self);
- g_object_unref (am);
-
- g_free (filename);
- g_object_unref (gui);
-}
-
-GtkWidget *
-empathy_contact_blocking_dialog_new (GtkWindow *parent)
-{
- GtkWidget *self = g_object_new (EMPATHY_TYPE_CONTACT_BLOCKING_DIALOG,
- NULL);
-
- if (parent != NULL)
- {
- gtk_window_set_transient_for (GTK_WINDOW (self), parent);
- }
-
- return self;
-}
diff --git a/libempathy-gtk/empathy-contact-blocking-dialog.h b/libempathy-gtk/empathy-contact-blocking-dialog.h
deleted file mode 100644
index 96451c6c..00000000
--- a/libempathy-gtk/empathy-contact-blocking-dialog.h
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * empathy-contact-blocking-dialog.h
- *
- * EmpathyContactBlockingDialog
- *
- * Copyright (C) 2011 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: Danielle Madeley <danielle.madeley@collabora.co.uk>
- */
-
-#ifndef __EMPATHY_CONTACT_BLOCKING_DIALOG_H__
-#define __EMPATHY_CONTACT_BLOCKING_DIALOG_H__
-
-#include <gtk/gtk.h>
-
-G_BEGIN_DECLS
-
-#define EMPATHY_TYPE_CONTACT_BLOCKING_DIALOG (empathy_contact_blocking_dialog_get_type ())
-#define EMPATHY_CONTACT_BLOCKING_DIALOG(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), EMPATHY_TYPE_CONTACT_BLOCKING_DIALOG, EmpathyContactBlockingDialog))
-#define EMPATHY_CONTACT_BLOCKING_DIALOG_CLASS(obj) (G_TYPE_CHECK_CLASS_CAST ((obj), EMPATHY_TYPE_CONTACT_BLOCKING_DIALOG, EmpathyContactBlockingDialogClass))
-#define EMPATHY_IS_CONTACT_BLOCKING_DIALOG(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), EMPATHY_TYPE_CONTACT_BLOCKING_DIALOG))
-#define EMPATHY_IS_CONTACT_BLOCKING_DIALOG_CLASS(obj) (G_TYPE_CHECK_CLASS_TYPE ((obj), EMPATHY_TYPE_CONTACT_BLOCKING_DIALOG))
-#define EMPATHY_CONTACT_BLOCKING_DIALOG_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), EMPATHY_TYPE_CONTACT_BLOCKING_DIALOG, EmpathyContactBlockingDialogClass))
-
-typedef struct _EmpathyContactBlockingDialog EmpathyContactBlockingDialog;
-typedef struct _EmpathyContactBlockingDialogClass EmpathyContactBlockingDialogClass;
-typedef struct _EmpathyContactBlockingDialogPrivate EmpathyContactBlockingDialogPrivate;
-
-struct _EmpathyContactBlockingDialog
-{
- GtkDialog parent;
- EmpathyContactBlockingDialogPrivate *priv;
-};
-
-struct _EmpathyContactBlockingDialogClass
-{
- GtkDialogClass parent_class;
-};
-
-GType empathy_contact_blocking_dialog_get_type (void);
-
-GtkWidget *empathy_contact_blocking_dialog_new (GtkWindow *parent);
-
-G_END_DECLS
-
-#endif
diff --git a/libempathy-gtk/empathy-contact-blocking-dialog.ui b/libempathy-gtk/empathy-contact-blocking-dialog.ui
deleted file mode 100644
index 35dd1c31..00000000
--- a/libempathy-gtk/empathy-contact-blocking-dialog.ui
+++ /dev/null
@@ -1,146 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<interface>
- <requires lib="gtk+" version="2.16"/>
- <!-- interface-naming-policy project-wide -->
- <object class="GtkListStore" id="blocked-contacts">
- <columns>
- <!-- column-name identifier -->
- <column type="gchararray"/>
- <!-- column-name contact -->
- <column type="TpContact"/>
- </columns>
- </object>
- <object class="GtkVBox" id="contents">
- <property name="visible">True</property>
- <property name="border_width">6</property>
- <property name="spacing">6</property>
- <child>
- <object class="GtkHBox" id="account-hbox">
- <property name="visible">True</property>
- <property name="spacing">6</property>
- <child>
- <object class="GtkLabel" id="label1">
- <property name="visible">True</property>
- <property name="xalign">0</property>
- <property name="label" translatable="yes">Account:</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <placeholder/>
- </child>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkVBox" id="blocked-contacts-vbox">
- <property name="visible">True</property>
- <child>
- <object class="GtkScrolledWindow" id="blocked-contacts-sw">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="hscrollbar_policy">never</property>
- <property name="vscrollbar_policy">automatic</property>
- <property name="shadow_type">etched-in</property>
- <property name="width_request">408</property>
- <property name="height_request">252</property>
- <child>
- <object class="GtkTreeView" id="blocked-contacts-view">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="model">blocked-contacts</property>
- <property name="headers_clickable">False</property>
- <property name="search_column">0</property>
- <child>
- <object class="GtkTreeViewColumn" id="treeviewcolumn1">
- <property name="title" translatable="yes">Blocked Contacts</property>
- <property name="sort_indicator">True</property>
- <property name="sort_column_id">0</property>
- <child>
- <object class="GtkCellRendererText" id="cellrenderertext1"/>
- <attributes>
- <attribute name="text">0</attribute>
- </attributes>
- </child>
- </object>
- </child>
- </object>
- </child>
- </object>
- <packing>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkToolbar" id="remove-toolbar">
- <property name="visible">True</property>
- <property name="icon_size">1</property>
- <style>
- <class name="inline-toolbar"/>
- </style>
- <child>
- <object class="GtkToolButton" id="remove-button">
- <property name="tooltip-text" translatable="yes">Remove</property>
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="receives_default">True</property>
- <property name="icon_name">list-remove-symbolic</property>
- <property name="use_underline">True</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="homogeneous">True</property>
- </packing>
- </child>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">1</property>
- </packing>
- </child>
- </object>
- <packing>
- <property name="position">1</property>
- </packing>
- </child>
- <child>
- <object class="GtkHBox" id="add-contact-hbox">
- <property name="visible">True</property>
- <property name="spacing">6</property>
- <child>
- <object class="GtkEntry" id="add-contact-entry">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- </object>
- <packing>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkButton" id="add-button">
- <property name="label">gtk-add</property>
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="receives_default">True</property>
- <property name="use_stock">True</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="position">1</property>
- </packing>
- </child>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="position">2</property>
- </packing>
- </child>
- </object>
-</interface>
diff --git a/libempathy-gtk/empathy-contact-chooser.c b/libempathy-gtk/empathy-contact-chooser.c
deleted file mode 100644
index e31b22fe..00000000
--- a/libempathy-gtk/empathy-contact-chooser.c
+++ /dev/null
@@ -1,494 +0,0 @@
-/*
- * empathy-contact-chooser.c
- *
- * EmpathyContactChooser
- *
- * (c) 2009, Collabora Ltd.
- *
- * Authors:
- * Danielle Madeley <danielle.madeley@collabora.co.uk>
- */
-
-#include "config.h"
-#include "empathy-contact-chooser.h"
-
-#include "empathy-client-factory.h"
-#include "empathy-individual-store-manager.h"
-#include "empathy-individual-view.h"
-#include "empathy-ui-utils.h"
-#include "empathy-utils.h"
-
-G_DEFINE_TYPE (EmpathyContactChooser,
- empathy_contact_chooser, GTK_TYPE_BOX);
-
-enum {
- SIG_SELECTION_CHANGED,
- SIG_ACTIVATE,
- LAST_SIGNAL
-};
-
-static guint signals[LAST_SIGNAL];
-
-typedef struct _AddTemporaryIndividualCtx AddTemporaryIndividualCtx;
-
-struct _EmpathyContactChooserPrivate
-{
- TpAccountManager *account_mgr;
-
- EmpathyIndividualStore *store;
- EmpathyIndividualView *view;
- GtkWidget *search_entry;
- GtkWidget *scroll_view;
-
- GPtrArray *search_words;
- gchar *search_str;
-
- /* Context representing the FolksIndividual which are added because of the
- * current search from the user. */
- AddTemporaryIndividualCtx *add_temp_ctx;
-
- EmpathyContactChooserFilterFunc filter_func;
- gpointer filter_data;
-
- /* list of reffed TpContact */
- GList *tp_contacts;
-};
-
-struct _AddTemporaryIndividualCtx
-{
- EmpathyContactChooser *self;
- /* List of owned FolksIndividual */
- GList *individuals;
-};
-
-static AddTemporaryIndividualCtx *
-add_temporary_individual_ctx_new (EmpathyContactChooser *self)
-{
- AddTemporaryIndividualCtx *ctx = g_slice_new0 (AddTemporaryIndividualCtx);
-
- ctx->self = self;
- return ctx;
-}
-
-static void
-add_temporary_individual_ctx_free (AddTemporaryIndividualCtx *ctx)
-{
- GList *l;
-
- /* Remove all the individuals from the model */
- for (l = ctx->individuals; l != NULL; l = g_list_next (l))
- {
- FolksIndividual *individual = l->data;
-
- individual_store_remove_individual_and_disconnect (ctx->self->priv->store,
- individual);
-
- g_object_unref (individual);
- }
-
- g_list_free (ctx->individuals);
- g_slice_free (AddTemporaryIndividualCtx, ctx);
-}
-
-static void
-contact_chooser_dispose (GObject *object)
-{
- EmpathyContactChooser *self = (EmpathyContactChooser *)
- object;
-
- tp_clear_pointer (&self->priv->add_temp_ctx,
- add_temporary_individual_ctx_free);
-
- tp_clear_object (&self->priv->store);
- tp_clear_pointer (&self->priv->search_words, g_ptr_array_unref);
- tp_clear_pointer (&self->priv->search_str, g_free);
-
- tp_clear_object (&self->priv->account_mgr);
-
- g_list_free_full (self->priv->tp_contacts, g_object_unref);
- self->priv->tp_contacts = NULL;
-
- G_OBJECT_CLASS (empathy_contact_chooser_parent_class)->dispose (
- object);
-}
-
-static void
-empathy_contact_chooser_class_init (
- EmpathyContactChooserClass *klass)
-{
- GObjectClass *object_class = G_OBJECT_CLASS (klass);
-
- object_class->dispose = contact_chooser_dispose;
-
- g_type_class_add_private (object_class,
- sizeof (EmpathyContactChooserPrivate));
-
- signals[SIG_SELECTION_CHANGED] = g_signal_new ("selection-changed",
- G_TYPE_FROM_CLASS (klass),
- G_SIGNAL_RUN_LAST,
- 0,
- NULL, NULL,
- g_cclosure_marshal_generic,
- G_TYPE_NONE,
- 1, FOLKS_TYPE_INDIVIDUAL);
-
- signals[SIG_ACTIVATE] = g_signal_new ("activate",
- G_TYPE_FROM_CLASS (klass),
- G_SIGNAL_RUN_LAST,
- 0,
- NULL, NULL,
- g_cclosure_marshal_generic,
- G_TYPE_NONE,
- 0);
-}
-
-static void
-view_selection_changed_cb (GtkWidget *treeview,
- EmpathyContactChooser *self)
-{
- FolksIndividual *individual;
-
- individual = empathy_individual_view_dup_selected (self->priv->view);
-
- g_signal_emit (self, signals[SIG_SELECTION_CHANGED], 0, individual);
-
- tp_clear_object (&individual);
-}
-
-static gboolean
-filter_func (GtkTreeModel *model,
- GtkTreeIter *iter,
- gpointer user_data)
-{
- EmpathyContactChooser *self = user_data;
- FolksIndividual *individual;
- gboolean is_online;
- gboolean display = FALSE;
- gboolean searching = FALSE;
-
- gtk_tree_model_get (model, iter,
- EMPATHY_INDIVIDUAL_STORE_COL_INDIVIDUAL, &individual,
- EMPATHY_INDIVIDUAL_STORE_COL_IS_ONLINE, &is_online,
- -1);
-
- if (individual == NULL)
- goto out;
-
- if (self->priv->search_words != NULL)
- {
- searching = TRUE;
-
- /* Filter out the contact if we are searching and it doesn't match */
- if (!empathy_individual_match_string (individual,
- self->priv->search_str, self->priv->search_words))
- goto out;
- }
-
- if (self->priv->filter_func == NULL)
- display = TRUE;
- else
- display = self->priv->filter_func (self, individual, is_online, searching,
- self->priv->filter_data);
-out:
- tp_clear_object (&individual);
- return display;
-}
-
-static void
-contact_capabilities_changed (TpContact *contact,
- GParamSpec *pspec,
- EmpathyContactChooser *self)
-{
- empathy_individual_view_refilter (self->priv->view);
-}
-
-static void
-get_contacts_cb (GObject *source,
- GAsyncResult *result,
- gpointer user_data)
-{
- TpWeakRef *wr = user_data;
- AddTemporaryIndividualCtx *ctx;
- EmpathyContactChooser *self;
- GError *error = NULL;
- FolksIndividual *individual;
- TpContact *contact;
- EmpathyContact *emp_contact;
-
- self = tp_weak_ref_dup_object (wr);
- if (self == NULL)
- goto out;
-
- ctx = tp_weak_ref_get_user_data (wr);
-
- emp_contact = empathy_client_factory_dup_contact_by_id_finish (
- EMPATHY_CLIENT_FACTORY (source), result, &error);
- if (emp_contact == NULL)
- goto out;
-
- contact = empathy_contact_get_tp_contact (emp_contact);
-
- if (self->priv->add_temp_ctx != ctx)
- /* another request has been started */
- goto out;
-
- individual = empathy_create_individual_from_tp_contact (contact);
- if (individual == NULL)
- goto out;
-
- /* tp-glib will unref the TpContact once we return from this callback
- * but folks expect us to keep a reference on the TpContact.
- * Ideally folks shouldn't force us to do that: bgo #666580 */
- self->priv->tp_contacts = g_list_prepend (self->priv->tp_contacts,
- g_object_ref (contact));
-
- /* listen for updates to the capabilities */
- tp_g_signal_connect_object (contact, "notify::capabilities",
- G_CALLBACK (contact_capabilities_changed), self, 0);
-
- /* Pass ownership to the list */
- ctx->individuals = g_list_prepend (ctx->individuals, individual);
-
- individual_store_add_individual_and_connect (self->priv->store, individual);
-
- /* if nothing is selected, select the first matching node */
- if (!gtk_tree_selection_get_selected (
- gtk_tree_view_get_selection (GTK_TREE_VIEW (self->priv->view)),
- NULL, NULL))
- empathy_individual_view_select_first (self->priv->view);
-
-out:
- g_clear_object (&emp_contact);
- g_clear_object (&self);
- tp_weak_ref_destroy (wr);
-}
-
-static void
-add_temporary_individuals (EmpathyContactChooser *self,
- const gchar *id)
-{
- GList *accounts, *l;
-
- tp_clear_pointer (&self->priv->add_temp_ctx,
- add_temporary_individual_ctx_free);
-
- if (tp_str_empty (id))
- return;
-
- self->priv->add_temp_ctx = add_temporary_individual_ctx_new (self);
-
- /* Try to add an individual for each connected account */
- accounts = tp_account_manager_dup_valid_accounts (self->priv->account_mgr);
- for (l = accounts; l != NULL; l = g_list_next (l))
- {
- TpAccount *account = l->data;
- TpConnection *conn;
- EmpathyClientFactory *factory;
-
- conn = tp_account_get_connection (account);
- if (conn == NULL)
- continue;
-
- factory = empathy_client_factory_dup ();
-
- empathy_client_factory_dup_contact_by_id_async (factory, conn, id,
- get_contacts_cb,
- tp_weak_ref_new (self, self->priv->add_temp_ctx, NULL));
-
- g_object_unref (factory);
- }
-
- g_list_free_full (accounts, g_object_unref);
-}
-
-static void
-search_text_changed (GtkEntry *entry,
- EmpathyContactChooser *self)
-{
- const gchar *id;
-
- tp_clear_pointer (&self->priv->search_words, g_ptr_array_unref);
- tp_clear_pointer (&self->priv->search_str, g_free);
-
- id = gtk_entry_get_text (entry);
-
- self->priv->search_words = tpaw_live_search_strip_utf8_string (id);
- self->priv->search_str = g_strdup (id);
-
- add_temporary_individuals (self, id);
-
- empathy_individual_view_refilter (self->priv->view);
-}
-
-static void
-search_activate_cb (GtkEntry *entry,
- EmpathyContactChooser *self)
-{
- g_signal_emit (self, signals[SIG_ACTIVATE], 0);
-}
-
-static void
-view_activate_cb (GtkTreeView *view,
- GtkTreePath *path,
- GtkTreeViewColumn *column,
- EmpathyContactChooser *self)
-{
- g_signal_emit (self, signals[SIG_ACTIVATE], 0);
-}
-
-static gboolean
-search_key_press_cb (GtkEntry *entry,
- GdkEventKey *event,
- EmpathyContactChooser *self)
-{
- GtkTreeSelection *selection;
- GtkTreeModel *model;
- GtkTreeIter iter;
-
- if (event->state != 0)
- return FALSE;
-
- switch (event->keyval)
- {
- case GDK_KEY_Down:
- case GDK_KEY_KP_Down:
- case GDK_KEY_Up:
- case GDK_KEY_KP_Up:
- break;
-
- default:
- return FALSE;
- }
-
- selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (self->priv->view));
-
- if (!gtk_tree_selection_get_selected (selection, &model, &iter))
- return TRUE;
-
- switch (event->keyval)
- {
- case GDK_KEY_Down:
- case GDK_KEY_KP_Down:
- if (!gtk_tree_model_iter_next (model, &iter))
- return TRUE;
-
- break;
-
- case GDK_KEY_Up:
- case GDK_KEY_KP_Up:
- if (!gtk_tree_model_iter_previous (model, &iter))
- return TRUE;
-
- break;
-
- default:
- g_assert_not_reached ();
- }
-
- gtk_tree_selection_select_iter (selection, &iter);
-
- return TRUE;
-}
-
-static void
-empathy_contact_chooser_init (EmpathyContactChooser *self)
-{
- EmpathyIndividualManager *mgr;
- GtkTreeSelection *selection;
- GQuark features[] = { TP_ACCOUNT_MANAGER_FEATURE_CORE, 0 };
-
- self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, EMPATHY_TYPE_CONTACT_CHOOSER,
- EmpathyContactChooserPrivate);
-
- self->priv->account_mgr = tp_account_manager_dup ();
-
- /* We don't wait for the CORE feature to be prepared, which is fine as we
- * won't use the account manager until user starts searching. Furthermore,
- * the AM has probably already been prepared by another Empathy
- * component. */
- tp_proxy_prepare_async (self->priv->account_mgr, features, NULL, NULL);
-
- /* Search entry */
- self->priv->search_entry = gtk_entry_new ();
- gtk_box_pack_start (GTK_BOX (self), self->priv->search_entry, FALSE, TRUE, 6);
- gtk_widget_show (self->priv->search_entry);
-
- g_signal_connect (self->priv->search_entry, "changed",
- G_CALLBACK (search_text_changed), self);
- g_signal_connect (self->priv->search_entry, "activate",
- G_CALLBACK (search_activate_cb), self);
- g_signal_connect (self->priv->search_entry, "key-press-event",
- G_CALLBACK (search_key_press_cb), self);
-
- /* Add the treeview */
- mgr = empathy_individual_manager_dup_singleton ();
- self->priv->store = EMPATHY_INDIVIDUAL_STORE (
- empathy_individual_store_manager_new (mgr));
- g_object_unref (mgr);
-
- empathy_individual_store_set_show_groups (self->priv->store, FALSE);
-
- self->priv->view = empathy_individual_view_new (self->priv->store,
- EMPATHY_INDIVIDUAL_VIEW_FEATURE_NONE, EMPATHY_INDIVIDUAL_FEATURE_NONE);
-
- empathy_individual_view_set_custom_filter (self->priv->view,
- filter_func, self);
-
- selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (self->priv->view));
-
- g_signal_connect (selection, "changed",
- G_CALLBACK (view_selection_changed_cb), self);
- g_signal_connect (self->priv->view, "row-activated",
- G_CALLBACK (view_activate_cb), self);
-
- self->priv->scroll_view = gtk_scrolled_window_new (NULL, NULL);
-
- gtk_container_add (GTK_CONTAINER (self->priv->scroll_view),
- GTK_WIDGET (self->priv->view));
-
- gtk_box_pack_start (GTK_BOX (self), self->priv->scroll_view, TRUE, TRUE, 6);
- gtk_widget_show (GTK_WIDGET (self->priv->view));
- gtk_widget_show (self->priv->scroll_view);
-}
-
-GtkWidget *
-empathy_contact_chooser_new (void)
-{
- return g_object_new (EMPATHY_TYPE_CONTACT_CHOOSER,
- "orientation", GTK_ORIENTATION_VERTICAL,
- NULL);
-}
-
-/* Note that because of bgo #666580 the returned invidivdual is valid until
- * @self is destroyed. To keep it around after that, the TpContact associated
- * with the individual needs to be manually reffed. */
-FolksIndividual *
-empathy_contact_chooser_dup_selected (EmpathyContactChooser *self)
-{
- return empathy_individual_view_dup_selected (self->priv->view);
-}
-
-void
-empathy_contact_chooser_set_filter_func (EmpathyContactChooser *self,
- EmpathyContactChooserFilterFunc func,
- gpointer user_data)
-{
- g_assert (self->priv->filter_func == NULL);
-
- self->priv->filter_func = func;
- self->priv->filter_data = user_data;
-}
-
-void
-empathy_contact_chooser_show_search_entry (EmpathyContactChooser *self,
- gboolean show)
-{
- gtk_widget_set_visible (self->priv->search_entry, show);
-}
-
-void
-empathy_contact_chooser_show_tree_view (EmpathyContactChooser *self,
- gboolean show)
-{
- gtk_widget_set_visible (GTK_WIDGET (self->priv->scroll_view), show);
-}
diff --git a/libempathy-gtk/empathy-contact-chooser.h b/libempathy-gtk/empathy-contact-chooser.h
deleted file mode 100644
index fa1c703a..00000000
--- a/libempathy-gtk/empathy-contact-chooser.h
+++ /dev/null
@@ -1,69 +0,0 @@
-/*
- * empathy-contact-chooser.h
- *
- * EmpathyContactChooser
- *
- * (c) 2010, Collabora Ltd.
- *
- * Authors:
- * Guillaume Desmottes <guillaume.desmottes@collabora.com>
- */
-
-#ifndef __EMPATHY_CONTACT_CHOOSER_H__
-#define __EMPATHY_CONTACT_CHOOSER_H__
-
-#include <gtk/gtk.h>
-#include <folks/folks.h>
-
-G_BEGIN_DECLS
-
-#define EMPATHY_TYPE_CONTACT_CHOOSER (empathy_contact_chooser_get_type ())
-#define EMPATHY_CONTACT_CHOOSER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), EMPATHY_TYPE_CONTACT_CHOOSER, EmpathyContactChooser))
-#define EMPATHY_CONTACT_CHOOSER_CLASS(obj) (G_TYPE_CHECK_CLASS_CAST ((obj), EMPATHY_TYPE_CONTACT_CHOOSER, EmpathyContactChooserClass))
-#define EMPATHY_IS_CONTACT_CHOOSER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), EMPATHY_TYPE_CONTACT_CHOOSER))
-#define EMPATHY_IS_CONTACT_CHOOSER_CLASS(obj) (G_TYPE_CHECK_CLASS_TYPE ((obj), EMPATHY_TYPE_CONTACT_CHOOSER))
-#define EMPATHY_CONTACT_CHOOSER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), EMPATHY_TYPE_CONTACT_CHOOSER, EmpathyContactChooserClass))
-
-typedef struct _EmpathyContactChooser EmpathyContactChooser;
-typedef struct _EmpathyContactChooserClass EmpathyContactChooserClass;
-typedef struct _EmpathyContactChooserPrivate EmpathyContactChooserPrivate;
-
-typedef gboolean (*EmpathyContactChooserFilterFunc) (
- EmpathyContactChooser *self,
- FolksIndividual *individual,
- gboolean is_online,
- gboolean searching,
- gpointer user_data);
-
-struct _EmpathyContactChooser
-{
- GtkBox parent;
-
- EmpathyContactChooserPrivate *priv;
-};
-
-struct _EmpathyContactChooserClass
-{
- GtkBoxClass parent_class;
-};
-
-GType empathy_contact_chooser_get_type (void);
-
-GtkWidget * empathy_contact_chooser_new (void);
-
-FolksIndividual * empathy_contact_chooser_dup_selected (
- EmpathyContactChooser *self);
-
-void empathy_contact_chooser_set_filter_func (EmpathyContactChooser *self,
- EmpathyContactChooserFilterFunc func,
- gpointer user_data);
-
-void empathy_contact_chooser_show_search_entry (EmpathyContactChooser *self,
- gboolean show);
-
-void empathy_contact_chooser_show_tree_view (EmpathyContactChooser *self,
- gboolean show);
-
-G_END_DECLS
-
-#endif
diff --git a/libempathy-gtk/empathy-contact-search-dialog.c b/libempathy-gtk/empathy-contact-search-dialog.c
deleted file mode 100644
index e5810597..00000000
--- a/libempathy-gtk/empathy-contact-search-dialog.c
+++ /dev/null
@@ -1,712 +0,0 @@
-/* -*- Mode: C; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/*
- * empathy-contact-search-dialog.c
- *
- * Copyright (C) 2010-2011 Collabora Ltd.
- *
- * The code contained in this file is free software; you can redistribute
- * it and/or modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either version
- * 2.1 of the License, or (at your option) any later version.
- *
- * This file is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this code; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- *
- * Authors:
- * Danielle Madeley <danielle.madeley@collabora.co.uk>
- * Emilio Pozuelo Monfort <emilio.pozuelo@collabora.co.uk>
- */
-
-#include "config.h"
-#include "empathy-contact-search-dialog.h"
-
-#include <glib/gi18n-lib.h>
-
-#include "empathy-account-chooser.h"
-#include "empathy-cell-renderer-activatable.h"
-#include "empathy-cell-renderer-text.h"
-#include "empathy-client-factory.h"
-#include "empathy-images.h"
-#include "empathy-individual-information-dialog.h"
-#include "empathy-utils.h"
-
-#define DEBUG_FLAG EMPATHY_DEBUG_OTHER
-#include "empathy-debug.h"
-
-#include "empathy-contact-search-dialog.h"
-
-#define GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE ((obj), EMPATHY_TYPE_CONTACT_SEARCH_DIALOG, EmpathyContactSearchDialogPrivate))
-
-G_DEFINE_TYPE (EmpathyContactSearchDialog, empathy_contact_search_dialog, GTK_TYPE_DIALOG);
-
-enum
-{
- NAME_COLUMN,
- LOGIN_COLUMN,
- N_COLUMNS
-};
-
-enum {
- PAGE_SEARCH_RESULTS,
- PAGE_NO_MATCH,
- PAGE_NOT_SUPPORTED,
-};
-
-typedef struct _EmpathyContactSearchDialogPrivate EmpathyContactSearchDialogPrivate;
-struct _EmpathyContactSearchDialogPrivate
-{
- TpContactSearch *searcher;
- GtkListStore *store;
-
- GtkWidget *chooser;
- GtkWidget *notebook;
- GtkWidget *tree_view;
- GtkWidget *spinner;
- GtkWidget *add_button;
- GtkWidget *find_button;
- GtkWidget *search_entry;
- /* GtkWidget *server_entry; */
- GtkWidget *message;
- GtkWidget *message_window;
- GtkWidget *message_label;
-};
-
-static void
-empathy_contact_search_dialog_dispose (GObject *self)
-{
- EmpathyContactSearchDialogPrivate *priv = GET_PRIVATE (self);
-
- tp_clear_object (&priv->searcher);
-
- G_OBJECT_CLASS (empathy_contact_search_dialog_parent_class)->dispose (self);
-}
-
-static void
-on_searcher_reset (GObject *source_object,
- GAsyncResult *result,
- gpointer user_data)
-{
- EmpathyContactSearchDialog *self = EMPATHY_CONTACT_SEARCH_DIALOG (user_data);
- EmpathyContactSearchDialogPrivate *priv = GET_PRIVATE (self);
- TpContactSearch *searcher = TP_CONTACT_SEARCH (source_object);
- GError *error = NULL;
- GHashTable *search;
- const gchar *search_criteria;
-
- tp_contact_search_reset_finish (searcher, result, &error);
- if (error != NULL)
- {
- DEBUG ("Failed to reset the TpContactSearch: %s", error->message);
- gtk_notebook_set_current_page (GTK_NOTEBOOK (priv->notebook),
- PAGE_NOT_SUPPORTED);
-
- g_error_free (error);
- return;
- }
-
- gtk_notebook_set_current_page (GTK_NOTEBOOK (priv->notebook),
- PAGE_SEARCH_RESULTS);
-
- search = g_hash_table_new (g_str_hash, g_str_equal);
-
- search_criteria = gtk_entry_get_text (GTK_ENTRY (priv->search_entry));
-
- if (tp_strv_contains (tp_contact_search_get_search_keys (searcher), ""))
- g_hash_table_insert (search, "", (gpointer) search_criteria);
- else
- g_hash_table_insert (search, "fn", (gpointer) search_criteria);
-
- gtk_list_store_clear (priv->store);
- tp_contact_search_start (priv->searcher, search);
-
- g_hash_table_unref (search);
-}
-
-static void
-empathy_contact_search_dialog_do_search (EmpathyContactSearchDialog *self)
-{
- EmpathyContactSearchDialogPrivate *priv = GET_PRIVATE (self);
-
- tp_contact_search_reset_async (priv->searcher,
- NULL, /* gtk_entry_get_text (GTK_ENTRY (priv->server_entry)), */
- 0,
- on_searcher_reset,
- self);
-}
-
-static void
-on_get_contact_factory_get_from_id_cb (GObject *source,
- GAsyncResult *result,
- gpointer user_data)
-{
- gchar *message = user_data;
- GError *error = NULL;
- EmpathyContact *contact;
-
- contact = empathy_client_factory_dup_contact_by_id_finish (
- EMPATHY_CLIENT_FACTORY (source), result, &error);
- if (contact == NULL)
- {
- g_warning ("Error while getting the contact: %s", error->message);
- g_error_free (error);
- goto out;
- }
-
- empathy_contact_add_to_contact_list (contact, message);
- g_object_unref (contact);
-
-out:
- g_free (message);
-}
-
-static void
-add_selected_contact (EmpathyContactSearchDialog *self)
-{
- EmpathyContactSearchDialogPrivate *priv = GET_PRIVATE (self);
- GtkTreeSelection *selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (priv->tree_view));
- TpConnection *conn;
- GtkTreeIter iter;
- GtkTreeModel *model;
- GtkTextBuffer *buffer;
- GtkTextIter start, end;
- gchar *message;
- gboolean sel;
- gchar *id;
- EmpathyClientFactory *factory;
-
- conn = empathy_account_chooser_get_connection (EMPATHY_ACCOUNT_CHOOSER (priv->chooser));
-
- sel = gtk_tree_selection_get_selected (selection, &model, &iter);
- g_return_if_fail (sel == TRUE);
-
- gtk_tree_model_get (model, &iter, LOGIN_COLUMN, &id, -1);
-
- DEBUG ("Requested to add contact: %s", id);
-
- buffer = gtk_text_view_get_buffer GTK_TEXT_VIEW (priv->message);
- gtk_text_buffer_get_start_iter (buffer, &start);
- gtk_text_buffer_get_end_iter (buffer, &end);
- message = gtk_text_buffer_get_text (buffer, &start, &end, FALSE);
-
- factory = empathy_client_factory_dup ();
-
- empathy_client_factory_dup_contact_by_id_async (factory, conn, id,
- on_get_contact_factory_get_from_id_cb, message);
-
- g_object_unref (factory);
-
- /* Close the dialog */
- gtk_dialog_response (GTK_DIALOG (self), GTK_RESPONSE_CANCEL);
-}
-
-static void
-empathy_contact_search_dialog_response (GtkDialog *self,
- gint response)
-{
- switch (response)
- {
- case GTK_RESPONSE_APPLY:
- add_selected_contact (EMPATHY_CONTACT_SEARCH_DIALOG (self));
- break;
- default:
- gtk_widget_destroy (GTK_WIDGET (self));
- break;
- }
-}
-
-static void
-empathy_contact_search_dialog_class_init (
- EmpathyContactSearchDialogClass *klass)
-{
- GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
- GtkDialogClass *dialog_class = GTK_DIALOG_CLASS (klass);
-
- gobject_class->dispose = empathy_contact_search_dialog_dispose;
-
- dialog_class->response = empathy_contact_search_dialog_response;
-
- g_type_class_add_private (gobject_class,
- sizeof (EmpathyContactSearchDialogPrivate));
-}
-
-static void
-_on_search_state_changed_cb (TpContactSearch *searcher,
- GParamSpec *pspec,
- gpointer user_data)
-{
- EmpathyContactSearchDialog *self = EMPATHY_CONTACT_SEARCH_DIALOG (user_data);
- EmpathyContactSearchDialogPrivate *priv = GET_PRIVATE (self);
- TpChannelContactSearchState state;
-
- g_object_get (searcher, "state", &state, NULL);
-
- DEBUG ("new search status: %d", state);
-
- if (state == TP_CHANNEL_CONTACT_SEARCH_STATE_IN_PROGRESS)
- {
- gtk_widget_show (priv->spinner);
- gtk_spinner_start (GTK_SPINNER (priv->spinner));
- }
- else
- {
- gtk_widget_hide (priv->spinner);
- gtk_spinner_stop (GTK_SPINNER (priv->spinner));
- }
-
- if (state == TP_CHANNEL_CONTACT_SEARCH_STATE_NOT_STARTED
- || state == TP_CHANNEL_CONTACT_SEARCH_STATE_IN_PROGRESS)
- {
- gtk_notebook_set_current_page (GTK_NOTEBOOK (priv->notebook),
- PAGE_SEARCH_RESULTS);
- }
- else
- {
- GtkTreeIter help_iter;
-
- if (!gtk_tree_model_get_iter_first (GTK_TREE_MODEL (priv->store),
- &help_iter))
- {
- /* No results found, display a helpful message. */
- gtk_notebook_set_current_page (GTK_NOTEBOOK (priv->notebook),
- PAGE_NO_MATCH);
- }
- }
-}
-
-static void
-_search_results_received (TpContactSearch *searcher,
- GList *results,
- EmpathyContactSearchDialog *self)
-{
- EmpathyContactSearchDialogPrivate *priv = GET_PRIVATE (self);
- const TpContactInfoField *name;
- GList *l;
-
- for (l = results; l != NULL; l = l->next)
- {
- TpContactSearchResult *result = l->data;
-
- name = tp_contact_search_result_get_field (result, "fn");
-
- gtk_list_store_insert_with_values (priv->store, NULL, -1,
- NAME_COLUMN, name ? name->field_value[0] : NULL,
- LOGIN_COLUMN, tp_contact_search_result_get_identifier (result),
- -1);
- }
-}
-
-static void
-on_searcher_created (GObject *source_object,
- GAsyncResult *result,
- gpointer user_data)
-{
- EmpathyContactSearchDialog *self;
- EmpathyContactSearchDialogPrivate *priv;
- GError *error = NULL;
-
- if (EMPATHY_IS_CONTACT_SEARCH_DIALOG (user_data) == FALSE)
- /* This happens if the dialog is closed before the callback is called */
- return;
-
- self = EMPATHY_CONTACT_SEARCH_DIALOG (user_data);
- priv = GET_PRIVATE (self);
-
- priv->searcher = tp_contact_search_new_finish (result, &error);
- if (error != NULL)
- {
- DEBUG ("Failed to create a TpContactSearch: %s", error->message);
- gtk_notebook_set_current_page (GTK_NOTEBOOK (priv->notebook),
- PAGE_NOT_SUPPORTED);
-
- g_error_free (error);
- return;
- }
-
- gtk_notebook_set_current_page (GTK_NOTEBOOK (priv->notebook),
- PAGE_SEARCH_RESULTS);
-
- g_signal_connect (priv->searcher, "search-results-received",
- G_CALLBACK (_search_results_received), self);
- g_signal_connect (priv->searcher, "notify::state",
- G_CALLBACK (_on_search_state_changed_cb), self);
-
- gtk_widget_set_sensitive (priv->find_button, TRUE);
- gtk_widget_set_sensitive (priv->search_entry, TRUE);
-}
-
-static void
-on_selection_changed (GtkTreeSelection *selection,
- gpointer user_data)
-{
- EmpathyContactSearchDialog *self;
- EmpathyContactSearchDialogPrivate *priv;
- gboolean sel;
-
- self = EMPATHY_CONTACT_SEARCH_DIALOG (user_data);
- priv = GET_PRIVATE (self);
- sel = gtk_tree_selection_get_selected (selection, NULL, NULL);
-
- gtk_widget_set_sensitive (priv->add_button, sel);
-}
-
-static void
-check_request_message_available (EmpathyContactSearchDialog *self,
- TpConnection *conn)
-{
- EmpathyContactSearchDialogPrivate *priv = GET_PRIVATE (self);
-
- gtk_widget_set_visible (priv->message_window,
- tp_connection_get_can_change_contact_list (conn));
- gtk_widget_set_visible (priv->message_label,
- tp_connection_get_can_change_contact_list (conn));
-}
-
-static void
-_account_chooser_changed (EmpathyAccountChooser *chooser,
- EmpathyContactSearchDialog *self)
-{
- EmpathyContactSearchDialogPrivate *priv = GET_PRIVATE (self);
- TpAccount *account = empathy_account_chooser_get_account (chooser);
- TpConnection *conn = empathy_account_chooser_get_connection (chooser);
- TpCapabilities *caps = tp_connection_get_capabilities (conn);
- gboolean can_cs, can_set_limit, can_set_server;
-
- can_cs = tp_capabilities_supports_contact_search (caps,
- &can_set_limit, &can_set_server);
- DEBUG ("The server supports cs|limit|server: %s|%s|%s",
- can_cs ? "yes" : "no",
- can_set_limit ? "yes" : "no",
- can_set_server ? "yes" : "no");
-
- /* gtk_widget_set_sensitive (priv->server_entry, can_set_server); */
- gtk_widget_set_sensitive (priv->find_button, FALSE);
- gtk_widget_set_sensitive (priv->search_entry, FALSE);
-
- DEBUG ("New account is %s", tp_proxy_get_object_path (account));
-
- tp_clear_object (&priv->searcher);
- tp_contact_search_new_async (account,
- NULL, /* gtk_entry_get_text (GTK_ENTRY (priv->server_entry)), */
- 0,
- on_searcher_created, self);
-
- /* Make the request message textview sensitive if it can be used */
- check_request_message_available (self, conn);
-}
-
-static void
-_on_button_search_clicked (GtkWidget *widget,
- EmpathyContactSearchDialog *self)
-{
- empathy_contact_search_dialog_do_search (self);
-}
-
-#if 0
-static void
-on_server_changed_cb (GtkEditable *editable,
- gpointer user_data)
-{
- EmpathyContactSearchDialog *self = EMPATHY_CONTACT_SEARCH_DIALOG (user_data);
- EmpathyContactSearchDialogPrivate *priv = GET_PRIVATE (self);
-
- g_return_if_fail (priv->searcher != NULL);
-
- tp_contact_search_reset_async (priv->searcher,
- gtk_entry_get_text (GTK_ENTRY (editable)),
- 0,
- on_searcher_reset,
- self);
-}
-#endif
-
-static void
-empathy_account_chooser_filter_supports_contact_search (
- TpAccount *account,
- EmpathyAccountChooserFilterResultCallback callback,
- gpointer callback_data,
- gpointer user_data)
-{
- TpConnection *connection;
- gboolean supported = FALSE;
- TpCapabilities *caps;
-
- connection = tp_account_get_connection (account);
- if (connection == NULL)
- goto out;
-
- caps = tp_connection_get_capabilities (connection);
- if (caps == NULL)
- goto out;
-
- supported = tp_capabilities_supports_contact_search (caps, NULL, NULL);
-
-out:
- callback (supported, callback_data);
-}
-
-static void
-contact_search_dialog_row_activated_cb (GtkTreeView *tv,
- GtkTreePath *path,
- GtkTreeViewColumn *column,
- EmpathyContactSearchDialog *self)
-{
- /* just emit the same response as the Add Button */
- gtk_dialog_response (GTK_DIALOG (self), GTK_RESPONSE_APPLY);
-}
-
-static void
-on_profile_button_got_contact_cb (GObject *source,
- GAsyncResult *result,
- gpointer user_data)
-{
- GError *error = NULL;
- EmpathyContact *contact;
- FolksIndividual *individual;
-
- contact = empathy_client_factory_dup_contact_by_id_finish (
- EMPATHY_CLIENT_FACTORY (source), result, &error);
- if (contact == NULL)
- {
- g_warning ("Error while getting the contact: %s", error->message);
- g_error_free (error);
- return;
- }
-
- individual = empathy_ensure_individual_from_tp_contact (
- empathy_contact_get_tp_contact (contact));
-
- empathy_display_individual_info (individual);
-
- g_object_unref (contact);
- g_object_unref (individual);
-}
-
-static void
-on_profile_button_clicked_cb (EmpathyCellRendererActivatable *cell,
- const gchar *path_string,
- EmpathyContactSearchDialog *self)
-{
- EmpathyContactSearchDialogPrivate *priv = GET_PRIVATE (self);
- TpConnection *conn;
- GtkTreeIter iter;
- GtkTreeModel *model;
- gboolean valid;
- gchar *id;
- EmpathyClientFactory *factory;
-
- model = gtk_tree_view_get_model (GTK_TREE_VIEW (priv->tree_view));
-
- conn = empathy_account_chooser_get_connection (
- EMPATHY_ACCOUNT_CHOOSER (priv->chooser));
-
- valid = gtk_tree_model_get_iter_from_string (model, &iter, path_string);
- g_return_if_fail (valid == TRUE);
-
- gtk_tree_model_get (model, &iter, LOGIN_COLUMN, &id, -1);
-
- DEBUG ("Requested to show profile for contact: %s", id);
-
- factory = empathy_client_factory_dup ();
-
- empathy_client_factory_dup_contact_by_id_async (factory, conn, id,
- on_profile_button_got_contact_cb, self);
-
- g_object_unref (factory);
-}
-
-static void
-append_message_page (EmpathyContactSearchDialog *self,
- const gchar *message)
-{
- EmpathyContactSearchDialogPrivate *priv = GET_PRIVATE (self);
- GtkWidget *label;
- gchar *tmp;
-
- label = gtk_label_new (NULL);
- tmp = g_strdup_printf ("<b><span size='xx-large'>%s</span></b>", message);
- gtk_label_set_markup (GTK_LABEL (label), tmp);
- g_free (tmp);
-
- gtk_label_set_line_wrap (GTK_LABEL (label), TRUE);
-
- gtk_notebook_append_page (GTK_NOTEBOOK (priv->notebook), label, NULL);
-}
-
-static void
-empathy_contact_search_dialog_init (EmpathyContactSearchDialog *self)
-{
- EmpathyContactSearchDialogPrivate *priv = GET_PRIVATE (self);
- GtkWidget *vbox, *hbox, *scrolled_window, *label;
- GtkCellRenderer *cell;
- GtkTreeViewColumn *col;
- GtkTreeSelection *selection;
- GtkSizeGroup *size_group = gtk_size_group_new (GTK_SIZE_GROUP_HORIZONTAL);
-
- /* Title */
- gtk_window_set_title (GTK_WINDOW (self), _("Search contacts"));
-
- vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 3);
- gtk_container_set_border_width (GTK_CONTAINER (vbox), 6);
-
- /* Account chooser */
- hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 6);
- label = gtk_label_new (_("Account:"));
- gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 0);
- gtk_size_group_add_widget (size_group, label);
-
- priv->chooser = empathy_account_chooser_new ();
- empathy_account_chooser_set_filter (EMPATHY_ACCOUNT_CHOOSER (priv->chooser),
- empathy_account_chooser_filter_supports_contact_search, NULL);
- gtk_box_pack_start (GTK_BOX (hbox), priv->chooser, TRUE, TRUE, 0);
- g_signal_connect (priv->chooser, "changed",
- G_CALLBACK (_account_chooser_changed), self);
-
- gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, TRUE, 0);
-
-#if 0
- /* Server entry */
- priv->server_entry = gtk_entry_new ();
- gtk_box_pack_start (GTK_BOX (vbox), priv->server_entry, FALSE, TRUE, 6);
- g_signal_connect (GTK_EDITABLE (priv->server_entry), "changed",
- G_CALLBACK (on_server_changed_cb), self);
-#endif
-
- /* Search input */
- hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 6);
- label = gtk_label_new (_("Search: "));
- gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 0);
- gtk_size_group_add_widget (size_group, label);
-
- priv->search_entry = gtk_entry_new ();
- gtk_box_pack_start (GTK_BOX (hbox), priv->search_entry, TRUE, TRUE, 0);
- g_signal_connect (priv->search_entry, "activate",
- G_CALLBACK (_on_button_search_clicked), self);
-
- priv->find_button = gtk_button_new_from_stock (GTK_STOCK_FIND);
- g_signal_connect (priv->find_button, "clicked",
- G_CALLBACK (_on_button_search_clicked), self);
- gtk_box_pack_end (GTK_BOX (hbox), priv->find_button, FALSE, TRUE, 0);
-
- priv->spinner = gtk_spinner_new ();
- gtk_box_pack_end (GTK_BOX (hbox), priv->spinner, FALSE, TRUE, 0);
- gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, TRUE, 0);
-
- /* Search results */
- priv->store = gtk_list_store_new (N_COLUMNS,
- G_TYPE_STRING, /* Name */
- G_TYPE_STRING); /* Login */
-
- priv->tree_view = gtk_tree_view_new_with_model (GTK_TREE_MODEL (priv->store));
- selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (priv->tree_view));
- gtk_tree_selection_set_mode (selection, GTK_SELECTION_SINGLE);
-
- g_signal_connect (priv->tree_view, "row-activated",
- G_CALLBACK (contact_search_dialog_row_activated_cb), self);
- g_signal_connect (selection, "changed",
- G_CALLBACK (on_selection_changed), self);
-
- gtk_tree_view_set_headers_visible (GTK_TREE_VIEW (priv->tree_view), FALSE);
-
- col = gtk_tree_view_column_new ();
-
- cell = empathy_cell_renderer_text_new ();
- gtk_tree_view_column_pack_start (col, cell, TRUE);
- /* EmpathyCellRendererText displays "name" above and "status" below.
- * We want the login above since it'll always be available, and the
- * name below since we won't always have it. */
- gtk_tree_view_column_add_attribute (col, cell,
- "name", LOGIN_COLUMN);
- gtk_tree_view_column_add_attribute (col, cell,
- "status", NAME_COLUMN);
-
- cell = empathy_cell_renderer_activatable_new ();
- gtk_tree_view_column_pack_end (col, cell, FALSE);
- g_object_set (cell, "stock-id", EMPATHY_IMAGE_CONTACT_INFORMATION, NULL);
- g_signal_connect (cell, "path-activated",
- G_CALLBACK (on_profile_button_clicked_cb), self);
-
- gtk_tree_view_append_column (GTK_TREE_VIEW (priv->tree_view), col);
-
- gtk_dialog_add_button (GTK_DIALOG (self),
- GTK_STOCK_CLOSE, GTK_RESPONSE_CLOSE);
-
- priv->add_button = gtk_dialog_add_button (GTK_DIALOG (self),
- _("_Add Contact"), GTK_RESPONSE_APPLY);
- gtk_widget_set_sensitive (priv->add_button, FALSE);
- gtk_button_set_image (GTK_BUTTON (priv->add_button),
- gtk_image_new_from_stock (GTK_STOCK_ADD, GTK_ICON_SIZE_BUTTON));
-
- /* Pack the dialog */
- priv->notebook = gtk_notebook_new ();
- gtk_notebook_set_show_tabs (GTK_NOTEBOOK (priv->notebook), FALSE);
- g_object_set (priv->notebook, "margin", 6, NULL);
-
- scrolled_window = gtk_scrolled_window_new (NULL, NULL);
- gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window),
- GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC);
-
- gtk_container_add (GTK_CONTAINER (scrolled_window), priv->tree_view);
-
- gtk_notebook_append_page (GTK_NOTEBOOK (priv->notebook), scrolled_window,
- NULL);
-
- append_message_page (self, _("No contacts found"));
- append_message_page (self, _("Contact search is not supported on this account"));
-
- gtk_box_pack_start (GTK_BOX (vbox), priv->notebook, TRUE, TRUE, 3);
-
- /* Request message textview */
- priv->message_label = gtk_label_new (
- _("Your message introducing yourself:"));
- gtk_misc_set_alignment (GTK_MISC (priv->message_label), 0, 0.5);
-
- priv->message = gtk_text_view_new ();
- gtk_text_view_set_wrap_mode (GTK_TEXT_VIEW (priv->message),
- GTK_WRAP_WORD_CHAR);
- gtk_text_buffer_set_text (
- gtk_text_view_get_buffer (GTK_TEXT_VIEW (priv->message)),
- _("Please let me see when you're online. Thanks!"), -1);
-
- priv->message_window = gtk_scrolled_window_new (NULL, NULL);
- gtk_scrolled_window_set_shadow_type (
- GTK_SCROLLED_WINDOW (priv->message_window),
- GTK_SHADOW_ETCHED_IN);
- gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (priv->message_window),
- GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC);
-
- gtk_container_add (GTK_CONTAINER (priv->message_window), priv->message);
-
- gtk_box_pack_start (GTK_BOX (vbox), priv->message_label, FALSE, TRUE, 3);
- gtk_box_pack_start (GTK_BOX (vbox), priv->message_window, FALSE, TRUE, 3);
-
- gtk_box_pack_start (GTK_BOX (gtk_dialog_get_content_area (
- GTK_DIALOG (self))), vbox, TRUE, TRUE, 0);
-
- gtk_window_set_default_size (GTK_WINDOW (self), 200, 400);
- gtk_widget_show_all (vbox);
- gtk_widget_hide (priv->spinner);
- g_object_unref (size_group);
-}
-
-GtkWidget *
-empathy_contact_search_dialog_new (GtkWindow *parent)
-{
- GtkWidget *self;
-
- g_return_val_if_fail (parent == NULL || GTK_IS_WINDOW (parent), NULL);
-
- self = g_object_new (EMPATHY_TYPE_CONTACT_SEARCH_DIALOG, NULL);
-
- if (parent != NULL)
- {
- gtk_window_set_transient_for (GTK_WINDOW (self), parent);
- }
-
- return self;
-}
diff --git a/libempathy-gtk/empathy-contact-search-dialog.h b/libempathy-gtk/empathy-contact-search-dialog.h
deleted file mode 100644
index 1421286d..00000000
--- a/libempathy-gtk/empathy-contact-search-dialog.h
+++ /dev/null
@@ -1,58 +0,0 @@
-/* -*- Mode: C; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/*
- * empathy-contact-search-dialog.h
- *
- * Copyright (C) 2010-2011 Collabora Ltd.
- *
- * The code contained in this file is free software; you can redistribute
- * it and/or modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either version
- * 2.1 of the License, or (at your option) any later version.
- *
- * This file is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this code; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- *
- * Authors:
- * Danielle Madeley <danielle.madeley@collabora.co.uk>
- * Emilio Pozuelo Monfort <emilio.pozuelo@collabora.co.uk>
- */
-
-#ifndef __EMPATHY_CONTACT_SEARCH_DIALOG_H__
-#define __EMPATHY_CONTACT_SEARCH_DIALOG_H__
-
-#include <gtk/gtk.h>
-
-G_BEGIN_DECLS
-
-#define EMPATHY_TYPE_CONTACT_SEARCH_DIALOG (empathy_contact_search_dialog_get_type ())
-#define EMPATHY_CONTACT_SEARCH_DIALOG(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), EMPATHY_TYPE_CONTACT_SEARCH_DIALOG, EmpathyContactSearchDialog))
-#define EMPATHY_CONTACT_SEARCH_DIALOG_CLASS(obj) (G_TYPE_CHECK_CLASS_CAST ((obj), EMPATHY_TYPE_CONTACT_SEARCH_DIALOG, EmpathyContactSearchDialogClass))
-#define EMPATHY_IS_CONTACT_SEARCH_DIALOG(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), EMPATHY_TYPE_CONTACT_SEARCH_DIALOG))
-#define EMPATHY_IS_CONTACT_SEARCH_DIALOG_CLASS(obj) (G_TYPE_CHECK_CLASS_TYPE ((obj), EMPATHY_TYPE_CONTACT_SEARCH_DIALOG))
-#define EMPATHY_CONTACT_SEARCH_DIALOG_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), EMPATHY_TYPE_CONTACT_SEARCH_DIALOG, EmpathyContactSearchDialogClass))
-
-typedef struct _EmpathyContactSearchDialog EmpathyContactSearchDialog;
-typedef struct _EmpathyContactSearchDialogClass EmpathyContactSearchDialogClass;
-
-struct _EmpathyContactSearchDialog
-{
- GtkDialog parent;
-};
-
-struct _EmpathyContactSearchDialogClass
-{
- GtkDialogClass parent_class;
-};
-
-GType empathy_contact_search_dialog_get_type (void);
-GtkWidget *empathy_contact_search_dialog_new (GtkWindow *parent);
-
-G_END_DECLS
-
-#endif
diff --git a/libempathy-gtk/empathy-contact-widget.c b/libempathy-gtk/empathy-contact-widget.c
deleted file mode 100644
index 505dad40..00000000
--- a/libempathy-gtk/empathy-contact-widget.c
+++ /dev/null
@@ -1,781 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * Copyright (C) 2007-2009 Collabora Ltd.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- *
- * Authors: Xavier Claessens <xclaesse@gmail.com>
- */
-
-#include "config.h"
-#include "empathy-contact-widget.h"
-
-#include <glib/gi18n-lib.h>
-#include <tp-account-widgets/tpaw-builder.h>
-#include <tp-account-widgets/tpaw-string-parser.h>
-#include <tp-account-widgets/tpaw-utils.h>
-
-#include "empathy-avatar-image.h"
-#include "empathy-client-factory.h"
-#include "empathy-groups-widget.h"
-#include "empathy-ui-utils.h"
-#include "empathy-utils.h"
-
-#define DEBUG_FLAG EMPATHY_DEBUG_CONTACT
-#include "empathy-debug.h"
-
-/**
- * SECTION:empathy-contact-widget
- * @title:EmpathyContactWidget
- * @short_description: A widget used to display and edit details about a contact
- * @include: libempathy-empathy-contact-widget.h
- *
- * #EmpathyContactWidget is a widget which displays appropriate widgets
- * with details about a contact, also allowing changing these details,
- * if desired.
- */
-
-/**
- * EmpathyContactWidget:
- * @parent: parent object
- *
- * Widget which displays appropriate widgets with details about a contact,
- * also allowing changing these details, if desired.
- */
-
-G_DEFINE_TYPE (EmpathyContactWidget, empathy_contact_widget, GTK_TYPE_BOX)
-
-/* Delay before updating the widget when the id entry changed (seconds) */
-#define ID_CHANGED_TIMEOUT 1
-
-#define DATA_FIELD "contact-info-field"
-
-struct _EmpathyContactWidgetPriv
-{
- EmpathyContact *contact;
- guint widget_id_timeout;
- gulong fav_sig_id;
-
- /* Contact */
- GtkWidget *widget_avatar;
- GtkWidget *widget_account;
- GtkWidget *image_account;
- GtkWidget *label_account;
- GtkWidget *widget_id;
- GtkWidget *widget_alias;
- GtkWidget *label_alias;
- GtkWidget *hbox_presence;
- GtkWidget *image_state;
- GtkWidget *label_status;
- GtkWidget *grid_contact;
- GtkWidget *vbox_avatar;
- GtkWidget *favourite_checkbox;
- GtkWidget *label_details;
- GtkWidget *label_left_account;
-
- /* Groups */
- GtkWidget *groups_widget;
-
- /* Client */
- GtkWidget *vbox_client;
- GtkWidget *grid_client;
- GtkWidget *hbox_client_requested;
-};
-
-typedef struct
-{
- EmpathyContactWidget *self;
- const gchar *name;
- gboolean found;
- GtkTreeIter found_iter;
-} FindName;
-
-enum
-{
- COL_NAME,
- COL_ENABLED,
- COL_EDITABLE,
- COL_COUNT
-};
-
-
-static void
-contact_widget_client_update (EmpathyContactWidget *self)
-{
- /* FIXME: Needs new telepathy spec */
-}
-
-static void
-contact_widget_client_setup (EmpathyContactWidget *self)
-{
- /* FIXME: Needs new telepathy spec */
- gtk_widget_hide (self->priv->vbox_client);
-}
-
-static void
-contact_widget_groups_update (EmpathyContactWidget *self)
-{
- if (self->priv->contact != NULL)
- {
- FolksPersona *persona =
- empathy_contact_get_persona (self->priv->contact);
-
- if (FOLKS_IS_GROUP_DETAILS (persona))
- {
- empathy_groups_widget_set_group_details (
- EMPATHY_GROUPS_WIDGET (self->priv->groups_widget),
- FOLKS_GROUP_DETAILS (persona));
- gtk_widget_show (self->priv->groups_widget);
-
- return;
- }
- }
-
- /* In case of failure */
- gtk_widget_hide (self->priv->groups_widget);
-}
-
-static void
-save_avatar_menu_activate_cb (GtkWidget *widget,
- EmpathyContactWidget *self)
-{
- GtkWidget *dialog;
- EmpathyAvatar *avatar;
- gchar *ext = NULL, *filename;
-
- dialog = gtk_file_chooser_dialog_new (_("Save Avatar"),
- NULL,
- GTK_FILE_CHOOSER_ACTION_SAVE,
- GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
- GTK_STOCK_SAVE, GTK_RESPONSE_ACCEPT,
- NULL);
-
- gtk_file_chooser_set_do_overwrite_confirmation (GTK_FILE_CHOOSER (dialog),
- TRUE);
-
- /* look for the avatar extension */
- avatar = empathy_contact_get_avatar (self->priv->contact);
- if (avatar->format != NULL)
- {
- gchar **splitted;
-
- splitted = g_strsplit (avatar->format, "/", 2);
- if (splitted[0] != NULL && splitted[1] != NULL)
- ext = g_strdup (splitted[1]);
-
- g_strfreev (splitted);
- }
- else
- {
- /* Avatar was loaded from the cache so was converted to PNG */
- ext = g_strdup ("png");
- }
-
- if (ext != NULL)
- {
- gchar *id;
-
- id = tp_escape_as_identifier (empathy_contact_get_id (
- self->priv->contact));
-
- filename = g_strdup_printf ("%s.%s", id, ext);
- gtk_file_chooser_set_current_name (GTK_FILE_CHOOSER (dialog), filename);
-
- g_free (id);
- g_free (ext);
- g_free (filename);
- }
-
- if (gtk_dialog_run (GTK_DIALOG (dialog)) == GTK_RESPONSE_ACCEPT)
- {
- GError *error = NULL;
-
- filename = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (dialog));
-
- if (!empathy_avatar_save_to_file (avatar, filename, &error))
- {
- /* Save error */
- GtkWidget *error_dialog;
-
- error_dialog = gtk_message_dialog_new (NULL, 0,
- GTK_MESSAGE_ERROR, GTK_BUTTONS_CLOSE,
- _("Unable to save avatar"));
-
- gtk_message_dialog_format_secondary_text (
- GTK_MESSAGE_DIALOG (error_dialog), "%s", error->message);
-
- g_signal_connect (error_dialog, "response",
- G_CALLBACK (gtk_widget_destroy), NULL);
-
- gtk_window_present (GTK_WINDOW (error_dialog));
-
- g_clear_error (&error);
- }
-
- g_free (filename);
- }
-
- gtk_widget_destroy (dialog);
-}
-
-static void
-popup_avatar_menu (EmpathyContactWidget *self,
- GtkWidget *parent,
- GdkEventButton *event)
-{
- GtkWidget *menu, *item;
- gint button, event_time;
-
- if (self->priv->contact == NULL ||
- empathy_contact_get_avatar (self->priv->contact) == NULL)
- return;
-
- menu = empathy_context_menu_new (parent);
-
- /* Add "Save as..." entry */
- item = gtk_image_menu_item_new_from_stock (GTK_STOCK_SAVE_AS, NULL);
- gtk_menu_shell_append (GTK_MENU_SHELL (menu), item);
- gtk_widget_show (item);
-
- g_signal_connect (item, "activate",
- G_CALLBACK (save_avatar_menu_activate_cb), self);
-
- if (event)
- {
- button = event->button;
- event_time = event->time;
- }
- else
- {
- button = 0;
- event_time = gtk_get_current_event_time ();
- }
-
- gtk_menu_popup (GTK_MENU (menu), NULL, NULL, NULL, NULL,
- button, event_time);
-}
-
-static gboolean
-widget_avatar_popup_menu_cb (GtkWidget *widget,
- EmpathyContactWidget *self)
-{
- popup_avatar_menu (self, widget, NULL);
-
- return TRUE;
-}
-
-static gboolean
-widget_avatar_button_press_event_cb (GtkWidget *widget,
- GdkEventButton *event,
- EmpathyContactWidget *self)
-{
- /* Ignore double-clicks and triple-clicks */
- if (event->button == 3 && event->type == GDK_BUTTON_PRESS)
- {
- popup_avatar_menu (self, widget, event);
- return TRUE;
- }
-
- return FALSE;
-}
-
-static void
-set_nickname_cb (GObject *source,
- GAsyncResult *res,
- gpointer user_data)
-{
- GError *error = NULL;
-
- if (!tp_account_set_nickname_finish (TP_ACCOUNT (source), res, &error))
- {
- DEBUG ("Failed to set Account.Nickname: %s", error->message);
- g_error_free (error);
- }
-}
-
-static gboolean
-contact_widget_entry_alias_focus_event_cb (GtkEditable *editable,
- GdkEventFocus *event,
- EmpathyContactWidget *self)
-{
- if (self->priv->contact)
- {
- const gchar *alias;
-
- alias = gtk_entry_get_text (GTK_ENTRY (editable));
-
- if (empathy_contact_is_user (self->priv->contact))
- {
- TpAccount * account;
- const gchar *current_nickname;
-
- account = empathy_contact_get_account (self->priv->contact);
- current_nickname = tp_account_get_nickname (account);
-
- if (tp_strdiff (current_nickname, alias))
- {
- DEBUG ("Set Account.Nickname to %s", alias);
-
- tp_account_set_nickname_async (account, alias, set_nickname_cb,
- NULL);
- }
- }
- else
- {
- empathy_contact_set_alias (self->priv->contact, alias);
- }
- }
-
- return FALSE;
-}
-
-static void
-contact_widget_name_notify_cb (EmpathyContactWidget *self)
-{
- if (GTK_IS_ENTRY (self->priv->widget_alias))
- gtk_entry_set_text (GTK_ENTRY (self->priv->widget_alias),
- empathy_contact_get_alias (self->priv->contact));
- else
- gtk_label_set_label (GTK_LABEL (self->priv->widget_alias),
- empathy_contact_get_alias (self->priv->contact));
-}
-
-static void
-contact_widget_presence_notify_cb (EmpathyContactWidget *self)
-{
- const gchar *status;
- gchar *markup_text = NULL;
-
- status = empathy_contact_get_status (self->priv->contact);
- if (status != NULL)
- markup_text = tpaw_add_link_markup (status);
- gtk_label_set_markup (GTK_LABEL (self->priv->label_status), markup_text);
- g_free (markup_text);
-
- gtk_image_set_from_icon_name (GTK_IMAGE (self->priv->image_state),
- empathy_icon_name_for_contact (self->priv->contact),
- GTK_ICON_SIZE_BUTTON);
- gtk_widget_show (self->priv->image_state);
-}
-
-static void
-contact_widget_remove_contact (EmpathyContactWidget *self)
-{
- if (self->priv->contact)
- {
- g_signal_handlers_disconnect_by_func (self->priv->contact,
- contact_widget_name_notify_cb, self);
- g_signal_handlers_disconnect_by_func (self->priv->contact,
- contact_widget_presence_notify_cb, self);
-
- g_object_unref (self->priv->contact);
- self->priv->contact = NULL;
- }
-}
-
-static void contact_widget_change_contact (EmpathyContactWidget *self);
-
-static void
-contact_widget_contact_update (EmpathyContactWidget *self)
-{
- TpAccount *account = NULL;
- const gchar *id = NULL;
-
- /* Connect and get info from new contact */
- if (self->priv->contact)
- {
- g_signal_connect_swapped (self->priv->contact, "notify::name",
- G_CALLBACK (contact_widget_name_notify_cb), self);
- g_signal_connect_swapped (self->priv->contact, "notify::presence",
- G_CALLBACK (contact_widget_presence_notify_cb), self);
- g_signal_connect_swapped (self->priv->contact,
- "notify::presence-message",
- G_CALLBACK (contact_widget_presence_notify_cb), self);
-
- account = empathy_contact_get_account (self->priv->contact);
- id = empathy_contact_get_id (self->priv->contact);
- }
-
- /* Update account widget */
- if (account)
- {
- g_signal_handlers_block_by_func (self->priv->widget_account,
- contact_widget_change_contact,
- self);
- empathy_account_chooser_set_account (
- EMPATHY_ACCOUNT_CHOOSER (self->priv->widget_account), account);
- g_signal_handlers_unblock_by_func (self->priv->widget_account,
- contact_widget_change_contact, self);
- }
-
- /* Update id widget */
- gtk_entry_set_text (GTK_ENTRY (self->priv->widget_id), id ? id : "");
-
- /* Update other widgets */
- if (self->priv->contact)
- {
- contact_widget_name_notify_cb (self);
- contact_widget_presence_notify_cb (self);
-
- gtk_widget_show (self->priv->label_alias);
- gtk_widget_show (self->priv->widget_alias);
- gtk_widget_show (self->priv->widget_avatar);
-
- gtk_widget_set_visible (self->priv->hbox_presence, TRUE);
- }
- else
- {
- gtk_widget_hide (self->priv->label_alias);
- gtk_widget_hide (self->priv->widget_alias);
- gtk_widget_hide (self->priv->hbox_presence);
- gtk_widget_hide (self->priv->widget_avatar);
- }
-}
-
-static void
-contact_widget_set_contact (EmpathyContactWidget *self,
- EmpathyContact *contact)
-{
- if (contact == self->priv->contact)
- return;
-
- contact_widget_remove_contact (self);
- if (contact)
- self->priv->contact = g_object_ref (contact);
-
- /* set the selected account to be the account this contact came from */
- if (contact && EMPATHY_IS_ACCOUNT_CHOOSER (self->priv->widget_account)) {
- empathy_account_chooser_set_account (
- EMPATHY_ACCOUNT_CHOOSER (self->priv->widget_account),
- empathy_contact_get_account (contact));
- }
-
- /* Update self for widgets */
- contact_widget_contact_update (self);
- contact_widget_groups_update (self);
- contact_widget_client_update (self);
-}
-
-static void
-contact_widget_got_contact_cb (GObject *source,
- GAsyncResult *result,
- gpointer user_data)
-{
- EmpathyContactWidget *self = user_data;
- GError *error = NULL;
- EmpathyContact *contact;
-
- contact = empathy_client_factory_dup_contact_by_id_finish (
- EMPATHY_CLIENT_FACTORY (source), result, &error);
-
- if (contact == NULL)
- {
- DEBUG ("Error: %s", error->message);
- g_error_free (error);
- goto out;
- }
-
- contact_widget_set_contact (self, contact);
-
- g_object_unref (contact);
-out:
- g_object_unref (self);
-}
-
-static void
-contact_widget_change_contact (EmpathyContactWidget *self)
-{
- TpConnection *connection;
- const gchar *id;
-
- connection = empathy_account_chooser_get_connection (
- EMPATHY_ACCOUNT_CHOOSER (self->priv->widget_account));
- if (!connection)
- return;
-
- id = gtk_entry_get_text (GTK_ENTRY (self->priv->widget_id));
- if (!TPAW_STR_EMPTY (id))
- {
- EmpathyClientFactory *factory;
-
- factory = empathy_client_factory_dup ();
-
- empathy_client_factory_dup_contact_by_id_async (factory, connection,
- id, contact_widget_got_contact_cb, g_object_ref (self));
-
- g_object_unref (factory);
- }
-}
-
-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->priv->widget_id_timeout != 0)
- {
- g_source_remove (self->priv->widget_id_timeout);
- }
-
- self->priv->widget_id_timeout =
- g_timeout_add_seconds (ID_CHANGED_TIMEOUT,
- (GSourceFunc) contact_widget_id_activate_timeout, self);
-}
-
-static gboolean
-contact_widget_id_focus_out_cb (GtkWidget *widget,
- GdkEventFocus *event,
- EmpathyContactWidget *self)
-{
- contact_widget_change_contact (self);
- return FALSE;
-}
-
-static void
-contact_widget_contact_setup (EmpathyContactWidget *self)
-{
- self->priv->label_status = gtk_label_new ("");
- gtk_label_set_line_wrap_mode (GTK_LABEL (self->priv->label_status),
- PANGO_WRAP_WORD_CHAR);
- gtk_label_set_line_wrap (GTK_LABEL (self->priv->label_status),
- TRUE);
- gtk_misc_set_alignment (GTK_MISC (self->priv->label_status), 0, 0.5);
-
- gtk_label_set_selectable (GTK_LABEL (self->priv->label_status), TRUE);
-
- gtk_box_pack_start (GTK_BOX (self->priv->hbox_presence),
- self->priv->label_status, TRUE, TRUE, 0);
- gtk_widget_show (self->priv->label_status);
-
- /* Setup account chooser */
- self->priv->widget_account = empathy_account_chooser_new ();
- g_signal_connect_swapped (self->priv->widget_account, "changed",
- G_CALLBACK (contact_widget_change_contact),
- self);
- gtk_grid_attach (GTK_GRID (self->priv->grid_contact),
- self->priv->widget_account,
- 2, 0, 1, 1);
- gtk_widget_show (self->priv->widget_account);
-
- /* Set up avatar display */
- self->priv->widget_avatar = empathy_avatar_image_new ();
-
- g_signal_connect (self->priv->widget_avatar, "popup-menu",
- G_CALLBACK (widget_avatar_popup_menu_cb), self);
- g_signal_connect (self->priv->widget_avatar, "button-press-event",
- G_CALLBACK (widget_avatar_button_press_event_cb), self);
- gtk_box_pack_start (GTK_BOX (self->priv->vbox_avatar),
- self->priv->widget_avatar,
- FALSE, FALSE,
- 6);
- gtk_widget_show (self->priv->widget_avatar);
-
- /* Setup id entry */
- self->priv->widget_id = gtk_entry_new ();
- g_signal_connect (self->priv->widget_id, "focus-out-event",
- G_CALLBACK (contact_widget_id_focus_out_cb),
- self);
- g_signal_connect (self->priv->widget_id, "changed",
- G_CALLBACK (contact_widget_id_changed_cb),
- self);
- gtk_grid_attach (GTK_GRID (self->priv->grid_contact), self->priv->widget_id,
- 2, 1, 1, 1);
- gtk_widget_set_hexpand (self->priv->widget_id, TRUE);
-
- gtk_widget_show (self->priv->widget_id);
-
- /* Setup alias entry */
- self->priv->widget_alias = gtk_entry_new ();
-
- g_signal_connect (self->priv->widget_alias, "focus-out-event",
- G_CALLBACK (contact_widget_entry_alias_focus_event_cb),
- self);
-
- /* Make return activate the window default (the Close button) */
- gtk_entry_set_activates_default (GTK_ENTRY (self->priv->widget_alias),
- TRUE);
-
- gtk_grid_attach (GTK_GRID (self->priv->grid_contact),
- self->priv->widget_alias, 2, 2, 1, 1);
- gtk_widget_set_hexpand (self->priv->widget_alias, TRUE);
-
- gtk_label_set_selectable (GTK_LABEL (self->priv->label_status), FALSE);
- gtk_widget_show (self->priv->widget_alias);
-}
-
-static void
-empathy_contact_widget_finalize (GObject *object)
-{
- EmpathyContactWidget *self = EMPATHY_CONTACT_WIDGET (object);
- void (*chain_up) (GObject *) =
- ((GObjectClass *) empathy_contact_widget_parent_class)->finalize;
-
- contact_widget_remove_contact (self);
-
- if (self->priv->widget_id_timeout != 0)
- {
- g_source_remove (self->priv->widget_id_timeout);
- }
-
-
- if (chain_up != NULL)
- chain_up (object);
-}
-
-/**
- * empathy_contact_widget_new:
- * @contact: an #EmpathyContact
- *
- * Creates a new #EmpathyContactWidget.
- *
- * Return value: a new #EmpathyContactWidget
- */
-GtkWidget *
-empathy_contact_widget_new (EmpathyContact *contact)
-{
- EmpathyContactWidget *self;
- gchar *filename;
- GtkWidget *main_vbox;
- GtkBuilder *gui;
-
- g_return_val_if_fail (contact == NULL || EMPATHY_IS_CONTACT (contact), NULL);
-
- self = g_object_new (EMPATHY_TYPE_CONTACT_WIDGET, NULL);
-
- filename = empathy_file_lookup ("empathy-contact-widget.ui",
- "libempathy-gtk");
- gui = tpaw_builder_get_file (filename,
- "vbox_contact_widget", &main_vbox,
- "hbox_presence", &self->priv->hbox_presence,
- "label_alias", &self->priv->label_alias,
- "image_state", &self->priv->image_state,
- "grid_contact", &self->priv->grid_contact,
- "vbox_avatar", &self->priv->vbox_avatar,
- "groups_widget", &self->priv->groups_widget,
- "vbox_client", &self->priv->vbox_client,
- "grid_client", &self->priv->grid_client,
- "hbox_client_requested", &self->priv->hbox_client_requested,
- "label_details", &self->priv->label_details,
- "label_left_account", &self->priv->label_left_account,
- NULL);
- g_free (filename);
-
- gtk_container_add (GTK_CONTAINER (self), main_vbox);
- gtk_widget_show (GTK_WIDGET (main_vbox));
-
- /* Create widgets */
- contact_widget_contact_setup (self);
- contact_widget_client_setup (self);
-
- gtk_widget_hide (self->priv->label_details);
-
- if (contact != NULL)
- contact_widget_set_contact (self, contact);
- else
- contact_widget_change_contact (self);
-
- g_object_unref (gui);
-
- return GTK_WIDGET (self);
-}
-
-/**
- * empathy_contact_widget_get_contact:
- * @widget: an #EmpathyContactWidget
- *
- * Get the #EmpathyContact related with the #EmpathyContactWidget @widget.
- *
- * Returns: the #EmpathyContact associated with @widget
- */
-EmpathyContact *
-empathy_contact_widget_get_contact (GtkWidget *widget)
-{
- EmpathyContactWidget *self = EMPATHY_CONTACT_WIDGET (widget);
-
- return self->priv->contact;
-}
-
-const gchar *
-empathy_contact_widget_get_alias (GtkWidget *widget)
-{
- EmpathyContactWidget *self = EMPATHY_CONTACT_WIDGET (widget);
-
- return gtk_entry_get_text (GTK_ENTRY (self->priv->widget_alias));
-}
-
-/**
- * empathy_contact_widget_set_contact:
- * @widget: an #EmpathyContactWidget
- * @contact: a different #EmpathyContact
- *
- * Change the #EmpathyContact related with the #EmpathyContactWidget @widget.
- */
-void
-empathy_contact_widget_set_contact (GtkWidget *widget,
- EmpathyContact *contact)
-{
- EmpathyContactWidget *self = EMPATHY_CONTACT_WIDGET (widget);
-
- g_return_if_fail (EMPATHY_IS_CONTACT (contact));
-
- contact_widget_set_contact (self, contact);
-}
-
-/**
- * empathy_contact_widget_set_account_filter:
- * @widget: an #EmpathyContactWidget
- * @filter: a #EmpathyAccountChooserFilterFunc
- * @user_data: user data to pass to @filter, or %NULL
- *
- * Set a filter on the #EmpathyAccountChooser included in the
- * #EmpathyContactWidget.
- */
-void
-empathy_contact_widget_set_account_filter (
- GtkWidget *widget,
- EmpathyAccountChooserFilterFunc filter,
- gpointer user_data)
-{
- EmpathyContactWidget *self = EMPATHY_CONTACT_WIDGET (widget);
- EmpathyAccountChooser *chooser;
-
- chooser = EMPATHY_ACCOUNT_CHOOSER (self->priv->widget_account);
- if (chooser)
- empathy_account_chooser_set_filter (chooser, filter, user_data);
-}
-
-static void
-empathy_contact_widget_class_init (
- EmpathyContactWidgetClass *klass)
-{
- GObjectClass *oclass = G_OBJECT_CLASS (klass);
-
- oclass->finalize = empathy_contact_widget_finalize;
-
- g_type_class_add_private (klass, sizeof (EmpathyContactWidgetPriv));
-}
-
-static void
-empathy_contact_widget_init (EmpathyContactWidget *self)
-{
- self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self,
- EMPATHY_TYPE_CONTACT_WIDGET, EmpathyContactWidgetPriv);
-}
diff --git a/libempathy-gtk/empathy-contact-widget.h b/libempathy-gtk/empathy-contact-widget.h
deleted file mode 100644
index 5f44adb6..00000000
--- a/libempathy-gtk/empathy-contact-widget.h
+++ /dev/null
@@ -1,83 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * Copyright (C) 2007-2008 Collabora Ltd.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- *
- * Authors: Xavier Claessens <xclaesse@gmail.com>
- */
-
-#ifndef __EMPATHY_CONTACT_WIDGET_H__
-#define __EMPATHY_CONTACT_WIDGET_H__
-
-#include <gtk/gtk.h>
-
-#include "empathy-account-chooser.h"
-#include "empathy-contact.h"
-
-G_BEGIN_DECLS
-
-typedef struct _EmpathyContactWidget EmpathyContactWidget;
-typedef struct _EmpathyContactWidgetClass EmpathyContactWidgetClass;
-typedef struct _EmpathyContactWidgetPriv EmpathyContactWidgetPriv;
-
-struct _EmpathyContactWidgetClass
-{
- /*<private>*/
- GtkBoxClass parent_class;
-};
-
-struct _EmpathyContactWidget
-{
- /*<private>*/
- GtkBox parent;
- EmpathyContactWidgetPriv *priv;
-};
-
-GType empathy_contact_widget_get_type (void);
-
-/* TYPE MACROS */
-#define EMPATHY_TYPE_CONTACT_WIDGET \
- (empathy_contact_widget_get_type ())
-#define EMPATHY_CONTACT_WIDGET(obj) \
- (G_TYPE_CHECK_INSTANCE_CAST((obj), \
- EMPATHY_TYPE_CONTACT_WIDGET, \
- EmpathyContactWidget))
-#define EMPATHY_CONTACT_WIDGET_CLASS(klass) \
- (G_TYPE_CHECK_CLASS_CAST((klass), \
- EMPATHY_TYPE_CONTACT_WIDGET, \
- EmpathyContactWidgetClass))
-#define EMPATHY_IS_CONTACT_WIDGET(obj) \
- (G_TYPE_CHECK_INSTANCE_TYPE((obj), \
- EMPATHY_TYPE_CONTACT_WIDGET))
-#define EMPATHY_IS_CONTACT_WIDGET_CLASS(klass) \
- (G_TYPE_CHECK_CLASS_TYPE((klass), \
- EMPATHY_TYPE_CONTACT_WIDGET))
-#define EMPATHY_CONTACT_WIDGET_GET_CLASS(obj) \
- (G_TYPE_INSTANCE_GET_CLASS ((obj), \
- EMPATHY_TYPE_CONTACT_WIDGET, \
- EmpathyContactWidgetClass))
-
-GtkWidget * empathy_contact_widget_new (EmpathyContact *contact);
-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);
-const gchar *empathy_contact_widget_get_alias (GtkWidget *widget);
-
-G_END_DECLS
-
-#endif /* __EMPATHY_CONTACT_WIDGET_H__ */
diff --git a/libempathy-gtk/empathy-contact-widget.ui b/libempathy-gtk/empathy-contact-widget.ui
deleted file mode 100644
index b2738981..00000000
--- a/libempathy-gtk/empathy-contact-widget.ui
+++ /dev/null
@@ -1,483 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<interface>
- <!-- interface-requires gtk+ 3.0 -->
- <object class="GtkVBox" id="vbox_contact_widget">
- <property name="can_focus">False</property>
- <property name="spacing">6</property>
- <child>
- <object class="GtkGrid" id="grid_contact">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="orientation">vertical</property>
- <property name="row_spacing">6</property>
- <property name="column_spacing">12</property>
- <child>
- <object class="GtkLabel" id="label_left_account">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="xalign">1</property>
- <property name="label" translatable="yes">Account</property>
- <style>
- <class name="dim-label"/>
- </style>
- </object>
- <packing>
- <property name="left_attach">1</property>
- <property name="top_attach">0</property>
- <property name="width">1</property>
- <property name="height">1</property>
- </packing>
- </child>
- <child>
- <object class="GtkLabel" id="label655">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="xalign">1</property>
- <property name="label" translatable="yes" comments="Identifier to connect to Instant Messaging network">Identifier</property>
- <style>
- <class name="dim-label"/>
- </style>
- </object>
- <packing>
- <property name="left_attach">1</property>
- <property name="top_attach">1</property>
- <property name="width">1</property>
- <property name="height">1</property>
- </packing>
- </child>
- <child>
- <object class="GtkLabel" id="label_alias">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="xalign">1</property>
- <property name="label" translatable="yes">Alias</property>
- <style>
- <class name="dim-label"/>
- </style>
- </object>
- <packing>
- <property name="left_attach">1</property>
- <property name="top_attach">2</property>
- <property name="width">1</property>
- <property name="height">1</property>
- </packing>
- </child>
- <child>
- <object class="GtkHBox" id="hbox_presence">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="spacing">6</property>
- <child>
- <object class="GtkImage" id="image_state">
- <property name="can_focus">False</property>
- <property name="stock">gtk-missing-image</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">0</property>
- </packing>
- </child>
- </object>
- <packing>
- <property name="left_attach">1</property>
- <property name="top_attach">3</property>
- <property name="width">1</property>
- <property name="height">1</property>
- </packing>
- </child>
- <child>
- <object class="GtkVBox" id="vbox_avatar">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <child>
- <placeholder/>
- </child>
- </object>
- <packing>
- <property name="left_attach">0</property>
- <property name="top_attach">0</property>
- <property name="width">1</property>
- <property name="height">3</property>
- </packing>
- </child>
- <child>
- <object class="GtkLabel" id="label_details">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="xalign">0</property>
- <property name="label" translatable="yes">Contact Details</property>
- <attributes>
- <attribute name="weight" value="bold"/>
- </attributes>
- </object>
- <packing>
- <property name="left_attach">1</property>
- <property name="top_attach">4</property>
- <property name="width">2</property>
- <property name="height">1</property>
- </packing>
- </child>
- <child>
- <placeholder/>
- </child>
- <child>
- <placeholder/>
- </child>
- <child>
- <placeholder/>
- </child>
- <child>
- <placeholder/>
- </child>
- <child>
- <placeholder/>
- </child>
- <child>
- <placeholder/>
- </child>
- </object>
- <packing>
- <property name="expand">True</property>
- <property name="fill">True</property>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkHBox" id="hbox_details_requested">
- <property name="can_focus">False</property>
- <property name="spacing">6</property>
- <child>
- <object class="GtkImage" id="image885">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="stock">gtk-dialog-info</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkLabel" id="label653">
- <property name="visible">True</property>
- <property name="can_focus">False</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>
- </object>
- <packing>
- <property name="expand">True</property>
- <property name="fill">True</property>
- <property name="position">1</property>
- </packing>
- </child>
- </object>
- <packing>
- <property name="expand">True</property>
- <property name="fill">True</property>
- <property name="position">1</property>
- </packing>
- </child>
- <child>
- <object class="GtkVBox" id="vbox_location">
- <property name="can_focus">False</property>
- <property name="spacing">6</property>
- <child>
- <object class="GtkLabel" id="label_location">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="xalign">0</property>
- <property name="label" translatable="yes">&lt;b&gt;Location&lt;/b&gt; at (date) </property>
- <property name="use_markup">True</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkAlignment" id="alignment1">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="left_padding">12</property>
- <child>
- <object class="GtkVBox" id="subvbox_location">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="spacing">5</property>
- <child>
- <placeholder/>
- </child>
- <child>
- <object class="GtkFrame" id="viewport_map">
- <property name="height_request">150</property>
- <property name="can_focus">False</property>
- <property name="resize_mode">queue</property>
- <property name="label_xalign">0</property>
- <property name="shadow_type">in</property>
- <child>
- <placeholder/>
- </child>
- </object>
- <packing>
- <property name="expand">True</property>
- <property name="fill">True</property>
- <property name="position">1</property>
- </packing>
- </child>
- </object>
- </child>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">1</property>
- </packing>
- </child>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="position">2</property>
- </packing>
- </child>
- <child>
- <object class="EmpathyGroupsWidget" id="groups_widget"/>
- <packing>
- <property name="expand">True</property>
- <property name="fill">True</property>
- <property name="position">3</property>
- </packing>
- </child>
- <child>
- <object class="GtkVBox" id="vbox_client">
- <property name="can_focus">False</property>
- <property name="spacing">6</property>
- <child>
- <object class="GtkLabel" id="label662">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="xalign">0</property>
- <property name="label" translatable="yes">Client Information</property>
- <attributes>
- <attribute name="weight" value="bold"/>
- </attributes>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkAlignment" id="alignment32">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="left_padding">12</property>
- <child>
- <object class="GtkVBox" id="vbox222">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="spacing">6</property>
- <child>
- <object class="GtkGrid" id="grid_client">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="row_spacing">6</property>
- <property name="column_spacing">12</property>
- <child>
- <object class="GtkLabel" id="label668">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="xalign">1</property>
- <property name="yalign">0</property>
- <property name="label" translatable="yes">OS</property>
- <style>
- <class name="dim-label"/>
- </style>
- </object>
- <packing>
- <property name="left_attach">3</property>
- <property name="top_attach">2</property>
- <property name="width">1</property>
- <property name="height">1</property>
- </packing>
- </child>
- <child>
- <object class="GtkLabel" id="label667">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="xalign">1</property>
- <property name="yalign">0</property>
- <property name="label" translatable="yes">Version</property>
- <style>
- <class name="dim-label"/>
- </style>
- </object>
- <packing>
- <property name="left_attach">3</property>
- <property name="top_attach">1</property>
- <property name="width">1</property>
- <property name="height">1</property>
- </packing>
- </child>
- <child>
- <object class="GtkLabel" id="label666">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="xalign">1</property>
- <property name="yalign">0</property>
- <property name="label" translatable="yes">Client</property>
- <style>
- <class name="dim-label"/>
- </style>
- </object>
- <packing>
- <property name="left_attach">4</property>
- <property name="top_attach">0</property>
- <property name="width">1</property>
- <property name="height">1</property>
- </packing>
- </child>
- <child>
- <object class="GtkLabel" id="label_client">
- <property name="visible">True</property>
- <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>
- </object>
- <packing>
- <property name="left_attach">1</property>
- <property name="top_attach">0</property>
- <property name="width">1</property>
- <property name="height">1</property>
- </packing>
- </child>
- <child>
- <object class="GtkLabel" id="label_version">
- <property name="visible">True</property>
- <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>
- </object>
- <packing>
- <property name="left_attach">1</property>
- <property name="top_attach">1</property>
- <property name="width">1</property>
- <property name="height">1</property>
- </packing>
- </child>
- <child>
- <object class="GtkLabel" id="label_os">
- <property name="visible">True</property>
- <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>
- </object>
- <packing>
- <property name="left_attach">1</property>
- <property name="top_attach">2</property>
- <property name="width">1</property>
- <property name="height">1</property>
- </packing>
- </child>
- <child>
- <placeholder/>
- </child>
- <child>
- <placeholder/>
- </child>
- <child>
- <placeholder/>
- </child>
- <child>
- <placeholder/>
- </child>
- <child>
- <placeholder/>
- </child>
- <child>
- <placeholder/>
- </child>
- <child>
- <placeholder/>
- </child>
- <child>
- <placeholder/>
- </child>
- <child>
- <placeholder/>
- </child>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkHBox" id="hbox_client_requested">
- <property name="can_focus">False</property>
- <property name="spacing">6</property>
- <child>
- <object class="GtkImage" id="image887">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="stock">gtk-dialog-info</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkLabel" id="label669">
- <property name="visible">True</property>
- <property name="can_focus">False</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>
- </object>
- <packing>
- <property name="expand">True</property>
- <property name="fill">True</property>
- <property name="position">1</property>
- </packing>
- </child>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">1</property>
- </packing>
- </child>
- </object>
- </child>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">1</property>
- </packing>
- </child>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="position">4</property>
- </packing>
- </child>
- </object>
-</interface>
diff --git a/libempathy-gtk/empathy-dialpad-button.c b/libempathy-gtk/empathy-dialpad-button.c
deleted file mode 100644
index 792241fd..00000000
--- a/libempathy-gtk/empathy-dialpad-button.c
+++ /dev/null
@@ -1,226 +0,0 @@
-/*
- * Copyright (C) 2011-2012 Collabora Ltd.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301 USA
- *
- * Authors: Danielle Madeley <danielle.madeley@collabora.co.uk>
- * Guillaume Desmottes <guillaume.desmottes@collabora.co.uk>
- */
-
-#include "config.h"
-#include "empathy-dialpad-button.h"
-
-G_DEFINE_TYPE (EmpathyDialpadButton, empathy_dialpad_button, GTK_TYPE_BUTTON)
-
-enum
-{
- PROP_LABEL = 1,
- PROP_SUB_LABEL,
- PROP_EVENT,
- N_PROPS
-};
-
-/*
-enum
-{
- LAST_SIGNAL
-};
-
-static guint signals[LAST_SIGNAL];
-*/
-
-struct _EmpathyDialpadButtonPriv
-{
- gchar *label;
- gchar *sub_label;
- TpDTMFEvent event;
-};
-
-static void
-empathy_dialpad_button_get_property (GObject *object,
- guint property_id,
- GValue *value,
- GParamSpec *pspec)
-{
- EmpathyDialpadButton *self = EMPATHY_DIALPAD_BUTTON (object);
-
- switch (property_id)
- {
- case PROP_LABEL:
- g_value_set_string (value, self->priv->label);
- break;
- case PROP_SUB_LABEL:
- g_value_set_string (value, self->priv->sub_label);
- break;
- case PROP_EVENT:
- g_value_set_uint (value, self->priv->event);
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
- break;
- }
-}
-
-static void
-empathy_dialpad_button_set_property (GObject *object,
- guint property_id,
- const GValue *value,
- GParamSpec *pspec)
-{
- EmpathyDialpadButton *self = EMPATHY_DIALPAD_BUTTON (object);
-
- switch (property_id)
- {
- case PROP_LABEL:
- g_assert (self->priv->label == NULL); /* construct-only */
- self->priv->label = g_value_dup_string (value);
- break;
- case PROP_SUB_LABEL:
- g_assert (self->priv->sub_label == NULL); /* construct-only */
- self->priv->sub_label = g_value_dup_string (value);
- break;
- case PROP_EVENT:
- self->priv->event = g_value_get_uint (value);
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
- break;
- }
-}
-
-static void
-empathy_dialpad_button_constructed (GObject *object)
-{
- EmpathyDialpadButton *self = EMPATHY_DIALPAD_BUTTON (object);
- void (*chain_up) (GObject *) =
- ((GObjectClass *) empathy_dialpad_button_parent_class)->constructed;
- GtkWidget *vbox;
- GtkWidget *label;
- gchar *str;
-
- g_assert (self->priv->label != NULL);
- g_assert (self->priv->sub_label != NULL);
-
- vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
-
- gtk_container_add (GTK_CONTAINER (self), vbox);
-
- /* main label */
- label = gtk_label_new ("");
- str = g_strdup_printf ("<span size='x-large'>%s</span>",
- self->priv->label);
- gtk_label_set_markup (GTK_LABEL (label), str);
- g_free (str);
-
- gtk_box_pack_start (GTK_BOX (vbox), label, TRUE, TRUE, 3);
-
- /* sub label */
- label = gtk_label_new ("");
- str = g_strdup_printf (
- "<span foreground='#555555'>%s</span>",
- self->priv->sub_label);
- gtk_label_set_markup (GTK_LABEL (label), str);
- g_free (str);
-
- gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, TRUE, 0);
-
- if (chain_up != NULL)
- chain_up (object);
-}
-
-static void
-empathy_dialpad_button_finalize (GObject *object)
-{
- EmpathyDialpadButton *self = EMPATHY_DIALPAD_BUTTON (object);
- void (*chain_up) (GObject *) =
- ((GObjectClass *) empathy_dialpad_button_parent_class)->finalize;
-
- g_free (self->priv->label);
- g_free (self->priv->sub_label);
-
- if (chain_up != NULL)
- chain_up (object);
-}
-
-static void
-empathy_dialpad_button_class_init (
- EmpathyDialpadButtonClass *klass)
-{
- GObjectClass *oclass = G_OBJECT_CLASS (klass);
- GParamSpec *spec;
-
- oclass->get_property = empathy_dialpad_button_get_property;
- oclass->set_property = empathy_dialpad_button_set_property;
- oclass->constructed = empathy_dialpad_button_constructed;
- oclass->finalize = empathy_dialpad_button_finalize;
-
- spec = g_param_spec_string ("label", "label",
- "Label",
- NULL,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS);
- g_object_class_install_property (oclass, PROP_LABEL, spec);
-
- spec = g_param_spec_string ("sub-label", "sub-label",
- "Sub-label",
- NULL,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS);
- g_object_class_install_property (oclass, PROP_SUB_LABEL, spec);
-
- spec = g_param_spec_uint ("event", "event",
- "TpDTMFEvent",
- 0, TP_NUM_DTMF_EVENTS, 0,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS);
- g_object_class_install_property (oclass, PROP_EVENT, spec);
-
- g_type_class_add_private (klass, sizeof (EmpathyDialpadButtonPriv));
-}
-
-static void
-empathy_dialpad_button_init (EmpathyDialpadButton *self)
-{
- self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self,
- EMPATHY_TYPE_DIALPAD_BUTTON, EmpathyDialpadButtonPriv);
-}
-
-GtkWidget *
-empathy_dialpad_button_new (const gchar *label,
- const gchar *sub_label,
- TpDTMFEvent event)
-{
- return g_object_new (EMPATHY_TYPE_DIALPAD_BUTTON,
- "label", label,
- "sub-label", sub_label,
- "event", event,
- NULL);
-}
-
-const gchar *
-empathy_dialpad_button_get_label (EmpathyDialpadButton *self)
-{
- return self->priv->label;
-}
-
-const gchar *
-empathy_dialpad_button_get_sub_label (EmpathyDialpadButton *self)
-{
- return self->priv->sub_label;
-}
-
-TpDTMFEvent
-empathy_dialpad_button_get_event (EmpathyDialpadButton *self)
-{
- return self->priv->event;
-}
diff --git a/libempathy-gtk/empathy-dialpad-button.h b/libempathy-gtk/empathy-dialpad-button.h
deleted file mode 100644
index cd312bda..00000000
--- a/libempathy-gtk/empathy-dialpad-button.h
+++ /dev/null
@@ -1,84 +0,0 @@
-/*
- * Copyright (C) 2011-2012 Collabora Ltd.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301 USA
- *
- * Authors: Danielle Madeley <danielle.madeley@collabora.co.uk>
- * Guillaume Desmottes <guillaume.desmottes@collabora.co.uk>
- */
-
-
-#ifndef __EMPATHY_DIALPAD_BUTTON_H__
-#define __EMPATHY_DIALPAD_BUTTON_H__
-
-#include <gtk/gtk.h>
-#include <telepathy-glib/telepathy-glib.h>
-
-G_BEGIN_DECLS
-
-typedef struct _EmpathyDialpadButton EmpathyDialpadButton;
-typedef struct _EmpathyDialpadButtonClass EmpathyDialpadButtonClass;
-typedef struct _EmpathyDialpadButtonPriv EmpathyDialpadButtonPriv;
-
-struct _EmpathyDialpadButtonClass
-{
- /*<private>*/
- GtkButtonClass parent_class;
-};
-
-struct _EmpathyDialpadButton
-{
- /*<private>*/
- GtkButton parent;
- EmpathyDialpadButtonPriv *priv;
-};
-
-GType empathy_dialpad_button_get_type (void);
-
-/* TYPE MACROS */
-#define EMPATHY_TYPE_DIALPAD_BUTTON \
- (empathy_dialpad_button_get_type ())
-#define EMPATHY_DIALPAD_BUTTON(obj) \
- (G_TYPE_CHECK_INSTANCE_CAST((obj), \
- EMPATHY_TYPE_DIALPAD_BUTTON, \
- EmpathyDialpadButton))
-#define EMPATHY_DIALPAD_BUTTON_CLASS(klass) \
- (G_TYPE_CHECK_CLASS_CAST((klass), \
- EMPATHY_TYPE_DIALPAD_BUTTON, \
- EmpathyDialpadButtonClass))
-#define EMPATHY_IS_DIALPAD_BUTTON(obj) \
- (G_TYPE_CHECK_INSTANCE_TYPE((obj), \
- EMPATHY_TYPE_DIALPAD_BUTTON))
-#define EMPATHY_IS_DIALPAD_BUTTON_CLASS(klass) \
- (G_TYPE_CHECK_CLASS_TYPE((klass), \
- EMPATHY_TYPE_DIALPAD_BUTTON))
-#define EMPATHY_DIALPAD_BUTTON_GET_CLASS(obj) \
- (G_TYPE_INSTANCE_GET_CLASS ((obj), \
- EMPATHY_TYPE_DIALPAD_BUTTON, \
- EmpathyDialpadButtonClass))
-
-GtkWidget * empathy_dialpad_button_new (
- const gchar *label,
- const gchar *sub_label,
- TpDTMFEvent event);
-
-const gchar * empathy_dialpad_button_get_label (EmpathyDialpadButton *self);
-const gchar * empathy_dialpad_button_get_sub_label (EmpathyDialpadButton *self);
-TpDTMFEvent empathy_dialpad_button_get_event (EmpathyDialpadButton *self);
-
-G_END_DECLS
-
-#endif /* #ifndef __EMPATHY_DIALPAD_BUTTON_H__*/
diff --git a/libempathy-gtk/empathy-dialpad-widget.c b/libempathy-gtk/empathy-dialpad-widget.c
deleted file mode 100644
index 6c85c797..00000000
--- a/libempathy-gtk/empathy-dialpad-widget.c
+++ /dev/null
@@ -1,211 +0,0 @@
-/*
- * Copyright (C) 2011 Collabora Ltd.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301 USA
- *
- * Authors: Danielle Madeley <danielle.madeley@collabora.co.uk>
- */
-
-#include "config.h"
-#include "empathy-dialpad-widget.h"
-
-#include "empathy-dialpad-button.h"
-
-G_DEFINE_TYPE (EmpathyDialpadWidget, empathy_dialpad_widget, GTK_TYPE_BOX);
-
-enum /* signals */
-{
- START_TONE,
- STOP_TONE,
-
- NUM_SIGNALS
-};
-
-static guint signals[NUM_SIGNALS] = { 0, };
-
-struct _EmpathyDialpadWidgetPrivate
-{
- GtkWidget *entry;
-
- /* gchar representing the button (like '7') -> GtkButton */
- GHashTable *buttons;
-};
-
-static void
-empathy_dialpad_widget_dispose (GObject *object)
-{
- EmpathyDialpadWidget *self = EMPATHY_DIALPAD_WIDGET (object);
- void (*chain_up) (GObject *) =
- ((GObjectClass *) empathy_dialpad_widget_parent_class)->dispose;
-
- g_hash_table_unref (self->priv->buttons);
-
- if (chain_up != NULL)
- chain_up (object);
-}
-
-static void
-empathy_dialpad_widget_class_init (EmpathyDialpadWidgetClass *klass)
-{
- GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
-
- gobject_class->dispose = empathy_dialpad_widget_dispose;
-
- signals[START_TONE] = g_signal_new ("start-tone",
- G_TYPE_FROM_CLASS (klass),
- G_SIGNAL_RUN_LAST,
- 0, NULL, NULL,
- g_cclosure_marshal_generic,
- G_TYPE_NONE,
- 1, G_TYPE_UINT);
-
- signals[STOP_TONE] = g_signal_new ("stop-tone",
- G_TYPE_FROM_CLASS (klass),
- G_SIGNAL_RUN_LAST,
- 0, NULL, NULL,
- g_cclosure_marshal_generic,
- G_TYPE_NONE,
- 1, G_TYPE_UINT);
-
- g_type_class_add_private (gobject_class,
- sizeof (EmpathyDialpadWidgetPrivate));
-}
-
-static gboolean
-dtmf_dialpad_button_pressed_cb (EmpathyDialpadButton *button,
- GdkEventButton *event,
- EmpathyDialpadWidget *self)
-{
- GtkEntryBuffer *buffer = gtk_entry_get_buffer (GTK_ENTRY (self->priv->entry));
- TpDTMFEvent tone;
- const gchar *label;
-
- tone = empathy_dialpad_button_get_event (button);
- label = empathy_dialpad_button_get_label (button);
-
- g_signal_emit (self, signals[START_TONE], 0, tone);
-
- gtk_entry_buffer_insert_text (buffer, -1, label, -1);
- gtk_editable_set_position (GTK_EDITABLE (self->priv->entry), -1);
-
- return FALSE;
-}
-
-static gboolean
-dtmf_dialpad_button_released_cb (EmpathyDialpadButton *button,
- GdkEventButton *event,
- EmpathyDialpadWidget *self)
-{
- TpDTMFEvent tone;
-
- tone = empathy_dialpad_button_get_event (button);
-
- g_signal_emit (self, signals[STOP_TONE], 0, tone);
-
- return FALSE;
-}
-
-static void
-empathy_dialpad_widget_init (EmpathyDialpadWidget *self)
-{
- GtkWidget *grid;
- int i;
-
- struct {
- const gchar *label;
- const gchar *sublabel;
- TpDTMFEvent event;
- } dtmfbuttons[] = { { "1", "", TP_DTMF_EVENT_DIGIT_1 },
- { "2", "abc", TP_DTMF_EVENT_DIGIT_2 },
- { "3", "def", TP_DTMF_EVENT_DIGIT_3 },
- { "4", "ghi", TP_DTMF_EVENT_DIGIT_4 },
- { "5", "jkl", TP_DTMF_EVENT_DIGIT_5 },
- { "6", "mno", TP_DTMF_EVENT_DIGIT_6 },
- { "7", "pqrs", TP_DTMF_EVENT_DIGIT_7 },
- { "8", "tuv", TP_DTMF_EVENT_DIGIT_8 },
- { "9", "wxyz", TP_DTMF_EVENT_DIGIT_9 },
- { "#", "", TP_DTMF_EVENT_HASH },
- { "0", "", TP_DTMF_EVENT_DIGIT_0 },
- { "*", "", TP_DTMF_EVENT_ASTERISK },
- { NULL, } };
-
- self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, EMPATHY_TYPE_DIALPAD_WIDGET,
- EmpathyDialpadWidgetPrivate);
-
- gtk_orientable_set_orientation (GTK_ORIENTABLE (self),
- GTK_ORIENTATION_VERTICAL);
- gtk_box_set_spacing (GTK_BOX (self), 3);
-
- self->priv->entry = gtk_entry_new ();
- gtk_editable_set_editable (GTK_EDITABLE (self->priv->entry), FALSE);
-
- gtk_box_pack_start (GTK_BOX (self), self->priv->entry, FALSE, FALSE, 3);
-
- grid = gtk_grid_new ();
- gtk_grid_set_column_homogeneous (GTK_GRID (grid), TRUE);
- gtk_grid_set_row_homogeneous (GTK_GRID (grid), TRUE);
-
- self->priv->buttons = g_hash_table_new (NULL, NULL);
-
- for (i = 0; dtmfbuttons[i].label != NULL; i++)
- {
- GtkWidget *button;
-
- button = empathy_dialpad_button_new (dtmfbuttons[i].label,
- dtmfbuttons[i].sublabel, dtmfbuttons[i].event);
-
- gtk_grid_attach (GTK_GRID (grid), button, i % 3, i / 3,
- 1, 1);
-
- g_signal_connect (G_OBJECT (button), "button-press-event",
- G_CALLBACK (dtmf_dialpad_button_pressed_cb), self);
- g_signal_connect (G_OBJECT (button), "button-release-event",
- G_CALLBACK (dtmf_dialpad_button_released_cb), self);
-
- g_hash_table_insert (self->priv->buttons,
- GUINT_TO_POINTER (dtmfbuttons[i].label[0]), button);
- }
-
- gtk_box_pack_start (GTK_BOX (self), grid, FALSE, FALSE, 3);
-
- /* show everything but the packing box */
- gtk_widget_show_all (GTK_WIDGET (self));
- gtk_widget_hide (GTK_WIDGET (self));
-}
-
-GtkWidget *
-empathy_dialpad_widget_new (void)
-{
- return g_object_new (EMPATHY_TYPE_DIALPAD_WIDGET, NULL);
-}
-
-void
-empathy_dialpad_widget_press_key (EmpathyDialpadWidget *self,
- gchar key)
-{
- EmpathyDialpadButton *button;
-
- button = g_hash_table_lookup (self->priv->buttons, GUINT_TO_POINTER (key));
-
- if (button == NULL)
- return;
-
- /* gtk_widget_activate() just does the button-pressed animation, it doesn't
- * fire the callbacks so we do it manually. */
- dtmf_dialpad_button_pressed_cb (button, NULL, self);
- gtk_widget_activate (GTK_WIDGET (button));
- dtmf_dialpad_button_released_cb (button, NULL, self);
-}
diff --git a/libempathy-gtk/empathy-dialpad-widget.h b/libempathy-gtk/empathy-dialpad-widget.h
deleted file mode 100644
index ccf5ac40..00000000
--- a/libempathy-gtk/empathy-dialpad-widget.h
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * Copyright (C) 2011 Collabora Ltd.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301 USA
- *
- * Authors: Danielle Madeley <danielle.madeley@collabora.co.uk>
- */
-
-#ifndef __EMPATHY_DIALPAD_WIDGET_H__
-#define __EMPATHY_DIALPAD_WIDGET_H__
-
-#include <gtk/gtk.h>
-
-G_BEGIN_DECLS
-
-#define EMPATHY_TYPE_DIALPAD_WIDGET (empathy_dialpad_widget_get_type ())
-#define EMPATHY_DIALPAD_WIDGET(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), EMPATHY_TYPE_DIALPAD_WIDGET, EmpathyDialpadWidget))
-#define EMPATHY_DIALPAD_WIDGET_CLASS(obj) (G_TYPE_CHECK_CLASS_CAST ((obj), EMPATHY_TYPE_DIALPAD_WIDGET, EmpathyDialpadWidgetClass))
-#define EMPATHY_IS_DIALPAD_WIDGET(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), EMPATHY_TYPE_DIALPAD_WIDGET))
-#define EMPATHY_IS_DIALPAD_WIDGET_CLASS(obj) (G_TYPE_CHECK_CLASS_TYPE ((obj), EMPATHY_TYPE_DIALPAD_WIDGET))
-#define EMPATHY_DIALPAD_WIDGET_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), EMPATHY_TYPE_DIALPAD_WIDGET, EmpathyDialpadWidgetClass))
-
-typedef struct _EmpathyDialpadWidget EmpathyDialpadWidget;
-typedef struct _EmpathyDialpadWidgetClass EmpathyDialpadWidgetClass;
-typedef struct _EmpathyDialpadWidgetPrivate EmpathyDialpadWidgetPrivate;
-
-struct _EmpathyDialpadWidget
-{
- GtkBox parent;
-
- EmpathyDialpadWidgetPrivate *priv;
-};
-
-struct _EmpathyDialpadWidgetClass
-{
- GtkBoxClass parent_class;
-};
-
-GType empathy_dialpad_widget_get_type (void);
-GtkWidget *empathy_dialpad_widget_new (void);
-
-void empathy_dialpad_widget_press_key (EmpathyDialpadWidget *self,
- gchar key);
-
-G_END_DECLS
-
-#endif
diff --git a/libempathy-gtk/empathy-geometry.c b/libempathy-gtk/empathy-geometry.c
deleted file mode 100644
index 6874cd79..00000000
--- a/libempathy-gtk/empathy-geometry.c
+++ /dev/null
@@ -1,357 +0,0 @@
-/*
- * 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., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301 USA
- *
- * Authors: Martyn Russell <martyn@imendio.com>
- * Xavier Claessens <xclaesse@gmail.com>
- */
-
-#include "config.h"
-#include "empathy-geometry.h"
-
-#include <sys/stat.h>
-#include <tp-account-widgets/tpaw-utils.h>
-
-#include "empathy-ui-utils.h"
-#include "empathy-utils.h"
-
-#define DEBUG_FLAG EMPATHY_DEBUG_OTHER
-#include "empathy-debug.h"
-
-#define GEOMETRY_DIR_CREATE_MODE (S_IRUSR | S_IWUSR | S_IXUSR)
-#define GEOMETRY_FILE_CREATE_MODE (S_IRUSR | S_IWUSR)
-
-/* geometry.ini file contains 2 groups:
- * - one with position and size of each window
- * - one with the maximized state of each window
- * Windows are identified by a name. (e.g. "main-window") */
-#define GEOMETRY_FILENAME "geometry.ini"
-#define GEOMETRY_POSITION_FORMAT "%d,%d,%d,%d" /* "x,y,w,h" */
-#define GEOMETRY_POSITION_GROUP "geometry"
-#define GEOMETRY_MAXIMIZED_GROUP "maximized"
-
-/* Key used to keep window's name inside the object's qdata */
-#define GEOMETRY_NAME_KEY "geometry-name-key"
-
-static guint store_id = 0;
-
-static void
-geometry_real_store (GKeyFile *key_file)
-{
- gchar *filename;
- gchar *content;
- gsize length;
- GError *error = NULL;
-
- content = g_key_file_to_data (key_file, &length, &error);
- if (error != NULL)
- {
- DEBUG ("Error: %s", error->message);
- g_error_free (error);
- return;
- }
-
- filename = g_build_filename (g_get_user_config_dir (),
- PACKAGE_NAME, GEOMETRY_FILENAME, NULL);
-
- if (!g_file_set_contents (filename, content, length, &error))
- {
- DEBUG ("Error: %s", error->message);
- g_error_free (error);
- }
-
- g_free (content);
- g_free (filename);
-}
-
-static gboolean
-geometry_store_cb (gpointer key_file)
-{
- geometry_real_store (key_file);
- store_id = 0;
-
- return FALSE;
-}
-
-static void
-geometry_schedule_store (GKeyFile *key_file)
-{
- if (store_id != 0)
- g_source_remove (store_id);
-
- store_id = g_timeout_add_seconds (1, geometry_store_cb, key_file);
-}
-
-static GKeyFile *
-geometry_get_key_file (void)
-{
- static GKeyFile *key_file = NULL;
- gchar *dir;
- gchar *filename;
-
- if (key_file != NULL)
- return key_file;
-
- dir = g_build_filename (g_get_user_config_dir (), 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_FILENAME, NULL);
- g_free (dir);
-
- key_file = g_key_file_new ();
- g_key_file_load_from_file (key_file, filename, G_KEY_FILE_NONE, NULL);
- g_free (filename);
-
- return key_file;
-}
-
-void
-empathy_geometry_save_values (GtkWindow *window,
- gint x,
- gint y,
- gint w,
- gint h,
- gboolean maximized)
-{
- GKeyFile *key_file;
- gchar *position_str = NULL;
- GHashTable *names;
- GHashTableIter iter;
- const gchar *name;
-
- names = g_object_get_data (G_OBJECT (window), GEOMETRY_NAME_KEY);
-
- g_return_if_fail (GTK_IS_WINDOW (window));
- g_return_if_fail (names != NULL);
-
- /* Don't save off-screen positioning */
- if (!EMPATHY_RECT_IS_ON_SCREEN (x, y, w, h))
- return;
-
- key_file = geometry_get_key_file ();
-
- /* Save window size only if not maximized */
- if (!maximized)
- {
- position_str = g_strdup_printf (GEOMETRY_POSITION_FORMAT, x, y, w, h);
- }
-
- g_hash_table_iter_init (&iter, names);
- while (g_hash_table_iter_next (&iter, (gpointer) &name, NULL))
- {
- gchar *escaped_name;
-
- /* escape the name so that unwanted characters such as # are removed */
- escaped_name = g_uri_escape_string (name, NULL, TRUE);
-
- g_key_file_set_boolean (key_file, GEOMETRY_MAXIMIZED_GROUP,
- escaped_name, maximized);
-
- if (position_str != NULL)
- g_key_file_set_string (key_file, GEOMETRY_POSITION_GROUP,
- escaped_name, position_str);
-
- g_free (escaped_name);
- }
-
-
- geometry_schedule_store (key_file);
- g_free (position_str);
-}
-
-static void
-empathy_geometry_save (GtkWindow *window)
-{
- GdkWindow *gdk_window;
- GdkWindowState window_state;
- gboolean maximized;
- gint x, y, w, h;
-
- g_return_if_fail (GTK_IS_WINDOW (window));
-
- if (!gtk_widget_get_visible (GTK_WIDGET (window)))
- return;
-
- /* Get window geometry */
- gtk_window_get_position (window, &x, &y);
- gtk_window_get_size (window, &w, &h);
-
- gdk_window = gtk_widget_get_window (GTK_WIDGET (window));
- window_state = gdk_window_get_state (gdk_window);
- maximized = (window_state & GDK_WINDOW_STATE_MAXIMIZED) != 0;
-
- empathy_geometry_save_values (window, x, y, w, h, maximized);
-}
-
-static void
-empathy_geometry_load (GtkWindow *window,
- const gchar *name)
-{
- GKeyFile *key_file;
- gchar *escaped_name;
- gchar *str;
- gboolean maximized;
-
- g_return_if_fail (GTK_IS_WINDOW (window));
- g_return_if_fail (!TPAW_STR_EMPTY (name));
-
- /* escape the name so that unwanted characters such as # are removed */
- escaped_name = g_uri_escape_string (name, NULL, TRUE);
-
- key_file = geometry_get_key_file ();
-
- /* restore window size and position */
- str = g_key_file_get_string (key_file, GEOMETRY_POSITION_GROUP,
- escaped_name, NULL);
- if (str)
- {
- gint x, y, w, h;
-
- sscanf (str, GEOMETRY_POSITION_FORMAT, &x, &y, &w, &h);
- gtk_window_move (window, x, y);
- gtk_window_resize (window, w, h);
- }
-
- /* restore window maximized state */
- maximized = g_key_file_get_boolean (key_file, GEOMETRY_MAXIMIZED_GROUP,
- escaped_name, NULL);
-
- if (maximized)
- gtk_window_maximize (window);
- else
- gtk_window_unmaximize (window);
-
- g_free (str);
- g_free (escaped_name);
-}
-
-static gboolean
-geometry_configure_event_cb (GtkWindow *window,
- GdkEventConfigure *event,
- gpointer user_data)
-{
- empathy_geometry_save (window);
-
- return FALSE;
-}
-
-static gboolean
-geometry_window_state_event_cb (GtkWindow *window,
- GdkEventWindowState *event,
- gpointer user_data)
-{
- if ((event->changed_mask & GDK_WINDOW_STATE_MAXIMIZED) != 0)
- {
- empathy_geometry_save (window);
- }
-
- return FALSE;
-}
-
-static void
-geometry_map_cb (GtkWindow *window,
- gpointer user_data)
-{
- GHashTable *names;
- GHashTableIter iter;
- const gchar *name;
-
- /* The WM will replace this window, restore its last position */
- names = g_object_get_data (G_OBJECT (window), GEOMETRY_NAME_KEY);
-
- g_assert (names != NULL);
-
- /* Use the first name we get in the hash table */
- g_hash_table_iter_init (&iter, names);
- g_assert (g_hash_table_iter_next (&iter, (gpointer) &name, NULL));
-
- empathy_geometry_load (window, name);
-}
-
-void
-empathy_geometry_bind (GtkWindow *window,
- const gchar *name)
-{
- GHashTable *names;
- gboolean connect_sigs = FALSE;
-
- g_return_if_fail (GTK_IS_WINDOW (window));
- g_return_if_fail (!TPAW_STR_EMPTY (name));
-
- /* Check if this window is already bound */
- names = g_object_get_data (G_OBJECT (window), GEOMETRY_NAME_KEY);
- if (names == NULL)
- {
- connect_sigs = TRUE;
- names = g_hash_table_new_full (g_str_hash, g_str_equal,
- g_free, NULL);
-
- g_object_set_data_full (G_OBJECT (window), GEOMETRY_NAME_KEY, names,
- (GDestroyNotify) g_hash_table_unref);
- }
- else if (g_hash_table_lookup (names, name) != NULL)
- {
- return;
- }
-
- /* Store the geometry name in the window's data */
- g_hash_table_insert (names, g_strdup (name), GUINT_TO_POINTER (TRUE));
-
- /* Load initial geometry */
- empathy_geometry_load (window, name);
-
- if (!connect_sigs)
- return;
-
- /* Track geometry changes */
- g_signal_connect (window, "configure-event",
- G_CALLBACK (geometry_configure_event_cb), NULL);
- g_signal_connect (window, "window-state-event",
- G_CALLBACK (geometry_window_state_event_cb), NULL);
- g_signal_connect (window, "map",
- G_CALLBACK (geometry_map_cb), NULL);
-}
-
-void
-empathy_geometry_unbind (GtkWindow *window,
- const gchar *name)
-{
- GHashTable *names;
-
- names = g_object_get_data (G_OBJECT (window), GEOMETRY_NAME_KEY);
- if (names == NULL)
- return;
-
- g_hash_table_remove (names, name);
-
- if (g_hash_table_size (names) > 0)
- return;
-
- g_signal_handlers_disconnect_by_func (window,
- geometry_configure_event_cb, NULL);
- g_signal_handlers_disconnect_by_func (window,
- geometry_window_state_event_cb, NULL);
- g_signal_handlers_disconnect_by_func (window,
- geometry_map_cb, NULL);
-
- g_object_set_data (G_OBJECT (window), GEOMETRY_NAME_KEY, NULL);
-}
diff --git a/libempathy-gtk/empathy-geometry.h b/libempathy-gtk/empathy-geometry.h
deleted file mode 100644
index e1412ab8..00000000
--- a/libempathy-gtk/empathy-geometry.h
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * 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., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301 USA
- *
- * Authors: Martyn Russell <martyn@imendio.com>
- * Xavier Claessens <xclaesse@gmail.com>
- */
-
-#ifndef __EMPATHY_GEOMETRY_H__
-#define __EMPATHY_GEOMETRY_H__
-
-#include <gtk/gtk.h>
-
-G_BEGIN_DECLS
-
-void empathy_geometry_bind (GtkWindow *window,
- const gchar *name);
-
-void empathy_geometry_unbind (GtkWindow *window,
- const gchar *name);
-
-void empathy_geometry_save_values (GtkWindow *window,
- gint x,
- gint y,
- gint w,
- gint h,
- gboolean maximized);
-
-G_END_DECLS
-
-#endif /* __EMPATHY_GEOMETRY_H__ */
diff --git a/libempathy-gtk/empathy-groups-widget.c b/libempathy-gtk/empathy-groups-widget.c
deleted file mode 100644
index b7f4b256..00000000
--- a/libempathy-gtk/empathy-groups-widget.c
+++ /dev/null
@@ -1,587 +0,0 @@
-/*
- * Copyright (C) 2007-2010 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>
- * Philip Withnall <philip.withnall@collabora.co.uk>
- */
-
-#include "config.h"
-#include "empathy-groups-widget.h"
-
-#include <glib/gi18n-lib.h>
-#include <tp-account-widgets/tpaw-utils.h>
-
-#include "empathy-utils.h"
-#include "empathy-connection-aggregator.h"
-
-/**
- * SECTION:empathy-groups-widget
- * @title:EmpathyGroupsWidget
- * @short_description: A widget used to edit the groups of a #FolksGroupDetails
- * @include: libempathy-gtk/empathy-groups-widget.h
- *
- * #EmpathyGroupsWidget is a widget which lists the groups of a
- * #FolksGroupDetails (i.e. a #FolksPersona or a #FolksIndividual) and allows
- * them to be added and removed.
- */
-
-/**
- * EmpathyGroupsWidget:
- * @parent: parent object
- *
- * Widget which displays and allows editing of the groups of a
- * #FolksGroupDetails (i.e. a #FolksPersona or #FolksIndividual).
- */
-
-/* Delay before updating the widget when the id entry changed (seconds) */
-#define ID_CHANGED_TIMEOUT 1
-
-#define GET_PRIV(obj) EMPATHY_GET_PRIV (obj, EmpathyGroupsWidget)
-
-typedef struct
-{
- /* The object we're actually changing the groups of */
- FolksGroupDetails *group_details; /* owned */
- GtkListStore *group_store; /* owned */
-
- GtkWidget *add_group_entry; /* child widget */
- GtkWidget *add_group_button; /* child widget */
-} EmpathyGroupsWidgetPriv;
-
-enum {
- PROP_GROUP_DETAILS = 1,
-};
-
-enum {
- COL_NAME,
- COL_ENABLED,
- COL_EDITABLE
-};
-#define NUM_COLUMNS COL_EDITABLE + 1
-
-G_DEFINE_TYPE (EmpathyGroupsWidget, empathy_groups_widget, GTK_TYPE_BOX);
-
-typedef struct
-{
- EmpathyGroupsWidget *widget;
- const gchar *name;
- gboolean found;
- GtkTreeIter found_iter;
-} FindNameData;
-
-static gboolean
-model_find_name_foreach (GtkTreeModel *model,
- GtkTreePath *path,
- GtkTreeIter *iter,
- FindNameData *data)
-{
- gchar *name;
-
- gtk_tree_model_get (model, iter,
- COL_NAME, &name,
- -1);
-
- if (name != NULL && strcmp (data->name, name) == 0)
- {
- data->found = TRUE;
- data->found_iter = *iter;
-
- g_free (name);
-
- return TRUE;
- }
-
- g_free (name);
-
- return FALSE;
-}
-
-static gboolean
-model_find_name (EmpathyGroupsWidget *self,
- const gchar *name,
- GtkTreeIter *iter)
-{
- EmpathyGroupsWidgetPriv *priv = GET_PRIV (self);
- FindNameData data;
-
- if (TPAW_STR_EMPTY (name))
- return FALSE;
-
- data.widget = self;
- data.name = name;
- data.found = FALSE;
-
- gtk_tree_model_foreach (GTK_TREE_MODEL (priv->group_store),
- (GtkTreeModelForeachFunc) model_find_name_foreach, &data);
-
- if (data.found == TRUE)
- {
- *iter = data.found_iter;
- return TRUE;
- }
-
- return FALSE;
-}
-
-static void
-populate_data (EmpathyGroupsWidget *self)
-{
- EmpathyGroupsWidgetPriv *priv = GET_PRIV (self);
- EmpathyConnectionAggregator *aggregator;
- GeeSet *member_groups;
- GList *all_groups, *l;
-
- /* Remove the old groups */
- gtk_list_store_clear (priv->group_store);
-
- /* FIXME: We have to get the whole group list from
- * EmpathyConnectionAggregator, as libfolks hasn't grown API to get the whole
- * group list yet. (bgo#627398) */
- aggregator = empathy_connection_aggregator_dup_singleton ();
- all_groups = empathy_connection_aggregator_get_all_groups (aggregator);
- g_object_unref (aggregator);
-
- /* Get the list of groups that this #FolksGroupDetails is currently in */
- member_groups = folks_group_details_get_groups (priv->group_details);
-
- for (l = all_groups; l != NULL; l = l->next)
- {
- const gchar *group_str = l->data;
- gboolean enabled;
-
- enabled = gee_collection_contains (GEE_COLLECTION (member_groups),
- group_str);
-
- gtk_list_store_insert_with_values (priv->group_store, NULL, -1,
- COL_NAME, group_str,
- COL_EDITABLE, TRUE,
- COL_ENABLED, enabled,
- -1);
- }
-
- g_list_free (all_groups);
-}
-
-static void
-add_group_entry_changed_cb (GtkEditable *editable,
- EmpathyGroupsWidget *self)
-{
- EmpathyGroupsWidgetPriv *priv = GET_PRIV (self);
- GtkTreeIter iter;
- const gchar *group;
-
- group = gtk_entry_get_text (GTK_ENTRY (priv->add_group_entry));
-
- if (model_find_name (self, group, &iter))
- {
- gtk_widget_set_sensitive (GTK_WIDGET (priv->add_group_button), FALSE);
- }
- else
- {
- gtk_widget_set_sensitive (GTK_WIDGET (priv->add_group_button),
- !TPAW_STR_EMPTY (group));
- }
-}
-
-static void
-add_group_entry_activate_cb (GtkEntry *entry,
- EmpathyGroupsWidget *self)
-{
- gtk_widget_activate (GTK_WIDGET (GET_PRIV (self)->add_group_button));
-}
-
-static void
-change_group_cb (FolksGroupDetails *group_details,
- GAsyncResult *async_result,
- EmpathyGroupsWidget *self)
-{
- GError *error = NULL;
-
- folks_group_details_change_group_finish (group_details, async_result, &error);
-
- if (error != NULL)
- {
- g_warning ("Failed to change group: %s", error->message);
- g_clear_error (&error);
- }
-}
-
-static void
-add_group_button_clicked_cb (GtkButton *button,
- EmpathyGroupsWidget *self)
-{
- EmpathyGroupsWidgetPriv *priv = GET_PRIV (self);
- const gchar *group;
-
- group = gtk_entry_get_text (GTK_ENTRY (priv->add_group_entry));
-
- gtk_list_store_insert_with_values (priv->group_store, NULL, -1,
- COL_NAME, group,
- COL_ENABLED, TRUE,
- -1);
-
- folks_group_details_change_group (priv->group_details, group, TRUE,
- (GAsyncReadyCallback) change_group_cb, self);
-}
-
-static void
-cell_toggled_cb (GtkCellRendererToggle *cell,
- const gchar *path_string,
- EmpathyGroupsWidget *self)
-{
- EmpathyGroupsWidgetPriv *priv = GET_PRIV (self);
- GtkTreePath *path;
- GtkTreeIter iter;
- gboolean was_enabled;
- gchar *group;
-
- path = gtk_tree_path_new_from_string (path_string);
-
- gtk_tree_model_get_iter (GTK_TREE_MODEL (priv->group_store), &iter,
- path);
- gtk_tree_model_get (GTK_TREE_MODEL (priv->group_store), &iter,
- COL_ENABLED, &was_enabled,
- COL_NAME, &group,
- -1);
-
- gtk_list_store_set (priv->group_store, &iter,
- COL_ENABLED, !was_enabled,
- -1);
-
- gtk_tree_path_free (path);
-
- if (group != NULL)
- {
- folks_group_details_change_group (priv->group_details, group,
- !was_enabled, (GAsyncReadyCallback) change_group_cb, self);
- g_free (group);
- }
-}
-
-
-static void
-group_details_group_changed_cb (FolksGroupDetails *groups,
- const gchar *group,
- gboolean is_member,
- EmpathyGroupsWidget *self)
-{
- EmpathyGroupsWidgetPriv *priv = GET_PRIV (self);
- GtkTreeIter iter;
-
- if (model_find_name (self, group, &iter) == TRUE)
- {
- gtk_list_store_set (priv->group_store, &iter,
- COL_ENABLED, is_member,
- -1);
- }
-}
-
-static void
-set_up (EmpathyGroupsWidget *self)
-{
- EmpathyGroupsWidgetPriv *priv;
- GtkWidget *label, *alignment;
- GtkBox *vbox, *hbox;
- GtkTreeView *tree_view;
- GtkTreeSelection *selection;
- GtkTreeViewColumn *column;
- GtkCellRenderer *renderer;
- guint col_offset;
- GtkScrolledWindow *scrolled_window;
- gchar *markup;
-
- priv = GET_PRIV (self);
-
- /* Set up ourself */
- gtk_orientable_set_orientation (GTK_ORIENTABLE (self),
- GTK_ORIENTATION_VERTICAL);
- gtk_box_set_spacing (GTK_BOX (self), 6);
-
- /* Create our child widgets */
- label = gtk_label_new (NULL);
- gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
-
- markup = g_strdup_printf ("<b>%s</b>", _("Groups"));
- gtk_label_set_markup (GTK_LABEL (label), markup);
- g_free (markup);
-
- gtk_box_pack_start (GTK_BOX (self), label, FALSE, FALSE, 0);
- gtk_widget_show (label);
-
- alignment = gtk_alignment_new (0.5, 0.5, 1.0, 1.0);
- gtk_alignment_set_padding (GTK_ALIGNMENT (alignment), 0, 0, 12, 0);
-
- vbox = GTK_BOX (gtk_box_new (GTK_ORIENTATION_VERTICAL, 6));
-
- label = gtk_label_new (_("Select the groups you want this contact to appear "
- "in. Note that you can select more than one group or no groups."));
- gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
- gtk_label_set_line_wrap (GTK_LABEL (label), TRUE);
-
- gtk_box_pack_start (vbox, label, FALSE, FALSE, 0);
- gtk_widget_show (label);
-
- hbox = GTK_BOX (gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 12));
-
- priv->add_group_entry = gtk_entry_new ();
- g_signal_connect (priv->add_group_entry, "changed",
- (GCallback) add_group_entry_changed_cb, self);
- g_signal_connect (priv->add_group_entry, "activate",
- (GCallback) add_group_entry_activate_cb, self);
-
- gtk_box_pack_start (hbox, priv->add_group_entry, TRUE, TRUE, 0);
- gtk_widget_show (priv->add_group_entry);
-
- priv->add_group_button = gtk_button_new_with_mnemonic (_("_Add Group"));
- gtk_widget_set_sensitive (priv->add_group_button, FALSE);
- gtk_widget_set_receives_default (priv->add_group_button, TRUE);
- g_signal_connect (priv->add_group_button, "clicked",
- (GCallback) add_group_button_clicked_cb, self);
-
- gtk_box_pack_start (hbox, priv->add_group_button, FALSE, FALSE, 0);
- gtk_widget_show (priv->add_group_button);
-
- gtk_box_pack_start (vbox, GTK_WIDGET (hbox), FALSE, FALSE, 0);
- gtk_widget_show (GTK_WIDGET (hbox));
-
- scrolled_window = GTK_SCROLLED_WINDOW (gtk_scrolled_window_new (NULL, NULL));
- gtk_scrolled_window_set_policy (scrolled_window, GTK_POLICY_NEVER,
- GTK_POLICY_AUTOMATIC);
- gtk_scrolled_window_set_shadow_type (scrolled_window, GTK_SHADOW_IN);
- gtk_widget_set_size_request (GTK_WIDGET (scrolled_window), -1, 100);
-
- priv->group_store = gtk_list_store_new (NUM_COLUMNS,
- G_TYPE_STRING, /* name */
- G_TYPE_BOOLEAN, /* enabled */
- G_TYPE_BOOLEAN); /* editable */
-
- tree_view = GTK_TREE_VIEW (gtk_tree_view_new_with_model (
- GTK_TREE_MODEL (priv->group_store)));
- gtk_tree_view_set_headers_visible (tree_view, FALSE);
- gtk_tree_view_set_enable_search (tree_view, FALSE);
-
- selection = gtk_tree_view_get_selection (tree_view);
- gtk_tree_selection_set_mode (selection, GTK_SELECTION_SINGLE);
-
- renderer = gtk_cell_renderer_toggle_new ();
- g_signal_connect (renderer, "toggled", (GCallback) cell_toggled_cb, self);
-
- column = gtk_tree_view_column_new_with_attributes (
- C_("verb in a column header displaying group names", "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 (tree_view, column);
-
- renderer = gtk_cell_renderer_text_new ();
- col_offset = gtk_tree_view_insert_column_with_attributes (tree_view,
- -1, _("Group"),
- renderer,
- "text", COL_NAME,
- /* "editable", COL_EDITABLE, */
- NULL);
-
- column = gtk_tree_view_get_column (tree_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);
-
- gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (priv->group_store),
- COL_NAME, GTK_SORT_ASCENDING);
-
- gtk_container_add (GTK_CONTAINER (scrolled_window), GTK_WIDGET (tree_view));
- gtk_widget_show (GTK_WIDGET (tree_view));
-
- gtk_box_pack_start (vbox, GTK_WIDGET (scrolled_window), TRUE, TRUE, 0);
- gtk_widget_show (GTK_WIDGET (scrolled_window));
-
- gtk_container_add (GTK_CONTAINER (alignment), GTK_WIDGET (vbox));
- gtk_widget_show (GTK_WIDGET (vbox));
-
- gtk_box_pack_start (GTK_BOX (self), alignment, TRUE, TRUE, 0);
- gtk_widget_show (alignment);
-}
-
-static void
-empathy_groups_widget_init (EmpathyGroupsWidget *self)
-{
- self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self,
- EMPATHY_TYPE_GROUPS_WIDGET, EmpathyGroupsWidgetPriv);
-
- set_up (self);
-}
-
-static void
-get_property (GObject *object,
- guint param_id,
- GValue *value,
- GParamSpec *pspec)
-{
- EmpathyGroupsWidgetPriv *priv;
-
- priv = GET_PRIV (object);
-
- switch (param_id)
- {
- case PROP_GROUP_DETAILS:
- g_value_set_object (value, priv->group_details);
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, pspec);
- break;
- }
-}
-
-static void
-set_property (GObject *object,
- guint param_id,
- const GValue *value,
- GParamSpec *pspec)
-{
- switch (param_id)
- {
- case PROP_GROUP_DETAILS:
- empathy_groups_widget_set_group_details (EMPATHY_GROUPS_WIDGET (object),
- g_value_get_object (value));
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, pspec);
- break;
- }
-}
-
-static void
-dispose (GObject *object)
-{
- EmpathyGroupsWidgetPriv *priv = GET_PRIV (object);
-
- empathy_groups_widget_set_group_details (EMPATHY_GROUPS_WIDGET (object),
- NULL);
- tp_clear_object (&priv->group_store);
-
- G_OBJECT_CLASS (empathy_groups_widget_parent_class)->dispose (object);
-}
-
-static void
-empathy_groups_widget_class_init (EmpathyGroupsWidgetClass *klass)
-{
- GObjectClass *object_class = G_OBJECT_CLASS (klass);
-
- object_class->get_property = get_property;
- object_class->set_property = set_property;
- object_class->dispose = dispose;
-
- /**
- * EmpathyGroupsWidget:group_details:
- *
- * The #FolksGroupDetails whose group membership is to be edited by the
- * #EmpathyGroupsWidget.
- */
- g_object_class_install_property (object_class, PROP_GROUP_DETAILS,
- g_param_spec_object ("group-details",
- "Group Details",
- "The #FolksGroupDetails whose groups are being edited.",
- FOLKS_TYPE_GROUP_DETAILS,
- G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-
- g_type_class_add_private (object_class, sizeof (EmpathyGroupsWidgetPriv));
-}
-
-/**
- * empathy_groups_widget_new:
- * @group_details: a #FolksGroupDetails, or %NULL
- *
- * Creates a new #EmpathyGroupsWidget to edit the groups of the given
- * @group_details.
- *
- * Return value: a new #EmpathyGroupsWidget
- */
-GtkWidget *
-empathy_groups_widget_new (FolksGroupDetails *group_details)
-{
- g_return_val_if_fail (
- group_details == NULL || FOLKS_IS_GROUP_DETAILS (group_details),
- NULL);
-
- return GTK_WIDGET (g_object_new (EMPATHY_TYPE_GROUPS_WIDGET,
- "group-details", group_details,
- NULL));
-}
-
-/**
- * empathy_groups_widget_get_group_details:
- * @self: an #EmpathyGroupsWidget
- *
- * Get the #FolksGroupDetails whose group membership is being edited by the
- * #EmpathyGroupsWidget.
- *
- * Returns: the #FolksGroupDetails associated with @widget, or %NULL
- */
-FolksGroupDetails *
-empathy_groups_widget_get_group_details (EmpathyGroupsWidget *self)
-{
- g_return_val_if_fail (EMPATHY_IS_GROUPS_WIDGET (self), NULL);
-
- return GET_PRIV (self)->group_details;
-}
-
-/**
- * empathy_groups_widget_set_group_details:
- * @self: an #EmpathyGroupsWidget
- * @group_details: the #FolksGroupDetails whose membership is to be edited, or
- * %NULL
- *
- * Change the #FolksGroupDetails whose group membership is to be edited by the
- * #EmpathyGroupsWidget.
- */
-void
-empathy_groups_widget_set_group_details (EmpathyGroupsWidget *self,
- FolksGroupDetails *group_details)
-{
- EmpathyGroupsWidgetPriv *priv;
-
- g_return_if_fail (EMPATHY_IS_GROUPS_WIDGET (self));
- g_return_if_fail (
- group_details == NULL || FOLKS_IS_GROUP_DETAILS (group_details));
-
- priv = GET_PRIV (self);
-
- if (group_details == priv->group_details)
- return;
-
- if (priv->group_details != NULL)
- {
- g_signal_handlers_disconnect_by_func (priv->group_details,
- group_details_group_changed_cb, self);
- }
-
- tp_clear_object (&priv->group_details);
-
- if (group_details != NULL)
- {
- priv->group_details = g_object_ref (group_details);
-
- g_signal_connect (priv->group_details, "group-changed",
- (GCallback) group_details_group_changed_cb, self);
-
- populate_data (self);
- }
-
- g_object_notify (G_OBJECT (self), "group-details");
-}
diff --git a/libempathy-gtk/empathy-groups-widget.h b/libempathy-gtk/empathy-groups-widget.h
deleted file mode 100644
index 2b59db62..00000000
--- a/libempathy-gtk/empathy-groups-widget.h
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- * Copyright (C) 2007-2010 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>
- * Philip Withnall <philip.withnall@collabora.co.uk>
- */
-
-#ifndef __EMPATHY_GROUPS_WIDGET_H__
-#define __EMPATHY_GROUPS_WIDGET_H__
-
-#include <gtk/gtk.h>
-#include <folks/folks.h>
-
-G_BEGIN_DECLS
-
-#define EMPATHY_TYPE_GROUPS_WIDGET (empathy_groups_widget_get_type ())
-#define EMPATHY_GROUPS_WIDGET(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), \
- EMPATHY_TYPE_GROUPS_WIDGET, EmpathyGroupsWidget))
-#define EMPATHY_GROUPS_WIDGET_CLASS(k) (G_TYPE_CHECK_CLASS_CAST ((k), \
- EMPATHY_TYPE_GROUPS_WIDGET, EmpathyGroupsWidgetClass))
-#define EMPATHY_IS_GROUPS_WIDGET(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), \
- EMPATHY_TYPE_GROUPS_WIDGET))
-#define EMPATHY_IS_GROUPS_WIDGET_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), \
- EMPATHY_TYPE_GROUPS_WIDGET))
-#define EMPATHY_GROUPS_WIDGET_GET_CLASS(o) ( \
- G_TYPE_INSTANCE_GET_CLASS ((o), EMPATHY_TYPE_GROUPS_WIDGET, \
- EmpathyGroupsWidgetClass))
-
-typedef struct {
- GtkBox parent;
-
- /*<private>*/
- gpointer priv;
-} EmpathyGroupsWidget;
-
-typedef struct {
- GtkBoxClass parent_class;
-} EmpathyGroupsWidgetClass;
-
-GType empathy_groups_widget_get_type (void) G_GNUC_CONST;
-
-GtkWidget * empathy_groups_widget_new (FolksGroupDetails *group_details);
-
-FolksGroupDetails * empathy_groups_widget_get_group_details (
- EmpathyGroupsWidget *self);
-void empathy_groups_widget_set_group_details (EmpathyGroupsWidget *self,
- FolksGroupDetails *group_details);
-
-G_END_DECLS
-
-#endif /* __EMPATHY_GROUPS_WIDGET_H__ */
diff --git a/libempathy-gtk/empathy-images.h b/libempathy-gtk/empathy-images.h
deleted file mode 100644
index 3b7b8fdf..00000000
--- a/libempathy-gtk/empathy-images.h
+++ /dev/null
@@ -1,60 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * Copyright (C) 2007-2008 Collabora Ltd.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- *
- * Authors: Xavier Claessens <xclaesse@gmail.com>
- */
-
-#ifndef __EMPATHY_IMAGES_H__
-#define __EMPATHY_IMAGES_H__
-
-G_BEGIN_DECLS
-
-#define EMPATHY_IMAGE_OFFLINE "user-offline"
-/* user-invisible is not (yet?) in the naming spec but already implemented by
- * some theme */
-#define EMPATHY_IMAGE_HIDDEN "user-invisible"
-#define EMPATHY_IMAGE_AVAILABLE "user-available"
-#define EMPATHY_IMAGE_BUSY "user-busy"
-#define EMPATHY_IMAGE_AWAY "user-away"
-#define EMPATHY_IMAGE_EXT_AWAY "user-extended-away"
-#define EMPATHY_IMAGE_IDLE "user-idle"
-#define EMPATHY_IMAGE_PENDING "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_SMS "stock_cell-phone"
-#define EMPATHY_IMAGE_VOIP "audio-input-microphone"
-#define EMPATHY_IMAGE_VIDEO_CALL "camera-web"
-#define EMPATHY_IMAGE_LOG "document-open-recent"
-#define EMPATHY_IMAGE_DOCUMENT_SEND "document-send"
-/* FIXME: need a better icon! */
-#define EMPATHY_IMAGE_EDIT_MESSAGE "format-text-direction-ltr"
-#define EMPATHY_IMAGE_MIC "audio-input-microphone-symbolic"
-#define EMPATHY_IMAGE_MIC_MUTED "audio-input-microphone-muted-symbolic"
-
-#define EMPATHY_IMAGE_CALL "call-start"
-#define EMPATHY_IMAGE_CALL_MISSED "call-stop"
-#define EMPATHY_IMAGE_CALL_INCOMING "call-start"
-#define EMPATHY_IMAGE_CALL_OUTGOING "call-start"
-
-G_END_DECLS
-
-#endif /* __EMPATHY_IMAGES_ICONS_H__ */
diff --git a/libempathy-gtk/empathy-individual-dialogs.c b/libempathy-gtk/empathy-individual-dialogs.c
deleted file mode 100644
index ce03d0a2..00000000
--- a/libempathy-gtk/empathy-individual-dialogs.c
+++ /dev/null
@@ -1,295 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * Copyright (C) 2007-2010 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-individual-dialogs.h"
-
-#include <glib/gi18n-lib.h>
-
-#include "empathy-contact-widget.h"
-#include "empathy-individual-manager.h"
-#include "empathy-utils.h"
-
-#define BULLET_POINT "\342\200\242"
-
-static GtkWidget *new_individual_dialog = NULL;
-
-/*
- * New contact dialog
- */
-
-static void
-can_add_contact_to_account (TpAccount *account,
- EmpathyAccountChooserFilterResultCallback callback,
- gpointer callback_data,
- gpointer user_data)
-{
- EmpathyIndividualManager *individual_manager;
- TpConnection *connection;
- gboolean result;
-
- connection = tp_account_get_connection (account);
- if (connection == NULL)
- {
- callback (FALSE, callback_data);
- return;
- }
-
- individual_manager = empathy_individual_manager_dup_singleton ();
- result = empathy_connection_can_add_personas (connection);
- g_object_unref (individual_manager);
-
- callback (result, callback_data);
-}
-
-static void
-new_individual_response_cb (GtkDialog *dialog,
- gint response,
- GtkWidget *contact_widget)
-{
- EmpathyIndividualManager *individual_manager;
- EmpathyContact *contact;
-
- individual_manager = empathy_individual_manager_dup_singleton ();
- contact = empathy_contact_widget_get_contact (contact_widget);
-
- if (contact && response == GTK_RESPONSE_OK)
- empathy_individual_manager_add_from_contact (individual_manager, contact);
-
- new_individual_dialog = NULL;
- gtk_widget_destroy (GTK_WIDGET (dialog));
- g_object_unref (individual_manager);
-}
-
-void
-empathy_new_individual_dialog_show (GtkWindow *parent)
-{
- empathy_new_individual_dialog_show_with_individual (parent, NULL);
-}
-
-void
-empathy_new_individual_dialog_show_with_individual (GtkWindow *parent,
- FolksIndividual *individual)
-{
- GtkWidget *dialog;
- GtkWidget *button;
- EmpathyContact *contact = NULL;
- GtkWidget *contact_widget;
-
- g_return_if_fail (individual == NULL || FOLKS_IS_INDIVIDUAL (individual));
-
- if (new_individual_dialog)
- {
- gtk_window_present (GTK_WINDOW (new_individual_dialog));
- return;
- }
-
- /* Create dialog */
- dialog = gtk_dialog_new ();
- 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 */
- if (individual != NULL)
- contact = empathy_contact_dup_from_folks_individual (individual);
-
- contact_widget = empathy_contact_widget_new (contact);
- gtk_container_set_border_width (GTK_CONTAINER (contact_widget), 8);
- gtk_box_pack_start (
- GTK_BOX (gtk_dialog_get_content_area (GTK_DIALOG (dialog))),
- contact_widget, TRUE, TRUE, 0);
- empathy_contact_widget_set_account_filter (contact_widget,
- can_add_contact_to_account, NULL);
- gtk_widget_show (contact_widget);
-
- new_individual_dialog = dialog;
-
- g_signal_connect (dialog, "response", G_CALLBACK (new_individual_response_cb),
- contact_widget);
-
- if (parent != NULL)
- gtk_window_set_transient_for (GTK_WINDOW (dialog), parent);
-
- gtk_widget_show (dialog);
-
- tp_clear_object (&contact);
-}
-
-static char *
-contact_pretty_name (TpContact *contact)
-{
- const char *alias = tp_contact_get_alias (contact);
- const char *identifier = tp_contact_get_identifier (contact);
-
- if (tp_strdiff (alias, identifier))
- return g_strdup_printf ("%s (%s)", alias, identifier);
- else
- return g_strdup (alias);
-}
-
-/*
- * Block contact dialog
- */
-gboolean
-empathy_block_individual_dialog_show (GtkWindow *parent,
- FolksIndividual *individual,
- GdkPixbuf *avatar,
- gboolean *abusive)
-{
- GtkWidget *dialog;
- GtkWidget *abusive_check = NULL;
- GeeSet *personas;
- GeeIterator *iter;
- GString *text = g_string_new ("");
- GString *blocked_str = g_string_new ("");
- GString *notblocked_str = g_string_new ("");
- guint npersonas_blocked = 0, npersonas_notblocked = 0;
- gboolean can_report_abuse = FALSE;
- int res;
-
- dialog = gtk_message_dialog_new (parent,
- GTK_DIALOG_MODAL, GTK_MESSAGE_QUESTION, GTK_BUTTONS_NONE,
- _("Block %s?"),
- folks_alias_details_get_alias (FOLKS_ALIAS_DETAILS (individual)));
-
- if (avatar != NULL)
- {
- GtkWidget *image = gtk_image_new_from_pixbuf (avatar);
- gtk_message_dialog_set_image (GTK_MESSAGE_DIALOG (dialog), image);
- gtk_widget_show (image);
- }
-
- /* build a list of personas that support blocking */
- personas = folks_individual_get_personas (individual);
- iter = gee_iterable_iterator (GEE_ITERABLE (personas));
- while (gee_iterator_next (iter))
- {
- TpfPersona *persona = gee_iterator_get (iter);
- TpContact *contact;
- GString *s;
- char *str;
- TpConnection *conn;
-
- if (!TPF_IS_PERSONA (persona))
- goto while_finish;
-
- contact = tpf_persona_get_contact (persona);
- if (contact == NULL)
- goto while_finish;
-
- conn = tp_contact_get_connection (contact);
-
- if (tp_proxy_has_interface_by_id (conn,
- TP_IFACE_QUARK_CONNECTION_INTERFACE_CONTACT_BLOCKING))
- {
- s = blocked_str;
- npersonas_blocked++;
- }
- else
- {
- s = notblocked_str;
- npersonas_notblocked++;
- }
-
- if (tp_connection_can_report_abusive (conn))
- can_report_abuse = TRUE;
-
- str = contact_pretty_name (contact);
- g_string_append_printf (s, "\n " BULLET_POINT " %s", str);
- g_free (str);
-
-while_finish:
- g_clear_object (&persona);
- }
- g_clear_object (&iter);
-
- g_string_append_printf (text,
- _("Are you sure you want to block '%s' from contacting you again?"),
- folks_alias_details_get_alias (FOLKS_ALIAS_DETAILS (individual)));
-
- if (npersonas_blocked > 0)
- g_string_append_printf (text, "\n\n%s\n%s",
- ngettext ("The following identity will be blocked:",
- "The following identities will be blocked:",
- npersonas_blocked),
- blocked_str->str);
-
- if (npersonas_notblocked > 0)
- g_string_append_printf (text, "\n\n%s\n%s",
- ngettext ("The following identity can not be blocked:",
- "The following identities can not be blocked:",
- npersonas_notblocked),
- notblocked_str->str);
-
- gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (dialog),
- "%s", text->str);
-
- gtk_dialog_add_buttons (GTK_DIALOG (dialog),
- GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
- _("_Block"), GTK_RESPONSE_REJECT,
- NULL);
-
- if (can_report_abuse)
- {
- GtkWidget *vbox;
-
- vbox = gtk_message_dialog_get_message_area (GTK_MESSAGE_DIALOG (dialog));
- abusive_check = gtk_check_button_new_with_mnemonic (
- ngettext ("_Report this contact as abusive",
- "_Report these contacts as abusive",
- npersonas_blocked));
-
- gtk_box_pack_start (GTK_BOX (vbox), abusive_check, FALSE, TRUE, 0);
- gtk_widget_show (abusive_check);
- }
-
- g_string_free (text, TRUE);
- g_string_free (blocked_str, TRUE);
- g_string_free (notblocked_str, TRUE);
-
- res = gtk_dialog_run (GTK_DIALOG (dialog));
-
- if (abusive != NULL)
- {
- if (abusive_check != NULL)
- *abusive = gtk_toggle_button_get_active (
- GTK_TOGGLE_BUTTON (abusive_check));
- else
- *abusive = FALSE;
- }
-
- gtk_widget_destroy (dialog);
-
- return res == GTK_RESPONSE_REJECT;
-}
diff --git a/libempathy-gtk/empathy-individual-dialogs.h b/libempathy-gtk/empathy-individual-dialogs.h
deleted file mode 100644
index b603c576..00000000
--- a/libempathy-gtk/empathy-individual-dialogs.h
+++ /dev/null
@@ -1,41 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * Copyright (C) 2007-2010 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>
- * Travis Reitter <travis.reitter@collabora.co.uk>
- */
-
-#ifndef __EMPATHY_INDIVIDUAL_DIALOGS_H__
-#define __EMPATHY_INDIVIDUAL_DIALOGS_H__
-
-#include <gtk/gtk.h>
-#include <folks/folks.h>
-
-G_BEGIN_DECLS
-
-void empathy_new_individual_dialog_show (GtkWindow *parent);
-void empathy_new_individual_dialog_show_with_individual (GtkWindow *parent,
- FolksIndividual *individual);
-gboolean empathy_block_individual_dialog_show (GtkWindow *parent,
- FolksIndividual *individual,
- GdkPixbuf *avatar,
- gboolean *abusive);
-
-G_END_DECLS
-
-#endif /* __EMPATHY_INDIVIDUAL_DIALOGS_H__ */
diff --git a/libempathy-gtk/empathy-individual-edit-dialog.c b/libempathy-gtk/empathy-individual-edit-dialog.c
deleted file mode 100644
index dbd01c97..00000000
--- a/libempathy-gtk/empathy-individual-edit-dialog.c
+++ /dev/null
@@ -1,260 +0,0 @@
-/*
- * Copyright (C) 2007-2010 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>
- * Philip Withnall <philip.withnall@collabora.co.uk>
- * Travis Reitter <travis.reitter@collabora.co.uk>
- */
-
-#include "config.h"
-#include "empathy-individual-edit-dialog.h"
-
-#include <glib/gi18n-lib.h>
-
-#include "empathy-individual-widget.h"
-#include "empathy-utils.h"
-
-#define GET_PRIV(obj) EMPATHY_GET_PRIV (obj, EmpathyIndividualEditDialog)
-
-typedef struct {
- FolksIndividual *individual; /* owned */
- GtkWidget *individual_widget; /* child widget */
-} EmpathyIndividualEditDialogPriv;
-
-enum {
- PROP_INDIVIDUAL = 1,
-};
-
-/* Edit dialogs currently open.
- * Each dialog contains a referenced pointer to its Individual */
-static GList *edit_dialogs = NULL;
-
-static void individual_edit_dialog_set_individual (
- EmpathyIndividualEditDialog *dialog,
- FolksIndividual *individual);
-
-G_DEFINE_TYPE (EmpathyIndividualEditDialog, empathy_individual_edit_dialog,
- GTK_TYPE_DIALOG);
-
-static void
-individual_dialogs_response_cb (GtkDialog *dialog,
- gint response,
- GList **dialogs)
-{
- *dialogs = g_list_remove (*dialogs, dialog);
- gtk_widget_destroy (GTK_WIDGET (dialog));
-}
-
-static gint
-individual_dialogs_find (GObject *object,
- FolksIndividual *individual)
-{
- EmpathyIndividualEditDialogPriv *priv = GET_PRIV (object);
-
- return individual != priv->individual;
-}
-
-void
-empathy_individual_edit_dialog_show (FolksIndividual *individual,
- GtkWindow *parent)
-{
- GtkWidget *dialog;
- GList *l;
-
- g_return_if_fail (FOLKS_IS_INDIVIDUAL (individual));
- g_return_if_fail (parent == NULL || GTK_IS_WINDOW (parent));
-
- l = g_list_find_custom (edit_dialogs, individual,
- (GCompareFunc) individual_dialogs_find);
-
- if (l != NULL)
- {
- gtk_window_present (GTK_WINDOW (l->data));
- return;
- }
-
- /* Create dialog */
- dialog = g_object_new (EMPATHY_TYPE_INDIVIDUAL_EDIT_DIALOG,
- "individual", individual,
- NULL);
-
- edit_dialogs = g_list_prepend (edit_dialogs, dialog);
- gtk_widget_show (dialog);
-}
-
-static void
-individual_removed_cb (FolksIndividual *individual,
- FolksIndividual *replacement_individual,
- EmpathyIndividualEditDialog *self)
-{
- /* Update to show the new Individual (this will close the dialogue if there
- * is no new Individual). */
- individual_edit_dialog_set_individual (self, replacement_individual);
-
- /* Destroy the dialogue */
- if (replacement_individual == NULL)
- {
- individual_dialogs_response_cb (GTK_DIALOG (self),
- GTK_RESPONSE_DELETE_EVENT, &edit_dialogs);
- }
-}
-
-static void
-individual_edit_dialog_set_individual (
- EmpathyIndividualEditDialog *dialog,
- FolksIndividual *individual)
-{
- EmpathyIndividualEditDialogPriv *priv;
-
- g_return_if_fail (EMPATHY_INDIVIDUAL_EDIT_DIALOG (dialog));
- g_return_if_fail (individual == NULL || FOLKS_IS_INDIVIDUAL (individual));
-
- priv = GET_PRIV (dialog);
-
- /* Remove the old Individual */
- if (priv->individual != NULL)
- {
- g_signal_handlers_disconnect_by_func (priv->individual,
- (GCallback) individual_removed_cb, dialog);
- }
-
- tp_clear_object (&priv->individual);
-
- /* Add the new Individual */
- priv->individual = individual;
-
- if (individual != NULL)
- {
- g_object_ref (individual);
- g_signal_connect (individual, "removed",
- (GCallback) individual_removed_cb, dialog);
-
- /* Update the UI */
- empathy_individual_widget_set_individual (
- EMPATHY_INDIVIDUAL_WIDGET (priv->individual_widget), individual);
- }
-}
-
-static void
-individual_edit_dialog_get_property (GObject *object,
- guint param_id,
- GValue *value,
- GParamSpec *pspec)
-{
- EmpathyIndividualEditDialogPriv *priv = GET_PRIV (object);
-
- switch (param_id) {
- case PROP_INDIVIDUAL:
- g_value_set_object (value, priv->individual);
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, pspec);
- break;
- };
-}
-
-static void
-individual_edit_dialog_set_property (GObject *object,
- guint param_id,
- const GValue *value,
- GParamSpec *pspec)
-{
- EmpathyIndividualEditDialog *dialog =
- EMPATHY_INDIVIDUAL_EDIT_DIALOG (object);
-
- switch (param_id) {
- case PROP_INDIVIDUAL:
- individual_edit_dialog_set_individual (dialog,
- FOLKS_INDIVIDUAL (g_value_get_object (value)));
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, pspec);
- break;
- };
-}
-
-static void
-individual_edit_dialog_dispose (GObject *object)
-{
- individual_edit_dialog_set_individual (
- EMPATHY_INDIVIDUAL_EDIT_DIALOG (object), NULL);
-
- G_OBJECT_CLASS (
- empathy_individual_edit_dialog_parent_class)->dispose (object);
-}
-
-static void
-empathy_individual_edit_dialog_class_init (
- EmpathyIndividualEditDialogClass *klass)
-{
- GObjectClass *object_class = G_OBJECT_CLASS (klass);
-
- object_class->get_property = individual_edit_dialog_get_property;
- object_class->set_property = individual_edit_dialog_set_property;
- object_class->dispose = individual_edit_dialog_dispose;
-
- g_object_class_install_property (object_class,
- PROP_INDIVIDUAL,
- g_param_spec_object ("individual",
- "Folks Individual",
- "Folks Individual to edit using the dialog.",
- FOLKS_TYPE_INDIVIDUAL,
- G_PARAM_CONSTRUCT_ONLY |
- G_PARAM_READWRITE |
- G_PARAM_STATIC_STRINGS));
-
- g_type_class_add_private (object_class,
- sizeof (EmpathyIndividualEditDialogPriv));
-}
-
-static void
-empathy_individual_edit_dialog_init (
- EmpathyIndividualEditDialog *dialog)
-{
- GtkWidget *button;
- EmpathyIndividualEditDialogPriv *priv = G_TYPE_INSTANCE_GET_PRIVATE (
- dialog, EMPATHY_TYPE_INDIVIDUAL_EDIT_DIALOG,
- EmpathyIndividualEditDialogPriv);
-
- dialog->priv = priv;
- priv->individual = NULL;
-
- gtk_window_set_resizable (GTK_WINDOW (dialog), FALSE);
- gtk_window_set_title (GTK_WINDOW (dialog), _("Edit Contact Information"));
-
- /* Individual widget */
- priv->individual_widget = empathy_individual_widget_new (priv->individual,
- EMPATHY_INDIVIDUAL_WIDGET_EDIT_ALIAS |
- EMPATHY_INDIVIDUAL_WIDGET_EDIT_GROUPS |
- EMPATHY_INDIVIDUAL_WIDGET_EDIT_FAVOURITE);
- gtk_container_set_border_width (GTK_CONTAINER (priv->individual_widget), 8);
- gtk_box_pack_start (GTK_BOX (gtk_dialog_get_content_area (
- GTK_DIALOG (dialog))), priv->individual_widget, TRUE, TRUE, 0);
- gtk_widget_show (priv->individual_widget);
-
- /* 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_set_can_default (button, TRUE);
- gtk_window_set_default (GTK_WINDOW (dialog), button);
- gtk_widget_show (button);
-
- g_signal_connect (dialog, "response",
- G_CALLBACK (individual_dialogs_response_cb), &edit_dialogs);
-}
diff --git a/libempathy-gtk/empathy-individual-edit-dialog.h b/libempathy-gtk/empathy-individual-edit-dialog.h
deleted file mode 100644
index 747e6824..00000000
--- a/libempathy-gtk/empathy-individual-edit-dialog.h
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- * Copyright (C) 2010 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: Philip Withnall <philip.withnall@collabora.co.uk>
- * Travis Reitter <travis.reitter@collabora.co.uk>
- */
-
-#ifndef __EMPATHY_INDIVIDUAL_EDIT_DIALOG_H__
-#define __EMPATHY_INDIVIDUAL_EDIT_DIALOG_H__
-
-#include <gtk/gtk.h>
-#include <folks/folks.h>
-
-G_BEGIN_DECLS
-
-#define EMPATHY_TYPE_INDIVIDUAL_EDIT_DIALOG (empathy_individual_edit_dialog_get_type ())
-#define EMPATHY_INDIVIDUAL_EDIT_DIALOG(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), EMPATHY_TYPE_INDIVIDUAL_EDIT_DIALOG, EmpathyIndividualEditDialog))
-#define EMPATHY_INDIVIDUAL_EDIT_DIALOG_CLASS(k) (G_TYPE_CHECK_CLASS_CAST ((k), EMPATHY_TYPE_INDIVIDUAL_EDIT_DIALOG, EmpathyIndividualEditDialogClass))
-#define EMPATHY_IS_INDIVIDUAL_EDIT_DIALOG(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), EMPATHY_TYPE_INDIVIDUAL_EDIT_DIALOG))
-#define EMPATHY_IS_INDIVIDUAL_EDIT_DIALOG_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), EMPATHY_TYPE_INDIVIDUAL_EDIT_DIALOG))
-#define EMPATHY_INDIVIDUAL_EDIT_DIALOG_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), EMPATHY_TYPE_INDIVIDUAL_EDIT_DIALOG, EmpathyIndividualEditDialogClass))
-
-typedef struct _EmpathyIndividualEditDialog EmpathyIndividualEditDialog;
-typedef struct _EmpathyIndividualEditDialogClass EmpathyIndividualEditDialogClass;
-
-struct _EmpathyIndividualEditDialog {
- GtkDialog parent;
-
- /*<private>*/
- gpointer priv;
-};
-
-struct _EmpathyIndividualEditDialogClass {
- GtkDialogClass parent_class;
-};
-
-GType empathy_individual_edit_dialog_get_type (void) G_GNUC_CONST;
-
-void empathy_individual_edit_dialog_show (FolksIndividual *individual,
- GtkWindow *parent);
-
-G_END_DECLS
-
-#endif /* __EMPATHY_INDIVIDUAL_EDIT_DIALOG_H__ */
diff --git a/libempathy-gtk/empathy-individual-information-dialog.c b/libempathy-gtk/empathy-individual-information-dialog.c
deleted file mode 100644
index 2b8d64bd..00000000
--- a/libempathy-gtk/empathy-individual-information-dialog.c
+++ /dev/null
@@ -1,420 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * Copyright (C) 2007-2010 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>
- * Philip Withnall <philip.withnall@collabora.co.uk>
- * Travis Reitter <travis.reitter@collabora.co.uk>
- */
-
-#include "config.h"
-#include "empathy-individual-information-dialog.h"
-
-#include <glib/gi18n-lib.h>
-
-#include "empathy-individual-manager.h"
-#include "empathy-individual-widget.h"
-#include "empathy-pkg-kit.h"
-#include "empathy-ui-utils.h"
-#include "empathy-utils.h"
-
-#define DEBUG_FLAG EMPATHY_DEBUG_CONTACT
-#include "empathy-debug.h"
-
-#define GET_PRIV(obj) EMPATHY_GET_PRIV (obj, EmpathyIndividualInformationDialog)
-typedef struct {
- FolksIndividual *individual;
- GtkWidget *individual_widget; /* child widget */
- GtkWidget *label; /* child widget */
-} EmpathyIndividualInformationDialogPriv;
-
-enum {
- PROP_0,
- PROP_INDIVIDUAL,
-};
-
-/* Info dialogs currently open.
- * Each dialog contains a referenced pointer to its Individual */
-static GList *information_dialogs = NULL;
-
-static void individual_information_dialog_set_individual (
- EmpathyIndividualInformationDialog *dialog,
- FolksIndividual *individual);
-
-G_DEFINE_TYPE (EmpathyIndividualInformationDialog,
- empathy_individual_information_dialog, GTK_TYPE_DIALOG);
-
-static void
-individual_dialogs_response_cb (GtkDialog *dialog,
- gint response,
- GList **dialogs)
-{
- *dialogs = g_list_remove (*dialogs, dialog);
- gtk_widget_destroy (GTK_WIDGET (dialog));
-}
-
-static gint
-individual_dialogs_find (GObject *object,
- FolksIndividual *individual)
-{
- EmpathyIndividualInformationDialogPriv *priv = GET_PRIV (object);
-
- return individual != priv->individual;
-}
-
-void
-empathy_individual_information_dialog_show (FolksIndividual *individual,
- GtkWindow *parent)
-{
- GtkWidget *dialog;
- GList *l;
-
- g_return_if_fail (FOLKS_IS_INDIVIDUAL (individual));
- g_return_if_fail (parent == NULL || GTK_IS_WINDOW (parent));
-
- l = g_list_find_custom (information_dialogs, individual,
- (GCompareFunc) individual_dialogs_find);
-
- if (l != NULL)
- {
- gtk_window_present (GTK_WINDOW (l->data));
- return;
- }
-
- /* Create dialog */
- dialog = g_object_new (EMPATHY_TYPE_INDIVIDUAL_INFORMATION_DIALOG,
- "individual", individual,
- NULL);
-
- information_dialogs = g_list_prepend (information_dialogs, dialog);
- gtk_widget_show (dialog);
-}
-
-static void
-individual_removed_cb (FolksIndividual *individual,
- FolksIndividual *replacement_individual,
- EmpathyIndividualInformationDialog *self)
-{
- individual_information_dialog_set_individual (self,
- replacement_individual);
-
- /* Destroy the dialogue */
- if (replacement_individual == NULL)
- {
- individual_dialogs_response_cb (GTK_DIALOG (self),
- GTK_RESPONSE_DELETE_EVENT, &information_dialogs);
- }
-}
-
-static void
-set_label_visibility (EmpathyIndividualInformationDialog *dialog)
-{
- EmpathyIndividualInformationDialogPriv *priv = GET_PRIV (dialog);
- guint num_personas = 0;
-
- /* Count how many Telepathy personas we have, to see whether we can
- * unlink */
- if (priv->individual != NULL)
- {
- GeeSet *personas;
- GeeIterator *iter;
-
- personas = folks_individual_get_personas (priv->individual);
- iter = gee_iterable_iterator (GEE_ITERABLE (personas));
- while (gee_iterator_next (iter))
- {
- FolksPersona *persona = gee_iterator_get (iter);
- if (empathy_folks_persona_is_interesting (persona))
- num_personas++;
-
- g_clear_object (&persona);
- }
- g_clear_object (&iter);
- }
-
- /* Only make the label visible if we have enough personas */
- gtk_widget_set_visible (priv->label, (num_personas > 1) ? TRUE : FALSE);
-}
-
-static void
-individual_information_dialog_set_individual (
- EmpathyIndividualInformationDialog *dialog,
- FolksIndividual *individual)
-{
- EmpathyIndividualInformationDialogPriv *priv;
-
- g_return_if_fail (EMPATHY_INDIVIDUAL_INFORMATION_DIALOG (dialog));
- g_return_if_fail (individual == NULL || FOLKS_IS_INDIVIDUAL (individual));
-
- priv = GET_PRIV (dialog);
-
- /* Remove the old Individual */
- if (priv->individual != NULL)
- {
- g_signal_handlers_disconnect_by_func (priv->individual,
- (GCallback) individual_removed_cb, dialog);
- }
-
- tp_clear_object (&priv->individual);
-
- /* Add the new Individual */
- priv->individual = individual;
-
- if (individual != NULL)
- {
- g_object_ref (individual);
- g_signal_connect (individual, "removed",
- (GCallback) individual_removed_cb, dialog);
-
- /* Update the UI */
- gtk_window_set_title (GTK_WINDOW (dialog),
- folks_alias_details_get_alias (FOLKS_ALIAS_DETAILS (individual)));
- empathy_individual_widget_set_individual (
- EMPATHY_INDIVIDUAL_WIDGET (priv->individual_widget), individual);
- set_label_visibility (dialog);
- }
-}
-
-static void
-individual_information_dialog_get_property (GObject *object,
- guint param_id,
- GValue *value,
- GParamSpec *pspec)
-{
- EmpathyIndividualInformationDialogPriv *priv = GET_PRIV (object);
-
- switch (param_id) {
- case PROP_INDIVIDUAL:
- g_value_set_object (value, priv->individual);
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, pspec);
- break;
- };
-}
-
-static void
-individual_information_dialog_set_property (GObject *object,
- guint param_id,
- const GValue *value,
- GParamSpec *pspec)
-{
- EmpathyIndividualInformationDialog *dialog =
- EMPATHY_INDIVIDUAL_INFORMATION_DIALOG (object);
-
- switch (param_id) {
- case PROP_INDIVIDUAL:
- individual_information_dialog_set_individual (dialog,
- FOLKS_INDIVIDUAL (g_value_get_object (value)));
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, pspec);
- break;
- };
-}
-
-static void
-individual_information_dialog_dispose (GObject *object)
-{
- individual_information_dialog_set_individual (
- EMPATHY_INDIVIDUAL_INFORMATION_DIALOG (object), NULL);
-
- G_OBJECT_CLASS (
- empathy_individual_information_dialog_parent_class)->dispose (object);
-}
-
-static void
-empathy_individual_information_dialog_class_init (
- EmpathyIndividualInformationDialogClass *klass)
-{
- GObjectClass *object_class = G_OBJECT_CLASS (klass);
-
- object_class->dispose = individual_information_dialog_dispose;
- object_class->get_property = individual_information_dialog_get_property;
- object_class->set_property = individual_information_dialog_set_property;
-
- g_object_class_install_property (object_class,
- PROP_INDIVIDUAL,
- g_param_spec_object ("individual",
- "Folks Individual",
- "Folks Individual to base the dialog upon",
- FOLKS_TYPE_INDIVIDUAL,
- G_PARAM_CONSTRUCT |
- G_PARAM_READWRITE |
- G_PARAM_STATIC_STRINGS));
-
- g_type_class_add_private (object_class,
- sizeof (EmpathyIndividualInformationDialogPriv));
-}
-
-static void
-empathy_individual_information_dialog_init (
- EmpathyIndividualInformationDialog *dialog)
-{
- GtkWidget *button;
- GtkBox *content_area;
- gchar *label_string;
- EmpathyIndividualInformationDialogPriv *priv = G_TYPE_INSTANCE_GET_PRIVATE (
- dialog, EMPATHY_TYPE_INDIVIDUAL_INFORMATION_DIALOG,
- EmpathyIndividualInformationDialogPriv);
-
- dialog->priv = priv;
- priv->individual = NULL;
-
- gtk_window_set_resizable (GTK_WINDOW (dialog), TRUE);
-
- content_area = GTK_BOX (gtk_dialog_get_content_area (GTK_DIALOG (dialog)));
-
- /* Translators: the heading at the top of the Information dialogue */
- label_string = g_strdup_printf ("<b>%s</b>", _("Linked Contacts"));
- priv->label = gtk_label_new (NULL);
- gtk_label_set_markup (GTK_LABEL (priv->label), label_string);
- g_free (label_string);
-
- gtk_misc_set_alignment (GTK_MISC (priv->label), 0.0, 0.5);
- gtk_misc_set_padding (GTK_MISC (priv->label), 6, 6);
- gtk_box_pack_start (content_area, priv->label, FALSE, TRUE, 0);
- gtk_widget_show (priv->label);
-
- /* Individual widget */
- priv->individual_widget = empathy_individual_widget_new (priv->individual,
- EMPATHY_INDIVIDUAL_WIDGET_SHOW_LOCATION |
- EMPATHY_INDIVIDUAL_WIDGET_SHOW_DETAILS |
- EMPATHY_INDIVIDUAL_WIDGET_SHOW_PERSONAS);
- gtk_container_set_border_width (GTK_CONTAINER (priv->individual_widget), 6);
- gtk_box_pack_start (content_area, priv->individual_widget, TRUE, TRUE, 0);
- gtk_widget_show (priv->individual_widget);
-
- /* 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_set_can_default (button, TRUE);
- gtk_window_set_default (GTK_WINDOW (dialog), button);
- gtk_widget_show (button);
-
- g_signal_connect (dialog, "response",
- G_CALLBACK (individual_dialogs_response_cb), &information_dialogs);
-}
-
-static void
-show_gnome_contacts_error_dialog (void)
-{
- GtkWidget *dialog;
-
- dialog = gtk_message_dialog_new (NULL, GTK_DIALOG_MODAL,
- GTK_MESSAGE_ERROR, GTK_BUTTONS_CLOSE,
- _("gnome-contacts not installed"));
-
- gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (dialog),
- _("Please install gnome-contacts to access contacts details."));
-
- g_signal_connect_swapped (dialog, "response",
- G_CALLBACK (gtk_widget_destroy), dialog);
-
- gtk_widget_show (dialog);
-}
-
-static void
-start_gnome_contacts (FolksIndividual *individual,
- gboolean try_installing);
-
-static void
-install_gnome_contacts_cb (GObject *source,
- GAsyncResult *result,
- gpointer user_data)
-{
- FolksIndividual *individual = user_data;
- GError *error = NULL;
-
- if (!empathy_pkg_kit_install_packages_finish (result, &error))
- {
- DEBUG ("Failed to install gnome-contacts: %s", error->message);
- g_error_free (error);
-
- show_gnome_contacts_error_dialog ();
- goto out;
- }
-
- DEBUG ("gnome-contacts installed");
-
- start_gnome_contacts (individual, FALSE);
-
-out:
- g_object_unref (individual);
-}
-
-static void
-start_gnome_contacts (FolksIndividual *individual,
- gboolean try_installing)
-{
- gchar *args;
- GError *error = NULL;
-
- g_return_if_fail (FOLKS_IS_INDIVIDUAL (individual));
-
- args = g_strdup_printf ("-i %s", folks_individual_get_id (individual));
-
- if (!empathy_launch_external_app ("gnome-contacts.desktop", args, &error))
- {
- if (g_error_matches (error, G_IO_ERROR, G_IO_ERROR_NOT_FOUND))
- {
- if (try_installing)
- {
- const gchar *packages[] = { "gnome-contacts", NULL };
-
- DEBUG ("gnome-contacts not installed; try to install it");
-
- empathy_pkg_kit_install_packages_async (0, packages, NULL,
- NULL, install_gnome_contacts_cb, g_object_ref (individual));
- }
- else
- {
- show_gnome_contacts_error_dialog ();
- }
- }
- }
-
- g_free (args);
-}
-
-/* Use gnome-contacts to display @individual or fallback to
- * EmpathyIndividualInformationDialog if user is not not in Folks.
- */
-void
-empathy_display_individual_info (FolksIndividual *individual)
-{
- EmpathyIndividualManager *mgr;
-
- mgr = empathy_individual_manager_dup_singleton ();
-
- /* Only use gnome-contacts if that's a 'real' individual we got from
- * Folks (and so the individual manager knows about it). If not that's a
- * MUC contact and we use the simple dialog. */
- if (empathy_individual_manager_lookup_member (mgr,
- folks_individual_get_id (individual)) != NULL)
- {
- start_gnome_contacts (individual, TRUE);
- }
- else
- {
- empathy_individual_information_dialog_show (individual, NULL);
- }
-
- g_object_unref (mgr);
-}
diff --git a/libempathy-gtk/empathy-individual-information-dialog.h b/libempathy-gtk/empathy-individual-information-dialog.h
deleted file mode 100644
index 58c22957..00000000
--- a/libempathy-gtk/empathy-individual-information-dialog.h
+++ /dev/null
@@ -1,61 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * Copyright (C) 2010 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: Philip Withnall <philip.withnall@collabora.co.uk>
- * Travis Reitter <travis.reitter@collabora.co.uk>
- */
-
-#ifndef __EMPATHY_INDIVIDUAL_INFORMATION_DIALOG_H__
-#define __EMPATHY_INDIVIDUAL_INFORMATION_DIALOG_H__
-
-#include <gtk/gtk.h>
-#include <folks/folks.h>
-
-G_BEGIN_DECLS
-
-#define EMPATHY_TYPE_INDIVIDUAL_INFORMATION_DIALOG (empathy_individual_information_dialog_get_type ())
-#define EMPATHY_INDIVIDUAL_INFORMATION_DIALOG(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), EMPATHY_TYPE_INDIVIDUAL_INFORMATION_DIALOG, EmpathyIndividualInformationDialog))
-#define EMPATHY_INDIVIDUAL_INFORMATION_DIALOG_CLASS(k) (G_TYPE_CHECK_CLASS_CAST ((k), EMPATHY_TYPE_INDIVIDUAL_INFORMATION_DIALOG, EmpathyIndividualInformationDialogClass))
-#define EMPATHY_IS_INDIVIDUAL_INFORMATION_DIALOG(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), EMPATHY_TYPE_INDIVIDUAL_INFORMATION_DIALOG))
-#define EMPATHY_IS_INDIVIDUAL_INFORMATION_DIALOG_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), EMPATHY_TYPE_INDIVIDUAL_INFORMATION_DIALOG))
-#define EMPATHY_INDIVIDUAL_INFORMATION_DIALOG_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), EMPATHY_TYPE_INDIVIDUAL_INFORMATION_DIALOG, EmpathyIndividualInformationDialogClass))
-
-typedef struct _EmpathyIndividualInformationDialog EmpathyIndividualInformationDialog;
-typedef struct _EmpathyIndividualInformationDialogClass EmpathyIndividualInformationDialogClass;
-
-struct _EmpathyIndividualInformationDialog {
- GtkDialog parent;
-
- /*<private>*/
- gpointer priv;
-};
-
-struct _EmpathyIndividualInformationDialogClass {
- GtkDialogClass parent_class;
-};
-
-GType empathy_individual_information_dialog_get_type (void) G_GNUC_CONST;
-
-void empathy_individual_information_dialog_show (FolksIndividual *individual,
- GtkWindow *parent);
-
-void empathy_display_individual_info (FolksIndividual *individual);
-
-G_END_DECLS
-
-#endif /* __EMPATHY_INDIVIDUAL_INFORMATION_DIALOG_H__ */
diff --git a/libempathy-gtk/empathy-individual-menu.c b/libempathy-gtk/empathy-individual-menu.c
deleted file mode 100644
index 9d3e91d0..00000000
--- a/libempathy-gtk/empathy-individual-menu.c
+++ /dev/null
@@ -1,1989 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * Copyright (C) 2008-2010 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>
- * Travis Reitter <travis.reitter@collabora.co.uk>
- */
-
-#include "config.h"
-#include "empathy-individual-menu.h"
-
-#include <glib/gi18n-lib.h>
-#include <tp-account-widgets/tpaw-camera-monitor.h>
-
-#include "empathy-account-selector-dialog.h"
-#include "empathy-call-utils.h"
-#include "empathy-chatroom-manager.h"
-#include "empathy-gtk-enum-types.h"
-#include "empathy-images.h"
-#include "empathy-individual-dialogs.h"
-#include "empathy-individual-dialogs.h"
-#include "empathy-individual-edit-dialog.h"
-#include "empathy-individual-information-dialog.h"
-#include "empathy-individual-manager.h"
-#include "empathy-individual-store-channel.h"
-#include "empathy-log-window.h"
-#include "empathy-request-util.h"
-#include "empathy-share-my-desktop.h"
-#include "empathy-ui-utils.h"
-#include "empathy-utils.h"
-
-#define DEBUG_FLAG EMPATHY_DEBUG_CONTACT
-#include "empathy-debug.h"
-
-#define GET_PRIV(obj) EMPATHY_GET_PRIV (obj, EmpathyIndividualMenu)
-
-typedef struct {
- gchar *active_group; /* may be NULL */
- FolksIndividual *individual; /* owned */
- EmpathyIndividualFeatureFlags features;
- EmpathyIndividualStore *store; /* may be NULL */
-} EmpathyIndividualMenuPriv;
-
-enum {
- PROP_ACTIVE_GROUP = 1,
- PROP_INDIVIDUAL,
- PROP_FEATURES,
- PROP_STORE,
-};
-
-G_DEFINE_TYPE (EmpathyIndividualMenu, empathy_individual_menu, GTK_TYPE_MENU);
-
-static GtkWidget * empathy_individual_chat_menu_item_new (
- FolksIndividual *individual);
-static GtkWidget * empathy_individual_sms_menu_item_new (
- FolksIndividual *individual);
-static GtkWidget * empathy_individual_log_menu_item_new (
- FolksIndividual *individual);
-static GtkWidget * empathy_individual_info_menu_item_new (
- FolksIndividual *individual);
-static GtkWidget * empathy_individual_edit_menu_item_new (
- FolksIndividual *individual);
-static GtkWidget * empathy_individual_invite_menu_item_new (
- FolksIndividual *individual,
- EmpathyContact *contact);
-static GtkWidget * empathy_individual_file_transfer_menu_item_new (
- FolksIndividual *individual);
-static GtkWidget * empathy_individual_share_my_desktop_menu_item_new (
- FolksIndividual *individual);
-static GtkWidget * empathy_individual_favourite_menu_item_new (
- FolksIndividual *individual);
-static GtkWidget * empathy_individual_add_menu_item_new (
- EmpathyIndividualMenu *self,
- FolksIndividual *individual);
-static GtkWidget * empathy_individiual_block_menu_item_new (
- FolksIndividual *individual);
-static GtkWidget * empathy_individiual_remove_menu_item_new (
- EmpathyIndividualMenu *self);
-
-static void
-individual_menu_add_personas (GtkMenuShell *menu,
- FolksIndividual *individual,
- EmpathyIndividualFeatureFlags features)
-{
- GtkWidget *item;
- GeeSet *personas;
- GeeIterator *iter;
- guint persona_count = 0;
-
- g_return_if_fail (GTK_IS_MENU (menu));
- g_return_if_fail (FOLKS_IS_INDIVIDUAL (individual));
- g_return_if_fail (empathy_folks_individual_contains_contact (individual));
-
- personas = folks_individual_get_personas (individual);
- /* we'll re-use this iterator throughout */
- iter = gee_iterable_iterator (GEE_ITERABLE (personas));
-
- /* Make sure we've got enough valid entries for these menu items to add
- * functionality */
- while (gee_iterator_next (iter))
- {
- FolksPersona *persona = gee_iterator_get (iter);
- if (empathy_folks_persona_is_interesting (persona))
- persona_count++;
-
- g_clear_object (&persona);
- }
-
- /* return early if these entries would add nothing beyond the "quick" items */
- if (persona_count <= 1)
- goto out;
-
- /* add a separator before the list of personas */
- item = gtk_separator_menu_item_new ();
- gtk_menu_shell_append (GTK_MENU_SHELL (menu), item);
- gtk_widget_show (item);
-
- iter = gee_iterable_iterator (GEE_ITERABLE (personas));
- while (gee_iterator_next (iter))
- {
- GtkWidget *image;
- GtkWidget *contact_item;
- GtkWidget *contact_submenu;
- TpContact *tp_contact;
- EmpathyContact *contact;
- TpfPersona *persona = gee_iterator_get (iter);
- gchar *label;
- FolksPersonaStore *store;
- const gchar *account;
- GtkWidget *action;
- /* Individual containing only persona */
- FolksIndividual *single_individual;
-
- if (!empathy_folks_persona_is_interesting (FOLKS_PERSONA (persona)))
- goto while_finish;
-
- tp_contact = tpf_persona_get_contact (persona);
- if (tp_contact == NULL)
- goto while_finish;
-
- contact = empathy_contact_dup_from_tp_contact (tp_contact);
- single_individual = empathy_create_individual_from_tp_contact (
- tp_contact);
-
- /* Pretty hacky. Creating single_individual had a side effect to change
- * persona.individual from individual to single_individual which is not
- * what we want so we set it back. See bgo#684971 for details. */
- g_object_set (persona, "individual", individual, NULL);
-
- store = folks_persona_get_store (FOLKS_PERSONA (persona));
- account = folks_persona_store_get_display_name (store);
-
- /* Translators: this is used in the context menu for a contact. The first
- * parameter is a contact ID (e.g. foo@jabber.org) and the second is one
- * of the user's account IDs (e.g. me@hotmail.com). */
- label = g_strdup_printf (_("%s (%s)"),
- folks_persona_get_display_id (FOLKS_PERSONA (persona)), account);
-
- contact_item = gtk_image_menu_item_new_with_label (label);
- gtk_image_menu_item_set_always_show_image (GTK_IMAGE_MENU_ITEM (contact_item),
- TRUE);
- contact_submenu = gtk_menu_new ();
- gtk_menu_item_set_submenu (GTK_MENU_ITEM (contact_item), contact_submenu);
- image = gtk_image_new_from_icon_name (
- empathy_icon_name_for_contact (contact), GTK_ICON_SIZE_MENU);
- gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (contact_item), image);
- gtk_widget_show (image);
-
- /* Chat */
- if (features & EMPATHY_INDIVIDUAL_FEATURE_CHAT)
- {
- action = empathy_individual_chat_menu_item_new (single_individual);
- gtk_menu_shell_append (GTK_MENU_SHELL (contact_submenu), action);
- gtk_widget_show (action);
- }
-
- /* SMS */
- if (features & EMPATHY_INDIVIDUAL_FEATURE_SMS)
- {
- action = empathy_individual_sms_menu_item_new (single_individual);
- gtk_menu_shell_append (GTK_MENU_SHELL (contact_submenu), action);
- gtk_widget_show (action);
- }
-
- if (features & EMPATHY_INDIVIDUAL_FEATURE_CALL)
- {
- /* Audio Call */
- action = empathy_individual_audio_call_menu_item_new (
- single_individual);
- gtk_menu_shell_append (GTK_MENU_SHELL (contact_submenu), action);
- gtk_widget_show (action);
-
- /* Video Call */
- action = empathy_individual_video_call_menu_item_new (
- single_individual);
- gtk_menu_shell_append (GTK_MENU_SHELL (contact_submenu), action);
- gtk_widget_show (action);
- }
-
- /* Log */
- if (features & EMPATHY_INDIVIDUAL_FEATURE_LOG)
- {
- action = empathy_individual_log_menu_item_new (single_individual);
- gtk_menu_shell_append (GTK_MENU_SHELL (contact_submenu), action);
- gtk_widget_show (action);
- }
-
- /* Invite */
- action = empathy_individual_invite_menu_item_new (NULL, contact);
- gtk_menu_shell_append (GTK_MENU_SHELL (contact_submenu), action);
- gtk_widget_show (action);
-
- /* File transfer */
- if (features & EMPATHY_INDIVIDUAL_FEATURE_FILE_TRANSFER)
- {
- action = empathy_individual_file_transfer_menu_item_new (
- single_individual);
- gtk_menu_shell_append (GTK_MENU_SHELL (contact_submenu), action);
- gtk_widget_show (action);
- }
-
- /* Share my desktop */
- action = empathy_individual_share_my_desktop_menu_item_new (
- single_individual);
- gtk_menu_shell_append (GTK_MENU_SHELL (contact_submenu), action);
- gtk_widget_show (action);
-
- /* Block */
- if (features & EMPATHY_INDIVIDUAL_FEATURE_BLOCK &&
- (item = empathy_individiual_block_menu_item_new (single_individual))
- != NULL) {
- GtkWidget *sep;
-
- sep = gtk_separator_menu_item_new ();
- gtk_menu_shell_append (GTK_MENU_SHELL (contact_submenu), sep);
- gtk_widget_show (sep);
-
- gtk_menu_shell_append (GTK_MENU_SHELL (contact_submenu), item);
- gtk_widget_show (item);
- }
-
- gtk_menu_shell_append (GTK_MENU_SHELL (menu), contact_item);
- gtk_widget_show (contact_item);
-
- g_free (label);
- g_object_unref (contact);
- g_object_unref (single_individual);
-
-while_finish:
- g_clear_object (&persona);
- }
-
-out:
- g_clear_object (&iter);
-}
-
-static void
-empathy_individual_menu_init (EmpathyIndividualMenu *self)
-{
- EmpathyIndividualMenuPriv *priv = G_TYPE_INSTANCE_GET_PRIVATE (self,
- EMPATHY_TYPE_INDIVIDUAL_MENU, EmpathyIndividualMenuPriv);
-
- self->priv = priv;
-}
-
-static GList *
-find_phone_accounts (void)
-{
- TpAccountManager *am;
- GList *accounts, *l;
- GList *found = NULL;
-
- am = tp_account_manager_dup ();
- g_return_val_if_fail (am != NULL, NULL);
-
- accounts = tp_account_manager_dup_valid_accounts (am);
- for (l = accounts; l != NULL; l = g_list_next (l))
- {
- TpAccount *account = l->data;
-
- if (tp_account_get_connection_status (account, NULL) !=
- TP_CONNECTION_STATUS_CONNECTED)
- continue;
-
- if (!tp_account_associated_with_uri_scheme (account, "tel"))
- continue;
-
- found = g_list_prepend (found, g_object_ref (account));
- }
-
- g_list_free_full (accounts, g_object_unref);
- g_object_unref (am);
-
- return found;
-}
-
-static gboolean
-has_phone_account (void)
-{
- GList *accounts;
- gboolean result;
-
- accounts = find_phone_accounts ();
- result = (accounts != NULL);
-
- g_list_free_full (accounts, (GDestroyNotify) g_object_unref);
-
- return result;
-}
-
-static void
-call_phone_number (FolksPhoneFieldDetails *details,
- TpAccount *account)
-{
- DEBUG ("Try to call %s", folks_phone_field_details_get_normalised (details));
-
- empathy_call_new_with_streams (
- folks_phone_field_details_get_normalised (details),
- account, TRUE, FALSE, empathy_get_current_action_time ());
-}
-
-static void
-display_call_phone_dialog (FolksPhoneFieldDetails *details,
- GList *accounts)
-{
- GtkWidget *dialog;
- gint response;
-
- dialog = empathy_account_selector_dialog_new (accounts);
-
- gtk_window_set_title (GTK_WINDOW (dialog),
- _("Select account to use to place the call"));
-
- gtk_dialog_add_buttons (GTK_DIALOG (dialog),
- GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
- _("Call"), GTK_RESPONSE_OK,
- NULL);
-
- response = gtk_dialog_run (GTK_DIALOG (dialog));
-
- if (response == GTK_RESPONSE_OK)
- {
- TpAccount *account;
-
- account = empathy_account_selector_dialog_dup_selected (
- EMPATHY_ACCOUNT_SELECTOR_DIALOG (dialog));
-
- if (account != NULL)
- {
- call_phone_number (details, account);
-
- g_object_unref (account);
- }
- }
-
- gtk_widget_destroy (dialog);
-}
-
-static void
-call_phone_number_cb (GtkMenuItem *item,
- FolksPhoneFieldDetails *details)
-{
- GList *accounts;
-
- accounts = find_phone_accounts ();
- if (accounts == NULL)
- {
- DEBUG ("No phone aware account connected; can't call");
- }
- else if (g_list_length (accounts) == 1)
- {
- call_phone_number (details, accounts->data);
- }
- else
- {
- /* Ask which account to use */
- display_call_phone_dialog (details, accounts);
- }
-
- g_list_free_full (accounts, (GDestroyNotify) g_object_unref);
-}
-
-static const gchar *
-find_phone_type (FolksPhoneFieldDetails *details)
-{
- GeeCollection *types;
- GeeIterator *iter;
-
- types = folks_abstract_field_details_get_parameter_values (
- FOLKS_ABSTRACT_FIELD_DETAILS (details), "type");
-
- if (types == NULL)
- return NULL;
-
- iter = gee_iterable_iterator (GEE_ITERABLE (types));
- while (gee_iterator_next (iter))
- {
- const gchar *type = gee_iterator_get (iter);
-
- if (!tp_strdiff (type, "CELL"))
- return _("Mobile");
- else if (!tp_strdiff (type, "WORK"))
- return _("Work");
- else if (!tp_strdiff (type, "HOME"))
- return _("HOME");
- }
-
- return NULL;
-}
-
-static void
-add_phone_numbers (EmpathyIndividualMenu *self)
-{
- EmpathyIndividualMenuPriv *priv = GET_PRIV (self);
- GeeSet *all_numbers;
- GeeIterator *iter;
- gboolean sensitive;
-
- all_numbers = folks_phone_details_get_phone_numbers (
- FOLKS_PHONE_DETAILS (priv->individual));
-
- sensitive = has_phone_account ();
-
- iter = gee_iterable_iterator (GEE_ITERABLE (all_numbers));
- while (gee_iterator_next (iter))
- {
- FolksPhoneFieldDetails *details = gee_iterator_get (iter);
- GtkWidget *item, *image;
- gchar *tmp;
- const gchar *type;
-
- type = find_phone_type (details);
-
- if (type != NULL)
- {
- tmp = g_strdup_printf ("Call %s (%s)",
- folks_phone_field_details_get_normalised (details),
- type);
- }
- else
- {
- tmp = g_strdup_printf ("Call %s",
- folks_phone_field_details_get_normalised (details));
- }
-
- item = gtk_image_menu_item_new_with_mnemonic (tmp);
- g_free (tmp);
-
- g_signal_connect_data (item, "activate",
- G_CALLBACK (call_phone_number_cb), g_object_ref (details),
- (GClosureNotify) g_object_unref, 0);
-
- gtk_widget_set_sensitive (item, sensitive);
-
- image = gtk_image_new_from_icon_name (EMPATHY_IMAGE_CALL,
- GTK_ICON_SIZE_MENU);
- gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (item), image);
- gtk_widget_show (image);
-
- gtk_menu_shell_append (GTK_MENU_SHELL (self), item);
- gtk_widget_show (item);
- }
-
- g_object_unref (iter);
-}
-
-/* return a list of TpContact supporting the blocking iface */
-static GList *
-get_contacts_supporting_blocking (FolksIndividual *individual)
-{
- GeeSet *personas;
- GeeIterator *iter;
- GList *result = NULL;
-
- personas = folks_individual_get_personas (individual);
-
- iter = gee_iterable_iterator (GEE_ITERABLE (personas));
- while (gee_iterator_next (iter))
- {
- TpfPersona *persona = gee_iterator_get (iter);
- TpContact *contact;
- TpConnection *conn;
-
- if (!TPF_IS_PERSONA (persona))
- continue;
-
- contact = tpf_persona_get_contact (persona);
- if (contact == NULL)
- continue;
-
- conn = tp_contact_get_connection (contact);
-
- if (tp_proxy_has_interface_by_id (conn,
- TP_IFACE_QUARK_CONNECTION_INTERFACE_CONTACT_BLOCKING))
- result = g_list_prepend (result, contact);
- }
-
- g_clear_object (&iter);
-
- return result;
-}
-
-typedef struct
-{
- gboolean blocked;
- GtkWidget *parent;
-} GotAvatarCtx;
-
-static GotAvatarCtx *
-got_avatar_ctx_new (gboolean blocked,
- GtkWidget *parent)
-{
- GotAvatarCtx *ctx = g_slice_new0 (GotAvatarCtx);
-
- ctx->blocked = blocked;
- ctx->parent = parent != NULL ? g_object_ref (parent) : NULL;
- return ctx;
-}
-
-static void
-got_avatar_ctx_free (GotAvatarCtx *ctx)
-{
- g_clear_object (&ctx->parent);
- g_slice_free (GotAvatarCtx, ctx);
-}
-
-static void
-got_avatar (GObject *source_object,
- GAsyncResult *result,
- gpointer user_data)
-{
- FolksIndividual *individual = FOLKS_INDIVIDUAL (source_object);
- GotAvatarCtx *ctx = user_data;
- GdkPixbuf *avatar;
- GError *error = NULL;
- gboolean abusive = FALSE;
- EmpathyIndividualManager *manager;
-
- avatar = empathy_pixbuf_avatar_from_individual_scaled_finish (individual,
- result, &error);
-
- if (error != NULL)
- {
- DEBUG ("Could not get avatar: %s", error->message);
- g_error_free (error);
- }
-
- if (ctx->blocked) {
- /* confirm the user really wishes to block the contact */
- if (!empathy_block_individual_dialog_show (GTK_WINDOW (ctx->parent),
- individual, avatar, &abusive))
- goto out;
- }
-
- manager = empathy_individual_manager_dup_singleton ();
-
- empathy_individual_manager_set_blocked (manager, individual,
- ctx->blocked, abusive);
-
- g_object_unref (manager);
-
-out:
- g_clear_object (&avatar);
- got_avatar_ctx_free (ctx);
-}
-
-static void
-empathy_individual_block_menu_item_toggled (GtkCheckMenuItem *item,
- FolksIndividual *individual)
-{
- GotAvatarCtx *ctx;
- gboolean blocked;
- GtkWidget *parent;
-
- /* @item may be destroyed while the async call is running to get the things
- * we need from it right now. */
- blocked = gtk_check_menu_item_get_active (item);
-
- parent = g_object_get_data (
- G_OBJECT (gtk_widget_get_parent (GTK_WIDGET (item))),
- "window");
-
- ctx = got_avatar_ctx_new (blocked, parent);
-
- empathy_pixbuf_avatar_from_individual_scaled_async (individual,
- 48, 48, NULL, got_avatar, ctx);
-}
-
-static void
-update_block_menu_item (GtkWidget *item,
- FolksIndividual *individual)
-{
- GList *contacts, *l;
- gboolean is_blocked = TRUE;
-
- contacts = get_contacts_supporting_blocking (individual);
-
- if (contacts == NULL)
- is_blocked = FALSE;
-
- /* Check the menu item if all his personas are blocked */
- for (l = contacts; l != NULL; l = g_list_next (l))
- {
- TpContact *contact = l->data;
-
- if (!tp_contact_is_blocked (contact))
- {
- is_blocked = FALSE;
- break;
- }
- }
-
- g_signal_handlers_block_by_func (item,
- empathy_individual_block_menu_item_toggled, individual);
-
- gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (item), is_blocked);
-
- g_signal_handlers_unblock_by_func (item,
- empathy_individual_block_menu_item_toggled, individual);
-
- g_list_free (contacts);
-}
-
-static void
-contact_blocked_changed_cb (TpContact *contact,
- GParamSpec *spec,
- GtkWidget *item)
-{
- FolksIndividual *individual;
-
- individual = g_object_get_data (G_OBJECT (item), "individual");
-
- update_block_menu_item (item, individual);
-}
-
-static GtkWidget *
-empathy_individiual_block_menu_item_new (FolksIndividual *individual)
-{
- GtkWidget *item;
- GList *contacts, *l;
-
- contacts = get_contacts_supporting_blocking (individual);
-
- /* Can't block, no persona supports blocking */
- if (contacts == NULL)
- return NULL;
-
- item = gtk_check_menu_item_new_with_mnemonic (_("_Block Contact"));
-
- g_object_set_data_full (G_OBJECT (item), "individual",
- g_object_ref (individual), g_object_unref);
-
- for (l = contacts; l != NULL; l = g_list_next (l))
- {
- TpContact *contact = l->data;
-
- tp_g_signal_connect_object (contact, "notify::is-blocked",
- G_CALLBACK (contact_blocked_changed_cb), item, 0);
- }
-
- g_signal_connect (item, "toggled",
- G_CALLBACK (empathy_individual_block_menu_item_toggled), individual);
-
- update_block_menu_item (item, individual);
-
- g_list_free (contacts);
-
- return item;
-}
-
-enum
-{
- REMOVE_DIALOG_RESPONSE_CANCEL = 0,
- REMOVE_DIALOG_RESPONSE_DELETE,
- REMOVE_DIALOG_RESPONSE_DELETE_AND_BLOCK,
- REMOVE_DIALOG_RESPONSE_REMOVE_FROM_GROUP
-};
-
-static int
-remove_dialog_show (const gchar *message,
- const gchar *secondary_text,
- gboolean show_remove_from_group,
- gboolean block_button,
- GdkPixbuf *avatar,
- const gchar *active_group)
-{
- GtkWidget *dialog;
- gboolean res;
-
- dialog = gtk_message_dialog_new (NULL, GTK_DIALOG_MODAL,
- GTK_MESSAGE_QUESTION, GTK_BUTTONS_NONE, "%s", message);
-
- if (avatar != NULL)
- {
- GtkWidget *image = gtk_image_new_from_pixbuf (avatar);
- gtk_message_dialog_set_image (GTK_MESSAGE_DIALOG (dialog), image);
- gtk_widget_show (image);
- }
-
- if (show_remove_from_group)
- {
- GtkWidget *button;
- gchar *button_text = g_strdup_printf (_("Remove from _Group \'%s\'"),
- active_group);
-
- /* gtk_dialog_add_button() doesn't allow us to pass a string with a
- * mnemonic so we have to create the button manually. */
- button = gtk_button_new_with_mnemonic (button_text);
- g_free (button_text);
-
- gtk_dialog_add_action_widget (GTK_DIALOG (dialog), button,
- REMOVE_DIALOG_RESPONSE_REMOVE_FROM_GROUP);
-
- gtk_widget_show (button);
- }
-
- if (block_button)
- {
- GtkWidget *button;
-
- /* gtk_dialog_add_button() doesn't allow us to pass a string with a
- * mnemonic so we have to create the button manually. */
- button = gtk_button_new_with_mnemonic (
- _("Delete and _Block"));
-
- gtk_dialog_add_action_widget (GTK_DIALOG (dialog), button,
- REMOVE_DIALOG_RESPONSE_DELETE_AND_BLOCK);
-
- gtk_widget_show (button);
- }
-
- gtk_dialog_add_buttons (GTK_DIALOG (dialog),
- GTK_STOCK_CANCEL, REMOVE_DIALOG_RESPONSE_CANCEL,
- GTK_STOCK_DELETE, REMOVE_DIALOG_RESPONSE_DELETE, NULL);
- gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (dialog),
- "%s", secondary_text);
-
- gtk_widget_show (dialog);
-
- res = gtk_dialog_run (GTK_DIALOG (dialog));
- gtk_widget_destroy (dialog);
-
- return res;
-}
-
-static void
-individual_removed_from_group_cb (GObject *source_object,
- GAsyncResult *res,
- gpointer user_data)
-{
- GError *error = NULL;
- FolksIndividual *individual = FOLKS_INDIVIDUAL (source_object);
-
- folks_group_details_change_group_finish (
- FOLKS_GROUP_DETAILS (individual), res, &error);
- if (error != NULL)
- {
- DEBUG ("Individual could not be removed from group: %s",
- error->message);
- g_error_free (error);
- }
-}
-
-static void
-remove_got_avatar (GObject *source_object,
- GAsyncResult *result,
- gpointer user_data)
-{
- FolksIndividual *individual = FOLKS_INDIVIDUAL (source_object);
- EmpathyIndividualMenu *self = EMPATHY_INDIVIDUAL_MENU (user_data);
- EmpathyIndividualMenuPriv *priv = GET_PRIV (self);
- GdkPixbuf *avatar;
- EmpathyIndividualManager *manager;
- gchar *text;
- GeeSet *personas;
- guint persona_count = 0;
- gboolean can_block;
- GError *error = NULL;
- gint res;
- gboolean show_remove_from_group;
- GeeSet *groups;
-
- avatar = empathy_pixbuf_avatar_from_individual_scaled_finish (individual,
- result, &error);
-
- if (error != NULL)
- {
- DEBUG ("Could not get avatar: %s", error->message);
- g_error_free (error);
- }
-
- /* We couldn't retrieve the avatar, but that isn't a fatal error,
- * so we still display the remove dialog. */
-
- groups = folks_group_details_get_groups (FOLKS_GROUP_DETAILS (individual));
- show_remove_from_group =
- gee_collection_get_size (GEE_COLLECTION (groups)) > 1;
-
- personas = folks_individual_get_personas (individual);
-
- persona_count = gee_collection_get_size (GEE_COLLECTION (personas));
-
- /* If we have more than one TpfPersona, display a different message
- * ensuring the user knows that *all* of the meta-contacts' personas will
- * be removed. */
-
- if (persona_count < 2)
- {
- /* Not a meta-contact */
- text =
- g_strdup_printf (
- _("Do you really want to remove the contact '%s'?"),
- folks_alias_details_get_alias (
- FOLKS_ALIAS_DETAILS (individual)));
- }
- else
- {
- /* Meta-contact */
- text =
- g_strdup_printf (
- _("Do you really want to remove the linked contact '%s'? "
- "Note that this will remove all the contacts which make up "
- "this linked contact."),
- folks_alias_details_get_alias (
- FOLKS_ALIAS_DETAILS (individual)));
- }
-
-
- manager = empathy_individual_manager_dup_singleton ();
- can_block = empathy_individual_manager_supports_blocking (manager,
- individual);
- res = remove_dialog_show (_("Removing contact"), text,
- show_remove_from_group, can_block, avatar, priv->active_group);
-
- if (res == REMOVE_DIALOG_RESPONSE_REMOVE_FROM_GROUP)
- {
- folks_group_details_change_group (FOLKS_GROUP_DETAILS (individual),
- priv->active_group, false, individual_removed_from_group_cb, NULL);
- goto finally;
- }
-
- if (res == REMOVE_DIALOG_RESPONSE_DELETE ||
- res == REMOVE_DIALOG_RESPONSE_DELETE_AND_BLOCK)
- {
- gboolean abusive;
-
- if (res == REMOVE_DIALOG_RESPONSE_DELETE_AND_BLOCK)
- {
- if (!empathy_block_individual_dialog_show (NULL, individual,
- avatar, &abusive))
- goto finally;
-
- empathy_individual_manager_set_blocked (manager, individual,
- TRUE, abusive);
- }
-
- empathy_individual_manager_remove (manager, individual, "");
- }
-
- finally:
- g_free (text);
- g_object_unref (manager);
- g_object_unref (self);
-}
-
-static void
-remove_activate_cb (GtkMenuItem *menuitem,
- EmpathyIndividualMenu *self)
-{
- EmpathyIndividualMenuPriv *priv = GET_PRIV (self);
-
- empathy_pixbuf_avatar_from_individual_scaled_async (priv->individual,
- 48, 48, NULL, remove_got_avatar, g_object_ref (self));
-}
-
-static GtkWidget *
-empathy_individiual_remove_menu_item_new (EmpathyIndividualMenu *self)
-{
- GeeSet *personas;
- GeeIterator *iter;
- gboolean can_remove = FALSE;
- GtkWidget *item, *image;
- EmpathyIndividualMenuPriv *priv = GET_PRIV (self);
-
- /* If any of the Individual's personas can be removed, add an option to
- * remove. This will act as a best-effort option. If any Personas cannot be
- * removed from the server, then this option will just be inactive upon
- * subsequent menu openings */
- personas = folks_individual_get_personas (priv->individual);
- iter = gee_iterable_iterator (GEE_ITERABLE (personas));
- while (!can_remove && gee_iterator_next (iter))
- {
- FolksPersona *persona = gee_iterator_get (iter);
- FolksPersonaStore *store = folks_persona_get_store (persona);
- FolksMaybeBool maybe_can_remove =
- folks_persona_store_get_can_remove_personas (store);
-
- if (maybe_can_remove == FOLKS_MAYBE_BOOL_TRUE)
- can_remove = TRUE;
-
- g_clear_object (&persona);
- }
- g_clear_object (&iter);
-
- if (!can_remove)
- return NULL;
-
- 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);
-
- g_signal_connect (item, "activate",
- G_CALLBACK (remove_activate_cb), self);
-
- return item;
-}
-
-static void
-constructed (GObject *object)
-{
- EmpathyIndividualMenu *self = EMPATHY_INDIVIDUAL_MENU (object);
- EmpathyIndividualMenuPriv *priv = GET_PRIV (object);
- GtkMenuShell *shell;
- GtkWidget *item;
- FolksIndividual *individual;
- EmpathyIndividualFeatureFlags features;
-
- /* Build the menu */
- shell = GTK_MENU_SHELL (object);
- individual = priv->individual;
- features = priv->features;
-
- /* Add contact */
- if (features & EMPATHY_INDIVIDUAL_FEATURE_ADD_CONTACT)
- {
- item = empathy_individual_add_menu_item_new (self, individual);
- if (item != NULL)
- {
- gtk_menu_shell_append (GTK_MENU_SHELL (shell), item);
- gtk_widget_show (item);
- }
- }
-
- /* Chat */
- if (features & EMPATHY_INDIVIDUAL_FEATURE_CHAT)
- {
- item = empathy_individual_chat_menu_item_new (individual);
- if (item != NULL)
- {
- gtk_menu_shell_append (shell, item);
- gtk_widget_show (item);
- }
- }
-
- /* SMS */
- if (features & EMPATHY_INDIVIDUAL_FEATURE_SMS)
- {
- item = empathy_individual_sms_menu_item_new (individual);
- if (item != NULL)
- {
- gtk_menu_shell_append (shell, item);
- gtk_widget_show (item);
- }
- }
-
- if (features & EMPATHY_INDIVIDUAL_FEATURE_CALL)
- {
- /* Audio Call */
- item = empathy_individual_audio_call_menu_item_new (individual);
- gtk_menu_shell_append (shell, item);
- gtk_widget_show (item);
-
- /* Video Call */
- item = empathy_individual_video_call_menu_item_new (individual);
- gtk_menu_shell_append (shell, item);
- gtk_widget_show (item);
- }
-
- if (features & EMPATHY_INDIVIDUAL_FEATURE_CALL_PHONE)
- add_phone_numbers (self);
-
- /* Invite */
- item = empathy_individual_invite_menu_item_new (individual, NULL);
- gtk_menu_shell_append (shell, item);
- gtk_widget_show (item);
-
- /* File transfer */
- if (features & EMPATHY_INDIVIDUAL_FEATURE_FILE_TRANSFER)
- {
- item = empathy_individual_file_transfer_menu_item_new (individual);
- gtk_menu_shell_append (shell, item);
- gtk_widget_show (item);
- }
-
- /* Share my desktop */
- /* FIXME we should add the "Share my desktop" menu item if Vino is
- a registered handler in MC5 */
- item = empathy_individual_share_my_desktop_menu_item_new (individual);
- gtk_menu_shell_append (shell, item);
- gtk_widget_show (item);
-
- /* Menu items to target specific contacts */
- individual_menu_add_personas (GTK_MENU_SHELL (object), individual, features);
-
- /* Separator */
- if (features & (EMPATHY_INDIVIDUAL_FEATURE_EDIT |
- EMPATHY_INDIVIDUAL_FEATURE_INFO |
- EMPATHY_INDIVIDUAL_FEATURE_FAVOURITE))
- {
- item = gtk_separator_menu_item_new ();
- gtk_menu_shell_append (shell, item);
- gtk_widget_show (item);
- }
-
- /* Edit */
- if (features & EMPATHY_INDIVIDUAL_FEATURE_EDIT)
- {
- item = empathy_individual_edit_menu_item_new (individual);
- gtk_menu_shell_append (shell, item);
- gtk_widget_show (item);
- }
-
- /* Log */
- if (features & EMPATHY_INDIVIDUAL_FEATURE_LOG)
- {
- item = empathy_individual_log_menu_item_new (individual);
- gtk_menu_shell_append (shell, item);
- gtk_widget_show (item);
- }
-
- /* Info */
- if (features & EMPATHY_INDIVIDUAL_FEATURE_INFO)
- {
- item = empathy_individual_info_menu_item_new (individual);
- gtk_menu_shell_append (shell, item);
- gtk_widget_show (item);
- }
-
- /* Favorite checkbox */
- if (features & EMPATHY_INDIVIDUAL_FEATURE_FAVOURITE)
- {
- item = empathy_individual_favourite_menu_item_new (individual);
- gtk_menu_shell_append (shell, item);
- gtk_widget_show (item);
- }
-
- /* Separator & Block */
- if (features & EMPATHY_INDIVIDUAL_FEATURE_BLOCK &&
- (item = empathy_individiual_block_menu_item_new (individual)) != NULL) {
- GtkWidget *sep;
-
- sep = gtk_separator_menu_item_new ();
- gtk_menu_shell_append (shell, sep);
- gtk_widget_show (sep);
-
- gtk_menu_shell_append (shell, item);
- gtk_widget_show (item);
- }
-
- /* Separator & Remove */
- if (features & EMPATHY_INDIVIDUAL_FEATURE_REMOVE &&
- (item = empathy_individiual_remove_menu_item_new (self)) != NULL) {
- GtkWidget *sep;
-
- sep = gtk_separator_menu_item_new ();
- gtk_menu_shell_append (shell, sep);
- gtk_widget_show (sep);
-
- gtk_menu_shell_append (shell, item);
- gtk_widget_show (item);
- }
-}
-
-static void
-get_property (GObject *object,
- guint param_id,
- GValue *value,
- GParamSpec *pspec)
-{
- EmpathyIndividualMenuPriv *priv;
-
- priv = GET_PRIV (object);
-
- switch (param_id)
- {
- case PROP_ACTIVE_GROUP:
- g_value_set_string (value, priv->active_group);
- break;
- case PROP_INDIVIDUAL:
- g_value_set_object (value, priv->individual);
- break;
- case PROP_FEATURES:
- g_value_set_flags (value, priv->features);
- break;
- case PROP_STORE:
- g_value_set_object (value, priv->store);
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, pspec);
- break;
- }
-}
-
-static void
-set_property (GObject *object,
- guint param_id,
- const GValue *value,
- GParamSpec *pspec)
-{
- EmpathyIndividualMenuPriv *priv;
-
- priv = GET_PRIV (object);
-
- switch (param_id)
- {
- case PROP_ACTIVE_GROUP:
- g_assert (priv->active_group == NULL); /* construct only */
- priv->active_group = g_value_dup_string (value);
- break;
- case PROP_INDIVIDUAL:
- priv->individual = g_value_dup_object (value);
- break;
- case PROP_FEATURES:
- priv->features = g_value_get_flags (value);
- break;
- case PROP_STORE:
- priv->store = g_value_dup_object (value); /* read only */
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, pspec);
- break;
- }
-}
-
-static void
-dispose (GObject *object)
-{
- EmpathyIndividualMenuPriv *priv = GET_PRIV (object);
-
- tp_clear_object (&priv->individual);
- tp_clear_object (&priv->store);
-
- G_OBJECT_CLASS (empathy_individual_menu_parent_class)->dispose (object);
-}
-
-static void
-finalize (GObject *object)
-{
- EmpathyIndividualMenuPriv *priv = GET_PRIV (object);
-
- g_free (priv->active_group);
-
- G_OBJECT_CLASS (empathy_individual_menu_parent_class)->finalize (object);
-}
-
-static void
-empathy_individual_menu_class_init (EmpathyIndividualMenuClass *klass)
-{
- GObjectClass *object_class = G_OBJECT_CLASS (klass);
-
- object_class->constructed = constructed;
- object_class->get_property = get_property;
- object_class->set_property = set_property;
- object_class->dispose = dispose;
- object_class->finalize = finalize;
-
- /**
- * gchar *:active-group:
- *
- * The group the selected roster-contact widget belongs, or NULL.
- */
- g_object_class_install_property (object_class, PROP_ACTIVE_GROUP,
- g_param_spec_string ("active-group",
- "Active group",
- "The group the selected roster-contact widget belongs, or NULL",
- NULL,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS));
-
- /**
- * EmpathyIndividualMenu:individual:
- *
- * The #FolksIndividual the menu is for.
- */
- g_object_class_install_property (object_class, PROP_INDIVIDUAL,
- g_param_spec_object ("individual",
- "Individual",
- "The #FolksIndividual the menu is for.",
- FOLKS_TYPE_INDIVIDUAL,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS));
-
- /**
- * EmpathyIndividualMenu:features:
- *
- * A set of feature flags controlling which entries are shown.
- */
- g_object_class_install_property (object_class, PROP_FEATURES,
- g_param_spec_flags ("features",
- "Features",
- "A set of feature flags controlling which entries are shown.",
- EMPATHY_TYPE_INDIVIDUAL_FEATURE_FLAGS,
- EMPATHY_INDIVIDUAL_FEATURE_NONE,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS));
-
- g_object_class_install_property (object_class, PROP_STORE,
- g_param_spec_object ("store",
- "Store",
- "The EmpathyIndividualStore to use to get contact owner",
- EMPATHY_TYPE_INDIVIDUAL_STORE,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS));
-
- g_type_class_add_private (object_class, sizeof (EmpathyIndividualMenuPriv));
-}
-
-GtkWidget *
-empathy_individual_menu_new (FolksIndividual *individual,
- const gchar *active_group,
- EmpathyIndividualFeatureFlags features,
- EmpathyIndividualStore *store)
-{
- g_return_val_if_fail (FOLKS_IS_INDIVIDUAL (individual), NULL);
- g_return_val_if_fail (store == NULL ||
- EMPATHY_IS_INDIVIDUAL_STORE (store), NULL);
- g_return_val_if_fail (features != EMPATHY_INDIVIDUAL_FEATURE_NONE, NULL);
-
- return g_object_new (EMPATHY_TYPE_INDIVIDUAL_MENU,
- "active-group", active_group,
- "individual", individual,
- "features", features,
- "store", store,
- NULL);
-}
-
-/* Like menu_item_set_first_contact(), but always operates upon the given
- * contact. If the contact is non-NULL, it is assumed that the menu entry should
- * be sensitive. */
-static gboolean
-menu_item_set_contact (GtkWidget *item,
- EmpathyContact *contact,
- GCallback activate_callback,
- EmpathyActionType action_type)
-{
- gboolean can_do_action = FALSE;
-
- if (contact != NULL)
- can_do_action = empathy_contact_can_do_action (contact, action_type);
- gtk_widget_set_sensitive (item, can_do_action);
-
- if (can_do_action == TRUE)
- {
- /* We want to make sure that the EmpathyContact stays alive while the
- * signal is connected. */
- g_signal_connect_data (item, "activate", G_CALLBACK (activate_callback),
- g_object_ref (contact), (GClosureNotify) g_object_unref, 0);
- }
-
- return can_do_action;
-}
-
-/**
- * Set the given menu @item to call @activate_callback using the TpContact
- * (associated with @individual) with the highest availability who is also valid
- * whenever @item is activated.
- *
- * @action_type is the type of action performed by the menu entry; this is used
- * so that only contacts which can perform that action (e.g. are capable of
- * receiving video calls) are selected, as appropriate.
- */
-static GtkWidget *
-menu_item_set_first_contact (GtkWidget *item,
- FolksIndividual *individual,
- GCallback activate_callback,
- EmpathyActionType action_type)
-{
- EmpathyContact *best_contact;
-
- best_contact = empathy_contact_dup_best_for_action (individual, action_type);
- menu_item_set_contact (item, best_contact, G_CALLBACK (activate_callback),
- action_type);
- tp_clear_object (&best_contact);
-
- return item;
-}
-
-static void
-empathy_individual_chat_menu_item_activated (GtkMenuItem *item,
- EmpathyContact *contact)
-{
- g_return_if_fail (EMPATHY_IS_CONTACT (contact));
-
- empathy_chat_with_contact (contact, empathy_get_current_action_time ());
-}
-
-static GtkWidget *
-empathy_individual_chat_menu_item_new (FolksIndividual *individual)
-{
- GtkWidget *item;
- GtkWidget *image;
-
- g_return_val_if_fail (FOLKS_IS_INDIVIDUAL (individual) &&
- empathy_folks_individual_contains_contact (individual), 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);
-
- menu_item_set_first_contact (item, individual,
- G_CALLBACK (empathy_individual_chat_menu_item_activated),
- EMPATHY_ACTION_CHAT);
-
- return item;
-}
-
-static void
-empathy_individual_sms_menu_item_activated (GtkMenuItem *item,
- EmpathyContact *contact)
-{
- g_return_if_fail (EMPATHY_IS_CONTACT (contact));
-
- empathy_sms_contact_id (
- empathy_contact_get_account (contact),
- empathy_contact_get_id (contact),
- empathy_get_current_action_time (),
- NULL, NULL);
-}
-
-static GtkWidget *
-empathy_individual_sms_menu_item_new (FolksIndividual *individual)
-{
- GtkWidget *item;
- GtkWidget *image;
-
- g_return_val_if_fail (FOLKS_IS_INDIVIDUAL (individual) &&
- empathy_folks_individual_contains_contact (individual), NULL);
-
- item = gtk_image_menu_item_new_with_mnemonic (_("_SMS"));
- image = gtk_image_new_from_icon_name (EMPATHY_IMAGE_SMS,
- GTK_ICON_SIZE_MENU);
- gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (item), image);
- gtk_widget_show (image);
-
- menu_item_set_first_contact (item, individual,
- G_CALLBACK (empathy_individual_sms_menu_item_activated),
- EMPATHY_ACTION_SMS);
-
- return item;
-}
-
-static void
-empathy_individual_audio_call_menu_item_activated (GtkMenuItem *item,
- EmpathyContact *contact)
-{
- g_return_if_fail (EMPATHY_IS_CONTACT (contact));
-
- empathy_call_new_with_streams (empathy_contact_get_id (contact),
- empathy_contact_get_account (contact),
- TRUE, FALSE,
- empathy_get_current_action_time ());
-}
-
-GtkWidget *
-empathy_individual_audio_call_menu_item_new (FolksIndividual *individual)
-{
- GtkWidget *item;
- GtkWidget *image;
-
- g_return_val_if_fail (FOLKS_IS_INDIVIDUAL (individual), NULL);
-
- item = gtk_image_menu_item_new_with_mnemonic (C_("menu item", "_Audio 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_show (image);
-
- menu_item_set_first_contact (item, individual,
- G_CALLBACK (empathy_individual_audio_call_menu_item_activated),
- EMPATHY_ACTION_AUDIO_CALL);
-
- return item;
-}
-
-static void
-empathy_individual_video_call_menu_item_activated (GtkMenuItem *item,
- EmpathyContact *contact)
-{
- g_return_if_fail (EMPATHY_IS_CONTACT (contact));
-
- empathy_call_new_with_streams (empathy_contact_get_id (contact),
- empathy_contact_get_account (contact),
- TRUE, TRUE,
- empathy_get_current_action_time ());
-}
-
-GtkWidget *
-empathy_individual_video_call_menu_item_new (FolksIndividual *individual)
-{
- GtkWidget *item;
- GtkWidget *image;
- TpawCameraMonitor *monitor;
-
- g_return_val_if_fail (FOLKS_IS_INDIVIDUAL (individual), NULL);
-
- item = gtk_image_menu_item_new_with_mnemonic (C_("menu item", "_Video Call"));
- image = gtk_image_new_from_icon_name (EMPATHY_IMAGE_VIDEO_CALL,
- GTK_ICON_SIZE_MENU);
- gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (item), image);
- gtk_widget_show (image);
-
- menu_item_set_first_contact (item, individual,
- G_CALLBACK (empathy_individual_video_call_menu_item_activated),
- EMPATHY_ACTION_VIDEO_CALL);
-
- /* Only follow available cameras if the contact can do Video calls */
- if (gtk_widget_get_sensitive (item))
- {
- monitor = tpaw_camera_monitor_dup_singleton ();
- g_object_set_data_full (G_OBJECT (item),
- "monitor", monitor, g_object_unref);
- g_object_bind_property (monitor, "available", item, "sensitive",
- G_BINDING_SYNC_CREATE);
- }
-
- return item;
-}
-
-static void
-empathy_individual_log_menu_item_activated (GtkMenuItem *item,
- EmpathyContact *contact)
-{
- g_return_if_fail (EMPATHY_IS_CONTACT (contact));
-
- empathy_log_window_show (empathy_contact_get_account (contact),
- empathy_contact_get_id (contact), FALSE, NULL);
-}
-
-static GtkWidget *
-empathy_individual_log_menu_item_new (FolksIndividual *individual)
-{
- GtkWidget *item;
- GtkWidget *image;
-
- g_return_val_if_fail (FOLKS_IS_INDIVIDUAL (individual), NULL);
-
- item = gtk_image_menu_item_new_with_mnemonic (_("_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_show (image);
-
- menu_item_set_first_contact (item, individual,
- G_CALLBACK (empathy_individual_log_menu_item_activated),
- EMPATHY_ACTION_VIEW_LOGS);
-
- return item;
-}
-
-static void
-empathy_individual_file_transfer_menu_item_activated (GtkMenuItem *item,
- EmpathyContact *contact)
-{
- g_return_if_fail (EMPATHY_IS_CONTACT (contact));
-
- empathy_send_file_with_file_chooser (contact);
-}
-
-static GtkWidget *
-empathy_individual_file_transfer_menu_item_new (FolksIndividual *individual)
-{
- GtkWidget *item;
- GtkWidget *image;
-
- g_return_val_if_fail (FOLKS_IS_INDIVIDUAL (individual), NULL);
-
- item = gtk_image_menu_item_new_with_mnemonic (_("Send File"));
- image = gtk_image_new_from_icon_name (EMPATHY_IMAGE_DOCUMENT_SEND,
- GTK_ICON_SIZE_MENU);
- gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (item), image);
- gtk_widget_show (image);
-
- menu_item_set_first_contact (item, individual,
- G_CALLBACK (empathy_individual_file_transfer_menu_item_activated),
- EMPATHY_ACTION_SEND_FILE);
-
- return item;
-}
-
-static void
-empathy_individual_share_my_desktop_menu_item_activated (GtkMenuItem *item,
- EmpathyContact *contact)
-{
- g_return_if_fail (EMPATHY_IS_CONTACT (contact));
-
- empathy_share_my_desktop_share_with_contact (contact);
-}
-
-static GtkWidget *
-empathy_individual_share_my_desktop_menu_item_new (FolksIndividual *individual)
-{
- GtkWidget *item;
- GtkWidget *image;
-
- g_return_val_if_fail (FOLKS_IS_INDIVIDUAL (individual), NULL);
-
- item = gtk_image_menu_item_new_with_mnemonic (_("Share My Desktop"));
- image = gtk_image_new_from_icon_name (GTK_STOCK_NETWORK, GTK_ICON_SIZE_MENU);
- gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (item), image);
- gtk_widget_show (image);
-
- menu_item_set_first_contact (item, individual,
- G_CALLBACK (empathy_individual_share_my_desktop_menu_item_activated),
- EMPATHY_ACTION_SHARE_MY_DESKTOP);
-
- return item;
-}
-
-static void
-favourite_menu_item_toggled_cb (GtkCheckMenuItem *item,
- FolksIndividual *individual)
-{
- folks_favourite_details_set_is_favourite (
- FOLKS_FAVOURITE_DETAILS (individual),
- gtk_check_menu_item_get_active (item));
-}
-
-static GtkWidget *
-empathy_individual_favourite_menu_item_new (FolksIndividual *individual)
-{
- GtkWidget *item;
-
- item = gtk_check_menu_item_new_with_label (_("Favorite"));
-
- gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (item),
- folks_favourite_details_get_is_favourite (
- FOLKS_FAVOURITE_DETAILS (individual)));
-
- g_signal_connect (item, "toggled",
- G_CALLBACK (favourite_menu_item_toggled_cb), individual);
-
- return item;
-}
-
-static void
-individual_info_menu_item_activate_cb (GtkMenuItem *item,
- FolksIndividual *individual)
-{
- empathy_display_individual_info (individual);
-}
-
-static GtkWidget *
-empathy_individual_info_menu_item_new (FolksIndividual *individual)
-{
- GtkWidget *item;
- GtkWidget *image;
-
- g_return_val_if_fail (FOLKS_IS_INDIVIDUAL (individual), NULL);
- g_return_val_if_fail (empathy_folks_individual_contains_contact (individual),
- 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 (item, "activate",
- G_CALLBACK (individual_info_menu_item_activate_cb),
- individual);
-
- return item;
-}
-
-static void
-individual_edit_menu_item_activate_cb (FolksIndividual *individual)
-{
- empathy_individual_edit_dialog_show (individual, NULL);
-}
-
-static GtkWidget *
-empathy_individual_edit_menu_item_new (FolksIndividual *individual)
-{
- EmpathyIndividualManager *manager;
- GtkWidget *item;
- GtkWidget *image;
- gboolean enable = FALSE;
- EmpathyContact *contact;
-
- g_return_val_if_fail (FOLKS_IS_INDIVIDUAL (individual), NULL);
-
- contact = empathy_contact_dup_from_folks_individual (individual);
-
- g_return_val_if_fail (EMPATHY_IS_CONTACT (contact), NULL);
-
- if (empathy_individual_manager_initialized ())
- {
- TpConnection *connection;
-
- manager = empathy_individual_manager_dup_singleton ();
- connection = empathy_contact_get_connection (contact);
-
- enable = (empathy_connection_can_alias_personas (connection,
- individual) &&
- empathy_connection_can_group_personas (connection, individual));
-
- g_object_unref (manager);
- }
-
- item = gtk_image_menu_item_new_with_mnemonic (
- C_("Edit individual (contextual menu)", "_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);
-
- gtk_widget_set_sensitive (item, enable);
-
- g_signal_connect_swapped (item, "activate",
- G_CALLBACK (individual_edit_menu_item_activate_cb), individual);
-
- g_object_unref (contact);
-
- return item;
-}
-
-typedef struct
-{
- FolksIndividual *individual;
- EmpathyContact *contact;
- EmpathyChatroom *chatroom;
-} RoomSubMenuData;
-
-static RoomSubMenuData *
-room_sub_menu_data_new (FolksIndividual *individual,
- EmpathyContact *contact,
- EmpathyChatroom *chatroom)
-{
- RoomSubMenuData *data;
-
- data = g_slice_new0 (RoomSubMenuData);
- if (individual != NULL)
- data->individual = g_object_ref (individual);
- if (contact != NULL)
- data->contact = g_object_ref (contact);
- data->chatroom = g_object_ref (chatroom);
-
- return data;
-}
-
-static void
-room_sub_menu_data_free (RoomSubMenuData *data)
-{
- tp_clear_object (&data->individual);
- tp_clear_object (&data->contact);
- g_object_unref (data->chatroom);
- g_slice_free (RoomSubMenuData, data);
-}
-
-static void
-room_sub_menu_activate_cb (GtkWidget *item,
- RoomSubMenuData *data)
-{
- EmpathyTpChat *chat;
- EmpathyChatroomManager *mgr;
- EmpathyContact *contact = NULL;
-
- chat = empathy_chatroom_get_tp_chat (data->chatroom);
- if (chat == NULL)
- {
- /* channel was invalidated. Ignoring */
- return;
- }
-
- mgr = empathy_chatroom_manager_dup_singleton (NULL);
-
- if (data->contact != NULL)
- contact = g_object_ref (data->contact);
- else
- {
- GeeSet *personas;
- GeeIterator *iter;
-
- /* find the first of this Individual's contacts who can join this room */
- personas = folks_individual_get_personas (data->individual);
-
- iter = gee_iterable_iterator (GEE_ITERABLE (personas));
- while (gee_iterator_next (iter) && (contact == NULL))
- {
- TpfPersona *persona = gee_iterator_get (iter);
- TpContact *tp_contact;
- GList *rooms;
-
- if (empathy_folks_persona_is_interesting (FOLKS_PERSONA (persona)))
- {
- tp_contact = tpf_persona_get_contact (persona);
- if (tp_contact != NULL)
- {
- contact = empathy_contact_dup_from_tp_contact (tp_contact);
-
- rooms = empathy_chatroom_manager_get_chatrooms (mgr,
- empathy_contact_get_account (contact));
-
- if (g_list_find (rooms, data->chatroom) == NULL)
- g_clear_object (&contact);
-
- /* if contact != NULL here, we've found our match */
-
- g_list_free (rooms);
- }
- }
- g_clear_object (&persona);
- }
- g_clear_object (&iter);
- }
-
- g_object_unref (mgr);
-
- if (contact == NULL)
- {
- /* contact disappeared. Ignoring */
- goto out;
- }
-
- g_return_if_fail (EMPATHY_IS_CONTACT (contact));
-
- /* send invitation */
- empathy_tp_chat_add (chat, contact, _("Inviting you to this room"));
-
-out:
- g_object_unref (contact);
-}
-
-static GtkWidget *
-create_room_sub_menu (FolksIndividual *individual,
- EmpathyContact *contact,
- EmpathyChatroom *chatroom)
-{
- GtkWidget *item;
- RoomSubMenuData *data;
-
- item = gtk_menu_item_new_with_label (empathy_chatroom_get_name (chatroom));
- data = room_sub_menu_data_new (individual, contact, chatroom);
- g_signal_connect_data (item, "activate",
- G_CALLBACK (room_sub_menu_activate_cb), data,
- (GClosureNotify) room_sub_menu_data_free, 0);
-
- return item;
-}
-
-static GtkWidget *
-empathy_individual_invite_menu_item_new (FolksIndividual *individual,
- EmpathyContact *contact)
-{
- GtkWidget *item;
- GtkWidget *image;
- GtkWidget *room_item;
- EmpathyChatroomManager *mgr;
- GList *rooms = NULL;
- GList *names = NULL;
- GList *l;
- GtkWidget *submenu = NULL;
- /* map of chat room names to their objects; just a utility to remove
- * duplicates and to make construction of the alphabetized list easier */
- GHashTable *name_room_map;
-
- g_return_val_if_fail (FOLKS_IS_INDIVIDUAL (individual) ||
- EMPATHY_IS_CONTACT (contact),
- NULL);
-
- name_room_map = g_hash_table_new_full (g_str_hash, g_str_equal, NULL,
- g_object_unref);
-
- item = gtk_image_menu_item_new_with_mnemonic (_("_Invite to Chat Room"));
- image = gtk_image_new_from_icon_name (EMPATHY_IMAGE_GROUP_MESSAGE,
- GTK_ICON_SIZE_MENU);
- gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (item), image);
-
- mgr = empathy_chatroom_manager_dup_singleton (NULL);
-
- if (contact != NULL)
- {
- rooms = empathy_chatroom_manager_get_chatrooms (mgr,
- empathy_contact_get_account (contact));
- }
- else
- {
- GeeSet *personas;
- GeeIterator *iter;
-
- /* find the first of this Individual's contacts who can join this room */
- personas = folks_individual_get_personas (individual);
- iter = gee_iterable_iterator (GEE_ITERABLE (personas));
- while (gee_iterator_next (iter))
- {
- TpfPersona *persona = gee_iterator_get (iter);
- GList *rooms_cur;
- TpContact *tp_contact;
- EmpathyContact *contact_cur;
-
- if (empathy_folks_persona_is_interesting (FOLKS_PERSONA (persona)))
- {
- tp_contact = tpf_persona_get_contact (persona);
- if (tp_contact != NULL)
- {
- contact_cur = empathy_contact_dup_from_tp_contact (
- tp_contact);
-
- rooms_cur = empathy_chatroom_manager_get_chatrooms (mgr,
- empathy_contact_get_account (contact_cur));
- rooms = g_list_concat (rooms, rooms_cur);
-
- g_object_unref (contact_cur);
- }
- }
- g_clear_object (&persona);
- }
- g_clear_object (&iter);
- }
-
- /* alphabetize the rooms */
- for (l = rooms; l != NULL; l = g_list_next (l))
- {
- EmpathyChatroom *chatroom = l->data;
- gboolean existed;
-
- if (empathy_chatroom_get_tp_chat (chatroom) != NULL)
- {
- const gchar *name;
-
- name = empathy_chatroom_get_name (chatroom);
- existed = (g_hash_table_lookup (name_room_map, name) != NULL);
- g_hash_table_insert (name_room_map, (gpointer) name,
- g_object_ref (chatroom));
-
- /* this will take care of duplicates in rooms */
- if (!existed)
- {
- names = g_list_insert_sorted (names, (gpointer) name,
- (GCompareFunc) g_strcmp0);
- }
- }
- }
-
- for (l = names; l != NULL; l = g_list_next (l))
- {
- const gchar *name = l->data;
- EmpathyChatroom *chatroom;
-
- if (G_UNLIKELY (submenu == NULL))
- submenu = gtk_menu_new ();
-
- chatroom = g_hash_table_lookup (name_room_map, name);
- room_item = create_room_sub_menu (individual, contact, chatroom);
- gtk_menu_shell_append ((GtkMenuShell *) submenu, room_item);
- gtk_widget_show (room_item);
- }
-
- if (submenu)
- gtk_menu_item_set_submenu (GTK_MENU_ITEM (item), submenu);
- else
- gtk_widget_set_sensitive (item, FALSE);
-
- gtk_widget_show (image);
-
- g_hash_table_unref (name_room_map);
- g_object_unref (mgr);
- g_list_free (names);
- g_list_free (rooms);
-
- return item;
-}
-
-static void
-add_menu_item_activated (GtkMenuItem *item,
- TpContact *tp_contact)
-{
- GtkWidget *toplevel;
- FolksIndividual *individual;
-
- toplevel = gtk_widget_get_toplevel (GTK_WIDGET (item));
- if (!gtk_widget_is_toplevel (toplevel) || !GTK_IS_WINDOW (toplevel))
- toplevel = NULL;
-
- individual = empathy_ensure_individual_from_tp_contact (tp_contact);
-
- empathy_new_individual_dialog_show_with_individual (GTK_WINDOW (toplevel),
- individual);
-
- g_object_unref (individual);
-}
-
-static GtkWidget *
-empathy_individual_add_menu_item_new (EmpathyIndividualMenu *self,
- FolksIndividual *individual)
-{
- EmpathyIndividualMenuPriv *priv = GET_PRIV (self);
- GtkWidget *item, *image;
- GeeSet *personas;
- GeeIterator *iter;
- TpContact *to_add = NULL;
-
- /* find the first of this Individual's personas which are not in our contact
- * list. */
- personas = folks_individual_get_personas (individual);
- iter = gee_iterable_iterator (GEE_ITERABLE (personas));
- while (gee_iterator_next (iter))
- {
- TpfPersona *persona = gee_iterator_get (iter);
- TpContact *contact;
- TpConnection *conn;
-
- if (!TPF_IS_PERSONA (persona))
- goto next;
-
- contact = tpf_persona_get_contact (persona);
- if (contact == NULL)
- goto next;
-
- /* be sure to use a not channel specific contact.
- * TODO: Ideally tp-glib should do this for us (fdo #42702)*/
- if (EMPATHY_IS_INDIVIDUAL_STORE_CHANNEL (priv->store))
- {
- TpChannel *channel;
- TpChannelGroupFlags flags;
-
- channel = empathy_individual_store_channel_get_channel (
- EMPATHY_INDIVIDUAL_STORE_CHANNEL (priv->store));
-
- flags = tp_channel_group_get_flags (channel);
- if ((flags & TP_CHANNEL_GROUP_FLAG_CHANNEL_SPECIFIC_HANDLES) != 0)
- {
- /* Channel uses channel specific handles (thanks XMPP...) */
- contact = tp_channel_group_get_contact_owner (channel, contact);
-
- /* If we don't know the owner, we can't add the contact */
- if (contact == NULL)
- goto next;
- }
- }
-
- conn = tp_contact_get_connection (contact);
- if (conn == NULL)
- goto next;
-
- /* No point to try adding a contact if the CM doesn't support it */
- if (!tp_connection_get_can_change_contact_list (conn))
- goto next;
-
- /* Can't add ourself */
- if (tp_connection_get_self_contact (conn) == contact)
- goto next;
-
- if (tp_contact_get_subscribe_state (contact) == TP_SUBSCRIPTION_STATE_YES)
- goto next;
-
- g_object_unref (persona);
- to_add = contact;
- break;
-
-next:
- g_object_unref (persona);
- }
-
- g_object_unref (iter);
-
- if (to_add == NULL)
- return NULL;
-
- item = gtk_image_menu_item_new_with_mnemonic (_("_Add Contact…"));
- image = gtk_image_new_from_icon_name (GTK_STOCK_ADD, GTK_ICON_SIZE_MENU);
- gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (item), image);
-
- g_signal_connect_data (item, "activate",
- G_CALLBACK (add_menu_item_activated),
- g_object_ref (to_add), (GClosureNotify) g_object_unref, 0);
-
- return item;
-}
diff --git a/libempathy-gtk/empathy-individual-menu.h b/libempathy-gtk/empathy-individual-menu.h
deleted file mode 100644
index 34ed60a3..00000000
--- a/libempathy-gtk/empathy-individual-menu.h
+++ /dev/null
@@ -1,87 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * Copyright (C) 2008-2010 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>
- * Travis Reitter <travis.reitter@collabora.co.uk>
- */
-
-#ifndef __EMPATHY_INDIVIDUAL_MENU_H__
-#define __EMPATHY_INDIVIDUAL_MENU_H__
-
-#include <gtk/gtk.h>
-
-#include "empathy-individual-store.h"
-
-G_BEGIN_DECLS
-
-typedef enum {
- EMPATHY_INDIVIDUAL_FEATURE_NONE = 0,
- EMPATHY_INDIVIDUAL_FEATURE_CHAT = 1 << 0,
- EMPATHY_INDIVIDUAL_FEATURE_CALL = 1 << 1,
- EMPATHY_INDIVIDUAL_FEATURE_LOG = 1 << 2,
- EMPATHY_INDIVIDUAL_FEATURE_EDIT = 1 << 3,
- EMPATHY_INDIVIDUAL_FEATURE_INFO = 1 << 4,
- EMPATHY_INDIVIDUAL_FEATURE_FAVOURITE = 1 << 5,
- EMPATHY_INDIVIDUAL_FEATURE_SMS = 1 << 6,
- EMPATHY_INDIVIDUAL_FEATURE_CALL_PHONE = 1 << 7,
- EMPATHY_INDIVIDUAL_FEATURE_ADD_CONTACT = 1 << 8,
- EMPATHY_INDIVIDUAL_FEATURE_BLOCK = 1 << 9,
- EMPATHY_INDIVIDUAL_FEATURE_REMOVE = 1 << 10,
- EMPATHY_INDIVIDUAL_FEATURE_FILE_TRANSFER = 1 << 11,
-} EmpathyIndividualFeatureFlags;
-
-#define EMPATHY_TYPE_INDIVIDUAL_MENU (empathy_individual_menu_get_type ())
-#define EMPATHY_INDIVIDUAL_MENU(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), \
- EMPATHY_TYPE_INDIVIDUAL_MENU, EmpathyIndividualMenu))
-#define EMPATHY_INDIVIDUAL_MENU_CLASS(k) (G_TYPE_CHECK_CLASS_CAST ((k), \
- EMPATHY_TYPE_INDIVIDUAL_MENU, EmpathyIndividualMenuClass))
-#define EMPATHY_IS_INDIVIDUAL_MENU(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), \
- EMPATHY_TYPE_INDIVIDUAL_MENU))
-#define EMPATHY_IS_INDIVIDUAL_MENU_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), \
- EMPATHY_TYPE_INDIVIDUAL_MENU))
-#define EMPATHY_INDIVIDUAL_MENU_GET_CLASS(o) ( \
- G_TYPE_INSTANCE_GET_CLASS ((o), EMPATHY_TYPE_INDIVIDUAL_MENU, \
- EmpathyIndividualMenuClass))
-
-typedef struct {
- GtkMenu parent;
-
- /*<private>*/
- gpointer priv;
-} EmpathyIndividualMenu;
-
-typedef struct {
- GtkMenuClass parent_class;
-} EmpathyIndividualMenuClass;
-
-GType empathy_individual_menu_get_type (void) G_GNUC_CONST;
-
-GtkWidget * empathy_individual_menu_new (FolksIndividual *individual,
- const gchar *active_group,
- EmpathyIndividualFeatureFlags features,
- EmpathyIndividualStore *store);
-
-GtkWidget * empathy_individual_audio_call_menu_item_new (
- FolksIndividual *individual);
-GtkWidget * empathy_individual_video_call_menu_item_new (
- FolksIndividual *individual);
-
-G_END_DECLS
-
-#endif /* __EMPATHY_INDIVIDUAL_MENU_H__ */
-
diff --git a/libempathy-gtk/empathy-individual-store-channel.c b/libempathy-gtk/empathy-individual-store-channel.c
deleted file mode 100644
index eb0f3f59..00000000
--- a/libempathy-gtk/empathy-individual-store-channel.c
+++ /dev/null
@@ -1,376 +0,0 @@
-/*
- * Copyright (C) 2005-2007 Imendio AB
- * Copyright (C) 2007-2011 Collabora Ltd.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301 USA
- *
- * Authors: Mikael Hallendal <micke@imendio.com>
- * Martyn Russell <martyn@imendio.com>
- * Xavier Claessens <xclaesse@gmail.com>
- * Travis Reitter <travis.reitter@collabora.co.uk>
- */
-
-#include "config.h"
-#include "empathy-individual-store-channel.h"
-
-#include <tp-account-widgets/tpaw-pixbuf-utils.h>
-
-#include "empathy-utils.h"
-#include "empathy-ui-utils.h"
-#include "empathy-images.h"
-
-#define DEBUG_FLAG EMPATHY_DEBUG_CONTACT
-#include "empathy-debug.h"
-
-struct _EmpathyIndividualStoreChannelPriv
-{
- TpChannel *channel;
-
- /* TpContact => FolksIndividual
- * We keep the individuals we have added to the store so can easily remove
- * them when their TpContact leaves the channel. */
- GHashTable *individuals;
-};
-
-enum
-{
- PROP_0,
- PROP_CHANNEL,
-};
-
-
-G_DEFINE_TYPE (EmpathyIndividualStoreChannel, empathy_individual_store_channel,
- EMPATHY_TYPE_INDIVIDUAL_STORE);
-
-static void
-add_members (EmpathyIndividualStoreChannel *self,
- GPtrArray *members)
-{
- EmpathyIndividualStore *store = (EmpathyIndividualStore *) self;
- guint i;
-
- for (i = 0; i < members->len; i++)
- {
- TpContact *contact = g_ptr_array_index (members, i);
- FolksIndividual *individual;
-
- if (g_hash_table_lookup (self->priv->individuals, contact) != NULL)
- continue;
-
- individual = empathy_create_individual_from_tp_contact (contact);
- if (individual == NULL)
- return;
-
- DEBUG ("%s joined channel %s", tp_contact_get_identifier (contact),
- tp_proxy_get_object_path (self->priv->channel));
-
- individual_store_add_individual_and_connect (store, individual);
-
- /* Pass the individual reference to the hash table */
- g_hash_table_insert (self->priv->individuals, g_object_ref (contact),
- individual);
- }
-}
-
-static void
-remove_members (EmpathyIndividualStoreChannel *self,
- GPtrArray *members)
-{
- EmpathyIndividualStore *store = (EmpathyIndividualStore *) self;
- guint i;
-
- for (i = 0; i < members->len; i++)
- {
- TpContact *contact = g_ptr_array_index (members, i);
- FolksIndividual *individual;
-
- individual = g_hash_table_lookup (self->priv->individuals, contact);
- if (individual == NULL)
- continue;
-
- DEBUG ("%s left channel %s", tp_contact_get_identifier (contact),
- tp_proxy_get_object_path (self->priv->channel));
-
- individual_store_remove_individual_and_disconnect (store, individual);
-
- g_hash_table_remove (self->priv->individuals, contact);
- }
-}
-
-static void
-group_contacts_changed_cb (TpChannel *channel,
- GPtrArray *added,
- GPtrArray *removed,
- GPtrArray *local_pending,
- GPtrArray *remote_pending,
- TpContact *actor,
- GHashTable *details,
- gpointer user_data)
-{
- EmpathyIndividualStoreChannel *self = EMPATHY_INDIVIDUAL_STORE_CHANNEL (
- user_data);
-
- remove_members (self, removed);
- add_members (self, added);
-}
-
-static void
-individual_store_channel_contact_chat_state_changed (TpTextChannel *channel,
- TpContact *tp_contact,
- TpChannelChatState state,
- EmpathyIndividualStoreChannel *self)
-{
- FolksIndividual *individual;
- EmpathyContact *contact = NULL;
- GList *iters, *l;
- GdkPixbuf *pixbuf;
-
- contact = empathy_contact_dup_from_tp_contact (tp_contact);
- if (empathy_contact_is_user (contact))
- {
- /* We don't care about our own chat composing states */
- goto finally;
- }
-
- DEBUG ("Contact %s entered chat state %d",
- tp_contact_get_identifier (tp_contact), state);
-
- individual = g_hash_table_lookup (self->priv->individuals, tp_contact);
- if (individual == NULL)
- {
- g_warning ("individual is NULL");
- goto finally;
- }
-
- iters = empathy_individual_store_find_contact (
- EMPATHY_INDIVIDUAL_STORE (self), individual);
-
- if (state == TP_CHANNEL_CHAT_STATE_COMPOSING)
- {
- gchar *icon_filename =
- tpaw_filename_from_icon_name (EMPATHY_IMAGE_TYPING,
- GTK_ICON_SIZE_MENU);
-
- pixbuf = gdk_pixbuf_new_from_file (icon_filename, NULL);
- g_free (icon_filename);
- }
- else
- {
- pixbuf = empathy_individual_store_get_individual_status_icon (
- EMPATHY_INDIVIDUAL_STORE (self), individual);
- }
-
- for (l = iters; l != NULL; l = l->next)
- {
- gtk_tree_store_set (GTK_TREE_STORE (self), l->data,
- EMPATHY_INDIVIDUAL_STORE_COL_ICON_STATUS, pixbuf,
- -1);
- }
- /* Store takes it's own ref */
- g_object_unref (pixbuf);
-
- empathy_individual_store_free_iters (iters);
-
- finally:
- g_object_unref (contact);
-}
-
-static void
-individual_store_channel_set_individual_channel (
- EmpathyIndividualStoreChannel *self,
- TpChannel *channel)
-{
- GPtrArray *members;
-
- g_assert (self->priv->channel == NULL); /* construct only */
- self->priv->channel = g_object_ref (channel);
-
- /* Add initial members */
- members = tp_channel_group_dup_members_contacts (channel);
- if (members != NULL)
- {
- add_members (self, members);
- g_ptr_array_unref (members);
- }
-
- tp_g_signal_connect_object (channel, "group-contacts-changed",
- G_CALLBACK (group_contacts_changed_cb), self, 0);
-
- tp_g_signal_connect_object (channel, "contact-chat-state-changed",
- G_CALLBACK (individual_store_channel_contact_chat_state_changed),
- self, 0);
-}
-
-static void
-individual_store_channel_dispose (GObject *object)
-{
- EmpathyIndividualStoreChannel *self = EMPATHY_INDIVIDUAL_STORE_CHANNEL (
- object);
- EmpathyIndividualStore *store = EMPATHY_INDIVIDUAL_STORE (object);
- GHashTableIter iter;
- gpointer v;
-
- g_hash_table_iter_init (&iter, self->priv->individuals);
- while (g_hash_table_iter_next (&iter, NULL, &v))
- {
- FolksIndividual *individual = v;
-
- empathy_individual_store_disconnect_individual (store, individual);
- }
-
- tp_clear_pointer (&self->priv->individuals, g_hash_table_unref);
- g_clear_object (&self->priv->channel);
-
- G_OBJECT_CLASS (empathy_individual_store_channel_parent_class)->dispose (
- object);
-}
-
-static void
-individual_store_channel_get_property (GObject *object,
- guint param_id,
- GValue *value,
- GParamSpec *pspec)
-{
- EmpathyIndividualStoreChannel *self = EMPATHY_INDIVIDUAL_STORE_CHANNEL (
- object);
-
- switch (param_id)
- {
- case PROP_CHANNEL:
- g_value_set_object (value, self->priv->channel);
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, pspec);
- break;
- };
-}
-
-static void
-individual_store_channel_set_property (GObject *object,
- guint param_id,
- const GValue *value,
- GParamSpec *pspec)
-{
- switch (param_id)
- {
- case PROP_CHANNEL:
- individual_store_channel_set_individual_channel (
- EMPATHY_INDIVIDUAL_STORE_CHANNEL (object),
- g_value_get_object (value));
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, pspec);
- break;
- };
-}
-
-static void
-individual_store_channel_reload_individuals (EmpathyIndividualStore *store)
-{
- EmpathyIndividualStoreChannel *self = EMPATHY_INDIVIDUAL_STORE_CHANNEL (
- store);
- GPtrArray *members;
- GList *list, *l;
-
- /* remove all. The list returned by g_hash_table_get_keys() is valid until
- * the hash table is modified so we can't remove the contact directly in the
- * iteration. */
- members = g_ptr_array_new_with_free_func (g_object_unref);
-
- list = g_hash_table_get_keys (self->priv->individuals);
- for (l = list; l != NULL; l = g_list_next (l))
- {
- g_ptr_array_add (members, g_object_ref (l->data));
- }
-
- remove_members (self, members);
-
- g_list_free (list);
- g_ptr_array_unref (members);
-
- /* re-add members */
- members = tp_channel_group_dup_members_contacts (self->priv->channel);
- if (members == NULL)
- return;
-
- add_members (self, members);
- g_ptr_array_unref (members);
-}
-
-static gboolean
-individual_store_channel_initial_loading (EmpathyIndividualStore *store)
-{
- EmpathyIndividualStoreChannel *self = EMPATHY_INDIVIDUAL_STORE_CHANNEL (
- store);
-
- return !tp_proxy_is_prepared (self->priv->channel,
- TP_CHANNEL_FEATURE_CONTACTS);
-}
-
-static void
-empathy_individual_store_channel_class_init (
- EmpathyIndividualStoreChannelClass *klass)
-{
- GObjectClass *object_class = G_OBJECT_CLASS (klass);
- EmpathyIndividualStoreClass *store_class = EMPATHY_INDIVIDUAL_STORE_CLASS (
- klass);
-
- object_class->dispose = individual_store_channel_dispose;
- object_class->get_property = individual_store_channel_get_property;
- object_class->set_property = individual_store_channel_set_property;
-
- store_class->reload_individuals = individual_store_channel_reload_individuals;
- store_class->initial_loading = individual_store_channel_initial_loading;
-
- g_object_class_install_property (object_class,
- PROP_CHANNEL,
- g_param_spec_object ("individual-channel",
- "Individual channel",
- "Individual channel",
- TP_TYPE_CHANNEL,
- G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE));
-
- g_type_class_add_private (object_class,
- sizeof (EmpathyIndividualStoreChannelPriv));
-}
-
-static void
-empathy_individual_store_channel_init (EmpathyIndividualStoreChannel *self)
-{
- self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self,
- EMPATHY_TYPE_INDIVIDUAL_STORE_CHANNEL, EmpathyIndividualStoreChannelPriv);
-
- self->priv->individuals = g_hash_table_new_full (NULL, NULL, g_object_unref,
- g_object_unref);
-}
-
-EmpathyIndividualStoreChannel *
-empathy_individual_store_channel_new (TpChannel *channel)
-{
- g_return_val_if_fail (TP_IS_CHANNEL (channel), NULL);
-
- return g_object_new (EMPATHY_TYPE_INDIVIDUAL_STORE_CHANNEL,
- "individual-channel", channel, NULL);
-}
-
-TpChannel *
-empathy_individual_store_channel_get_channel (
- EmpathyIndividualStoreChannel *self)
-{
- g_return_val_if_fail (EMPATHY_IS_INDIVIDUAL_STORE_CHANNEL (self), FALSE);
-
- return self->priv->channel;
-}
diff --git a/libempathy-gtk/empathy-individual-store-channel.h b/libempathy-gtk/empathy-individual-store-channel.h
deleted file mode 100644
index 07cc096e..00000000
--- a/libempathy-gtk/empathy-individual-store-channel.h
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
- * Copyright (C) 2005-2007 Imendio AB
- * Copyright (C) 2007-2011 Collabora Ltd.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301 USA
- *
- * Authors: Mikael Hallendal <micke@imendio.com>
- * Martyn Russell <martyn@imendio.com>
- * Xavier Claessens <xclaesse@gmail.com>
- * Travis Reitter <travis.reitter@collabora.co.uk>
- */
-
-#ifndef __EMPATHY_INDIVIDUAL_STORE_CHANNEL_H__
-#define __EMPATHY_INDIVIDUAL_STORE_CHANNEL_H__
-
-#include <gtk/gtk.h>
-#include <telepathy-glib/telepathy-glib.h>
-
-#include "empathy-individual-store.h"
-
-G_BEGIN_DECLS
-#define EMPATHY_TYPE_INDIVIDUAL_STORE_CHANNEL (empathy_individual_store_channel_get_type ())
-#define EMPATHY_INDIVIDUAL_STORE_CHANNEL(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), EMPATHY_TYPE_INDIVIDUAL_STORE_CHANNEL, EmpathyIndividualStoreChannel))
-#define EMPATHY_INDIVIDUAL_STORE_CHANNEL_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), EMPATHY_TYPE_INDIVIDUAL_STORE_CHANNEL, EmpathyIndividualStoreChannelClass))
-#define EMPATHY_IS_INDIVIDUAL_STORE_CHANNEL(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), EMPATHY_TYPE_INDIVIDUAL_STORE_CHANNEL))
-#define EMPATHY_IS_INDIVIDUAL_STORE_CHANNEL_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), EMPATHY_TYPE_INDIVIDUAL_STORE_CHANNEL))
-#define EMPATHY_INDIVIDUAL_STORE_CHANNEL_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), EMPATHY_TYPE_INDIVIDUAL_STORE_CHANNEL, EmpathyIndividualStoreChannelClass))
-
-typedef struct _EmpathyIndividualStoreChannel EmpathyIndividualStoreChannel;
-typedef struct _EmpathyIndividualStoreChannelClass EmpathyIndividualStoreChannelClass;
-typedef struct _EmpathyIndividualStoreChannelPriv EmpathyIndividualStoreChannelPriv;
-
-struct _EmpathyIndividualStoreChannel
-{
- EmpathyIndividualStore parent;
- EmpathyIndividualStoreChannelPriv *priv;
-};
-
-struct _EmpathyIndividualStoreChannelClass
-{
- EmpathyIndividualStoreClass parent_class;
-};
-
-GType empathy_individual_store_channel_get_type (void) G_GNUC_CONST;
-
-EmpathyIndividualStoreChannel * empathy_individual_store_channel_new (
- TpChannel *channel);
-
-TpChannel * empathy_individual_store_channel_get_channel (
- EmpathyIndividualStoreChannel *store);
-
-G_END_DECLS
-#endif /* __EMPATHY_INDIVIDUAL_STORE_CHANNEL_H__ */
diff --git a/libempathy-gtk/empathy-individual-store-manager.c b/libempathy-gtk/empathy-individual-store-manager.c
deleted file mode 100644
index d080242e..00000000
--- a/libempathy-gtk/empathy-individual-store-manager.c
+++ /dev/null
@@ -1,316 +0,0 @@
-/*
- * Copyright (C) 2005-2007 Imendio AB
- * Copyright (C) 2007-2011 Collabora Ltd.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301 USA
- *
- * Authors: Mikael Hallendal <micke@imendio.com>
- * Martyn Russell <martyn@imendio.com>
- * Xavier Claessens <xclaesse@gmail.com>
- * Travis Reitter <travis.reitter@collabora.co.uk>
- */
-
-#include "config.h"
-#include "empathy-individual-store-manager.h"
-
-#define DEBUG_FLAG EMPATHY_DEBUG_CONTACT
-#include "empathy-debug.h"
-
-struct _EmpathyIndividualStoreManagerPriv
-{
- EmpathyIndividualManager *manager;
- gboolean setup_idle_id;
-};
-
-enum
-{
- PROP_0,
- PROP_INDIVIDUAL_MANAGER,
-};
-
-
-G_DEFINE_TYPE (EmpathyIndividualStoreManager, empathy_individual_store_manager,
- EMPATHY_TYPE_INDIVIDUAL_STORE);
-
-static void
-individual_store_manager_members_changed_cb (EmpathyIndividualManager *manager,
- const gchar *message,
- GList *added,
- GList *removed,
- guint reason,
- EmpathyIndividualStoreManager *self)
-{
- GList *l;
- EmpathyIndividualStore *store = EMPATHY_INDIVIDUAL_STORE (self);
-
- for (l = removed; l; l = l->next)
- {
- DEBUG ("Individual %s (%s) %s",
- folks_individual_get_id (l->data),
- folks_alias_details_get_alias (FOLKS_ALIAS_DETAILS (l->data)),
- "removed");
-
- individual_store_remove_individual_and_disconnect (store, l->data);
- }
-
- for (l = added; l; l = l->next)
- {
- DEBUG ("Individual %s (%s) %s", folks_individual_get_id (l->data),
- folks_alias_details_get_alias (FOLKS_ALIAS_DETAILS (l->data)),
- "added");
-
- individual_store_add_individual_and_connect (store, l->data);
- }
-}
-
-static void
-individual_store_manager_groups_changed_cb (EmpathyIndividualManager *manager,
- FolksIndividual *individual,
- gchar *group,
- gboolean is_member,
- EmpathyIndividualStoreManager *self)
-{
- EmpathyIndividualStore *store = EMPATHY_INDIVIDUAL_STORE (self);
-
- DEBUG ("Updating groups for individual %s (%s)",
- folks_individual_get_id (individual),
- folks_alias_details_get_alias (FOLKS_ALIAS_DETAILS (individual)));
-
- /* 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.
- */
- empathy_individual_store_refresh_individual (store, individual);
-}
-
-static gboolean
-individual_store_manager_manager_setup (gpointer user_data)
-{
- EmpathyIndividualStoreManager *self = user_data;
- GList *individuals;
-
- /* Signal connection. */
-
- DEBUG ("handling individual renames unimplemented");
-
- g_signal_connect (self->priv->manager,
- "members-changed",
- G_CALLBACK (individual_store_manager_members_changed_cb), self);
-
- g_signal_connect (self->priv->manager,
- "groups-changed",
- G_CALLBACK (individual_store_manager_groups_changed_cb), self);
-
- /* Add contacts already created. */
- individuals = empathy_individual_manager_get_members (self->priv->manager);
- if (individuals != NULL)
- {
- individual_store_manager_members_changed_cb (self->priv->manager, "initial add",
- individuals, NULL, 0, self);
- g_list_free (individuals);
- }
-
- self->priv->setup_idle_id = 0;
- return FALSE;
-}
-
-static void
-individual_store_manager_set_individual_manager (
- EmpathyIndividualStoreManager *self,
- EmpathyIndividualManager *manager)
-{
- g_assert (self->priv->manager == NULL); /* construct only */
- self->priv->manager = g_object_ref (manager);
-
- /* Let a chance to have all properties set before populating */
- self->priv->setup_idle_id = g_idle_add (
- individual_store_manager_manager_setup, self);
-}
-
-static void
-individual_store_manager_member_renamed_cb (EmpathyIndividualManager *manager,
- FolksIndividual *old_individual,
- FolksIndividual *new_individual,
- guint reason,
- const gchar *message,
- EmpathyIndividualStoreManager *self)
-{
- EmpathyIndividualStore *store = EMPATHY_INDIVIDUAL_STORE (self);
-
- DEBUG ("Individual %s (%s) renamed to %s",
- folks_individual_get_id (old_individual),
- folks_alias_details_get_alias (FOLKS_ALIAS_DETAILS (old_individual)),
- folks_individual_get_id (new_individual));
-
- /* remove old contact */
- individual_store_remove_individual_and_disconnect (store, old_individual);
-
- /* add the new contact */
- individual_store_add_individual_and_connect (store, new_individual);
-}
-
-static void
-individual_store_manager_dispose (GObject *object)
-{
- EmpathyIndividualStoreManager *self = EMPATHY_INDIVIDUAL_STORE_MANAGER (
- object);
- EmpathyIndividualStore *store = EMPATHY_INDIVIDUAL_STORE (object);
- GList *individuals, *l;
-
- individuals = empathy_individual_manager_get_members (self->priv->manager);
- for (l = individuals; l; l = l->next)
- {
- empathy_individual_store_disconnect_individual (store,
- FOLKS_INDIVIDUAL (l->data));
- }
- tp_clear_pointer (&individuals, g_list_free);
-
- if (self->priv->manager != NULL)
- {
- g_signal_handlers_disconnect_by_func (self->priv->manager,
- G_CALLBACK (individual_store_manager_member_renamed_cb), object);
- g_signal_handlers_disconnect_by_func (self->priv->manager,
- G_CALLBACK (individual_store_manager_members_changed_cb), object);
- g_signal_handlers_disconnect_by_func (self->priv->manager,
- G_CALLBACK (individual_store_manager_groups_changed_cb), object);
- g_clear_object (&self->priv->manager);
- }
-
- if (self->priv->setup_idle_id != 0)
- {
- g_source_remove (self->priv->setup_idle_id);
- self->priv->setup_idle_id = 0;
- }
-
- G_OBJECT_CLASS (empathy_individual_store_manager_parent_class)->dispose (
- object);
-}
-
-static void
-individual_store_manager_get_property (GObject *object,
- guint param_id,
- GValue *value,
- GParamSpec *pspec)
-{
- EmpathyIndividualStoreManager *self = EMPATHY_INDIVIDUAL_STORE_MANAGER (
- object);
-
- switch (param_id)
- {
- case PROP_INDIVIDUAL_MANAGER:
- g_value_set_object (value, self->priv->manager);
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, pspec);
- break;
- };
-}
-
-static void
-individual_store_manager_set_property (GObject *object,
- guint param_id,
- const GValue *value,
- GParamSpec *pspec)
-{
- switch (param_id)
- {
- case PROP_INDIVIDUAL_MANAGER:
- individual_store_manager_set_individual_manager (
- EMPATHY_INDIVIDUAL_STORE_MANAGER (object),
- g_value_get_object (value));
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, pspec);
- break;
- };
-}
-
-static void
-individual_store_manager_reload_individuals (EmpathyIndividualStore *store)
-{
- EmpathyIndividualStoreManager *self = EMPATHY_INDIVIDUAL_STORE_MANAGER (
- store);
- GList *contacts;
-
- contacts = empathy_individual_manager_get_members (self->priv->manager);
-
- individual_store_manager_members_changed_cb (self->priv->manager,
- "re-adding members: toggled group visibility",
- contacts, NULL, 0, self);
-
- g_list_free (contacts);
-}
-
-static gboolean
-individual_store_manager_initial_loading (EmpathyIndividualStore *store)
-{
- EmpathyIndividualStoreManager *self = EMPATHY_INDIVIDUAL_STORE_MANAGER (
- store);
-
- return self->priv->setup_idle_id != 0;
-}
-
-static void
-empathy_individual_store_manager_class_init (
- EmpathyIndividualStoreManagerClass *klass)
-{
- GObjectClass *object_class = G_OBJECT_CLASS (klass);
- EmpathyIndividualStoreClass *store_class = EMPATHY_INDIVIDUAL_STORE_CLASS (
- klass);
-
- object_class->dispose = individual_store_manager_dispose;
- object_class->get_property = individual_store_manager_get_property;
- object_class->set_property = individual_store_manager_set_property;
-
- store_class->reload_individuals = individual_store_manager_reload_individuals;
- store_class->initial_loading = individual_store_manager_initial_loading;
-
- g_object_class_install_property (object_class,
- PROP_INDIVIDUAL_MANAGER,
- g_param_spec_object ("individual-manager",
- "Individual manager",
- "Individual manager",
- EMPATHY_TYPE_INDIVIDUAL_MANAGER,
- G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE));
-
- g_type_class_add_private (object_class,
- sizeof (EmpathyIndividualStoreManagerPriv));
-}
-
-static void
-empathy_individual_store_manager_init (EmpathyIndividualStoreManager *self)
-{
- self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self,
- EMPATHY_TYPE_INDIVIDUAL_STORE_MANAGER, EmpathyIndividualStoreManagerPriv);
-}
-
-EmpathyIndividualStoreManager *
-empathy_individual_store_manager_new (EmpathyIndividualManager *manager)
-{
- g_return_val_if_fail (EMPATHY_IS_INDIVIDUAL_MANAGER (manager), NULL);
-
- return g_object_new (EMPATHY_TYPE_INDIVIDUAL_STORE_MANAGER,
- "individual-manager", manager, NULL);
-}
-
-EmpathyIndividualManager *
-empathy_individual_store_manager_get_manager (
- EmpathyIndividualStoreManager *self)
-{
- g_return_val_if_fail (EMPATHY_IS_INDIVIDUAL_STORE_MANAGER (self), FALSE);
-
- return self->priv->manager;
-}
diff --git a/libempathy-gtk/empathy-individual-store-manager.h b/libempathy-gtk/empathy-individual-store-manager.h
deleted file mode 100644
index d442e7ca..00000000
--- a/libempathy-gtk/empathy-individual-store-manager.h
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
- * Copyright (C) 2005-2007 Imendio AB
- * Copyright (C) 2007-2011 Collabora Ltd.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301 USA
- *
- * Authors: Mikael Hallendal <micke@imendio.com>
- * Martyn Russell <martyn@imendio.com>
- * Xavier Claessens <xclaesse@gmail.com>
- * Travis Reitter <travis.reitter@collabora.co.uk>
- */
-
-#ifndef __EMPATHY_INDIVIDUAL_STORE_MANAGER_H__
-#define __EMPATHY_INDIVIDUAL_STORE_MANAGER_H__
-
-#include <glib-object.h>
-
-#include "empathy-individual-manager.h"
-#include "empathy-individual-store.h"
-
-G_BEGIN_DECLS
-#define EMPATHY_TYPE_INDIVIDUAL_STORE_MANAGER (empathy_individual_store_manager_get_type ())
-#define EMPATHY_INDIVIDUAL_STORE_MANAGER(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), EMPATHY_TYPE_INDIVIDUAL_STORE_MANAGER, EmpathyIndividualStoreManager))
-#define EMPATHY_INDIVIDUAL_STORE_MANAGER_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), EMPATHY_TYPE_INDIVIDUAL_STORE_MANAGER, EmpathyIndividualStoreManagerClass))
-#define EMPATHY_IS_INDIVIDUAL_STORE_MANAGER(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), EMPATHY_TYPE_INDIVIDUAL_STORE_MANAGER))
-#define EMPATHY_IS_INDIVIDUAL_STORE_MANAGER_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), EMPATHY_TYPE_INDIVIDUAL_STORE_MANAGER))
-#define EMPATHY_INDIVIDUAL_STORE_MANAGER_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), EMPATHY_TYPE_INDIVIDUAL_STORE_MANAGER, EmpathyIndividualStoreManagerClass))
-
-typedef struct _EmpathyIndividualStoreManager EmpathyIndividualStoreManager;
-typedef struct _EmpathyIndividualStoreManagerClass EmpathyIndividualStoreManagerClass;
-typedef struct _EmpathyIndividualStoreManagerPriv EmpathyIndividualStoreManagerPriv;
-
-struct _EmpathyIndividualStoreManager
-{
- EmpathyIndividualStore parent;
- EmpathyIndividualStoreManagerPriv *priv;
-};
-
-struct _EmpathyIndividualStoreManagerClass
-{
- EmpathyIndividualStoreClass parent_class;
-};
-
-GType empathy_individual_store_manager_get_type (void) G_GNUC_CONST;
-
-EmpathyIndividualStoreManager *empathy_individual_store_manager_new (
- EmpathyIndividualManager *manager);
-
-EmpathyIndividualManager *empathy_individual_store_manager_get_manager (
- EmpathyIndividualStoreManager *store);
-
-G_END_DECLS
-#endif /* __EMPATHY_INDIVIDUAL_STORE_MANAGER_H__ */
diff --git a/libempathy-gtk/empathy-individual-store.c b/libempathy-gtk/empathy-individual-store.c
deleted file mode 100644
index 9b685ee5..00000000
--- a/libempathy-gtk/empathy-individual-store.c
+++ /dev/null
@@ -1,1709 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * Copyright (C) 2005-2007 Imendio AB
- * Copyright (C) 2007-2010 Collabora Ltd.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301 USA
- *
- * Authors: Mikael Hallendal <micke@imendio.com>
- * Martyn Russell <martyn@imendio.com>
- * Xavier Claessens <xclaesse@gmail.com>
- * Travis Reitter <travis.reitter@collabora.co.uk>
- */
-
-#include "config.h"
-#include "empathy-individual-store.h"
-
-#include <glib/gi18n-lib.h>
-#include <tp-account-widgets/tpaw-utils.h>
-
-#include "empathy-gtk-enum-types.h"
-#include "empathy-ui-utils.h"
-#include "empathy-utils.h"
-
-#define DEBUG_FLAG EMPATHY_DEBUG_CONTACT
-#include "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
-
-struct _EmpathyIndividualStorePriv
-{
- gboolean show_avatars;
- gboolean show_groups;
- gboolean is_compact;
- gboolean show_protocols;
- EmpathyIndividualStoreSort sort_criterium;
- guint inhibit_active;
- gboolean dispose_has_run;
- GHashTable *status_icons;
- /* List of owned GCancellables for each pending avatar load operation */
- GList *avatar_cancellables;
- /* Hash: FolksIndividual* -> GQueue (GtkTreeIter *) */
- GHashTable *folks_individual_cache;
- /* Hash: char *groupname -> GtkTreeIter * */
- GHashTable *empathy_group_cache;
- gboolean show_active;
-};
-
-typedef struct
-{
- EmpathyIndividualStore *self;
- FolksIndividual *individual;
- gboolean remove;
- guint timeout;
-} ShowActiveData;
-
-enum
-{
- PROP_0,
- PROP_SHOW_AVATARS,
- PROP_SHOW_PROTOCOLS,
- PROP_SHOW_GROUPS,
- PROP_IS_COMPACT,
- PROP_SORT_CRITERIUM
-};
-
-/* prototypes to break cycles */
-static void individual_store_contact_update (EmpathyIndividualStore *self,
- FolksIndividual *individual);
-
-G_DEFINE_TYPE (EmpathyIndividualStore, empathy_individual_store,
- GTK_TYPE_TREE_STORE);
-
-static void
-add_individual_to_store (GtkTreeStore *store,
- GtkTreeIter *iter,
- GtkTreeIter *parent,
- FolksIndividual *individual)
-{
- EmpathyIndividualStore *self = EMPATHY_INDIVIDUAL_STORE (store);
- gboolean can_audio_call, can_video_call;
- const gchar * const *types;
- GQueue *queue;
-
- empathy_individual_can_audio_video_call (individual, &can_audio_call,
- &can_video_call, NULL);
-
- types = empathy_individual_get_client_types (individual);
-
- gtk_tree_store_insert_with_values (store, iter, parent, 0,
- EMPATHY_INDIVIDUAL_STORE_COL_NAME,
- folks_alias_details_get_alias (FOLKS_ALIAS_DETAILS (individual)),
- EMPATHY_INDIVIDUAL_STORE_COL_INDIVIDUAL, individual,
- EMPATHY_INDIVIDUAL_STORE_COL_IS_GROUP, FALSE,
- EMPATHY_INDIVIDUAL_STORE_COL_IS_SEPARATOR, FALSE,
- EMPATHY_INDIVIDUAL_STORE_COL_CAN_AUDIO_CALL, can_audio_call,
- EMPATHY_INDIVIDUAL_STORE_COL_CAN_VIDEO_CALL, can_video_call,
- EMPATHY_INDIVIDUAL_STORE_COL_CLIENT_TYPES, types,
- -1);
-
- queue = g_hash_table_lookup (self->priv->folks_individual_cache, individual);
- if (queue)
- {
- g_queue_push_tail (queue, gtk_tree_iter_copy (iter));
- }
- else
- {
- queue = g_queue_new ();
- g_queue_push_tail (queue, gtk_tree_iter_copy (iter));
- g_hash_table_insert (self->priv->folks_individual_cache, individual,
- queue);
- }
-}
-
-static void
-individual_store_get_group (EmpathyIndividualStore *self,
- const gchar *name,
- GtkTreeIter *iter_group_to_set,
- GtkTreeIter *iter_separator_to_set,
- gboolean *created,
- gboolean is_fake_group)
-{
- GtkTreeModel *model;
- GtkTreeIter iter_group;
- GtkTreeIter iter_separator;
- GtkTreeIter *iter;
-
- model = GTK_TREE_MODEL (self);
- iter = g_hash_table_lookup (self->priv->empathy_group_cache, name);
-
- if (iter == NULL)
- {
- if (created)
- *created = TRUE;
-
- gtk_tree_store_insert_with_values (GTK_TREE_STORE (self), &iter_group,
- NULL, 0,
- EMPATHY_INDIVIDUAL_STORE_COL_ICON_STATUS, NULL,
- EMPATHY_INDIVIDUAL_STORE_COL_NAME, name,
- EMPATHY_INDIVIDUAL_STORE_COL_IS_GROUP, TRUE,
- EMPATHY_INDIVIDUAL_STORE_COL_IS_ACTIVE, FALSE,
- EMPATHY_INDIVIDUAL_STORE_COL_IS_SEPARATOR, FALSE,
- EMPATHY_INDIVIDUAL_STORE_COL_IS_FAKE_GROUP, is_fake_group,
- -1);
-
- g_hash_table_insert (self->priv->empathy_group_cache, g_strdup (name),
- gtk_tree_iter_copy (&iter_group));
-
- if (iter_group_to_set)
- *iter_group_to_set = iter_group;
-
- gtk_tree_store_insert_with_values (GTK_TREE_STORE (self), &iter_separator,
- &iter_group, 0,
- EMPATHY_INDIVIDUAL_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 = *iter;
-
- iter_separator = *iter;
-
- if (gtk_tree_model_iter_next (model, &iter_separator))
- {
- gboolean is_separator;
-
- gtk_tree_model_get (model, &iter_separator,
- EMPATHY_INDIVIDUAL_STORE_COL_IS_SEPARATOR, &is_separator, -1);
-
- if (is_separator && iter_separator_to_set)
- *iter_separator_to_set = iter_separator;
- }
- }
-}
-
-GList *
-/* (transfer full) free with empathy_individual_store_free_iters() */
-empathy_individual_store_find_contact (EmpathyIndividualStore *self,
- FolksIndividual *individual)
-{
- GQueue *row_refs_queue;
- GList *i;
- GList *iters_list = NULL;
-
- row_refs_queue = g_hash_table_lookup (self->priv->folks_individual_cache,
- individual);
- if (!row_refs_queue)
- return NULL;
-
- for (i = g_queue_peek_head_link (row_refs_queue) ; i != NULL ; i = i->next)
- {
- GtkTreeIter *iter = i->data;
-
- iters_list = g_list_prepend (iters_list, gtk_tree_iter_copy (iter));
- }
-
- return iters_list;
-}
-
-void
-empathy_individual_store_free_iters (GList *iters)
-{
- g_list_foreach (iters, (GFunc) gtk_tree_iter_free, NULL);
- g_list_free (iters);
-}
-
-void
-empathy_individual_store_remove_individual (EmpathyIndividualStore *self,
- FolksIndividual *individual)
-{
- GtkTreeModel *model;
- GQueue *row_refs;
- GList *l;
-
- row_refs = g_hash_table_lookup (self->priv->folks_individual_cache,
- individual);
- if (!row_refs)
- return;
-
- /* Clean up model */
- model = GTK_TREE_MODEL (self);
-
- for (l = g_queue_peek_head_link (row_refs); l; l = l->next)
- {
- GtkTreeIter *iter = l->data;
- 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, iter) &&
- gtk_tree_model_iter_n_children (model, &parent) <= 2)
- {
- gchar *group_name;
- gtk_tree_model_get (model, &parent,
- EMPATHY_INDIVIDUAL_STORE_COL_NAME, &group_name,
- -1);
- g_hash_table_remove (self->priv->empathy_group_cache,
- group_name);
- gtk_tree_store_remove (GTK_TREE_STORE (self), &parent);
- }
- else
- {
- gtk_tree_store_remove (GTK_TREE_STORE (self), iter);
- }
- }
-
- g_hash_table_remove (self->priv->folks_individual_cache, individual);
-}
-
-void
-empathy_individual_store_add_individual (EmpathyIndividualStore *self,
- FolksIndividual *individual)
-{
- GtkTreeIter iter, iter_group;
- GeeSet *group_set = NULL;
- gboolean grouped = FALSE;
-
- if (TPAW_STR_EMPTY (folks_alias_details_get_alias (
- FOLKS_ALIAS_DETAILS (individual))))
- return;
-
- if (!self->priv->show_groups)
- {
- /* add our individual to the toplevel of the store */
- add_individual_to_store (GTK_TREE_STORE (self), &iter, NULL,
- individual);
-
- goto finally;
- }
-
- group_set = folks_group_details_get_groups (
- FOLKS_GROUP_DETAILS (individual));
-
- if (gee_collection_get_size (GEE_COLLECTION (group_set)) > 0)
- {
- /* add the contact to its groups */
- GeeIterator *group_iter =
- gee_iterable_iterator (GEE_ITERABLE (group_set));
-
- while (group_iter != NULL && gee_iterator_next (group_iter))
- {
- gchar *group_name = gee_iterator_get (group_iter);
-
- individual_store_get_group (self, group_name, &iter_group,
- NULL, NULL, FALSE);
-
- add_individual_to_store (GTK_TREE_STORE (self), &iter, &iter_group,
- individual);
- grouped = TRUE;
-
- g_free (group_name);
- }
-
- g_clear_object (&group_iter);
- }
- else
- {
- /* fall-back groups, in case there are no named groups */
- EmpathyContact *contact;
- TpConnection *connection;
- const gchar *protocol_name = NULL;
-
- contact = empathy_contact_dup_from_folks_individual (individual);
- if (contact != NULL)
- {
- connection = empathy_contact_get_connection (contact);
- protocol_name = tp_connection_get_protocol_name (connection);
- }
-
- if (!tp_strdiff (protocol_name, "local-xmpp"))
- {
- /* these are People Nearby */
- individual_store_get_group (self,
- EMPATHY_INDIVIDUAL_STORE_PEOPLE_NEARBY, &iter_group, NULL, NULL,
- TRUE);
- add_individual_to_store (GTK_TREE_STORE (self), &iter, &iter_group,
- individual);
- grouped = TRUE;
- }
-
- g_clear_object (&contact);
- }
-
- if (folks_favourite_details_get_is_favourite (
- FOLKS_FAVOURITE_DETAILS (individual)))
- {
- /* Add contact to the fake 'Favorites' group */
- individual_store_get_group (self, EMPATHY_INDIVIDUAL_STORE_FAVORITE,
- &iter_group, NULL, NULL, TRUE);
-
- add_individual_to_store (GTK_TREE_STORE (self), &iter, &iter_group,
- individual);
- grouped = TRUE;
- }
-
- if (!grouped)
- {
- /* Else add the contact to 'Ungrouped' */
- individual_store_get_group (self,
- EMPATHY_INDIVIDUAL_STORE_UNGROUPED,
- &iter_group, NULL, NULL, TRUE);
- add_individual_to_store (GTK_TREE_STORE (self), &iter, &iter_group,
- individual);
- }
-
-
-finally:
- individual_store_contact_update (self, individual);
-}
-
-static void
-individual_store_contact_set_active (EmpathyIndividualStore *self,
- FolksIndividual *individual,
- gboolean active,
- gboolean set_changed)
-{
- GtkTreeModel *model;
- GList *iters, *l;
-
- model = GTK_TREE_MODEL (self);
-
- iters = empathy_individual_store_find_contact (self, individual);
- for (l = iters; l; l = l->next)
- {
- GtkTreePath *path;
-
- gtk_tree_store_set (GTK_TREE_STORE (self), l->data,
- EMPATHY_INDIVIDUAL_STORE_COL_IS_ACTIVE, active,
- -1);
-
- 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);
- }
- }
-
- empathy_individual_store_free_iters (iters);
-}
-
-static void individual_store_contact_active_free (ShowActiveData *data);
-
-static void
-individual_store_contact_active_invalidated (ShowActiveData *data,
- GObject *old_object)
-{
- /* Remove the timeout and free the struct, since the individual or individual
- * store has disappeared. */
- g_source_remove (data->timeout);
-
- if (old_object == (GObject *) data->self)
- data->self = NULL;
- else if (old_object == (GObject *) data->individual)
- data->individual = NULL;
- else
- g_assert_not_reached ();
-
- individual_store_contact_active_free (data);
-}
-
-static ShowActiveData *
-individual_store_contact_active_new (EmpathyIndividualStore *self,
- FolksIndividual *individual,
- gboolean remove_)
-{
- ShowActiveData *data;
-
- data = g_slice_new0 (ShowActiveData);
-
- /* We don't actually want to force either the IndividualStore or the
- * Individual to stay alive, since the user could quit Empathy or disable
- * the account before the contact_active timeout is fired. */
- g_object_weak_ref (G_OBJECT (self),
- (GWeakNotify) individual_store_contact_active_invalidated, data);
- g_object_weak_ref (G_OBJECT (individual),
- (GWeakNotify) individual_store_contact_active_invalidated, data);
-
- data->self = self;
- data->individual = individual;
- data->remove = remove_;
- data->timeout = 0;
-
- return data;
-}
-
-static void
-individual_store_contact_active_free (ShowActiveData *data)
-{
- if (data->self != NULL)
- {
- g_object_weak_unref (G_OBJECT (data->self),
- (GWeakNotify) individual_store_contact_active_invalidated, data);
- }
-
- if (data->individual != NULL)
- {
- g_object_weak_unref (G_OBJECT (data->individual),
- (GWeakNotify) individual_store_contact_active_invalidated, data);
- }
-
- g_slice_free (ShowActiveData, data);
-}
-
-static gboolean
-individual_store_contact_active_cb (ShowActiveData *data)
-{
- if (data->remove)
- {
- DEBUG ("Individual'%s' active timeout, removing item",
- folks_alias_details_get_alias (
- FOLKS_ALIAS_DETAILS (data->individual)));
- empathy_individual_store_remove_individual (data->self, data->individual);
- }
-
- individual_store_contact_set_active (data->self,
- data->individual, FALSE, TRUE);
-
- individual_store_contact_active_free (data);
-
- return FALSE;
-}
-
-typedef struct {
- EmpathyIndividualStore *store; /* weak */
- GCancellable *cancellable; /* owned */
-} LoadAvatarData;
-
-static void
-individual_avatar_pixbuf_received_cb (FolksIndividual *individual,
- GAsyncResult *result,
- LoadAvatarData *data)
-{
- GError *error = NULL;
- GdkPixbuf *pixbuf;
-
- pixbuf = empathy_pixbuf_avatar_from_individual_scaled_finish (individual,
- result, &error);
-
- if (error != NULL)
- {
- /* No need to display an error if the individal just doesn't have an
- * avatar */
- if (!g_error_matches (error, G_IO_ERROR, G_IO_ERROR_NOT_FOUND))
- {
- DEBUG ("failed to retrieve pixbuf for individual %s: %s",
- folks_alias_details_get_alias (FOLKS_ALIAS_DETAILS (individual)),
- error->message);
- }
-
- g_clear_error (&error);
- }
- else if (data->store != NULL)
- {
- GList *iters, *l;
-
- iters = empathy_individual_store_find_contact (data->store, individual);
- for (l = iters; l; l = l->next)
- {
- gtk_tree_store_set (GTK_TREE_STORE (data->store), l->data,
- EMPATHY_INDIVIDUAL_STORE_COL_PIXBUF_AVATAR, pixbuf,
- -1);
- }
-
- empathy_individual_store_free_iters (iters);
- }
-
- /* Free things */
- if (data->store != NULL)
- {
- g_object_remove_weak_pointer (G_OBJECT (data->store),
- (gpointer *) &data->store);
- data->store->priv->avatar_cancellables = g_list_remove (
- data->store->priv->avatar_cancellables, data->cancellable);
- }
-
- tp_clear_object (&pixbuf);
- g_object_unref (data->cancellable);
- g_slice_free (LoadAvatarData, data);
-}
-
-static void
-individual_store_contact_update (EmpathyIndividualStore *self,
- FolksIndividual *individual)
-{
- ShowActiveData *data;
- GtkTreeModel *model;
- GList *iters, *l;
- gboolean 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_status;
- LoadAvatarData *load_avatar_data;
-
- model = GTK_TREE_MODEL (self);
-
- iters = empathy_individual_store_find_contact (self, individual);
- if (!iters)
- {
- in_list = FALSE;
- }
- else
- {
- in_list = TRUE;
- }
-
- /* Get online state now. */
- now_online = folks_presence_details_is_online (
- FOLKS_PRESENCE_DETAILS (individual));
-
- if (!in_list)
- {
- DEBUG ("Individual'%s' in list:NO, should be:YES",
- folks_alias_details_get_alias (FOLKS_ALIAS_DETAILS (individual)));
-
- empathy_individual_store_add_individual (self, individual);
-
- if (self->priv->show_active)
- {
- do_set_active = TRUE;
- }
- }
- else
- {
- /* Get online state before. */
- if (iters && g_list_length (iters) > 0)
- {
- gtk_tree_model_get (model, iters->data,
- EMPATHY_INDIVIDUAL_STORE_COL_IS_ONLINE, &was_online, -1);
- }
-
- /* Is this really an update or an online/offline. */
- if (self->priv->show_active)
- {
- if (was_online != now_online)
- {
- do_set_active = TRUE;
- do_set_refresh = TRUE;
- }
- else
- {
- /* Was TRUE for presence updates. */
- /* do_set_active = FALSE; */
- do_set_refresh = TRUE;
- }
- }
-
- set_model = TRUE;
- }
-
- if (self->priv->show_avatars && !self->priv->is_compact)
- {
- show_avatar = TRUE;
- }
-
- /* Load the avatar asynchronously */
- load_avatar_data = g_slice_new (LoadAvatarData);
- load_avatar_data->store = self;
- g_object_add_weak_pointer (G_OBJECT (self),
- (gpointer *) &load_avatar_data->store);
- load_avatar_data->cancellable = g_cancellable_new ();
-
- self->priv->avatar_cancellables = g_list_prepend (
- self->priv->avatar_cancellables, load_avatar_data->cancellable);
-
- empathy_pixbuf_avatar_from_individual_scaled_async (individual, 32, 32,
- load_avatar_data->cancellable,
- (GAsyncReadyCallback) individual_avatar_pixbuf_received_cb,
- load_avatar_data);
-
- pixbuf_status =
- empathy_individual_store_get_individual_status_icon (self, individual);
-
- for (l = iters; l && set_model; l = l->next)
- {
- gboolean can_audio_call, can_video_call;
- const gchar * const *types;
-
- empathy_individual_can_audio_video_call (individual, &can_audio_call,
- &can_video_call, NULL);
-
- types = empathy_individual_get_client_types (individual);
-
- gtk_tree_store_set (GTK_TREE_STORE (self), l->data,
- EMPATHY_INDIVIDUAL_STORE_COL_ICON_STATUS, pixbuf_status,
- EMPATHY_INDIVIDUAL_STORE_COL_PIXBUF_AVATAR_VISIBLE, show_avatar,
- EMPATHY_INDIVIDUAL_STORE_COL_NAME,
- folks_alias_details_get_alias (FOLKS_ALIAS_DETAILS (individual)),
- EMPATHY_INDIVIDUAL_STORE_COL_PRESENCE_TYPE,
- folks_presence_details_get_presence_type (
- FOLKS_PRESENCE_DETAILS (individual)),
- EMPATHY_INDIVIDUAL_STORE_COL_STATUS,
- folks_presence_details_get_presence_message (
- FOLKS_PRESENCE_DETAILS (individual)),
- EMPATHY_INDIVIDUAL_STORE_COL_COMPACT, self->priv->is_compact,
- EMPATHY_INDIVIDUAL_STORE_COL_IS_GROUP, FALSE,
- EMPATHY_INDIVIDUAL_STORE_COL_IS_ONLINE, now_online,
- EMPATHY_INDIVIDUAL_STORE_COL_IS_SEPARATOR, FALSE,
- EMPATHY_INDIVIDUAL_STORE_COL_CAN_AUDIO_CALL, can_audio_call,
- EMPATHY_INDIVIDUAL_STORE_COL_CAN_VIDEO_CALL, can_video_call,
- EMPATHY_INDIVIDUAL_STORE_COL_CLIENT_TYPES, types,
- -1);
- }
-
- if (self->priv->show_active && do_set_active)
- {
- individual_store_contact_set_active (self, individual, do_set_active,
- do_set_refresh);
-
- if (do_set_active)
- {
- data =
- individual_store_contact_active_new (self, individual,
- do_remove);
- data->timeout = g_timeout_add_seconds (ACTIVE_USER_SHOW_TIME,
- (GSourceFunc) individual_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.
- */
- empathy_individual_store_free_iters (iters);
-}
-
-static void
-individual_store_individual_updated_cb (FolksIndividual *individual,
- GParamSpec *param,
- EmpathyIndividualStore *self)
-{
- individual_store_contact_update (self, individual);
-}
-
-static void
-individual_store_contact_updated_cb (EmpathyContact *contact,
- GParamSpec *pspec,
- EmpathyIndividualStore *self)
-{
- FolksIndividual *individual;
-
- individual = g_object_get_data (G_OBJECT (contact), "individual");
- if (individual == NULL)
- return;
-
- individual_store_contact_update (self, individual);
-}
-
-static void
-individual_personas_changed_cb (FolksIndividual *individual,
- GeeSet *added,
- GeeSet *removed,
- EmpathyIndividualStore *self)
-{
- GeeIterator *iter;
-
- iter = gee_iterable_iterator (GEE_ITERABLE (removed));
- /* FIXME: libfolks hasn't grown capabilities support yet, so we have to go
- * through the EmpathyContacts for them. */
- while (gee_iterator_next (iter))
- {
- TpfPersona *persona = gee_iterator_get (iter);
- TpContact *tp_contact;
- EmpathyContact *contact;
-
- if (TPF_IS_PERSONA (persona))
- {
- tp_contact = tpf_persona_get_contact (persona);
- if (tp_contact != NULL)
- {
- contact = empathy_contact_dup_from_tp_contact (tp_contact);
- empathy_contact_set_persona (contact, FOLKS_PERSONA (persona));
-
- g_object_set_data (G_OBJECT (contact), "individual", NULL);
- g_signal_handlers_disconnect_by_func (contact,
- (GCallback) individual_store_contact_updated_cb, self);
-
- g_object_unref (contact);
- }
- }
-
- g_clear_object (&persona);
- }
- g_clear_object (&iter);
-
- iter = gee_iterable_iterator (GEE_ITERABLE (added));
- while (gee_iterator_next (iter))
- {
- TpfPersona *persona = gee_iterator_get (iter);
- TpContact *tp_contact;
- EmpathyContact *contact;
-
- if (TPF_IS_PERSONA (persona))
- {
- tp_contact = tpf_persona_get_contact (persona);
- if (tp_contact != NULL)
- {
- contact = empathy_contact_dup_from_tp_contact (tp_contact);
- empathy_contact_set_persona (contact, FOLKS_PERSONA (persona));
-
- g_object_set_data (G_OBJECT (contact), "individual", individual);
- g_signal_connect (contact, "notify::capabilities",
- (GCallback) individual_store_contact_updated_cb, self);
- g_signal_connect (contact, "notify::client-types",
- (GCallback) individual_store_contact_updated_cb, self);
-
- g_object_unref (contact);
- }
- }
-
- g_clear_object (&persona);
- }
- g_clear_object (&iter);
-}
-
-static void
-individual_store_favourites_changed_cb (FolksIndividual *individual,
- GParamSpec *param,
- EmpathyIndividualStore *self)
-{
- DEBUG ("Individual %s is %s a favourite",
- folks_individual_get_id (individual),
- folks_favourite_details_get_is_favourite (
- FOLKS_FAVOURITE_DETAILS (individual)) ? "now" : "no longer");
-
- empathy_individual_store_remove_individual (self, individual);
- empathy_individual_store_add_individual (self, individual);
-}
-
-void
-individual_store_add_individual_and_connect (EmpathyIndividualStore *self,
- FolksIndividual *individual)
-{
- GeeSet *empty_set = gee_set_empty (G_TYPE_NONE, NULL, NULL);
-
- empathy_individual_store_add_individual (self, individual);
-
- g_signal_connect (individual, "notify::avatar",
- (GCallback) individual_store_individual_updated_cb, self);
- g_signal_connect (individual, "notify::presence-type",
- (GCallback) individual_store_individual_updated_cb, self);
- g_signal_connect (individual, "notify::presence-message",
- (GCallback) individual_store_individual_updated_cb, self);
- g_signal_connect (individual, "notify::alias",
- (GCallback) individual_store_individual_updated_cb, self);
- g_signal_connect (individual, "personas-changed",
- (GCallback) individual_personas_changed_cb, self);
- g_signal_connect (individual, "notify::is-favourite",
- (GCallback) individual_store_favourites_changed_cb, self);
-
- /* provide an empty set so the callback can assume non-NULL sets */
- individual_personas_changed_cb (individual,
- folks_individual_get_personas (individual), empty_set, self);
- g_clear_object (&empty_set);
-}
-
-void
-empathy_individual_store_disconnect_individual (EmpathyIndividualStore *self,
- FolksIndividual *individual)
-{
- GeeSet *empty_set = gee_set_empty (G_TYPE_NONE, NULL, NULL);
-
- /* provide an empty set so the callback can assume non-NULL sets */
- individual_personas_changed_cb (individual, empty_set,
- folks_individual_get_personas (individual), self);
- g_clear_object (&empty_set);
-
- g_signal_handlers_disconnect_by_func (individual,
- (GCallback) individual_store_individual_updated_cb, self);
- g_signal_handlers_disconnect_by_func (individual,
- (GCallback) individual_personas_changed_cb, self);
- g_signal_handlers_disconnect_by_func (individual,
- (GCallback) individual_store_favourites_changed_cb, self);
-}
-
-void
-individual_store_remove_individual_and_disconnect (
- EmpathyIndividualStore *self,
- FolksIndividual *individual)
-{
- empathy_individual_store_disconnect_individual (self, individual);
- empathy_individual_store_remove_individual (self, individual);
-}
-
-static void
-individual_store_dispose (GObject *object)
-{
- EmpathyIndividualStore *self = EMPATHY_INDIVIDUAL_STORE (object);
- GList *l;
-
- if (self->priv->dispose_has_run)
- return;
- self->priv->dispose_has_run = TRUE;
-
- /* Cancel any pending avatar load operations */
- for (l = self->priv->avatar_cancellables; l != NULL; l = l->next)
- {
- /* The cancellables are freed in individual_avatar_pixbuf_received_cb() */
- g_cancellable_cancel (G_CANCELLABLE (l->data));
- }
- g_list_free (self->priv->avatar_cancellables);
-
- if (self->priv->inhibit_active)
- {
- g_source_remove (self->priv->inhibit_active);
- }
-
- g_hash_table_unref (self->priv->status_icons);
- g_hash_table_unref (self->priv->folks_individual_cache);
- g_hash_table_unref (self->priv->empathy_group_cache);
- G_OBJECT_CLASS (empathy_individual_store_parent_class)->dispose (object);
-}
-
-static void
-individual_store_get_property (GObject *object,
- guint param_id,
- GValue *value,
- GParamSpec *pspec)
-{
- EmpathyIndividualStore *self = EMPATHY_INDIVIDUAL_STORE (object);
-
- switch (param_id)
- {
- case PROP_SHOW_AVATARS:
- g_value_set_boolean (value, self->priv->show_avatars);
- break;
- case PROP_SHOW_PROTOCOLS:
- g_value_set_boolean (value, self->priv->show_protocols);
- break;
- case PROP_SHOW_GROUPS:
- g_value_set_boolean (value, self->priv->show_groups);
- break;
- case PROP_IS_COMPACT:
- g_value_set_boolean (value, self->priv->is_compact);
- break;
- case PROP_SORT_CRITERIUM:
- g_value_set_enum (value, self->priv->sort_criterium);
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, pspec);
- break;
- };
-}
-
-static void
-individual_store_set_property (GObject *object,
- guint param_id,
- const GValue *value,
- GParamSpec *pspec)
-{
- switch (param_id)
- {
- case PROP_SHOW_AVATARS:
- empathy_individual_store_set_show_avatars (EMPATHY_INDIVIDUAL_STORE
- (object), g_value_get_boolean (value));
- break;
- case PROP_SHOW_PROTOCOLS:
- empathy_individual_store_set_show_protocols (EMPATHY_INDIVIDUAL_STORE
- (object), g_value_get_boolean (value));
- break;
- case PROP_SHOW_GROUPS:
- empathy_individual_store_set_show_groups (EMPATHY_INDIVIDUAL_STORE
- (object), g_value_get_boolean (value));
- break;
- case PROP_IS_COMPACT:
- empathy_individual_store_set_is_compact (EMPATHY_INDIVIDUAL_STORE
- (object), g_value_get_boolean (value));
- break;
- case PROP_SORT_CRITERIUM:
- empathy_individual_store_set_sort_criterium (EMPATHY_INDIVIDUAL_STORE
- (object), g_value_get_enum (value));
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, pspec);
- break;
- };
-}
-
-static void
-empathy_individual_store_class_init (EmpathyIndividualStoreClass *klass)
-{
- GObjectClass *object_class = G_OBJECT_CLASS (klass);
-
- object_class->dispose = individual_store_dispose;
- object_class->get_property = individual_store_get_property;
- object_class->set_property = individual_store_set_property;
-
- 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_PROTOCOLS,
- g_param_spec_boolean ("show-protocols",
- "Show Protocols",
- "Whether contact list should display "
- "protocols for contacts", FALSE, 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_INDIVIDUAL_STORE_SORT,
- EMPATHY_INDIVIDUAL_STORE_SORT_NAME, G_PARAM_READWRITE));
-
- g_type_class_add_private (object_class,
- sizeof (EmpathyIndividualStorePriv));
-}
-
-static gint
-get_position (const char **strv,
- const char *str)
-{
- int i;
-
- for (i = 0; strv[i] != NULL; i++)
- {
- if (!tp_strdiff (strv[i], str))
- return i;
- }
-
- return -1;
-}
-
-static gint
-compare_separator_and_groups (gboolean is_separator_a,
- gboolean is_separator_b,
- const gchar *name_a,
- const gchar *name_b,
- FolksIndividual *individual_a,
- FolksIndividual *individual_b,
- gboolean fake_group_a,
- gboolean fake_group_b)
-{
- /* these two lists are the sorted list of fake groups to include at the
- * top and bottom of the roster */
- const char *top_groups[] = {
- EMPATHY_INDIVIDUAL_STORE_FAVORITE,
- NULL
- };
-
- const char *bottom_groups[] = {
- EMPATHY_INDIVIDUAL_STORE_UNGROUPED,
- NULL
- };
-
- if (is_separator_a || is_separator_b)
- {
- /* We have at least one separator */
- if (is_separator_a)
- {
- return -1;
- }
- else if (is_separator_b)
- {
- return 1;
- }
- }
-
- /* One group and one contact */
- if (!individual_a && individual_b)
- {
- return 1;
- }
- else if (individual_a && !individual_b)
- {
- return -1;
- }
- else if (!individual_a && !individual_b)
- {
- gboolean a_in_top, b_in_top, a_in_bottom, b_in_bottom;
-
- a_in_top = fake_group_a && tp_strv_contains (top_groups, name_a);
- b_in_top = fake_group_b && tp_strv_contains (top_groups, name_b);
- a_in_bottom = fake_group_a && tp_strv_contains (bottom_groups, name_a);
- b_in_bottom = fake_group_b && tp_strv_contains (bottom_groups, name_b);
-
- if (a_in_top && b_in_top)
- {
- /* compare positions */
- return CLAMP (get_position (top_groups, name_a) -
- get_position (top_groups, name_b), -1, 1);
- }
- else if (a_in_bottom && b_in_bottom)
- {
- /* compare positions */
- return CLAMP (get_position (bottom_groups, name_a) -
- get_position (bottom_groups, name_b), -1, 1);
- }
- else if (a_in_top || b_in_bottom)
- {
- return -1;
- }
- else if (b_in_top || a_in_bottom)
- {
- return 1;
- }
- else
- {
- return g_utf8_collate (name_a, name_b);
- }
- }
-
- /* Two contacts, ordering depends of the sorting policy */
- return 0;
-}
-
-static gint
-individual_store_contact_sort (FolksIndividual *individual_a,
- FolksIndividual *individual_b)
-{
- gint ret_val;
- EmpathyContact *contact_a = NULL, *contact_b = NULL;
- TpAccount *account_a, *account_b;
-
- g_return_val_if_fail (individual_a != NULL || individual_b != NULL, 0);
-
- /* alias */
- ret_val = g_utf8_collate (
- folks_alias_details_get_alias (FOLKS_ALIAS_DETAILS (individual_a)),
- folks_alias_details_get_alias (FOLKS_ALIAS_DETAILS (individual_b)));
-
- if (ret_val != 0)
- goto out;
-
- contact_a = empathy_contact_dup_from_folks_individual (individual_a);
- contact_b = empathy_contact_dup_from_folks_individual (individual_b);
- if (contact_a != NULL && contact_b != NULL)
- {
- account_a = empathy_contact_get_account (contact_a);
- account_b = empathy_contact_get_account (contact_b);
-
- g_assert (account_a != NULL);
- g_assert (account_b != NULL);
-
- /* protocol */
- ret_val = g_strcmp0 (tp_account_get_protocol_name (account_a),
- tp_account_get_protocol_name (account_b));
-
- if (ret_val != 0)
- goto out;
-
- /* account ID */
- ret_val = g_strcmp0 (tp_proxy_get_object_path (account_a),
- tp_proxy_get_object_path (account_b));
-
- if (ret_val != 0)
- goto out;
- }
-
- /* identifier */
- ret_val = g_utf8_collate (folks_individual_get_id (individual_a),
- folks_individual_get_id (individual_b));
-
-out:
- tp_clear_object (&contact_a);
- tp_clear_object (&contact_b);
-
- return ret_val;
-}
-
-static gint
-individual_store_state_sort_func (GtkTreeModel *model,
- GtkTreeIter *iter_a,
- GtkTreeIter *iter_b,
- gpointer user_data)
-{
- gint ret_val;
- FolksIndividual *individual_a, *individual_b;
- gchar *name_a, *name_b;
- gboolean is_separator_a, is_separator_b;
- gboolean fake_group_a, fake_group_b;
- FolksPresenceType folks_presence_type_a, folks_presence_type_b;
- TpConnectionPresenceType tp_presence_a, tp_presence_b;
-
- gtk_tree_model_get (model, iter_a,
- EMPATHY_INDIVIDUAL_STORE_COL_NAME, &name_a,
- EMPATHY_INDIVIDUAL_STORE_COL_INDIVIDUAL, &individual_a,
- EMPATHY_INDIVIDUAL_STORE_COL_IS_SEPARATOR, &is_separator_a,
- EMPATHY_INDIVIDUAL_STORE_COL_IS_FAKE_GROUP, &fake_group_a, -1);
- gtk_tree_model_get (model, iter_b,
- EMPATHY_INDIVIDUAL_STORE_COL_NAME, &name_b,
- EMPATHY_INDIVIDUAL_STORE_COL_INDIVIDUAL, &individual_b,
- EMPATHY_INDIVIDUAL_STORE_COL_IS_SEPARATOR, &is_separator_b,
- EMPATHY_INDIVIDUAL_STORE_COL_IS_FAKE_GROUP, &fake_group_b, -1);
-
- if (individual_a == NULL || individual_b == NULL)
- {
- ret_val = compare_separator_and_groups (is_separator_a, is_separator_b,
- name_a, name_b, individual_a, individual_b, fake_group_a,
- fake_group_b);
- goto free_and_out;
- }
-
- /* If we managed to get this far, we can start looking at
- * the presences.
- */
- folks_presence_type_a =
- folks_presence_details_get_presence_type (
- FOLKS_PRESENCE_DETAILS (individual_a));
- folks_presence_type_b =
- folks_presence_details_get_presence_type (
- FOLKS_PRESENCE_DETAILS (individual_b));
- tp_presence_a = empathy_folks_presence_type_to_tp (folks_presence_type_a);
- tp_presence_b = empathy_folks_presence_type_to_tp (folks_presence_type_b);
-
- ret_val = -tp_connection_presence_type_cmp_availability (tp_presence_a,
- tp_presence_b);
-
- if (ret_val == 0)
- {
- /* Fallback: compare by name et al. */
- ret_val = individual_store_contact_sort (individual_a, individual_b);
- }
-
-free_and_out:
- g_free (name_a);
- g_free (name_b);
- tp_clear_object (&individual_a);
- tp_clear_object (&individual_b);
-
- return ret_val;
-}
-
-static gint
-individual_store_name_sort_func (GtkTreeModel *model,
- GtkTreeIter *iter_a,
- GtkTreeIter *iter_b,
- gpointer user_data)
-{
- gchar *name_a, *name_b;
- FolksIndividual *individual_a, *individual_b;
- gboolean is_separator_a = FALSE, is_separator_b = FALSE;
- gint ret_val;
- gboolean fake_group_a, fake_group_b;
-
- gtk_tree_model_get (model, iter_a,
- EMPATHY_INDIVIDUAL_STORE_COL_NAME, &name_a,
- EMPATHY_INDIVIDUAL_STORE_COL_INDIVIDUAL, &individual_a,
- EMPATHY_INDIVIDUAL_STORE_COL_IS_SEPARATOR, &is_separator_a,
- EMPATHY_INDIVIDUAL_STORE_COL_IS_FAKE_GROUP, &fake_group_a, -1);
- gtk_tree_model_get (model, iter_b,
- EMPATHY_INDIVIDUAL_STORE_COL_NAME, &name_b,
- EMPATHY_INDIVIDUAL_STORE_COL_INDIVIDUAL, &individual_b,
- EMPATHY_INDIVIDUAL_STORE_COL_IS_SEPARATOR, &is_separator_b,
- EMPATHY_INDIVIDUAL_STORE_COL_IS_FAKE_GROUP, &fake_group_b, -1);
-
- if (individual_a == NULL || individual_b == NULL)
- ret_val = compare_separator_and_groups (is_separator_a, is_separator_b,
- name_a, name_b, individual_a, individual_b, fake_group_a, fake_group_b);
- else
- ret_val = individual_store_contact_sort (individual_a, individual_b);
-
- tp_clear_object (&individual_a);
- tp_clear_object (&individual_b);
- g_free (name_a);
- g_free (name_b);
-
- return ret_val;
-}
-
-static void
-individual_store_setup (EmpathyIndividualStore *self)
-{
- GType types[] = {
- GDK_TYPE_PIXBUF, /* Status pixbuf */
- GDK_TYPE_PIXBUF, /* Avatar pixbuf */
- G_TYPE_BOOLEAN, /* Avatar pixbuf visible */
- G_TYPE_STRING, /* Name */
- G_TYPE_UINT, /* Presence type */
- G_TYPE_STRING, /* Status string */
- G_TYPE_BOOLEAN, /* Compact view */
- FOLKS_TYPE_INDIVIDUAL, /* Individual 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 make audio calls */
- G_TYPE_BOOLEAN, /* Can make video calls */
- G_TYPE_BOOLEAN, /* Is a fake group */
- G_TYPE_STRV, /* Client types */
- G_TYPE_UINT, /* Event count */
- };
-
- gtk_tree_store_set_column_types (GTK_TREE_STORE (self),
- EMPATHY_INDIVIDUAL_STORE_COL_COUNT, types);
-
- /* Set up sorting */
- gtk_tree_sortable_set_sort_func (GTK_TREE_SORTABLE (self),
- EMPATHY_INDIVIDUAL_STORE_COL_NAME,
- individual_store_name_sort_func, self, NULL);
- gtk_tree_sortable_set_sort_func (GTK_TREE_SORTABLE (self),
- EMPATHY_INDIVIDUAL_STORE_COL_STATUS,
- individual_store_state_sort_func, self, NULL);
-
- self->priv->sort_criterium = EMPATHY_INDIVIDUAL_STORE_SORT_NAME;
-
- empathy_individual_store_set_sort_criterium (self,
- self->priv->sort_criterium);
-}
-
-static gboolean
-individual_store_inhibit_active_cb (EmpathyIndividualStore *self)
-{
- self->priv->show_active = TRUE;
- self->priv->inhibit_active = 0;
-
- return FALSE;
-}
-
-static void
-g_queue_free_full_iter (gpointer data)
-{
- GQueue *queue = (GQueue *) data;
- g_queue_foreach (queue, (GFunc) gtk_tree_iter_free, NULL);
- g_queue_free (queue);
-}
-
-static void
-empathy_individual_store_init (EmpathyIndividualStore *self)
-{
- self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self,
- EMPATHY_TYPE_INDIVIDUAL_STORE, EmpathyIndividualStorePriv);
-
- self->priv->show_avatars = TRUE;
- self->priv->show_groups = TRUE;
- self->priv->show_protocols = FALSE;
- self->priv->inhibit_active =
- g_timeout_add_seconds (ACTIVE_USER_WAIT_TO_ENABLE_TIME,
- (GSourceFunc) individual_store_inhibit_active_cb, self);
- self->priv->status_icons =
- g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_object_unref);
- self->priv->folks_individual_cache = g_hash_table_new_full (NULL, NULL, NULL,
- g_queue_free_full_iter);
- self->priv->empathy_group_cache = g_hash_table_new_full (g_str_hash,
- g_str_equal, g_free, (GDestroyNotify) gtk_tree_iter_free);
- individual_store_setup (self);
-}
-
-gboolean
-empathy_individual_store_get_show_avatars (EmpathyIndividualStore *self)
-{
- g_return_val_if_fail (EMPATHY_IS_INDIVIDUAL_STORE (self), TRUE);
-
- return self->priv->show_avatars;
-}
-
-static gboolean
-individual_store_update_list_mode_foreach (GtkTreeModel *model,
- GtkTreePath *path,
- GtkTreeIter *iter,
- EmpathyIndividualStore *self)
-{
- gboolean show_avatar = FALSE;
- FolksIndividual *individual;
- GdkPixbuf *pixbuf_status;
-
- if (self->priv->show_avatars && !self->priv->is_compact)
- {
- show_avatar = TRUE;
- }
-
- gtk_tree_model_get (model, iter,
- EMPATHY_INDIVIDUAL_STORE_COL_INDIVIDUAL, &individual, -1);
-
- if (individual == NULL)
- {
- return FALSE;
- }
- /* get icon from hash_table */
- pixbuf_status =
- empathy_individual_store_get_individual_status_icon (self, individual);
-
- gtk_tree_store_set (GTK_TREE_STORE (self), iter,
- EMPATHY_INDIVIDUAL_STORE_COL_ICON_STATUS, pixbuf_status,
- EMPATHY_INDIVIDUAL_STORE_COL_PIXBUF_AVATAR_VISIBLE, show_avatar,
- EMPATHY_INDIVIDUAL_STORE_COL_COMPACT, self->priv->is_compact, -1);
-
- g_object_unref (individual);
-
- return FALSE;
-}
-
-void
-empathy_individual_store_set_show_avatars (EmpathyIndividualStore *self,
- gboolean show_avatars)
-{
- GtkTreeModel *model;
-
- g_return_if_fail (EMPATHY_IS_INDIVIDUAL_STORE (self));
-
- self->priv->show_avatars = show_avatars;
-
- model = GTK_TREE_MODEL (self);
-
- gtk_tree_model_foreach (model,
- (GtkTreeModelForeachFunc)
- individual_store_update_list_mode_foreach, self);
-
- g_object_notify (G_OBJECT (self), "show-avatars");
-}
-
-gboolean
-empathy_individual_store_get_show_protocols (EmpathyIndividualStore *self)
-{
- g_return_val_if_fail (EMPATHY_IS_INDIVIDUAL_STORE (self), TRUE);
-
- return self->priv->show_protocols;
-}
-
-void
-empathy_individual_store_set_show_protocols (EmpathyIndividualStore *self,
- gboolean show_protocols)
-{
- GtkTreeModel *model;
-
- g_return_if_fail (EMPATHY_IS_INDIVIDUAL_STORE (self));
-
- self->priv->show_protocols = show_protocols;
-
- model = GTK_TREE_MODEL (self);
-
- gtk_tree_model_foreach (model,
- (GtkTreeModelForeachFunc)
- individual_store_update_list_mode_foreach, self);
-
- g_object_notify (G_OBJECT (self), "show-protocols");
-}
-
-gboolean
-empathy_individual_store_get_show_groups (EmpathyIndividualStore *self)
-{
- g_return_val_if_fail (EMPATHY_IS_INDIVIDUAL_STORE (self), TRUE);
-
- return self->priv->show_groups;
-}
-
-void
-empathy_individual_store_set_show_groups (EmpathyIndividualStore *self,
- gboolean show_groups)
-{
- EmpathyIndividualStoreClass *klass;
-
- g_return_if_fail (EMPATHY_IS_INDIVIDUAL_STORE (self));
-
- klass = EMPATHY_INDIVIDUAL_STORE_GET_CLASS ( self);
-
- if (self->priv->show_groups == show_groups)
- {
- return;
- }
-
- self->priv->show_groups = show_groups;
-
- if (!klass->initial_loading (self))
- {
- /* Remove all contacts and add them back, not optimized but
- * that's the easy way :)
- *
- * This is only done if there's not a pending setup idle
- * callback, otherwise it will race and the contacts will get
- * added twice */
-
- gtk_tree_store_clear (GTK_TREE_STORE (self));
- /* Also clear the cache */
- g_hash_table_remove_all (self->priv->folks_individual_cache);
- g_hash_table_remove_all (self->priv->empathy_group_cache);
-
- klass->reload_individuals (self);
- }
-
- g_object_notify (G_OBJECT (self), "show-groups");
-}
-
-gboolean
-empathy_individual_store_get_is_compact (EmpathyIndividualStore *self)
-{
- g_return_val_if_fail (EMPATHY_IS_INDIVIDUAL_STORE (self), TRUE);
-
- return self->priv->is_compact;
-}
-
-void
-empathy_individual_store_set_is_compact (EmpathyIndividualStore *self,
- gboolean is_compact)
-{
- GtkTreeModel *model;
-
- g_return_if_fail (EMPATHY_IS_INDIVIDUAL_STORE (self));
-
- self->priv->is_compact = is_compact;
-
- model = GTK_TREE_MODEL (self);
-
- gtk_tree_model_foreach (model,
- (GtkTreeModelForeachFunc)
- individual_store_update_list_mode_foreach, self);
-
- g_object_notify (G_OBJECT (self), "is-compact");
-}
-
-EmpathyIndividualStoreSort
-empathy_individual_store_get_sort_criterium (EmpathyIndividualStore *self)
-{
- g_return_val_if_fail (EMPATHY_IS_INDIVIDUAL_STORE (self), 0);
-
- return self->priv->sort_criterium;
-}
-
-void
-empathy_individual_store_set_sort_criterium (EmpathyIndividualStore *self,
- EmpathyIndividualStoreSort sort_criterium)
-{
- g_return_if_fail (EMPATHY_IS_INDIVIDUAL_STORE (self));
-
- self->priv->sort_criterium = sort_criterium;
-
- switch (sort_criterium)
- {
- case EMPATHY_INDIVIDUAL_STORE_SORT_STATE:
- gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (self),
- EMPATHY_INDIVIDUAL_STORE_COL_STATUS, GTK_SORT_ASCENDING);
- break;
-
- case EMPATHY_INDIVIDUAL_STORE_SORT_NAME:
- gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (self),
- EMPATHY_INDIVIDUAL_STORE_COL_NAME, GTK_SORT_ASCENDING);
- break;
-
- default:
- g_assert_not_reached ();
- }
-
- g_object_notify (G_OBJECT (self), "sort-criterium");
-}
-
-gboolean
-empathy_individual_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_INDIVIDUAL_STORE_COL_IS_SEPARATOR, &is_separator, -1);
-
- return is_separator;
-}
-
-gchar *
-empathy_individual_store_get_parent_group (GtkTreeModel *model,
- GtkTreePath *path,
- gboolean *path_is_group,
- gboolean *is_fake_group)
-{
- GtkTreeIter parent_iter, iter;
- gchar *name = NULL;
- gboolean is_group;
- gboolean fake = FALSE;
-
- 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_INDIVIDUAL_STORE_COL_IS_GROUP, &is_group,
- EMPATHY_INDIVIDUAL_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_INDIVIDUAL_STORE_COL_IS_GROUP, &is_group,
- EMPATHY_INDIVIDUAL_STORE_COL_NAME, &name,
- EMPATHY_INDIVIDUAL_STORE_COL_IS_FAKE_GROUP, &fake, -1);
- if (!is_group)
- {
- g_free (name);
- return NULL;
- }
- }
-
- if (path_is_group)
- {
- *path_is_group = TRUE;
- }
-
- if (is_fake_group != NULL)
- *is_fake_group = fake;
-
- return name;
-}
-
-static GdkPixbuf *
-individual_store_get_individual_status_icon_with_icon_name (
- EmpathyIndividualStore *self,
- FolksIndividual *individual,
- const gchar *status_icon_name)
-{
- GdkPixbuf *pixbuf_status;
- const gchar *protocol_name = NULL;
- gchar *icon_name = NULL;
- GeeSet *personas;
- GeeIterator *iter;
- guint contact_count = 0;
- EmpathyContact *contact = NULL;
- gboolean show_protocols_here;
-
- personas = folks_individual_get_personas (individual);
- iter = gee_iterable_iterator (GEE_ITERABLE (personas));
- while (gee_iterator_next (iter))
- {
- FolksPersona *persona = gee_iterator_get (iter);
- if (empathy_folks_persona_is_interesting (persona))
- contact_count++;
-
- g_clear_object (&persona);
-
- if (contact_count > 1)
- break;
- }
- g_clear_object (&iter);
-
- show_protocols_here = (self->priv->show_protocols && (contact_count == 1));
- if (show_protocols_here)
- {
- contact = empathy_contact_dup_from_folks_individual (individual);
- if (contact != NULL)
- {
- protocol_name = empathy_protocol_name_for_contact (contact);
- icon_name = g_strdup_printf ("%s-%s", status_icon_name,
- protocol_name);
- }
- else
- {
- g_warning ("Cannot retrieve contact from individual '%s'",
- folks_alias_details_get_alias (
- FOLKS_ALIAS_DETAILS (individual)));
-
- return NULL;
- }
- }
- else
- {
- icon_name = g_strdup_printf ("%s", status_icon_name);
- }
-
- pixbuf_status = g_hash_table_lookup (self->priv->status_icons, icon_name);
-
- if (pixbuf_status == NULL)
- {
- pixbuf_status =
- empathy_pixbuf_contact_status_icon_with_icon_name (contact,
- status_icon_name, show_protocols_here);
-
- if (pixbuf_status != NULL)
- {
- /* pass the reference to the hash table */
- g_hash_table_insert (self->priv->status_icons,
- g_strdup (icon_name), pixbuf_status);
- }
- }
-
- g_free (icon_name);
- tp_clear_object (&contact);
-
- return pixbuf_status;
-}
-
-GdkPixbuf *
-empathy_individual_store_get_individual_status_icon (
- EmpathyIndividualStore *self,
- FolksIndividual *individual)
-{
- GdkPixbuf *pixbuf_status = NULL;
- const gchar *status_icon_name = NULL;
-
- status_icon_name = empathy_icon_name_for_individual (individual);
- if (status_icon_name == NULL)
- return NULL;
-
- pixbuf_status =
- individual_store_get_individual_status_icon_with_icon_name (self,
- individual, status_icon_name);
-
- return pixbuf_status;
-}
-
-void
-empathy_individual_store_refresh_individual (EmpathyIndividualStore *self,
- FolksIndividual *individual)
-{
- gboolean show_active;
-
- show_active = self->priv->show_active;
- self->priv->show_active = FALSE;
- empathy_individual_store_remove_individual (self, individual);
- empathy_individual_store_add_individual (self, individual);
- self->priv->show_active = show_active;
-}
diff --git a/libempathy-gtk/empathy-individual-store.h b/libempathy-gtk/empathy-individual-store.h
deleted file mode 100644
index c709348f..00000000
--- a/libempathy-gtk/empathy-individual-store.h
+++ /dev/null
@@ -1,167 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * Copyright (C) 2005-2007 Imendio AB
- * Copyright (C) 2007-2010 Collabora Ltd.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301 USA
- *
- * Authors: Mikael Hallendal <micke@imendio.com>
- * Martyn Russell <martyn@imendio.com>
- * Xavier Claessens <xclaesse@gmail.com>
- * Travis Reitter <travis.reitter@collabora.co.uk>
- */
-
-#ifndef __EMPATHY_INDIVIDUAL_STORE_H__
-#define __EMPATHY_INDIVIDUAL_STORE_H__
-
-#include <gtk/gtk.h>
-#include <folks/folks.h>
-
-G_BEGIN_DECLS
-#define EMPATHY_TYPE_INDIVIDUAL_STORE (empathy_individual_store_get_type ())
-#define EMPATHY_INDIVIDUAL_STORE(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), EMPATHY_TYPE_INDIVIDUAL_STORE, EmpathyIndividualStore))
-#define EMPATHY_INDIVIDUAL_STORE_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), EMPATHY_TYPE_INDIVIDUAL_STORE, EmpathyIndividualStoreClass))
-#define EMPATHY_IS_INDIVIDUAL_STORE(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), EMPATHY_TYPE_INDIVIDUAL_STORE))
-#define EMPATHY_IS_INDIVIDUAL_STORE_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), EMPATHY_TYPE_INDIVIDUAL_STORE))
-#define EMPATHY_INDIVIDUAL_STORE_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), EMPATHY_TYPE_INDIVIDUAL_STORE, EmpathyIndividualStoreClass))
-
-typedef struct _EmpathyIndividualStore EmpathyIndividualStore;
-typedef struct _EmpathyIndividualStoreClass EmpathyIndividualStoreClass;
-typedef struct _EmpathyIndividualStorePriv EmpathyIndividualStorePriv;
-
-typedef enum
-{
- EMPATHY_INDIVIDUAL_STORE_SORT_STATE,
- EMPATHY_INDIVIDUAL_STORE_SORT_NAME
-} EmpathyIndividualStoreSort;
-
-typedef enum
-{
- EMPATHY_INDIVIDUAL_STORE_COL_ICON_STATUS,
- EMPATHY_INDIVIDUAL_STORE_COL_PIXBUF_AVATAR,
- EMPATHY_INDIVIDUAL_STORE_COL_PIXBUF_AVATAR_VISIBLE,
- EMPATHY_INDIVIDUAL_STORE_COL_NAME,
- EMPATHY_INDIVIDUAL_STORE_COL_PRESENCE_TYPE,
- EMPATHY_INDIVIDUAL_STORE_COL_STATUS,
- EMPATHY_INDIVIDUAL_STORE_COL_COMPACT,
- EMPATHY_INDIVIDUAL_STORE_COL_INDIVIDUAL,
- EMPATHY_INDIVIDUAL_STORE_COL_IS_GROUP,
- EMPATHY_INDIVIDUAL_STORE_COL_IS_ACTIVE,
- EMPATHY_INDIVIDUAL_STORE_COL_IS_ONLINE,
- EMPATHY_INDIVIDUAL_STORE_COL_IS_SEPARATOR,
- EMPATHY_INDIVIDUAL_STORE_COL_CAN_AUDIO_CALL,
- EMPATHY_INDIVIDUAL_STORE_COL_CAN_VIDEO_CALL,
- EMPATHY_INDIVIDUAL_STORE_COL_IS_FAKE_GROUP,
- EMPATHY_INDIVIDUAL_STORE_COL_CLIENT_TYPES,
- EMPATHY_INDIVIDUAL_STORE_COL_EVENT_COUNT,
- EMPATHY_INDIVIDUAL_STORE_COL_COUNT,
-} EmpathyIndividualStoreCol;
-
-#define EMPATHY_INDIVIDUAL_STORE_UNGROUPED _("Ungrouped")
-#define EMPATHY_INDIVIDUAL_STORE_FAVORITE _("Favorite People")
-#define EMPATHY_INDIVIDUAL_STORE_PEOPLE_NEARBY _("People Nearby")
-
-struct _EmpathyIndividualStore
-{
- GtkTreeStore parent;
- EmpathyIndividualStorePriv *priv;
-};
-
-struct _EmpathyIndividualStoreClass
-{
- GtkTreeStoreClass parent_class;
-
- void (*reload_individuals) (EmpathyIndividualStore *self);
- gboolean (*initial_loading) (EmpathyIndividualStore *self);
-};
-
-GType
-empathy_individual_store_get_type (void) G_GNUC_CONST;
-
-gboolean empathy_individual_store_get_show_avatars (
- EmpathyIndividualStore *store);
-
-void empathy_individual_store_set_show_avatars (EmpathyIndividualStore *store,
- gboolean show_avatars);
-
-gboolean empathy_individual_store_get_show_groups (
- EmpathyIndividualStore *store);
-
-void empathy_individual_store_set_show_groups (EmpathyIndividualStore *store,
- gboolean show_groups);
-
-gboolean empathy_individual_store_get_is_compact (
- EmpathyIndividualStore *store);
-
-void empathy_individual_store_set_is_compact (EmpathyIndividualStore *store,
- gboolean is_compact);
-
-gboolean empathy_individual_store_get_show_protocols (
- EmpathyIndividualStore *store);
-
-void empathy_individual_store_set_show_protocols (
- EmpathyIndividualStore *store,
- gboolean show_protocols);
-
-EmpathyIndividualStoreSort empathy_individual_store_get_sort_criterium (
- EmpathyIndividualStore *store);
-
-void empathy_individual_store_set_sort_criterium (
- EmpathyIndividualStore *store,
- EmpathyIndividualStoreSort sort_criterium);
-
-gboolean empathy_individual_store_row_separator_func (GtkTreeModel *model,
- GtkTreeIter *iter,
- gpointer data);
-
-gchar *empathy_individual_store_get_parent_group (GtkTreeModel *model,
- GtkTreePath *path,
- gboolean *path_is_group,
- gboolean *is_fake_group);
-
-GdkPixbuf *empathy_individual_store_get_individual_status_icon (
- EmpathyIndividualStore *store,
- FolksIndividual *individual);
-
-void individual_store_add_individual_and_connect (EmpathyIndividualStore *self,
- FolksIndividual *individual);
-
-void individual_store_remove_individual_and_disconnect (
- EmpathyIndividualStore *self,
- FolksIndividual *individual);
-
-/* protected */
-
-GList *empathy_individual_store_find_contact (EmpathyIndividualStore *self,
- FolksIndividual *individual);
-
-void empathy_individual_store_free_iters (GList *iters);
-
-void empathy_individual_store_disconnect_individual (
- EmpathyIndividualStore *self,
- FolksIndividual *individual);
-
-void empathy_individual_store_remove_individual (EmpathyIndividualStore *self,
- FolksIndividual *individual);
-
-void empathy_individual_store_add_individual (EmpathyIndividualStore *self,
- FolksIndividual *individual);
-
-void empathy_individual_store_refresh_individual (EmpathyIndividualStore *self,
- FolksIndividual *individual);
-
-G_END_DECLS
-#endif /* __EMPATHY_INDIVIDUAL_STORE_H__ */
diff --git a/libempathy-gtk/empathy-individual-view.c b/libempathy-gtk/empathy-individual-view.c
deleted file mode 100644
index b901848e..00000000
--- a/libempathy-gtk/empathy-individual-view.c
+++ /dev/null
@@ -1,2713 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * Copyright (C) 2005-2007 Imendio AB
- * Copyright (C) 2007-2010 Collabora Ltd.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301 USA
- *
- * Authors: Mikael Hallendal <micke@imendio.com>
- * Martyn Russell <martyn@imendio.com>
- * Xavier Claessens <xclaesse@gmail.com>
- * Travis Reitter <travis.reitter@collabora.co.uk>
- */
-
-#include "config.h"
-#include "empathy-individual-view.h"
-
-#include <glib/gi18n-lib.h>
-#include <tp-account-widgets/tpaw-pixbuf-utils.h>
-#include <tp-account-widgets/tpaw-utils.h>
-
-#include "empathy-cell-renderer-activatable.h"
-#include "empathy-cell-renderer-expander.h"
-#include "empathy-cell-renderer-text.h"
-#include "empathy-connection-aggregator.h"
-#include "empathy-contact-groups.h"
-#include "empathy-gtk-enum-types.h"
-#include "empathy-images.h"
-#include "empathy-individual-edit-dialog.h"
-#include "empathy-individual-manager.h"
-#include "empathy-request-util.h"
-#include "empathy-ui-utils.h"
-#include "empathy-utils.h"
-
-#define DEBUG_FLAG EMPATHY_DEBUG_CONTACT
-#include "empathy-debug.h"
-
-/* 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, EmpathyIndividualView)
-typedef struct
-{
- EmpathyIndividualStore *store;
- GtkTreeRowReference *drag_row;
- EmpathyIndividualViewFeatureFlags view_features;
- EmpathyIndividualFeatureFlags individual_features;
- GtkWidget *tooltip_widget;
-
- gboolean show_offline;
- gboolean show_untrusted;
- gboolean show_uninteresting;
-
- GtkTreeModelFilter *filter;
- GtkWidget *search_widget;
-
- guint expand_groups_idle_handler;
- /* owned string (group name) -> bool (whether to expand/contract) */
- GHashTable *expand_groups;
-
- /* Auto scroll */
- guint auto_scroll_timeout_id;
- /* Distance between mouse pointer and the nearby border. Negative when
- scrolling updards.*/
- gint distance;
-
- GtkTreeModelFilterVisibleFunc custom_filter;
- gpointer custom_filter_data;
-
- GtkCellRenderer *text_renderer;
-} EmpathyIndividualViewPriv;
-
-typedef struct
-{
- EmpathyIndividualView *view;
- GtkTreePath *path;
- guint timeout_id;
-} DragMotionData;
-
-typedef struct
-{
- EmpathyIndividualView *view;
- FolksIndividual *individual;
- gboolean remove;
-} ShowActiveData;
-
-enum
-{
- PROP_0,
- PROP_STORE,
- PROP_VIEW_FEATURES,
- PROP_INDIVIDUAL_FEATURES,
- PROP_SHOW_OFFLINE,
- PROP_SHOW_UNTRUSTED,
- PROP_SHOW_UNINTERESTING,
-};
-
-/* TODO: re-add DRAG_TYPE_CONTACT_ID, for the case that we're dragging around
- * specific EmpathyContacts (between/in/out of Individuals) */
-typedef enum
-{
- DND_DRAG_TYPE_UNKNOWN = -1,
- DND_DRAG_TYPE_INDIVIDUAL_ID = 0,
- DND_DRAG_TYPE_PERSONA_ID,
- DND_DRAG_TYPE_URI_LIST,
- DND_DRAG_TYPE_STRING,
-} DndDragType;
-
-#define DRAG_TYPE(T,I) \
- { (gchar *) T, 0, I }
-
-static const GtkTargetEntry drag_types_dest[] = {
- DRAG_TYPE ("text/x-individual-id", DND_DRAG_TYPE_INDIVIDUAL_ID),
- DRAG_TYPE ("text/x-persona-id", DND_DRAG_TYPE_PERSONA_ID),
- DRAG_TYPE ("text/path-list", DND_DRAG_TYPE_URI_LIST),
- DRAG_TYPE ("text/uri-list", DND_DRAG_TYPE_URI_LIST),
- DRAG_TYPE ("text/plain", DND_DRAG_TYPE_STRING),
- DRAG_TYPE ("STRING", DND_DRAG_TYPE_STRING),
-};
-
-static const GtkTargetEntry drag_types_source[] = {
- DRAG_TYPE ("text/x-individual-id", DND_DRAG_TYPE_INDIVIDUAL_ID),
-};
-
-#undef DRAG_TYPE
-
-static GdkAtom drag_atoms_dest[G_N_ELEMENTS (drag_types_dest)];
-
-enum
-{
- DRAG_INDIVIDUAL_RECEIVED,
- DRAG_PERSONA_RECEIVED,
- LAST_SIGNAL
-};
-
-static guint signals[LAST_SIGNAL];
-
-G_DEFINE_TYPE (EmpathyIndividualView, empathy_individual_view,
- GTK_TYPE_TREE_VIEW);
-
-static void
-individual_view_tooltip_destroy_cb (GtkWidget *widget,
- EmpathyIndividualView *view)
-{
- EmpathyIndividualViewPriv *priv = GET_PRIV (view);
-
- tp_clear_object (&priv->tooltip_widget);
-}
-
-static gboolean
-individual_view_query_tooltip_cb (EmpathyIndividualView *view,
- gint x,
- gint y,
- gboolean keyboard_mode,
- GtkTooltip *tooltip,
- gpointer user_data)
-{
- EmpathyIndividualViewPriv *priv;
- FolksIndividual *individual;
- GtkTreeModel *model;
- GtkTreeIter iter;
- GtkTreePath *path;
- static gint running = 0;
- gboolean ret = FALSE;
-
- priv = GET_PRIV (view);
-
- /* Avoid an infinite loop. See GNOME bug #574377 */
- if (running > 0)
- return FALSE;
-
- running++;
-
- /* Don't show the tooltip if there's already a popup menu */
- if (gtk_menu_get_for_attach_widget (GTK_WIDGET (view)) != NULL)
- goto OUT;
-
- if (!gtk_tree_view_get_tooltip_context (GTK_TREE_VIEW (view), &x, &y,
- keyboard_mode, &model, &path, &iter))
- goto OUT;
-
- gtk_tree_view_set_tooltip_row (GTK_TREE_VIEW (view), tooltip, path);
- gtk_tree_path_free (path);
-
- gtk_tree_model_get (model, &iter,
- EMPATHY_INDIVIDUAL_STORE_COL_INDIVIDUAL, &individual,
- -1);
- if (individual == NULL)
- goto OUT;
-
- if (priv->tooltip_widget == NULL)
- {
- priv->tooltip_widget = empathy_individual_widget_new (individual,
- EMPATHY_INDIVIDUAL_WIDGET_FOR_TOOLTIP |
- EMPATHY_INDIVIDUAL_WIDGET_SHOW_LOCATION |
- EMPATHY_INDIVIDUAL_WIDGET_SHOW_CLIENT_TYPES);
- gtk_container_set_border_width (GTK_CONTAINER (priv->tooltip_widget), 8);
- g_object_ref (priv->tooltip_widget);
-
- tp_g_signal_connect_object (priv->tooltip_widget, "destroy",
- G_CALLBACK (individual_view_tooltip_destroy_cb), view, 0);
-
- gtk_widget_show (priv->tooltip_widget);
- }
- else
- {
- empathy_individual_widget_set_individual (
- EMPATHY_INDIVIDUAL_WIDGET (priv->tooltip_widget), individual);
- }
-
- gtk_tooltip_set_custom (tooltip, priv->tooltip_widget);
- ret = TRUE;
-
- g_object_unref (individual);
-OUT:
- running--;
-
- return ret;
-}
-
-static void
-groups_change_group_cb (GObject *source,
- GAsyncResult *result,
- gpointer user_data)
-{
- FolksGroupDetails *group_details = FOLKS_GROUP_DETAILS (source);
- GError *error = NULL;
-
- folks_group_details_change_group_finish (group_details, result, &error);
- if (error != NULL)
- {
- g_warning ("failed to change group: %s", error->message);
- g_clear_error (&error);
- }
-}
-
-static gboolean
-group_can_be_modified (const gchar *name,
- gboolean is_fake_group,
- gboolean adding)
-{
- /* Real groups can always be modified */
- if (!is_fake_group)
- return TRUE;
-
- /* The favorite fake group can be modified so users can
- * add/remove favorites using DnD */
- if (!tp_strdiff (name, EMPATHY_INDIVIDUAL_STORE_FAVORITE))
- return TRUE;
-
- /* We can remove contacts from the 'ungrouped' fake group */
- if (!adding && !tp_strdiff (name, EMPATHY_INDIVIDUAL_STORE_UNGROUPED))
- return TRUE;
-
- return FALSE;
-}
-
-static gboolean
-individual_view_individual_drag_received (GtkWidget *self,
- GdkDragContext *context,
- GtkTreeModel *model,
- GtkTreePath *path,
- GtkSelectionData *selection)
-{
- EmpathyIndividualViewPriv *priv;
- EmpathyIndividualManager *manager = NULL;
- FolksIndividual *individual;
- GtkTreePath *source_path;
- const gchar *sel_data;
- gchar *new_group = NULL;
- gchar *old_group = NULL;
- gboolean new_group_is_fake, old_group_is_fake = TRUE, retval = FALSE;
-
- priv = GET_PRIV (self);
-
- sel_data = (const gchar *) gtk_selection_data_get_data (selection);
- new_group = empathy_individual_store_get_parent_group (model, path,
- NULL, &new_group_is_fake);
-
- if (!group_can_be_modified (new_group, new_group_is_fake, TRUE))
- goto finished;
-
- /* Get source group information iff the view has the FEATURE_GROUPS_CHANGE
- * feature. Otherwise, we just add the dropped contact to whichever group
- * they were dropped in, and don't remove them from their old group. This
- * allows for Individual views which shouldn't allow Individuals to have
- * their groups changed, and also for dragging Individuals between Individual
- * views. */
- if ((priv->view_features & EMPATHY_INDIVIDUAL_VIEW_FEATURE_GROUPS_CHANGE) &&
- priv->drag_row != NULL)
- {
- source_path = gtk_tree_row_reference_get_path (priv->drag_row);
- if (source_path)
- {
- old_group =
- empathy_individual_store_get_parent_group (model, source_path,
- NULL, &old_group_is_fake);
- gtk_tree_path_free (source_path);
- }
-
- if (!group_can_be_modified (old_group, old_group_is_fake, FALSE))
- goto finished;
-
- if (!tp_strdiff (old_group, new_group))
- goto finished;
- }
- else if (priv->drag_row != NULL)
- {
- /* We don't allow changing Individuals' groups, and this Individual was
- * dragged from another group in *this* Individual view, so we disallow
- * the drop. */
- goto finished;
- }
-
- /* XXX: for contacts, we used to ensure the account, create the contact
- * factory, and then wait on the contacts. But they should already be
- * created by this point */
-
- manager = empathy_individual_manager_dup_singleton ();
- individual = empathy_individual_manager_lookup_member (manager, sel_data);
-
- if (individual == NULL)
- {
- DEBUG ("failed to find drag event individual with ID '%s'", sel_data);
- goto finished;
- }
-
- /* FIXME: We should probably wait for the cb before calling
- * gtk_drag_finish */
-
- /* Emit a signal notifying of the drag. We change the Individual's groups in
- * the default signal handler. */
- g_signal_emit (self, signals[DRAG_INDIVIDUAL_RECEIVED], 0,
- gdk_drag_context_get_selected_action (context), individual, new_group,
- old_group);
-
- retval = TRUE;
-
-finished:
- tp_clear_object (&manager);
- g_free (old_group);
- g_free (new_group);
-
- return retval;
-}
-
-static void
-real_drag_individual_received_cb (EmpathyIndividualView *self,
- GdkDragAction action,
- FolksIndividual *individual,
- const gchar *new_group,
- const gchar *old_group)
-{
- DEBUG ("individual %s dragged from '%s' to '%s'",
- folks_individual_get_id (individual), old_group, new_group);
-
- if (!tp_strdiff (new_group, EMPATHY_INDIVIDUAL_STORE_FAVORITE))
- {
- /* Mark contact as favourite */
- folks_favourite_details_set_is_favourite (
- FOLKS_FAVOURITE_DETAILS (individual), TRUE);
- return;
- }
-
- if (!tp_strdiff (old_group, EMPATHY_INDIVIDUAL_STORE_FAVORITE))
- {
- /* Remove contact as favourite */
- folks_favourite_details_set_is_favourite (
- FOLKS_FAVOURITE_DETAILS (individual), FALSE);
-
- /* Don't try to remove it */
- old_group = NULL;
- }
-
- if (new_group != NULL)
- {
- folks_group_details_change_group (FOLKS_GROUP_DETAILS (individual),
- new_group, TRUE, groups_change_group_cb, NULL);
- }
-
- if (old_group != NULL && action == GDK_ACTION_MOVE)
- {
- folks_group_details_change_group (FOLKS_GROUP_DETAILS (individual),
- old_group, FALSE, groups_change_group_cb, NULL);
- }
-}
-
-static gboolean
-individual_view_persona_drag_received (GtkWidget *self,
- GdkDragContext *context,
- GtkTreeModel *model,
- GtkTreePath *path,
- GtkSelectionData *selection)
-{
- EmpathyIndividualManager *manager = NULL;
- FolksIndividual *individual = NULL;
- FolksPersona *persona = NULL;
- const gchar *persona_uid;
- GList *individuals, *l;
- GeeIterator *iter = NULL;
- gboolean retval = FALSE;
-
- persona_uid = (const gchar *) gtk_selection_data_get_data (selection);
-
- /* FIXME: This is slow, but the only way to find the Persona we're having
- * dropped on us. */
- manager = empathy_individual_manager_dup_singleton ();
- individuals = empathy_individual_manager_get_members (manager);
-
- for (l = individuals; l != NULL; l = l->next)
- {
- GeeSet *personas;
-
- personas = folks_individual_get_personas (FOLKS_INDIVIDUAL (l->data));
- iter = gee_iterable_iterator (GEE_ITERABLE (personas));
- while (gee_iterator_next (iter))
- {
- FolksPersona *persona_cur = gee_iterator_get (iter);
-
- if (!tp_strdiff (folks_persona_get_uid (persona), persona_uid))
- {
- /* takes ownership of the ref */
- persona = persona_cur;
- individual = g_object_ref (l->data);
- goto got_persona;
- }
- g_clear_object (&persona_cur);
- }
- g_clear_object (&iter);
- }
-
-got_persona:
- g_clear_object (&iter);
- g_list_free (individuals);
-
- if (persona == NULL || individual == NULL)
- {
- DEBUG ("Failed to find drag event persona with UID '%s'", persona_uid);
- }
- else
- {
- /* Emit a signal notifying of the drag. We change the Individual's groups in
- * the default signal handler. */
- g_signal_emit (self, signals[DRAG_PERSONA_RECEIVED], 0,
- gdk_drag_context_get_selected_action (context), persona, individual,
- &retval);
- }
-
- tp_clear_object (&manager);
- tp_clear_object (&persona);
- tp_clear_object (&individual);
-
- return retval;
-}
-
-static gboolean
-individual_view_file_drag_received (GtkWidget *view,
- GdkDragContext *context,
- GtkTreeModel *model,
- GtkTreePath *path,
- GtkSelectionData *selection)
-{
- GtkTreeIter iter;
- const gchar *sel_data;
- FolksIndividual *individual;
- EmpathyContact *contact;
-
- sel_data = (const gchar *) gtk_selection_data_get_data (selection);
-
- gtk_tree_model_get_iter (model, &iter, path);
- gtk_tree_model_get (model, &iter,
- EMPATHY_INDIVIDUAL_STORE_COL_INDIVIDUAL, &individual, -1);
- if (individual == NULL)
- return FALSE;
-
- contact = empathy_contact_dup_from_folks_individual (individual);
- empathy_send_file_from_uri_list (contact, sel_data);
-
- g_object_unref (individual);
- tp_clear_object (&contact);
-
- return TRUE;
-}
-
-static void
-individual_view_drag_data_received (GtkWidget *view,
- GdkDragContext *context,
- gint x,
- gint y,
- GtkSelectionData *selection,
- guint info,
- guint time_)
-{
- GtkTreeModel *model;
- gboolean is_row;
- GtkTreeViewDropPosition position;
- GtkTreePath *path;
- gboolean success = TRUE;
-
- model = gtk_tree_view_get_model (GTK_TREE_VIEW (view));
-
- /* Get destination group information. */
- is_row = gtk_tree_view_get_dest_row_at_pos (GTK_TREE_VIEW (view),
- x, y, &path, &position);
- if (!is_row)
- {
- success = FALSE;
- }
- else if (info == DND_DRAG_TYPE_INDIVIDUAL_ID)
- {
- success = individual_view_individual_drag_received (view,
- context, model, path, selection);
- }
- else if (info == DND_DRAG_TYPE_PERSONA_ID)
- {
- success = individual_view_persona_drag_received (view, context, model,
- path, selection);
- }
- else if (info == DND_DRAG_TYPE_URI_LIST || info == DND_DRAG_TYPE_STRING)
- {
- success = individual_view_file_drag_received (view,
- context, model, path, selection);
- }
-
- gtk_tree_path_free (path);
- gtk_drag_finish (context, success, FALSE, GDK_CURRENT_TIME);
-}
-
-static gboolean
-individual_view_drag_motion_cb (DragMotionData *data)
-{
- if (data->view != NULL)
- {
- gtk_tree_view_expand_row (GTK_TREE_VIEW (data->view), data->path, FALSE);
- g_object_remove_weak_pointer (G_OBJECT (data->view),
- (gpointer *) &data->view);
- }
-
- data->timeout_id = 0;
-
- return FALSE;
-}
-
-/* Minimum distance between the mouse pointer and a horizontal border when we
- start auto scrolling. */
-#define AUTO_SCROLL_MARGIN_SIZE 20
-/* How far to scroll per one tick. */
-#define AUTO_SCROLL_PITCH 10
-
-static gboolean
-individual_view_auto_scroll_cb (EmpathyIndividualView *self)
-{
- EmpathyIndividualViewPriv *priv = GET_PRIV (self);
- GtkAdjustment *adj;
- gdouble new_value;
-
- adj = gtk_scrollable_get_vadjustment (GTK_SCROLLABLE (self));
-
- if (priv->distance < 0)
- new_value = gtk_adjustment_get_value (adj) - AUTO_SCROLL_PITCH;
- else
- new_value = gtk_adjustment_get_value (adj) + AUTO_SCROLL_PITCH;
-
- new_value = CLAMP (new_value, gtk_adjustment_get_lower (adj),
- gtk_adjustment_get_upper (adj) - gtk_adjustment_get_page_size (adj));
-
- gtk_adjustment_set_value (adj, new_value);
-
- return TRUE;
-}
-
-static gboolean
-individual_view_drag_motion (GtkWidget *widget,
- GdkDragContext *context,
- gint x,
- gint y,
- guint time_)
-{
- EmpathyIndividualViewPriv *priv;
- GtkTreeModel *model;
- GdkAtom target;
- GtkTreeIter iter;
- static DragMotionData *dm = NULL;
- GtkTreePath *path;
- gboolean is_row;
- gboolean is_different = FALSE;
- gboolean cleanup = TRUE;
- gboolean retval = TRUE;
- GtkAllocation allocation;
- guint i;
- DndDragType drag_type = DND_DRAG_TYPE_UNKNOWN;
-
- priv = GET_PRIV (EMPATHY_INDIVIDUAL_VIEW (widget));
- model = gtk_tree_view_get_model (GTK_TREE_VIEW (widget));
-
-
- if (priv->auto_scroll_timeout_id != 0)
- {
- g_source_remove (priv->auto_scroll_timeout_id);
- priv->auto_scroll_timeout_id = 0;
- }
-
- gtk_widget_get_allocation (widget, &allocation);
-
- if (y < AUTO_SCROLL_MARGIN_SIZE ||
- y > (allocation.height - AUTO_SCROLL_MARGIN_SIZE))
- {
- if (y < AUTO_SCROLL_MARGIN_SIZE)
- priv->distance = MIN (-y, -1);
- else
- priv->distance = MAX (allocation.height - y, 1);
-
- priv->auto_scroll_timeout_id = g_timeout_add (10 * ABS (priv->distance),
- (GSourceFunc) individual_view_auto_scroll_cb, widget);
- }
-
- is_row = gtk_tree_view_get_path_at_pos (GTK_TREE_VIEW (widget),
- x, y, &path, NULL, NULL, NULL);
-
- cleanup &= (dm == NULL);
-
- if (is_row)
- {
- cleanup &= (dm && gtk_tree_path_compare (dm->path, path) != 0);
- is_different = ((dm == NULL) || ((dm != NULL)
- && gtk_tree_path_compare (dm->path, path) != 0));
- }
- else
- cleanup &= FALSE;
-
- if (path == NULL)
- {
- /* Coordinates don't point to an actual row, so make sure the pointer
- and highlighting don't indicate that a drag is possible.
- */
- gdk_drag_status (context, GDK_ACTION_DEFAULT, time_);
- gtk_tree_view_set_drag_dest_row (GTK_TREE_VIEW (widget), NULL, 0);
- return FALSE;
- }
- target = gtk_drag_dest_find_target (widget, context, NULL);
- gtk_tree_model_get_iter (model, &iter, path);
-
- /* Determine the DndDragType of the data */
- for (i = 0; i < G_N_ELEMENTS (drag_atoms_dest); i++)
- {
- if (target == drag_atoms_dest[i])
- {
- drag_type = drag_types_dest[i].info;
- break;
- }
- }
-
- if (drag_type == DND_DRAG_TYPE_URI_LIST ||
- drag_type == DND_DRAG_TYPE_STRING)
- {
- /* This is a file drag, and it can only be dropped on contacts,
- * not groups.
- * If we don't have FEATURE_FILE_DROP, disallow the drop completely,
- * even if we have a valid target. */
- FolksIndividual *individual = NULL;
- EmpathyCapabilities caps = EMPATHY_CAPABILITIES_NONE;
-
- if (priv->view_features & EMPATHY_INDIVIDUAL_VIEW_FEATURE_FILE_DROP)
- {
- gtk_tree_model_get (model, &iter,
- EMPATHY_INDIVIDUAL_STORE_COL_INDIVIDUAL, &individual,
- -1);
- }
-
- if (individual != NULL)
- {
- EmpathyContact *contact = NULL;
-
- contact = empathy_contact_dup_from_folks_individual (individual);
- if (contact != NULL)
- caps = empathy_contact_get_capabilities (contact);
-
- tp_clear_object (&contact);
- }
-
- if (individual != NULL &&
- folks_presence_details_is_online (
- FOLKS_PRESENCE_DETAILS (individual)) &&
- (caps & EMPATHY_CAPABILITIES_FT))
- {
- gdk_drag_status (context, GDK_ACTION_COPY, time_);
- gtk_tree_view_set_drag_dest_row (GTK_TREE_VIEW (widget),
- path, GTK_TREE_VIEW_DROP_INTO_OR_BEFORE);
- }
- else
- {
- gdk_drag_status (context, 0, time_);
- gtk_tree_view_set_drag_dest_row (GTK_TREE_VIEW (widget), NULL, 0);
- retval = FALSE;
- }
-
- if (individual != NULL)
- g_object_unref (individual);
- }
- else if ((drag_type == DND_DRAG_TYPE_INDIVIDUAL_ID &&
- (priv->view_features & EMPATHY_INDIVIDUAL_VIEW_FEATURE_GROUPS_CHANGE ||
- priv->drag_row == NULL)) ||
- (drag_type == DND_DRAG_TYPE_PERSONA_ID &&
- priv->view_features & EMPATHY_INDIVIDUAL_VIEW_FEATURE_PERSONA_DROP))
- {
- /* If target != GDK_NONE, then we have a contact (individual or persona)
- drag. If we're pointing to a group, highlight it. Otherwise, if the
- contact we're pointing to is in a group, highlight that. Otherwise,
- set the drag position to before the first row for a drag into
- the "non-group" at the top.
- If it's an Individual:
- We only highlight things if the contact is from a different
- Individual view, or if this Individual view has
- FEATURE_GROUPS_CHANGE. This prevents highlighting in Individual views
- which don't have FEATURE_GROUPS_CHANGE, but do have
- FEATURE_INDIVIDUAL_DRAG and FEATURE_INDIVIDUAL_DROP.
- If it's a Persona:
- We only highlight things if we have FEATURE_PERSONA_DROP.
- */
- GtkTreeIter group_iter;
- gboolean is_group;
- GtkTreePath *group_path;
- gtk_tree_model_get (model, &iter,
- EMPATHY_INDIVIDUAL_STORE_COL_IS_GROUP, &is_group, -1);
- if (is_group)
- {
- group_iter = iter;
- }
- else
- {
- if (gtk_tree_model_iter_parent (model, &group_iter, &iter))
- gtk_tree_model_get (model, &group_iter,
- EMPATHY_INDIVIDUAL_STORE_COL_IS_GROUP, &is_group, -1);
- }
- if (is_group)
- {
- gdk_drag_status (context, GDK_ACTION_MOVE, time_);
- group_path = gtk_tree_model_get_path (model, &group_iter);
- gtk_tree_view_set_drag_dest_row (GTK_TREE_VIEW (widget),
- group_path, GTK_TREE_VIEW_DROP_INTO_OR_BEFORE);
- gtk_tree_path_free (group_path);
- }
- else
- {
- group_path = gtk_tree_path_new_first ();
- gdk_drag_status (context, GDK_ACTION_MOVE, time_);
- gtk_tree_view_set_drag_dest_row (GTK_TREE_VIEW (widget),
- group_path, GTK_TREE_VIEW_DROP_BEFORE);
- }
- }
-
- if (!is_different && !cleanup)
- return retval;
-
- 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_INDIVIDUAL_VIEW (widget);
- g_object_add_weak_pointer (G_OBJECT (widget), (gpointer *) &dm->view);
- dm->path = gtk_tree_path_copy (path);
-
- dm->timeout_id = g_timeout_add_seconds (1,
- (GSourceFunc) individual_view_drag_motion_cb, dm);
- }
-
- return retval;
-}
-
-static void
-individual_view_drag_begin (GtkWidget *widget,
- GdkDragContext *context)
-{
- EmpathyIndividualViewPriv *priv;
- GtkTreeSelection *selection;
- GtkTreeModel *model;
- GtkTreePath *path;
- GtkTreeIter iter;
-
- priv = GET_PRIV (widget);
-
- selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (widget));
- if (!gtk_tree_selection_get_selected (selection, &model, &iter))
- return;
-
- GTK_WIDGET_CLASS (empathy_individual_view_parent_class)->drag_begin (widget,
- context);
-
- 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
-individual_view_drag_data_get (GtkWidget *widget,
- GdkDragContext *context,
- GtkSelectionData *selection,
- guint info,
- guint time_)
-{
- EmpathyIndividualViewPriv *priv;
- GtkTreePath *src_path;
- GtkTreeIter iter;
- GtkTreeModel *model;
- FolksIndividual *individual;
- const gchar *individual_id;
-
- priv = GET_PRIV (widget);
-
- model = gtk_tree_view_get_model (GTK_TREE_VIEW (widget));
- if (priv->drag_row == NULL)
- return;
-
- src_path = gtk_tree_row_reference_get_path (priv->drag_row);
- if (src_path == NULL)
- return;
-
- if (!gtk_tree_model_get_iter (model, &iter, src_path))
- {
- gtk_tree_path_free (src_path);
- return;
- }
-
- gtk_tree_path_free (src_path);
-
- individual =
- empathy_individual_view_dup_selected (EMPATHY_INDIVIDUAL_VIEW (widget));
- if (individual == NULL)
- return;
-
- individual_id = folks_individual_get_id (individual);
-
- if (info == DND_DRAG_TYPE_INDIVIDUAL_ID)
- {
- gtk_selection_data_set (selection,
- gdk_atom_intern ("text/x-individual-id", FALSE), 8,
- (guchar *) individual_id, strlen (individual_id) + 1);
- }
-
- g_object_unref (individual);
-}
-
-static void
-individual_view_drag_end (GtkWidget *widget,
- GdkDragContext *context)
-{
- EmpathyIndividualViewPriv *priv;
-
- priv = GET_PRIV (widget);
-
- GTK_WIDGET_CLASS (empathy_individual_view_parent_class)->drag_end (widget,
- context);
-
- if (priv->drag_row)
- {
- gtk_tree_row_reference_free (priv->drag_row);
- priv->drag_row = NULL;
- }
-
- if (priv->auto_scroll_timeout_id != 0)
- {
- g_source_remove (priv->auto_scroll_timeout_id);
- priv->auto_scroll_timeout_id = 0;
- }
-}
-
-static gboolean
-individual_view_drag_drop (GtkWidget *widget,
- GdkDragContext *drag_context,
- gint x,
- gint y,
- guint time_)
-{
- return FALSE;
-}
-
-typedef struct
-{
- EmpathyIndividualView *view;
- guint button;
- guint32 time;
-} MenuPopupData;
-
-static void
-menu_deactivate_cb (GtkMenuShell *menushell,
- gpointer user_data)
-{
- /* FIXME: we shouldn't have to disconnec the signal (bgo #641327) */
- g_signal_handlers_disconnect_by_func (menushell,
- menu_deactivate_cb, user_data);
-
- gtk_menu_detach (GTK_MENU (menushell));
-}
-
-static gboolean
-individual_view_popup_menu_idle_cb (gpointer user_data)
-{
- MenuPopupData *data = user_data;
- GtkWidget *menu;
-
- menu = empathy_individual_view_get_individual_menu (data->view);
- if (menu == NULL)
- menu = empathy_individual_view_get_group_menu (data->view);
-
- if (menu != NULL)
- {
- gtk_menu_attach_to_widget (GTK_MENU (menu), GTK_WIDGET (data->view),
- NULL);
- gtk_widget_show (menu);
- gtk_menu_popup (GTK_MENU (menu), NULL, NULL, NULL, NULL, data->button,
- data->time);
-
- /* menu is initially unowned but gtk_menu_attach_to_widget() taked its
- * floating ref. We can either wait that the treeview releases its ref
- * when it will be destroyed (when leaving Empathy) or explicitely
- * detach the menu when it's not displayed any more.
- * We go for the latter as we don't want to keep useless menus in memory
- * during the whole lifetime of Empathy. */
- g_signal_connect (menu, "deactivate", G_CALLBACK (menu_deactivate_cb),
- NULL);
- }
-
- g_slice_free (MenuPopupData, data);
-
- return FALSE;
-}
-
-static gboolean
-individual_view_button_press_event_cb (EmpathyIndividualView *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 (individual_view_popup_menu_idle_cb, data);
- }
-
- return FALSE;
-}
-
-static gboolean
-individual_view_key_press_event_cb (EmpathyIndividualView *view,
- GdkEventKey *event,
- gpointer user_data)
-{
- if (event->keyval == GDK_KEY_Menu)
- {
- MenuPopupData *data;
-
- data = g_slice_new (MenuPopupData);
- data->view = view;
- data->button = 0;
- data->time = event->time;
- g_idle_add (individual_view_popup_menu_idle_cb, data);
- } else if (event->keyval == GDK_KEY_F2) {
- FolksIndividual *individual;
-
- g_return_val_if_fail (EMPATHY_IS_INDIVIDUAL_VIEW (view), FALSE);
-
- individual = empathy_individual_view_dup_selected (view);
- if (individual == NULL)
- return FALSE;
-
- empathy_individual_edit_dialog_show (individual, NULL);
-
- g_object_unref (individual);
- }
-
- return FALSE;
-}
-
-static void
-individual_view_row_activated (GtkTreeView *view,
- GtkTreePath *path,
- GtkTreeViewColumn *column)
-{
- EmpathyIndividualViewPriv *priv = GET_PRIV (view);
- FolksIndividual *individual;
- EmpathyContact *contact;
- GtkTreeModel *model;
- GtkTreeIter iter;
-
- if (!(priv->individual_features & EMPATHY_INDIVIDUAL_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_INDIVIDUAL_STORE_COL_INDIVIDUAL, &individual, -1);
-
- if (individual == NULL)
- return;
-
- /* Determine which Persona to chat to, by choosing the most available one. */
- contact = empathy_contact_dup_best_for_action (individual,
- EMPATHY_ACTION_CHAT);
-
- if (contact != NULL)
- {
- DEBUG ("Starting a chat");
-
- empathy_chat_with_contact (contact,
- gtk_get_current_event_time ());
- }
-
- g_object_unref (individual);
- tp_clear_object (&contact);
-}
-
-static void
-individual_view_call_activated_cb (EmpathyCellRendererActivatable *cell,
- const gchar *path_string,
- EmpathyIndividualView *view)
-{
- EmpathyIndividualViewPriv *priv = GET_PRIV (view);
- GtkWidget *menu;
- GtkTreeModel *model;
- GtkTreeIter iter;
- FolksIndividual *individual;
- GdkEventButton *event;
- GtkMenuShell *shell;
- GtkWidget *item;
-
- if (!(priv->view_features & EMPATHY_INDIVIDUAL_VIEW_FEATURE_INDIVIDUAL_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_INDIVIDUAL_STORE_COL_INDIVIDUAL, &individual, -1);
- if (individual == NULL)
- return;
-
- event = (GdkEventButton *) gtk_get_current_event ();
-
- menu = empathy_context_menu_new (GTK_WIDGET (view));
- shell = GTK_MENU_SHELL (menu);
-
- /* audio */
- item = empathy_individual_audio_call_menu_item_new (individual);
- gtk_menu_shell_append (shell, item);
- gtk_widget_show (item);
-
- /* video */
- item = empathy_individual_video_call_menu_item_new (individual);
- gtk_menu_shell_append (shell, item);
- gtk_widget_show (item);
-
- gtk_widget_show (menu);
- gtk_menu_popup (GTK_MENU (menu), NULL, NULL, NULL, NULL,
- event->button, event->time);
-
- g_object_unref (individual);
-}
-
-static void
-individual_view_cell_set_background (EmpathyIndividualView *view,
- GtkCellRenderer *cell,
- gboolean is_group,
- gboolean is_active)
-{
- if (!is_group && is_active)
- {
- GtkStyleContext *style;
- GdkRGBA color;
-
- style = gtk_widget_get_style_context (GTK_WIDGET (view));
-
- gtk_style_context_get_background_color (style, GTK_STATE_FLAG_SELECTED,
- &color);
-
- /* 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.
- */
- empathy_make_color_whiter (&color);
-
- g_object_set (cell, "cell-background-rgba", &color, NULL);
- }
- else
- g_object_set (cell, "cell-background-rgba", NULL, NULL);
-}
-
-static void
-individual_view_pixbuf_cell_data_func (GtkTreeViewColumn *tree_column,
- GtkCellRenderer *cell,
- GtkTreeModel *model,
- GtkTreeIter *iter,
- EmpathyIndividualView *view)
-{
- GdkPixbuf *pixbuf;
- gboolean is_group;
- gboolean is_active;
-
- gtk_tree_model_get (model, iter,
- EMPATHY_INDIVIDUAL_STORE_COL_IS_GROUP, &is_group,
- EMPATHY_INDIVIDUAL_STORE_COL_IS_ACTIVE, &is_active,
- EMPATHY_INDIVIDUAL_STORE_COL_ICON_STATUS, &pixbuf, -1);
-
- g_object_set (cell,
- "visible", !is_group,
- "pixbuf", pixbuf,
- NULL);
-
- tp_clear_object (&pixbuf);
-
- individual_view_cell_set_background (view, cell, is_group, is_active);
-}
-
-static void
-individual_view_group_icon_cell_data_func (GtkTreeViewColumn *tree_column,
- GtkCellRenderer *cell,
- GtkTreeModel *model,
- GtkTreeIter *iter,
- EmpathyIndividualView *view)
-{
- GdkPixbuf *pixbuf = NULL;
- gboolean is_group;
- gchar *name;
-
- gtk_tree_model_get (model, iter,
- EMPATHY_INDIVIDUAL_STORE_COL_IS_GROUP, &is_group,
- EMPATHY_INDIVIDUAL_STORE_COL_NAME, &name, -1);
-
- if (!is_group)
- goto out;
-
- if (!tp_strdiff (name, EMPATHY_INDIVIDUAL_STORE_FAVORITE))
- {
- pixbuf = tpaw_pixbuf_from_icon_name ("emblem-favorite",
- GTK_ICON_SIZE_MENU);
- }
- else if (!tp_strdiff (name, EMPATHY_INDIVIDUAL_STORE_PEOPLE_NEARBY))
- {
- pixbuf = tpaw_pixbuf_from_icon_name ("im-local-xmpp",
- GTK_ICON_SIZE_MENU);
- }
-
-out:
- g_object_set (cell,
- "visible", pixbuf != NULL,
- "pixbuf", pixbuf,
- NULL);
-
- tp_clear_object (&pixbuf);
-
- g_free (name);
-}
-
-static void
-individual_view_audio_call_cell_data_func (GtkTreeViewColumn *tree_column,
- GtkCellRenderer *cell,
- GtkTreeModel *model,
- GtkTreeIter *iter,
- EmpathyIndividualView *view)
-{
- gboolean is_group;
- gboolean is_active;
- gboolean can_audio, can_video;
-
- gtk_tree_model_get (model, iter,
- EMPATHY_INDIVIDUAL_STORE_COL_IS_GROUP, &is_group,
- EMPATHY_INDIVIDUAL_STORE_COL_IS_ACTIVE, &is_active,
- EMPATHY_INDIVIDUAL_STORE_COL_CAN_AUDIO_CALL, &can_audio,
- EMPATHY_INDIVIDUAL_STORE_COL_CAN_VIDEO_CALL, &can_video, -1);
-
- g_object_set (cell,
- "visible", !is_group && (can_audio || can_video),
- "icon-name", can_video ? EMPATHY_IMAGE_VIDEO_CALL : EMPATHY_IMAGE_VOIP,
- NULL);
-
- individual_view_cell_set_background (view, cell, is_group, is_active);
-}
-
-static void
-individual_view_avatar_cell_data_func (GtkTreeViewColumn *tree_column,
- GtkCellRenderer *cell,
- GtkTreeModel *model,
- GtkTreeIter *iter,
- EmpathyIndividualView *view)
-{
- GdkPixbuf *pixbuf;
- gboolean show_avatar;
- gboolean is_group;
- gboolean is_active;
-
- gtk_tree_model_get (model, iter,
- EMPATHY_INDIVIDUAL_STORE_COL_PIXBUF_AVATAR, &pixbuf,
- EMPATHY_INDIVIDUAL_STORE_COL_PIXBUF_AVATAR_VISIBLE, &show_avatar,
- EMPATHY_INDIVIDUAL_STORE_COL_IS_GROUP, &is_group,
- EMPATHY_INDIVIDUAL_STORE_COL_IS_ACTIVE, &is_active, -1);
-
- g_object_set (cell,
- "visible", !is_group && show_avatar,
- "pixbuf", pixbuf,
- NULL);
-
- tp_clear_object (&pixbuf);
-
- individual_view_cell_set_background (view, cell, is_group, is_active);
-}
-
-static void
-individual_view_text_cell_data_func (GtkTreeViewColumn *tree_column,
- GtkCellRenderer *cell,
- GtkTreeModel *model,
- GtkTreeIter *iter,
- EmpathyIndividualView *view)
-{
- gboolean is_group;
- gboolean is_active;
-
- gtk_tree_model_get (model, iter,
- EMPATHY_INDIVIDUAL_STORE_COL_IS_GROUP, &is_group,
- EMPATHY_INDIVIDUAL_STORE_COL_IS_ACTIVE, &is_active, -1);
-
- individual_view_cell_set_background (view, cell, is_group, is_active);
-}
-
-static void
-individual_view_expander_cell_data_func (GtkTreeViewColumn *column,
- GtkCellRenderer *cell,
- GtkTreeModel *model,
- GtkTreeIter *iter,
- EmpathyIndividualView *view)
-{
- gboolean is_group;
- gboolean is_active;
-
- gtk_tree_model_get (model, iter,
- EMPATHY_INDIVIDUAL_STORE_COL_IS_GROUP, &is_group,
- EMPATHY_INDIVIDUAL_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
- (gtk_tree_view_column_get_tree_view (column)), 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);
-
- individual_view_cell_set_background (view, cell, is_group, is_active);
-}
-
-static void
-individual_view_row_expand_or_collapse_cb (EmpathyIndividualView *view,
- GtkTreeIter *iter,
- GtkTreePath *path,
- gpointer user_data)
-{
- EmpathyIndividualViewPriv *priv = GET_PRIV (view);
- GtkTreeModel *model;
- gchar *name;
- gboolean expanded;
-
- if (!(priv->view_features & EMPATHY_INDIVIDUAL_VIEW_FEATURE_GROUPS_SAVE))
- return;
-
- model = gtk_tree_view_get_model (GTK_TREE_VIEW (view));
-
- gtk_tree_model_get (model, iter,
- EMPATHY_INDIVIDUAL_STORE_COL_NAME, &name, -1);
-
- expanded = GPOINTER_TO_INT (user_data);
- empathy_contact_group_set_expanded (name, expanded);
-
- g_free (name);
-}
-
-static gboolean
-individual_view_start_search_cb (EmpathyIndividualView *view,
- gpointer data)
-{
- EmpathyIndividualViewPriv *priv = GET_PRIV (view);
-
- if (priv->search_widget == NULL)
- return FALSE;
-
- empathy_individual_view_start_search (view);
-
- return TRUE;
-}
-
-static void
-individual_view_search_text_notify_cb (TpawLiveSearch *search,
- GParamSpec *pspec,
- EmpathyIndividualView *view)
-{
- EmpathyIndividualViewPriv *priv = GET_PRIV (view);
- GtkTreePath *path;
- GtkTreeViewColumn *focus_column;
- GtkTreeModel *model;
- GtkTreeIter iter;
- gboolean set_cursor = FALSE;
-
- gtk_tree_model_filter_refilter (priv->filter);
-
- /* Set cursor on the first contact. If it is already set on a group,
- * set it on its first child contact. Note that first child of a group
- * is its separator, that's why we actually set to the 2nd
- */
-
- model = gtk_tree_view_get_model (GTK_TREE_VIEW (view));
- gtk_tree_view_get_cursor (GTK_TREE_VIEW (view), &path, &focus_column);
-
- if (path == NULL)
- {
- path = gtk_tree_path_new_from_string ("0:1");
- set_cursor = TRUE;
- }
- else if (gtk_tree_path_get_depth (path) < 2)
- {
- gboolean is_group;
-
- gtk_tree_model_get_iter (model, &iter, path);
- gtk_tree_model_get (model, &iter,
- EMPATHY_INDIVIDUAL_STORE_COL_IS_GROUP, &is_group,
- -1);
-
- if (is_group)
- {
- gtk_tree_path_down (path);
- gtk_tree_path_next (path);
- set_cursor = TRUE;
- }
- }
-
- if (set_cursor)
- {
- /* FIXME: Workaround for GTK bug #621651, we have to make sure the path is
- * valid. */
- if (gtk_tree_model_get_iter (model, &iter, path))
- {
- gtk_tree_view_set_cursor (GTK_TREE_VIEW (view), path, focus_column,
- FALSE);
- }
- }
-
- gtk_tree_path_free (path);
-}
-
-static void
-individual_view_search_activate_cb (GtkWidget *search,
- EmpathyIndividualView *view)
-{
- GtkTreePath *path;
- GtkTreeViewColumn *focus_column;
-
- gtk_tree_view_get_cursor (GTK_TREE_VIEW (view), &path, &focus_column);
- if (path != NULL)
- {
- gtk_tree_view_row_activated (GTK_TREE_VIEW (view), path, focus_column);
- gtk_tree_path_free (path);
-
- gtk_widget_hide (search);
- }
-}
-
-static gboolean
-individual_view_search_key_navigation_cb (GtkWidget *search,
- GdkEvent *event,
- EmpathyIndividualView *view)
-{
- GdkEvent *new_event;
- gboolean ret = FALSE;
-
- new_event = gdk_event_copy (event);
- gtk_widget_grab_focus (GTK_WIDGET (view));
- ret = gtk_widget_event (GTK_WIDGET (view), new_event);
- gtk_widget_grab_focus (search);
-
- gdk_event_free (new_event);
-
- return ret;
-}
-
-static void
-individual_view_search_hide_cb (TpawLiveSearch *search,
- EmpathyIndividualView *view)
-{
- EmpathyIndividualViewPriv *priv = GET_PRIV (view);
- GtkTreeModel *model;
- GtkTreePath *cursor_path;
- GtkTreeIter iter;
- gboolean valid = FALSE;
-
- /* block expand or collapse handlers, they would write the
- * expand or collapsed setting to file otherwise */
- g_signal_handlers_block_by_func (view,
- individual_view_row_expand_or_collapse_cb, GINT_TO_POINTER (TRUE));
- g_signal_handlers_block_by_func (view,
- individual_view_row_expand_or_collapse_cb, GINT_TO_POINTER (FALSE));
-
- /* restore which groups are expanded and which are not */
- model = gtk_tree_view_get_model (GTK_TREE_VIEW (view));
- for (valid = gtk_tree_model_get_iter_first (model, &iter);
- valid; valid = gtk_tree_model_iter_next (model, &iter))
- {
- gboolean is_group;
- gchar *name = NULL;
- GtkTreePath *path;
-
- gtk_tree_model_get (model, &iter,
- EMPATHY_INDIVIDUAL_STORE_COL_NAME, &name,
- EMPATHY_INDIVIDUAL_STORE_COL_IS_GROUP, &is_group,
- -1);
-
- if (!is_group)
- {
- g_free (name);
- continue;
- }
-
- path = gtk_tree_model_get_path (model, &iter);
- if ((priv->view_features &
- EMPATHY_INDIVIDUAL_VIEW_FEATURE_GROUPS_SAVE) == 0 ||
- empathy_contact_group_get_expanded (name))
- {
- gtk_tree_view_expand_row (GTK_TREE_VIEW (view), path, TRUE);
- }
- else
- {
- gtk_tree_view_collapse_row (GTK_TREE_VIEW (view), path);
- }
-
- gtk_tree_path_free (path);
- g_free (name);
- }
-
- /* unblock expand or collapse handlers */
- g_signal_handlers_unblock_by_func (view,
- individual_view_row_expand_or_collapse_cb, GINT_TO_POINTER (TRUE));
- g_signal_handlers_unblock_by_func (view,
- individual_view_row_expand_or_collapse_cb, GINT_TO_POINTER (FALSE));
-
- /* keep the selected contact visible */
- gtk_tree_view_get_cursor (GTK_TREE_VIEW (view), &cursor_path, NULL);
-
- if (cursor_path != NULL)
- gtk_tree_view_scroll_to_cell (GTK_TREE_VIEW (view), cursor_path, NULL,
- FALSE, 0, 0);
-
- gtk_tree_path_free (cursor_path);
-}
-
-static void
-individual_view_search_show_cb (TpawLiveSearch *search,
- EmpathyIndividualView *view)
-{
- /* block expand or collapse handlers during expand all, they would
- * write the expand or collapsed setting to file otherwise */
- g_signal_handlers_block_by_func (view,
- individual_view_row_expand_or_collapse_cb, GINT_TO_POINTER (TRUE));
-
- gtk_tree_view_expand_all (GTK_TREE_VIEW (view));
-
- g_signal_handlers_unblock_by_func (view,
- individual_view_row_expand_or_collapse_cb, GINT_TO_POINTER (TRUE));
-}
-
-static gboolean
-expand_idle_foreach_cb (GtkTreeModel *model,
- GtkTreePath *path,
- GtkTreeIter *iter,
- EmpathyIndividualView *self)
-{
- EmpathyIndividualViewPriv *priv;
- gboolean is_group;
- gpointer should_expand;
- gchar *name;
-
- /* We only want groups */
- if (gtk_tree_path_get_depth (path) > 1)
- return FALSE;
-
- gtk_tree_model_get (model, iter,
- EMPATHY_INDIVIDUAL_STORE_COL_IS_GROUP, &is_group,
- EMPATHY_INDIVIDUAL_STORE_COL_NAME, &name,
- -1);
-
- if (!is_group)
- {
- g_free (name);
- return FALSE;
- }
-
- priv = GET_PRIV (self);
-
- if (g_hash_table_lookup_extended (priv->expand_groups, name, NULL,
- &should_expand))
- {
- if (GPOINTER_TO_INT (should_expand))
- gtk_tree_view_expand_row (GTK_TREE_VIEW (self), path, FALSE);
- else
- gtk_tree_view_collapse_row (GTK_TREE_VIEW (self), path);
-
- g_hash_table_remove (priv->expand_groups, name);
- }
-
- g_free (name);
-
- return FALSE;
-}
-
-static gboolean
-individual_view_expand_idle_cb (EmpathyIndividualView *self)
-{
- EmpathyIndividualViewPriv *priv = GET_PRIV (self);
-
- g_signal_handlers_block_by_func (self,
- individual_view_row_expand_or_collapse_cb, GINT_TO_POINTER (TRUE));
- g_signal_handlers_block_by_func (self,
- individual_view_row_expand_or_collapse_cb, GINT_TO_POINTER (FALSE));
-
- /* The store/filter could've been removed while we were in the idle queue */
- if (priv->filter != NULL)
- {
- gtk_tree_model_foreach (GTK_TREE_MODEL (priv->filter),
- (GtkTreeModelForeachFunc) expand_idle_foreach_cb, self);
- }
-
- g_signal_handlers_unblock_by_func (self,
- individual_view_row_expand_or_collapse_cb, GINT_TO_POINTER (FALSE));
- g_signal_handlers_unblock_by_func (self,
- individual_view_row_expand_or_collapse_cb, GINT_TO_POINTER (TRUE));
-
- /* Empty the table of groups to expand/contract, since it may contain groups
- * which no longer exist in the tree view. This can happen after going
- * offline, for example. */
- g_hash_table_remove_all (priv->expand_groups);
- priv->expand_groups_idle_handler = 0;
- g_object_unref (self);
-
- return FALSE;
-}
-
-static void
-individual_view_row_has_child_toggled_cb (GtkTreeModel *model,
- GtkTreePath *path,
- GtkTreeIter *iter,
- EmpathyIndividualView *view)
-{
- EmpathyIndividualViewPriv *priv = GET_PRIV (view);
- gboolean should_expand, is_group = FALSE;
- gchar *name = NULL;
- gpointer will_expand;
-
- gtk_tree_model_get (model, iter,
- EMPATHY_INDIVIDUAL_STORE_COL_IS_GROUP, &is_group,
- EMPATHY_INDIVIDUAL_STORE_COL_NAME, &name,
- -1);
-
- if (!is_group || TPAW_STR_EMPTY (name))
- {
- g_free (name);
- return;
- }
-
- should_expand = (priv->view_features &
- EMPATHY_INDIVIDUAL_VIEW_FEATURE_GROUPS_SAVE) == 0 ||
- (priv->search_widget != NULL &&
- gtk_widget_get_visible (priv->search_widget)) ||
- empathy_contact_group_get_expanded (name);
-
- /* FIXME: It doesn't work to call gtk_tree_view_expand_row () from within
- * gtk_tree_model_filter_refilter (). We add the rows to expand/contract to
- * a hash table, and expand or contract them as appropriate all at once in
- * an idle handler which iterates over all the group rows. */
- if (!g_hash_table_lookup_extended (priv->expand_groups, name, NULL,
- &will_expand) ||
- GPOINTER_TO_INT (will_expand) != should_expand)
- {
- g_hash_table_insert (priv->expand_groups, g_strdup (name),
- GINT_TO_POINTER (should_expand));
-
- if (priv->expand_groups_idle_handler == 0)
- {
- priv->expand_groups_idle_handler =
- g_idle_add ((GSourceFunc) individual_view_expand_idle_cb,
- g_object_ref (view));
- }
- }
-
- g_free (name);
-}
-
-static gboolean
-individual_view_is_visible_individual (EmpathyIndividualView *self,
- FolksIndividual *individual,
- gboolean is_online,
- gboolean is_searching,
- const gchar *group,
- gboolean is_fake_group,
- guint event_count)
-{
- EmpathyIndividualViewPriv *priv = GET_PRIV (self);
- TpawLiveSearch *live = TPAW_LIVE_SEARCH (priv->search_widget);
- GeeSet *personas;
- GeeIterator *iter;
- gboolean is_favorite;
-
- /* Always display individuals having pending events */
- if (event_count > 0)
- return TRUE;
-
- /* We're only giving the visibility wrt filtering here, not things like
- * presence. */
- if (!priv->show_untrusted &&
- folks_individual_get_trust_level (individual) == FOLKS_TRUST_LEVEL_NONE)
- {
- return FALSE;
- }
-
- if (!priv->show_uninteresting)
- {
- gboolean contains_interesting_persona = FALSE;
-
- /* Hide all individuals which consist entirely of uninteresting
- * personas */
- personas = folks_individual_get_personas (individual);
- iter = gee_iterable_iterator (GEE_ITERABLE (personas));
- while (!contains_interesting_persona && gee_iterator_next (iter))
- {
- FolksPersona *persona = gee_iterator_get (iter);
-
- if (empathy_folks_persona_is_interesting (persona))
- contains_interesting_persona = TRUE;
-
- g_clear_object (&persona);
- }
- g_clear_object (&iter);
-
- if (!contains_interesting_persona)
- return FALSE;
- }
-
- is_favorite = folks_favourite_details_get_is_favourite (
- FOLKS_FAVOURITE_DETAILS (individual));
- if (!is_searching) {
- if (is_favorite && is_fake_group &&
- !tp_strdiff (group, EMPATHY_INDIVIDUAL_STORE_FAVORITE))
- /* Always display favorite contacts in the favorite group */
- return TRUE;
-
- return (priv->show_offline || is_online);
- }
-
- return empathy_individual_match_string (individual,
- tpaw_live_search_get_text (live),
- tpaw_live_search_get_words (live));
-}
-
-static gchar *
-get_group (GtkTreeModel *model,
- GtkTreeIter *iter,
- gboolean *is_fake)
-{
- GtkTreeIter parent_iter;
- gchar *name = NULL;
-
- *is_fake = FALSE;
-
- if (!gtk_tree_model_iter_parent (model, &parent_iter, iter))
- return NULL;
-
- gtk_tree_model_get (model, &parent_iter,
- EMPATHY_INDIVIDUAL_STORE_COL_NAME, &name,
- EMPATHY_INDIVIDUAL_STORE_COL_IS_FAKE_GROUP, is_fake,
- -1);
-
- return name;
-}
-
-
-static gboolean
-individual_view_filter_visible_func (GtkTreeModel *model,
- GtkTreeIter *iter,
- gpointer user_data)
-{
- EmpathyIndividualView *self = EMPATHY_INDIVIDUAL_VIEW (user_data);
- EmpathyIndividualViewPriv *priv = GET_PRIV (self);
- FolksIndividual *individual = NULL;
- gboolean is_group, is_separator, valid;
- GtkTreeIter child_iter;
- gboolean visible, is_online;
- gboolean is_searching = TRUE;
- guint event_count;
-
- if (priv->custom_filter != NULL)
- return priv->custom_filter (model, iter, priv->custom_filter_data);
-
- if (priv->search_widget == NULL ||
- !gtk_widget_get_visible (priv->search_widget))
- is_searching = FALSE;
-
- gtk_tree_model_get (model, iter,
- EMPATHY_INDIVIDUAL_STORE_COL_IS_GROUP, &is_group,
- EMPATHY_INDIVIDUAL_STORE_COL_IS_SEPARATOR, &is_separator,
- EMPATHY_INDIVIDUAL_STORE_COL_IS_ONLINE, &is_online,
- EMPATHY_INDIVIDUAL_STORE_COL_INDIVIDUAL, &individual,
- EMPATHY_INDIVIDUAL_STORE_COL_EVENT_COUNT, &event_count,
- -1);
-
- if (individual != NULL)
- {
- gchar *group;
- gboolean is_fake_group;
-
- group = get_group (model, iter, &is_fake_group);
-
- visible = individual_view_is_visible_individual (self, individual,
- is_online, is_searching, group, is_fake_group, event_count);
-
- g_object_unref (individual);
- g_free (group);
-
- return visible;
- }
-
- if (is_separator)
- return TRUE;
-
- /* Not a contact, not a separator, must be a group */
- g_return_val_if_fail (is_group, FALSE);
-
- /* only show groups which are not empty */
- for (valid = gtk_tree_model_iter_children (model, &child_iter, iter);
- valid; valid = gtk_tree_model_iter_next (model, &child_iter))
- {
- gchar *group;
- gboolean is_fake_group;
-
- gtk_tree_model_get (model, &child_iter,
- EMPATHY_INDIVIDUAL_STORE_COL_INDIVIDUAL, &individual,
- EMPATHY_INDIVIDUAL_STORE_COL_IS_ONLINE, &is_online,
- EMPATHY_INDIVIDUAL_STORE_COL_EVENT_COUNT, &event_count,
- -1);
-
- if (individual == NULL)
- continue;
-
- group = get_group (model, &child_iter, &is_fake_group);
-
- visible = individual_view_is_visible_individual (self, individual,
- is_online, is_searching, group, is_fake_group, event_count);
-
- g_object_unref (individual);
- g_free (group);
-
- /* show group if it has at least one visible contact in it */
- if (visible)
- return TRUE;
- }
-
- return FALSE;
-}
-
-static gchar * empathy_individual_view_dup_selected_group (
- EmpathyIndividualView *view,
- gboolean *is_fake_group);
-
-static void
-text_edited_cb (GtkCellRendererText *cellrenderertext,
- gchar *path,
- gchar *name,
- EmpathyIndividualView *self)
-{
- EmpathyIndividualViewPriv *priv = GET_PRIV (self);
- gchar *old_name, *new_name;
-
- g_object_set (priv->text_renderer, "editable", FALSE, NULL);
-
- new_name = g_strdup (name);
- g_strstrip (new_name);
-
- if (tp_str_empty (new_name))
- goto out;
-
- old_name = empathy_individual_view_dup_selected_group (self, NULL);
- g_return_if_fail (old_name != NULL);
-
- if (tp_strdiff (old_name, new_name))
- {
- EmpathyConnectionAggregator *aggregator;
-
- DEBUG ("rename group '%s' to '%s'", old_name, new_name);
-
- aggregator = empathy_connection_aggregator_dup_singleton ();
-
- empathy_connection_aggregator_rename_group (aggregator, old_name,
- new_name);
- g_object_unref (aggregator);
- }
-
- g_free (old_name);
-out:
- g_free (new_name);
-}
-
-static void
-text_renderer_editing_cancelled_cb (GtkCellRenderer *renderer,
- EmpathyIndividualView *self)
-{
- EmpathyIndividualViewPriv *priv = GET_PRIV (self);
-
- g_object_set (priv->text_renderer, "editable", FALSE, NULL);
-}
-
-static void
-individual_view_constructed (GObject *object)
-{
- EmpathyIndividualView *view = EMPATHY_INDIVIDUAL_VIEW (object);
- EmpathyIndividualViewPriv *priv = GET_PRIV (view);
- GtkCellRenderer *cell;
- GtkTreeViewColumn *col;
- guint i;
-
- /* Setup view */
- g_object_set (view,
- "headers-visible", FALSE,
- "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) individual_view_pixbuf_cell_data_func,
- view, NULL);
-
- g_object_set (cell,
- "xpad", 5,
- "ypad", 1,
- "visible", FALSE,
- NULL);
-
- /* Group icon */
- 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) individual_view_group_icon_cell_data_func,
- view, NULL);
-
- g_object_set (cell,
- "xpad", 0,
- "ypad", 0,
- "visible", FALSE,
- "width", 16,
- "height", 16,
- NULL);
-
- /* Name */
- priv->text_renderer = empathy_cell_renderer_text_new ();
- gtk_tree_view_column_pack_start (col, priv->text_renderer, TRUE);
- gtk_tree_view_column_set_cell_data_func (col, priv->text_renderer,
- (GtkTreeCellDataFunc) individual_view_text_cell_data_func, view, NULL);
-
- gtk_tree_view_column_add_attribute (col, priv->text_renderer,
- "name", EMPATHY_INDIVIDUAL_STORE_COL_NAME);
- gtk_tree_view_column_add_attribute (col, priv->text_renderer,
- "text", EMPATHY_INDIVIDUAL_STORE_COL_NAME);
- gtk_tree_view_column_add_attribute (col, priv->text_renderer,
- "presence-type", EMPATHY_INDIVIDUAL_STORE_COL_PRESENCE_TYPE);
- gtk_tree_view_column_add_attribute (col, priv->text_renderer,
- "status", EMPATHY_INDIVIDUAL_STORE_COL_STATUS);
- gtk_tree_view_column_add_attribute (col, priv->text_renderer,
- "is_group", EMPATHY_INDIVIDUAL_STORE_COL_IS_GROUP);
- gtk_tree_view_column_add_attribute (col, priv->text_renderer,
- "compact", EMPATHY_INDIVIDUAL_STORE_COL_COMPACT);
- gtk_tree_view_column_add_attribute (col, priv->text_renderer,
- "client-types", EMPATHY_INDIVIDUAL_STORE_COL_CLIENT_TYPES);
-
- g_signal_connect (priv->text_renderer, "editing-canceled",
- G_CALLBACK (text_renderer_editing_cancelled_cb), view);
- g_signal_connect (priv->text_renderer, "edited",
- G_CALLBACK (text_edited_cb), view);
-
- /* Audio Call Icon */
- cell = empathy_cell_renderer_activatable_new ();
- gtk_tree_view_column_pack_start (col, cell, FALSE);
- gtk_tree_view_column_set_cell_data_func (col, cell,
- (GtkTreeCellDataFunc) individual_view_audio_call_cell_data_func,
- view, NULL);
-
- g_object_set (cell, "visible", FALSE, NULL);
-
- g_signal_connect (cell, "path-activated",
- G_CALLBACK (individual_view_call_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) individual_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) individual_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);
- }
-}
-
-static void
-individual_view_set_view_features (EmpathyIndividualView *view,
- EmpathyIndividualFeatureFlags features)
-{
- EmpathyIndividualViewPriv *priv = GET_PRIV (view);
- gboolean has_tooltip;
-
- g_return_if_fail (EMPATHY_IS_INDIVIDUAL_VIEW (view));
-
- priv->view_features = features;
-
- /* Setting reorderable is a hack that gets us row previews as drag icons
- for free. We override all the drag handlers. It's tricky to get the
- position of the drag icon right in drag_begin. GtkTreeView has special
- voodoo for it, so we let it do the voodoo that he do (but only if dragging
- is enabled).
- */
- gtk_tree_view_set_reorderable (GTK_TREE_VIEW (view),
- (features & EMPATHY_INDIVIDUAL_VIEW_FEATURE_INDIVIDUAL_DRAG));
-
- /* Update DnD source/dest */
- if (features & EMPATHY_INDIVIDUAL_VIEW_FEATURE_INDIVIDUAL_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_INDIVIDUAL_VIEW_FEATURE_INDIVIDUAL_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));
- }
-
- /* Update has-tooltip */
- has_tooltip =
- (features & EMPATHY_INDIVIDUAL_VIEW_FEATURE_INDIVIDUAL_TOOLTIP) != 0;
- gtk_widget_set_has_tooltip (GTK_WIDGET (view), has_tooltip);
-}
-
-static void
-individual_view_dispose (GObject *object)
-{
- EmpathyIndividualView *view = EMPATHY_INDIVIDUAL_VIEW (object);
- EmpathyIndividualViewPriv *priv = GET_PRIV (view);
-
- tp_clear_object (&priv->store);
- tp_clear_object (&priv->filter);
- tp_clear_object (&priv->tooltip_widget);
-
- empathy_individual_view_set_live_search (view, NULL);
-
- G_OBJECT_CLASS (empathy_individual_view_parent_class)->dispose (object);
-}
-
-static void
-individual_view_finalize (GObject *object)
-{
- EmpathyIndividualViewPriv *priv = GET_PRIV (object);
-
- if (priv->expand_groups_idle_handler != 0)
- g_source_remove (priv->expand_groups_idle_handler);
- g_hash_table_unref (priv->expand_groups);
-
- G_OBJECT_CLASS (empathy_individual_view_parent_class)->finalize (object);
-}
-
-static void
-individual_view_get_property (GObject *object,
- guint param_id,
- GValue *value,
- GParamSpec *pspec)
-{
- EmpathyIndividualViewPriv *priv;
-
- priv = GET_PRIV (object);
-
- switch (param_id)
- {
- case PROP_STORE:
- g_value_set_object (value, priv->store);
- break;
- case PROP_VIEW_FEATURES:
- g_value_set_flags (value, priv->view_features);
- break;
- case PROP_INDIVIDUAL_FEATURES:
- g_value_set_flags (value, priv->individual_features);
- break;
- case PROP_SHOW_OFFLINE:
- g_value_set_boolean (value, priv->show_offline);
- break;
- case PROP_SHOW_UNTRUSTED:
- g_value_set_boolean (value, priv->show_untrusted);
- break;
- case PROP_SHOW_UNINTERESTING:
- g_value_set_boolean (value, priv->show_uninteresting);
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, pspec);
- break;
- };
-}
-
-static void
-individual_view_set_property (GObject *object,
- guint param_id,
- const GValue *value,
- GParamSpec *pspec)
-{
- EmpathyIndividualView *view = EMPATHY_INDIVIDUAL_VIEW (object);
- EmpathyIndividualViewPriv *priv = GET_PRIV (object);
-
- switch (param_id)
- {
- case PROP_STORE:
- empathy_individual_view_set_store (view, g_value_get_object (value));
- break;
- case PROP_VIEW_FEATURES:
- individual_view_set_view_features (view, g_value_get_flags (value));
- break;
- case PROP_INDIVIDUAL_FEATURES:
- priv->individual_features = g_value_get_flags (value);
- break;
- case PROP_SHOW_OFFLINE:
- empathy_individual_view_set_show_offline (view,
- g_value_get_boolean (value));
- break;
- case PROP_SHOW_UNTRUSTED:
- empathy_individual_view_set_show_untrusted (view,
- g_value_get_boolean (value));
- break;
- case PROP_SHOW_UNINTERESTING:
- empathy_individual_view_set_show_uninteresting (view,
- g_value_get_boolean (value));
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, pspec);
- break;
- };
-}
-
-static void
-empathy_individual_view_class_init (EmpathyIndividualViewClass *klass)
-{
- GObjectClass *object_class = G_OBJECT_CLASS (klass);
- GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);
- GtkTreeViewClass *tree_view_class = GTK_TREE_VIEW_CLASS (klass);
-
- object_class->constructed = individual_view_constructed;
- object_class->dispose = individual_view_dispose;
- object_class->finalize = individual_view_finalize;
- object_class->get_property = individual_view_get_property;
- object_class->set_property = individual_view_set_property;
-
- widget_class->drag_data_received = individual_view_drag_data_received;
- widget_class->drag_drop = individual_view_drag_drop;
- widget_class->drag_begin = individual_view_drag_begin;
- widget_class->drag_data_get = individual_view_drag_data_get;
- widget_class->drag_end = individual_view_drag_end;
- widget_class->drag_motion = individual_view_drag_motion;
-
- /* We use the class method to let user of this widget to connect to
- * the signal and stop emission of the signal so the default handler
- * won't be called. */
- tree_view_class->row_activated = individual_view_row_activated;
-
- klass->drag_individual_received = real_drag_individual_received_cb;
-
- signals[DRAG_INDIVIDUAL_RECEIVED] =
- g_signal_new ("drag-individual-received",
- G_OBJECT_CLASS_TYPE (klass),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (EmpathyIndividualViewClass, drag_individual_received),
- NULL, NULL,
- g_cclosure_marshal_generic,
- G_TYPE_NONE, 4, G_TYPE_UINT, FOLKS_TYPE_INDIVIDUAL,
- G_TYPE_STRING, G_TYPE_STRING);
-
- signals[DRAG_PERSONA_RECEIVED] =
- g_signal_new ("drag-persona-received",
- G_OBJECT_CLASS_TYPE (klass),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (EmpathyIndividualViewClass, drag_persona_received),
- NULL, NULL,
- g_cclosure_marshal_generic,
- G_TYPE_BOOLEAN, 3, G_TYPE_UINT, FOLKS_TYPE_PERSONA, FOLKS_TYPE_INDIVIDUAL);
-
- 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_INDIVIDUAL_STORE,
- G_PARAM_READWRITE));
- g_object_class_install_property (object_class,
- PROP_VIEW_FEATURES,
- g_param_spec_flags ("view-features",
- "Features of the view",
- "Flags for all enabled features",
- EMPATHY_TYPE_INDIVIDUAL_VIEW_FEATURE_FLAGS,
- EMPATHY_INDIVIDUAL_VIEW_FEATURE_NONE, G_PARAM_READWRITE));
- g_object_class_install_property (object_class,
- PROP_INDIVIDUAL_FEATURES,
- g_param_spec_flags ("individual-features",
- "Features of the individual menu",
- "Flags for all enabled features for the menu",
- EMPATHY_TYPE_INDIVIDUAL_FEATURE_FLAGS,
- EMPATHY_INDIVIDUAL_FEATURE_NONE, 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_UNTRUSTED,
- g_param_spec_boolean ("show-untrusted",
- "Show Untrusted Individuals",
- "Whether the view should display untrusted individuals; "
- "those who could not be who they say they are.",
- TRUE, G_PARAM_READWRITE));
- g_object_class_install_property (object_class,
- PROP_SHOW_UNINTERESTING,
- g_param_spec_boolean ("show-uninteresting",
- "Show Uninteresting Individuals",
- "Whether the view should not filter out individuals using "
- "empathy_folks_persona_is_interesting.",
- FALSE, G_PARAM_READWRITE));
-
- g_type_class_add_private (object_class, sizeof (EmpathyIndividualViewPriv));
-}
-
-static void
-empathy_individual_view_init (EmpathyIndividualView *view)
-{
- EmpathyIndividualViewPriv *priv = G_TYPE_INSTANCE_GET_PRIVATE (view,
- EMPATHY_TYPE_INDIVIDUAL_VIEW, EmpathyIndividualViewPriv);
-
- view->priv = priv;
-
- priv->show_untrusted = TRUE;
- priv->show_uninteresting = FALSE;
-
- /* Get saved group states. */
- empathy_contact_groups_get_all ();
-
- priv->expand_groups = g_hash_table_new_full (g_str_hash, g_str_equal,
- (GDestroyNotify) g_free, NULL);
-
- gtk_tree_view_set_row_separator_func (GTK_TREE_VIEW (view),
- empathy_individual_store_row_separator_func, NULL, NULL);
-
- /* Connect to tree view signals rather than override. */
- g_signal_connect (view, "button-press-event",
- G_CALLBACK (individual_view_button_press_event_cb), NULL);
- g_signal_connect (view, "key-press-event",
- G_CALLBACK (individual_view_key_press_event_cb), NULL);
- g_signal_connect (view, "row-expanded",
- G_CALLBACK (individual_view_row_expand_or_collapse_cb),
- GINT_TO_POINTER (TRUE));
- g_signal_connect (view, "row-collapsed",
- G_CALLBACK (individual_view_row_expand_or_collapse_cb),
- GINT_TO_POINTER (FALSE));
- g_signal_connect (view, "query-tooltip",
- G_CALLBACK (individual_view_query_tooltip_cb), NULL);
-}
-
-EmpathyIndividualView *
-empathy_individual_view_new (EmpathyIndividualStore *store,
- EmpathyIndividualViewFeatureFlags view_features,
- EmpathyIndividualFeatureFlags individual_features)
-{
- g_return_val_if_fail (EMPATHY_IS_INDIVIDUAL_STORE (store), NULL);
-
- return g_object_new (EMPATHY_TYPE_INDIVIDUAL_VIEW,
- "store", store,
- "individual-features", individual_features,
- "view-features", view_features, NULL);
-}
-
-FolksIndividual *
-empathy_individual_view_dup_selected (EmpathyIndividualView *view)
-{
- GtkTreeSelection *selection;
- GtkTreeIter iter;
- GtkTreeModel *model;
- FolksIndividual *individual;
-
- g_return_val_if_fail (EMPATHY_IS_INDIVIDUAL_VIEW (view), NULL);
-
- 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_INDIVIDUAL_STORE_COL_INDIVIDUAL, &individual, -1);
-
- return individual;
-}
-
-static gchar *
-empathy_individual_view_dup_selected_group (EmpathyIndividualView *view,
- gboolean *is_fake_group)
-{
- GtkTreeSelection *selection;
- GtkTreeIter iter;
- GtkTreeModel *model;
- gboolean is_group;
- gchar *name;
- gboolean fake;
-
- g_return_val_if_fail (EMPATHY_IS_INDIVIDUAL_VIEW (view), NULL);
-
- 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_INDIVIDUAL_STORE_COL_IS_GROUP, &is_group,
- EMPATHY_INDIVIDUAL_STORE_COL_NAME, &name,
- EMPATHY_INDIVIDUAL_STORE_COL_IS_FAKE_GROUP, &fake, -1);
-
- if (!is_group)
- {
- g_free (name);
- return NULL;
- }
-
- if (is_fake_group != NULL)
- *is_fake_group = fake;
-
- return name;
-}
-
-enum
-{
- REMOVE_DIALOG_RESPONSE_CANCEL = 0,
- REMOVE_DIALOG_RESPONSE_DELETE,
-};
-
-static int
-individual_view_remove_dialog_show (GtkWindow *parent,
- const gchar *message,
- const gchar *secondary_text)
-{
- GtkWidget *dialog;
- gboolean res;
-
- dialog = gtk_message_dialog_new (parent, GTK_DIALOG_MODAL,
- GTK_MESSAGE_QUESTION, GTK_BUTTONS_NONE, "%s", message);
-
- gtk_dialog_add_buttons (GTK_DIALOG (dialog),
- GTK_STOCK_CANCEL, REMOVE_DIALOG_RESPONSE_CANCEL,
- GTK_STOCK_DELETE, REMOVE_DIALOG_RESPONSE_DELETE, NULL);
- gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (dialog),
- "%s", secondary_text);
-
- gtk_widget_show (dialog);
-
- res = gtk_dialog_run (GTK_DIALOG (dialog));
- gtk_widget_destroy (dialog);
-
- return res;
-}
-
-static void
-individual_view_group_remove_activate_cb (GtkMenuItem *menuitem,
- EmpathyIndividualView *view)
-{
- gchar *group;
-
- group = empathy_individual_view_dup_selected_group (view, NULL);
- if (group != NULL)
- {
- gchar *text;
- GtkWindow *parent;
-
- text =
- g_strdup_printf (_("Do you really want to remove the group '%s'?"),
- group);
- parent = tpaw_get_toplevel_window (GTK_WIDGET (view));
- if (individual_view_remove_dialog_show (parent, _("Removing group"),
- text) == REMOVE_DIALOG_RESPONSE_DELETE)
- {
- EmpathyIndividualManager *manager =
- empathy_individual_manager_dup_singleton ();
- empathy_individual_manager_remove_group (manager, group);
- g_object_unref (G_OBJECT (manager));
- }
-
- g_free (text);
- }
-
- g_free (group);
-}
-
-static void
-individual_view_group_rename_activate_cb (GtkMenuItem *menuitem,
- EmpathyIndividualView *self)
-{
- EmpathyIndividualViewPriv *priv = GET_PRIV (self);
- GtkTreePath *path;
- GtkTreeIter iter;
- GtkTreeSelection *selection;
- GtkTreeModel *model;
-
- selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (self));
- if (!gtk_tree_selection_get_selected (selection, &model, &iter))
- return;
- path = gtk_tree_model_get_path (model, &iter);
-
- g_object_set (G_OBJECT (priv->text_renderer), "editable", TRUE, NULL);
-
- gtk_tree_view_set_enable_search (GTK_TREE_VIEW (self), FALSE);
- gtk_widget_grab_focus (GTK_WIDGET (self));
- gtk_tree_view_set_cursor (GTK_TREE_VIEW (self), path,
- gtk_tree_view_get_column (GTK_TREE_VIEW (self), 0), TRUE);
-
- gtk_tree_path_free (path);
-}
-
-GtkWidget *
-empathy_individual_view_get_group_menu (EmpathyIndividualView *view)
-{
- EmpathyIndividualViewPriv *priv = GET_PRIV (view);
- gchar *group;
- GtkWidget *menu;
- GtkWidget *item;
- GtkWidget *image;
- gboolean is_fake_group;
-
- g_return_val_if_fail (EMPATHY_IS_INDIVIDUAL_VIEW (view), NULL);
-
- if (!(priv->view_features & (EMPATHY_INDIVIDUAL_VIEW_FEATURE_GROUPS_RENAME |
- EMPATHY_INDIVIDUAL_VIEW_FEATURE_GROUPS_REMOVE)))
- return NULL;
-
- group = empathy_individual_view_dup_selected_group (view, &is_fake_group);
- if (!group || is_fake_group)
- {
- /* We can't alter fake groups */
- g_free (group);
- return NULL;
- }
-
- menu = gtk_menu_new ();
-
- if (priv->view_features & EMPATHY_INDIVIDUAL_VIEW_FEATURE_GROUPS_RENAME)
- {
- item = gtk_menu_item_new_with_mnemonic (_("Re_name"));
- gtk_menu_shell_append (GTK_MENU_SHELL (menu), item);
- gtk_widget_show (item);
- g_signal_connect (item, "activate",
- G_CALLBACK (individual_view_group_rename_activate_cb), view);
- }
-
- if (priv->view_features & EMPATHY_INDIVIDUAL_VIEW_FEATURE_GROUPS_REMOVE)
- {
- 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 (individual_view_group_remove_activate_cb), view);
- }
-
- g_free (group);
-
- return menu;
-}
-
-GtkWidget *
-empathy_individual_view_get_individual_menu (EmpathyIndividualView *view)
-{
- EmpathyIndividualViewPriv *priv = GET_PRIV (view);
- FolksIndividual *individual;
- GtkWidget *menu = NULL;
-
- g_return_val_if_fail (EMPATHY_IS_INDIVIDUAL_VIEW (view), NULL);
-
- if (priv->individual_features == EMPATHY_INDIVIDUAL_FEATURE_NONE)
- /* No need to create a context menu */
- return NULL;
-
- individual = empathy_individual_view_dup_selected (view);
- if (individual == NULL)
- return NULL;
-
- if (!empathy_folks_individual_contains_contact (individual))
- goto out;
-
- menu = empathy_individual_menu_new (individual, NULL,
- priv->individual_features, priv->store);
-
-out:
- g_object_unref (individual);
-
- return menu;
-}
-
-void
-empathy_individual_view_set_live_search (EmpathyIndividualView *view,
- TpawLiveSearch *search)
-{
- EmpathyIndividualViewPriv *priv = GET_PRIV (view);
-
- /* remove old handlers if old search was not null */
- if (priv->search_widget != NULL)
- {
- g_signal_handlers_disconnect_by_func (view,
- individual_view_start_search_cb, NULL);
-
- g_signal_handlers_disconnect_by_func (priv->search_widget,
- individual_view_search_text_notify_cb, view);
- g_signal_handlers_disconnect_by_func (priv->search_widget,
- individual_view_search_activate_cb, view);
- g_signal_handlers_disconnect_by_func (priv->search_widget,
- individual_view_search_key_navigation_cb, view);
- g_signal_handlers_disconnect_by_func (priv->search_widget,
- individual_view_search_hide_cb, view);
- g_signal_handlers_disconnect_by_func (priv->search_widget,
- individual_view_search_show_cb, view);
- g_object_unref (priv->search_widget);
- priv->search_widget = NULL;
- }
-
- /* connect handlers if new search is not null */
- if (search != NULL)
- {
- priv->search_widget = g_object_ref (search);
-
- g_signal_connect (view, "start-interactive-search",
- G_CALLBACK (individual_view_start_search_cb), NULL);
-
- g_signal_connect (priv->search_widget, "notify::text",
- G_CALLBACK (individual_view_search_text_notify_cb), view);
- g_signal_connect (priv->search_widget, "activate",
- G_CALLBACK (individual_view_search_activate_cb), view);
- g_signal_connect (priv->search_widget, "key-navigation",
- G_CALLBACK (individual_view_search_key_navigation_cb), view);
- g_signal_connect (priv->search_widget, "hide",
- G_CALLBACK (individual_view_search_hide_cb), view);
- g_signal_connect (priv->search_widget, "show",
- G_CALLBACK (individual_view_search_show_cb), view);
- }
-}
-
-gboolean
-empathy_individual_view_is_searching (EmpathyIndividualView *self)
-{
- EmpathyIndividualViewPriv *priv;
-
- g_return_val_if_fail (EMPATHY_IS_INDIVIDUAL_VIEW (self), FALSE);
-
- priv = GET_PRIV (self);
-
- return (priv->search_widget != NULL &&
- gtk_widget_get_visible (priv->search_widget));
-}
-
-gboolean
-empathy_individual_view_get_show_offline (EmpathyIndividualView *self)
-{
- EmpathyIndividualViewPriv *priv;
-
- g_return_val_if_fail (EMPATHY_IS_INDIVIDUAL_VIEW (self), FALSE);
-
- priv = GET_PRIV (self);
-
- return priv->show_offline;
-}
-
-void
-empathy_individual_view_set_show_offline (EmpathyIndividualView *self,
- gboolean show_offline)
-{
- EmpathyIndividualViewPriv *priv;
-
- g_return_if_fail (EMPATHY_IS_INDIVIDUAL_VIEW (self));
-
- priv = GET_PRIV (self);
-
- priv->show_offline = show_offline;
-
- g_object_notify (G_OBJECT (self), "show-offline");
- gtk_tree_model_filter_refilter (priv->filter);
-}
-
-gboolean
-empathy_individual_view_get_show_untrusted (EmpathyIndividualView *self)
-{
- g_return_val_if_fail (EMPATHY_IS_INDIVIDUAL_VIEW (self), FALSE);
-
- return GET_PRIV (self)->show_untrusted;
-}
-
-void
-empathy_individual_view_set_show_untrusted (EmpathyIndividualView *self,
- gboolean show_untrusted)
-{
- EmpathyIndividualViewPriv *priv;
-
- g_return_if_fail (EMPATHY_IS_INDIVIDUAL_VIEW (self));
-
- priv = GET_PRIV (self);
-
- priv->show_untrusted = show_untrusted;
-
- g_object_notify (G_OBJECT (self), "show-untrusted");
- gtk_tree_model_filter_refilter (priv->filter);
-}
-
-EmpathyIndividualStore *
-empathy_individual_view_get_store (EmpathyIndividualView *self)
-{
- g_return_val_if_fail (EMPATHY_IS_INDIVIDUAL_VIEW (self), NULL);
-
- return GET_PRIV (self)->store;
-}
-
-void
-empathy_individual_view_set_store (EmpathyIndividualView *self,
- EmpathyIndividualStore *store)
-{
- EmpathyIndividualViewPriv *priv;
-
- g_return_if_fail (EMPATHY_IS_INDIVIDUAL_VIEW (self));
- g_return_if_fail (store == NULL || EMPATHY_IS_INDIVIDUAL_STORE (store));
-
- priv = GET_PRIV (self);
-
- /* Destroy the old filter and remove the old store */
- if (priv->store != NULL)
- {
- g_signal_handlers_disconnect_by_func (priv->filter,
- individual_view_row_has_child_toggled_cb, self);
-
- gtk_tree_view_set_model (GTK_TREE_VIEW (self), NULL);
- }
-
- tp_clear_object (&priv->filter);
- tp_clear_object (&priv->store);
-
- /* Set the new store */
- priv->store = store;
-
- if (store != NULL)
- {
- g_object_ref (store);
-
- /* Create a new filter */
- priv->filter = GTK_TREE_MODEL_FILTER (gtk_tree_model_filter_new (
- GTK_TREE_MODEL (priv->store), NULL));
- gtk_tree_model_filter_set_visible_func (priv->filter,
- individual_view_filter_visible_func, self, NULL);
-
- g_signal_connect (priv->filter, "row-has-child-toggled",
- G_CALLBACK (individual_view_row_has_child_toggled_cb), self);
- gtk_tree_view_set_model (GTK_TREE_VIEW (self),
- GTK_TREE_MODEL (priv->filter));
- }
-}
-
-void
-empathy_individual_view_start_search (EmpathyIndividualView *self)
-{
- EmpathyIndividualViewPriv *priv = GET_PRIV (self);
-
- g_return_if_fail (EMPATHY_IS_INDIVIDUAL_VIEW (self));
- g_return_if_fail (priv->search_widget != NULL);
-
- if (gtk_widget_get_visible (GTK_WIDGET (priv->search_widget)))
- gtk_widget_grab_focus (GTK_WIDGET (priv->search_widget));
- else
- gtk_widget_show (GTK_WIDGET (priv->search_widget));
-}
-
-void
-empathy_individual_view_set_custom_filter (EmpathyIndividualView *self,
- GtkTreeModelFilterVisibleFunc filter,
- gpointer data)
-{
- EmpathyIndividualViewPriv *priv = GET_PRIV (self);
-
- priv->custom_filter = filter;
- priv->custom_filter_data = data;
-}
-
-void
-empathy_individual_view_refilter (EmpathyIndividualView *self)
-{
- EmpathyIndividualViewPriv *priv = GET_PRIV (self);
-
- gtk_tree_model_filter_refilter (priv->filter);
-}
-
-void
-empathy_individual_view_select_first (EmpathyIndividualView *self)
-{
- EmpathyIndividualViewPriv *priv = GET_PRIV (self);
- GtkTreeIter iter;
-
- gtk_tree_model_filter_refilter (priv->filter);
-
- if (gtk_tree_model_get_iter_first (GTK_TREE_MODEL (priv->filter), &iter))
- {
- GtkTreeSelection *selection = gtk_tree_view_get_selection (
- GTK_TREE_VIEW (self));
-
- gtk_tree_selection_select_iter (selection, &iter);
- }
-}
-
-void
-empathy_individual_view_set_show_uninteresting (EmpathyIndividualView *self,
- gboolean show_uninteresting)
-{
- EmpathyIndividualViewPriv *priv;
-
- g_return_if_fail (EMPATHY_IS_INDIVIDUAL_VIEW (self));
-
- priv = GET_PRIV (self);
-
- priv->show_uninteresting = show_uninteresting;
-
- g_object_notify (G_OBJECT (self), "show-uninteresting");
- gtk_tree_model_filter_refilter (priv->filter);
-}
diff --git a/libempathy-gtk/empathy-individual-view.h b/libempathy-gtk/empathy-individual-view.h
deleted file mode 100644
index 2fd0bce5..00000000
--- a/libempathy-gtk/empathy-individual-view.h
+++ /dev/null
@@ -1,141 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * Copyright (C) 2005-2007 Imendio AB
- * Copyright (C) 2007-2010 Collabora Ltd.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301 USA
- *
- * Authors: Mikael Hallendal <micke@imendio.com>
- * Martyn Russell <martyn@imendio.com>
- * Xavier Claessens <xclaesse@gmail.com>
- * Travis Reitter <travis.reitter@collabora.co.uk>
- */
-
-#ifndef __EMPATHY_INDIVIDUAL_VIEW_H__
-#define __EMPATHY_INDIVIDUAL_VIEW_H__
-
-#include <gtk/gtk.h>
-#include <folks/folks.h>
-#include <tp-account-widgets/tpaw-live-search.h>
-
-#include "empathy-individual-menu.h"
-#include "empathy-individual-store.h"
-
-G_BEGIN_DECLS
-#define EMPATHY_TYPE_INDIVIDUAL_VIEW (empathy_individual_view_get_type ())
-#define EMPATHY_INDIVIDUAL_VIEW(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), EMPATHY_TYPE_INDIVIDUAL_VIEW, EmpathyIndividualView))
-#define EMPATHY_INDIVIDUAL_VIEW_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), EMPATHY_TYPE_INDIVIDUAL_VIEW, EmpathyIndividualViewClass))
-#define EMPATHY_IS_INDIVIDUAL_VIEW(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), EMPATHY_TYPE_INDIVIDUAL_VIEW))
-#define EMPATHY_IS_INDIVIDUAL_VIEW_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), EMPATHY_TYPE_INDIVIDUAL_VIEW))
-#define EMPATHY_INDIVIDUAL_VIEW_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), EMPATHY_TYPE_INDIVIDUAL_VIEW, EmpathyIndividualViewClass))
-typedef struct _EmpathyIndividualView EmpathyIndividualView;
-typedef struct _EmpathyIndividualViewClass EmpathyIndividualViewClass;
-
-typedef enum
-{
- EMPATHY_INDIVIDUAL_VIEW_FEATURE_NONE = 0,
- EMPATHY_INDIVIDUAL_VIEW_FEATURE_GROUPS_SAVE = 1 << 0,
- EMPATHY_INDIVIDUAL_VIEW_FEATURE_GROUPS_RENAME = 1 << 1,
- EMPATHY_INDIVIDUAL_VIEW_FEATURE_GROUPS_REMOVE = 1 << 2,
- /* NOTE: For this to behave as expected, FEATURE_INDIVIDUAL_DRAG and
- * FEATURE_INDIVIDUAL_DROP should also be specified. */
- EMPATHY_INDIVIDUAL_VIEW_FEATURE_GROUPS_CHANGE = 1 << 3,
- EMPATHY_INDIVIDUAL_VIEW_FEATURE_INDIVIDUAL_REMOVE = 1 << 4,
- EMPATHY_INDIVIDUAL_VIEW_FEATURE_INDIVIDUAL_DROP = 1 << 5,
- EMPATHY_INDIVIDUAL_VIEW_FEATURE_INDIVIDUAL_DRAG = 1 << 6,
- EMPATHY_INDIVIDUAL_VIEW_FEATURE_INDIVIDUAL_TOOLTIP = 1 << 7,
- EMPATHY_INDIVIDUAL_VIEW_FEATURE_INDIVIDUAL_CALL = 1 << 8,
- EMPATHY_INDIVIDUAL_VIEW_FEATURE_PERSONA_DROP = 1 << 9,
- EMPATHY_INDIVIDUAL_VIEW_FEATURE_FILE_DROP = 1 << 10,
-} EmpathyIndividualViewFeatureFlags;
-
-struct _EmpathyIndividualView
-{
- GtkTreeView parent;
- gpointer priv;
-};
-
-struct _EmpathyIndividualViewClass
-{
- GtkTreeViewClass parent_class;
-
- void (* drag_individual_received) (EmpathyIndividualView *self,
- GdkDragAction action,
- FolksIndividual *individual,
- const gchar *new_group,
- const gchar *old_group);
-
- void (* drag_persona_received) (EmpathyIndividualView *self,
- GdkDragAction action,
- FolksPersona *persona,
- FolksIndividual *individual);
-};
-
-GType empathy_individual_view_get_type (void) G_GNUC_CONST;
-
-EmpathyIndividualView *empathy_individual_view_new (
- EmpathyIndividualStore *store,
- EmpathyIndividualViewFeatureFlags view_features,
- EmpathyIndividualFeatureFlags individual_features);
-
-FolksIndividual *empathy_individual_view_dup_selected (
- EmpathyIndividualView *view);
-
-GtkWidget *empathy_individual_view_get_individual_menu (
- EmpathyIndividualView *view);
-
-GtkWidget *empathy_individual_view_get_group_menu (EmpathyIndividualView *view);
-
-void empathy_individual_view_set_live_search (EmpathyIndividualView *view,
- TpawLiveSearch *search);
-
-gboolean empathy_individual_view_get_show_offline (
- EmpathyIndividualView *view);
-
-void empathy_individual_view_set_show_offline (
- EmpathyIndividualView *view,
- gboolean show_offline);
-
-gboolean empathy_individual_view_get_show_untrusted (
- EmpathyIndividualView *self);
-
-void empathy_individual_view_set_show_untrusted (EmpathyIndividualView *self,
- gboolean show_untrusted);
-
-void empathy_individual_view_set_show_uninteresting (
- EmpathyIndividualView *view,
- gboolean show_uninteresting);
-
-gboolean empathy_individual_view_is_searching (
- EmpathyIndividualView *view);
-
-EmpathyIndividualStore *empathy_individual_view_get_store (
- EmpathyIndividualView *self);
-void empathy_individual_view_set_store (EmpathyIndividualView *self,
- EmpathyIndividualStore *store);
-
-void empathy_individual_view_start_search (EmpathyIndividualView *self);
-
-void empathy_individual_view_set_custom_filter (EmpathyIndividualView *self,
- GtkTreeModelFilterVisibleFunc filter,
- gpointer data);
-
-void empathy_individual_view_refilter (EmpathyIndividualView *self);
-
-void empathy_individual_view_select_first (EmpathyIndividualView *self);
-
-G_END_DECLS
-#endif /* __EMPATHY_INDIVIDUAL_VIEW_H__ */
diff --git a/libempathy-gtk/empathy-individual-widget.c b/libempathy-gtk/empathy-individual-widget.c
deleted file mode 100644
index 41d93996..00000000
--- a/libempathy-gtk/empathy-individual-widget.c
+++ /dev/null
@@ -1,2284 +0,0 @@
-/*
- * Copyright (C) 2007-2010 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>
- * Philip Withnall <philip.withnall@collabora.co.uk>
- */
-
-#include "config.h"
-#include "empathy-individual-widget.h"
-
-#include <glib/gi18n-lib.h>
-#include <tp-account-widgets/tpaw-builder.h>
-#include <tp-account-widgets/tpaw-contactinfo-utils.h>
-#include <tp-account-widgets/tpaw-time.h>
-#include <tp-account-widgets/tpaw-utils.h>
-
-#ifdef HAVE_LIBCHAMPLAIN
-#include <champlain/champlain.h>
-#include <champlain-gtk/champlain-gtk.h>
-#endif
-
-#include "empathy-avatar-image.h"
-#include "empathy-groups-widget.h"
-#include "empathy-gtk-enum-types.h"
-#include "empathy-location.h"
-#include "empathy-request-util.h"
-#include "empathy-ui-utils.h"
-#include "empathy-utils.h"
-
-#define DEBUG_FLAG EMPATHY_DEBUG_CONTACT
-#include "empathy-debug.h"
-
-/**
- * SECTION:empathy-individual-widget
- * @title:EmpathyIndividualWidget
- * @short_description: A widget used to display and edit details about an
- * individual
- * @include: libempathy-empathy-individual-widget.h
- *
- * #EmpathyIndividualWidget is a widget which displays appropriate widgets
- * with details about an individual, also allowing changing these details,
- * if desired.
- */
-
-/**
- * EmpathyIndividualWidget:
- * @parent: parent object
- *
- * Widget which displays appropriate widgets with details about an individual,
- * also allowing changing these details, if desired.
- */
-
-#define GET_PRIV(obj) EMPATHY_GET_PRIV (obj, EmpathyIndividualWidget)
-
-typedef struct {
- FolksIndividual *individual; /* owned */
- EmpathyIndividualWidgetFlags flags;
-
- /* weak pointer to the contact whose contact details we're displaying */
- TpContact *contact;
-
- /* unowned Persona (borrowed from priv->individual) -> GtkGrid child */
- GHashTable *persona_grids;
- /* Table containing the information for the individual as whole, or NULL */
- GtkGrid *individual_grid;
-
- /* Individual */
- GtkWidget *hbox_presence;
- GtkWidget *vbox_individual_widget;
- GtkWidget *scrolled_window_individual;
- GtkWidget *viewport_individual;
- GtkWidget *vbox_individual;
-
- /* Location */
- GtkWidget *vbox_location;
- GtkWidget *subvbox_location;
- GtkWidget *grid_location;
- GtkWidget *label_location;
-#ifdef HAVE_LIBCHAMPLAIN
- GtkWidget *viewport_map;
- GtkWidget *map_view_embed;
- ChamplainView *map_view;
-#endif
-
- /* Groups */
- GtkWidget *groups_widget;
-
- /* Client types */
- GtkWidget *hbox_client_types;
-
- /* Details */
- GtkWidget *vbox_details;
- GtkWidget *grid_details;
- GtkWidget *hbox_details_requested;
- GtkWidget *details_spinner;
- GCancellable *details_cancellable; /* owned */
-} EmpathyIndividualWidgetPriv;
-
-G_DEFINE_TYPE (EmpathyIndividualWidget, empathy_individual_widget,
- GTK_TYPE_BOX);
-
-enum {
- PROP_INDIVIDUAL = 1,
- PROP_FLAGS
-};
-
-static void client_types_update (EmpathyIndividualWidget *self);
-static void remove_weak_contact (EmpathyIndividualWidget *self);
-
-static void
-details_set_up (EmpathyIndividualWidget *self)
-{
- EmpathyIndividualWidgetPriv *priv = GET_PRIV (self);
-
- gtk_widget_hide (priv->vbox_details);
-
- priv->details_spinner = gtk_spinner_new ();
- gtk_box_pack_end (GTK_BOX (priv->hbox_details_requested),
- priv->details_spinner, TRUE, TRUE, 0);
- gtk_widget_show (priv->details_spinner);
-}
-
-static void
-client_types_notify_cb (TpContact *contact,
- GParamSpec *pspec,
- EmpathyIndividualWidget *self)
-{
- client_types_update (self);
-}
-
-typedef struct {
- EmpathyIndividualWidget *widget; /* weak */
- TpContact *contact; /* owned */
-} DetailsData;
-
-static void
-update_weak_contact (EmpathyIndividualWidget *self)
-{
- EmpathyIndividualWidgetPriv *priv = GET_PRIV (self);
- TpContact *tp_contact = NULL;
-
- remove_weak_contact (self);
-
- if (priv->individual != NULL)
- {
- /* FIXME: We take the most available TpContact we find and only
- * use its details. It would be a lot better if we would get the
- * details for every TpContact in the Individual and merge them
- * all, but that requires vCard support in libfolks for it to
- * not be hideously complex. (bgo#627399) */
- GeeSet *personas;
- GeeIterator *iter;
- FolksPresenceType presence_type = FOLKS_PRESENCE_TYPE_UNSET;
-
- personas = folks_individual_get_personas (priv->individual);
- iter = gee_iterable_iterator (GEE_ITERABLE (personas));
- while (gee_iterator_next (iter))
- {
- FolksPersona *persona = gee_iterator_get (iter);
-
- /* We only want personas which have presence and a TpContact */
- if (empathy_folks_persona_is_interesting (FOLKS_PERSONA (persona)))
- {
- FolksPresenceDetails *presence;
- FolksPresenceType presence_type_cur;
-
- presence = FOLKS_PRESENCE_DETAILS (persona);
- presence_type_cur = folks_presence_details_get_presence_type (
- presence);
-
- if (tp_contact == NULL || folks_presence_details_typecmp (
- presence_type_cur, presence_type) > 0)
- {
- presence_type = presence_type_cur;
- tp_contact = tpf_persona_get_contact (TPF_PERSONA (persona));
- }
- }
-
- g_clear_object (&persona);
- }
- g_clear_object (&iter);
- }
-
- if (tp_contact != NULL)
- {
- priv->contact = tp_contact;
- g_object_add_weak_pointer (G_OBJECT (tp_contact),
- (gpointer *) &priv->contact);
-
- g_signal_connect (priv->contact, "notify::client-types",
- (GCallback) client_types_notify_cb, self);
- }
-}
-
-static void
-add_row (GtkGrid *grid,
- guint row,
- GtkWidget *title,
- GtkWidget *value)
-{
- gtk_grid_attach (grid, title, 0, row, 1, 1);
- gtk_misc_set_alignment (GTK_MISC (title), 0, 0.5);
- gtk_widget_show (title);
-
- gtk_grid_attach (grid, value, 1, row, 1, 1);
- gtk_misc_set_alignment (GTK_MISC (value), 0, 0.5);
- gtk_widget_show (value);
-}
-
-static gboolean
-channel_name_activated_cb (
- GtkLabel *label,
- gchar *uri,
- TpAccount *account)
-{
- empathy_join_muc (account, uri, empathy_get_current_action_time ());
- return TRUE;
-}
-
-static GtkWidget *
-create_channel_list_label (TpAccount *account,
- GList *info,
- guint row)
-{
- GtkWidget *label = NULL;
- GString *label_markup = g_string_new ("");
- guint i;
- GPtrArray *channels;
- GList *l;
-
- /* Is there channels? */
- channels = g_ptr_array_new ();
-
- for (l = info; l != NULL; l = l->next)
- {
- TpContactInfoField *field = l->data;
-
- if (!tp_strdiff (field->field_name, "x-irc-channel"))
- g_ptr_array_add (channels, (gpointer) field->field_value[0]);
- }
-
- if (channels->len == 0)
- goto out;
-
- for (i = 0; i < channels->len; i++)
- {
- const gchar *channel_name = g_ptr_array_index (channels, i);
- /* We abuse the URI of the link to hold the channel name. It seems to
- * be okay to just use it essentially verbatim, rather than trying to
- * ensure it's actually a valid URI. */
- gchar *escaped = g_markup_escape_text (channel_name, -1);
-
- if (i > 0)
- g_string_append (label_markup, ", ");
-
- g_string_append_printf (label_markup, "<a href='%s'>%s</a>",
- escaped, escaped);
- g_free (escaped);
- }
-
- label = gtk_label_new (NULL);
- gtk_label_set_markup (GTK_LABEL (label), label_markup->str);
- gtk_label_set_line_wrap (GTK_LABEL (label), TRUE);
-
- g_signal_connect (label, "activate-link",
- (GCallback) channel_name_activated_cb, account);
-
-out:
- g_ptr_array_unref (channels);
- g_string_free (label_markup, TRUE);
-
- return label;
-}
-static guint
-details_update_show (EmpathyIndividualWidget *self,
- TpContact *contact)
-{
- EmpathyIndividualWidgetPriv *priv = GET_PRIV (self);
- GList *info, *l;
- guint n_rows = 0;
- GtkWidget *channels_label;
- TpConnection *conn;
- TpAccount *account;
-
- info = tp_contact_dup_contact_info (contact);
- info = g_list_sort (info, (GCompareFunc) tpaw_contact_info_field_cmp);
- for (l = info; l != NULL; l = l->next)
- {
- TpContactInfoField *field = l->data;
- gchar *title;
- const gchar *value;
- TpawContactInfoFormatFunc format;
- GtkWidget *title_widget, *value_widget;
-
- if (field->field_value == NULL || field->field_value[0] == NULL)
- continue;
-
- value = field->field_value[0];
-
- if (!tpaw_contact_info_lookup_field (field->field_name,
- NULL, &format))
- {
- DEBUG ("Unhandled ContactInfo field: %s", field->field_name);
- continue;
- }
-
- /* Skip empty field */
- if (tp_str_empty (value))
- continue;
-
- /* Add Title */
- title = tpaw_contact_info_field_label (field->field_name,
- field->parameters, TRUE);
- title_widget = gtk_label_new (title);
-
- /* Add Value */
- value_widget = gtk_label_new (value);
-
- if (format != NULL)
- {
- gchar *markup;
-
- markup = format (field->field_value);
- gtk_label_set_markup (GTK_LABEL (value_widget), markup);
- g_free (markup);
- }
-
- gtk_label_set_selectable (GTK_LABEL (value_widget),
- (priv->flags & EMPATHY_INDIVIDUAL_WIDGET_FOR_TOOLTIP) ? FALSE : TRUE);
-
- add_row (GTK_GRID (priv->grid_details), n_rows, title_widget,
- value_widget);
-
- n_rows++;
- }
-
- conn = tp_contact_get_connection (contact);
- account = tp_connection_get_account (conn);
-
- channels_label = create_channel_list_label (account, info, n_rows);
-
- if (channels_label != NULL)
- {
- GtkWidget *title_widget;
-
- title_widget = gtk_label_new (_("Channels:"));
-
- add_row (GTK_GRID (priv->grid_details), n_rows, title_widget,
- channels_label);
-
- n_rows++;
- }
-
- tp_contact_info_list_free (info);
-
- return n_rows;
-}
-
-static void
-details_notify_cb (TpContact *contact,
- GParamSpec *pspec,
- EmpathyIndividualWidget *self)
-{
- EmpathyIndividualWidgetPriv *priv = GET_PRIV (self);
- guint n_rows;
-
- gtk_container_foreach (GTK_CONTAINER (priv->grid_details),
- (GtkCallback) gtk_widget_destroy, NULL);
-
- n_rows = details_update_show (self, contact);
-
- if (n_rows > 0)
- {
- gtk_widget_show (priv->vbox_details);
- gtk_widget_show (priv->grid_details);
- }
- else
- {
- gtk_widget_hide (priv->vbox_details);
- }
-
- gtk_widget_hide (priv->hbox_details_requested);
- gtk_spinner_stop (GTK_SPINNER (priv->details_spinner));
-}
-
-static void
-details_request_cb (GObject *source,
- GAsyncResult *res,
- gpointer user_data)
-{
- EmpathyIndividualWidget *self = user_data;
- EmpathyIndividualWidgetPriv *priv = GET_PRIV (self);
- TpContact *contact = (TpContact *) source;
- gboolean hide_widget = FALSE;
- GError *error = NULL;
-
- if (tp_contact_request_contact_info_finish (contact, res, &error) == TRUE)
- {
- details_notify_cb (contact, NULL, self);
- }
- else
- {
- /* If the request got cancelled it could mean the contact widget is
- * destroyed, so we should not dereference information */
- if (g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED))
- {
- g_error_free (error);
- return;
- }
-
- hide_widget = TRUE;
- g_error_free (error);
- }
-
- if (hide_widget == TRUE)
- gtk_widget_hide (GET_PRIV (self)->vbox_details);
-
- tp_clear_object (&priv->details_cancellable);
-
- tp_g_signal_connect_object (contact, "notify::contact-info",
- (GCallback) details_notify_cb, self, 0);
-}
-
-static void
-fetch_contact_information (EmpathyIndividualWidget *self)
-{
- EmpathyIndividualWidgetPriv *priv = GET_PRIV (self);
- TpConnection *connection;
-
- connection = tp_contact_get_connection (priv->contact);
-
- if (!tp_proxy_has_interface_by_id (connection,
- TP_IFACE_QUARK_CONNECTION_INTERFACE_CONTACT_INFO))
- {
- gtk_widget_hide (GET_PRIV (self)->vbox_details);
- return;
- }
-
- /* Request the Individual's info */
- gtk_widget_show (priv->vbox_details);
- gtk_widget_show (priv->hbox_details_requested);
- gtk_widget_hide (priv->grid_details);
- gtk_spinner_start (GTK_SPINNER (priv->details_spinner));
-
- if (priv->details_cancellable == NULL)
- {
- priv->details_cancellable = g_cancellable_new ();
-
- tp_contact_request_contact_info_async (priv->contact,
- priv->details_cancellable, details_request_cb, self);
- }
-}
-
-static void
-details_update (EmpathyIndividualWidget *self)
-{
- EmpathyIndividualWidgetPriv *priv = GET_PRIV (self);
-
- if (!(priv->flags & EMPATHY_INDIVIDUAL_WIDGET_SHOW_DETAILS))
- return;
-
- gtk_widget_hide (priv->vbox_details);
-
- if (priv->contact == NULL)
- update_weak_contact (self);
-
- if (priv->contact != NULL)
- {
- fetch_contact_information (self);
- }
-}
-
-static void
-groups_update (EmpathyIndividualWidget *self)
-{
- EmpathyIndividualWidgetPriv *priv = GET_PRIV (self);
-
- if (priv->flags & EMPATHY_INDIVIDUAL_WIDGET_EDIT_GROUPS &&
- priv->individual != NULL)
- {
- empathy_groups_widget_set_group_details (
- EMPATHY_GROUPS_WIDGET (priv->groups_widget),
- FOLKS_GROUP_DETAILS (priv->individual));
- gtk_widget_show (priv->groups_widget);
- }
- else
- {
- gtk_widget_hide (priv->groups_widget);
- }
-}
-
-/* Converts the Location's GHashTable's key to a user readable string */
-static const gchar *
-location_key_to_label (const gchar *key)
-{
- if (tp_strdiff (key, EMPATHY_LOCATION_COUNTRY_CODE) == FALSE)
- return _("Country ISO Code:");
- else if (tp_strdiff (key, EMPATHY_LOCATION_COUNTRY) == FALSE)
- return _("Country:");
- else if (tp_strdiff (key, EMPATHY_LOCATION_REGION) == FALSE)
- return _("State:");
- else if (tp_strdiff (key, EMPATHY_LOCATION_LOCALITY) == FALSE)
- return _("City:");
- else if (tp_strdiff (key, EMPATHY_LOCATION_AREA) == FALSE)
- return _("Area:");
- else if (tp_strdiff (key, EMPATHY_LOCATION_POSTAL_CODE) == FALSE)
- return _("Postal Code:");
- else if (tp_strdiff (key, EMPATHY_LOCATION_STREET) == FALSE)
- return _("Street:");
- else if (tp_strdiff (key, EMPATHY_LOCATION_BUILDING) == FALSE)
- return _("Building:");
- else if (tp_strdiff (key, EMPATHY_LOCATION_FLOOR) == FALSE)
- return _("Floor:");
- else if (tp_strdiff (key, EMPATHY_LOCATION_ROOM) == FALSE)
- return _("Room:");
- else if (tp_strdiff (key, EMPATHY_LOCATION_TEXT) == FALSE)
- return _("Text:");
- else if (tp_strdiff (key, EMPATHY_LOCATION_DESCRIPTION) == FALSE)
- return _("Description:");
- else if (tp_strdiff (key, EMPATHY_LOCATION_URI) == FALSE)
- return _("URI:");
- else if (tp_strdiff (key, EMPATHY_LOCATION_ACCURACY_LEVEL) == FALSE)
- return _("Accuracy Level:");
- else if (tp_strdiff (key, EMPATHY_LOCATION_ERROR) == FALSE)
- return _("Error:");
- else if (tp_strdiff (key, EMPATHY_LOCATION_VERTICAL_ERROR_M) == FALSE)
- return _("Vertical Error (meters):");
- else if (tp_strdiff (key, EMPATHY_LOCATION_HORIZONTAL_ERROR_M) == FALSE)
- return _("Horizontal Error (meters):");
- else if (tp_strdiff (key, EMPATHY_LOCATION_SPEED) == FALSE)
- return _("Speed:");
- else if (tp_strdiff (key, EMPATHY_LOCATION_BEARING) == FALSE)
- return _("Bearing:");
- else if (tp_strdiff (key, EMPATHY_LOCATION_CLIMB) == FALSE)
- return _("Climb Speed:");
- else if (tp_strdiff (key, EMPATHY_LOCATION_TIMESTAMP) == FALSE)
- return _("Last Updated on:");
- else if (tp_strdiff (key, EMPATHY_LOCATION_LON) == FALSE)
- return _("Longitude:");
- else if (tp_strdiff (key, EMPATHY_LOCATION_LAT) == FALSE)
- return _("Latitude:");
- else if (tp_strdiff (key, EMPATHY_LOCATION_ALT) == FALSE)
- return _("Altitude:");
- else
- {
- DEBUG ("Unexpected Location key: %s", key);
- return key;
- }
-}
-
-static void
-location_update (EmpathyIndividualWidget *self)
-{
- EmpathyIndividualWidgetPriv *priv = GET_PRIV (self);
- EmpathyContact *contact = NULL;
- GHashTable *location = NULL;
- GValue *value;
- GtkWidget *label;
- guint row = 0;
- static const gchar* ordered_geolocation_keys[] = {
- EMPATHY_LOCATION_TEXT,
- EMPATHY_LOCATION_URI,
- EMPATHY_LOCATION_DESCRIPTION,
- EMPATHY_LOCATION_BUILDING,
- EMPATHY_LOCATION_FLOOR,
- EMPATHY_LOCATION_ROOM,
- EMPATHY_LOCATION_STREET,
- EMPATHY_LOCATION_AREA,
- EMPATHY_LOCATION_LOCALITY,
- EMPATHY_LOCATION_REGION,
- EMPATHY_LOCATION_COUNTRY,
- NULL
- };
- int i;
- const gchar *skey;
- gboolean display_map = FALSE;
- GeeSet *personas;
- GeeIterator *iter;
-
- if (!(priv->flags & EMPATHY_INDIVIDUAL_WIDGET_SHOW_LOCATION) ||
- priv->individual == NULL)
- {
- gtk_widget_hide (priv->vbox_location);
- return;
- }
-
- /* FIXME: For the moment, we just display the first location data we can
- * find amongst the Individual's Personas. Once libfolks grows a location
- * interface, we can use that. (bgo#627400) */
-
- personas = folks_individual_get_personas (priv->individual);
- iter = gee_iterable_iterator (GEE_ITERABLE (personas));
- while (location == NULL && gee_iterator_next (iter))
- {
- FolksPersona *persona = gee_iterator_get (iter);
-
- if (empathy_folks_persona_is_interesting (persona))
- {
- TpContact *tp_contact;
-
- /* Get the contact. If it turns out to have location information, we
- * have to keep it alive for the duration of the function, since we're
- * accessing its private data. */
- tp_contact = tpf_persona_get_contact (TPF_PERSONA (persona));
- if (tp_contact != NULL)
- {
- contact = empathy_contact_dup_from_tp_contact (tp_contact);
- empathy_contact_set_persona (contact, persona);
-
- /* Try and get a location */
- location = empathy_contact_get_location (contact);
- /* if location isn't fully valid, treat the contact as
- * insufficient */
- if (location != NULL && g_hash_table_size (location) <= 0)
- {
- location = NULL;
- g_clear_object (&contact);
- }
- }
- }
- g_clear_object (&persona);
- }
- g_clear_object (&iter);
-
- if (contact == NULL || location == NULL)
- {
- gtk_widget_hide (priv->vbox_location);
- tp_clear_object (&contact);
- return;
- }
-
- value = g_hash_table_lookup (location, EMPATHY_LOCATION_TIMESTAMP);
- if (value == NULL)
- {
- gchar *loc = g_strdup_printf ("<b>%s</b>", _("Location"));
- gtk_label_set_markup (GTK_LABEL (priv->label_location), loc);
- g_free (loc);
- }
- else
- {
- gchar *user_date;
- gchar *text;
- gint64 stamp;
- gchar *tmp;
-
- stamp = g_value_get_int64 (value);
-
- user_date = tpaw_time_to_string_relative (stamp);
-
- tmp = g_strdup_printf ("<b>%s</b>", _("Location"));
- /* translators: format is "Location, $date" */
- text = g_strdup_printf (_("%s, %s"), tmp, user_date);
- g_free (tmp);
- gtk_label_set_markup (GTK_LABEL (priv->label_location), text);
- g_free (user_date);
- g_free (text);
- }
-
- /* Prepare the location information table */
- if (priv->grid_location != NULL)
- gtk_widget_destroy (priv->grid_location);
-
- priv->grid_location = gtk_grid_new ();
- gtk_box_pack_start (GTK_BOX (priv->subvbox_location),
- priv->grid_location, FALSE, FALSE, 5);
-
-
- for (i = 0; (skey = ordered_geolocation_keys[i]); i++)
- {
- const gchar* user_label;
- GValue *gvalue;
- char *svalue = NULL;
-
- gvalue = g_hash_table_lookup (location, (gpointer) skey);
- if (gvalue == NULL)
- continue;
-
- user_label = location_key_to_label (skey);
-
- label = gtk_label_new (user_label);
- gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
- gtk_grid_attach (GTK_GRID (priv->grid_location),
- label, 0, row, 1, 1);
- gtk_widget_show (label);
-
- if (G_VALUE_TYPE (gvalue) == G_TYPE_DOUBLE)
- {
- gdouble dvalue;
- dvalue = g_value_get_double (gvalue);
- svalue = g_strdup_printf ("%f", dvalue);
- }
- else if (G_VALUE_TYPE (gvalue) == G_TYPE_STRING)
- {
- svalue = g_value_dup_string (gvalue);
- }
- else if (G_VALUE_TYPE (gvalue) == G_TYPE_INT64)
- {
- gint64 time_;
-
- time_ = g_value_get_int64 (value);
- svalue = tpaw_time_to_string_utc (time_, _("%B %e, %Y at %R UTC"));
- }
-
- if (svalue != NULL)
- {
- label = gtk_label_new (svalue);
- gtk_grid_attach (GTK_GRID (priv->grid_location),
- label, 1, row, 1, 1);
- gtk_misc_set_alignment (GTK_MISC (label), 0, 0);
- gtk_widget_show (label);
-
- gtk_label_set_selectable (GTK_LABEL (label),
- (priv->flags & EMPATHY_INDIVIDUAL_WIDGET_FOR_TOOLTIP) ? FALSE :
- TRUE);
- }
-
- g_free (svalue);
- row++;
- }
-
- tp_clear_object (&contact);
-
-#ifdef HAVE_LIBCHAMPLAIN
- if ((g_hash_table_lookup (location, EMPATHY_LOCATION_LAT) != NULL) &&
- (g_hash_table_lookup (location, EMPATHY_LOCATION_LON) != NULL))
- {
- /* Cannot be displayed in tooltips until Clutter-Gtk can deal with such
- * windows */
- display_map = TRUE;
- }
-#endif
-
- if (row > 0)
- {
- /* We can display some fields */
- gtk_widget_show (priv->grid_location);
- }
- else if (display_map == FALSE)
- {
- /* Can't display either fields or map */
- gtk_widget_hide (priv->vbox_location);
- return;
- }
-
-#ifdef HAVE_LIBCHAMPLAIN
- if (display_map == TRUE)
- {
- ChamplainMarkerLayer *layer;
-
- priv->map_view_embed = gtk_champlain_embed_new ();
- priv->map_view = gtk_champlain_embed_get_view (
- GTK_CHAMPLAIN_EMBED (priv->map_view_embed));
-
- gtk_container_add (GTK_CONTAINER (priv->viewport_map),
- priv->map_view_embed);
- g_object_set (G_OBJECT (priv->map_view),
- "kinetic-mode", TRUE,
- "zoom-level", 10,
- NULL);
-
- layer = champlain_marker_layer_new ();
- champlain_view_add_layer (priv->map_view, CHAMPLAIN_LAYER (layer));
-
- /* FIXME: For now, we have to do this manually. Once libfolks grows a
- * location interface, we can use that. (bgo#627400) */
-
- personas = folks_individual_get_personas (priv->individual);
- iter = gee_iterable_iterator (GEE_ITERABLE (personas));
- while (gee_iterator_next (iter))
- {
- FolksPersona *persona = gee_iterator_get (iter);
-
- if (empathy_folks_persona_is_interesting (persona))
- {
- gdouble lat = 0.0, lon = 0.0;
- ClutterActor *marker;
- TpContact *tp_contact;
-
- /* Get the contact */
- tp_contact = tpf_persona_get_contact (TPF_PERSONA (persona));
- if (tp_contact == NULL)
- goto while_finish;
-
- contact = empathy_contact_dup_from_tp_contact (tp_contact);
- empathy_contact_set_persona (contact, persona);
-
- /* Try and get a location */
- location = empathy_contact_get_location (contact);
- if (location == NULL || g_hash_table_size (location) == 0)
- goto while_finish;
-
- /* Get this persona's latitude and longitude */
- value = g_hash_table_lookup (location, EMPATHY_LOCATION_LAT);
- if (value == NULL)
- goto while_finish;
-
- lat = g_value_get_double (value);
-
- value = g_hash_table_lookup (location, EMPATHY_LOCATION_LON);
- if (value == NULL)
- goto while_finish;
-
- lon = g_value_get_double (value);
-
- /* Add a marker to the map */
- marker = champlain_label_new_with_text (
- folks_alias_details_get_alias (FOLKS_ALIAS_DETAILS (persona)),
- NULL, NULL, NULL);
- champlain_location_set_location (CHAMPLAIN_LOCATION (marker),
- lat, lon);
- champlain_marker_layer_add_marker (layer,
- CHAMPLAIN_MARKER (marker));
- }
-
-while_finish:
- g_clear_object (&persona);
- g_clear_object (&contact);
- }
- g_clear_object (&iter);
-
- /* Zoom to show all of the markers */
- champlain_view_ensure_layers_visible (priv->map_view, FALSE);
-
- gtk_widget_show_all (priv->viewport_map);
- }
-#endif
-
- gtk_widget_show (priv->vbox_location);
-}
-
-static void
-client_types_update (EmpathyIndividualWidget *self)
-{
- EmpathyIndividualWidgetPriv *priv = GET_PRIV (self);
- const gchar * const *types;
-
- if (!(priv->flags & EMPATHY_INDIVIDUAL_WIDGET_SHOW_CLIENT_TYPES) ||
- priv->individual == NULL)
- {
- gtk_widget_hide (priv->hbox_client_types);
- return;
- }
-
- if (priv->contact == NULL)
- update_weak_contact (self);
-
- /* let's try that again... */
- if (priv->contact == NULL)
- return;
-
- types = tp_contact_get_client_types (priv->contact);
-
- if (empathy_client_types_contains_mobile_device ((GStrv) types))
- {
- gtk_widget_show (priv->hbox_client_types);
- }
- else
- {
- gtk_widget_hide (priv->hbox_client_types);
- }
-
-}
-
-static void
-remove_weak_contact (EmpathyIndividualWidget *self)
-{
- EmpathyIndividualWidgetPriv *priv = GET_PRIV (self);
-
- if (priv->contact == NULL)
- return;
-
- g_signal_handlers_disconnect_by_func (priv->contact, client_types_notify_cb,
- self);
-
- g_object_remove_weak_pointer (G_OBJECT (priv->contact),
- (gpointer *) &priv->contact);
- priv->contact = NULL;
-}
-
-static EmpathyAvatar *
-persona_dup_avatar (FolksPersona *persona)
-{
- TpContact *tp_contact;
- EmpathyContact *contact;
- EmpathyAvatar *avatar;
-
- if (!empathy_folks_persona_is_interesting (persona))
- return NULL;
-
- tp_contact = tpf_persona_get_contact (TPF_PERSONA (persona));
- if (tp_contact == NULL)
- return NULL;
-
- contact = empathy_contact_dup_from_tp_contact (tp_contact);
- empathy_contact_set_persona (contact, persona);
-
- avatar = empathy_contact_get_avatar (contact);
- if (avatar != NULL)
- empathy_avatar_ref (avatar);
- g_object_unref (contact);
-
- return avatar;
-}
-
-static EmpathyAvatar *
-individual_dup_avatar (FolksIndividual *individual)
-{
- GeeSet *personas;
- GeeIterator *iter;
- EmpathyAvatar *avatar = NULL;
-
- /* FIXME: We just choose the first Persona which has an avatar, and save that.
- * The avatar handling in EmpathyContact needs to be moved into libfolks as
- * much as possible, and this code rewritten to use FolksHasAvatar.
- * (bgo#627401) */
-
- personas = folks_individual_get_personas (individual);
- iter = gee_iterable_iterator (GEE_ITERABLE (personas));
- while (avatar == NULL && gee_iterator_next (iter))
- {
- FolksPersona *persona = gee_iterator_get (iter);
- avatar = persona_dup_avatar (persona);
-
- g_clear_object (&persona);
- }
- g_clear_object (&iter);
-
- return avatar;
-}
-
-static void
-save_avatar_menu_activate_cb (GtkWidget *widget,
- EmpathyIndividualWidget *self)
-{
- EmpathyIndividualWidgetPriv *priv = GET_PRIV (self);
- GtkWidget *dialog;
- EmpathyAvatar *avatar;
- gchar *ext = NULL, *filename;
-
- dialog = gtk_file_chooser_dialog_new (_("Save Avatar"),
- NULL,
- GTK_FILE_CHOOSER_ACTION_SAVE,
- GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
- GTK_STOCK_SAVE, GTK_RESPONSE_ACCEPT,
- NULL);
-
- gtk_file_chooser_set_do_overwrite_confirmation (GTK_FILE_CHOOSER (dialog),
- TRUE);
-
- avatar = individual_dup_avatar (priv->individual);
- if (avatar == NULL)
- return;
-
- /* look for the avatar extension */
- if (avatar->format != NULL)
- {
- gchar **splitted;
-
- splitted = g_strsplit (avatar->format, "/", 2);
- if (splitted[0] != NULL && splitted[1] != NULL)
- ext = g_strdup (splitted[1]);
-
- g_strfreev (splitted);
- }
- else
- {
- /* Avatar was loaded from the cache so was converted to PNG */
- ext = g_strdup ("png");
- }
-
- if (ext != NULL)
- {
- gchar *id;
-
- id = tp_escape_as_identifier (folks_individual_get_id (priv->individual));
-
- filename = g_strdup_printf ("%s.%s", id, ext);
- gtk_file_chooser_set_current_name (GTK_FILE_CHOOSER (dialog), filename);
-
- g_free (id);
- g_free (ext);
- g_free (filename);
- }
-
- if (gtk_dialog_run (GTK_DIALOG (dialog)) == GTK_RESPONSE_ACCEPT)
- {
- GError *error = NULL;
-
- filename = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (dialog));
-
- if (empathy_avatar_save_to_file (avatar, filename, &error) == FALSE)
- {
- /* Save error */
- GtkWidget *error_dialog;
-
- error_dialog = gtk_message_dialog_new (NULL, 0,
- GTK_MESSAGE_ERROR, GTK_BUTTONS_CLOSE,
- _("Unable to save avatar"));
-
- gtk_message_dialog_format_secondary_text (
- GTK_MESSAGE_DIALOG (error_dialog), "%s", error->message);
-
- g_signal_connect (error_dialog, "response",
- (GCallback) gtk_widget_destroy, NULL);
-
- gtk_window_present (GTK_WINDOW (error_dialog));
-
- g_clear_error (&error);
- }
-
- g_free (filename);
- }
-
- gtk_widget_destroy (dialog);
- empathy_avatar_unref (avatar);
-}
-
-static gboolean
-popup_avatar_menu (EmpathyIndividualWidget *self,
- GtkWidget *parent,
- GdkEventButton *event)
-{
- EmpathyIndividualWidgetPriv *priv = GET_PRIV (self);
- GtkWidget *menu, *item;
- EmpathyAvatar *avatar;
- gint button, event_time;
-
- if (priv->individual == NULL)
- return FALSE;
-
- avatar = individual_dup_avatar (priv->individual);
- if (avatar == NULL)
- return FALSE;
- empathy_avatar_unref (avatar);
-
- menu = empathy_context_menu_new (parent);
-
- /* Add "Save as..." entry */
- item = gtk_image_menu_item_new_from_stock (GTK_STOCK_SAVE_AS, NULL);
- gtk_menu_shell_append (GTK_MENU_SHELL (menu), item);
- gtk_widget_show (item);
-
- g_signal_connect (item, "activate",
- (GCallback) save_avatar_menu_activate_cb, self);
-
- if (event != NULL)
- {
- button = event->button;
- event_time = event->time;
- }
- else
- {
- button = 0;
- event_time = gtk_get_current_event_time ();
- }
-
- gtk_menu_popup (GTK_MENU (menu), NULL, NULL, NULL, NULL, button, event_time);
-
- return TRUE;
-}
-
-static gboolean
-avatar_widget_popup_menu_cb (GtkWidget *widget,
- EmpathyIndividualWidget *self)
-{
- return popup_avatar_menu (self, widget, NULL);
-}
-
-static gboolean
-avatar_widget_button_press_event_cb (GtkWidget *widget,
- GdkEventButton *event,
- EmpathyIndividualWidget *self)
-{
- /* Ignore double-clicks and triple-clicks */
- if (event->button == 3 && event->type == GDK_BUTTON_PRESS)
- return popup_avatar_menu (self, widget, event);
-
- return FALSE;
-}
-
-/* Returns the TpAccount for the user as a convenience. Note that it has a ref
- * added. */
-static TpAccount *
-individual_is_user (FolksIndividual *individual)
-{
- GeeSet *personas;
- GeeIterator *iter;
- TpAccount *retval = NULL;
-
- /* FIXME: This should move into libfolks when libfolks grows a way of
- * determining "self". (bgo#627402) */
- personas = folks_individual_get_personas (individual);
- iter = gee_iterable_iterator (GEE_ITERABLE (personas));
- while (gee_iterator_next (iter))
- {
- FolksPersona *persona = gee_iterator_get (iter);
-
- if (TPF_IS_PERSONA (persona))
- {
- TpContact *tp_contact;
- EmpathyContact *contact = NULL;
-
- /* Get the contact */
- tp_contact = tpf_persona_get_contact (TPF_PERSONA (persona));
- if (tp_contact != NULL)
- {
- contact = empathy_contact_dup_from_tp_contact (tp_contact);
- empathy_contact_set_persona (contact, persona);
-
- /* Determine if the contact is the user */
- if (empathy_contact_is_user (contact))
- retval = g_object_ref (empathy_contact_get_account (contact));
- }
-
- g_object_unref (contact);
- }
- g_clear_object (&persona);
- }
- g_clear_object (&iter);
-
- return retval;
-}
-
-static void
-set_nickname_cb (TpAccount *account,
- GAsyncResult *result,
- gpointer user_data)
-{
- GError *error = NULL;
-
- if (tp_account_set_nickname_finish (account, result, &error) == FALSE)
- {
- DEBUG ("Failed to set Account.Nickname: %s", error->message);
- g_error_free (error);
- }
-}
-
-static gboolean
-entry_alias_focus_event_cb (GtkEditable *editable,
- GdkEventFocus *event,
- EmpathyIndividualWidget *self)
-{
- EmpathyIndividualWidgetPriv *priv = GET_PRIV (self);
-
- if (priv->individual != NULL)
- {
- const gchar *alias;
- TpAccount *account;
-
- alias = gtk_entry_get_text (GTK_ENTRY (editable));
- account = individual_is_user (priv->individual);
-
- if (account != NULL)
- {
- DEBUG ("Set Account.Nickname to %s", alias);
- tp_account_set_nickname_async (account, alias,
- (GAsyncReadyCallback) set_nickname_cb, NULL);
- g_object_unref (account);
- }
- else
- {
- folks_alias_details_set_alias (FOLKS_ALIAS_DETAILS (priv->individual),
- alias);
- }
- }
-
- return FALSE;
-}
-
-static void
-favourite_toggled_cb (GtkToggleButton *button,
- EmpathyIndividualWidget *self)
-{
- gboolean active = gtk_toggle_button_get_active (button);
- folks_favourite_details_set_is_favourite (
- FOLKS_FAVOURITE_DETAILS (GET_PRIV (self)->individual), active);
-}
-
-static void
-notify_avatar_cb (gpointer folks_object,
- GParamSpec *pspec,
- EmpathyIndividualWidget *self)
-{
- EmpathyIndividualWidgetPriv *priv = GET_PRIV (self);
- EmpathyAvatar *avatar = NULL;
- GObject *grid;
- GtkWidget *avatar_widget;
-
- if (FOLKS_IS_INDIVIDUAL (folks_object))
- {
- avatar = individual_dup_avatar (FOLKS_INDIVIDUAL (folks_object));
- grid = G_OBJECT (priv->individual_grid);
- }
- else if (FOLKS_IS_PERSONA (folks_object))
- {
- avatar = persona_dup_avatar (FOLKS_PERSONA (folks_object));
- grid = g_hash_table_lookup (priv->persona_grids, folks_object);
- }
- else
- {
- g_assert_not_reached ();
- }
-
- if (grid == NULL)
- return;
-
- avatar_widget = g_object_get_data (grid, "avatar-widget");
- empathy_avatar_image_set (EMPATHY_AVATAR_IMAGE (avatar_widget), avatar);
-
- if (avatar != NULL)
- empathy_avatar_unref (avatar);
-}
-
-static void
-notify_alias_cb (gpointer folks_object,
- GParamSpec *pspec,
- EmpathyIndividualWidget *self)
-{
- EmpathyIndividualWidgetPriv *priv = GET_PRIV (self);
- GObject *grid;
- GtkWidget *alias_widget;
-
- if (FOLKS_IS_INDIVIDUAL (folks_object))
- grid = G_OBJECT (priv->individual_grid);
- else if (FOLKS_IS_PERSONA (folks_object))
- grid = g_hash_table_lookup (priv->persona_grids, folks_object);
- else
- g_assert_not_reached ();
-
- if (grid == NULL)
- return;
-
- alias_widget = g_object_get_data (grid, "alias-widget");
-
- if (GTK_IS_ENTRY (alias_widget))
- {
- gtk_entry_set_text (GTK_ENTRY (alias_widget),
- folks_alias_details_get_alias (FOLKS_ALIAS_DETAILS (folks_object)));
- }
- else
- {
- gtk_label_set_label (GTK_LABEL (alias_widget),
- folks_alias_details_get_alias (FOLKS_ALIAS_DETAILS (folks_object)));
- }
-}
-
-static void
-notify_presence_cb (gpointer folks_object,
- GParamSpec *pspec,
- EmpathyIndividualWidget *self)
-{
- EmpathyIndividualWidgetPriv *priv = GET_PRIV (self);
- GObject *grid;
- GtkWidget *status_label, *state_image;
- const gchar *message;
- gchar *markup_text = NULL;
- FolksPresenceType presence;
- gboolean visible = TRUE;
-
- if (FOLKS_IS_INDIVIDUAL (folks_object))
- grid = G_OBJECT (priv->individual_grid);
- else if (FOLKS_IS_PERSONA (folks_object))
- grid = g_hash_table_lookup (priv->persona_grids, folks_object);
- else
- g_assert_not_reached ();
-
- if (grid == NULL)
- return;
-
- status_label = g_object_get_data (grid, "status-label");
- state_image = g_object_get_data (grid, "state-image");
-
- presence = folks_presence_details_get_presence_type (
- FOLKS_PRESENCE_DETAILS (folks_object));
- if (presence == FOLKS_PRESENCE_TYPE_UNKNOWN ||
- presence == FOLKS_PRESENCE_TYPE_ERROR)
- {
- /* Don't display anything if we don't know the presence */
- visible = FALSE;
- goto out;
- }
-
- /* FIXME: Default messages should be moved into libfolks (bgo#627403) */
- message = folks_presence_details_get_presence_message (
- FOLKS_PRESENCE_DETAILS (folks_object));
- if (TPAW_STR_EMPTY (message))
- {
- message = empathy_presence_get_default_message (presence);
- }
-
- if (message != NULL)
- markup_text = tpaw_add_link_markup (message);
- gtk_label_set_markup (GTK_LABEL (status_label), markup_text);
- g_free (markup_text);
-
- gtk_image_set_from_icon_name (GTK_IMAGE (state_image),
- empathy_icon_name_for_presence (presence),
- GTK_ICON_SIZE_BUTTON);
-
-out:
- gtk_widget_set_visible (status_label, visible);
- gtk_widget_set_visible (state_image, visible);
-}
-
-static void
-notify_is_favourite_cb (gpointer folks_object,
- GParamSpec *pspec,
- EmpathyIndividualWidget *self)
-{
- EmpathyIndividualWidgetPriv *priv = GET_PRIV (self);
- GObject *grid;
- GtkWidget *favourite_widget;
-
- if (FOLKS_IS_INDIVIDUAL (folks_object))
- grid = G_OBJECT (priv->individual_grid);
- else if (FOLKS_IS_PERSONA (folks_object))
- grid = g_hash_table_lookup (priv->persona_grids, folks_object);
- else
- g_assert_not_reached ();
-
- if (grid == NULL)
- return;
-
- favourite_widget = g_object_get_data (grid, "favourite-widget");
-
- if (GTK_IS_TOGGLE_BUTTON (favourite_widget))
- {
- gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (favourite_widget),
- folks_favourite_details_get_is_favourite (
- FOLKS_FAVOURITE_DETAILS (folks_object)));
- }
-}
-
-static void
-alias_presence_avatar_favourite_set_up (EmpathyIndividualWidget *self,
- GtkGrid *grid,
- guint starting_row)
-{
- EmpathyIndividualWidgetPriv *priv = GET_PRIV (self);
- GtkWidget *label, *alias, *image, *avatar;
- guint current_row = starting_row;
-
- /* Alias */
- label = gtk_label_new (_("Alias:"));
- gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
- gtk_grid_attach (grid, label, 0, current_row, 1, 1);
- gtk_widget_show (label);
-
- /* Set up alias label/entry */
- if (priv->flags & EMPATHY_INDIVIDUAL_WIDGET_EDIT_ALIAS)
- {
- alias = gtk_entry_new ();
-
- g_signal_connect (alias, "focus-out-event",
- (GCallback) entry_alias_focus_event_cb, self);
-
- /* Make return activate the window default (the Close button) */
- gtk_entry_set_activates_default (GTK_ENTRY (alias), TRUE);
- }
- else
- {
- alias = gtk_label_new (NULL);
- gtk_label_set_selectable (GTK_LABEL (alias),
- (priv->flags & EMPATHY_INDIVIDUAL_WIDGET_FOR_TOOLTIP) ? FALSE : TRUE);
- gtk_misc_set_alignment (GTK_MISC (alias), 0.0, 0.5);
- }
-
- g_object_set_data (G_OBJECT (grid), "alias-widget", alias);
- gtk_grid_attach_next_to (grid, alias, label,
- GTK_POS_RIGHT, 1, 1);
- gtk_widget_show (alias);
-
- current_row++;
-
- /* Presence */
- priv->hbox_presence = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 6);
-
- /* Presence image */
- image = gtk_image_new_from_stock (GTK_STOCK_MISSING_IMAGE,
- GTK_ICON_SIZE_BUTTON);
- g_object_set_data (G_OBJECT (grid), "state-image", image);
- gtk_box_pack_start (GTK_BOX (priv->hbox_presence), image, FALSE,
- FALSE, 0);
- gtk_widget_show (image);
-
- label = gtk_label_new ("");
- gtk_label_set_line_wrap_mode (GTK_LABEL (label), PANGO_WRAP_WORD_CHAR);
- gtk_label_set_line_wrap (GTK_LABEL (label), TRUE);
- gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
-
- gtk_label_set_selectable (GTK_LABEL (label),
- (priv->flags & EMPATHY_INDIVIDUAL_WIDGET_FOR_TOOLTIP) ? FALSE : TRUE);
-
- g_object_set_data (G_OBJECT (grid), "status-label", label);
- gtk_box_pack_start (GTK_BOX (priv->hbox_presence), label, FALSE,
- FALSE, 0);
- gtk_widget_show (label);
-
- gtk_grid_attach (grid, priv->hbox_presence,
- 0, current_row, 2, 1);
- gtk_widget_show (priv->hbox_presence);
-
- current_row++;
-
- /* Set up favourite toggle button */
- if (priv->flags & EMPATHY_INDIVIDUAL_WIDGET_EDIT_FAVOURITE)
- {
- GtkWidget *favourite = gtk_check_button_new_with_label (_("Favorite"));
-
- g_signal_connect (favourite, "toggled",
- (GCallback) favourite_toggled_cb, self);
-
- g_object_set_data (G_OBJECT (grid), "favourite-widget", favourite);
- gtk_grid_attach (grid, favourite,
- 0, current_row, 2, 1);
- gtk_widget_show (favourite);
-
- current_row++;
- }
-
- /* Set up avatar display */
- avatar = empathy_avatar_image_new ();
-
- if (!(priv->flags & EMPATHY_INDIVIDUAL_WIDGET_FOR_TOOLTIP))
- {
- g_signal_connect (avatar, "popup-menu",
- (GCallback) avatar_widget_popup_menu_cb, self);
- g_signal_connect (avatar, "button-press-event",
- (GCallback) avatar_widget_button_press_event_cb, self);
- }
-
- g_object_set_data (G_OBJECT (grid), "avatar-widget", avatar);
- g_object_set (avatar,
- "valign", GTK_ALIGN_START,
- "margin-left", 6,
- "margin-right", 6,
- "margin-top", 6,
- "margin-bottom", 6,
- NULL);
-
- gtk_grid_attach (grid, avatar,
- 2, 0, 1, current_row);
- gtk_widget_show (avatar);
-}
-
-static void
-update_persona (EmpathyIndividualWidget *self, FolksPersona *persona)
-{
- EmpathyIndividualWidgetPriv *priv = GET_PRIV (self);
- TpContact *tp_contact;
- EmpathyContact *contact;
- TpAccount *account;
- GtkGrid *grid;
- GtkLabel *label;
- GtkImage *image;
- const gchar *id;
-
- grid = g_hash_table_lookup (priv->persona_grids, persona);
-
- g_assert (grid != NULL);
-
- tp_contact = tpf_persona_get_contact (TPF_PERSONA (persona));
- if (tp_contact == NULL)
- return;
-
- contact = empathy_contact_dup_from_tp_contact (tp_contact);
- empathy_contact_set_persona (contact, persona);
-
- account = empathy_contact_get_account (contact);
-
- /* Update account widget */
- if (account != NULL)
- {
- const gchar *name;
-
- label = g_object_get_data (G_OBJECT (grid), "account-label");
- image = g_object_get_data (G_OBJECT (grid), "account-image");
-
- name = tp_account_get_display_name (account);
- gtk_label_set_label (label, name);
-
- name = tp_account_get_icon_name (account);
- gtk_image_set_from_icon_name (image, name, GTK_ICON_SIZE_MENU);
- }
-
- /* Update id widget */
- label = g_object_get_data (G_OBJECT (grid), "id-widget");
- id = folks_persona_get_display_id (persona);
- gtk_label_set_label (label, (id != NULL) ? id : "");
-
- /* Update other widgets */
- notify_alias_cb (persona, NULL, self);
- notify_presence_cb (persona, NULL, self);
- notify_avatar_cb (persona, NULL, self);
-
- if (priv->flags & EMPATHY_INDIVIDUAL_WIDGET_EDIT_FAVOURITE)
- notify_is_favourite_cb (persona, NULL, self);
-
- g_object_unref (contact);
-}
-
-static void
-add_persona (EmpathyIndividualWidget *self,
- FolksPersona *persona)
-{
- EmpathyIndividualWidgetPriv *priv = GET_PRIV (self);
- GtkBox *hbox;
- GtkGrid *grid;
- GtkWidget *label, *account_label, *account_image, *separator;
- guint current_row = 0;
-
- if (!empathy_folks_persona_is_interesting (persona))
- return;
-
- if (priv->flags & EMPATHY_INDIVIDUAL_WIDGET_EDIT_FAVOURITE)
- grid = GTK_GRID (gtk_grid_new ());
- else
- grid = GTK_GRID (gtk_grid_new ());
-
- gtk_orientable_set_orientation (GTK_ORIENTABLE (grid), GTK_ORIENTATION_VERTICAL);
- gtk_grid_set_row_spacing (grid, 6);
- gtk_grid_set_column_spacing (grid, 6);
-
- /* Account and Identifier */
- label = gtk_label_new (_("Account:"));
- gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
- gtk_grid_attach (grid, label, 0, current_row, 1, 1);
- gtk_widget_show (label);
-
- /* Pack the protocol icon with the account name in an hbox */
- hbox = GTK_BOX (gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 6));
-
- account_label = gtk_label_new (NULL);
- gtk_label_set_selectable (GTK_LABEL (account_label),
- (priv->flags & EMPATHY_INDIVIDUAL_WIDGET_FOR_TOOLTIP) ? FALSE : TRUE);
- gtk_misc_set_alignment (GTK_MISC (account_label), 0.0, 0.5);
- gtk_widget_show (account_label);
-
- account_image = gtk_image_new ();
- gtk_widget_show (account_image);
-
- gtk_box_pack_start (hbox, account_image, FALSE, FALSE, 0);
- gtk_box_pack_start (hbox, account_label, FALSE, TRUE, 0);
-
- g_object_set_data (G_OBJECT (grid), "account-image", account_image);
- g_object_set_data (G_OBJECT (grid), "account-label", account_label);
- gtk_grid_attach_next_to (grid, GTK_WIDGET (hbox), label, GTK_POS_RIGHT, 1, 1);
- gtk_widget_show (GTK_WIDGET (hbox));
-
- current_row++;
-
- /* Translators: Identifier to connect to Instant Messaging network */
- label = gtk_label_new (_("Identifier:"));
- gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
- gtk_grid_attach (grid, label, 0, current_row, 1, 1);
- gtk_widget_show (label);
-
- /* Set up ID label */
- label = gtk_label_new (NULL);
- gtk_label_set_selectable (GTK_LABEL (label),
- (priv->flags & EMPATHY_INDIVIDUAL_WIDGET_FOR_TOOLTIP) ? FALSE : TRUE);
- gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
-
- g_object_set_data (G_OBJECT (grid), "id-widget", label);
- gtk_grid_attach (grid, label, 1, current_row, 1, 1);
- gtk_widget_show (label);
-
- current_row++;
-
- alias_presence_avatar_favourite_set_up (self, grid, current_row);
-
- /* Connect to signals and display the grid */
- g_signal_connect (persona, "notify::alias",
- (GCallback) notify_alias_cb, self);
- g_signal_connect (persona, "notify::avatar",
- (GCallback) notify_avatar_cb, self);
- g_signal_connect (persona, "notify::presence-type",
- (GCallback) notify_presence_cb, self);
- g_signal_connect (persona, "notify::presence-message",
- (GCallback) notify_presence_cb, self);
-
- if (priv->flags & EMPATHY_INDIVIDUAL_WIDGET_EDIT_FAVOURITE)
- {
- g_signal_connect (persona, "notify::is-favourite",
- (GCallback) notify_is_favourite_cb, self);
- }
-
- gtk_box_pack_start (GTK_BOX (priv->vbox_individual),
- GTK_WIDGET (grid), FALSE, TRUE, 0);
- gtk_widget_show (GTK_WIDGET (grid));
-
- /* Pack a separator after the grid */
- separator = gtk_separator_new (GTK_ORIENTATION_HORIZONTAL);
- g_object_set_data (G_OBJECT (grid), "separator", separator);
- gtk_box_pack_start (GTK_BOX (priv->vbox_individual), separator, FALSE, FALSE,
- 0);
- gtk_widget_show (separator);
-
- g_hash_table_replace (priv->persona_grids, persona, grid);
-
- /* Update the new widgets */
- update_persona (self, persona);
-}
-
-static void
-remove_persona (EmpathyIndividualWidget *self,
- FolksPersona *persona)
-{
- EmpathyIndividualWidgetPriv *priv = GET_PRIV (self);
- GtkWidget *separator;
- GtkGrid *grid;
-
- if (!empathy_folks_persona_is_interesting (persona))
- return;
-
- grid = g_hash_table_lookup (priv->persona_grids, persona);
- if (grid == NULL)
- return;
-
- g_signal_handlers_disconnect_by_func (persona, notify_alias_cb, self);
- g_signal_handlers_disconnect_by_func (persona, notify_avatar_cb, self);
- g_signal_handlers_disconnect_by_func (persona, notify_presence_cb, self);
-
- if (priv->flags & EMPATHY_INDIVIDUAL_WIDGET_EDIT_FAVOURITE)
- {
- g_signal_handlers_disconnect_by_func (persona, notify_is_favourite_cb,
- self);
- }
-
- /* Remove the separator */
- separator = g_object_get_data (G_OBJECT (grid), "separator");
- if (separator != NULL)
- gtk_container_remove (GTK_CONTAINER (priv->vbox_individual), separator);
-
- /* Remove the widget */
- gtk_container_remove (GTK_CONTAINER (priv->vbox_individual),
- GTK_WIDGET (grid));
-
- g_hash_table_remove (priv->persona_grids, persona);
-}
-
-static void
-update_individual_grid (EmpathyIndividualWidget *self)
-{
- EmpathyIndividualWidgetPriv *priv = GET_PRIV (self);
-
- notify_alias_cb (priv->individual, NULL, self);
- notify_presence_cb (priv->individual, NULL, self);
- notify_avatar_cb (priv->individual, NULL, self);
-
- if (priv->flags & EMPATHY_INDIVIDUAL_WIDGET_EDIT_FAVOURITE)
- notify_is_favourite_cb (priv->individual, NULL, self);
-}
-
-static void
-individual_grid_set_up (EmpathyIndividualWidget *self)
-{
- EmpathyIndividualWidgetPriv *priv = GET_PRIV (self);
- guint current_row = 0;
- GtkGrid *grid;
-
- grid = GTK_GRID (gtk_grid_new ());
- gtk_orientable_set_orientation (GTK_ORIENTABLE (grid), GTK_ORIENTATION_VERTICAL);
- gtk_grid_set_row_spacing (grid, 6);
- gtk_grid_set_column_spacing (grid, 6);
-
- /* We only display the number of personas in tooltips */
- if (priv->flags & EMPATHY_INDIVIDUAL_WIDGET_FOR_TOOLTIP)
- {
- gchar *message;
- GtkWidget *label;
- GeeSet *personas;
- GeeIterator *iter;
- guint num_personas = 0;
-
- /* Meta-contacts message displaying how many Telepathy personas we have */
- personas = folks_individual_get_personas (priv->individual);
- iter = gee_iterable_iterator (GEE_ITERABLE (personas));
- while (gee_iterator_next (iter))
- {
- FolksPersona *persona = gee_iterator_get (iter);
- if (empathy_folks_persona_is_interesting (persona))
- num_personas++;
-
- g_clear_object (&persona);
- }
- g_clear_object (&iter);
-
- /* Translators: the plurality applies to both instances of the word
- * "contact" */
- message = g_strdup_printf (
- ngettext ("Linked contact containing %u contact",
- "Linked contacts containing %u contacts", num_personas),
- num_personas);
- label = gtk_label_new (message);
- gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
- g_free (message);
-
- gtk_grid_attach (grid, label, 0, current_row, 2, 1);
- gtk_widget_show (label);
-
- current_row++;
- }
-
- alias_presence_avatar_favourite_set_up (self, grid, current_row);
-
- /* Display the grid */
- gtk_box_pack_start (GTK_BOX (priv->vbox_individual), GTK_WIDGET (grid),
- FALSE, TRUE, 0);
- gtk_widget_show (GTK_WIDGET (grid));
-
- priv->individual_grid = grid;
-
- /* Update the grid */
- update_individual_grid (self);
-}
-
-static void
-individual_grid_destroy (EmpathyIndividualWidget *self)
-{
- EmpathyIndividualWidgetPriv *priv = GET_PRIV (self);
-
- if (priv->individual_grid == NULL)
- return;
-
- gtk_container_remove (GTK_CONTAINER (priv->vbox_individual),
- GTK_WIDGET (priv->individual_grid));
-
-#ifdef HAVE_LIBCHAMPLAIN
- if (priv->map_view_embed != NULL)
- {
- gtk_container_remove (GTK_CONTAINER (priv->viewport_map),
- priv->map_view_embed);
-
- priv->map_view_embed = NULL;
- }
-#endif
-
- priv->individual_grid = NULL;
-}
-
-static void
-personas_changed_cb (FolksIndividual *individual,
- GeeSet *added,
- GeeSet *removed,
- EmpathyIndividualWidget *self)
-{
- EmpathyIndividualWidgetPriv *priv = GET_PRIV (self);
- GList *l, *children;
- GeeSet *personas;
- GeeIterator *iter;
- gboolean show_personas, was_showing_personas, will_show_personas, is_last;
- guint old_num_personas, new_num_personas = 0;
-
- personas = folks_individual_get_personas (individual);
- /* we'll re-use this iterator throughout */
- iter = gee_iterable_iterator (GEE_ITERABLE (personas));
-
- /* Note that old_num_personas is the number of persona gridss we were
- * displaying, not the number of Personas which were in the Individual
- * before. */
- old_num_personas = g_hash_table_size (priv->persona_grids);
-
- while (gee_iterator_next (iter))
- {
- FolksPersona *persona = gee_iterator_get (iter);
- if (empathy_folks_persona_is_interesting (persona))
- new_num_personas++;
-
- g_clear_object (&persona);
- }
-
- /*
- * What we display for various conditions:
- * - "Personas": display the alias, avatar, presence account and identifier
- * for each of the Individual's Personas. (i.e. One grid per
- * Persona.)
- * - "Individual": display the alias, avatar and presence for the Individual,
- * and a label saying "Meta-contact containing x contacts".
- * (i.e. One grid in total.)
- *
- * | SHOW_PERSONAS | !SHOW_PERSONAS
- * -------------+---------------+---------------
- * > 1 Persona | Personas | Individual
- * -------------+---------------+---------------
- * == 1 Persona | Personas | Personas
- */
- show_personas = (priv->flags & EMPATHY_INDIVIDUAL_WIDGET_SHOW_PERSONAS) != 0;
- was_showing_personas = show_personas || old_num_personas == 1;
- will_show_personas = show_personas || new_num_personas == 1;
-
- /* If both @added and @removed are NULL, we're being called manually, and we
- * need to set up the gridss for the first time. We do this simply by
- * ensuring was_showing_personas and will_show_personas are different so that
- * the code resets the UI.
- */
- if (added == NULL && removed == NULL)
- was_showing_personas = !will_show_personas;
-
- if (was_showing_personas && will_show_personas)
- {
- GeeIterator *iter_changed;
-
- /* Remove outdated Personas */
- iter_changed = gee_iterable_iterator (GEE_ITERABLE (removed));
- while (gee_iterator_next (iter_changed))
- {
- FolksPersona *persona = gee_iterator_get (iter_changed);
- remove_persona (self, persona);
- g_clear_object (&persona);
- }
- g_clear_object (&iter_changed);
-
- /* Add new Personas */
- iter_changed = gee_iterable_iterator (GEE_ITERABLE (added));
- while (gee_iterator_next (iter_changed))
- {
- FolksPersona *persona = gee_iterator_get (iter_changed);
- add_persona (self, persona);
- g_clear_object (&persona);
- }
- g_clear_object (&iter_changed);
- }
- else if (!was_showing_personas && will_show_personas)
- {
- /* Remove the old Individual grid */
- individual_grid_destroy (self);
-
- /* Set up all the Persona grids instead */
- iter = gee_iterable_iterator (GEE_ITERABLE (personas));
- while (gee_iterator_next (iter))
- {
- FolksPersona *persona = gee_iterator_get (iter);
- add_persona (self, persona);
- g_clear_object (&persona);
- }
- }
- else if (was_showing_personas && !will_show_personas)
- {
- /* Remove all Personas */
- iter = gee_iterable_iterator (GEE_ITERABLE (personas));
- while (gee_iterator_next (iter))
- {
- FolksPersona *persona = gee_iterator_get (iter);
- remove_persona (self, persona);
- g_clear_object (&persona);
- }
-
- if (removed != NULL)
- {
- GeeIterator *iter_changed;
-
- iter_changed = gee_iterable_iterator (GEE_ITERABLE (removed));
- while (gee_iterator_next (iter_changed))
- {
- FolksPersona *persona = gee_iterator_get (iter_changed);
- remove_persona (self, persona);
- g_clear_object (&persona);
- }
- g_clear_object (&iter_changed);
- }
-
- /* Set up the Individual grid instead */
- individual_grid_set_up (self);
- }
- g_clear_object (&iter);
-
- /* Hide the last separator and show the others */
- children = gtk_container_get_children (GTK_CONTAINER (priv->vbox_individual));
- children = g_list_reverse (children);
- is_last = TRUE;
-
- for (l = children; l != NULL; l = l->next)
- {
- if (GTK_IS_SEPARATOR (l->data))
- {
- gtk_widget_set_visible (GTK_WIDGET (l->data), !is_last);
- is_last = FALSE;
- }
- }
-
- g_list_free (children);
-}
-
-static void
-individual_removed_cb (FolksIndividual *individual,
- FolksIndividual *replacement_individual,
- EmpathyIndividualWidget *self)
-{
- empathy_individual_widget_set_individual (self, replacement_individual);
-}
-
-static void
-remove_individual (EmpathyIndividualWidget *self)
-{
- EmpathyIndividualWidgetPriv *priv = GET_PRIV (self);
- if (priv->individual != NULL)
- {
- GeeSet *personas;
- GeeIterator *iter;
-
- g_signal_handlers_disconnect_by_func (priv->individual,
- notify_alias_cb, self);
- g_signal_handlers_disconnect_by_func (priv->individual,
- notify_presence_cb, self);
- g_signal_handlers_disconnect_by_func (priv->individual,
- notify_avatar_cb, self);
- g_signal_handlers_disconnect_by_func (priv->individual,
- personas_changed_cb, self);
- g_signal_handlers_disconnect_by_func (priv->individual,
- individual_removed_cb, self);
-
- if (priv->flags & EMPATHY_INDIVIDUAL_WIDGET_EDIT_FAVOURITE)
- {
- g_signal_handlers_disconnect_by_func (priv->individual,
- notify_is_favourite_cb, self);
- }
-
- personas = folks_individual_get_personas (priv->individual);
- iter = gee_iterable_iterator (GEE_ITERABLE (personas));
- while (gee_iterator_next (iter))
- {
- FolksPersona *persona = gee_iterator_get (iter);
- remove_persona (self, persona);
- g_clear_object (&persona);
- }
- g_clear_object (&iter);
- individual_grid_destroy (self);
-
- if (priv->contact != NULL)
- remove_weak_contact (self);
-
- tp_clear_object (&priv->individual);
- }
-
- if (priv->details_cancellable != NULL)
- g_cancellable_cancel (priv->details_cancellable);
-}
-
-static void
-individual_update (EmpathyIndividualWidget *self)
-{
- EmpathyIndividualWidgetPriv *priv = GET_PRIV (self);
-
- /* Connect and get info from new Individual */
- if (priv->individual != NULL)
- {
- g_signal_connect (priv->individual, "notify::alias",
- (GCallback) notify_alias_cb, self);
- g_signal_connect (priv->individual, "notify::presence-type",
- (GCallback) notify_presence_cb, self);
- g_signal_connect (priv->individual, "notify::presence-message",
- (GCallback) notify_presence_cb, self);
- g_signal_connect (priv->individual, "notify::avatar",
- (GCallback) notify_avatar_cb, self);
- g_signal_connect (priv->individual, "personas-changed",
- (GCallback) personas_changed_cb, self);
- g_signal_connect (priv->individual, "removed",
- (GCallback) individual_removed_cb, self);
-
- if (priv->flags & EMPATHY_INDIVIDUAL_WIDGET_EDIT_FAVOURITE)
- {
- g_signal_connect (priv->individual, "notify::is-favourite",
- (GCallback) notify_is_favourite_cb, self);
- }
-
- /* Update individual grid */
- personas_changed_cb (priv->individual, NULL, NULL, self);
- }
-
- if (priv->individual == NULL)
- {
- gtk_widget_hide (priv->vbox_individual);
- }
- else if (priv->individual_grid != NULL)
- {
- /* We only need to update the details for the Individual as a whole */
- update_individual_grid (self);
- gtk_widget_show (priv->vbox_individual);
- }
- else
- {
- /* We need to update the details for every Persona in the Individual */
- GeeSet *personas;
- GeeIterator *iter;
-
- personas = folks_individual_get_personas (priv->individual);
- iter = gee_iterable_iterator (GEE_ITERABLE (personas));
- while (gee_iterator_next (iter))
- {
- FolksPersona *persona = gee_iterator_get (iter);
-
- if (empathy_folks_persona_is_interesting (persona))
- update_persona (self, persona);
-
- g_clear_object (&persona);
- }
- g_clear_object (&iter);
-
- gtk_widget_show (priv->vbox_individual);
- }
-}
-
-static void
-empathy_individual_widget_init (EmpathyIndividualWidget *self)
-{
- EmpathyIndividualWidgetPriv *priv;
- GtkBuilder *gui;
- gchar *filename;
-
- priv = G_TYPE_INSTANCE_GET_PRIVATE (self,
- EMPATHY_TYPE_INDIVIDUAL_WIDGET, EmpathyIndividualWidgetPriv);
- self->priv = priv;
-
- gtk_orientable_set_orientation (GTK_ORIENTABLE (self),
- GTK_ORIENTATION_VERTICAL);
-
- filename = empathy_file_lookup ("empathy-individual-widget.ui",
- "libempathy-gtk");
- gui = tpaw_builder_get_file (filename,
- "scrolled_window_individual", &priv->scrolled_window_individual,
- "viewport_individual", &priv->viewport_individual,
- "vbox_individual_widget", &priv->vbox_individual_widget,
- "vbox_individual", &priv->vbox_individual,
- "vbox_location", &priv->vbox_location,
- "subvbox_location", &priv->subvbox_location,
- "label_location", &priv->label_location,
-#ifdef HAVE_LIBCHAMPLAIN
- "viewport_map", &priv->viewport_map,
-#endif
- "groups_widget", &priv->groups_widget,
- "vbox_details", &priv->vbox_details,
- "grid_details", &priv->grid_details,
- "hbox_details_requested", &priv->hbox_details_requested,
- "hbox_client_types", &priv->hbox_client_types,
- NULL);
- g_free (filename);
-
- priv->grid_location = NULL;
-
- gtk_box_pack_start (GTK_BOX (self), priv->vbox_individual_widget, TRUE, TRUE,
- 0);
- gtk_widget_show (priv->vbox_individual_widget);
-
- priv->persona_grids = g_hash_table_new (NULL, NULL);
- priv->individual_grid = NULL;
-
- /* Create widgets */
- details_set_up (self);
-
- g_object_unref (gui);
-}
-
-static void
-constructed (GObject *object)
-{
- GObjectClass *klass = G_OBJECT_CLASS (empathy_individual_widget_parent_class);
- EmpathyIndividualWidgetPriv *priv = GET_PRIV (object);
- GtkScrolledWindow *scrolled_window =
- GTK_SCROLLED_WINDOW (priv->scrolled_window_individual);
-
- /* Allow scrolling of the list of Personas if we're showing Personas. */
- if (priv->flags & EMPATHY_INDIVIDUAL_WIDGET_SHOW_PERSONAS)
- {
- gtk_scrolled_window_set_shadow_type (scrolled_window, GTK_SHADOW_IN);
- gtk_scrolled_window_set_policy (scrolled_window,
- GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC);
- gtk_box_set_child_packing (GTK_BOX (priv->vbox_individual_widget),
- priv->scrolled_window_individual, TRUE, TRUE, 0, GTK_PACK_START);
-
- gtk_container_set_border_width (GTK_CONTAINER (priv->viewport_individual),
- 6);
- gtk_widget_set_size_request (GTK_WIDGET (scrolled_window), -1, 100);
- }
- else
- {
- gtk_scrolled_window_set_shadow_type (scrolled_window, GTK_SHADOW_NONE);
- gtk_scrolled_window_set_policy (scrolled_window,
- GTK_POLICY_NEVER, GTK_POLICY_NEVER);
- gtk_box_set_child_packing (GTK_BOX (priv->vbox_individual_widget),
- priv->scrolled_window_individual, FALSE, TRUE, 0, GTK_PACK_START);
-
- gtk_container_set_border_width (GTK_CONTAINER (priv->viewport_individual),
- 0);
- }
-
- /* Chain up */
- if (klass->constructed != NULL)
- klass->constructed (object);
-}
-
-static void
-get_property (GObject *object,
- guint param_id,
- GValue *value,
- GParamSpec *pspec)
-{
- EmpathyIndividualWidgetPriv *priv = GET_PRIV (object);
-
- switch (param_id)
- {
- case PROP_INDIVIDUAL:
- g_value_set_object (value, priv->individual);
- break;
- case PROP_FLAGS:
- g_value_set_flags (value, priv->flags);
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, pspec);
- break;
- }
-}
-
-static void
-set_property (GObject *object,
- guint param_id,
- const GValue *value,
- GParamSpec *pspec)
-{
- EmpathyIndividualWidgetPriv *priv = GET_PRIV (object);
-
- switch (param_id)
- {
- case PROP_INDIVIDUAL:
- empathy_individual_widget_set_individual (
- EMPATHY_INDIVIDUAL_WIDGET (object), g_value_get_object (value));
- break;
- case PROP_FLAGS:
- priv->flags = g_value_get_flags (value);
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, pspec);
- break;
- }
-}
-
-static void
-dispose (GObject *object)
-{
- remove_individual (EMPATHY_INDIVIDUAL_WIDGET (object));
-
- G_OBJECT_CLASS (empathy_individual_widget_parent_class)->dispose (object);
-}
-
-static void
-finalize (GObject *object)
-{
- EmpathyIndividualWidgetPriv *priv = GET_PRIV (object);
-
- g_hash_table_unref (priv->persona_grids);
-
- G_OBJECT_CLASS (empathy_individual_widget_parent_class)->finalize (object);
-}
-
-static void
-empathy_individual_widget_class_init (EmpathyIndividualWidgetClass *klass)
-{
- GObjectClass *object_class = G_OBJECT_CLASS (klass);
-
- object_class->constructed = constructed;
- object_class->get_property = get_property;
- object_class->set_property = set_property;
- object_class->dispose = dispose;
- object_class->finalize = finalize;
-
- /**
- * EmpathyIndividualWidget:individual:
- *
- * The #FolksIndividual to display in the widget.
- */
- g_object_class_install_property (object_class, PROP_INDIVIDUAL,
- g_param_spec_object ("individual",
- "Individual",
- "The #FolksIndividual to display in the widget.",
- FOLKS_TYPE_INDIVIDUAL,
- G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-
- /**
- * EmpathyIndividualWidget:flags:
- *
- * A set of flags which affect the widget's behaviour.
- */
- g_object_class_install_property (object_class, PROP_FLAGS,
- g_param_spec_flags ("flags",
- "Flags",
- "A set of flags which affect the widget's behaviour.",
- EMPATHY_TYPE_INDIVIDUAL_WIDGET_FLAGS,
- EMPATHY_INDIVIDUAL_WIDGET_NONE,
- G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | G_PARAM_CONSTRUCT_ONLY));
-
- g_type_class_add_private (object_class, sizeof (EmpathyIndividualWidgetPriv));
-}
-
-/**
- * empathy_individual_widget_new:
- * @individual: the #FolksIndividual to display
- * @flags: flags affecting how the widget behaves and what it displays
- *
- * Creates a new #EmpathyIndividualWidget.
- *
- * Return value: a new #EmpathyIndividualWidget
- */
-GtkWidget *
-empathy_individual_widget_new (FolksIndividual *individual,
- EmpathyIndividualWidgetFlags flags)
-{
- g_return_val_if_fail (individual == NULL || FOLKS_IS_INDIVIDUAL (individual),
- NULL);
-
- return g_object_new (EMPATHY_TYPE_INDIVIDUAL_WIDGET,
- "individual", individual,
- "flags", flags,
- NULL);
-}
-
-/**
- * empathy_individual_widget_get_individual:
- * @self: an #EmpathyIndividualWidget
- *
- * Returns the #FolksIndividual being displayed by the widget.
- *
- * Return value: the #FolksIndividual being displayed, or %NULL
- */
-FolksIndividual *
-empathy_individual_widget_get_individual (EmpathyIndividualWidget *self)
-{
- g_return_val_if_fail (EMPATHY_IS_INDIVIDUAL_WIDGET (self), NULL);
-
- return GET_PRIV (self)->individual;
-}
-
-/**
- * empathy_individual_widget_set_individual:
- * @self: an #EmpathyIndividualWidget
- * @individual: the #FolksIndividual to display, or %NULL
- *
- * Set the #FolksIndividual to be displayed by the widget:
- * #EmpathyIndividualWidget:individual.
- *
- * The @individual may be %NULL in order to display nothing in the widget.
- */
-void
-empathy_individual_widget_set_individual (EmpathyIndividualWidget *self,
- FolksIndividual *individual)
-{
- EmpathyIndividualWidgetPriv *priv;
-
- g_return_if_fail (EMPATHY_IS_INDIVIDUAL_WIDGET (self));
- g_return_if_fail (individual == NULL || FOLKS_IS_INDIVIDUAL (individual));
-
- priv = GET_PRIV (self);
-
- if (individual == priv->individual)
- return;
-
- /* Out with the old… */
- remove_individual (self);
-
- /* …and in with the new. */
- if (individual != NULL)
- g_object_ref (individual);
- priv->individual = individual;
-
- /* Update information for widgets */
- individual_update (self);
- groups_update (self);
- details_update (self);
- location_update (self);
- client_types_update (self);
-}
diff --git a/libempathy-gtk/empathy-individual-widget.h b/libempathy-gtk/empathy-individual-widget.h
deleted file mode 100644
index fd63377f..00000000
--- a/libempathy-gtk/empathy-individual-widget.h
+++ /dev/null
@@ -1,102 +0,0 @@
-/*
- * Copyright (C) 2010 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: Philip Withnall <philip.withnall@collabora.co.uk>
- */
-
-#ifndef __EMPATHY_INDIVIDUAL_WIDGET_H__
-#define __EMPATHY_INDIVIDUAL_WIDGET_H__
-
-#include <gtk/gtk.h>
-#include <folks/folks.h>
-
-G_BEGIN_DECLS
-
-/**
- * EmpathyIndividualWidgetFlags:
- * @EMPATHY_INDIVIDUAL_WIDGET_NONE: Don't show any widgets to edit any
- * details of the individual, or to display any extended details of the
- * individual. This should be the option for widgets that merely display basic
- * information about an individual.
- * @EMPATHY_INDIVIDUAL_WIDGET_EDIT_ALIAS: Show a #GtkEntry allowing changes to
- * the individual's alias.
- * @EMPATHY_INDIVIDUAL_WIDGET_EDIT_FAVOURITE: Show a checkbutton
- * allowing changes to the individual's favourite status.
- * @EMPATHY_INDIVIDUAL_WIDGET_EDIT_GROUPS: Show a widget to change the groups
- * the individual is in.
- * @EMPATHY_INDIVIDUAL_WIDGET_FOR_TOOLTIP: Make widgets more designed for a
- * tooltip. For example, make labels not selectable.
- * @EMPATHY_INDIVIDUAL_WIDGET_SHOW_LOCATION: Display the individual's current
- * location textually or using a map (if compiled with libchamplain support).
- * @EMPATHY_INDIVIDUAL_WIDGET_SHOW_DETAILS: Fetch and display extended vCard
- * details of the individual, if the individual has them.
- * @EMPATHY_INDIVIDUAL_WIDGET_SHOW_PERSONAS: List the #FolksPersona<!-- -->s
- * contained in the individual.
- *
- * Flags used when creating an #EmpathyIndividualWidget to specify which
- * features should be available.
- */
-typedef enum
-{
- EMPATHY_INDIVIDUAL_WIDGET_NONE = 0,
- EMPATHY_INDIVIDUAL_WIDGET_EDIT_ALIAS = 1 << 0,
- EMPATHY_INDIVIDUAL_WIDGET_EDIT_FAVOURITE = 1 << 1,
- EMPATHY_INDIVIDUAL_WIDGET_EDIT_GROUPS = 1 << 2,
- EMPATHY_INDIVIDUAL_WIDGET_FOR_TOOLTIP = 1 << 3,
- EMPATHY_INDIVIDUAL_WIDGET_SHOW_LOCATION = 1 << 4,
- EMPATHY_INDIVIDUAL_WIDGET_SHOW_DETAILS = 1 << 5,
- EMPATHY_INDIVIDUAL_WIDGET_SHOW_PERSONAS = 1 << 6,
- EMPATHY_INDIVIDUAL_WIDGET_SHOW_CLIENT_TYPES = 1 << 7,
-} EmpathyIndividualWidgetFlags;
-
-#define EMPATHY_TYPE_INDIVIDUAL_WIDGET (empathy_individual_widget_get_type ())
-#define EMPATHY_INDIVIDUAL_WIDGET(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), \
- EMPATHY_TYPE_INDIVIDUAL_WIDGET, EmpathyIndividualWidget))
-#define EMPATHY_INDIVIDUAL_WIDGET_CLASS(k) (G_TYPE_CHECK_CLASS_CAST ((k), \
- EMPATHY_TYPE_INDIVIDUAL_WIDGET, EmpathyIndividualWidgetClass))
-#define EMPATHY_IS_INDIVIDUAL_WIDGET(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), \
- EMPATHY_TYPE_INDIVIDUAL_WIDGET))
-#define EMPATHY_IS_INDIVIDUAL_WIDGET_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), \
- EMPATHY_TYPE_INDIVIDUAL_WIDGET))
-#define EMPATHY_INDIVIDUAL_WIDGET_GET_CLASS(o) ( \
- G_TYPE_INSTANCE_GET_CLASS ((o), EMPATHY_TYPE_INDIVIDUAL_WIDGET, \
- EmpathyIndividualWidgetClass))
-
-typedef struct {
- GtkBox parent;
-
- /*<private>*/
- gpointer priv;
-} EmpathyIndividualWidget;
-
-typedef struct {
- GtkBoxClass parent_class;
-} EmpathyIndividualWidgetClass;
-
-GType empathy_individual_widget_get_type (void) G_GNUC_CONST;
-
-GtkWidget * empathy_individual_widget_new (FolksIndividual *individual,
- EmpathyIndividualWidgetFlags flags);
-
-FolksIndividual * empathy_individual_widget_get_individual (
- EmpathyIndividualWidget *self);
-void empathy_individual_widget_set_individual (EmpathyIndividualWidget *self,
- FolksIndividual *individual);
-
-G_END_DECLS
-
-#endif /* __EMPATHY_INDIVIDUAL_WIDGET_H__ */
diff --git a/libempathy-gtk/empathy-individual-widget.ui b/libempathy-gtk/empathy-individual-widget.ui
deleted file mode 100644
index 7e4d3f32..00000000
--- a/libempathy-gtk/empathy-individual-widget.ui
+++ /dev/null
@@ -1,210 +0,0 @@
-<?xml version="1.0"?>
-<interface>
- <requires lib="gtk+" version="2.16"/>
- <!-- interface-naming-policy toplevel-contextual -->
- <object class="GtkVBox" id="vbox_individual_widget">
- <property name="spacing">6</property>
- <child>
- <object class="GtkScrolledWindow" id="scrolled_window_individual">
- <property name="hscrollbar-policy">never</property>
- <property name="vscrollbar-policy">never</property><!-- Modified in code when necessary -->
- <property name="shadow-type">none</property><!-- Modified in code when necessary -->
- <property name="visible">True</property>
- <child>
- <object class="GtkViewport" id="viewport_individual">
- <property name="shadow-type">none</property>
- <property name="visible">True</property>
- <child>
- <object class="GtkVBox" id="vbox_individual">
- <property name="visible">True</property>
- <property name="spacing">6</property>
- <child>
- <placeholder/>
- </child>
- </object>
- </child>
- </object>
- </child>
- </object>
- <packing>
- <property name="position">0</property>
- <property name="expand">False</property>
- </packing>
- </child>
- <child>
- <object class="GtkVBox" id="vbox_location">
- <property name="spacing">6</property>
- <child>
- <object class="GtkLabel" id="label_location">
- <property name="visible">True</property>
- <property name="xalign">0</property>
- <property name="label" translatable="yes">&lt;b&gt;Location&lt;/b&gt; at (date)</property>
- <property name="use_markup">True</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkAlignment" id="alignment1">
- <property name="visible">True</property>
- <property name="left_padding">12</property>
- <child>
- <object class="GtkVBox" id="subvbox_location">
- <property name="visible">True</property>
- <property name="spacing">5</property>
- <child>
- <placeholder/>
- </child>
- <child>
- <object class="GtkFrame" id="viewport_map">
- <property name="height_request">150</property>
- <property name="resize_mode">queue</property>
- <property name="label_xalign">0</property>
- <property name="shadow_type">in</property>
- <child>
- <placeholder/>
- </child>
- </object>
- <packing>
- <property name="position">1</property>
- </packing>
- </child>
- </object>
- </child>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">1</property>
- </packing>
- </child>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="position">1</property>
- </packing>
- </child>
- <child>
- <object class="GtkHBox" id="hbox_client_types">
- <property name="spacing">6</property>
- <child>
- <object class="GtkImage" id="image_phone">
- <property name="visible">True</property>
- <property name="icon_name">phone</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkLabel" id="label1">
- <property name="visible">True</property>
- <property name="xalign">0</property>
- <property name="label" translatable="yes">Online from a phone or mobile device</property>
- </object>
- <packing>
- <property name="position">1</property>
- </packing>
- </child>
- </object>
- <packing>
- <property name="position">2</property>
- </packing>
- </child>
- <child>
- <object class="EmpathyGroupsWidget" id="groups_widget"/>
- <packing>
- <property name="position">2</property>
- </packing>
- </child>
- <child>
- <object class="GtkVBox" id="vbox_details">
- <property name="spacing">6</property>
- <child>
- <object class="GtkLabel" id="label649">
- <property name="visible">True</property>
- <property name="xalign">0</property>
- <property name="label" translatable="yes">Contact Details</property>
- <attributes>
- <attribute name="weight" value="bold"/>
- </attributes>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkAlignment" id="alignment30">
- <property name="visible">True</property>
- <property name="left_padding">12</property>
- <child>
- <object class="GtkVBox" id="vbox218">
- <property name="visible">True</property>
- <property name="spacing">6</property>
- <child>
- <object class="GtkGrid" id="grid_details">
- <property name="visible">True</property>
- <property name="column_spacing">12</property>
- <property name="row_spacing">6</property>
- </object>
- <packing>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkHBox" id="hbox_details_requested">
- <property name="spacing">6</property>
- <child>
- <object class="GtkImage" id="image885">
- <property name="visible">True</property>
- <property name="stock">gtk-dialog-info</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <object 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>
- </object>
- <packing>
- <property name="position">1</property>
- </packing>
- </child>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">1</property>
- </packing>
- </child>
- </object>
- </child>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">1</property>
- </packing>
- </child>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="position">3</property>
- </packing>
- </child>
- </object>
-</interface>
diff --git a/libempathy-gtk/empathy-input-text-view.c b/libempathy-gtk/empathy-input-text-view.c
deleted file mode 100644
index d7c24a68..00000000
--- a/libempathy-gtk/empathy-input-text-view.c
+++ /dev/null
@@ -1,107 +0,0 @@
-/*
- * Copyright (C) 2002-2007 Imendio AB
- * Copyright (C) 2007-2010 Collabora Ltd.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301 USA
- *
- * Authors: 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>
- * Guillaume Desmottes <guillaume.desmottes@collabora.co.uk>
- */
-
-#include "config.h"
-#include "empathy-input-text-view.h"
-
-G_DEFINE_TYPE (EmpathyInputTextView, empathy_input_text_view,
- GTK_TYPE_TEXT_VIEW);
-
-#define MAX_INPUT_HEIGHT 150
-
-struct _EmpathyInputTextViewPrivate
-{
- gboolean has_input_vscroll;
-};
-
-static void
-empathy_input_text_view_get_preferred_height (GtkWidget *widget,
- gint *minimum_height,
- gint *natural_height)
-{
- EmpathyInputTextView *self = (EmpathyInputTextView *) widget;
- GtkWidget *sw;
-
- GTK_WIDGET_CLASS (empathy_input_text_view_parent_class)->get_preferred_height
- (widget, minimum_height, natural_height);
-
- sw = gtk_widget_get_parent (widget);
- if (*minimum_height >= MAX_INPUT_HEIGHT && !self->priv->has_input_vscroll)
- {
- /* Display scroll bar */
- gtk_widget_set_size_request (sw, -1, MAX_INPUT_HEIGHT);
-
- gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (sw),
- GTK_POLICY_NEVER,
- GTK_POLICY_ALWAYS);
-
- self->priv->has_input_vscroll = TRUE;
- }
-
- if (*minimum_height < MAX_INPUT_HEIGHT && self->priv->has_input_vscroll)
- {
- /* Hide scroll bar */
- gtk_widget_set_size_request (sw, -1, -1);
-
- gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (sw),
- GTK_POLICY_NEVER,
- GTK_POLICY_NEVER);
-
- self->priv->has_input_vscroll = FALSE;
- }
-}
-
-static void
-empathy_input_text_view_class_init (EmpathyInputTextViewClass *cls)
-{
- GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (cls);
-
- widget_class->get_preferred_height =
- empathy_input_text_view_get_preferred_height;
-
- g_type_class_add_private (cls, sizeof (EmpathyInputTextViewPrivate));
-}
-
-static void
-empathy_input_text_view_init (EmpathyInputTextView *self)
-{
- self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self,
- EMPATHY_TYPE_INPUT_TEXT_VIEW, EmpathyInputTextViewPrivate);
-}
-
-GtkWidget *
-empathy_input_text_view_new (void)
-{
- return g_object_new (EMPATHY_TYPE_INPUT_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);
-}
diff --git a/libempathy-gtk/empathy-input-text-view.h b/libempathy-gtk/empathy-input-text-view.h
deleted file mode 100644
index 917e21e8..00000000
--- a/libempathy-gtk/empathy-input-text-view.h
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- * Copyright (C) 2002-2007 Imendio AB
- * Copyright (C) 2007-2010 Collabora Ltd.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301 USA
- *
- * Authors: 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>
- * Guillaume Desmottes <guillaume.desmottes@collabora.co.uk>
- */
-
-#ifndef __EMPATHY_INPUT_TEXT_VIEW_H__
-#define __EMPATHY_INPUT_TEXT_VIEW_H__
-
-#include <gtk/gtk.h>
-
-G_BEGIN_DECLS
-
-#define EMPATHY_TYPE_INPUT_TEXT_VIEW (empathy_input_text_view_get_type ())
-#define EMPATHY_INPUT_TEXT_VIEW(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), EMPATHY_TYPE_INPUT_TEXT_VIEW, EmpathyInputTextView))
-#define EMPATHY_INPUT_TEXT_VIEW_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), EMPATHY_TYPE_INPUT_TEXT_VIEW, EmpathyInputTextViewClass))
-#define EMPATHY_IS_INPUT_TEXT_VIEW(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), EMPATHY_TYPE_INPUT_TEXT_VIEW))
-#define EMPATHY_IS_INPUT_TEXT_VIEW_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), EMPATHY_TYPE_INPUT_TEXT_VIEW))
-#define EMPATHY_INPUT_TEXT_VIEW_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), EMPATHY_TYPE_INPUT_TEXT_VIEW, EmpathyInputTextViewClass))
-
-typedef struct _EmpathyInputTextView EmpathyInputTextView;
-typedef struct _EmpathyInputTextViewClass EmpathyInputTextViewClass;
-typedef struct _EmpathyInputTextViewPrivate EmpathyInputTextViewPrivate;
-
-struct _EmpathyInputTextView
-{
- GtkTextView parent;
- EmpathyInputTextViewPrivate *priv;
-};
-
-struct _EmpathyInputTextViewClass
-{
- GtkTextViewClass parent_class;
-};
-
-GType empathy_input_text_view_get_type (void) G_GNUC_CONST;
-
-GtkWidget * empathy_input_text_view_new (void);
-
-G_END_DECLS
-#endif /* __EMPATHY_INPUT_TEXT_VIEW_H__ */
diff --git a/libempathy-gtk/empathy-local-xmpp-assistant-widget.c b/libempathy-gtk/empathy-local-xmpp-assistant-widget.c
deleted file mode 100644
index 6ee8711a..00000000
--- a/libempathy-gtk/empathy-local-xmpp-assistant-widget.c
+++ /dev/null
@@ -1,250 +0,0 @@
-/*
- * empathy-local-xmpp-assistant-widget.h - Source for
- * EmpathyLocalXmppAssistantWidget
- *
- * Copyright (C) 2012 - Collabora Ltd.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * 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, see <http://www.gnu.org/licenses/>.
- */
-
-#include "config.h"
-#include "empathy-local-xmpp-assistant-widget.h"
-
-#include <glib/gi18n-lib.h>
-#include <tp-account-widgets/tpaw-account-widget.h>
-#include <tp-account-widgets/tpaw-pixbuf-utils.h>
-#include <tp-account-widgets/tpaw-utils.h>
-
-#include "empathy-ui-utils.h"
-#include "empathy-utils.h"
-
-#define DEBUG_FLAG EMPATHY_DEBUG_ACCOUNT
-#include "empathy-debug.h"
-
-G_DEFINE_TYPE (EmpathyLocalXmppAssistantWidget,
- empathy_local_xmpp_assistant_widget, GTK_TYPE_GRID)
-
-enum {
- SIG_VALID = 1,
- LAST_SIGNAL
-};
-
-static gulong signals[LAST_SIGNAL] = { 0, };
-
-struct _EmpathyLocalXmppAssistantWidgetPrivate
-{
- TpawAccountSettings *settings;
-};
-
-static void
-empathy_local_xmpp_assistant_widget_init (EmpathyLocalXmppAssistantWidget *self)
-{
- self->priv = G_TYPE_INSTANCE_GET_PRIVATE ((self),
- EMPATHY_TYPE_LOCAL_XMPP_ASSISTANT_WIDGET,
- EmpathyLocalXmppAssistantWidgetPrivate);
-}
-
-static void
-handle_apply_cb (TpawAccountWidget *widget_object,
- gboolean is_valid,
- EmpathyLocalXmppAssistantWidget *self)
-{
- g_signal_emit (self, signals[SIG_VALID], 0, is_valid);
-}
-
-static void
-empathy_local_xmpp_assistant_widget_constructed (GObject *object)
-{
- EmpathyLocalXmppAssistantWidget *self = (EmpathyLocalXmppAssistantWidget *)
- object;
- GtkWidget *w;
- GdkPixbuf *pix;
- TpawAccountWidget *account_widget;
- gchar *markup;
-
- G_OBJECT_CLASS (empathy_local_xmpp_assistant_widget_parent_class)->
- constructed (object);
-
- gtk_container_set_border_width (GTK_CONTAINER (self), 12);
-
- w = gtk_label_new (
- _("Empathy can automatically discover and chat with the people "
- "connected on the same network as you. "
- "If you want to use this feature, please check that the "
- "details below are correct."));
- gtk_misc_set_alignment (GTK_MISC (w), 0, 0.5);
- gtk_label_set_line_wrap (GTK_LABEL (w), TRUE);
- gtk_grid_attach (GTK_GRID (self), w, 0, 0, 1, 1);
- gtk_widget_show (w);
-
- pix = tpaw_pixbuf_from_icon_name_sized ("im-local-xmpp", 48);
- if (pix != NULL)
- {
- w = gtk_image_new_from_pixbuf (pix);
- gtk_grid_attach (GTK_GRID (self), w, 1, 0, 1, 1);
- gtk_widget_show (w);
-
- g_object_unref (pix);
- }
-
- self->priv->settings = tpaw_account_settings_new ("salut", "local-xmpp",
- NULL, _("People nearby"));
-
- account_widget = tpaw_account_widget_new_for_protocol (
- self->priv->settings, NULL, TRUE);
- tpaw_account_widget_hide_buttons (account_widget);
-
- g_signal_connect (account_widget, "handle-apply",
- G_CALLBACK (handle_apply_cb), self);
-
- gtk_grid_attach (GTK_GRID (self), GTK_WIDGET (account_widget), 0, 1, 2, 1);
- gtk_widget_show (GTK_WIDGET (account_widget));
-
- w = gtk_label_new (NULL);
- markup = g_strdup_printf (
- "<span size=\"small\">%s</span>",
- _("You can change these details later or disable this feature "
- "by choosing <span style=\"italic\">Edit → Accounts</span> "
- "in the Contact List."));
- gtk_label_set_markup (GTK_LABEL (w), markup);
- g_free (markup);
- gtk_misc_set_alignment (GTK_MISC (w), 0, 0.5);
- gtk_label_set_line_wrap (GTK_LABEL (w), TRUE);
- gtk_grid_attach (GTK_GRID (self), w, 0, 2, 2, 1);
- gtk_widget_show (w);
-}
-
-static void
-empathy_local_xmpp_assistant_widget_dispose (GObject *object)
-{
- EmpathyLocalXmppAssistantWidget *self = (EmpathyLocalXmppAssistantWidget *)
- object;
-
- g_clear_object (&self->priv->settings);
-
- G_OBJECT_CLASS (empathy_local_xmpp_assistant_widget_parent_class)->
- dispose (object);
-}
-
-static void
-empathy_local_xmpp_assistant_widget_class_init (
- EmpathyLocalXmppAssistantWidgetClass *klass)
-{
- GObjectClass *object_class = G_OBJECT_CLASS (klass);
-
- object_class->constructed = empathy_local_xmpp_assistant_widget_constructed;
- object_class->dispose = empathy_local_xmpp_assistant_widget_dispose;
-
- signals[SIG_VALID] =
- g_signal_new ("valid",
- G_TYPE_FROM_CLASS (klass),
- G_SIGNAL_RUN_LAST, 0, NULL, NULL,
- g_cclosure_marshal_generic,
- G_TYPE_NONE, 1, G_TYPE_BOOLEAN);
-
- g_type_class_add_private (object_class,
- sizeof (EmpathyLocalXmppAssistantWidgetPrivate));
-}
-
-GtkWidget *
-empathy_local_xmpp_assistant_widget_new ()
-{
- return g_object_new (EMPATHY_TYPE_LOCAL_XMPP_ASSISTANT_WIDGET,
- "row-spacing", 12,
- NULL);
-}
-
-static void
-account_enabled_cb (GObject *source,
- GAsyncResult *result,
- gpointer user_data)
-{
- TpAccount *account = TP_ACCOUNT (source);
- GError *error = NULL;
- TpAccountManager *account_mgr;
-
- if (!tp_account_set_enabled_finish (account, result, &error))
- {
- DEBUG ("Failed to enable account: %s", error->message);
- g_error_free (error);
- return;
- }
-
- account_mgr = tp_account_manager_dup ();
-
- tpaw_connect_new_account (account, account_mgr);
-
- g_object_unref (account_mgr);
-}
-
-static void
-apply_account_cb (GObject *source,
- GAsyncResult *result,
- gpointer user_data)
-{
- TpawAccountSettings *settings = TPAW_ACCOUNT_SETTINGS (source);
- TpAccount *account;
- GError *error = NULL;
-
- if (!tpaw_account_settings_apply_finish (settings, result, NULL, &error))
- {
- DEBUG ("Failed to create account: %s", error->message);
- g_error_free (error);
- return;
- }
-
- /* enable the newly created account */
- account = tpaw_account_settings_get_account (settings);
- tp_account_set_enabled_async (account, TRUE, account_enabled_cb, NULL);
-}
-
-void
-empathy_local_xmpp_assistant_widget_create_account (
- EmpathyLocalXmppAssistantWidget *self)
-{
- tpaw_account_settings_apply_async (self->priv->settings,
- apply_account_cb, NULL);
-}
-
-gboolean
-empathy_local_xmpp_assistant_widget_should_create_account (
- TpAccountManager *manager)
-{
- gboolean salut_created = FALSE;
- GList *accounts, *l;
-
- accounts = tp_account_manager_dup_valid_accounts (manager);
-
- for (l = accounts; l != NULL; l = g_list_next (l))
- {
- TpAccount *account = TP_ACCOUNT (l->data);
-
- if (!tp_strdiff (tp_account_get_protocol_name (account), "local-xmpp"))
- {
- salut_created = TRUE;
- break;
- }
- }
-
- g_list_free_full (accounts, g_object_unref);
-
- return !salut_created;
-}
-
-gboolean
-empathy_local_xmpp_assistant_widget_is_valid (
- EmpathyLocalXmppAssistantWidget *self)
-{
- return tpaw_account_settings_is_valid (self->priv->settings);
-}
diff --git a/libempathy-gtk/empathy-local-xmpp-assistant-widget.h b/libempathy-gtk/empathy-local-xmpp-assistant-widget.h
deleted file mode 100644
index efea64d2..00000000
--- a/libempathy-gtk/empathy-local-xmpp-assistant-widget.h
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- * empathy-local-xmpp-assistant-widget.h - Source for
- * EmpathyLocalXmppAssistantWidget
- *
- * Copyright (C) 2012 - Collabora Ltd.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * 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, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef __EMPATHY_LOCAL_XMPP_ASSISTANT_WIDGET_H__
-#define __EMPATHY_LOCAL_XMPP_ASSISTANT_WIDGET_H__
-
-#include <gtk/gtk.h>
-#include <telepathy-glib/telepathy-glib.h>
-
-G_BEGIN_DECLS
-
-#define EMPATHY_TYPE_LOCAL_XMPP_ASSISTANT_WIDGET (empathy_local_xmpp_assistant_widget_get_type ())
-#define EMPATHY_LOCAL_XMPP_ASSISTANT_WIDGET(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), EMPATHY_TYPE_LOCAL_XMPP_ASSISTANT_WIDGET, EmpathyLocalXmppAssistantWidget))
-#define EMPATHY_LOCAL_XMPP_ASSISTANT_WIDGET_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), EMPATHY_TYPE_LOCAL_XMPP_ASSISTANT_WIDGET, EmpathyLocalXmppAssistantWidgetClass))
-#define EMPATHY_IS_LOCAL_XMPP_ASSISTANT_WIDGET(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), EMPATHY_TYPE_LOCAL_XMPP_ASSISTANT_WIDGET))
-#define EMPATHY_IS_LOCAL_XMPP_ASSISTANT_WIDGET_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), EMPATHY_TYPE_LOCAL_XMPP_ASSISTANT_WIDGET))
-#define EMPATHY_LOCAL_XMPP_ASSISTANT_WIDGET_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), EMPATHY_TYPE_LOCAL_XMPP_ASSISTANT_WIDGET, EmpathyLocalXmppAssistantWidgetClass))
-
-typedef struct _EmpathyLocalXmppAssistantWidget EmpathyLocalXmppAssistantWidget;
-typedef struct _EmpathyLocalXmppAssistantWidgetClass EmpathyLocalXmppAssistantWidgetClass;
-typedef struct _EmpathyLocalXmppAssistantWidgetPrivate EmpathyLocalXmppAssistantWidgetPrivate;
-
-struct _EmpathyLocalXmppAssistantWidget {
- GtkGrid parent;
-
- EmpathyLocalXmppAssistantWidgetPrivate *priv;
-};
-
-struct _EmpathyLocalXmppAssistantWidgetClass {
- GtkGridClass parent_class;
-};
-
-GType empathy_local_xmpp_assistant_widget_get_type (void) G_GNUC_CONST;
-
-GtkWidget * empathy_local_xmpp_assistant_widget_new (void);
-
-void empathy_local_xmpp_assistant_widget_create_account (
- EmpathyLocalXmppAssistantWidget *self);
-
-gboolean empathy_local_xmpp_assistant_widget_should_create_account (
- TpAccountManager *manager);
-
-gboolean empathy_local_xmpp_assistant_widget_is_valid (
- EmpathyLocalXmppAssistantWidget *self);
-
-G_END_DECLS
-
-#endif /* __EMPATHY_LOCAL_XMPP_ASSISTANT_WIDGET_H__ */
diff --git a/libempathy-gtk/empathy-location-manager.c b/libempathy-gtk/empathy-location-manager.c
deleted file mode 100644
index 8216cf31..00000000
--- a/libempathy-gtk/empathy-location-manager.c
+++ /dev/null
@@ -1,724 +0,0 @@
-/*
- * Copyright (C) 2009 Collabora Ltd.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301 USA
- *
- * Authors: Pierre-Luc Beaudoin <pierre-luc.beaudoin@collabora.co.uk>
- */
-
-#include "config.h"
-#include "empathy-location-manager.h"
-
-#include <geoclue/geoclue-master.h>
-#include <tp-account-widgets/tpaw-time.h>
-
-#include "empathy-gsettings.h"
-#include "empathy-location.h"
-
-#define DEBUG_FLAG EMPATHY_DEBUG_LOCATION
-#include "empathy-debug.h"
-
-/* Seconds before updating the location */
-#define TIMEOUT 10
-static EmpathyLocationManager *location_manager = NULL;
-
-struct _EmpathyLocationManagerPrivate {
- gboolean geoclue_is_setup;
- /* Contains the location to be sent to accounts. Geoclue is used
- * to populate it. This HashTable uses Telepathy's style (string,
- * GValue). Keys are defined in empathy-location.h
- */
- GHashTable *location;
-
- GSettings *gsettings_loc;
-
- GeoclueResourceFlags resources;
- GeoclueMasterClient *gc_client;
- GeocluePosition *gc_position;
- GeoclueAddress *gc_address;
-
- gboolean reduce_accuracy;
- TpAccountManager *account_manager;
-
- /* The idle id for publish_on_idle func */
- guint timeout_id;
-};
-
-G_DEFINE_TYPE (EmpathyLocationManager, empathy_location_manager, G_TYPE_OBJECT);
-
-static GObject *
-location_manager_constructor (GType type,
- guint n_construct_params,
- GObjectConstructParam *construct_params)
-{
- GObject *retval;
-
- if (location_manager == NULL)
- {
- retval = G_OBJECT_CLASS (empathy_location_manager_parent_class)->constructor
- (type, n_construct_params, construct_params);
-
- location_manager = EMPATHY_LOCATION_MANAGER (retval);
- g_object_add_weak_pointer (retval, (gpointer) &location_manager);
- }
- else
- {
- retval = g_object_ref (location_manager);
- }
-
- return retval;
-}
-
-static void
-location_manager_dispose (GObject *object)
-{
- EmpathyLocationManager *self = (EmpathyLocationManager *) object;
- void (*dispose) (GObject *) =
- G_OBJECT_CLASS (empathy_location_manager_parent_class)->dispose;
-
- tp_clear_object (&self->priv->account_manager);
- tp_clear_object (&self->priv->gsettings_loc);
- tp_clear_object (&self->priv->gc_client);
- tp_clear_object (&self->priv->gc_position);
- tp_clear_object (&self->priv->gc_address);
- tp_clear_pointer (&self->priv->location, g_hash_table_unref);
-
- if (dispose != NULL)
- dispose (object);
-}
-
-static void
-empathy_location_manager_class_init (EmpathyLocationManagerClass *class)
-{
- GObjectClass *object_class;
-
- object_class = G_OBJECT_CLASS (class);
-
- object_class->constructor = location_manager_constructor;
- object_class->dispose = location_manager_dispose;
-
- g_type_class_add_private (object_class, sizeof (EmpathyLocationManagerPrivate));
-}
-
-static void
-publish_location_cb (TpConnection *connection,
- const GError *error,
- gpointer user_data,
- GObject *weak_object)
-{
- if (error != NULL)
- DEBUG ("Error setting location: %s", error->message);
-}
-
-static void
-publish_location (EmpathyLocationManager *self,
- TpConnection *conn,
- gboolean force_publication)
-{
- guint connection_status = -1;
-
- if (!conn)
- return;
-
- if (!force_publication)
- {
- if (!g_settings_get_boolean (self->priv->gsettings_loc,
- EMPATHY_PREFS_LOCATION_PUBLISH))
- return;
- }
-
- connection_status = tp_connection_get_status (conn, NULL);
-
- if (connection_status != TP_CONNECTION_STATUS_CONNECTED)
- return;
-
- DEBUG ("Publishing %s location to connection %p",
- (g_hash_table_size (self->priv->location) == 0 ? "empty" : ""),
- conn);
-
- tp_cli_connection_interface_location_call_set_location (conn, -1,
- self->priv->location, publish_location_cb, NULL, NULL, G_OBJECT (self));
-}
-
-typedef struct
-{
- EmpathyLocationManager *self;
- gboolean force_publication;
-} PublishToAllData;
-
-static void
-publish_to_all_am_prepared_cb (GObject *source_object,
- GAsyncResult *result,
- gpointer user_data)
-{
- TpAccountManager *manager = TP_ACCOUNT_MANAGER (source_object);
- PublishToAllData *data = user_data;
- GList *accounts, *l;
- GError *error = NULL;
-
- if (!tp_proxy_prepare_finish (manager, result, &error))
- {
- DEBUG ("Failed to prepare account manager: %s", error->message);
- g_error_free (error);
- goto out;
- }
-
- accounts = tp_account_manager_dup_valid_accounts (manager);
- for (l = accounts; l; l = l->next)
- {
- TpConnection *conn = tp_account_get_connection (TP_ACCOUNT (l->data));
-
- if (conn != NULL)
- publish_location (data->self, conn, data->force_publication);
- }
- g_list_free_full (accounts, g_object_unref);
-
-out:
- g_object_unref (data->self);
- g_slice_free (PublishToAllData, data);
-}
-
-static void
-publish_to_all_connections (EmpathyLocationManager *self,
- gboolean force_publication)
-{
- PublishToAllData *data;
-
- data = g_slice_new0 (PublishToAllData);
- data->self = g_object_ref (self);
- data->force_publication = force_publication;
-
- tp_proxy_prepare_async (self->priv->account_manager, NULL,
- publish_to_all_am_prepared_cb, data);
-}
-
-static gboolean
-publish_on_idle (gpointer user_data)
-{
- EmpathyLocationManager *manager = EMPATHY_LOCATION_MANAGER (user_data);
-
- manager->priv->timeout_id = 0;
- publish_to_all_connections (manager, TRUE);
- return FALSE;
-}
-
-static void
-new_connection_cb (TpAccount *account,
- guint old_status,
- guint new_status,
- guint reason,
- gchar *dbus_error_name,
- GHashTable *details,
- gpointer user_data)
-{
- EmpathyLocationManager *self = user_data;
- TpConnection *conn;
-
- conn = tp_account_get_connection (account);
-
- DEBUG ("New connection %p", conn);
-
- /* Don't publish if it is already planned (ie startup) */
- if (self->priv->timeout_id == 0)
- {
- publish_location (EMPATHY_LOCATION_MANAGER (self), conn,
- FALSE);
- }
-}
-
-static void
-update_timestamp (EmpathyLocationManager *self)
-{
- gint64 timestamp;
-
- timestamp = tpaw_time_get_current ();
- tp_asv_set_int64 (self->priv->location, EMPATHY_LOCATION_TIMESTAMP,
- timestamp);
-
- DEBUG ("\t - Timestamp: %" G_GINT64_FORMAT, timestamp);
-}
-
-static void
-address_changed_cb (GeoclueAddress *address,
- int timestamp,
- GHashTable *details,
- GeoclueAccuracy *accuracy,
- gpointer user_data)
-{
- EmpathyLocationManager *self = user_data;
- GeoclueAccuracyLevel level;
- GHashTableIter iter;
- gpointer key, value;
-
- geoclue_accuracy_get_details (accuracy, &level, NULL, NULL);
- DEBUG ("New address (accuracy level %d):", level);
- /* FIXME: Publish accuracy level also considering the position's */
-
- g_hash_table_remove (self->priv->location, EMPATHY_LOCATION_STREET);
- g_hash_table_remove (self->priv->location, EMPATHY_LOCATION_AREA);
- g_hash_table_remove (self->priv->location, EMPATHY_LOCATION_REGION);
- g_hash_table_remove (self->priv->location, EMPATHY_LOCATION_COUNTRY);
- g_hash_table_remove (self->priv->location, EMPATHY_LOCATION_COUNTRY_CODE);
- g_hash_table_remove (self->priv->location, EMPATHY_LOCATION_POSTAL_CODE);
-
- if (g_hash_table_size (details) == 0)
- {
- DEBUG ("\t - (Empty)");
- return;
- }
-
- g_hash_table_iter_init (&iter, details);
- while (g_hash_table_iter_next (&iter, &key, &value))
- {
- /* Discard street information if reduced accuracy is on */
- if (self->priv->reduce_accuracy &&
- !tp_strdiff (key, EMPATHY_LOCATION_STREET))
- continue;
-
- tp_asv_set_string (self->priv->location, key, value);
-
- DEBUG ("\t - %s: %s", (gchar *) key, (gchar *) value);
- }
-
- update_timestamp (self);
- if (self->priv->timeout_id == 0)
- self->priv->timeout_id = g_timeout_add_seconds (TIMEOUT, publish_on_idle,
- self);
-}
-
-static void
-initial_address_cb (GeoclueAddress *address,
- int timestamp,
- GHashTable *details,
- GeoclueAccuracy *accuracy,
- GError *error,
- gpointer self)
-{
- if (error)
- {
- DEBUG ("Error: %s", error->message);
- g_error_free (error);
- }
- else
- {
- address_changed_cb (address, timestamp, details, accuracy, self);
- }
-}
-
-static void
-position_changed_cb (GeocluePosition *position,
- GeocluePositionFields fields,
- int timestamp,
- double latitude,
- double longitude,
- double altitude,
- GeoclueAccuracy *accuracy,
- gpointer user_data)
-{
- EmpathyLocationManager *self = user_data;
- GeoclueAccuracyLevel level;
- gdouble mean, horizontal, vertical;
-
- geoclue_accuracy_get_details (accuracy, &level, &horizontal, &vertical);
- DEBUG ("New position (accuracy level %d)", level);
- if (level == GEOCLUE_ACCURACY_LEVEL_NONE)
- return;
-
- if (fields & GEOCLUE_POSITION_FIELDS_LONGITUDE)
- {
-
- if (self->priv->reduce_accuracy)
- /* Truncate at 1 decimal place */
- longitude = ((int) (longitude * 10)) / 10.0;
-
- tp_asv_set_double (self->priv->location, EMPATHY_LOCATION_LON, longitude);
-
- DEBUG ("\t - Longitude: %f", longitude);
- }
- else
- {
- g_hash_table_remove (self->priv->location, EMPATHY_LOCATION_LON);
- }
-
- if (fields & GEOCLUE_POSITION_FIELDS_LATITUDE)
- {
- if (self->priv->reduce_accuracy)
- /* Truncate at 1 decimal place */
- latitude = ((int) (latitude * 10)) / 10.0;
-
- tp_asv_set_double (self->priv->location, EMPATHY_LOCATION_LAT, latitude);
-
- DEBUG ("\t - Latitude: %f", latitude);
- }
- else
- {
- g_hash_table_remove (self->priv->location, EMPATHY_LOCATION_LAT);
- }
-
- if (fields & GEOCLUE_POSITION_FIELDS_ALTITUDE)
- {
- tp_asv_set_double (self->priv->location, EMPATHY_LOCATION_ALT, altitude);
-
- DEBUG ("\t - Altitude: %f", altitude);
- }
- else
- {
- g_hash_table_remove (self->priv->location, EMPATHY_LOCATION_ALT);
- }
-
- if (level == GEOCLUE_ACCURACY_LEVEL_DETAILED)
- {
- mean = (horizontal + vertical) / 2.0;
- tp_asv_set_double (self->priv->location, EMPATHY_LOCATION_ACCURACY, mean);
-
- DEBUG ("\t - Accuracy: %f", mean);
- }
- else
- {
- g_hash_table_remove (self->priv->location, EMPATHY_LOCATION_ACCURACY);
- }
-
- update_timestamp (self);
- if (self->priv->timeout_id == 0)
- self->priv->timeout_id = g_timeout_add_seconds (TIMEOUT, publish_on_idle,
- self);
-}
-
-static void
-initial_position_cb (GeocluePosition *position,
- GeocluePositionFields fields,
- int timestamp,
- double latitude,
- double longitude,
- double altitude,
- GeoclueAccuracy *accuracy,
- GError *error,
- gpointer self)
-{
- if (error)
- {
- DEBUG ("Error: %s", error->message);
- g_error_free (error);
- }
- else
- {
- position_changed_cb (position, fields, timestamp, latitude, longitude,
- altitude, accuracy, self);
- }
-}
-
-static void
-set_requirements (EmpathyLocationManager *self,
- GeoclueSetRequirementsCallback callback)
-{
- geoclue_master_client_set_requirements_async (self->priv->gc_client,
- GEOCLUE_ACCURACY_LEVEL_COUNTRY, 0, FALSE, self->priv->resources,
- callback, self);
-}
-
-static void
-update_resources_set_requirements_cb (GeoclueMasterClient *client,
- GError *error,
- gpointer userdata)
-{
- EmpathyLocationManager *self = userdata;
-
- if (error != NULL)
- {
- DEBUG ("set_requirements failed: %s", error->message);
- g_error_free (error);
- return;
- }
-
- geoclue_address_get_address_async (self->priv->gc_address,
- initial_address_cb, self);
- geoclue_position_get_position_async (self->priv->gc_position,
- initial_position_cb, self);
-}
-
-static void
-update_resources (EmpathyLocationManager *self)
-{
- DEBUG ("Updating resources %d", self->priv->resources);
-
- if (!self->priv->geoclue_is_setup)
- return;
-
- /* As per Geoclue bug #15126, using NONE results in no address
- * being found as geoclue-manual report an empty address with
- * accuracy = NONE */
- set_requirements (self, update_resources_set_requirements_cb);
-}
-
-static void
-create_address_cb (GeoclueMasterClient *client,
- GeoclueAddress *address,
- GError *error,
- gpointer userdata)
-{
- EmpathyLocationManager *self = userdata;
-
- if (error != NULL)
- {
- DEBUG ("Failed to create GeoclueAddress: %s", error->message);
- g_error_free (error);
- return;
- }
-
- self->priv->gc_address = address;
-
- g_signal_connect (G_OBJECT (self->priv->gc_address), "address-changed",
- G_CALLBACK (address_changed_cb), self);
-
- self->priv->geoclue_is_setup = TRUE;
-}
-
-static void
-create_position_cb (GeoclueMasterClient *client,
- GeocluePosition *position,
- GError *error,
- gpointer userdata)
-{
- EmpathyLocationManager *self = userdata;
-
- if (error != NULL)
- {
- DEBUG ("Failed to create GeocluePosition: %s", error->message);
- g_error_free (error);
- return;
- }
-
- self->priv->gc_position = position;
-
- g_signal_connect (G_OBJECT (self->priv->gc_position), "position-changed",
- G_CALLBACK (position_changed_cb), self);
-
- /* Get updated when the address changes */
- geoclue_master_client_create_address_async (self->priv->gc_client,
- create_address_cb, self);
-}
-
-static void
-create_client_set_requirements_cb (GeoclueMasterClient *client,
- GError *error,
- gpointer userdata)
-{
- EmpathyLocationManager *self = userdata;
-
- if (error != NULL)
- {
- DEBUG ("set_requirements failed: %s", error->message);
- g_error_free (error);
- return;
- }
-
- /* Get updated when the position is changes */
- geoclue_master_client_create_position_async (self->priv->gc_client,
- create_position_cb, self);
-}
-
-static void
-create_client_cb (GeoclueMaster *master,
- GeoclueMasterClient *client,
- char *object_path,
- GError *error,
- gpointer userdata)
-{
- EmpathyLocationManager *self = userdata;
-
- if (error != NULL)
- {
- DEBUG ("Failed to create GeoclueMasterClient: %s", error->message);
- g_error_free (error);
- return;
- }
-
- /* @client seems be (transfer full) looking at the geoclue code; yeah for
- * undocumented API... */
- self->priv->gc_client = client;
-
- set_requirements (self, create_client_set_requirements_cb);
-}
-
-static void
-setup_geoclue (EmpathyLocationManager *self)
-{
- GeoclueMaster *master;
-
- DEBUG ("Setting up Geoclue");
- master = geoclue_master_get_default ();
-
- geoclue_master_create_client_async (master, create_client_cb, self);
-
- g_object_unref (master);
- }
-
-static void
-publish_cb (GSettings *gsettings_loc,
- const gchar *key,
- gpointer user_data)
-{
- EmpathyLocationManager *self = EMPATHY_LOCATION_MANAGER (user_data);
-
- DEBUG ("Publish Conf changed");
-
- if (g_settings_get_boolean (gsettings_loc, key))
- {
- if (!self->priv->geoclue_is_setup)
- setup_geoclue (self);
- /* if still not setup than the init failed */
- if (!self->priv->geoclue_is_setup)
- return;
-
- geoclue_address_get_address_async (self->priv->gc_address,
- initial_address_cb, self);
- geoclue_position_get_position_async (self->priv->gc_position,
- initial_position_cb, self);
- }
- else
- {
- /* As per XEP-0080: send an empty location to have remove current
- * location from the servers
- */
- g_hash_table_remove_all (self->priv->location);
- publish_to_all_connections (self, TRUE);
- }
-
-}
-
-static void
-resource_cb (GSettings *gsettings_loc,
- const gchar *key,
- gpointer user_data)
-{
- EmpathyLocationManager *self = EMPATHY_LOCATION_MANAGER (user_data);
- GeoclueResourceFlags resource = 0;
-
- DEBUG ("%s changed", key);
-
- if (!tp_strdiff (key, EMPATHY_PREFS_LOCATION_RESOURCE_NETWORK))
- resource = GEOCLUE_RESOURCE_NETWORK;
- if (!tp_strdiff (key, EMPATHY_PREFS_LOCATION_RESOURCE_CELL))
- resource = GEOCLUE_RESOURCE_CELL;
- if (!tp_strdiff (key, EMPATHY_PREFS_LOCATION_RESOURCE_GPS))
- resource = GEOCLUE_RESOURCE_GPS;
-
- if (g_settings_get_boolean (gsettings_loc, key))
- self->priv->resources |= resource;
- else
- self->priv->resources &= ~resource;
-
- if (self->priv->geoclue_is_setup)
- update_resources (self);
-}
-
-static void
-accuracy_cb (GSettings *gsettings_loc,
- const gchar *key,
- gpointer user_data)
-{
- EmpathyLocationManager *self = EMPATHY_LOCATION_MANAGER (user_data);
-
- DEBUG ("%s changed", key);
-
- self->priv->reduce_accuracy = g_settings_get_boolean (gsettings_loc, key);
-
- if (!self->priv->geoclue_is_setup)
- return;
-
- geoclue_address_get_address_async (self->priv->gc_address,
- initial_address_cb, self);
- geoclue_position_get_position_async (self->priv->gc_position,
- initial_position_cb, self);
-}
-
-static void
-account_manager_prepared_cb (GObject *source_object,
- GAsyncResult *result,
- gpointer user_data)
-{
- GList *accounts, *l;
- TpAccountManager *account_manager = TP_ACCOUNT_MANAGER (source_object);
- EmpathyLocationManager *self = user_data;
- GError *error = NULL;
-
- if (!tp_proxy_prepare_finish (account_manager, result, &error))
- {
- DEBUG ("Failed to prepare account manager: %s", error->message);
- g_error_free (error);
- return;
- }
-
- accounts = tp_account_manager_dup_valid_accounts (account_manager);
- for (l = accounts; l != NULL; l = l->next)
- {
- TpAccount *account = TP_ACCOUNT (l->data);
-
- tp_g_signal_connect_object (account, "status-changed",
- G_CALLBACK (new_connection_cb), self, 0);
- }
- g_list_free_full (accounts, g_object_unref);
-}
-
-static void
-empathy_location_manager_init (EmpathyLocationManager *self)
-{
- EmpathyLocationManagerPrivate *priv = G_TYPE_INSTANCE_GET_PRIVATE (self,
- EMPATHY_TYPE_LOCATION_MANAGER, EmpathyLocationManagerPrivate);
-
- self->priv = priv;
- priv->geoclue_is_setup = FALSE;
- priv->location = tp_asv_new (NULL, NULL);
- priv->gsettings_loc = g_settings_new (EMPATHY_PREFS_LOCATION_SCHEMA);
-
- /* Setup account status callbacks */
- priv->account_manager = tp_account_manager_dup ();
-
- tp_proxy_prepare_async (priv->account_manager, NULL,
- account_manager_prepared_cb, self);
-
- /* Setup settings status callbacks */
- g_signal_connect (priv->gsettings_loc,
- "changed::" EMPATHY_PREFS_LOCATION_PUBLISH,
- G_CALLBACK (publish_cb), self);
- g_signal_connect (priv->gsettings_loc,
- "changed::" EMPATHY_PREFS_LOCATION_RESOURCE_NETWORK,
- G_CALLBACK (resource_cb), self);
- g_signal_connect (priv->gsettings_loc,
- "changed::" EMPATHY_PREFS_LOCATION_RESOURCE_CELL,
- G_CALLBACK (resource_cb), self);
- g_signal_connect (priv->gsettings_loc,
- "changed::" EMPATHY_PREFS_LOCATION_RESOURCE_GPS,
- G_CALLBACK (resource_cb), self);
- g_signal_connect (priv->gsettings_loc,
- "changed::" EMPATHY_PREFS_LOCATION_REDUCE_ACCURACY,
- G_CALLBACK (accuracy_cb), self);
-
- resource_cb (priv->gsettings_loc, EMPATHY_PREFS_LOCATION_RESOURCE_NETWORK,
- self);
- resource_cb (priv->gsettings_loc, EMPATHY_PREFS_LOCATION_RESOURCE_CELL, self);
- resource_cb (priv->gsettings_loc, EMPATHY_PREFS_LOCATION_RESOURCE_GPS, self);
- accuracy_cb (priv->gsettings_loc, EMPATHY_PREFS_LOCATION_REDUCE_ACCURACY,
- self);
- publish_cb (priv->gsettings_loc, EMPATHY_PREFS_LOCATION_PUBLISH, self);
-}
-
-EmpathyLocationManager *
-empathy_location_manager_dup_singleton (void)
-{
- return EMPATHY_LOCATION_MANAGER (g_object_new (EMPATHY_TYPE_LOCATION_MANAGER,
- NULL));
-}
diff --git a/libempathy-gtk/empathy-location-manager.h b/libempathy-gtk/empathy-location-manager.h
deleted file mode 100644
index 6ea8b7bf..00000000
--- a/libempathy-gtk/empathy-location-manager.h
+++ /dev/null
@@ -1,57 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * Copyright (C) 2009 Collabora Ltd.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301 USA
- *
- * Authors: Pierre-Luc Beaudoin <pierre-luc.beaudoin@collabora.co.uk>
- */
-
-#ifndef __EMPATHY_LOCATION_MANAGER_H__
-#define __EMPATHY_LOCATION_MANAGER_H__
-
-#include <glib-object.h>
-
-G_BEGIN_DECLS
-
-#define EMPATHY_TYPE_LOCATION_MANAGER (empathy_location_manager_get_type ())
-#define EMPATHY_LOCATION_MANAGER(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), EMPATHY_TYPE_LOCATION_MANAGER, EmpathyLocationManager))
-#define EMPATHY_LOCATION_MANAGER_CLASS(k) (G_TYPE_CHECK_CLASS_CAST ((k), EMPATHY_TYPE_LOCATION_MANAGER, EmpathyLocationManagerClass))
-#define EMPATHY_IS_LOCATION_MANAGER(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), EMPATHY_TYPE_LOCATION_MANAGER))
-#define EMPATHY_IS_LOCATION_MANAGER_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), EMPATHY_TYPE_LOCATION_MANAGER))
-#define EMPATHY_LOCATION_MANAGER_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), EMPATHY_TYPE_LOCATION_MANAGER, EmpathyLocationManagerClass))
-
-typedef struct _EmpathyLocationManager EmpathyLocationManager;
-typedef struct _EmpathyLocationManagerClass EmpathyLocationManagerClass;
-typedef struct _EmpathyLocationManagerPrivate EmpathyLocationManagerPrivate;
-
-struct _EmpathyLocationManager
-{
- GObject parent;
- EmpathyLocationManagerPrivate *priv;
-};
-
-struct _EmpathyLocationManagerClass
-{
- GObjectClass parent_class;
-};
-
-GType empathy_location_manager_get_type (void) G_GNUC_CONST;
-EmpathyLocationManager * empathy_location_manager_dup_singleton (void);
-
-G_END_DECLS
-
-#endif /* __EMPATHY_LOCATION_MANAGER_H__ */
diff --git a/libempathy-gtk/empathy-log-window.c b/libempathy-gtk/empathy-log-window.c
deleted file mode 100644
index 7097616d..00000000
--- a/libempathy-gtk/empathy-log-window.c
+++ /dev/null
@@ -1,3831 +0,0 @@
-/*
- * Copyright (C) 2006-2007 Imendio AB
- * Copyright (C) 2007-2011 Collabora Ltd.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301 USA
- *
- * Authors: Martyn Russell <martyn@imendio.com>
- * Xavier Claessens <xclaesse@gmail.com>
- * Emilio Pozuelo Monfort <emilio.pozuelo@collabora.co.uk>
- */
-
-#include "config.h"
-#include "empathy-log-window.h"
-
-#include <glib/gi18n-lib.h>
-#include <telepathy-glib/proxy-subclass.h>
-#include <tp-account-widgets/tpaw-builder.h>
-#include <tp-account-widgets/tpaw-images.h>
-#include <tp-account-widgets/tpaw-camera-monitor.h>
-#include <tp-account-widgets/tpaw-utils.h>
-
-#include "action-chain-internal.h"
-#include "empathy-account-chooser.h"
-#include "empathy-call-utils.h"
-#include "empathy-geometry.h"
-#include "empathy-gsettings.h"
-#include "empathy-images.h"
-#include "empathy-individual-information-dialog.h"
-#include "empathy-request-util.h"
-#include "empathy-theme-manager.h"
-#include "empathy-ui-utils.h"
-#include "empathy-utils.h"
-#include "empathy-webkit-utils.h"
-#include "extensions.h"
-
-#define DEBUG_FLAG EMPATHY_DEBUG_OTHER
-#include "empathy-debug.h"
-
-#define EMPATHY_NS "http://live.gnome.org/Empathy"
-
-G_DEFINE_TYPE (EmpathyLogWindow, empathy_log_window, GTK_TYPE_WINDOW);
-
-struct _EmpathyLogWindowPriv
-{
- GtkWidget *vbox;
-
- GtkWidget *button_profile;
- GtkWidget *button_chat;
- GtkWidget *button_call;
- GtkWidget *button_video;
-
- GtkWidget *search_entry;
-
- GtkWidget *notebook;
- GtkWidget *spinner;
-
- GtkWidget *treeview_who;
- GtkWidget *treeview_what;
- GtkWidget *treeview_when;
- GtkWidget *webview;
-
- GtkTreeStore *store_events;
-
- GtkWidget *account_chooser;
-
- gchar *last_find;
-
- /* List of selected GDates, free with g_list_free_full (l, g_date_free) */
- GList *current_dates;
-
- TplActionChain *chain;
- TplLogManager *log_manager;
-
- /* Hash of TpChannel<->TpAccount for use by the observer until we can
- * get a TpAccount from a TpConnection or wherever */
- GHashTable *channels;
- TpBaseClient *observer;
-
- EmpathyContact *selected_contact;
- EmpathyContact *events_contact;
-
- TpawCameraMonitor *camera_monitor;
- GBinding *button_video_binding;
-
- /* Used to cancel logger calls when no longer needed */
- guint count;
-
- /* List of owned TplLogSearchHits, free with tpl_log_search_hit_free */
- GList *hits;
- guint source;
-
- /* Only used while waiting for the account chooser to be ready */
- TpAccount *selected_account;
- gchar *selected_chat_id;
- gboolean selected_is_chatroom;
-
- GSettings *gsettings_chat;
- GSettings *gsettings_desktop;
-};
-
-static void log_window_search_entry_changed_cb (GtkWidget *entry,
- EmpathyLogWindow *self);
-static void log_window_search_entry_activate_cb (GtkWidget *widget,
- EmpathyLogWindow *self);
-static void log_window_search_entry_icon_pressed_cb (GtkEntry *entry,
- GtkEntryIconPosition icon_pos,
- GdkEvent *event,
- gpointer user_data);
-static void log_window_who_populate (EmpathyLogWindow *self);
-static void log_window_who_setup (EmpathyLogWindow *self);
-static void log_window_when_setup (EmpathyLogWindow *self);
-static void log_window_what_setup (EmpathyLogWindow *self);
-static void log_window_events_setup (EmpathyLogWindow *self);
-static void log_window_chats_accounts_changed_cb (GtkWidget *combobox,
- EmpathyLogWindow *self);
-static void log_window_chats_set_selected (EmpathyLogWindow *self);
-static void log_window_chats_get_messages (EmpathyLogWindow *self,
- gboolean force_get_dates);
-static void log_window_when_changed_cb (GtkTreeSelection *selection,
- EmpathyLogWindow *self);
-static void log_window_delete_menu_clicked_cb (GtkMenuItem *menuitem,
- EmpathyLogWindow *self);
-static void start_spinner (void);
-
-static void log_window_create_observer (EmpathyLogWindow *window);
-static gboolean log_window_events_button_press_event (GtkWidget *webview,
- GdkEventButton *event, EmpathyLogWindow *self);
-static void log_window_update_buttons_sensitivity (EmpathyLogWindow *self);
-
-static void
-empathy_account_chooser_filter_has_logs (TpAccount *account,
- EmpathyAccountChooserFilterResultCallback callback,
- gpointer callback_data,
- gpointer user_data);
-
-enum
-{
- PAGE_EVENTS,
- PAGE_SPINNER,
- PAGE_EMPTY
-};
-
-enum
-{
- COL_TYPE_ANY,
- COL_TYPE_SEPARATOR,
- COL_TYPE_NORMAL
-};
-
-enum
-{
- COL_WHO_TYPE,
- COL_WHO_ICON,
- COL_WHO_NAME,
- COL_WHO_NAME_SORT_KEY,
- COL_WHO_ID,
- COL_WHO_ACCOUNT,
- COL_WHO_TARGET,
- COL_WHO_COUNT
-};
-
-enum
-{
- COL_WHAT_TYPE,
- COL_WHAT_SUBTYPE,
- COL_WHAT_SENSITIVE,
- COL_WHAT_TEXT,
- COL_WHAT_ICON,
- COL_WHAT_COUNT
-};
-
-enum
-{
- COL_WHEN_DATE,
- COL_WHEN_TEXT,
- COL_WHEN_ICON,
- COL_WHEN_COUNT
-};
-
-enum
-{
- COL_EVENTS_TYPE,
- COL_EVENTS_TS,
- COL_EVENTS_PRETTY_DATE,
- COL_EVENTS_ICON,
- COL_EVENTS_TEXT,
- COL_EVENTS_ACCOUNT,
- COL_EVENTS_TARGET,
- COL_EVENTS_EVENT,
- COL_EVENTS_COUNT
-};
-
-#define CALENDAR_ICON "stock_calendar"
-
-/* Seconds between two messages to be considered one conversation */
-#define MAX_GAP 30*60
-
-#define WHAT_TYPE_SEPARATOR -1
-
-typedef enum
-{
- EVENT_CALL_INCOMING = 1 << 0,
- EVENT_CALL_OUTGOING = 1 << 1,
- EVENT_CALL_MISSED = 1 << 2,
- EVENT_CALL_ALL = 1 << 3,
-} EventSubtype;
-
-static gboolean
-log_window_get_selected (EmpathyLogWindow *window,
- GList **accounts,
- GList **entities,
- gboolean *anyone,
- GList **dates,
- TplEventTypeMask *event_mask,
- EventSubtype *subtype);
-
-static EmpathyLogWindow *log_window = NULL;
-
-static gboolean has_element;
-
-#ifndef _date_copy
-#define _date_copy(d) g_date_new_julian (g_date_get_julian (d))
-#endif
-
-typedef struct
-{
- EmpathyLogWindow *self;
- TpAccount *account;
- TplEntity *entity;
- GDate *date;
- TplEventTypeMask event_mask;
- EventSubtype subtype;
- guint count;
-} Ctx;
-
-static Ctx *
-ctx_new (EmpathyLogWindow *self,
- TpAccount *account,
- TplEntity *entity,
- GDate *date,
- TplEventTypeMask event_mask,
- EventSubtype subtype,
- guint count)
-{
- Ctx *ctx = g_slice_new0 (Ctx);
-
- ctx->self = self;
- if (account != NULL)
- ctx->account = g_object_ref (account);
- if (entity != NULL)
- ctx->entity = g_object_ref (entity);
- if (date != NULL)
- ctx->date = _date_copy (date);
- ctx->event_mask = event_mask;
- ctx->subtype = subtype;
- ctx->count = count;
-
- return ctx;
-}
-
-static void
-ctx_free (Ctx *ctx)
-{
- tp_clear_object (&ctx->account);
- tp_clear_object (&ctx->entity);
- tp_clear_pointer (&ctx->date, g_date_free);
-
- g_slice_free (Ctx, ctx);
-}
-
-static void
-select_account_once_ready (EmpathyLogWindow *self,
- TpAccount *account,
- const gchar *chat_id,
- gboolean is_chatroom)
-{
- EmpathyAccountChooser *account_chooser;
-
- account_chooser = EMPATHY_ACCOUNT_CHOOSER (self->priv->account_chooser);
-
- tp_clear_object (&self->priv->selected_account);
- self->priv->selected_account = g_object_ref (account);
-
- g_free (self->priv->selected_chat_id);
- self->priv->selected_chat_id = g_strdup (chat_id);
-
- self->priv->selected_is_chatroom = is_chatroom;
-
- empathy_account_chooser_set_account (account_chooser,
- self->priv->selected_account);
-}
-
-static void
-toolbutton_profile_clicked (GtkToolButton *toolbutton,
- EmpathyLogWindow *self)
-{
- FolksIndividual *individual;
-
- g_return_if_fail (self != NULL);
- g_return_if_fail (EMPATHY_IS_CONTACT (self->priv->selected_contact));
-
- individual = empathy_ensure_individual_from_tp_contact (
- empathy_contact_get_tp_contact (self->priv->selected_contact));
-
- empathy_display_individual_info (individual);
-
- g_object_unref (individual);
-}
-
-static void
-toolbutton_chat_clicked (GtkToolButton *toolbutton,
- EmpathyLogWindow *self)
-{
- g_return_if_fail (self != NULL);
- g_return_if_fail (EMPATHY_IS_CONTACT (self->priv->selected_contact));
-
- empathy_chat_with_contact (self->priv->selected_contact,
- gtk_get_current_event_time ());
-}
-
-static void
-toolbutton_av_clicked (GtkToolButton *toolbutton,
- EmpathyLogWindow *self)
-{
- gboolean video;
-
- g_return_if_fail (self != NULL);
- g_return_if_fail (EMPATHY_IS_CONTACT (self->priv->selected_contact));
-
- video = (GTK_WIDGET (toolbutton) == self->priv->button_video);
-
- empathy_call_new_with_streams (
- empathy_contact_get_id (self->priv->selected_contact),
- empathy_contact_get_account (self->priv->selected_contact),
- TRUE, video, gtk_get_current_event_time ());
-}
-
-static void
-insert_or_change_row (EmpathyLogWindow *self,
- const char *method,
- GtkTreeModel *model,
- GtkTreePath *path,
- GtkTreeIter *iter)
-{
- char *str = gtk_tree_path_to_string (path);
- char *script, *text, *date, *stock_icon;
- GString *escaped_text;
- char *icon = NULL;
- gint i;
-
- gtk_tree_model_get (model, iter,
- COL_EVENTS_TEXT, &text,
- COL_EVENTS_PRETTY_DATE, &date,
- COL_EVENTS_ICON, &stock_icon,
- -1);
-
- if (!tp_str_empty (stock_icon))
- {
- GtkIconInfo *icon_info = gtk_icon_theme_lookup_icon (
- gtk_icon_theme_get_default (),
- stock_icon,
- GTK_ICON_SIZE_MENU, 0);
-
- if (icon_info != NULL)
- icon = g_strdup (gtk_icon_info_get_filename (icon_info));
-
- gtk_icon_info_free (icon_info);
- }
-
- escaped_text = g_string_new (NULL);
-
- /* Only need to deal with «'» and «\».
- *
- * Note that these never appear in non-ascii utf8 characters, so just
- * pretend like we have an ascii string...
- */
- for (i = 0; text && text[i]; i++)
- {
- gchar c = text[i];
-
- if (c == '\'' || c == '\\')
- g_string_append_c (escaped_text, '\\');
-
- g_string_append_c (escaped_text, c);
- }
-
- script = g_strdup_printf ("javascript:%s([%s], '%s', '%s', '%s');",
- method,
- g_strdelimit (str, ":", ','),
- escaped_text->str,
- icon != NULL ? icon : "",
- date);
-
- webkit_web_view_execute_script (WEBKIT_WEB_VIEW (self->priv->webview),
- script);
-
- g_string_free (escaped_text, TRUE);
- g_free (str);
- g_free (text);
- g_free (date);
- g_free (stock_icon);
- g_free (icon);
- g_free (script);
-}
-
-static void
-store_events_row_inserted (GtkTreeModel *model,
- GtkTreePath *path,
- GtkTreeIter *iter,
- EmpathyLogWindow *self)
-{
- insert_or_change_row (self, "insertRow", model, path, iter);
-}
-
-static void
-store_events_row_changed (GtkTreeModel *model,
- GtkTreePath *path,
- GtkTreeIter *iter,
- EmpathyLogWindow *self)
-{
- insert_or_change_row (self, "changeRow", model, path, iter);
-}
-
-static void
-store_events_row_deleted (GtkTreeModel *model,
- GtkTreePath *path,
- EmpathyLogWindow *self)
-{
- char *str = gtk_tree_path_to_string (path);
- char *script;
-
- script = g_strdup_printf ("javascript:deleteRow([%s]);",
- g_strdelimit (str, ":", ','));
-
- webkit_web_view_execute_script (WEBKIT_WEB_VIEW (self->priv->webview),
- script);
-
- g_free (str);
- g_free (script);
-}
-
-static void
-store_events_has_child_rows (GtkTreeModel *model,
- GtkTreePath *path,
- GtkTreeIter *iter,
- EmpathyLogWindow *self)
-{
- char *str = gtk_tree_path_to_string (path);
- char *script;
-
- script = g_strdup_printf ("javascript:hasChildRows([%s], %u);",
- g_strdelimit (str, ":", ','),
- gtk_tree_model_iter_has_child (model, iter));
-
- webkit_web_view_execute_script (WEBKIT_WEB_VIEW (self->priv->webview),
- script);
-
- g_free (str);
- g_free (script);
-}
-
-static void
-store_events_rows_reordered (GtkTreeModel *model,
- GtkTreePath *path,
- GtkTreeIter *iter,
- int *new_order,
- EmpathyLogWindow *self)
-{
- char *str = gtk_tree_path_to_string (path);
- int i, children = gtk_tree_model_iter_n_children (model, iter);
- char **new_order_strv, *new_order_s;
- char *script;
-
- new_order_strv = g_new0 (char *, children + 1);
-
- for (i = 0; i < children; i++)
- new_order_strv[i] = g_strdup_printf ("%i", new_order[i]);
-
- new_order_s = g_strjoinv (",", new_order_strv);
-
- script = g_strdup_printf ("javascript:reorderRows([%s], [%s]);",
- str == NULL ? "" : g_strdelimit (str, ":", ','),
- new_order_s);
-
- webkit_web_view_execute_script (WEBKIT_WEB_VIEW (self->priv->webview),
- script);
-
- g_free (str);
- g_free (script);
- g_free (new_order_s);
- g_strfreev (new_order_strv);
-}
-
-static gboolean
-events_webview_handle_navigation (WebKitWebView *webview,
- WebKitWebFrame *frame,
- WebKitNetworkRequest *request,
- WebKitWebNavigationAction *navigation_action,
- WebKitWebPolicyDecision *policy_decision,
- EmpathyLogWindow *window)
-{
- empathy_url_show (GTK_WIDGET (webview),
- webkit_network_request_get_uri (request));
-
- webkit_web_policy_decision_ignore (policy_decision);
- return TRUE;
-}
-
-static GObject *
-empathy_log_window_constructor (GType type,
- guint n_props,
- GObjectConstructParam *props)
-{
- GObject *retval;
-
- if (log_window != NULL)
- {
- retval = (GObject *) log_window;
- }
- else
- {
- retval = G_OBJECT_CLASS (empathy_log_window_parent_class)
- ->constructor (type, n_props, props);
-
- log_window = EMPATHY_LOG_WINDOW (retval);
- g_object_add_weak_pointer (retval, (gpointer) &log_window);
- }
-
- return retval;
-}
-
-static void
-empathy_log_window_dispose (GObject *object)
-{
- EmpathyLogWindow *self = EMPATHY_LOG_WINDOW (object);
-
- if (self->priv->source != 0)
- {
- g_source_remove (self->priv->source);
- self->priv->source = 0;
- }
-
- if (self->priv->current_dates != NULL)
- {
- g_list_free_full (self->priv->current_dates,
- (GDestroyNotify) g_date_free);
- self->priv->current_dates = NULL;
- }
-
- tp_clear_pointer (&self->priv->chain, _tpl_action_chain_free);
- tp_clear_pointer (&self->priv->channels, g_hash_table_unref);
-
- tp_clear_object (&self->priv->observer);
- tp_clear_object (&self->priv->log_manager);
- tp_clear_object (&self->priv->selected_account);
- tp_clear_object (&self->priv->selected_contact);
- tp_clear_object (&self->priv->events_contact);
- tp_clear_object (&self->priv->camera_monitor);
-
- tp_clear_object (&self->priv->gsettings_chat);
- tp_clear_object (&self->priv->gsettings_desktop);
-
- tp_clear_object (&self->priv->store_events);
-
- G_OBJECT_CLASS (empathy_log_window_parent_class)->dispose (object);
-}
-
-static void
-empathy_log_window_finalize (GObject *object)
-{
- EmpathyLogWindow *self = EMPATHY_LOG_WINDOW (object);
-
- g_free (self->priv->last_find);
- g_free (self->priv->selected_chat_id);
-
- G_OBJECT_CLASS (empathy_log_window_parent_class)->finalize (object);
-}
-
-static void
-empathy_log_window_class_init (
- EmpathyLogWindowClass *empathy_log_window_class)
-{
- GObjectClass *object_class = G_OBJECT_CLASS (empathy_log_window_class);
-
- g_type_class_add_private (empathy_log_window_class,
- sizeof (EmpathyLogWindowPriv));
-
- object_class->constructor = empathy_log_window_constructor;
- object_class->dispose = empathy_log_window_dispose;
- object_class->finalize = empathy_log_window_finalize;
-}
-
-static void
-empathy_log_window_init (EmpathyLogWindow *self)
-{
- EmpathyAccountChooser *account_chooser;
- GtkBuilder *gui;
- gchar *filename;
- GFile *gfile;
- GtkWidget *vbox, *accounts, *search, *label, *closeitem;
- GtkWidget *scrolledwindow_events;
- gchar *uri;
-
- self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self,
- EMPATHY_TYPE_LOG_WINDOW, EmpathyLogWindowPriv);
-
- self->priv->chain = _tpl_action_chain_new_async (NULL, NULL, NULL);
-
- self->priv->camera_monitor = tpaw_camera_monitor_dup_singleton ();
-
- self->priv->log_manager = tpl_log_manager_dup_singleton ();
-
- self->priv->gsettings_chat = g_settings_new (EMPATHY_PREFS_CHAT_SCHEMA);
- self->priv->gsettings_desktop = g_settings_new (
- EMPATHY_PREFS_DESKTOP_INTERFACE_SCHEMA);
-
- gtk_window_set_title (GTK_WINDOW (self), _("History"));
- gtk_widget_set_can_focus (GTK_WIDGET (self), FALSE);
- gtk_window_set_default_size (GTK_WINDOW (self), 800, 600);
-
- filename = empathy_file_lookup ("empathy-log-window.ui", "libempathy-gtk");
- gui = tpaw_builder_get_file (filename,
- "vbox1", &self->priv->vbox,
- "toolbutton_profile", &self->priv->button_profile,
- "toolbutton_chat", &self->priv->button_chat,
- "toolbutton_call", &self->priv->button_call,
- "toolbutton_video", &self->priv->button_video,
- "toolbutton_accounts", &accounts,
- "toolbutton_search", &search,
- "imagemenuitem_close", &closeitem,
- "treeview_who", &self->priv->treeview_who,
- "treeview_what", &self->priv->treeview_what,
- "treeview_when", &self->priv->treeview_when,
- "scrolledwindow_events", &scrolledwindow_events,
- "notebook", &self->priv->notebook,
- "spinner", &self->priv->spinner,
- NULL);
- g_free (filename);
-
- tpaw_builder_connect (gui, self,
- "toolbutton_profile", "clicked", toolbutton_profile_clicked,
- "toolbutton_chat", "clicked", toolbutton_chat_clicked,
- "toolbutton_call", "clicked", toolbutton_av_clicked,
- "toolbutton_video", "clicked", toolbutton_av_clicked,
- "imagemenuitem_delete", "activate", log_window_delete_menu_clicked_cb,
- NULL);
-
- gtk_container_add (GTK_CONTAINER (self), self->priv->vbox);
-
- g_object_unref (gui);
-
- g_signal_connect_swapped (closeitem, "activate",
- G_CALLBACK (gtk_widget_destroy), self);
-
- /* Account chooser for chats */
- vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 3);
-
- self->priv->account_chooser = empathy_account_chooser_new ();
- account_chooser = EMPATHY_ACCOUNT_CHOOSER (self->priv->account_chooser);
- empathy_account_chooser_set_has_all_option (account_chooser, TRUE);
- empathy_account_chooser_set_filter (account_chooser,
- empathy_account_chooser_filter_has_logs, NULL);
- empathy_account_chooser_set_all (account_chooser);
-
- gtk_style_context_add_class (gtk_widget_get_style_context (self->priv->account_chooser),
- GTK_STYLE_CLASS_RAISED);
-
- g_signal_connect (self->priv->account_chooser, "changed",
- G_CALLBACK (log_window_chats_accounts_changed_cb),
- self);
-
- label = gtk_label_new (_("Show"));
-
- gtk_box_pack_start (GTK_BOX (vbox),
- self->priv->account_chooser,
- FALSE, FALSE, 0);
-
- gtk_box_pack_start (GTK_BOX (vbox),
- label,
- FALSE, FALSE, 0);
-
- gtk_widget_show_all (vbox);
- gtk_container_add (GTK_CONTAINER (accounts), vbox);
-
- /* Search entry */
- vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 3);
-
- self->priv->search_entry = gtk_entry_new ();
- gtk_entry_set_icon_from_icon_name (GTK_ENTRY (self->priv->search_entry),
- GTK_ENTRY_ICON_SECONDARY, "edit-find-symbolic");
- gtk_entry_set_icon_sensitive (GTK_ENTRY (self->priv->search_entry),
- GTK_ENTRY_ICON_SECONDARY, FALSE);
-
- label = gtk_label_new (_("Search"));
-
- gtk_box_pack_start (GTK_BOX (vbox),
- self->priv->search_entry,
- FALSE, FALSE, 0);
-
- gtk_box_pack_start (GTK_BOX (vbox),
- label,
- FALSE, FALSE, 0);
-
- gtk_widget_show_all (vbox);
- gtk_container_add (GTK_CONTAINER (search), vbox);
-
- g_signal_connect (self->priv->search_entry, "changed",
- G_CALLBACK (log_window_search_entry_changed_cb),
- self);
-
- g_signal_connect (self->priv->search_entry, "activate",
- G_CALLBACK (log_window_search_entry_activate_cb),
- self);
-
- g_signal_connect (self->priv->search_entry, "icon-press",
- G_CALLBACK (log_window_search_entry_icon_pressed_cb),
- self);
-
- /* Contacts */
- log_window_events_setup (self);
- log_window_who_setup (self);
- log_window_what_setup (self);
- log_window_when_setup (self);
-
- log_window_create_observer (self);
-
- log_window_who_populate (self);
-
- /* events */
- self->priv->webview = webkit_web_view_new ();
- gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolledwindow_events),
- GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC);
- gtk_container_add (GTK_CONTAINER (scrolledwindow_events),
- self->priv->webview);
- gtk_widget_show (self->priv->webview);
-
- empathy_webkit_bind_font_setting (WEBKIT_WEB_VIEW (self->priv->webview),
- self->priv->gsettings_desktop,
- EMPATHY_PREFS_DESKTOP_INTERFACE_FONT_NAME);
-
- filename = empathy_file_lookup ("empathy-log-window.html", "data");
- gfile = g_file_new_for_path (filename);
- g_free (filename);
-
- uri = g_file_get_uri (gfile);
- webkit_web_view_load_uri (WEBKIT_WEB_VIEW (self->priv->webview), uri);
- g_object_unref (gfile);
- g_free (uri);
-
- /* handle all navigation externally */
- g_signal_connect (self->priv->webview, "navigation-policy-decision-requested",
- G_CALLBACK (events_webview_handle_navigation), self);
-
- /* listen to changes to the treemodel */
- g_signal_connect (self->priv->store_events, "row-inserted",
- G_CALLBACK (store_events_row_inserted), self);
- g_signal_connect (self->priv->store_events, "row-changed",
- G_CALLBACK (store_events_row_changed), self);
- g_signal_connect (self->priv->store_events, "row-deleted",
- G_CALLBACK (store_events_row_deleted), self);
- g_signal_connect (self->priv->store_events, "rows-reordered",
- G_CALLBACK (store_events_rows_reordered), self);
- g_signal_connect (self->priv->store_events, "row-has-child-toggled",
- G_CALLBACK (store_events_has_child_rows), self);
-
- /* track clicked row */
- g_signal_connect (self->priv->webview, "button-press-event",
- G_CALLBACK (log_window_events_button_press_event), self);
-
- log_window_update_buttons_sensitivity (self);
- gtk_widget_show (GTK_WIDGET (self));
-
- empathy_geometry_bind (GTK_WINDOW (self), "log-window");
-}
-
-GtkWidget *
-empathy_log_window_show (TpAccount *account,
- const gchar *chat_id,
- gboolean is_chatroom,
- GtkWindow *parent)
-{
- log_window = g_object_new (EMPATHY_TYPE_LOG_WINDOW, NULL);
-
- gtk_window_present (GTK_WINDOW (log_window));
-
- if (account != NULL && chat_id != NULL)
- select_account_once_ready (log_window, account, chat_id, is_chatroom);
-
- if (parent != NULL)
- gtk_window_set_transient_for (GTK_WINDOW (log_window),
- GTK_WINDOW (parent));
-
- return GTK_WIDGET (log_window);
-}
-
-static gboolean
-account_equal (TpAccount *a,
- TpAccount *b)
-{
- return g_str_equal (tp_proxy_get_object_path (a),
- tp_proxy_get_object_path (b));
-}
-
-static gboolean
-entity_equal (TplEntity *a,
- TplEntity *b)
-{
- return g_str_equal (tpl_entity_get_identifier (a),
- tpl_entity_get_identifier (b));
-}
-
-static gboolean
-is_same_confroom (TplEvent *e1,
- TplEvent *e2)
-{
- TplEntity *sender1 = tpl_event_get_sender (e1);
- TplEntity *receiver1 = tpl_event_get_receiver (e1);
- TplEntity *sender2 = tpl_event_get_sender (e2);
- TplEntity *receiver2 = tpl_event_get_receiver (e2);
- TplEntity *room1, *room2;
-
- if (receiver1 == NULL || receiver2 == NULL)
- return FALSE;
-
- if (tpl_entity_get_entity_type (sender1) == TPL_ENTITY_ROOM)
- room1 = sender1;
- else if (tpl_entity_get_entity_type (receiver1) == TPL_ENTITY_ROOM)
- room1 = receiver1;
- else
- return FALSE;
-
- if (tpl_entity_get_entity_type (sender2) == TPL_ENTITY_ROOM)
- room2 = sender2;
- else if (tpl_entity_get_entity_type (receiver2) == TPL_ENTITY_ROOM)
- room2 = receiver2;
- else
- return FALSE;
-
- return g_str_equal (tpl_entity_get_identifier (room1),
- tpl_entity_get_identifier (room2));
-}
-
-static void
-maybe_refresh_logs (TpChannel *channel,
- TpAccount *account)
-{
- GList *accounts = NULL, *entities = NULL, *dates = NULL;
- GList *acc, *ent;
- TplEventTypeMask event_mask;
- GDate *anytime = NULL, *today = NULL;
- GDateTime *now = NULL;
- gboolean refresh = FALSE;
- gboolean anyone;
- const gchar *type;
-
- if (!log_window_get_selected (log_window,
- &accounts, &entities, &anyone, &dates, &event_mask, NULL))
- {
- DEBUG ("Could not get selected rows");
- return;
- }
-
- type = tp_channel_get_channel_type (channel);
-
- /* If the channel type is not in the What pane, whatever has happened
- * won't be displayed in the events pane. */
- if (!tp_strdiff (type, TP_IFACE_CHANNEL_TYPE_TEXT) &&
- !(event_mask & TPL_EVENT_MASK_TEXT))
- goto out;
- if ((!tp_strdiff (type, TP_IFACE_CHANNEL_TYPE_STREAMED_MEDIA) ||
- !tp_strdiff (type, TP_IFACE_CHANNEL_TYPE_CALL)) &&
- !(event_mask & TPL_EVENT_MASK_CALL))
- goto out;
-
- anytime = g_date_new_dmy (2, 1, -1);
- now = g_date_time_new_now_local ();
- today = g_date_new_dmy (g_date_time_get_day_of_month (now),
- g_date_time_get_month (now),
- g_date_time_get_year (now));
-
- /* If Today (or anytime) isn't selected, anything that has happened now
- * won't be displayed. */
- if (!g_list_find_custom (dates, anytime, (GCompareFunc) g_date_compare) &&
- !g_list_find_custom (dates, today, (GCompareFunc) g_date_compare))
- goto out;
-
- if (anyone)
- {
- refresh = TRUE;
- goto out;
- }
-
- for (acc = accounts, ent = entities;
- acc != NULL && ent != NULL;
- acc = g_list_next (acc), ent = g_list_next (ent))
- {
- if (!account_equal (account, acc->data))
- continue;
-
- if (!tp_strdiff (tp_channel_get_identifier (channel),
- tpl_entity_get_identifier (ent->data)))
- {
- refresh = TRUE;
- break;
- }
- }
-
- out:
- tp_clear_pointer (&anytime, g_date_free);
- tp_clear_pointer (&today, g_date_free);
- tp_clear_pointer (&now, g_date_time_unref);
- g_list_free_full (accounts, g_object_unref);
- g_list_free_full (entities, g_object_unref);
- g_list_free_full (dates, (GFreeFunc) g_date_free);
-
- if (refresh)
- {
- DEBUG ("Refreshing logs after received event");
-
- /* FIXME: We need to populate the entities in case we
- * didn't have any previous logs with this contact. */
- log_window_chats_get_messages (log_window, FALSE);
- }
-}
-
-static void
-on_msg_sent (TpTextChannel *channel,
- TpSignalledMessage *message,
- guint flags,
- gchar *token,
- EmpathyLogWindow *self)
-{
- TpAccount *account = g_hash_table_lookup (self->priv->channels, channel);
-
- maybe_refresh_logs (TP_CHANNEL (channel), account);
-}
-
-static void
-on_msg_received (TpTextChannel *channel,
- TpSignalledMessage *message,
- EmpathyLogWindow *self)
-{
- TpMessage *msg = TP_MESSAGE (message);
- TpChannelTextMessageType type = tp_message_get_message_type (msg);
- TpAccount *account = g_hash_table_lookup (self->priv->channels, channel);
-
- if (type != TP_CHANNEL_TEXT_MESSAGE_TYPE_NORMAL &&
- type != TP_CHANNEL_TEXT_MESSAGE_TYPE_ACTION)
- return;
-
- maybe_refresh_logs (TP_CHANNEL (channel), account);
-}
-
-static void
-on_channel_ended (TpChannel *channel,
- guint domain,
- gint code,
- gchar *message,
- EmpathyLogWindow *self)
-{
- if (self->priv->channels != NULL)
- g_hash_table_remove (self->priv->channels, channel);
-}
-
-static void
-on_call_ended (TpChannel *channel,
- guint domain,
- gint code,
- gchar *message,
- EmpathyLogWindow *self)
-{
- TpAccount *account = g_hash_table_lookup (self->priv->channels, channel);
-
- maybe_refresh_logs (channel, account);
-
- if (self->priv->channels != NULL)
- g_hash_table_remove (self->priv->channels, channel);
-}
-
-static void
-observe_channels (TpSimpleObserver *observer,
- TpAccount *account,
- TpConnection *connection,
- GList *channels,
- TpChannelDispatchOperation *dispatch_operation,
- GList *requests,
- TpObserveChannelsContext *context,
- gpointer user_data)
-{
- EmpathyLogWindow *self = user_data;
-
- GList *l;
-
- for (l = channels; l != NULL; l = g_list_next (l))
- {
- TpChannel *channel = l->data;
- const gchar *type = tp_channel_get_channel_type (channel);
-
- if (!tp_strdiff (type, TP_IFACE_CHANNEL_TYPE_TEXT))
- {
- TpTextChannel *text_channel = TP_TEXT_CHANNEL (channel);
-
- g_hash_table_insert (self->priv->channels,
- g_object_ref (channel), g_object_ref (account));
-
- tp_g_signal_connect_object (text_channel, "message-sent",
- G_CALLBACK (on_msg_sent), self, 0);
- tp_g_signal_connect_object (text_channel, "message-received",
- G_CALLBACK (on_msg_received), self, 0);
- tp_g_signal_connect_object (channel, "invalidated",
- G_CALLBACK (on_channel_ended), self, 0);
- }
- else if (!tp_strdiff (type, TP_IFACE_CHANNEL_TYPE_CALL) ||
- !tp_strdiff (type, TP_IFACE_CHANNEL_TYPE_STREAMED_MEDIA))
- {
- g_hash_table_insert (self->priv->channels,
- g_object_ref (channel), g_object_ref (account));
-
- tp_g_signal_connect_object (channel, "invalidated",
- G_CALLBACK (on_call_ended), self, 0);
- }
- else
- {
- g_warning ("Unknown channel type: %s", type);
- }
- }
-
- tp_observe_channels_context_accept (context);
-}
-
-static void
-log_window_create_observer (EmpathyLogWindow *self)
-{
- TpAccountManager *am;
-
- am = tp_account_manager_dup ();
-
- self->priv->observer = tp_simple_observer_new_with_am (am, TRUE, "LogWindow",
- TRUE, observe_channels,
- g_object_ref (self), g_object_unref);
-
- self->priv->channels = g_hash_table_new_full (g_direct_hash, g_direct_equal,
- g_object_unref, g_object_unref);
-
- tp_base_client_take_observer_filter (self->priv->observer,
- tp_asv_new (
- TP_PROP_CHANNEL_CHANNEL_TYPE, G_TYPE_STRING,
- TP_IFACE_CHANNEL_TYPE_TEXT,
- NULL));
- tp_base_client_take_observer_filter (self->priv->observer,
- tp_asv_new (
- TP_PROP_CHANNEL_CHANNEL_TYPE, G_TYPE_STRING,
- TP_IFACE_CHANNEL_TYPE_STREAMED_MEDIA,
- NULL));
- tp_base_client_take_observer_filter (self->priv->observer,
- tp_asv_new (
- TP_PROP_CHANNEL_CHANNEL_TYPE, G_TYPE_STRING,
- TP_IFACE_CHANNEL_TYPE_CALL,
- NULL));
-
- tp_base_client_register (self->priv->observer, NULL);
-
- g_object_unref (am);
-}
-
-static TplEntity *
-event_get_target (TplEvent *event)
-{
- TplEntity *sender = tpl_event_get_sender (event);
- TplEntity *receiver = tpl_event_get_receiver (event);
-
- if (tpl_entity_get_entity_type (sender) == TPL_ENTITY_SELF)
- return receiver;
-
- return sender;
-}
-
-static gboolean
-model_is_parent (GtkTreeModel *model,
- GtkTreeIter *iter,
- TplEvent *event)
-{
- TplEvent *stored_event;
- TplEntity *target;
- TpAccount *account;
- gboolean found = FALSE;
- GtkTreeIter parent;
-
- if (gtk_tree_model_iter_parent (model, &parent, iter))
- return FALSE;
-
- gtk_tree_model_get (model, iter,
- COL_EVENTS_ACCOUNT, &account,
- COL_EVENTS_TARGET, &target,
- COL_EVENTS_EVENT, &stored_event,
- -1);
-
- if (G_OBJECT_TYPE (event) == G_OBJECT_TYPE (stored_event) &&
- account_equal (account, tpl_event_get_account (event)) &&
- (entity_equal (target, event_get_target (event)) ||
- is_same_confroom (event, stored_event)))
- {
- GtkTreeIter child;
- gint64 timestamp;
-
- gtk_tree_model_iter_nth_child (model, &child, iter,
- gtk_tree_model_iter_n_children (model, iter) - 1);
-
- gtk_tree_model_get (model, &child,
- COL_EVENTS_TS, &timestamp,
- -1);
-
- if (ABS (tpl_event_get_timestamp (event) - timestamp) < MAX_GAP)
- {
- /* The gap is smaller than 30 min */
- found = TRUE;
- }
- }
-
- g_object_unref (stored_event);
- g_object_unref (account);
- g_object_unref (target);
-
- return found;
-}
-
-static gchar *
-get_display_string_for_chat_message (EmpathyMessage *message,
- TplEvent *event)
-{
- EmpathyContact *sender, *receiver, *target;
- TplEntity *ent_sender, *ent_receiver;
- const gchar *format;
-
- sender = empathy_message_get_sender (message);
- receiver = empathy_message_get_receiver (message);
-
- ent_sender = tpl_event_get_sender (event);
- ent_receiver = tpl_event_get_receiver (event);
-
- /* If this is a MUC, we want to show "Chat in <room>". */
- if (tpl_entity_get_entity_type (ent_sender) == TPL_ENTITY_ROOM ||
- (ent_receiver != NULL &&
- tpl_entity_get_entity_type (ent_receiver) == TPL_ENTITY_ROOM))
- format = _("Chat in %s");
- else
- format = _("Chat with %s");
-
- if (tpl_entity_get_entity_type (ent_sender) == TPL_ENTITY_ROOM)
- target = sender;
- else if (ent_receiver != NULL &&
- tpl_entity_get_entity_type (ent_receiver) == TPL_ENTITY_ROOM)
- target = receiver;
- else if (empathy_contact_is_user (sender))
- target = receiver;
- else
- target = sender;
-
- return g_markup_printf_escaped (format, empathy_contact_get_alias (target));
-}
-
-static void
-get_parent_iter_for_message (TplEvent *event,
- EmpathyMessage *message,
- GtkTreeIter *parent)
-{
- GtkTreeStore *store;
- GtkTreeModel *model;
- GtkTreeIter iter;
- gboolean parent_found = FALSE;
- gboolean next;
-
- store = log_window->priv->store_events;
- model = GTK_TREE_MODEL (store);
-
- for (next = gtk_tree_model_get_iter_first (model, &iter);
- next;
- next = gtk_tree_model_iter_next (model, &iter))
- {
- if ((parent_found = model_is_parent (model, &iter, event)))
- break;
- }
-
- if (parent_found)
- {
- *parent = iter;
- }
- else
- {
- GDateTime *date;
- gchar *body, *pretty_date;
-
- date = g_date_time_new_from_unix_local (
- tpl_event_get_timestamp (event));
-
- pretty_date = g_date_time_format (date,
- C_("A date with the time", "%A, %e %B %Y %X"));
-
- body = get_display_string_for_chat_message (message, event);
-
- gtk_tree_store_append (store, &iter, NULL);
- gtk_tree_store_set (store, &iter,
- COL_EVENTS_TS, tpl_event_get_timestamp (event),
- COL_EVENTS_PRETTY_DATE, pretty_date,
- COL_EVENTS_TEXT, body,
- COL_EVENTS_ICON, "format-justify-fill",
- COL_EVENTS_ACCOUNT, tpl_event_get_account (event),
- COL_EVENTS_TARGET, event_get_target (event),
- COL_EVENTS_EVENT, event,
- -1);
-
- *parent = iter;
-
- g_free (body);
- g_free (pretty_date);
- g_date_time_unref (date);
- }
-}
-
-static const gchar *
-get_icon_for_event (TplEvent *event)
-{
- const gchar *icon = NULL;
-
- if (TPL_IS_TEXT_EVENT (event))
- {
- TplTextEvent *text = TPL_TEXT_EVENT (event);
-
- if (!tp_str_empty (tpl_text_event_get_supersedes_token (text)))
- icon = EMPATHY_IMAGE_EDIT_MESSAGE;
- }
- else if (TPL_IS_CALL_EVENT (event))
- {
- TplCallEvent *call = TPL_CALL_EVENT (event);
- TpCallStateChangeReason reason = tpl_call_event_get_end_reason (call);
- TplEntity *sender = tpl_event_get_sender (event);
- TplEntity *receiver = tpl_event_get_receiver (event);
-
- if (reason == TP_CALL_STATE_CHANGE_REASON_NO_ANSWER)
- icon = EMPATHY_IMAGE_CALL_MISSED;
- else if (tpl_entity_get_entity_type (sender) == TPL_ENTITY_SELF)
- icon = EMPATHY_IMAGE_CALL_OUTGOING;
- else if (tpl_entity_get_entity_type (receiver) == TPL_ENTITY_SELF)
- icon = EMPATHY_IMAGE_CALL_INCOMING;
- }
-
- return icon;
-}
-
-static void
-log_window_append_chat_message (TplEvent *event,
- EmpathyMessage *message)
-{
- GtkTreeStore *store = log_window->priv->store_events;
- GtkTreeIter iter, parent;
- gchar *pretty_date, *alias, *body;
- GDateTime *date;
- TpawStringParser *parsers;
- GString *msg;
-
- date = g_date_time_new_from_unix_local (
- tpl_event_get_timestamp (event));
-
- pretty_date = g_date_time_format (date, "%X");
-
- get_parent_iter_for_message (event, message, &parent);
-
- alias = g_markup_escape_text (
- tpl_entity_get_alias (tpl_event_get_sender (event)), -1);
-
- /* escape the text */
- parsers = empathy_webkit_get_string_parser (
- g_settings_get_boolean (log_window->priv->gsettings_chat,
- EMPATHY_PREFS_CHAT_SHOW_SMILEYS));
- msg = g_string_new ("");
-
- tpaw_string_parser_substr (empathy_message_get_body (message), -1,
- parsers, msg);
-
- if (tpl_text_event_get_message_type (TPL_TEXT_EVENT (event))
- == TP_CHANNEL_TEXT_MESSAGE_TYPE_ACTION)
- {
- /* Translators: this is an emote: '* Danielle waves' */
- body = g_strdup_printf (_("<i>* %s %s</i>"), alias, msg->str);
- }
- else
- {
- /* Translators: this is a message: 'Danielle: hello'
- * The string in bold is the sender's name */
- body = g_strdup_printf (_("<b>%s:</b> %s"), alias, msg->str);
- }
-
- gtk_tree_store_append (store, &iter, &parent);
- gtk_tree_store_set (store, &iter,
- COL_EVENTS_TS, tpl_event_get_timestamp (event),
- COL_EVENTS_PRETTY_DATE, pretty_date,
- COL_EVENTS_TEXT, body,
- COL_EVENTS_ICON, get_icon_for_event (event),
- COL_EVENTS_ACCOUNT, tpl_event_get_account (event),
- COL_EVENTS_TARGET, event_get_target (event),
- COL_EVENTS_EVENT, event,
- -1);
-
- g_string_free (msg, TRUE);
- g_free (body);
- g_free (alias);
- g_free (pretty_date);
- g_date_time_unref (date);
-}
-
-static void
-log_window_append_call (TplEvent *event,
- EmpathyMessage *message)
-{
- TplCallEvent *call = TPL_CALL_EVENT (event);
- GtkTreeStore *store = log_window->priv->store_events;
- GtkTreeIter iter, child;
- gchar *pretty_date, *duration, *finished;
- GDateTime *started_date, *finished_date;
- GTimeSpan span;
-
- /* If searching, only add the call if the search string appears anywhere */
- if (!TPAW_STR_EMPTY (log_window->priv->last_find))
- {
- if (strstr (tpl_entity_get_identifier (tpl_event_get_sender (event)),
- log_window->priv->last_find) == NULL &&
- strstr (tpl_entity_get_identifier (tpl_event_get_receiver (event)),
- log_window->priv->last_find) == NULL &&
- strstr (tpl_call_event_get_detailed_end_reason (call),
- log_window->priv->last_find) == NULL)
- {
- DEBUG ("TplCallEvent doesn't match search string, ignoring");
- return;
- }
- }
-
- started_date = g_date_time_new_from_unix_local (
- tpl_event_get_timestamp (event));
-
- pretty_date = g_date_time_format (started_date,
- C_("A date with the time", "%A, %e %B %Y %X"));
-
- gtk_tree_store_append (store, &iter, NULL);
- gtk_tree_store_set (store, &iter,
- COL_EVENTS_TS, tpl_event_get_timestamp (event),
- COL_EVENTS_PRETTY_DATE, pretty_date,
- COL_EVENTS_TEXT, empathy_message_get_body (message),
- COL_EVENTS_ICON, get_icon_for_event (event),
- COL_EVENTS_ACCOUNT, tpl_event_get_account (event),
- COL_EVENTS_TARGET, event_get_target (event),
- COL_EVENTS_EVENT, event,
- -1);
-
- if (tpl_call_event_get_end_reason (call) != TP_CALL_STATE_CHANGE_REASON_NO_ANSWER)
- {
- gchar *body;
- gchar *tmp;
-
- span = tpl_call_event_get_duration (TPL_CALL_EVENT (event));
-
- if (span < 60)
- {
- tmp = g_strdup_printf ("%" G_GINT64_FORMAT, span);
- duration = g_strdup_printf (
- ngettext ("%s second", "%s seconds", span), tmp);
- g_free (tmp);
- }
- else
- {
- tmp = g_strdup_printf ("%" G_GINT64_FORMAT, span / 60);
- duration = g_strdup_printf (
- ngettext ("%s minute", "%s minutes", span / 60), tmp);
- g_free (tmp);
- }
-
- finished_date = g_date_time_add (started_date, -span);
- finished = g_date_time_format (finished_date, "%X");
- g_date_time_unref (finished_date);
-
- body = g_strdup_printf (_("Call took %s, ended at %s"),
- duration, finished);
-
- g_free (duration);
- g_free (finished);
-
- gtk_tree_store_append (store, &child, &iter);
- gtk_tree_store_set (store, &child,
- COL_EVENTS_TS, tpl_event_get_timestamp (event),
- COL_EVENTS_TEXT, body,
- COL_EVENTS_ACCOUNT, tpl_event_get_account (event),
- COL_EVENTS_TARGET, event_get_target (event),
- COL_EVENTS_EVENT, event,
- -1);
-
- g_free (body);
- }
-
- g_free (pretty_date);
- g_date_time_unref (started_date);
-}
-
-static void
-log_window_append_message (TplEvent *event,
- EmpathyMessage *message)
-{
- if (TPL_IS_TEXT_EVENT (event))
- log_window_append_chat_message (event, message);
- else if (TPL_IS_CALL_EVENT (event))
- log_window_append_call (event, message);
- else
- DEBUG ("Message type not handled");
-}
-
-static void
-add_all_accounts_and_entities (GList **accounts,
- GList **entities)
-{
- GtkTreeView *view;
- GtkTreeModel *model;
- GtkTreeIter iter;
-
- view = GTK_TREE_VIEW (log_window->priv->treeview_who);
- model = gtk_tree_view_get_model (view);
-
- if (!gtk_tree_model_get_iter_first (model, &iter))
- return;
-
- do
- {
- TpAccount *account;
- TplEntity *entity;
- gint type;
-
- gtk_tree_model_get (model, &iter,
- COL_WHO_ACCOUNT, &account,
- COL_WHO_TARGET, &entity,
- COL_WHO_TYPE, &type,
- -1);
-
- if (type != COL_TYPE_NORMAL)
- continue;
-
- if (accounts != NULL)
- *accounts = g_list_append (*accounts, account);
-
- if (entities != NULL)
- *entities = g_list_append (*entities, entity);
- }
- while (gtk_tree_model_iter_next (model, &iter));
-}
-
-static gboolean
-log_window_get_selected (EmpathyLogWindow *self,
- GList **accounts,
- GList **entities,
- gboolean *anyone,
- GList **dates,
- TplEventTypeMask *event_mask,
- EventSubtype *subtype)
-{
- GtkTreeView *view;
- GtkTreeModel *model;
- GtkTreeSelection *selection;
- GtkTreeIter iter;
- TplEventTypeMask ev = 0;
- EventSubtype st = 0;
- GList *paths, *l;
- gint type;
-
- view = GTK_TREE_VIEW (self->priv->treeview_who);
- model = gtk_tree_view_get_model (view);
- selection = gtk_tree_view_get_selection (view);
-
- paths = gtk_tree_selection_get_selected_rows (selection, NULL);
- if (paths == NULL)
- return FALSE;
-
- if (accounts != NULL)
- *accounts = NULL;
- if (entities != NULL)
- *entities = NULL;
- if (anyone != NULL)
- *anyone = FALSE;
-
- for (l = paths; l != NULL; l = l->next)
- {
- GtkTreePath *path = l->data;
- TpAccount *account;
- TplEntity *entity;
-
- gtk_tree_model_get_iter (model, &iter, path);
- gtk_tree_model_get (model, &iter,
- COL_WHO_ACCOUNT, &account,
- COL_WHO_TARGET, &entity,
- COL_WHO_TYPE, &type,
- -1);
-
- if (type == COL_TYPE_ANY)
- {
- if (accounts != NULL || entities != NULL)
- add_all_accounts_and_entities (accounts, entities);
- if (anyone != NULL)
- *anyone = TRUE;
- break;
- }
-
- if (accounts != NULL)
- *accounts = g_list_append (*accounts, g_object_ref (account));
-
- if (entities != NULL)
- *entities = g_list_append (*entities, g_object_ref (entity));
-
- g_object_unref (account);
- g_object_unref (entity);
- }
- g_list_free_full (paths, (GDestroyNotify) gtk_tree_path_free);
-
- view = GTK_TREE_VIEW (self->priv->treeview_what);
- model = gtk_tree_view_get_model (view);
- selection = gtk_tree_view_get_selection (view);
-
- paths = gtk_tree_selection_get_selected_rows (selection, NULL);
- for (l = paths; l != NULL; l = l->next)
- {
- GtkTreePath *path = l->data;
- TplEventTypeMask mask;
- EventSubtype submask;
-
- gtk_tree_model_get_iter (model, &iter, path);
- gtk_tree_model_get (model, &iter,
- COL_WHAT_TYPE, &mask,
- COL_WHAT_SUBTYPE, &submask,
- -1);
-
- ev |= mask;
- st |= submask;
- }
- g_list_free_full (paths, (GDestroyNotify) gtk_tree_path_free);
-
- view = GTK_TREE_VIEW (self->priv->treeview_when);
- model = gtk_tree_view_get_model (view);
- selection = gtk_tree_view_get_selection (view);
-
- if (dates != NULL)
- {
- *dates = NULL;
-
- paths = gtk_tree_selection_get_selected_rows (selection, NULL);
- for (l = paths; l != NULL; l = l->next)
- {
- GtkTreePath *path = l->data;
- GDate *date;
-
- gtk_tree_model_get_iter (model, &iter, path);
- gtk_tree_model_get (model, &iter,
- COL_WHEN_DATE, &date,
- -1);
-
- *dates = g_list_append (*dates, date);
- }
- g_list_free_full (paths, (GDestroyNotify) gtk_tree_path_free);
- }
-
- if (event_mask != NULL)
- *event_mask = ev;
-
- if (subtype != NULL)
- *subtype = st;
-
- return TRUE;
-}
-
-static gboolean
-model_has_entity (GtkTreeModel *model,
- GtkTreePath *path,
- GtkTreeIter *iter,
- gpointer data)
-{
- TplLogSearchHit *hit = data;
- TplEntity *e;
- TpAccount *a;
- gboolean ret = FALSE;
-
- gtk_tree_model_get (model, iter,
- COL_WHO_TARGET, &e,
- COL_WHO_ACCOUNT, &a,
- -1);
-
- if (e != NULL && entity_equal (hit->target, e) &&
- a != NULL && account_equal (hit->account, a))
- {
- ret = has_element = TRUE;
- }
-
- tp_clear_object (&e);
- tp_clear_object (&a);
-
- return ret;
-}
-
-static gboolean
-model_has_date (GtkTreeModel *model,
- GtkTreePath *path,
- GtkTreeIter *iter,
- gpointer data)
-{
- GDate *date = data;
- GDate *d;
-
- gtk_tree_model_get (model, iter,
- COL_WHEN_DATE, &d,
- -1);
-
- if (!g_date_compare (date, d))
- {
- has_element = TRUE;
- g_date_free (d);
- return TRUE;
- }
-
- g_date_free (d);
- return FALSE;
-}
-
-static void
-get_events_for_date (TplActionChain *chain, gpointer user_data);
-
-static void
-populate_events_from_search_hits (GList *accounts,
- GList *targets,
- GList *dates)
-{
- TplEventTypeMask event_mask;
- EventSubtype subtype;
- GDate *anytime;
- GList *l;
- gboolean is_anytime = FALSE;
-
- if (!log_window_get_selected (log_window,
- NULL, NULL, NULL, NULL, &event_mask, &subtype))
- return;
-
- anytime = g_date_new_dmy (2, 1, -1);
- if (g_list_find_custom (dates, anytime, (GCompareFunc) g_date_compare))
- is_anytime = TRUE;
-
- for (l = log_window->priv->hits; l != NULL; l = l->next)
- {
- TplLogSearchHit *hit = l->data;
- GList *acc, *targ;
- gboolean found = FALSE;
-
- /* Protect against invalid data (corrupt or old log files). */
- if (hit->account == NULL || hit->target == NULL)
- continue;
-
- for (acc = accounts, targ = targets;
- acc != NULL && targ != NULL && !found;
- acc = acc->next, targ = targ->next)
- {
- TpAccount *account = acc->data;
- TplEntity *target = targ->data;
-
- if (account_equal (hit->account, account) &&
- entity_equal (hit->target, target))
- found = TRUE;
- }
-
- if (!found)
- continue;
-
- if (is_anytime ||
- g_list_find_custom (dates, hit->date, (GCompareFunc) g_date_compare)
- != NULL)
- {
- Ctx *ctx;
-
- ctx = ctx_new (log_window, hit->account, hit->target, hit->date,
- event_mask, subtype, log_window->priv->count);
- _tpl_action_chain_append (log_window->priv->chain,
- get_events_for_date, ctx);
- }
- }
-
- start_spinner ();
- _tpl_action_chain_start (log_window->priv->chain);
-
- g_date_free (anytime);
-}
-
-static gchar *
-format_date_for_display (GDate *date)
-{
- gchar *text;
- GDate *now = NULL;
- gint days_elapsed;
-
- /* g_date_strftime sucks */
-
- now = g_date_new ();
- g_date_set_time_t (now, time (NULL));
-
- days_elapsed = g_date_days_between (date, now);
-
- if (days_elapsed < 0)
- {
- text = NULL;
- }
- else if (days_elapsed == 0)
- {
- text = g_strdup (_("Today"));
- }
- else if (days_elapsed == 1)
- {
- text = g_strdup (_("Yesterday"));
- }
- else
- {
- GDateTime *dt;
-
- dt = g_date_time_new_utc (g_date_get_year (date),
- g_date_get_month (date), g_date_get_day (date),
- 0, 0, 0);
-
- if (days_elapsed <= 7)
- text = g_date_time_format (dt, "%A");
- else
- text = g_date_time_format (dt,
- /* Translators: A date such as '23 May 2010' (strftime format) */
- _("%e %B %Y"));
-
- g_date_time_unref (dt);
- }
-
- g_date_free (now);
-
- return text;
-}
-
-static void
-add_date_if_needed (EmpathyLogWindow *self,
- GDate *date)
-{
- GtkTreeModel *model;
- GtkListStore *store;
- gchar *text;
-
- model = gtk_tree_view_get_model (GTK_TREE_VIEW (
- log_window->priv->treeview_when));
- store = GTK_LIST_STORE (model);
-
- /* Add the date if it's not already there */
- has_element = FALSE;
- gtk_tree_model_foreach (model, model_has_date, date);
- if (has_element)
- return;
-
- text = format_date_for_display (date);
-
- gtk_list_store_insert_with_values (store, NULL, -1,
- COL_WHEN_DATE, date,
- COL_WHEN_TEXT, text,
- COL_WHEN_ICON, CALENDAR_ICON,
- -1);
-
- g_free (text);
-}
-
-static void
-populate_dates_from_search_hits (GList *accounts,
- GList *targets)
-{
- GList *l;
- GtkTreeView *view;
- GtkTreeModel *model;
- GtkListStore *store;
- GtkTreeSelection *selection;
- GtkTreeIter iter;
-
- if (log_window == NULL)
- return;
-
- view = GTK_TREE_VIEW (log_window->priv->treeview_when);
- model = gtk_tree_view_get_model (view);
- store = GTK_LIST_STORE (model);
- selection = gtk_tree_view_get_selection (view);
-
- for (l = log_window->priv->hits; l != NULL; l = l->next)
- {
- TplLogSearchHit *hit = l->data;
- GList *acc, *targ;
- gboolean found = FALSE;
-
- /* Protect against invalid data (corrupt or old log files). */
- if (hit->account == NULL || hit->target == NULL)
- continue;
-
- for (acc = accounts, targ = targets;
- acc != NULL && targ != NULL && !found;
- acc = acc->next, targ = targ->next)
- {
- TpAccount *account = acc->data;
- TplEntity *target = targ->data;
-
- if (account_equal (hit->account, account) &&
- entity_equal (hit->target, target))
- found = TRUE;
- }
-
- if (!found)
- continue;
-
- add_date_if_needed (log_window, hit->date);
- }
-
- if (gtk_tree_model_get_iter_first (model, &iter))
- {
- GDate *date;
-
- date = g_date_new_dmy (1, 1, -1),
-
- gtk_list_store_prepend (store, &iter);
- gtk_list_store_set (store, &iter,
- COL_WHEN_DATE, date,
- COL_WHEN_TEXT, "separator",
- -1);
-
- g_date_free (date);
-
- date = g_date_new_dmy (2, 1, -1),
- gtk_list_store_prepend (store, &iter);
- gtk_list_store_set (store, &iter,
- COL_WHEN_DATE, date,
- COL_WHEN_TEXT, _("Anytime"),
- -1);
-
- g_date_free (date);
-
- if (gtk_tree_model_iter_nth_child (model, &iter, NULL, 2))
- gtk_tree_selection_select_iter (selection, &iter);
- }
-}
-
-static void
-add_event_to_store (EmpathyLogWindow *self,
- TpAccount *account,
- TplEntity *entity)
-{
- GtkListStore *store;
- TplEntityType type = tpl_entity_get_entity_type (entity);
- EmpathyContact *contact;
- const gchar *name;
- gchar *sort_key;
- gboolean room = type == TPL_ENTITY_ROOM;
-
- store = GTK_LIST_STORE (gtk_tree_view_get_model (
- GTK_TREE_VIEW (log_window->priv->treeview_who)));
-
- contact = empathy_contact_from_tpl_contact (account, entity);
-
- name = empathy_contact_get_alias (contact);
- sort_key = g_utf8_collate_key (name, -1);
-
- gtk_list_store_insert_with_values (store, NULL, -1,
- COL_WHO_TYPE, COL_TYPE_NORMAL,
- COL_WHO_ICON, room ? EMPATHY_IMAGE_GROUP_MESSAGE
- : TPAW_IMAGE_AVATAR_DEFAULT,
- COL_WHO_NAME, name,
- COL_WHO_NAME_SORT_KEY, sort_key,
- COL_WHO_ID, tpl_entity_get_identifier (entity),
- COL_WHO_ACCOUNT, account,
- COL_WHO_TARGET, entity,
- -1);
-
- g_free (sort_key);
- g_object_unref (contact);
-}
-
-static void
-populate_entities_from_search_hits (void)
-{
- EmpathyAccountChooser *account_chooser;
- TpAccount *account;
- GtkTreeView *view;
- GtkTreeModel *model;
- GtkTreeSelection *selection;
- GtkTreeIter iter;
- GtkListStore *store;
- GList *l;
-
- view = GTK_TREE_VIEW (log_window->priv->treeview_who);
- model = gtk_tree_view_get_model (view);
- store = GTK_LIST_STORE (model);
- selection = gtk_tree_view_get_selection (view);
-
- gtk_list_store_clear (store);
-
- account_chooser = EMPATHY_ACCOUNT_CHOOSER (log_window->priv->account_chooser);
- account = empathy_account_chooser_get_account (account_chooser);
-
- for (l = log_window->priv->hits; l; l = l->next)
- {
- TplLogSearchHit *hit = l->data;
-
- /* Protect against invalid data (corrupt or old log files). */
- if (hit->account == NULL || hit->target == NULL)
- continue;
-
- /* Filter based on the selected account */
- if (account != NULL && !account_equal (account, hit->account))
- continue;
-
- /* Add the entity if it's not already there */
- has_element = FALSE;
- gtk_tree_model_foreach (model, model_has_entity, hit);
- if (!has_element)
- {
- add_event_to_store (log_window, hit->account, hit->target);
- }
- }
-
- if (gtk_tree_model_get_iter_first (model, &iter))
- {
- gtk_list_store_prepend (store, &iter);
- gtk_list_store_set (store, &iter,
- COL_WHO_TYPE, COL_TYPE_SEPARATOR,
- COL_WHO_NAME, "separator",
- -1);
-
- gtk_list_store_prepend (store, &iter);
- gtk_list_store_set (store, &iter,
- COL_WHO_TYPE, COL_TYPE_ANY,
- COL_WHO_NAME, _("Anyone"),
- -1);
- }
-
- /* Select 'Anyone' */
- if (gtk_tree_model_get_iter_first (model, &iter))
- gtk_tree_selection_select_iter (selection, &iter);
-}
-
-static void
-log_manager_searched_new_cb (GObject *manager,
- GAsyncResult *result,
- gpointer user_data)
-{
- GList *hits;
- GtkTreeView *view;
- GtkTreeSelection *selection;
- GError *error = NULL;
-
- if (log_window == NULL)
- return;
-
- if (!tpl_log_manager_search_finish (TPL_LOG_MANAGER (manager),
- result, &hits, &error))
- {
- DEBUG ("%s. Aborting", error->message);
- g_error_free (error);
- return;
- }
-
- tp_clear_pointer (&log_window->priv->hits, tpl_log_manager_search_free);
- log_window->priv->hits = hits;
-
- view = GTK_TREE_VIEW (log_window->priv->treeview_when);
- selection = gtk_tree_view_get_selection (view);
-
- g_signal_handlers_unblock_by_func (selection,
- log_window_when_changed_cb,
- log_window);
-
- populate_entities_from_search_hits ();
-}
-
-static void
-log_window_find_populate (EmpathyLogWindow *self,
- const gchar *search_criteria)
-{
- GtkTreeView *view;
- GtkTreeModel *model;
- GtkTreeSelection *selection;
- GtkListStore *store;
-
- gtk_tree_store_clear (self->priv->store_events);
-
- view = GTK_TREE_VIEW (self->priv->treeview_who);
- model = gtk_tree_view_get_model (view);
- store = GTK_LIST_STORE (model);
-
- gtk_list_store_clear (store);
-
- view = GTK_TREE_VIEW (self->priv->treeview_when);
- model = gtk_tree_view_get_model (view);
- store = GTK_LIST_STORE (model);
- selection = gtk_tree_view_get_selection (view);
-
- gtk_list_store_clear (store);
-
- if (TPAW_STR_EMPTY (search_criteria))
- {
- tp_clear_pointer (&self->priv->hits, tpl_log_manager_search_free);
- webkit_web_view_set_highlight_text_matches (
- WEBKIT_WEB_VIEW (self->priv->webview), FALSE);
- log_window_who_populate (self);
- return;
- }
-
- g_signal_handlers_block_by_func (selection,
- log_window_when_changed_cb,
- self);
-
- /* highlight the search text */
- webkit_web_view_mark_text_matches (WEBKIT_WEB_VIEW (self->priv->webview),
- search_criteria, FALSE, 0);
-
- tpl_log_manager_search_async (self->priv->log_manager,
- search_criteria, TPL_EVENT_MASK_ANY,
- log_manager_searched_new_cb, NULL);
-}
-
-static gboolean
-start_find_search (EmpathyLogWindow *self)
-{
- const gchar *str;
-
- str = gtk_entry_get_text (GTK_ENTRY (self->priv->search_entry));
-
- /* Don't find the same crap again */
- if (self->priv->last_find && !tp_strdiff (self->priv->last_find, str))
- return FALSE;
-
- g_free (self->priv->last_find);
- self->priv->last_find = g_strdup (str);
-
- log_window_find_populate (self, str);
-
- return FALSE;
-}
-
-static void
-log_window_search_entry_changed_cb (GtkWidget *entry,
- EmpathyLogWindow *self)
-{
- const gchar *str;
-
- str = gtk_entry_get_text (GTK_ENTRY (self->priv->search_entry));
-
- if (!tp_str_empty (str))
- {
- gtk_entry_set_icon_from_icon_name (GTK_ENTRY (self->priv->search_entry),
- GTK_ENTRY_ICON_SECONDARY, "edit-clear-symbolic");
- gtk_entry_set_icon_sensitive (GTK_ENTRY (self->priv->search_entry),
- GTK_ENTRY_ICON_SECONDARY, TRUE);
- }
- else
- {
- gtk_entry_set_icon_from_icon_name (GTK_ENTRY (self->priv->search_entry),
- GTK_ENTRY_ICON_SECONDARY, "edit-find-symbolic");
- gtk_entry_set_icon_sensitive (GTK_ENTRY (self->priv->search_entry),
- GTK_ENTRY_ICON_SECONDARY, FALSE);
- }
-
- if (self->priv->source != 0)
- g_source_remove (self->priv->source);
- self->priv->source = g_timeout_add (500, (GSourceFunc) start_find_search,
- self);
-}
-
-static void
-log_window_search_entry_activate_cb (GtkWidget *entry,
- EmpathyLogWindow *self)
-{
- start_find_search (self);
-}
-
-static void
-log_window_search_entry_icon_pressed_cb (GtkEntry *entry,
- GtkEntryIconPosition icon_pos,
- GdkEvent *event,
- gpointer user_data)
-{
- if (icon_pos != GTK_ENTRY_ICON_SECONDARY)
- return;
-
- gtk_entry_buffer_set_text (gtk_entry_get_buffer (entry),
- "", -1);
-}
-
-static void
-do_update_buttons_sensitivity (EmpathyLogWindow *self)
-{
- EmpathyCapabilities capabilities;
- gboolean profile, chat, call, video;
-
- tp_clear_object (&self->priv->button_video_binding);
-
- if (self->priv->selected_contact != NULL)
- {
- capabilities = empathy_contact_get_capabilities (
- self->priv->selected_contact);
-
- profile = chat = TRUE;
- call = capabilities & EMPATHY_CAPABILITIES_AUDIO;
- video = capabilities & EMPATHY_CAPABILITIES_VIDEO;
- }
- else
- {
- profile = chat = call = video = FALSE;
- }
-
- gtk_widget_set_sensitive (self->priv->button_profile, profile);
- gtk_widget_set_sensitive (self->priv->button_chat, chat);
- gtk_widget_set_sensitive (self->priv->button_call, call);
-
- if (video)
- {
- self->priv->button_video_binding = g_object_bind_property (
- self->priv->camera_monitor, "available",
- self->priv->button_video, "sensitive",
- G_BINDING_SYNC_CREATE);
- }
- else
- {
- /* Don't override the binding */
- gtk_widget_set_sensitive (self->priv->button_video, video);
- }
-}
-
-static void
-contact_capabilities_changed_cb (EmpathyContact *contact,
- GParamSpec *spec,
- EmpathyLogWindow *self)
-{
- do_update_buttons_sensitivity (self);
-}
-
-static void
-log_window_update_buttons_sensitivity (EmpathyLogWindow *self)
-{
- GtkTreeView *view;
- GtkTreeModel *model;
- GtkTreeSelection *selection;
- TpAccount *account;
- TplEntity *target;
- GtkTreeIter iter;
- GList *paths;
- GtkTreePath *path;
-
- if (self->priv->selected_contact != NULL)
- {
- g_signal_handlers_disconnect_by_func (self->priv->selected_contact,
- contact_capabilities_changed_cb, self);
-
- tp_clear_object (&self->priv->selected_contact);
- }
-
- view = GTK_TREE_VIEW (self->priv->treeview_who);
- model = gtk_tree_view_get_model (view);
- selection = gtk_tree_view_get_selection (view);
-
- if (!gtk_tree_model_get_iter_first (model, &iter))
- goto events;
-
- if (gtk_tree_selection_count_selected_rows (selection) != 1)
- goto events;
-
- if (gtk_tree_selection_iter_is_selected (selection, &iter))
- goto events;
-
- paths = gtk_tree_selection_get_selected_rows (selection, &model);
- g_return_if_fail (paths != NULL);
-
- path = paths->data;
- gtk_tree_model_get_iter (model, &iter, path);
- gtk_tree_model_get (model, &iter,
- COL_WHO_ACCOUNT, &account,
- COL_WHO_TARGET, &target,
- -1);
-
- g_list_free_full (paths, (GDestroyNotify) gtk_tree_path_free);
-
- self->priv->selected_contact = empathy_contact_from_tpl_contact (account,
- target);
-
- g_object_unref (account);
- g_object_unref (target);
-
- goto out;
-
- events:
- /* If the Who pane doesn't contain a contact (e.g. it has many
- * selected, or has 'Anyone', let's try to get the contact from
- * the selected event. */
-
- if (self->priv->events_contact != NULL)
- self->priv->selected_contact = g_object_ref (self->priv->events_contact);
-
- out:
- if (self->priv->selected_contact != NULL)
- {
- tp_g_signal_connect_object (self->priv->selected_contact,
- "notify::capabilities", G_CALLBACK (contact_capabilities_changed_cb),
- self, 0);
- }
-
- do_update_buttons_sensitivity (self);
-}
-
-static void
-log_window_update_what_iter_sensitivity (GtkTreeModel *model,
- GtkTreeIter *iter,
- gboolean sensitive)
-{
- GtkTreeStore *store = GTK_TREE_STORE (model);
- GtkTreeIter child;
- gboolean next;
-
- gtk_tree_store_set (store, iter,
- COL_WHAT_SENSITIVE, sensitive,
- -1);
-
- for (next = gtk_tree_model_iter_children (model, &child, iter);
- next;
- next = gtk_tree_model_iter_next (model, &child))
- {
- gtk_tree_store_set (store, &child,
- COL_WHAT_SENSITIVE, sensitive,
- -1);
- }
-}
-
-static void
-log_window_update_what_sensitivity (EmpathyLogWindow *self)
-{
- GtkTreeView *view;
- GtkTreeModel *model;
- GtkTreeIter iter;
- GList *accounts, *targets, *acc, *targ;
- gboolean next;
-
- if (!log_window_get_selected (self, &accounts, &targets, NULL, NULL,
- NULL, NULL))
- return;
-
- view = GTK_TREE_VIEW (self->priv->treeview_what);
- model = gtk_tree_view_get_model (view);
-
- /* For each event type... */
- for (next = gtk_tree_model_get_iter_first (model, &iter);
- next;
- next = gtk_tree_model_iter_next (model, &iter))
- {
- TplEventTypeMask type;
-
- gtk_tree_model_get (model, &iter,
- COL_WHAT_TYPE, &type,
- -1);
-
- /* ...we set the type and its subtypes (if any) unsensitive... */
- log_window_update_what_iter_sensitivity (model, &iter, FALSE);
-
- for (acc = accounts, targ = targets;
- acc != NULL && targ != NULL;
- acc = acc->next, targ = targ->next)
- {
- TpAccount *account = acc->data;
- TplEntity *target = targ->data;
-
- if (tpl_log_manager_exists (self->priv->log_manager,
- account, target, type))
- {
- /* And then we set it (and its subtypes, again, if any)
- * as sensitive if there are logs of that type. */
- log_window_update_what_iter_sensitivity (model, &iter, TRUE);
- break;
- }
- }
- }
-
- g_list_free_full (accounts, g_object_unref);
- g_list_free_full (targets, g_object_unref);
-}
-
-static void
-log_window_who_changed_cb (GtkTreeSelection *selection,
- EmpathyLogWindow *self)
-{
- GtkTreeView *view;
- GtkTreeModel *model;
- GtkTreeIter iter;
-
- DEBUG ("log_window_who_changed_cb");
-
- view = gtk_tree_selection_get_tree_view (selection);
- model = gtk_tree_view_get_model (view);
-
- if (gtk_tree_model_get_iter_first (model, &iter))
- {
- /* If 'Anyone' is selected, everything else should be deselected */
- if (gtk_tree_selection_iter_is_selected (selection, &iter))
- {
- g_signal_handlers_block_by_func (selection,
- log_window_who_changed_cb,
- self);
-
- gtk_tree_selection_unselect_all (selection);
- gtk_tree_selection_select_iter (selection, &iter);
-
- g_signal_handlers_unblock_by_func (selection,
- log_window_who_changed_cb,
- self);
- }
- }
-
- log_window_update_what_sensitivity (self);
- log_window_update_buttons_sensitivity (self);
-
- /* The contact changed, so the dates need to be updated */
- log_window_chats_get_messages (self, TRUE);
-}
-
-static void
-log_manager_got_entities_cb (GObject *manager,
- GAsyncResult *result,
- gpointer user_data)
-{
- Ctx *ctx = user_data;
- GList *entities;
- GList *l;
- GtkTreeView *view;
- GtkTreeModel *model;
- GtkTreeSelection *selection;
- GtkListStore *store;
- GtkTreeIter iter;
- GError *error = NULL;
- gboolean select_account = FALSE;
-
- if (log_window == NULL)
- goto out;
-
- if (log_window->priv->count != ctx->count)
- goto out;
-
- if (!tpl_log_manager_get_entities_finish (TPL_LOG_MANAGER (manager),
- result, &entities, &error))
- {
- DEBUG ("%s. Aborting", error->message);
- g_error_free (error);
- goto out;
- }
-
- view = GTK_TREE_VIEW (ctx->self->priv->treeview_who);
- 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_who_changed_cb, ctx->self);
-
- for (l = entities; l; l = l->next)
- {
- add_event_to_store (ctx->self, ctx->account, l->data);
-
- if (ctx->self->priv->selected_account != NULL &&
- !tp_strdiff (tp_proxy_get_object_path (ctx->account),
- tp_proxy_get_object_path (ctx->self->priv->selected_account)))
- select_account = TRUE;
- }
- g_list_free_full (entities, g_object_unref);
-
- if (gtk_tree_model_get_iter_first (model, &iter))
- {
- gint type;
-
- gtk_tree_model_get (model, &iter,
- COL_WHO_TYPE, &type,
- -1);
-
- if (type != COL_TYPE_ANY)
- {
- gtk_list_store_prepend (store, &iter);
- gtk_list_store_set (store, &iter,
- COL_WHO_TYPE, COL_TYPE_SEPARATOR,
- COL_WHO_NAME, "separator",
- -1);
-
- gtk_list_store_prepend (store, &iter);
- gtk_list_store_set (store, &iter,
- COL_WHO_TYPE, COL_TYPE_ANY,
- COL_WHO_NAME, _("Anyone"),
- -1);
- }
- }
-
- /* Unblock signals */
- g_signal_handlers_unblock_by_func (selection,
- log_window_who_changed_cb,
- ctx->self);
-
- /* We display the selected account if we populate the model with chats from
- * this account. */
- if (select_account)
- log_window_chats_set_selected (ctx->self);
-
-out:
- _tpl_action_chain_continue (log_window->priv->chain);
- ctx_free (ctx);
-}
-
-static void
-get_entities_for_account (TplActionChain *chain, gpointer user_data)
-{
- Ctx *ctx = user_data;
-
- tpl_log_manager_get_entities_async (ctx->self->priv->log_manager, ctx->account,
- log_manager_got_entities_cb, ctx);
-}
-
-static void
-select_first_entity (TplActionChain *chain, gpointer user_data)
-{
- EmpathyLogWindow *self = user_data;
- GtkTreeView *view;
- GtkTreeModel *model;
- GtkTreeSelection *selection;
- GtkTreeIter iter;
-
- view = GTK_TREE_VIEW (self->priv->treeview_who);
- model = gtk_tree_view_get_model (view);
- selection = gtk_tree_view_get_selection (view);
-
- if (gtk_tree_model_get_iter_first (model, &iter))
- gtk_tree_selection_select_iter (selection, &iter);
-
- _tpl_action_chain_continue (self->priv->chain);
-}
-
-static void
-log_window_who_populate (EmpathyLogWindow *self)
-{
- EmpathyAccountChooser *account_chooser;
- TpAccount *account;
- gboolean all_accounts;
- GtkTreeView *view;
- GtkTreeModel *model;
- GtkTreeSelection *selection;
- GtkListStore *store;
- Ctx *ctx;
-
- if (self->priv->hits != NULL)
- {
- populate_entities_from_search_hits ();
- return;
- }
-
- account_chooser = EMPATHY_ACCOUNT_CHOOSER (self->priv->account_chooser);
- account = empathy_account_chooser_dup_account (account_chooser);
- all_accounts = empathy_account_chooser_has_all_selected (account_chooser);
-
- view = GTK_TREE_VIEW (self->priv->treeview_who);
- 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_who_changed_cb,
- self);
-
- gtk_list_store_clear (store);
-
- /* Unblock signals */
- g_signal_handlers_unblock_by_func (selection,
- log_window_who_changed_cb,
- self);
-
- _tpl_action_chain_clear (self->priv->chain);
- self->priv->count++;
-
- if (!all_accounts && account == NULL)
- {
- return;
- }
- else if (!all_accounts)
- {
- ctx = ctx_new (self, account, NULL, NULL, 0, 0, self->priv->count);
- _tpl_action_chain_append (self->priv->chain, get_entities_for_account, ctx);
- }
- else
- {
- TpAccountManager *manager;
- GList *accounts, *l;
-
- manager = empathy_account_chooser_get_account_manager (account_chooser);
- accounts = tp_account_manager_dup_valid_accounts (manager);
-
- for (l = accounts; l != NULL; l = l->next)
- {
- account = l->data;
-
- ctx = ctx_new (self, account, NULL, NULL, 0, 0, self->priv->count);
- _tpl_action_chain_append (self->priv->chain,
- get_entities_for_account, ctx);
- }
-
- g_list_free_full (accounts, g_object_unref);
- }
- _tpl_action_chain_append (self->priv->chain, select_first_entity, self);
- _tpl_action_chain_start (self->priv->chain);
-}
-
-static gint
-sort_by_name_key (GtkTreeModel *model,
- GtkTreeIter *a,
- GtkTreeIter *b,
- gpointer user_data)
-{
- gchar *key1, *key2;
- gint type1, type2;
- gint ret;
-
- gtk_tree_model_get (model, a,
- COL_WHO_TYPE, &type1,
- COL_WHO_NAME_SORT_KEY, &key1,
- -1);
-
- gtk_tree_model_get (model, b,
- COL_WHO_TYPE, &type2,
- COL_WHO_NAME_SORT_KEY, &key2,
- -1);
-
- if (type1 == COL_TYPE_ANY)
- ret = -1;
- else if (type2 == COL_TYPE_ANY)
- ret = 1;
- else if (type1 == COL_TYPE_SEPARATOR)
- ret = -1;
- else if (type2 == COL_TYPE_SEPARATOR)
- ret = 1;
- else
- ret = g_strcmp0 (key1, key2);
-
- g_free (key1);
- g_free (key2);
-
- return ret;
-}
-
-static gboolean
-who_row_is_separator (GtkTreeModel *model,
- GtkTreeIter *iter,
- gpointer data)
-{
- gint type;
-
- gtk_tree_model_get (model, iter,
- COL_WHO_TYPE, &type,
- -1);
-
- return (type == COL_TYPE_SEPARATOR);
-}
-
-static void
-log_window_find_row (EmpathyLogWindow *self,
- GdkEventButton *event)
-{
- WebKitHitTestResult *hit = webkit_web_view_get_hit_test_result (
- WEBKIT_WEB_VIEW (self->priv->webview), event);
- WebKitDOMNode *inner_node;
-
- tp_clear_object (&self->priv->events_contact);
-
- g_object_get (hit,
- "inner-node", &inner_node,
- NULL);
-
- if (inner_node != NULL)
- {
- GtkTreeModel *model = GTK_TREE_MODEL (self->priv->store_events);
- WebKitDOMNode *node;
- const char *path = NULL;
- GtkTreeIter iter;
-
- /* walk back up the DOM tree looking for a node with empathy:path set */
- for (node = inner_node; node != NULL;
- node = webkit_dom_node_get_parent_node (node))
- {
- if (!WEBKIT_DOM_IS_ELEMENT (node))
- continue;
-
- path = webkit_dom_element_get_attribute_ns (
- WEBKIT_DOM_ELEMENT (node), EMPATHY_NS, "path");
-
- if (!tp_str_empty (path))
- break;
- }
-
- /* look up the contact for this path */
- if (!tp_str_empty (path) &&
- gtk_tree_model_get_iter_from_string (model, &iter, path))
- {
- TpAccount *account;
- TplEntity *target;
-
- gtk_tree_model_get (model, &iter,
- COL_EVENTS_ACCOUNT, &account,
- COL_EVENTS_TARGET, &target,
- -1);
-
- self->priv->events_contact = empathy_contact_from_tpl_contact (
- account, target);
-
- g_object_unref (account);
- g_object_unref (target);
- }
-
- g_object_unref (inner_node);
- }
-
- g_object_unref (hit);
-
- log_window_update_buttons_sensitivity (self);
-}
-
-static gboolean
-log_window_events_button_press_event (GtkWidget *webview,
- GdkEventButton *event,
- EmpathyLogWindow *self)
-{
- switch (event->button)
- {
- case 1:
- log_window_find_row (self, event);
- break;
-
- case 3:
- empathy_webkit_context_menu_for_event (
- WEBKIT_WEB_VIEW (webview), event, 0);
- return TRUE;
-
- default:
- break;
- }
-
- return FALSE;
-}
-
-static void
-log_window_events_setup (EmpathyLogWindow *self)
-{
- GtkTreeSortable *sortable;
- GtkTreeStore *store;
-
- /* new store */
- self->priv->store_events = store = gtk_tree_store_new (COL_EVENTS_COUNT,
- G_TYPE_INT, /* type */
- G_TYPE_INT64, /* timestamp */
- G_TYPE_STRING, /* stringified date */
- G_TYPE_STRING, /* icon */
- G_TYPE_STRING, /* name */
- TP_TYPE_ACCOUNT, /* account */
- TPL_TYPE_ENTITY, /* target */
- TPL_TYPE_EVENT); /* event */
-
- sortable = GTK_TREE_SORTABLE (store);
-
- gtk_tree_sortable_set_sort_column_id (sortable,
- COL_EVENTS_TS,
- GTK_SORT_ASCENDING);
-}
-
-static void
-log_window_who_setup (EmpathyLogWindow *self)
-{
- GtkTreeView *view;
- GtkTreeModel *model;
- GtkTreeSelection *selection;
- GtkTreeSortable *sortable;
- GtkTreeViewColumn *column;
- GtkListStore *store;
- GtkCellRenderer *cell;
-
- view = GTK_TREE_VIEW (self->priv->treeview_who);
- selection = gtk_tree_view_get_selection (view);
-
- /* new store */
- store = gtk_list_store_new (COL_WHO_COUNT,
- G_TYPE_INT, /* type */
- G_TYPE_STRING, /* icon */
- G_TYPE_STRING, /* name */
- G_TYPE_STRING, /* name sort key */
- G_TYPE_STRING, /* id */
- TP_TYPE_ACCOUNT, /* account */
- TPL_TYPE_ENTITY); /* target */
-
- 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 ();
- gtk_tree_view_column_set_title (column, _("Who"));
-
- 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_WHO_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_WHO_NAME);
-
- gtk_tree_view_append_column (view, column);
-
- /* set up treeview properties */
- gtk_tree_selection_set_mode (selection, GTK_SELECTION_MULTIPLE);
- gtk_tree_view_set_row_separator_func (view, who_row_is_separator,
- NULL, NULL);
-
- gtk_tree_sortable_set_sort_column_id (sortable,
- COL_WHO_NAME_SORT_KEY,
- GTK_SORT_ASCENDING);
- gtk_tree_sortable_set_sort_func (sortable,
- COL_WHO_NAME_SORT_KEY, sort_by_name_key,
- NULL, NULL);
-
- gtk_tree_view_set_search_column (view, COL_WHO_NAME);
- gtk_tree_view_set_tooltip_column (view, COL_WHO_ID);
-
- /* set up signals */
- g_signal_connect (selection, "changed",
- G_CALLBACK (log_window_who_changed_cb), self);
-
- g_object_unref (store);
-}
-
-static void
-log_window_chats_accounts_changed_cb (GtkWidget *combobox,
- EmpathyLogWindow *self)
-{
- /* Clear all current messages shown in the textview */
- gtk_tree_store_clear (self->priv->store_events);
-
- log_window_who_populate (self);
-}
-
-static void
-log_window_chats_set_selected (EmpathyLogWindow *self)
-{
- GtkTreeView *view;
- GtkTreeModel *model;
- GtkTreeSelection *selection;
- GtkTreeIter iter;
- GtkTreePath *path;
- gboolean next;
-
- view = GTK_TREE_VIEW (self->priv->treeview_who);
- model = gtk_tree_view_get_model (view);
- selection = gtk_tree_view_get_selection (view);
-
- for (next = gtk_tree_model_get_iter_first (model, &iter);
- next;
- next = gtk_tree_model_iter_next (model, &iter))
- {
- TpAccount *this_account;
- TplEntity *this_target;
- const gchar *this_chat_id;
- gboolean this_is_chatroom;
- gint this_type;
-
- gtk_tree_model_get (model, &iter,
- COL_WHO_TYPE, &this_type,
- COL_WHO_ACCOUNT, &this_account,
- COL_WHO_TARGET, &this_target,
- -1);
-
- if (this_type != COL_TYPE_NORMAL)
- continue;
-
- this_chat_id = tpl_entity_get_identifier (this_target);
- this_is_chatroom = tpl_entity_get_entity_type (this_target)
- == TPL_ENTITY_ROOM;
-
- if (this_account == self->priv->selected_account &&
- !tp_strdiff (this_chat_id, self->priv->selected_chat_id) &&
- this_is_chatroom == self->priv->selected_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_object_unref (this_target);
- break;
- }
-
- g_object_unref (this_account);
- g_object_unref (this_target);
- }
-
- tp_clear_object (&self->priv->selected_account);
- tp_clear_pointer (&self->priv->selected_chat_id, g_free);
-}
-
-static gint
-sort_by_date (GtkTreeModel *model,
- GtkTreeIter *a,
- GtkTreeIter *b,
- gpointer user_data)
-{
- GDate *date1, *date2;
- gint result;
-
- gtk_tree_model_get (model, a,
- COL_WHEN_DATE, &date1,
- -1);
-
- gtk_tree_model_get (model, b,
- COL_WHEN_DATE, &date2,
- -1);
-
- result = g_date_compare (date1, date2);
-
- g_date_free (date1);
- g_date_free (date2);
- return result;
-}
-
-static gboolean
-when_row_is_separator (GtkTreeModel *model,
- GtkTreeIter *iter,
- gpointer data)
-{
- gchar *when;
- gboolean ret;
-
- gtk_tree_model_get (model, iter,
- COL_WHEN_TEXT, &when,
- -1);
-
- ret = !tp_strdiff (when, "separator");
- g_free (when);
- return ret;
-}
-
-static void
-log_window_when_changed_cb (GtkTreeSelection *selection,
- EmpathyLogWindow *self)
-{
- GtkTreeView *view;
- GtkTreeModel *model;
- GtkTreeIter iter;
-
- DEBUG ("log_window_when_changed_cb");
-
- view = gtk_tree_selection_get_tree_view (selection);
- model = gtk_tree_view_get_model (view);
-
- /* If 'Anytime' is selected, everything else should be deselected */
- if (gtk_tree_model_get_iter_first (model, &iter))
- {
- if (gtk_tree_selection_iter_is_selected (selection, &iter))
- {
- g_signal_handlers_block_by_func (selection,
- log_window_when_changed_cb,
- self);
-
- gtk_tree_selection_unselect_all (selection);
- gtk_tree_selection_select_iter (selection, &iter);
-
- g_signal_handlers_unblock_by_func (selection,
- log_window_when_changed_cb,
- self);
- }
- }
-
- log_window_chats_get_messages (self, FALSE);
-}
-
-static void
-log_window_when_setup (EmpathyLogWindow *self)
-{
- GtkTreeView *view;
- GtkTreeModel *model;
- GtkTreeSelection *selection;
- GtkTreeSortable *sortable;
- GtkTreeViewColumn *column;
- GtkListStore *store;
- GtkCellRenderer *cell;
-
- view = GTK_TREE_VIEW (self->priv->treeview_when);
- selection = gtk_tree_view_get_selection (view);
-
- /* new store */
- store = gtk_list_store_new (COL_WHEN_COUNT,
- G_TYPE_DATE, /* date */
- G_TYPE_STRING, /* stringified date */
- G_TYPE_STRING); /* icon */
-
- 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 ();
- gtk_tree_view_column_set_title (column, _("When"));
-
- 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_WHEN_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_WHEN_TEXT);
-
- gtk_tree_view_append_column (view, column);
-
- /* set up treeview properties */
- gtk_tree_selection_set_mode (selection, GTK_SELECTION_MULTIPLE);
- gtk_tree_view_set_row_separator_func (view, when_row_is_separator,
- NULL, NULL);
- gtk_tree_sortable_set_sort_column_id (sortable,
- COL_WHEN_DATE,
- GTK_SORT_DESCENDING);
- gtk_tree_sortable_set_sort_func (sortable,
- COL_WHEN_DATE, sort_by_date,
- NULL, NULL);
-
- gtk_tree_view_set_search_column (view, COL_WHEN_TEXT);
-
- /* set up signals */
- g_signal_connect (selection, "changed",
- G_CALLBACK (log_window_when_changed_cb),
- self);
-
- g_object_unref (store);
-}
-
-static gboolean
-what_row_is_separator (GtkTreeModel *model,
- GtkTreeIter *iter,
- gpointer data)
-{
- gint type;
-
- gtk_tree_model_get (model, iter,
- COL_WHAT_TYPE, &type,
- -1);
-
- return (type == WHAT_TYPE_SEPARATOR);
-}
-
-static void
-log_window_what_changed_cb (GtkTreeSelection *selection,
- EmpathyLogWindow *self)
-{
- GtkTreeView *view;
- GtkTreeModel *model;
- GtkTreeIter iter;
-
- DEBUG ("log_window_what_changed_cb");
-
- view = gtk_tree_selection_get_tree_view (selection);
- model = gtk_tree_view_get_model (view);
-
- /* If 'Anything' is selected, everything else should be deselected */
- if (gtk_tree_model_get_iter_first (model, &iter))
- {
- if (gtk_tree_selection_iter_is_selected (selection, &iter))
- {
- g_signal_handlers_block_by_func (selection,
- log_window_what_changed_cb,
- self);
-
- gtk_tree_selection_unselect_all (selection);
- gtk_tree_selection_select_iter (selection, &iter);
-
- g_signal_handlers_unblock_by_func (selection,
- log_window_what_changed_cb,
- self);
- }
- }
-
- /* The dates need to be updated if we're not searching */
- log_window_chats_get_messages (self, self->priv->hits == NULL);
-}
-
-static gboolean
-log_window_what_collapse_row_cb (GtkTreeView *tree_view,
- GtkTreeIter *iter,
- GtkTreePath *path,
- gpointer user_data)
-{
- /* Reject collapsing */
- return TRUE;
-}
-
-struct event
-{
- gint type;
- EventSubtype subtype;
- const gchar *icon;
- const gchar *text;
-};
-
-static void
-log_window_what_setup (EmpathyLogWindow *self)
-{
- GtkTreeView *view;
- GtkTreeModel *model;
- GtkTreeSelection *selection;
- GtkTreeViewColumn *column;
- GtkTreeIter iter;
- GtkTreeStore *store;
- GtkCellRenderer *cell;
- GtkTreeIter parent;
- guint i;
-
- struct event events [] = {
- { TPL_EVENT_MASK_ANY, 0, NULL, _("Anything") },
- { WHAT_TYPE_SEPARATOR, 0, NULL, "separator" },
- { TPL_EVENT_MASK_TEXT, 0, "format-justify-fill", _("Text chats") },
- { TPL_EVENT_MASK_CALL, EVENT_CALL_ALL, EMPATHY_IMAGE_CALL, _("Calls") },
- };
-
- struct event call_events [] = {
- { TPL_EVENT_MASK_CALL, EVENT_CALL_INCOMING, EMPATHY_IMAGE_CALL_INCOMING, _("Incoming calls") },
- { TPL_EVENT_MASK_CALL, EVENT_CALL_OUTGOING, EMPATHY_IMAGE_CALL_OUTGOING, _("Outgoing calls") },
- { TPL_EVENT_MASK_CALL, EVENT_CALL_MISSED, EMPATHY_IMAGE_CALL_MISSED, _("Missed calls") }
- };
-
- view = GTK_TREE_VIEW (self->priv->treeview_what);
- selection = gtk_tree_view_get_selection (view);
-
- /* new store */
- store = gtk_tree_store_new (COL_WHAT_COUNT,
- G_TYPE_INT, /* history type */
- G_TYPE_INT, /* history subtype */
- G_TYPE_BOOLEAN, /* sensitive */
- G_TYPE_STRING, /* stringified history type */
- G_TYPE_STRING); /* icon */
-
- model = GTK_TREE_MODEL (store);
-
- gtk_tree_view_set_model (view, model);
-
- /* new column */
- column = gtk_tree_view_column_new ();
- gtk_tree_view_column_set_title (column, _("What"));
-
- 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_WHAT_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_WHAT_TEXT);
- gtk_tree_view_column_add_attribute (column, cell,
- "sensitive", COL_WHAT_SENSITIVE);
-
- gtk_tree_view_append_column (view, column);
- gtk_tree_view_set_search_column (view, COL_WHAT_TEXT);
-
- /* set up treeview properties */
- gtk_tree_selection_set_mode (selection, GTK_SELECTION_MULTIPLE);
- gtk_tree_view_set_show_expanders (view, FALSE);
- gtk_tree_view_set_level_indentation (view, 12);
- gtk_tree_view_expand_all (view);
- gtk_tree_view_set_row_separator_func (view, what_row_is_separator,
- NULL, NULL);
-
- /* populate */
- for (i = 0; i < G_N_ELEMENTS (events); i++)
- {
- gtk_tree_store_append (store, &iter, NULL);
- gtk_tree_store_set (store, &iter,
- COL_WHAT_TYPE, events[i].type,
- COL_WHAT_SUBTYPE, events[i].subtype,
- COL_WHAT_SENSITIVE, TRUE,
- COL_WHAT_TEXT, events[i].text,
- COL_WHAT_ICON, events[i].icon,
- -1);
- }
-
- gtk_tree_model_iter_nth_child (model, &parent, NULL, 3);
- for (i = 0; i < G_N_ELEMENTS (call_events); i++)
- {
- gtk_tree_store_append (store, &iter, &parent);
- gtk_tree_store_set (store, &iter,
- COL_WHAT_TYPE, call_events[i].type,
- COL_WHAT_SUBTYPE, call_events[i].subtype,
- COL_WHAT_SENSITIVE, TRUE,
- COL_WHAT_TEXT, call_events[i].text,
- COL_WHAT_ICON, call_events[i].icon,
- -1);
- }
-
- gtk_tree_view_expand_all (view);
-
- /* select 'Anything' */
- if (gtk_tree_model_get_iter_first (model, &iter))
- gtk_tree_selection_select_iter (selection, &iter);
-
- /* set up signals */
- g_signal_connect (view, "test-collapse-row",
- G_CALLBACK (log_window_what_collapse_row_cb),
- NULL);
- g_signal_connect (selection, "changed",
- G_CALLBACK (log_window_what_changed_cb),
- self);
-
- g_object_unref (store);
-}
-
-static void
-log_window_maybe_expand_events (void)
-{
- GtkTreeModel *model = GTK_TREE_MODEL (log_window->priv->store_events);
-
- /* If there's only one result, expand it */
- if (gtk_tree_model_iter_n_children (model, NULL) == 1)
- webkit_web_view_execute_script (
- WEBKIT_WEB_VIEW (log_window->priv->webview),
- "javascript:expandAll()");
-}
-
-static gboolean
-show_spinner (gpointer data)
-{
- gboolean active;
-
- if (log_window == NULL)
- return FALSE;
-
- g_object_get (log_window->priv->spinner, "active", &active, NULL);
-
- if (active)
- gtk_notebook_set_current_page (GTK_NOTEBOOK (log_window->priv->notebook),
- PAGE_SPINNER);
-
- return FALSE;
-}
-
-static void
-show_events (TplActionChain *chain,
- gpointer user_data)
-{
- log_window_maybe_expand_events ();
- gtk_spinner_stop (GTK_SPINNER (log_window->priv->spinner));
- gtk_notebook_set_current_page (GTK_NOTEBOOK (log_window->priv->notebook),
- PAGE_EVENTS);
-
- _tpl_action_chain_continue (chain);
-}
-
-static void
-start_spinner (void)
-{
- gtk_spinner_start (GTK_SPINNER (log_window->priv->spinner));
- gtk_notebook_set_current_page (GTK_NOTEBOOK (log_window->priv->notebook),
- PAGE_EMPTY);
-
- g_timeout_add (1000, show_spinner, NULL);
- _tpl_action_chain_append (log_window->priv->chain, show_events, NULL);
-}
-
-static void
-log_window_got_messages_for_date_cb (GObject *manager,
- GAsyncResult *result,
- gpointer user_data)
-{
- Ctx *ctx = user_data;
- GtkTreeModel *model;
- GtkTreeIter iter;
- GList *events;
- GList *l;
- GError *error = NULL;
- gint n;
-
- if (log_window == NULL)
- {
- ctx_free (ctx);
- return;
- }
-
- if (log_window->priv->count != ctx->count)
- goto out;
-
- if (!tpl_log_manager_get_events_for_date_finish (TPL_LOG_MANAGER (manager),
- result, &events, &error))
- {
- DEBUG ("Unable to retrieve messages for the selected date: %s. Aborting",
- error->message);
- g_error_free (error);
- goto out;
- }
-
- for (l = events; l; l = l->next)
- {
- TplEvent *event = l->data;
- gboolean append = TRUE;
-
- if (TPL_IS_CALL_EVENT (l->data)
- && ctx->event_mask & TPL_EVENT_MASK_CALL
- && ctx->event_mask != TPL_EVENT_MASK_ANY)
- {
- TplCallEvent *call = l->data;
-
- append = FALSE;
-
- if (ctx->subtype & EVENT_CALL_ALL)
- {
- append = TRUE;
- }
- else
- {
- TpCallStateChangeReason reason =
- tpl_call_event_get_end_reason (call);
- TplEntity *sender = tpl_event_get_sender (event);
- TplEntity *receiver = tpl_event_get_receiver (event);
-
- if (reason == TP_CALL_STATE_CHANGE_REASON_NO_ANSWER)
- {
- if (ctx->subtype & EVENT_CALL_MISSED)
- append = TRUE;
- }
- else if (ctx->subtype & EVENT_CALL_OUTGOING
- && tpl_entity_get_entity_type (sender) == TPL_ENTITY_SELF)
- {
- append = TRUE;
- }
- else if (ctx->subtype & EVENT_CALL_INCOMING
- && tpl_entity_get_entity_type (receiver) == TPL_ENTITY_SELF)
- {
- append = TRUE;
- }
- }
- }
-
- if (append)
- {
- EmpathyMessage *msg = empathy_message_from_tpl_log_event (event);
- log_window_append_message (event, msg);
- tp_clear_object (&msg);
- }
-
- g_object_unref (event);
- }
- g_list_free (events);
-
- model = GTK_TREE_MODEL (log_window->priv->store_events);
- n = gtk_tree_model_iter_n_children (model, NULL) - 1;
-
- if (n >= 0 && gtk_tree_model_iter_nth_child (model, &iter, NULL, n))
- {
- GtkTreePath *path;
- char *str, *script;
-
- path = gtk_tree_model_get_path (model, &iter);
- str = gtk_tree_path_to_string (path);
-
- script = g_strdup_printf ("javascript:scrollToRow([%s]);",
- g_strdelimit (str, ":", ','));
-
- webkit_web_view_execute_script (
- WEBKIT_WEB_VIEW (log_window->priv->webview),
- script);
-
- gtk_tree_path_free (path);
- g_free (str);
- g_free (script);
- }
-
- out:
- ctx_free (ctx);
-
- _tpl_action_chain_continue (log_window->priv->chain);
-}
-
-static void
-get_events_for_date (TplActionChain *chain, gpointer user_data)
-{
- Ctx *ctx = user_data;
-
- tpl_log_manager_get_events_for_date_async (ctx->self->priv->log_manager,
- ctx->account, ctx->entity, ctx->event_mask,
- ctx->date,
- log_window_got_messages_for_date_cb,
- ctx);
-}
-
-static void
-log_window_get_messages_for_dates (EmpathyLogWindow *self,
- GList *dates)
-{
- GList *accounts, *targets, *acc, *targ, *l;
- TplEventTypeMask event_mask;
- EventSubtype subtype;
- GDate *date, *anytime, *separator;
-
- if (!log_window_get_selected (self,
- &accounts, &targets, NULL, NULL, &event_mask, &subtype))
- return;
-
- anytime = g_date_new_dmy (2, 1, -1);
- separator = g_date_new_dmy (1, 1, -1);
-
- _tpl_action_chain_clear (self->priv->chain);
- self->priv->count++;
-
- for (acc = accounts, targ = targets;
- acc != NULL && targ != NULL;
- acc = acc->next, targ = targ->next)
- {
- TpAccount *account = acc->data;
- TplEntity *target = targ->data;
-
- for (l = dates; l != NULL; l = l->next)
- {
- date = l->data;
-
- /* Get events */
- if (g_date_compare (date, anytime) != 0)
- {
- Ctx *ctx;
-
- ctx = ctx_new (self, account, target, date, event_mask, subtype,
- self->priv->count);
- _tpl_action_chain_append (self->priv->chain, get_events_for_date, ctx);
- }
- else
- {
- GtkTreeView *view = GTK_TREE_VIEW (self->priv->treeview_when);
- GtkTreeModel *model = gtk_tree_view_get_model (view);
- GtkTreeIter iter;
- gboolean next;
- GDate *d;
-
- for (next = gtk_tree_model_get_iter_first (model, &iter);
- next;
- next = gtk_tree_model_iter_next (model, &iter))
- {
- Ctx *ctx;
-
- gtk_tree_model_get (model, &iter,
- COL_WHEN_DATE, &d,
- -1);
-
- if (g_date_compare (d, anytime) != 0 &&
- g_date_compare (d, separator) != 0)
- {
- ctx = ctx_new (self, account, target, d,
- event_mask, subtype, self->priv->count);
- _tpl_action_chain_append (self->priv->chain, get_events_for_date, ctx);
- }
-
- g_date_free (d);
- }
- }
- }
- }
-
- start_spinner ();
- _tpl_action_chain_start (self->priv->chain);
-
- g_list_free_full (accounts, g_object_unref);
- g_list_free_full (targets, g_object_unref);
- g_date_free (separator);
- g_date_free (anytime);
-}
-
-static void
-log_manager_got_dates_cb (GObject *manager,
- GAsyncResult *result,
- gpointer user_data)
-{
- Ctx *ctx = user_data;
- GtkTreeView *view;
- GtkTreeModel *model;
- GtkListStore *store;
- GtkTreeIter iter;
- GList *dates;
- GList *l;
- GError *error = NULL;
-
- if (log_window == NULL)
- {
- ctx_free (ctx);
- return;
- }
-
- if (log_window->priv->count != ctx->count)
- goto out;
-
- if (!tpl_log_manager_get_dates_finish (TPL_LOG_MANAGER (manager),
- result, &dates, &error))
- {
- DEBUG ("Unable to retrieve messages' dates: %s. Aborting",
- error->message);
- goto out;
- }
-
- view = GTK_TREE_VIEW (log_window->priv->treeview_when);
- model = gtk_tree_view_get_model (view);
- store = GTK_LIST_STORE (model);
-
- for (l = dates; l != NULL; l = l->next)
- {
- add_date_if_needed (log_window, l->data);
- }
-
- if (gtk_tree_model_get_iter_first (model, &iter))
- {
- gchar *separator = NULL;
-
- if (gtk_tree_model_iter_next (model, &iter))
- {
- gtk_tree_model_get (model, &iter,
- COL_WHEN_TEXT, &separator,
- -1);
- }
-
- if (g_strcmp0 (separator, "separator") != 0)
- {
- GDate *date;
-
- date = g_date_new_dmy (1, 1, -1);
-
- gtk_list_store_prepend (store, &iter);
- gtk_list_store_set (store, &iter,
- COL_WHEN_DATE, date,
- COL_WHEN_TEXT, "separator",
- -1);
-
- g_date_free (date);
-
- date = g_date_new_dmy (2, 1, -1);
-
- gtk_list_store_prepend (store, &iter);
- gtk_list_store_set (store, &iter,
- COL_WHEN_DATE, date,
- COL_WHEN_TEXT, _("Anytime"),
- -1);
-
- g_date_free (date);
- }
-
- g_free (separator);
- }
-
- g_list_free_full (dates, g_free);
- out:
- ctx_free (ctx);
- _tpl_action_chain_continue (log_window->priv->chain);
-}
-
-static void
-select_date (TplActionChain *chain, gpointer user_data)
-{
- GtkTreeView *view;
- GtkTreeModel *model;
- GtkTreeSelection *selection;
- GtkTreeIter iter;
- gboolean next;
- gboolean selected = FALSE;
-
- view = GTK_TREE_VIEW (log_window->priv->treeview_when);
- model = gtk_tree_view_get_model (view);
- selection = gtk_tree_view_get_selection (view);
-
- if (log_window->priv->current_dates != NULL)
- {
- for (next = gtk_tree_model_get_iter_first (model, &iter);
- next;
- next = gtk_tree_model_iter_next (model, &iter))
- {
- GDate *date;
-
- gtk_tree_model_get (model, &iter,
- COL_WHEN_DATE, &date,
- -1);
-
- if (g_list_find_custom (log_window->priv->current_dates, date,
- (GCompareFunc) g_date_compare) != NULL)
- {
- GtkTreePath *path;
-
- gtk_tree_selection_select_iter (selection, &iter);
- path = gtk_tree_model_get_path (model, &iter);
- gtk_tree_view_scroll_to_cell (view, path, NULL, FALSE, 0, 0);
- selected = TRUE;
-
- gtk_tree_path_free (path);
- }
-
- g_date_free (date);
- }
- }
-
- if (!selected)
- {
- /* Show messages of the most recent date */
- if (gtk_tree_model_iter_nth_child (model, &iter, NULL, 2))
- gtk_tree_selection_select_iter (selection, &iter);
- }
-
- _tpl_action_chain_continue (log_window->priv->chain);
-}
-
-static void
-get_dates_for_entity (TplActionChain *chain, gpointer user_data)
-{
- Ctx *ctx = user_data;
-
- tpl_log_manager_get_dates_async (ctx->self->priv->log_manager,
- ctx->account, ctx->entity, ctx->event_mask,
- log_manager_got_dates_cb, ctx);
-}
-
-static void
-log_window_chats_get_messages (EmpathyLogWindow *self,
- gboolean force_get_dates)
-{
- GList *accounts, *targets, *dates;
- TplEventTypeMask event_mask;
- GtkTreeView *view;
- GtkTreeModel *model;
- GtkListStore *store;
- GtkTreeSelection *selection;
-
- if (!log_window_get_selected (self, &accounts, &targets, NULL,
- &dates, &event_mask, NULL))
- return;
-
- view = GTK_TREE_VIEW (self->priv->treeview_when);
- selection = gtk_tree_view_get_selection (view);
- model = gtk_tree_view_get_model (view);
- store = GTK_LIST_STORE (model);
-
- /* Clear all current messages shown in the textview */
- gtk_tree_store_clear (self->priv->store_events);
-
- _tpl_action_chain_clear (self->priv->chain);
- self->priv->count++;
-
- /* If there's a search use the returned hits */
- if (self->priv->hits != NULL)
- {
- if (force_get_dates)
- {
- g_signal_handlers_block_by_func (selection,
- log_window_when_changed_cb,
- self);
-
- gtk_list_store_clear (store);
-
- g_signal_handlers_unblock_by_func (selection,
- log_window_when_changed_cb,
- self);
-
- populate_dates_from_search_hits (accounts, targets);
- }
- else
- {
- populate_events_from_search_hits (accounts, targets, dates);
- }
- }
- /* Either use the supplied date or get the last */
- else if (force_get_dates || dates == NULL)
- {
- GList *acc, *targ;
-
- if (self->priv->current_dates != NULL)
- {
- g_list_free_full (self->priv->current_dates,
- (GDestroyNotify) g_date_free);
- self->priv->current_dates = NULL;
- }
-
- if (gtk_tree_selection_count_selected_rows (selection) > 0)
- {
- GList *paths, *l;
- GtkTreeIter iter;
-
- paths = gtk_tree_selection_get_selected_rows (selection, NULL);
-
- for (l = paths; l != NULL; l = l->next)
- {
- GtkTreePath *path = l->data;
- GDate *date;
-
- gtk_tree_model_get_iter (model, &iter, path);
- gtk_tree_model_get (model, &iter,
- COL_WHEN_DATE, &date,
- -1);
-
- /* The list takes ownership of the date. */
- self->priv->current_dates =
- g_list_prepend (self->priv->current_dates, date);
- }
-
- g_list_free_full (paths, (GDestroyNotify) gtk_tree_path_free);
- }
-
- g_signal_handlers_block_by_func (selection,
- log_window_when_changed_cb,
- self);
-
- gtk_list_store_clear (store);
-
- g_signal_handlers_unblock_by_func (selection,
- log_window_when_changed_cb,
- self);
-
- /* Get a list of dates and show them on the treeview */
- for (targ = targets, acc = accounts;
- targ != NULL && acc != NULL;
- targ = targ->next, acc = acc->next)
- {
- TpAccount *account = acc->data;
- TplEntity *target = targ->data;
- Ctx *ctx = ctx_new (self, account, target, NULL, event_mask, 0,
- self->priv->count);
-
- _tpl_action_chain_append (self->priv->chain, get_dates_for_entity, ctx);
- }
- _tpl_action_chain_append (self->priv->chain, select_date, NULL);
- _tpl_action_chain_start (self->priv->chain);
- }
- else
- {
- /* Show messages of the selected date */
- log_window_get_messages_for_dates (self, dates);
- }
-
- g_list_free_full (accounts, g_object_unref);
- g_list_free_full (targets, g_object_unref);
- g_list_free_full (dates, (GFreeFunc) g_date_free);
-}
-
-typedef struct {
- EmpathyAccountChooserFilterResultCallback callback;
- gpointer user_data;
-} FilterCallbackData;
-
-static void
-got_entities (GObject *manager,
- GAsyncResult *result,
- gpointer user_data)
-{
- FilterCallbackData *data = user_data;
- GList *entities;
- GError *error = NULL;
-
- if (!tpl_log_manager_get_entities_finish (TPL_LOG_MANAGER (manager),
- result, &entities, &error))
- {
- DEBUG ("Could not get entities: %s", error->message);
- g_error_free (error);
- data->callback (FALSE, data->user_data);
- }
- else
- {
- data->callback (entities != NULL, data->user_data);
-
- g_list_free_full (entities, g_object_unref);
- }
-
- g_slice_free (FilterCallbackData, data);
-}
-
-static void
-empathy_account_chooser_filter_has_logs (TpAccount *account,
- EmpathyAccountChooserFilterResultCallback callback,
- gpointer callback_data,
- gpointer user_data)
-{
- TplLogManager *manager = tpl_log_manager_dup_singleton ();
- FilterCallbackData *cb_data = g_slice_new0 (FilterCallbackData);
-
- cb_data->callback = callback;
- cb_data->user_data = callback_data;
-
- tpl_log_manager_get_entities_async (manager, account, got_entities, cb_data);
-
- g_object_unref (manager);
-}
-
-static void
-log_window_logger_clear_account_cb (TpProxy *proxy,
- const GError *error,
- gpointer user_data,
- GObject *weak_object)
-{
- EmpathyLogWindow *self = EMPATHY_LOG_WINDOW (user_data);
-
- if (error != NULL)
- g_warning ("Error when clearing logs: %s", error->message);
-
- /* Refresh the log viewer so the logs are cleared if the account
- * has been deleted */
- gtk_tree_store_clear (self->priv->store_events);
- log_window_who_populate (self);
-
- /* Re-filter the account chooser so the accounts without logs get
- * greyed out */
- empathy_account_chooser_refilter (
- EMPATHY_ACCOUNT_CHOOSER (self->priv->account_chooser));
-}
-
-static void
-log_window_delete_menu_clicked_cb (GtkMenuItem *menuitem,
- EmpathyLogWindow *self)
-{
- GtkWidget *dialog, *content_area, *hbox, *label;
- EmpathyAccountChooser *account_chooser;
- gint response_id;
- TpDBusDaemon *bus;
- TpProxy *logger;
- GError *error = NULL;
-
- account_chooser = (EmpathyAccountChooser *) empathy_account_chooser_new ();
- empathy_account_chooser_set_has_all_option (account_chooser, TRUE);
-
- empathy_account_chooser_refilter (account_chooser);
-
- /* Select the same account as in the history window */
- empathy_account_chooser_set_account (account_chooser,
- empathy_account_chooser_get_account (
- EMPATHY_ACCOUNT_CHOOSER (self->priv->account_chooser)));
-
- dialog = gtk_message_dialog_new_with_markup (GTK_WINDOW (self),
- GTK_DIALOG_MODAL, GTK_MESSAGE_WARNING,
- GTK_BUTTONS_NONE,
- _("Are you sure you want to delete all logs of previous conversations?"));
-
- gtk_dialog_add_buttons (GTK_DIALOG (dialog),
- GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
- _("Clear All"), GTK_RESPONSE_APPLY,
- NULL);
-
- content_area = gtk_message_dialog_get_message_area (
- GTK_MESSAGE_DIALOG (dialog));
-
- hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 6);
- label = gtk_label_new (_("Delete from:"));
- gtk_box_pack_start (GTK_BOX (hbox), label,
- FALSE, FALSE, 0);
- gtk_box_pack_start (GTK_BOX (hbox), GTK_WIDGET (account_chooser),
- FALSE, FALSE, 0);
- gtk_box_pack_start (GTK_BOX (content_area), hbox,
- FALSE, FALSE, 0);
-
- gtk_widget_show_all (hbox);
-
- response_id = gtk_dialog_run (GTK_DIALOG (dialog));
-
- if (response_id != GTK_RESPONSE_APPLY)
- goto out;
-
- bus = tp_dbus_daemon_dup (&error);
- if (error != NULL)
- {
- g_warning ("Could not delete logs: %s", error->message);
- g_error_free (error);
- goto out;
- }
-
- logger = g_object_new (TP_TYPE_PROXY,
- "bus-name", "org.freedesktop.Telepathy.Logger",
- "object-path", "/org/freedesktop/Telepathy/Logger",
- "dbus-daemon", bus,
- NULL);
- g_object_unref (bus);
-
- tp_proxy_add_interface_by_id (logger, EMP_IFACE_QUARK_LOGGER);
-
- if (empathy_account_chooser_has_all_selected (account_chooser))
- {
- DEBUG ("Deleting logs for all the accounts");
-
- emp_cli_logger_call_clear (logger, -1,
- log_window_logger_clear_account_cb,
- self, NULL, G_OBJECT (self));
- }
- else
- {
- TpAccount *account;
-
- account = empathy_account_chooser_get_account (account_chooser);
-
- DEBUG ("Deleting logs for %s", tp_proxy_get_object_path (account));
-
- emp_cli_logger_call_clear_account (logger, -1,
- tp_proxy_get_object_path (account),
- log_window_logger_clear_account_cb,
- self, NULL, G_OBJECT (self));
- }
-
- g_object_unref (logger);
- out:
- gtk_widget_destroy (dialog);
-}
diff --git a/libempathy-gtk/empathy-log-window.h b/libempathy-gtk/empathy-log-window.h
deleted file mode 100644
index 48554fc3..00000000
--- a/libempathy-gtk/empathy-log-window.h
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- * Copyright (C) 2006-2007 Imendio AB
- * Copyright (C) 2007-2011 Collabora Ltd.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301 USA
- *
- * Authors: Martyn Russell <martyn@imendio.com>
- * Xavier Claessens <xclaesse@gmail.com>
- * Emilio Pozuelo Monfort <emilio.pozuelo@collabora.co.uk>
- */
-
-#ifndef __EMPATHY_LOG_WINDOW_H__
-#define __EMPATHY_LOG_WINDOW_H__
-
-#include <gtk/gtk.h>
-#include <telepathy-glib/telepathy-glib.h>
-
-G_BEGIN_DECLS
-
-#define EMPATHY_TYPE_LOG_WINDOW (empathy_log_window_get_type ())
-#define EMPATHY_LOG_WINDOW(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), EMPATHY_TYPE_LOG_WINDOW, EmpathyLogWindow))
-#define EMPATHY_LOG_WINDOW_CLASS(obj) (G_TYPE_CHECK_CLASS_CAST ((obj), EMPATHY_TYPE_LOG_WINDOW, EmpathyLogWindowClass))
-#define EMPATHY_IS_LOG_WINDOW(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), EMPATHY_TYPE_LOG_WINDOW))
-#define EMPATHY_IS_LOG_WINDOW_CLASS(obj) (G_TYPE_CHECK_CLASS_TYPE ((obj), EMPATHY_TYPE_LOG_WINDOW))
-#define EMPATHY_LOG_WINDOW_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), EMPATHY_TYPE_LOG_WINDOW, EmpathyLogWindowClass))
-
-typedef struct _EmpathyLogWindow EmpathyLogWindow;
-typedef struct _EmpathyLogWindowPriv EmpathyLogWindowPriv;
-typedef struct _EmpathyLogWindowClass EmpathyLogWindowClass;
-
-struct _EmpathyLogWindow
-{
- GtkDialog parent;
-
- EmpathyLogWindowPriv *priv;
-};
-
-struct _EmpathyLogWindowClass
-{
- GtkDialogClass parent_class;
-};
-
-GType empathy_log_window_get_type (void);
-
-GtkWidget * empathy_log_window_show (TpAccount *account,
- const gchar *chat_id,
- gboolean chatroom,
- GtkWindow *parent);
-
-G_END_DECLS
-
-#endif /* __EMPATHY_LOG_WINDOW_H__ */
diff --git a/libempathy-gtk/empathy-log-window.ui b/libempathy-gtk/empathy-log-window.ui
deleted file mode 100644
index d6b9f1bc..00000000
--- a/libempathy-gtk/empathy-log-window.ui
+++ /dev/null
@@ -1,395 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<interface>
- <!-- interface-requires gtk+ 3.0 -->
- <object class="GtkVBox" id="vbox1">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <child>
- <object class="GtkMenuBar" id="menubar1">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <child>
- <object class="GtkMenuItem" id="menuitem1">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="use_action_appearance">False</property>
- <property name="label" translatable="yes">_File</property>
- <property name="use_underline">True</property>
- <child type="submenu">
- <object class="GtkMenu" id="menu1">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <child>
- <object class="GtkImageMenuItem" id="imagemenuitem_close">
- <property name="label">gtk-close</property>
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="use_action_appearance">False</property>
- <property name="use_underline">True</property>
- <property name="use_stock">True</property>
- </object>
- </child>
- </object>
- </child>
- </object>
- </child>
- <child>
- <object class="GtkMenuItem" id="menuitem2">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="use_action_appearance">False</property>
- <property name="label" translatable="yes">_Edit</property>
- <property name="use_underline">True</property>
- <child type="submenu">
- <object class="GtkMenu" id="menu2">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <child>
- <object class="GtkImageMenuItem" id="imagemenuitem_delete">
- <property name="label" translatable="yes">Delete All History...</property>
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="use_action_appearance">False</property>
- <property name="use_stock">False</property>
- </object>
- </child>
- </object>
- </child>
- </object>
- </child>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkToolbar" id="toolbar1">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="toolbar_style">both</property>
- <style>
- <class name="primary-toolbar"/>
- </style>
- <child>
- <object class="GtkToolButton" id="toolbutton_profile">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="use_action_appearance">False</property>
- <property name="label" translatable="yes">Profile</property>
- <property name="use_underline">True</property>
- <property name="stock_id">gtk-dialog-info</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="homogeneous">True</property>
- </packing>
- </child>
- <child>
- <object class="GtkToolButton" id="toolbutton_chat">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="use_action_appearance">False</property>
- <property name="label" translatable="yes">Chat</property>
- <property name="use_underline">True</property>
- <property name="icon_name">format-justify-fill</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="homogeneous">True</property>
- </packing>
- </child>
- <child>
- <object class="GtkToolButton" id="toolbutton_call">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="use_action_appearance">False</property>
- <property name="label" translatable="yes">Call</property>
- <property name="use_underline">True</property>
- <property name="icon_name">call-start</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="homogeneous">True</property>
- </packing>
- </child>
- <child>
- <object class="GtkToolButton" id="toolbutton_video">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="use_action_appearance">False</property>
- <property name="label" translatable="yes">Video</property>
- <property name="use_underline">True</property>
- <property name="icon_name">camera-video</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="homogeneous">True</property>
- </packing>
- </child>
- <child>
- <object class="GtkSeparatorToolItem" id="toolbutton_sep1">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="draw">False</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="homogeneous">True</property>
- </packing>
- </child>
- <child>
- <object class="GtkToolItem" id="toolbutton_filler_1">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="use_action_appearance">False</property>
- <child>
- <placeholder/>
- </child>
- </object>
- <packing>
- <property name="expand">True</property>
- </packing>
- </child>
- <child>
- <object class="GtkToolItem" id="toolbutton_accounts">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="use_action_appearance">False</property>
- <child>
- <placeholder/>
- </child>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="homogeneous">True</property>
- </packing>
- </child>
- <child>
- <object class="GtkSeparatorToolItem" id="toolbutton_sep2">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="draw">False</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="homogeneous">True</property>
- </packing>
- </child>
- <child>
- <object class="GtkToolItem" id="toolbutton_filler_2">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="use_action_appearance">False</property>
- <child>
- <placeholder/>
- </child>
- </object>
- <packing>
- <property name="expand">True</property>
- </packing>
- </child>
- <child>
- <object class="GtkToolItem" id="toolbutton_search">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="use_action_appearance">False</property>
- <child>
- <placeholder/>
- </child>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="homogeneous">True</property>
- </packing>
- </child>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="position">1</property>
- </packing>
- </child>
- <child>
- <object class="GtkVPaned" id="vpaned1">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <child>
- <object class="GtkHBox" id="hbox1">
- <property name="height_request">160</property>
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <child>
- <object class="GtkScrolledWindow" id="scrolledwindow_who">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="border_width">3</property>
- <child>
- <object class="GtkTreeView" id="treeview_who">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <child internal-child="selection">
- <object class="GtkTreeSelection" id="treeview-selection1"/>
- </child>
- </object>
- </child>
- </object>
- <packing>
- <property name="expand">True</property>
- <property name="fill">True</property>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkScrolledWindow" id="scrolledwindow_what">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="border_width">3</property>
- <child>
- <object class="GtkTreeView" id="treeview_what">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <child internal-child="selection">
- <object class="GtkTreeSelection" id="treeview-selection2"/>
- </child>
- </object>
- </child>
- </object>
- <packing>
- <property name="expand">True</property>
- <property name="fill">True</property>
- <property name="position">1</property>
- </packing>
- </child>
- <child>
- <object class="GtkScrolledWindow" id="scrolledwindow_when">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="border_width">3</property>
- <child>
- <object class="GtkTreeView" id="treeview_when">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <child internal-child="selection">
- <object class="GtkTreeSelection" id="treeview-selection3"/>
- </child>
- </object>
- </child>
- </object>
- <packing>
- <property name="expand">True</property>
- <property name="fill">True</property>
- <property name="position">2</property>
- </packing>
- </child>
- </object>
- <packing>
- <property name="resize">False</property>
- <property name="shrink">True</property>
- </packing>
- </child>
- <child>
- <object class="GtkNotebook" id="notebook">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="show_tabs">False</property>
- <property name="show_border">False</property>
- <child>
- <object class="GtkScrolledWindow" id="scrolledwindow_events">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- </object>
- </child>
- <child type="tab">
- <object class="GtkLabel" id="label1">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="label" translatable="yes">page 2</property>
- </object>
- <packing>
- <property name="tab_fill">False</property>
- </packing>
- </child>
- <child>
- <object class="GtkHBox" id="hbox2">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="homogeneous">True</property>
- <child>
- <object class="GtkSpinner" id="spinner">
- <property name="width_request">30</property>
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="halign">end</property>
- <property name="margin_right">6</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkLabel" id="label3">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="xalign">0</property>
- <property name="label" translatable="yes">&lt;span size="x-large"&gt;Loading...&lt;/span&gt;</property>
- <property name="use_markup">True</property>
- </object>
- <packing>
- <property name="expand">True</property>
- <property name="fill">True</property>
- <property name="position">1</property>
- </packing>
- </child>
- </object>
- <packing>
- <property name="position">1</property>
- </packing>
- </child>
- <child type="tab">
- <object class="GtkLabel" id="label2">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="label" translatable="yes">page 2</property>
- </object>
- <packing>
- <property name="position">1</property>
- <property name="tab_fill">False</property>
- </packing>
- </child>
- <child>
- <object class="GtkScrolledWindow" id="scrolledwindow_empty">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <child>
- <object class="GtkTreeView" id="treeview_empty">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <child internal-child="selection">
- <object class="GtkTreeSelection" id="treeview-selection5"/>
- </child>
- </object>
- </child>
- </object>
- <packing>
- <property name="position">2</property>
- </packing>
- </child>
- </object>
- <packing>
- <property name="resize">True</property>
- <property name="shrink">True</property>
- </packing>
- </child>
- </object>
- <packing>
- <property name="expand">True</property>
- <property name="fill">True</property>
- <property name="position">2</property>
- </packing>
- </child>
- </object>
-</interface>
diff --git a/libempathy-gtk/empathy-new-account-dialog.c b/libempathy-gtk/empathy-new-account-dialog.c
deleted file mode 100644
index 1d87e21e..00000000
--- a/libempathy-gtk/empathy-new-account-dialog.c
+++ /dev/null
@@ -1,198 +0,0 @@
-/*
- * empathy-new-account-dialog.c - Source for EmpathyNewAccountDialog
- *
- * Copyright (C) 2011 - 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, see <http://www.gnu.org/licenses/>.
- */
-
-#include "config.h"
-#include "empathy-new-account-dialog.h"
-
-#include <glib/gi18n-lib.h>
-#include <tp-account-widgets/tpaw-account-widget.h>
-
-#include "empathy-protocol-chooser.h"
-
-#define DEBUG_FLAG EMPATHY_DEBUG_ACCOUNT
-#include "empathy-debug.h"
-
-G_DEFINE_TYPE (EmpathyNewAccountDialog, empathy_new_account_dialog, \
- GTK_TYPE_DIALOG)
-
-struct _EmpathyNewAccountDialogPrivate
-{
- GtkWidget *chooser;
- TpawAccountWidget *current_account_widget;
- GtkWidget *main_vbox;
- GtkWidget *connect_button;
-
- TpawAccountSettings *settings;
-};
-
-static void
-close_cb (TpawAccountWidget *widget,
- GtkResponseType response,
- EmpathyNewAccountDialog *self)
-{
- gtk_dialog_response (GTK_DIALOG (self), response);
-}
-
-static void
-protocol_changed_cb (GtkComboBox *chooser,
- EmpathyNewAccountDialog *self)
-{
- TpawAccountSettings *settings;
- TpawAccountWidget *account_widget;
- gchar *password = NULL, *account = NULL;
-
- settings = empathy_protocol_chooser_create_account_settings (
- EMPATHY_PROTOCOL_CHOOSER (chooser));
-
- if (settings == NULL)
- return;
-
- /* Save "account" and "password" parameters */
- if (self->priv->settings != NULL)
- {
- account = tpaw_account_settings_dup_string (
- self->priv->settings, "account");
-
- password = tpaw_account_settings_dup_string (
- self->priv->settings, "password");
-
- g_object_unref (self->priv->settings);
- }
-
- account_widget = tpaw_account_widget_new_for_protocol (settings,
- NULL, TRUE);
-
- if (self->priv->current_account_widget != NULL)
- {
- g_signal_handlers_disconnect_by_func (self->priv->current_account_widget,
- close_cb, self);
-
- gtk_widget_destroy (GTK_WIDGET (self->priv->current_account_widget));
- }
-
- self->priv->current_account_widget = account_widget;
-
- self->priv->settings = settings;
-
- g_signal_connect (self->priv->current_account_widget, "close",
- G_CALLBACK (close_cb), self);
-
- /* Restore "account" and "password" parameters in the new widget */
- if (account != NULL)
- {
- tpaw_account_widget_set_account_param (account_widget, account);
- g_free (account);
- }
-
- if (password != NULL)
- {
- tpaw_account_widget_set_password_param (account_widget, password);
- g_free (password);
- }
-
- gtk_box_pack_start (GTK_BOX (self->priv->main_vbox),
- GTK_WIDGET (account_widget), FALSE, FALSE, 0);
- gtk_widget_show (GTK_WIDGET (account_widget));
-}
-
-static void
-empathy_new_account_dialog_init (EmpathyNewAccountDialog *self)
-{
- GtkWidget *w, *hbox, *content;
-
- self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self,
- EMPATHY_TYPE_NEW_ACCOUNT_DIALOG, EmpathyNewAccountDialogPrivate);
-
- self->priv->main_vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 12);
- gtk_container_set_border_width (GTK_CONTAINER (self->priv->main_vbox), 12);
- gtk_widget_show (self->priv->main_vbox);
-
- hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 6);
- gtk_box_pack_start (GTK_BOX (self->priv->main_vbox), hbox, FALSE, FALSE, 0);
- gtk_widget_show (hbox);
-
- w = gtk_label_new (_("What kind of chat account do you have?"));
- gtk_box_pack_start (GTK_BOX (hbox), w, FALSE, FALSE, 0);
- gtk_widget_show (w);
-
- w = gtk_alignment_new (0, 0, 0, 0);
- gtk_alignment_set_padding (GTK_ALIGNMENT (w), 0, 0, 12, 0);
- gtk_box_pack_start (GTK_BOX (self->priv->main_vbox), w, FALSE, FALSE, 0);
- gtk_widget_show (w);
-
- self->priv->chooser = empathy_protocol_chooser_new ();
- gtk_box_pack_start (GTK_BOX (hbox), self->priv->chooser, FALSE, FALSE, 0);
- gtk_widget_show (self->priv->chooser);
-
- content = gtk_dialog_get_content_area (GTK_DIALOG (self));
- gtk_container_add (GTK_CONTAINER (content), self->priv->main_vbox);
-
- g_signal_connect (self->priv->chooser, "changed",
- G_CALLBACK (protocol_changed_cb), self);
-
- /* trigger show the first account widget */
- protocol_changed_cb (GTK_COMBO_BOX (self->priv->chooser), self);
-
- gtk_window_set_title (GTK_WINDOW (self), _("Add new account"));
-}
-
-static void
-empathy_new_account_dialog_dispose (GObject *object)
-{
- EmpathyNewAccountDialog *self = (EmpathyNewAccountDialog *) object;
-
- g_clear_object (&self->priv->settings);
-
- G_OBJECT_CLASS (empathy_new_account_dialog_parent_class)->dispose (object);
-}
-
-static void
-empathy_new_account_dialog_class_init (EmpathyNewAccountDialogClass *klass)
-{
- GObjectClass *object_class = G_OBJECT_CLASS (klass);
-
- object_class->dispose = empathy_new_account_dialog_dispose;
-
- g_type_class_add_private (object_class,
- sizeof (EmpathyNewAccountDialogPrivate));
-}
-
-GtkWidget *
-empathy_new_account_dialog_new (GtkWindow *parent)
-{
- GtkWidget *result;
-
- g_return_val_if_fail (parent == NULL || GTK_IS_WINDOW (parent), NULL);
-
- result = g_object_new (EMPATHY_TYPE_NEW_ACCOUNT_DIALOG,
- "modal", TRUE,
- "destroy-with-parent", TRUE,
- NULL);
-
- if (parent != NULL)
- gtk_window_set_transient_for (GTK_WINDOW (result), parent);
-
- return result;
-}
-
-TpawAccountSettings *
-empathy_new_account_dialog_get_settings (EmpathyNewAccountDialog *self)
-{
- return self->priv->settings;
-}
diff --git a/libempathy-gtk/empathy-new-account-dialog.h b/libempathy-gtk/empathy-new-account-dialog.h
deleted file mode 100644
index 1fa6b43f..00000000
--- a/libempathy-gtk/empathy-new-account-dialog.h
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- * empathy-new-account-dialog.h - Source for EmpathyNewAccountDialog
- *
- * Copyright (C) 2011 - 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, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef ___EMPATHY_NEW_ACCOUNT_DIALOG_H__
-#define ___EMPATHY_NEW_ACCOUNT_DIALOG_H__
-
-#include <gtk/gtk.h>
-#include <tp-account-widgets/tpaw-account-settings.h>
-
-G_BEGIN_DECLS
-
-#define EMPATHY_TYPE_NEW_ACCOUNT_DIALOG (empathy_new_account_dialog_get_type ())
-#define EMPATHY_NEW_ACCOUNT_DIALOG(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), EMPATHY_TYPE_NEW_ACCOUNT_DIALOG, EmpathyNewAccountDialog))
-#define EMPATHY_NEW_ACCOUNT_DIALOG_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), EMPATHY_TYPE_NEW_ACCOUNT_DIALOG, EmpathyNewAccountDialogClass))
-#define EMPATHY_IS_NEW_ACCOUNT_DIALOG(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), EMPATHY_TYPE_NEW_ACCOUNT_DIALOG))
-#define EMPATHY_IS_NEW_ACCOUNT_DIALOG_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), EMPATHY_TYPE_NEW_ACCOUNT_DIALOG))
-#define EMPATHY_NEW_ACCOUNT_DIALOG_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), EMPATHY_TYPE_NEW_ACCOUNT_DIALOG, EmpathyNewAccountDialogClass))
-
-typedef struct _EmpathyNewAccountDialog EmpathyNewAccountDialog;
-typedef struct _EmpathyNewAccountDialogClass EmpathyNewAccountDialogClass;
-typedef struct _EmpathyNewAccountDialogPrivate EmpathyNewAccountDialogPrivate;
-
-struct _EmpathyNewAccountDialog {
- GtkDialog parent;
-
- EmpathyNewAccountDialogPrivate *priv;
-};
-
-struct _EmpathyNewAccountDialogClass {
- GtkDialogClass parent_class;
-};
-
-GType empathy_new_account_dialog_get_type (void) G_GNUC_CONST;
-
-GtkWidget * empathy_new_account_dialog_new (GtkWindow *parent);
-
-TpawAccountSettings * empathy_new_account_dialog_get_settings (
- EmpathyNewAccountDialog *self);
-
-G_END_DECLS
-
-#endif /* ___EMPATHY_NEW_ACCOUNT_DIALOG_H__ */
diff --git a/libempathy-gtk/empathy-new-call-dialog.c b/libempathy-gtk/empathy-new-call-dialog.c
deleted file mode 100644
index d96d0bb5..00000000
--- a/libempathy-gtk/empathy-new-call-dialog.c
+++ /dev/null
@@ -1,280 +0,0 @@
-/*
- * Copyright (C) 2009 Collabora Ltd.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- *
- * Authors: Guillaume Desmottes <guillaume.desmottes@collabora.co.uk>
- */
-
-#include "config.h"
-#include "empathy-new-call-dialog.h"
-
-#include <glib/gi18n-lib.h>
-#include <tp-account-widgets/tpaw-camera-monitor.h>
-
-#include "empathy-call-utils.h"
-#include "empathy-contact-chooser.h"
-#include "empathy-images.h"
-#include "empathy-ui-utils.h"
-#include "empathy-utils.h"
-
-#define DEBUG_FLAG EMPATHY_DEBUG_CONTACT
-#include "empathy-debug.h"
-
-static EmpathyNewCallDialog *dialog_singleton = NULL;
-
-G_DEFINE_TYPE(EmpathyNewCallDialog, empathy_new_call_dialog,
- GTK_TYPE_DIALOG)
-
-struct _EmpathyNewCallDialogPriv {
- GtkWidget *chooser;
- GtkWidget *button_audio;
- GtkWidget *button_video;
-
- TpawCameraMonitor *monitor;
-};
-
-/* Re-use the accept and ok Gtk response so we are sure they won't be used
- * when the dialog window is closed for example */
-enum
-{
- RESPONSE_AUDIO = GTK_RESPONSE_ACCEPT,
- RESPONSE_VIDEO = GTK_RESPONSE_OK,
-};
-
-/**
- * SECTION:empathy-new-call-dialog
- * @title: EmpathyNewCallDialog
- * @short_description: A dialog to show a new call
- * @include: libempathy-gtk/empathy-new-call-dialog.h
- *
- * #EmpathyNewCallDialog is a dialog which allows a call
- * to be started with any contact on any enabled account.
- */
-
-static void
-empathy_new_call_dialog_response (GtkDialog *dialog,
- int response_id)
-{
- EmpathyNewCallDialog *self = (EmpathyNewCallDialog *) dialog;
- FolksIndividual *individual;
- EmpathyContact *contact;
-
- if (response_id != RESPONSE_AUDIO &&
- response_id != RESPONSE_VIDEO)
- goto out;
-
- individual = empathy_contact_chooser_dup_selected (
- EMPATHY_CONTACT_CHOOSER (self->priv->chooser));
- if (individual == NULL) goto out;
-
- empathy_individual_can_audio_video_call (individual, NULL, NULL, &contact);
- g_assert (contact != NULL);
-
- empathy_call_new_with_streams (empathy_contact_get_id (contact),
- empathy_contact_get_account (contact), TRUE,
- response_id == RESPONSE_VIDEO, empathy_get_current_action_time ());
-
- g_object_unref (individual);
- g_object_unref (contact);
-
-out:
- gtk_widget_destroy (GTK_WIDGET (dialog));
-}
-
-static void
-empathy_new_call_dialog_dispose (GObject *object)
-{
- EmpathyNewCallDialog *self = (EmpathyNewCallDialog *) object;
-
- tp_clear_object (&self->priv->monitor);
-
- G_OBJECT_CLASS (empathy_new_call_dialog_parent_class)->dispose (object);
-}
-
-static GObject *
-empathy_new_call_dialog_constructor (GType type,
- guint n_props,
- GObjectConstructParam *props)
-{
- GObject *retval;
-
- if (dialog_singleton)
- {
- retval = G_OBJECT (dialog_singleton);
- g_object_ref (retval);
- }
- else
- {
- retval = G_OBJECT_CLASS (
- empathy_new_call_dialog_parent_class)->constructor (type,
- n_props, props);
-
- dialog_singleton = EMPATHY_NEW_CALL_DIALOG (retval);
- g_object_add_weak_pointer (retval, (gpointer) &dialog_singleton);
- }
-
- return retval;
-}
-
-static gboolean
-filter_individual (EmpathyContactChooser *chooser,
- FolksIndividual *individual,
- gboolean is_online,
- gboolean searching,
- gpointer user_data)
-{
- gboolean can_audio_call, can_video_call;
-
- empathy_individual_can_audio_video_call (individual, &can_audio_call,
- &can_video_call, NULL);
-
- return can_audio_call || can_video_call;
-}
-
-static void
-selection_changed_cb (GtkWidget *chooser,
- FolksIndividual *selected,
- EmpathyNewCallDialog *self)
-{
- gboolean can_audio_call, can_video_call;
-
- if (selected == NULL)
- {
- can_audio_call = can_video_call = FALSE;
- }
- else
- {
- empathy_individual_can_audio_video_call (selected, &can_audio_call,
- &can_video_call, NULL);
- }
-
- gtk_widget_set_sensitive (self->priv->button_audio, can_audio_call);
- gtk_widget_set_sensitive (self->priv->button_video, can_video_call);
-}
-
-static void
-selection_activate_cb (GtkWidget *chooser,
- EmpathyNewCallDialog *self)
-{
- gtk_dialog_response (GTK_DIALOG (self), RESPONSE_AUDIO);
-}
-
-static void
-empathy_new_call_dialog_init (EmpathyNewCallDialog *self)
-{
- GtkWidget *label;
- GtkWidget *image;
- GtkWidget *content;
-
- self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self,
- EMPATHY_TYPE_NEW_CALL_DIALOG, EmpathyNewCallDialogPriv);
-
- self->priv->monitor = tpaw_camera_monitor_dup_singleton ();
-
- content = gtk_dialog_get_content_area (GTK_DIALOG (self));
-
- label = gtk_label_new (_("Enter a contact identifier or phone number:"));
- gtk_box_pack_start (GTK_BOX (content), label, FALSE, FALSE, 0);
- gtk_widget_show (label);
-
- /* contact chooser */
- self->priv->chooser = empathy_contact_chooser_new ();
-
- empathy_contact_chooser_set_filter_func (
- EMPATHY_CONTACT_CHOOSER (self->priv->chooser), filter_individual, self);
-
- gtk_box_pack_start (GTK_BOX (content), self->priv->chooser, TRUE, TRUE, 6);
- gtk_widget_show (self->priv->chooser);
-
- g_signal_connect (self->priv->chooser, "selection-changed",
- G_CALLBACK (selection_changed_cb), self);
- g_signal_connect (self->priv->chooser, "activate",
- G_CALLBACK (selection_activate_cb), self);
-
- /* close button */
- gtk_dialog_add_button (GTK_DIALOG (self),
- GTK_STOCK_CLOSE, GTK_RESPONSE_CLOSE);
-
- /* add video button */
- self->priv->button_video = gtk_button_new_with_mnemonic (_("_Video Call"));
- image = gtk_image_new_from_icon_name (EMPATHY_IMAGE_VIDEO_CALL,
- GTK_ICON_SIZE_BUTTON);
- gtk_button_set_image (GTK_BUTTON (self->priv->button_video), image);
-
- gtk_dialog_add_action_widget (GTK_DIALOG (self), self->priv->button_video,
- RESPONSE_VIDEO);
- gtk_widget_show (self->priv->button_video);
-
- /* add audio button */
- self->priv->button_audio = gtk_button_new_with_mnemonic (_("_Audio Call"));
- image = gtk_image_new_from_icon_name (EMPATHY_IMAGE_VOIP,
- GTK_ICON_SIZE_BUTTON);
- gtk_button_set_image (GTK_BUTTON (self->priv->button_audio), image);
-
- gtk_dialog_add_action_widget (GTK_DIALOG (self), self->priv->button_audio,
- RESPONSE_AUDIO);
- gtk_widget_show (self->priv->button_audio);
-
- /* Tweak the dialog */
- gtk_window_set_title (GTK_WINDOW (self), _("New Call"));
- gtk_window_set_role (GTK_WINDOW (self), "new_call");
-
- /* Set a default height so a few contacts are displayed */
- gtk_window_set_default_size (GTK_WINDOW (self), -1, 400);
-
- gtk_widget_set_sensitive (self->priv->button_audio, FALSE);
- gtk_widget_set_sensitive (self->priv->button_video, FALSE);
-}
-
-static void
-empathy_new_call_dialog_class_init (
- EmpathyNewCallDialogClass *class)
-{
- GObjectClass *object_class = G_OBJECT_CLASS (class);
- GtkDialogClass *dialog_class = GTK_DIALOG_CLASS (class);
-
- g_type_class_add_private (class, sizeof (EmpathyNewCallDialogPriv));
-
- object_class->constructor = empathy_new_call_dialog_constructor;
- object_class->dispose = empathy_new_call_dialog_dispose;
-
- dialog_class->response = empathy_new_call_dialog_response;
-}
-
-/**
- * empathy_new_call_dialog_new:
- * @parent: parent #GtkWindow of the dialog
- *
- * Create a new #EmpathyNewCallDialog it.
- *
- * Return value: the new #EmpathyNewCallDialog
- */
-GtkWidget *
-empathy_new_call_dialog_show (GtkWindow *parent)
-{
- GtkWidget *dialog;
-
- dialog = g_object_new (EMPATHY_TYPE_NEW_CALL_DIALOG, NULL);
-
- if (parent)
- {
- gtk_window_set_transient_for (GTK_WINDOW (dialog),
- GTK_WINDOW (parent));
- }
-
- gtk_widget_show (dialog);
- return dialog;
-}
diff --git a/libempathy-gtk/empathy-new-call-dialog.h b/libempathy-gtk/empathy-new-call-dialog.h
deleted file mode 100644
index e7413568..00000000
--- a/libempathy-gtk/empathy-new-call-dialog.h
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- * Copyright (C) 2009 Collabora Ltd.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- *
- * Authors: Guillaume Desmottes <guillaume.desmottes@collabora.co.uk>
- */
-
-#ifndef __EMPATHY_NEW_CALL_DIALOG_H__
-#define __EMPATHY_NEW_CALL_DIALOG_H__
-
-#include <gtk/gtk.h>
-
-G_BEGIN_DECLS
-
-typedef struct _EmpathyNewCallDialog EmpathyNewCallDialog;
-typedef struct _EmpathyNewCallDialogClass EmpathyNewCallDialogClass;
-typedef struct _EmpathyNewCallDialogPriv EmpathyNewCallDialogPriv;
-
-struct _EmpathyNewCallDialogClass {
- GtkDialogClass parent_class;
-};
-
-struct _EmpathyNewCallDialog {
- GtkDialog parent;
-
- EmpathyNewCallDialogPriv *priv;
-};
-
-GType empathy_new_call_dialog_get_type (void);
-
-/* TYPE MACROS */
-#define EMPATHY_TYPE_NEW_CALL_DIALOG \
- (empathy_new_call_dialog_get_type ())
-#define EMPATHY_NEW_CALL_DIALOG(obj) \
- (G_TYPE_CHECK_INSTANCE_CAST((obj), EMPATHY_TYPE_NEW_CALL_DIALOG, \
- EmpathyNewCallDialog))
-#define EMPATHY_NEW_CALL_DIALOG_CLASS(klass) \
- (G_TYPE_CHECK_CLASS_CAST((klass), EMPATHY_TYPE_NEW_CALL_DIALOG, \
- EmpathyNewCallDialogClass))
-#define EMPATHY_IS_NEW_CALL_DIALOG(obj) \
- (G_TYPE_CHECK_INSTANCE_TYPE((obj), EMPATHY_TYPE_NEW_CALL_DIALOG))
-#define EMPATHY_IS_NEW_CALL_DIALOG_CLASS(klass) \
- (G_TYPE_CHECK_CLASS_TYPE((klass), EMPATHY_TYPE_NEW_CALL_DIALOG))
-#define EMPATHY_NEW_CALL_DIALOG_GET_CLASS(obj) \
- (G_TYPE_INSTANCE_GET_CLASS ((obj), EMPATHY_TYPE_NEW_CALL_DIALOG, \
- EmpathyNewCallDialogClass))
-
-GtkWidget * empathy_new_call_dialog_show (GtkWindow *parent);
-
-G_END_DECLS
-
-#endif /* __EMPATHY_NEW_CALL_DIALOG_H__ */
diff --git a/libempathy-gtk/empathy-new-message-dialog.c b/libempathy-gtk/empathy-new-message-dialog.c
deleted file mode 100644
index 36614725..00000000
--- a/libempathy-gtk/empathy-new-message-dialog.c
+++ /dev/null
@@ -1,369 +0,0 @@
-/*
- * 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-new-message-dialog.h"
-
-#include <glib/gi18n-lib.h>
-
-#include "empathy-request-util.h"
-#include "empathy-contact-chooser.h"
-#include "empathy-ui-utils.h"
-#include "empathy-images.h"
-
-#define DEBUG_FLAG EMPATHY_DEBUG_CONTACT
-#include "empathy-debug.h"
-
-static EmpathyNewMessageDialog *dialog_singleton = NULL;
-
-G_DEFINE_TYPE(EmpathyNewMessageDialog, empathy_new_message_dialog,
- GTK_TYPE_DIALOG)
-
-struct _EmpathyNewMessageDialogPriv {
- GtkWidget *chooser;
- GtkWidget *button_chat;
- GtkWidget *button_sms;
-};
-
-/**
- * SECTION:empathy-new-message-dialog
- * @title: EmpathyNewMessageDialog
- * @short_description: A dialog to show a new message
- * @include: libempathy-gtk/empathy-new-message-dialog.h
- *
- * #EmpathyNewMessageDialog is a dialog which allows a text chat
- * to be started with any contact on any enabled account.
- */
-
-enum
-{
- EMP_NEW_MESSAGE_TEXT,
- EMP_NEW_MESSAGE_SMS,
-};
-
-static const gchar *
-get_error_display_message (GError *error)
-{
- if (error->domain != TP_ERROR)
- goto out;
-
- switch (error->code)
- {
- case TP_ERROR_NETWORK_ERROR:
- return _("Network error");
- case TP_ERROR_OFFLINE:
- return _("The contact is offline");
- case TP_ERROR_INVALID_HANDLE:
- return _("The specified contact is either invalid or unknown");
- case TP_ERROR_NOT_CAPABLE:
- return _("The contact does not support this kind of conversation");
- case TP_ERROR_NOT_IMPLEMENTED:
- return _("The requested functionality is not implemented "
- "for this protocol");
- case TP_ERROR_INVALID_ARGUMENT:
- /* Not very user friendly to say 'invalid arguments' */
- break;
- case TP_ERROR_NOT_AVAILABLE:
- return _("Could not start a conversation with the given contact");
- case TP_ERROR_CHANNEL_BANNED:
- return _("You are banned from this channel");
- case TP_ERROR_CHANNEL_FULL:
- return _("This channel is full");
- case TP_ERROR_CHANNEL_INVITE_ONLY:
- return _("You must be invited to join this channel");
- case TP_ERROR_DISCONNECTED:
- return _("Can't proceed while disconnected");
- case TP_ERROR_PERMISSION_DENIED:
- return _("Permission denied");
- default:
- DEBUG ("Unhandled error code: %d", error->code);
- }
-
-out:
- return _("There was an error starting the conversation");
-}
-
-static void
-show_chat_error (GError *error,
- GtkWindow *parent)
-{
- GtkWidget *dialog;
-
- dialog = gtk_message_dialog_new (parent, GTK_DIALOG_MODAL,
- GTK_MESSAGE_ERROR, GTK_BUTTONS_CLOSE,
- "%s",
- get_error_display_message (error));
-
- g_signal_connect_swapped (dialog, "response",
- G_CALLBACK (gtk_widget_destroy),
- dialog);
-
- gtk_widget_show (dialog);
-}
-
-static void
-ensure_text_channel_cb (GObject *source,
- GAsyncResult *result,
- gpointer user_data)
-{
- GError *error = NULL;
-
- if (!tp_account_channel_request_ensure_channel_finish (
- TP_ACCOUNT_CHANNEL_REQUEST (source), result, &error))
- {
- DEBUG ("Failed to ensure text channel: %s", error->message);
- show_chat_error (error, user_data);
- g_error_free (error);
- }
-}
-
-static void
-empathy_new_message_dialog_response (GtkDialog *dialog,
- int response_id)
-{
- EmpathyNewMessageDialog *self = (EmpathyNewMessageDialog *) dialog;
- FolksIndividual *individual = NULL;
- EmpathyContact *contact = NULL;
-
- if (response_id < EMP_NEW_MESSAGE_TEXT)
- goto out;
-
- individual = empathy_contact_chooser_dup_selected (
- EMPATHY_CONTACT_CHOOSER (self->priv->chooser));
- if (individual == NULL)
- goto out;
-
- switch (response_id)
- {
- case EMP_NEW_MESSAGE_TEXT:
- contact = empathy_contact_dup_best_for_action (individual,
- EMPATHY_ACTION_CHAT);
- g_return_if_fail (contact != NULL);
-
- empathy_chat_with_contact_id (empathy_contact_get_account (contact),
- empathy_contact_get_id (contact),
- empathy_get_current_action_time (),
- ensure_text_channel_cb,
- gtk_widget_get_parent_window (GTK_WIDGET (dialog)));
- break;
-
- case EMP_NEW_MESSAGE_SMS:
- contact = empathy_contact_dup_best_for_action (individual,
- EMPATHY_ACTION_SMS);
- g_return_if_fail (contact != NULL);
-
- empathy_sms_contact_id (empathy_contact_get_account (contact),
- empathy_contact_get_id (contact),
- empathy_get_current_action_time (),
- ensure_text_channel_cb,
- gtk_widget_get_parent_window (GTK_WIDGET (dialog)));
- break;
-
- default:
- g_warn_if_reached ();
- }
-
-out:
- tp_clear_object (&individual);
- tp_clear_object (&contact);
- gtk_widget_destroy (GTK_WIDGET (dialog));
-}
-
-static GObject *
-empathy_new_message_dialog_constructor (GType type,
- guint n_props,
- GObjectConstructParam *props)
-{
- GObject *retval;
-
- if (dialog_singleton)
- {
- retval = G_OBJECT (dialog_singleton);
- g_object_ref (retval);
- }
- else
- {
- retval = G_OBJECT_CLASS (
- empathy_new_message_dialog_parent_class)->constructor (type,
- n_props, props);
-
- dialog_singleton = EMPATHY_NEW_MESSAGE_DIALOG (retval);
- g_object_add_weak_pointer (retval, (gpointer) &dialog_singleton);
- }
-
- return retval;
-}
-
-static gboolean
-individual_supports_action (FolksIndividual *individual,
- EmpathyActionType action)
-{
- EmpathyContact *contact;
-
- contact = empathy_contact_dup_best_for_action (individual, action);
- if (contact == NULL)
- return FALSE;
-
- g_object_unref (contact);
- return TRUE;
-}
-
-static gboolean
-filter_individual (EmpathyContactChooser *chooser,
- FolksIndividual *individual,
- gboolean is_online,
- gboolean searching,
- gpointer user_data)
-{
- return individual_supports_action (individual, EMPATHY_ACTION_CHAT) ||
- individual_supports_action (individual, EMPATHY_ACTION_SMS);
-}
-
-static void
-selection_changed_cb (GtkWidget *chooser,
- FolksIndividual *selected,
- EmpathyNewMessageDialog *self)
-{
- gboolean can_chat, can_sms;
-
- if (selected == NULL)
- {
- can_chat = can_sms = FALSE;
- }
- else
- {
- can_chat = individual_supports_action (selected, EMPATHY_ACTION_CHAT);
- can_sms = individual_supports_action (selected, EMPATHY_ACTION_SMS);
- }
-
- gtk_widget_set_sensitive (self->priv->button_chat, can_chat);
- gtk_widget_set_sensitive (self->priv->button_sms, can_sms);
-}
-
-static void
-selection_activate_cb (GtkWidget *chooser,
- EmpathyNewMessageDialog *self)
-{
- gtk_dialog_response (GTK_DIALOG (self), EMP_NEW_MESSAGE_TEXT);
-}
-
-static void
-empathy_new_message_dialog_init (EmpathyNewMessageDialog *self)
-{
- GtkWidget *label;
- GtkWidget *image;
- GtkWidget *content;
-
- self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self,
- EMPATHY_TYPE_NEW_MESSAGE_DIALOG, EmpathyNewMessageDialogPriv);
-
- content = gtk_dialog_get_content_area (GTK_DIALOG (self));
-
- label = gtk_label_new (_("Enter a contact identifier or phone number:"));
- gtk_box_pack_start (GTK_BOX (content), label, FALSE, FALSE, 0);
- gtk_widget_show (label);
-
- /* contact chooser */
- self->priv->chooser = empathy_contact_chooser_new ();
-
- empathy_contact_chooser_set_filter_func (
- EMPATHY_CONTACT_CHOOSER (self->priv->chooser), filter_individual, self);
-
- gtk_box_pack_start (GTK_BOX (content), self->priv->chooser, TRUE, TRUE, 6);
- gtk_widget_show (self->priv->chooser);
-
- g_signal_connect (self->priv->chooser, "selection-changed",
- G_CALLBACK (selection_changed_cb), self);
- g_signal_connect (self->priv->chooser, "activate",
- G_CALLBACK (selection_activate_cb), self);
-
- /* close button */
- gtk_dialog_add_button (GTK_DIALOG (self),
- GTK_STOCK_CLOSE, GTK_RESPONSE_CLOSE);
-
- /* add SMS button */
- self->priv->button_sms = gtk_button_new_with_mnemonic (_("_SMS"));
- image = gtk_image_new_from_icon_name (EMPATHY_IMAGE_SMS,
- GTK_ICON_SIZE_BUTTON);
- gtk_button_set_image (GTK_BUTTON (self->priv->button_sms), image);
-
- /* add chat button */
- self->priv->button_chat = gtk_button_new_with_mnemonic (_("_Chat"));
- image = gtk_image_new_from_icon_name (EMPATHY_IMAGE_NEW_MESSAGE,
- GTK_ICON_SIZE_BUTTON);
- gtk_button_set_image (GTK_BUTTON (self->priv->button_chat), image);
-
- gtk_dialog_add_action_widget (GTK_DIALOG (self), self->priv->button_sms,
- EMP_NEW_MESSAGE_SMS);
- gtk_widget_show (self->priv->button_sms);
-
- gtk_dialog_add_action_widget (GTK_DIALOG (self), self->priv->button_chat,
- EMP_NEW_MESSAGE_TEXT);
- gtk_widget_show (self->priv->button_chat);
-
- /* Tweak the dialog */
- gtk_window_set_title (GTK_WINDOW (self), _("New Conversation"));
- gtk_window_set_role (GTK_WINDOW (self), "new_message");
-
- /* Set a default height so a few contacts are displayed */
- gtk_window_set_default_size (GTK_WINDOW (self), -1, 400);
-
- gtk_widget_set_sensitive (self->priv->button_chat, FALSE);
- gtk_widget_set_sensitive (self->priv->button_sms, FALSE);
-}
-
-static void
-empathy_new_message_dialog_class_init (
- EmpathyNewMessageDialogClass *class)
-{
- GObjectClass *object_class = G_OBJECT_CLASS (class);
- GtkDialogClass *dialog_class = GTK_DIALOG_CLASS (class);
-
- object_class->constructor = empathy_new_message_dialog_constructor;
-
- dialog_class->response = empathy_new_message_dialog_response;
-
- g_type_class_add_private (class, sizeof (EmpathyNewMessageDialogPriv));
-}
-
-/**
- * empathy_new_message_dialog_new:
- * @parent: parent #GtkWindow of the dialog
- *
- * Create a new #EmpathyNewMessageDialog it.
- *
- * Return value: the new #EmpathyNewMessageDialog
- */
-GtkWidget *
-empathy_new_message_dialog_show (GtkWindow *parent)
-{
- GtkWidget *dialog;
-
- dialog = g_object_new (EMPATHY_TYPE_NEW_MESSAGE_DIALOG, NULL);
-
- if (parent)
- {
- gtk_window_set_transient_for (GTK_WINDOW (dialog),
- GTK_WINDOW (parent));
- }
-
- gtk_widget_show (dialog);
- return dialog;
-}
diff --git a/libempathy-gtk/empathy-new-message-dialog.h b/libempathy-gtk/empathy-new-message-dialog.h
deleted file mode 100644
index 5adc4cf9..00000000
--- a/libempathy-gtk/empathy-new-message-dialog.h
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- * 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/gtk.h>
-
-G_BEGIN_DECLS
-
-typedef struct _EmpathyNewMessageDialog EmpathyNewMessageDialog;
-typedef struct _EmpathyNewMessageDialogClass EmpathyNewMessageDialogClass;
-typedef struct _EmpathyNewMessageDialogPriv EmpathyNewMessageDialogPriv;
-
-struct _EmpathyNewMessageDialogClass {
- GtkDialogClass parent_class;
-};
-
-struct _EmpathyNewMessageDialog {
- GtkDialog parent;
- EmpathyNewMessageDialogPriv *priv;
-};
-
-GType empathy_new_message_dialog_get_type (void);
-
-/* TYPE MACROS */
-#define EMPATHY_TYPE_NEW_MESSAGE_DIALOG \
- (empathy_new_message_dialog_get_type ())
-#define EMPATHY_NEW_MESSAGE_DIALOG(obj) \
- (G_TYPE_CHECK_INSTANCE_CAST((obj), EMPATHY_TYPE_NEW_MESSAGE_DIALOG, \
- EmpathyNewMessageDialog))
-#define EMPATHY_NEW_MESSAGE_DIALOG_CLASS(klass) \
- (G_TYPE_CHECK_CLASS_CAST((klass), EMPATHY_TYPE_NEW_MESSAGE_DIALOG, \
- EmpathyNewMessageDialogClass))
-#define EMPATHY_IS_NEW_MESSAGE_DIALOG(obj) \
- (G_TYPE_CHECK_INSTANCE_TYPE((obj), EMPATHY_TYPE_NEW_MESSAGE_DIALOG))
-#define EMPATHY_IS_NEW_MESSAGE_DIALOG_CLASS(klass) \
- (G_TYPE_CHECK_CLASS_TYPE((klass), EMPATHY_TYPE_NEW_MESSAGE_DIALOG))
-#define EMPATHY_NEW_MESSAGE_DIALOG_GET_CLASS(obj) \
- (G_TYPE_INSTANCE_GET_CLASS ((obj), EMPATHY_TYPE_NEW_MESSAGE_DIALOG, \
- EmpathyNewMessageDialogClass))
-
-GtkWidget * empathy_new_message_dialog_show (GtkWindow *parent);
-
-G_END_DECLS
-
-#endif /* __EMPATHY_NEW_MESSAGE_DIALOG_H__ */
diff --git a/libempathy-gtk/empathy-notify-manager.c b/libempathy-gtk/empathy-notify-manager.c
deleted file mode 100644
index 8ca97950..00000000
--- a/libempathy-gtk/empathy-notify-manager.c
+++ /dev/null
@@ -1,229 +0,0 @@
-/* * Copyright (C) 2009 Collabora Ltd.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- *
- * Authors: Guillaume Desmottes <guillaume.desmottes@collabora.co.uk>
- */
-
-#include "config.h"
-#include "empathy-notify-manager.h"
-
-#include <libnotify/notify.h>
-#include <tp-account-widgets/tpaw-pixbuf-utils.h>
-
-#include "empathy-gsettings.h"
-#include "empathy-ui-utils.h"
-#include "empathy-utils.h"
-
-#define DEBUG_FLAG EMPATHY_DEBUG_OTHER
-#include "empathy-debug.h"
-
-#define GET_PRIV(obj) EMPATHY_GET_PRIV (obj, EmpathyNotifyManager)
-
-typedef struct
-{
- /* owned (gchar *) => TRUE */
- GHashTable *capabilities;
- TpAccountManager *account_manager;
- GSettings *gsettings_notif;
-} EmpathyNotifyManagerPriv;
-
-G_DEFINE_TYPE (EmpathyNotifyManager, empathy_notify_manager, G_TYPE_OBJECT);
-
-static EmpathyNotifyManager *notify_manager = NULL;
-
-static GObject *
-notify_manager_constructor (GType type,
- guint n_construct_params,
- GObjectConstructParam *construct_params)
-{
- GObject *retval;
-
- if (notify_manager != NULL)
- return g_object_ref (notify_manager);
-
- retval = G_OBJECT_CLASS (empathy_notify_manager_parent_class)->constructor
- (type, n_construct_params, construct_params);
-
- notify_manager = EMPATHY_NOTIFY_MANAGER (retval);
- g_object_add_weak_pointer (retval, (gpointer) &notify_manager);
-
- return retval;
-}
-
-static void
-notify_manager_dispose (GObject *object)
-{
- EmpathyNotifyManagerPriv *priv = GET_PRIV (object);
-
- if (priv->account_manager != NULL)
- {
- g_object_unref (priv->account_manager);
- priv->account_manager = NULL;
- }
-
- tp_clear_object (&priv->gsettings_notif);
-
- G_OBJECT_CLASS (empathy_notify_manager_parent_class)->dispose (object);
-}
-
-static void
-notify_manager_finalize (GObject *object)
-{
- EmpathyNotifyManagerPriv *priv = GET_PRIV (object);
-
- g_hash_table_unref (priv->capabilities);
-
- G_OBJECT_CLASS (empathy_notify_manager_parent_class)->finalize (object);
-}
-
-static void
-empathy_notify_manager_class_init (EmpathyNotifyManagerClass *klass)
-{
- GObjectClass *object_class = G_OBJECT_CLASS (klass);
-
- object_class->dispose = notify_manager_dispose;
- object_class->finalize = notify_manager_finalize;
- object_class->constructor = notify_manager_constructor;
-
- g_type_class_add_private (object_class, sizeof (EmpathyNotifyManagerPriv));
-}
-
-static void
-account_manager_prepared_cb (GObject *source_object,
- GAsyncResult *result,
- gpointer user_data)
-{
- TpAccountManager *account_manager = TP_ACCOUNT_MANAGER (source_object);
- GError *error = NULL;
-
- if (!tp_proxy_prepare_finish (account_manager, result, &error))
- {
- DEBUG ("Failed to prepare account manager: %s", error->message);
- g_error_free (error);
- return;
- }
-}
-
-static void
-empathy_notify_manager_init (EmpathyNotifyManager *self)
-{
- EmpathyNotifyManagerPriv *priv = G_TYPE_INSTANCE_GET_PRIVATE (self,
- EMPATHY_TYPE_NOTIFY_MANAGER, EmpathyNotifyManagerPriv);
- GList *list, *l;
-
- self->priv = priv;
-
- priv->gsettings_notif = g_settings_new (EMPATHY_PREFS_NOTIFICATIONS_SCHEMA);
-
- priv->capabilities = g_hash_table_new_full (g_str_hash, g_str_equal, g_free,
- NULL);
-
- /* fetch capabilities */
- list = notify_get_server_caps ();
- for (l = list; l != NULL; l = g_list_next (l))
- {
- gchar *cap = l->data;
-
- DEBUG ("add capability: %s", cap);
- /* owernship of the string is transfered to the hash table */
- g_hash_table_insert (priv->capabilities, cap, GUINT_TO_POINTER (TRUE));
- }
- g_list_free (list);
-
- priv->account_manager = tp_account_manager_dup ();
-
- tp_proxy_prepare_async (priv->account_manager, NULL,
- account_manager_prepared_cb, self);
-}
-
-EmpathyNotifyManager *
-empathy_notify_manager_dup_singleton (void)
-{
- return g_object_new (EMPATHY_TYPE_NOTIFY_MANAGER, NULL);
-}
-
-gboolean
-empathy_notify_manager_has_capability (EmpathyNotifyManager *self,
- const gchar *cap)
-{
- EmpathyNotifyManagerPriv *priv = GET_PRIV (self);
-
- return g_hash_table_lookup (priv->capabilities, cap) != NULL;
-}
-
-GdkPixbuf *
-empathy_notify_manager_get_pixbuf_for_notification (EmpathyNotifyManager *self,
- EmpathyContact *contact,
- const char *icon_name)
-{
- GdkPixbuf *pixbuf = NULL;
-
- if (contact != NULL)
- pixbuf = empathy_pixbuf_avatar_from_contact_scaled (contact, 48, 48);
-
- if (pixbuf == NULL)
- pixbuf = tpaw_pixbuf_from_icon_name_sized (icon_name, 48);
-
- return pixbuf;
-}
-
-gboolean
-empathy_notify_manager_notification_is_enabled (EmpathyNotifyManager *self)
-{
- EmpathyNotifyManagerPriv *priv = GET_PRIV (self);
- TpConnectionPresenceType presence;
-
- if (!g_settings_get_boolean (priv->gsettings_notif,
- EMPATHY_PREFS_NOTIFICATIONS_ENABLED))
- return FALSE;
-
- if (!tp_account_manager_is_prepared (priv->account_manager,
- TP_ACCOUNT_MANAGER_FEATURE_CORE))
- {
- DEBUG ("account manager is not ready yet; display the notification");
- return TRUE;
- }
-
- presence = tp_account_manager_get_most_available_presence (
- priv->account_manager,
- NULL, NULL);
-
- if (presence != TP_CONNECTION_PRESENCE_TYPE_AVAILABLE &&
- presence != TP_CONNECTION_PRESENCE_TYPE_UNSET)
- {
- if (g_settings_get_boolean (priv->gsettings_notif,
- EMPATHY_PREFS_NOTIFICATIONS_DISABLED_AWAY))
- return FALSE;
- }
-
- return TRUE;
-}
-
-NotifyNotification *
-empathy_notify_manager_create_notification (const gchar *summary,
- const char *body,
- const gchar *icon)
-{
- NotifyNotification *notification;
-
- notification = notify_notification_new (summary, body, icon);
-
- notify_notification_set_hint (notification,
- EMPATHY_NOTIFY_MANAGER_CAP_DESKTOP_ENTRY,
- g_variant_new_string ("empathy"));
-
- return notification;
-}
diff --git a/libempathy-gtk/empathy-notify-manager.h b/libempathy-gtk/empathy-notify-manager.h
deleted file mode 100644
index 7c2fa8c4..00000000
--- a/libempathy-gtk/empathy-notify-manager.h
+++ /dev/null
@@ -1,115 +0,0 @@
-/*
- * Copyright (C) 2009 Collabora Ltd.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- *
- * Authors: Guillaume Desmottes <guillaume.desmottes@collabora.co.uk>
- */
-
-#ifndef __EMPATHY_NOTIFY_MANAGER_H__
-#define __EMPATHY_NOTIFY_MANAGER_H__
-
-#include <libnotify/notification.h>
-
-#include "empathy-contact.h"
-
-G_BEGIN_DECLS
-
-#define EMPATHY_NOTIFY_MANAGER_CAP_ACTIONS "actions"
-#define EMPATHY_NOTIFY_MANAGER_CAP_BODY "body"
-#define EMPATHY_NOTIFY_MANAGER_CAP_BODY_HYPERLINKS "body-hyperlinks"
-#define EMPATHY_NOTIFY_MANAGER_CAP_BODY_IMAGES "body-images"
-#define EMPATHY_NOTIFY_MANAGER_CAP_BODY_MARKUP "body-markup"
-#define EMPATHY_NOTIFY_MANAGER_CAP_CATEGORY "category"
-#define EMPATHY_NOTIFY_MANAGER_CAP_ICON_MULTI "icon-multi"
-#define EMPATHY_NOTIFY_MANAGER_CAP_ICON_STATIC "icon-static"
-#define EMPATHY_NOTIFY_MANAGER_CAP_IMAGE_SVG_XML "image/svg+xml"
-#define EMPATHY_NOTIFY_MANAGER_CAP_SOUND "sound"
-#define EMPATHY_NOTIFY_MANAGER_CAP_DESKTOP_ENTRY "desktop-entry"
-/* notify-osd specific */
-#define EMPATHY_NOTIFY_MANAGER_CAP_X_CANONICAL_APPEND "x-canonical-append"
-#define EMPATHY_NOTIFY_MANAGER_CAP_X_CANONICAL_PRIVATE_ICON_ONLY "x-canonical-private-icon-only"
-#define EMPATHY_NOTIFY_MANAGER_CAP_X_CANONICAL_PRIVATE_SYNCHRONOUS "x-canonical-private-synchronous"
-#define EMPATHY_NOTIFY_MANAGER_CAP_X_CANONICAL_TRUNCATION "x-canonical-truncation"
-
-/* Categories associated with EMPATHY_NOTIFY_MANAGER_CAP_CATEGORY.
- * Uses x-empathy as prefix for unofficial categories. See
- * http://www.galago-project.org/specs/notification/0.9/x211.html */
-#define EMPATHY_NOTIFICATION_CATEGORY_CHAT "im.received"
-#define EMPATHY_NOTIFICATION_CATEGORY_PRESENCE_ONLINE "presence.online"
-#define EMPATHY_NOTIFICATION_CATEGORY_PRESENCE_OFFLINE "presence.offline"
-/* Yes, these two are the same. */
-#define EMPATHY_NOTIFICATION_CATEGORY_VOIP "x-empathy.call.incoming"
-#define EMPATHY_NOTIFICATION_CATEGORY_CALL "x-empathy.call.incoming"
-#define EMPATHY_NOTIFICATION_CATEGORY_TRANSFER "x-empathy.transfer.incoming"
-#define EMPATHY_NOTIFICATION_CATEGORY_INVITATION "x-empathy.im.room-invitation"
-#define EMPATHY_NOTIFICATION_CATEGORY_AUTH "x-empathy.network.auth-request"
-#define EMPATHY_NOTIFICATION_CATEGORY_SUBSCRIPTION "x-empathy.im.subscription-request"
-#define EMPATHY_NOTIFICATION_CATEGORY_MENTIONED "x-empathy.im.mentioned"
-
-#define EMPATHY_TYPE_NOTIFY_MANAGER (empathy_notify_manager_get_type ())
-#define EMPATHY_NOTIFY_MANAGER(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), EMPATHY_TYPE_NOTIFY_MANAGER, EmpathyNotifyManager))
-#define EMPATHY_NOTIFY_MANAGER_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), EMPATHY_TYPE_NOTIFY_MANAGER, EmpathyNotifyManagerClass))
-#define EMPATHY_IS_NOTIFY_MANAGER(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), EMPATHY_TYPE_NOTIFY_MANAGER))
-#define EMPATHY_IS_NOTIFY_MANAGER_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), EMPATHY_TYPE_NOTIFY_MANAGER))
-#define EMPATHY_NOTIFY_MANAGER_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), EMPATHY_TYPE_NOTIFY_MANAGER, EmpathyNotifyManagerClass))
-
-/* FIXME: this should *really* belong to libnotify. */
-typedef enum {
- EMPATHY_NOTIFICATION_CLOSED_INVALID = 0,
- EMPATHY_NOTIFICATION_CLOSED_EXPIRED = 1,
- EMPATHY_NOTIFICATION_CLOSED_DISMISSED = 2,
- EMPATHY_NOTIFICATION_CLOSED_PROGRAMMATICALY = 3,
- EMPATHY_NOTIFICATION_CLOSED_RESERVED = 4
-} EmpathyNotificationClosedReason;
-
-typedef struct _EmpathyNotifyManager EmpathyNotifyManager;
-typedef struct _EmpathyNotifyManagerClass EmpathyNotifyManagerClass;
-
-struct _EmpathyNotifyManager
-{
- GObject parent;
- gpointer priv;
-};
-
-struct _EmpathyNotifyManagerClass
-{
- GObjectClass parent_class;
-};
-
-GType empathy_notify_manager_get_type (void) G_GNUC_CONST;
-
-/* Get the notify_manager singleton */
-EmpathyNotifyManager * empathy_notify_manager_dup_singleton (void);
-
-gboolean empathy_notify_manager_has_capability (EmpathyNotifyManager *self,
- const gchar *cap);
-
-gboolean empathy_notify_manager_notification_is_enabled (
- EmpathyNotifyManager *self);
-
-GdkPixbuf * empathy_notify_manager_get_pixbuf_for_notification (
- EmpathyNotifyManager *self,
- EmpathyContact *contact,
- const char *icon_name);
-
-NotifyNotification * empathy_notify_manager_create_notification (
- const gchar *summary,
- const char *body,
- const gchar *icon);
-
-G_END_DECLS
-
-#endif /* __EMPATHY_NOTIFY_MANAGER_H__ */
diff --git a/libempathy-gtk/empathy-password-dialog.c b/libempathy-gtk/empathy-password-dialog.c
deleted file mode 100644
index c88bf567..00000000
--- a/libempathy-gtk/empathy-password-dialog.c
+++ /dev/null
@@ -1,184 +0,0 @@
-/*
- * empathy-password-dialog.c - Source for EmpathyPasswordDialog
- * Copyright (C) 2010 Collabora Ltd.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-#include "config.h"
-#include "empathy-password-dialog.h"
-
-#include <glib/gi18n-lib.h>
-
-#define DEBUG_FLAG EMPATHY_DEBUG_SASL
-#include "empathy-debug.h"
-
-G_DEFINE_TYPE (EmpathyPasswordDialog, empathy_password_dialog,
- EMPATHY_TYPE_BASE_PASSWORD_DIALOG)
-
-enum {
- PROP_HANDLER = 1,
-
- LAST_PROPERTY,
-};
-
-struct _EmpathyPasswordDialogPriv {
- EmpathyServerSASLHandler *handler;
-};
-
-static void
-empathy_password_dialog_get_property (GObject *object,
- guint property_id,
- GValue *value,
- GParamSpec *pspec)
-{
- EmpathyPasswordDialog *self = (EmpathyPasswordDialog *) object;
-
- switch (property_id)
- {
- case PROP_HANDLER:
- g_value_set_object (value, self->priv->handler);
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
- break;
- }
-}
-
-static void
-empathy_password_dialog_set_property (GObject *object,
- guint property_id,
- const GValue *value,
- GParamSpec *pspec)
-{
- EmpathyPasswordDialog *self = (EmpathyPasswordDialog *) object;
-
- switch (property_id)
- {
- case PROP_HANDLER:
- g_assert (self->priv->handler == NULL); /* construct only */
- self->priv->handler = g_value_dup_object (value);
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
- break;
- }
-}
-
-static void
-empathy_password_dialog_dispose (GObject *object)
-{
- EmpathyPasswordDialog *self = (EmpathyPasswordDialog *) object;
-
- tp_clear_object (&self->priv->handler);
-
- G_OBJECT_CLASS (empathy_password_dialog_parent_class)->dispose (object);
-}
-
-static void
-password_dialog_response_cb (GtkDialog *dialog,
- gint response,
- gpointer user_data)
-{
- EmpathyPasswordDialog *self = (EmpathyPasswordDialog *) dialog;
- EmpathyBasePasswordDialog *base = (EmpathyBasePasswordDialog *) dialog;
-
- if (response == GTK_RESPONSE_OK)
- {
- empathy_server_sasl_handler_provide_password (self->priv->handler,
- gtk_entry_get_text (GTK_ENTRY (base->entry)),
- gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (base->ticky)));
- }
- else
- {
- empathy_server_sasl_handler_cancel (self->priv->handler);
- }
-
- gtk_widget_destroy (GTK_WIDGET (dialog));
-}
-
-static void
-password_dialog_handler_invalidated_cb (EmpathyServerSASLHandler *handler,
- EmpathyPasswordDialog *dialog)
-{
- gtk_widget_destroy (GTK_WIDGET (dialog));
-}
-
-static void
-empathy_password_dialog_constructed (GObject *object)
-{
- EmpathyPasswordDialog *self = (EmpathyPasswordDialog *) object;
- EmpathyBasePasswordDialog *base = (EmpathyBasePasswordDialog *) object;
- gchar *text;
-
- G_OBJECT_CLASS (empathy_password_dialog_parent_class)->constructed (object);
-
- tp_g_signal_connect_object (self->priv->handler, "invalidated",
- G_CALLBACK (password_dialog_handler_invalidated_cb),
- object, 0);
-
- gtk_window_set_title (GTK_WINDOW (self), _("Password Required"));
-
- text = g_strdup_printf (_("Enter your password for account\n<b>%s</b>"),
- tp_account_get_display_name (base->account));
- gtk_message_dialog_set_markup (GTK_MESSAGE_DIALOG (self), text);
- g_free (text);
-
- /* only show it if we actually support it */
- if (empathy_server_sasl_handler_can_save_response_somewhere (
- self->priv->handler))
- gtk_widget_show (base->ticky);
-
- g_signal_connect (self, "response",
- G_CALLBACK (password_dialog_response_cb), self);
-}
-
-static void
-empathy_password_dialog_init (EmpathyPasswordDialog *self)
-{
- self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self,
- EMPATHY_TYPE_PASSWORD_DIALOG, EmpathyPasswordDialogPriv);
-}
-
-static void
-empathy_password_dialog_class_init (EmpathyPasswordDialogClass *klass)
-{
- GParamSpec *pspec;
- GObjectClass *oclass = G_OBJECT_CLASS (klass);
-
- g_type_class_add_private (klass, sizeof (EmpathyPasswordDialogPriv));
-
- oclass->set_property = empathy_password_dialog_set_property;
- oclass->get_property = empathy_password_dialog_get_property;
- oclass->dispose = empathy_password_dialog_dispose;
- oclass->constructed = empathy_password_dialog_constructed;
-
- pspec = g_param_spec_object ("handler", "The EmpathyServerSASLHandler",
- "The EmpathyServerSASLHandler to be used.",
- EMPATHY_TYPE_SERVER_SASL_HANDLER,
- G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
- g_object_class_install_property (oclass, PROP_HANDLER, pspec);
-}
-
-GtkWidget *
-empathy_password_dialog_new (EmpathyServerSASLHandler *handler)
-{
- g_assert (EMPATHY_IS_SERVER_SASL_HANDLER (handler));
-
- return g_object_new (EMPATHY_TYPE_PASSWORD_DIALOG,
- "handler", handler,
- "account", empathy_server_sasl_handler_get_account (handler),
- NULL);
-}
diff --git a/libempathy-gtk/empathy-password-dialog.h b/libempathy-gtk/empathy-password-dialog.h
deleted file mode 100644
index 1b19375a..00000000
--- a/libempathy-gtk/empathy-password-dialog.h
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- * empathy-password-dialog.h - Header for EmpathyPasswordDialog
- * Copyright (C) 2010 Collabora Ltd.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-#ifndef __EMPATHY_PASSWORD_DIALOG_H__
-#define __EMPATHY_PASSWORD_DIALOG_H__
-
-#include <gtk/gtk.h>
-
-#include "empathy-base-password-dialog.h"
-#include "empathy-server-sasl-handler.h"
-
-G_BEGIN_DECLS
-
-typedef struct _EmpathyPasswordDialog EmpathyPasswordDialog;
-typedef struct _EmpathyPasswordDialogClass EmpathyPasswordDialogClass;
-typedef struct _EmpathyPasswordDialogPriv EmpathyPasswordDialogPriv;
-
-struct _EmpathyPasswordDialogClass {
- EmpathyBasePasswordDialogClass parent_class;
-};
-
-struct _EmpathyPasswordDialog {
- EmpathyBasePasswordDialog parent;
- EmpathyPasswordDialogPriv *priv;
-};
-
-GType empathy_password_dialog_get_type (void);
-
-#define EMPATHY_TYPE_PASSWORD_DIALOG \
- (empathy_password_dialog_get_type ())
-#define EMPATHY_PASSWORD_DIALOG(obj) \
- (G_TYPE_CHECK_INSTANCE_CAST((obj), EMPATHY_TYPE_PASSWORD_DIALOG, \
- EmpathyPasswordDialog))
-#define EMPATHY_PASSWORD_DIALOG_CLASS(klass) \
- (G_TYPE_CHECK_CLASS_CAST((klass), EMPATHY_TYPE_PASSWORD_DIALOG, \
- EmpathyPasswordDialogClass))
-#define EMPATHY_IS_PASSWORD_DIALOG(obj) \
- (G_TYPE_CHECK_INSTANCE_TYPE((obj), EMPATHY_TYPE_PASSWORD_DIALOG))
-#define EMPATHY_IS_PASSWORD_DIALOG_CLASS(klass) \
- (G_TYPE_CHECK_CLASS_TYPE((klass), EMPATHY_TYPE_PASSWORD_DIALOG))
-#define EMPATHY_PASSWORD_DIALOG_GET_CLASS(obj) \
- (G_TYPE_INSTANCE_GET_CLASS ((obj), EMPATHY_TYPE_PASSWORD_DIALOG, \
- EmpathyPasswordDialogClass))
-
-GtkWidget * empathy_password_dialog_new (EmpathyServerSASLHandler *handler);
-
-G_END_DECLS
-
-#endif /* #ifndef __EMPATHY_PASSWORD_DIALOG_H__*/
diff --git a/libempathy-gtk/empathy-plist.c b/libempathy-gtk/empathy-plist.c
deleted file mode 100644
index e1113a07..00000000
--- a/libempathy-gtk/empathy-plist.c
+++ /dev/null
@@ -1,302 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * Copyright (C) 2008 Christophe Fergeau <teuf@gnome.org>
- * Based on itdb_plist parser from the gtkpod project.
- *
- * The code contained in this file is free software; you can redistribute
- * it and/or modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either version
- * 2.1 of the License, or (at your option) any later version.
- *
- * This file is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this code; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-#include "config.h"
-#include "empathy-plist.h"
-
-#include <string.h>
-#include <libxml/tree.h>
-#include <telepathy-glib/telepathy-glib.h>
-
-static GValue *empathy_plist_parse_node (xmlNode *a_node);
-
-static GValue *
-empathy_plist_parse_integer (xmlNode *a_node)
-{
- char *str_val;
- char *end_ptr;
- gint int_val;
-
- str_val = (char *) xmlNodeGetContent (a_node);
- int_val = strtol (str_val, &end_ptr, 0);
- if (*end_ptr != '\0') {
- xmlFree (str_val);
- return NULL;
- }
- xmlFree (str_val);
-
- return tp_g_value_slice_new_int (int_val);
-}
-
-static GValue *
-empathy_plist_parse_string (xmlNode *a_node)
-{
- char *str_val;
- GValue *value;
-
- str_val = (char *) xmlNodeGetContent (a_node);
-
- value = tp_g_value_slice_new_string (str_val);
-
- xmlFree (str_val);
-
- return value;
-}
-
-static GValue *
-empathy_plist_parse_real (xmlNode *a_node)
-{
- char *str_val;
- char *end_ptr;
- gdouble double_val;
-
- str_val = (char *) xmlNodeGetContent (a_node);
- double_val = g_ascii_strtod (str_val, &end_ptr);
- if (*end_ptr != '\0') {
- xmlFree (str_val);
- return NULL;
- }
- xmlFree (str_val);
-
- return tp_g_value_slice_new_double (double_val);
-}
-
-static GValue *
-empathy_plist_parse_boolean (xmlNode *a_node)
-{
- gboolean bool_val;
-
- if (strcmp ((char *) a_node->name, "true") == 0) {
- bool_val = TRUE;
- } else if (strcmp ((char *) a_node->name, "false") == 0) {
- bool_val = FALSE;
- } else {
- return NULL;
- }
-
- return tp_g_value_slice_new_boolean (bool_val);
-}
-
-static GValue *
-empathy_plist_parse_data (xmlNode *a_node)
-{
- char *str_val;
- guchar *raw_data;
- gsize len;
- GValue *value;
-
- str_val = (char *) xmlNodeGetContent (a_node);
- raw_data = g_base64_decode (str_val, &len);
- xmlFree (str_val);
-
- value = tp_g_value_slice_new_bytes (len, raw_data);
-
- g_free (raw_data);
-
- return value;
-}
-
-static xmlNode *
-empathy_plist_parse_one_dict_entry (xmlNode *a_node, GHashTable *dict)
-{
- xmlNode *cur_node = a_node;
- xmlChar *key_name;
- GValue *value;
-
- while (cur_node &&
- (xmlStrcmp (cur_node->name, (xmlChar *) "key") != 0)) {
- cur_node = cur_node->next;
- }
- if (!cur_node) {
- return NULL;
- }
- key_name = xmlNodeGetContent (cur_node);
- cur_node = cur_node->next;
- while (cur_node && xmlIsBlankNode (cur_node)) {
- cur_node = cur_node->next;
- }
- if (!cur_node) {
- xmlFree (key_name);
- return NULL;
- }
-
- value = empathy_plist_parse_node (cur_node);
- if (value) {
- g_hash_table_insert (dict, g_strdup ((char *) key_name), value);
- }
- xmlFree (key_name);
-
- return cur_node->next;
-}
-
-static GValue *
-empathy_plist_parse_dict (xmlNode *a_node)
-{
- xmlNode *cur_node = a_node->children;
- GHashTable *dict;
-
- dict = g_hash_table_new_full (g_str_hash, g_str_equal,
- g_free, (GDestroyNotify) tp_g_value_slice_free);
-
- while (cur_node) {
- if (xmlIsBlankNode (cur_node)) {
- cur_node = cur_node->next;
- } else {
- cur_node = empathy_plist_parse_one_dict_entry (cur_node, dict);
- }
- }
-
- return tp_g_value_slice_new_take_boxed (G_TYPE_HASH_TABLE, dict);
-}
-
-typedef GValue *(*ParseCallback) (xmlNode *);
-
-struct Parser {
- const char * const type_name;
- ParseCallback parser;
-};
-
-static const struct Parser parsers[] = { {"integer", empathy_plist_parse_integer},
- {"real", empathy_plist_parse_real},
- {"string", empathy_plist_parse_string},
- {"true", empathy_plist_parse_boolean},
- {"false", empathy_plist_parse_boolean},
- {"data", empathy_plist_parse_data},
- {"dict", empathy_plist_parse_dict},
- {NULL, NULL} };
-
-static ParseCallback
-empathy_plist_get_parser_for_type (const xmlChar *type)
-{
- guint i = 0;
-
- while (parsers[i].type_name) {
- if (xmlStrcmp (type, (xmlChar *) parsers[i].type_name) == 0) {
- if (parsers[i].parser) {
- return parsers[i].parser;
- }
- }
- i++;
- }
- return NULL;
-}
-
-static GValue *
-empathy_plist_parse_node (xmlNode *a_node)
-{
- ParseCallback parser;
-
- g_return_val_if_fail (a_node != NULL, NULL);
- parser = empathy_plist_get_parser_for_type (a_node->name);
- if (parser) {
- return parser (a_node);
- } else {
- return NULL;
- }
-}
-
-static GValue *
-empathy_plist_parse (xmlNode * a_node)
-{
- xmlNode *cur_node;
-
- if (!a_node) {
- return NULL;
- }
- if (xmlStrcmp (a_node->name, (xmlChar *) "plist") != 0) {
- return NULL;
- }
- cur_node = a_node->xmlChildrenNode;
- while (cur_node && (xmlIsBlankNode (cur_node))) {
- cur_node = cur_node->next;
- }
- if (cur_node) {
- return empathy_plist_parse_node (cur_node);
- }
-
- return NULL;
-}
-
-/**
- * empathy_plist_parse_from_file:
- * @filename: file containing XML plist data to parse
- *
- * Parses the XML plist file. If an error occurs during the parsing,
- * empathy_plist_parse_from_file() will return NULL.
- *
- * Returns: NULL on error, a newly allocated
- * #GValue otherwise. Free it using tp_g_value_slice_free()
- */
-GValue *
-empathy_plist_parse_from_file (const char *filename)
-{
- xmlDoc *doc = NULL;
- xmlNode *root_element = NULL;
- GValue *parsed_doc;
-
- doc = xmlReadFile (filename, NULL, 0);
-
- if (!doc) {
- return NULL;
- }
-
- root_element = xmlDocGetRootElement (doc);
-
- parsed_doc = empathy_plist_parse (root_element);
-
- xmlFreeDoc (doc);
-
- return parsed_doc;
-}
-
-/**
- * empathy_plist_parse_from_memory:
- * @data: memory location containing XML plist data to parse
- * @len: length in bytes of the string to parse
- *
- * Parses the XML plist file stored in @data which length is @len
- * bytes. If an error occurs during the parsing,
- * empathy_plist_parse_from_memory() will return NULL.
- *
- * Returns: NULL on error, a newly allocated
- * #GValue otherwise. Free it using tp_g_value_slice_free()
- */
-GValue *
-empathy_plist_parse_from_memory (const char *data, gsize len)
-{
- xmlDoc *doc = NULL;
- xmlNode *root_element = NULL;
- GValue *parsed_doc;
-
- doc = xmlReadMemory (data, len, "noname.xml", NULL, 0);
-
- if (doc == NULL) {
- return NULL;
- }
-
- root_element = xmlDocGetRootElement (doc);
-
- parsed_doc = empathy_plist_parse (root_element);
-
- xmlFreeDoc (doc);
-
- return parsed_doc;
-}
-
diff --git a/libempathy-gtk/empathy-plist.h b/libempathy-gtk/empathy-plist.h
deleted file mode 100644
index 216896b4..00000000
--- a/libempathy-gtk/empathy-plist.h
+++ /dev/null
@@ -1,33 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * Copyright (C) 2008 Christophe Fergeau <teuf@gnome.org>
- * Based on itdb_plist parser from the gtkpod project.
- *
- * The code contained in this file is free software; you can redistribute
- * it and/or modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either version
- * 2.1 of the License, or (at your option) any later version.
- *
- * This file is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this code; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-#ifndef __EMPATHY_PLIST_H__
-#define __EMPATHY_PLIST_H__
-
-#include <glib-object.h>
-
-G_BEGIN_DECLS
-
-GValue * empathy_plist_parse_from_file (const char *filename);
-GValue * empathy_plist_parse_from_memory (const char *data, gsize len);
-
-G_END_DECLS
-
-#endif
diff --git a/libempathy-gtk/empathy-presence-chooser.c b/libempathy-gtk/empathy-presence-chooser.c
deleted file mode 100644
index 6ff113d2..00000000
--- a/libempathy-gtk/empathy-presence-chooser.c
+++ /dev/null
@@ -1,1175 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * Copyright (C) 2005-2007 Imendio AB
- * Copyright (C) 2009 Collabora Ltd.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301 USA
- *
- * Authors: Richard Hult <richard@imendio.com>
- * Martyn Russell <martyn@imendio.com>
- * Xavier Claessens <xclaesse@gmail.com>
- * Danielle Madeley <danielle.madeley@collabora.co.uk>
- */
-
-#include "config.h"
-#include "empathy-presence-chooser.h"
-
-#include <glib/gi18n-lib.h>
-#include <tp-account-widgets/tpaw-utils.h>
-
-#include "empathy-presence-manager.h"
-#include "empathy-status-presets.h"
-#include "empathy-utils.h"
-
-#define DEBUG_FLAG EMPATHY_DEBUG_OTHER
-#include "empathy-debug.h"
-
-#include "empathy-ui-utils.h"
-#include "empathy-presence-chooser.h"
-#include "empathy-status-preset-dialog.h"
-
-/**
- * SECTION:empathy-presence-chooser
- * @title:EmpathyPresenceChooser
- * @short_description: A widget used to change presence
- * @include: libempathy-gtk/empathy-presence-chooser.h
- *
- * #EmpathyPresenceChooser is a widget which extends #GtkComboBoxEntry
- * to change presence.
- */
-
-/**
- * EmpathyAccountChooser:
- * @parent: parent object
- *
- * Widget which extends #GtkComboBoxEntry to change presence.
- */
-
-#define GET_PRIV(obj) EMPATHY_GET_PRIV (obj, EmpathyPresenceChooser)
-
-/* For custom message dialog */
-enum {
- COL_ICON,
- COL_LABEL,
- COL_PRESENCE,
- COL_COUNT
-};
-
-/* For combobox's model */
-enum {
- COL_STATUS_TEXT,
- COL_STATE_ICON_NAME,
- COL_STATE,
- COL_DISPLAY_MARKUP,
- COL_STATUS_CUSTOMISABLE,
- COL_TYPE,
- N_COLUMNS
-};
-
-typedef enum {
- ENTRY_TYPE_BUILTIN,
- ENTRY_TYPE_SAVED,
- ENTRY_TYPE_CUSTOM,
- ENTRY_TYPE_SEPARATOR,
- ENTRY_TYPE_EDIT_CUSTOM,
-} PresenceChooserEntryType;
-
-typedef struct {
- EmpathyPresenceManager *presence_mgr;
- GNetworkMonitor *connectivity;
-
- gboolean editing_status;
- int block_set_editing;
- int block_changed;
- guint focus_out_idle_source;
-
- TpConnectionPresenceType state;
- PresenceChooserEntryType previous_type;
-
- TpAccountManager *account_manager;
-} EmpathyPresenceChooserPriv;
-
-/* States to be listed in the menu.
- * Each state has a boolean telling if it can have custom message */
-static struct { TpConnectionPresenceType state;
- gboolean customisable;
-} states[] = { { TP_CONNECTION_PRESENCE_TYPE_AVAILABLE, TRUE } ,
- { TP_CONNECTION_PRESENCE_TYPE_BUSY, TRUE },
- { TP_CONNECTION_PRESENCE_TYPE_AWAY, TRUE },
- { TP_CONNECTION_PRESENCE_TYPE_HIDDEN, FALSE },
- { TP_CONNECTION_PRESENCE_TYPE_OFFLINE, FALSE},
- { TP_CONNECTION_PRESENCE_TYPE_UNSET, },
- };
-
-static void presence_chooser_constructed (GObject *object);
-static void presence_chooser_finalize (GObject *object);
-static void presence_chooser_presence_changed_cb (EmpathyPresenceChooser *chooser);
-static void presence_chooser_menu_add_item (GtkWidget *menu,
- const gchar *str,
- TpConnectionPresenceType state);
-static void presence_chooser_noncustom_activate_cb (GtkWidget *item,
- gpointer user_data);
-static void presence_chooser_set_state (TpConnectionPresenceType state,
- const gchar *status);
-static void presence_chooser_custom_activate_cb (GtkWidget *item,
- gpointer user_data);
-
-G_DEFINE_TYPE (EmpathyPresenceChooser, empathy_presence_chooser, GTK_TYPE_COMBO_BOX);
-
-static void
-empathy_presence_chooser_class_init (EmpathyPresenceChooserClass *klass)
-{
- GObjectClass *object_class = G_OBJECT_CLASS (klass);
-
- object_class->constructed = presence_chooser_constructed;
- object_class->finalize = presence_chooser_finalize;
-
- g_type_class_add_private (object_class, sizeof (EmpathyPresenceChooserPriv));
-}
-
-static void
-presence_chooser_create_model (EmpathyPresenceChooser *self)
-{
- GtkListStore *store;
- char *custom_message;
- int i;
-
- store = gtk_list_store_new (N_COLUMNS,
- G_TYPE_STRING, /* COL_STATUS_TEXT */
- G_TYPE_STRING, /* COL_STATE_ICON_NAME */
- G_TYPE_UINT, /* COL_STATE */
- G_TYPE_STRING, /* COL_DISPLAY_MARKUP */
- G_TYPE_BOOLEAN, /* COL_STATUS_CUSTOMISABLE */
- G_TYPE_INT); /* COL_TYPE */
-
- custom_message = g_strdup_printf ("<i>%s</i>", _("Custom Message…"));
-
- for (i = 0; states[i].state != TP_CONNECTION_PRESENCE_TYPE_UNSET; i++) {
- GList *list, *l;
- const char *status, *icon_name;
-
- status = empathy_presence_get_default_message (states[i].state);
- icon_name = empathy_icon_name_for_presence (states[i].state);
-
- gtk_list_store_insert_with_values (store, NULL, -1,
- COL_STATUS_TEXT, status,
- COL_STATE_ICON_NAME, icon_name,
- COL_STATE, states[i].state,
- COL_DISPLAY_MARKUP, status,
- COL_STATUS_CUSTOMISABLE, states[i].customisable,
- COL_TYPE, ENTRY_TYPE_BUILTIN,
- -1);
-
- if (states[i].customisable) {
- /* Set custom messages if wanted */
- list = empathy_status_presets_get (states[i].state, -1);
- list = g_list_sort (list, (GCompareFunc) g_utf8_collate);
- for (l = list; l; l = l->next) {
- gtk_list_store_insert_with_values (store,
- NULL, -1,
- COL_STATUS_TEXT, l->data,
- COL_STATE_ICON_NAME, icon_name,
- COL_STATE, states[i].state,
- COL_DISPLAY_MARKUP, l->data,
- COL_STATUS_CUSTOMISABLE, TRUE,
- COL_TYPE, ENTRY_TYPE_SAVED,
- -1);
- }
- g_list_free (list);
-
- gtk_list_store_insert_with_values (store, NULL, -1,
- COL_STATUS_TEXT, _("Custom Message…"),
- COL_STATE_ICON_NAME, icon_name,
- COL_STATE, states[i].state,
- COL_DISPLAY_MARKUP, custom_message,
- COL_STATUS_CUSTOMISABLE, TRUE,
- COL_TYPE, ENTRY_TYPE_CUSTOM,
- -1);
- }
-
- }
-
- /* add a separator */
- gtk_list_store_insert_with_values (store, NULL, -1,
- COL_TYPE, ENTRY_TYPE_SEPARATOR,
- -1);
-
- gtk_list_store_insert_with_values (store, NULL, -1,
- COL_STATUS_TEXT, _("Edit Custom Messages…"),
- COL_STATE_ICON_NAME, GTK_STOCK_EDIT,
- COL_DISPLAY_MARKUP, _("Edit Custom Messages…"),
- COL_TYPE, ENTRY_TYPE_EDIT_CUSTOM,
- -1);
-
- g_free (custom_message);
-
- gtk_combo_box_set_model (GTK_COMBO_BOX (self), GTK_TREE_MODEL (store));
- g_object_unref (store);
-}
-
-static void
-presence_chooser_popup_shown_cb (GObject *self,
- GParamSpec *pspec,
- gpointer user_data)
-{
- EmpathyPresenceChooserPriv *priv = GET_PRIV (self);
- gboolean shown;
-
- g_object_get (self, "popup-shown", &shown, NULL);
- if (!shown) {
- return;
- }
-
- /* see presence_chooser_entry_focus_out_cb () for what this does */
- if (priv->focus_out_idle_source != 0) {
- g_source_remove (priv->focus_out_idle_source);
- priv->focus_out_idle_source = 0;
- }
-
- presence_chooser_create_model (EMPATHY_PRESENCE_CHOOSER (self));
-}
-
-static PresenceChooserEntryType
-presence_chooser_get_entry_type (EmpathyPresenceChooser *self)
-{
- GtkTreeIter iter;
- PresenceChooserEntryType type = -1;
-
- if (!gtk_combo_box_get_active_iter (GTK_COMBO_BOX (self), &iter)) {
- type = ENTRY_TYPE_CUSTOM;
- }
- else {
- GtkTreeModel *model;
-
- model = gtk_combo_box_get_model (GTK_COMBO_BOX (self));
- gtk_tree_model_get (model, &iter,
- COL_TYPE, &type,
- -1);
- }
-
- return type;
-}
-
-static TpConnectionPresenceType
-get_state_and_status (EmpathyPresenceChooser *self,
- gchar **status)
-{
- EmpathyPresenceChooserPriv *priv = GET_PRIV (self);
- TpConnectionPresenceType state;
- gchar *tmp;
-
- state = tp_account_manager_get_most_available_presence (
- priv->account_manager, NULL, &tmp);
- if (TPAW_STR_EMPTY (tmp)) {
- /* no message, use the default message */
- g_free (tmp);
- tmp = g_strdup (empathy_presence_get_default_message (state));
- }
-
- if (status != NULL)
- *status = tmp;
- else
- g_free (tmp);
-
- return state;
-}
-
-static gboolean
-presence_chooser_is_preset (EmpathyPresenceChooser *self)
-{
- TpConnectionPresenceType state;
- char *status;
- GList *presets, *l;
- gboolean match = FALSE;
-
- state = get_state_and_status (self, &status);
-
- presets = empathy_status_presets_get (state, -1);
- for (l = presets; l; l = l->next) {
- char *preset = (char *) l->data;
-
- if (!tp_strdiff (status, preset)) {
- match = TRUE;
- break;
- }
- }
-
- g_list_free (presets);
-
- DEBUG ("is_preset(%i, %s) = %i", state, status, match);
-
- g_free (status);
- return match;
-}
-
-static void
-presence_chooser_set_favorite_icon (EmpathyPresenceChooser *self)
-{
- GtkWidget *entry;
- PresenceChooserEntryType type;
-
- entry = gtk_bin_get_child (GTK_BIN (self));
- type = presence_chooser_get_entry_type (self);
-
- if (type == ENTRY_TYPE_CUSTOM || type == ENTRY_TYPE_SAVED) {
- if (presence_chooser_is_preset (self)) {
- /* saved entries can be removed from the list */
- gtk_entry_set_icon_from_icon_name (GTK_ENTRY (entry),
- GTK_ENTRY_ICON_SECONDARY,
- "starred-symbolic");
- gtk_entry_set_icon_tooltip_text (GTK_ENTRY (entry),
- GTK_ENTRY_ICON_SECONDARY,
- _("Click to remove this status as a favorite"));
- }
- else {
- /* custom entries can be favorited */
- gtk_entry_set_icon_from_icon_name (GTK_ENTRY (entry),
- GTK_ENTRY_ICON_SECONDARY,
- "non-starred-symbolic");
- gtk_entry_set_icon_tooltip_text (GTK_ENTRY (entry),
- GTK_ENTRY_ICON_SECONDARY,
- _("Click to make this status a favorite"));
- }
- }
- else {
- /* built-in entries cannot be favorited */
- gtk_entry_set_icon_from_stock (GTK_ENTRY (entry),
- GTK_ENTRY_ICON_SECONDARY,
- NULL);
- gtk_entry_set_icon_tooltip_text (GTK_ENTRY (entry),
- GTK_ENTRY_ICON_SECONDARY,
- NULL);
- }
-}
-
-static void
-presence_chooser_set_status_editing (EmpathyPresenceChooser *self,
- gboolean editing)
-{
- EmpathyPresenceChooserPriv *priv = GET_PRIV (self);
- GtkWidget *entry;
-
- if (priv->block_set_editing) {
- return;
- }
-
- entry = gtk_bin_get_child (GTK_BIN (self));
- if (editing) {
- gchar *tooltip_text;
- gchar *status;
-
- priv->editing_status = TRUE;
-
- get_state_and_status (self, &status);
- /* Translators: %s is a status message like 'At the pub' for example */
- tooltip_text = g_strdup_printf (_("<b>Current message: %s</b>\n"
- "<small><i>Press Enter to set the new message or Esc to cancel.</i></small>"),
- status);
- gtk_widget_set_tooltip_markup (entry, tooltip_text);
- gtk_entry_set_icon_from_stock (GTK_ENTRY (entry),
- GTK_ENTRY_ICON_SECONDARY,
- GTK_STOCK_OK);
- gtk_entry_set_icon_tooltip_text (GTK_ENTRY (entry),
- GTK_ENTRY_ICON_SECONDARY,
- _("Set status"));
- gtk_entry_set_icon_sensitive (GTK_ENTRY (entry),
- GTK_ENTRY_ICON_PRIMARY,
- FALSE);
- g_free (status);
- g_free (tooltip_text);
- } else {
- GtkWidget *window;
-
- presence_chooser_set_favorite_icon (self);
- gtk_entry_set_icon_sensitive (GTK_ENTRY (entry),
- GTK_ENTRY_ICON_PRIMARY,
- TRUE);
-
- /* attempt to get the toplevel for this widget */
- window = gtk_widget_get_toplevel (GTK_WIDGET (self));
- if (gtk_widget_is_toplevel (window) && GTK_IS_WINDOW (window)) {
- /* unset the focus */
- gtk_window_set_focus (GTK_WINDOW (window), NULL);
- }
-
- /* see presence_chooser_entry_focus_out_cb ()
- * for what this does */
- if (priv->focus_out_idle_source != 0) {
- g_source_remove (priv->focus_out_idle_source);
- priv->focus_out_idle_source = 0;
- }
-
- gtk_editable_set_position (GTK_EDITABLE (entry), 0);
-
- priv->editing_status = FALSE;
- }
-}
-
-static void
-mc_set_custom_state (EmpathyPresenceChooser *self)
-{
- EmpathyPresenceChooserPriv *priv = GET_PRIV (self);
- GtkWidget *entry;
- const char *status;
-
- entry = gtk_bin_get_child (GTK_BIN (self));
- /* update the status with MC */
- status = gtk_entry_get_text (GTK_ENTRY (entry));
-
- DEBUG ("Sending state to MC-> %d (%s)", priv->state, status);
-
- empathy_presence_manager_set_presence (priv->presence_mgr, priv->state, status);
-}
-
-static void
-ui_set_custom_state (EmpathyPresenceChooser *self,
- TpConnectionPresenceType state,
- const char *status)
-{
- EmpathyPresenceChooserPriv *priv = GET_PRIV (self);
- GtkWidget *entry;
- const char *icon_name;
- const gchar *status_tooltip;
-
- entry = gtk_bin_get_child (GTK_BIN (self));
-
- priv->block_set_editing++;
- priv->block_changed++;
-
- icon_name = empathy_icon_name_for_presence (state);
- gtk_entry_set_icon_from_icon_name (GTK_ENTRY (entry),
- GTK_ENTRY_ICON_PRIMARY,
- icon_name);
- status_tooltip = status == NULL ? "" : status;
- gtk_entry_set_text (GTK_ENTRY (entry), status_tooltip);
- gtk_widget_set_tooltip_text (GTK_WIDGET (entry), status_tooltip);
- presence_chooser_set_favorite_icon (self);
-
- priv->block_changed--;
- priv->block_set_editing--;
-}
-
-static void
-presence_chooser_reset_status (EmpathyPresenceChooser *self)
-{
- /* recover the status that was unset */
- presence_chooser_set_status_editing (self, FALSE);
- presence_chooser_presence_changed_cb (self);
-}
-
-static void
-presence_chooser_entry_icon_release_cb (EmpathyPresenceChooser *self,
- GtkEntryIconPosition icon_pos,
- GdkEvent *event,
- GtkEntry *entry)
-{
- EmpathyPresenceChooserPriv *priv = GET_PRIV (self);
-
- if (priv->editing_status) {
- presence_chooser_set_status_editing (self, FALSE);
- mc_set_custom_state (self);
- }
- else {
- TpConnectionPresenceType state;
- char *status;
-
- state = get_state_and_status (self, &status);
-
- if (!empathy_status_presets_is_valid (state)) {
- /* It doesn't make sense to add such presence as favorite */
- g_free (status);
- return;
- }
-
- if (presence_chooser_is_preset (self)) {
- /* remove the entry */
- DEBUG ("REMOVING PRESET (%i, %s)", state, status);
- empathy_status_presets_remove (state, status);
- }
- else {
- /* save the entry */
- DEBUG ("SAVING PRESET (%i, %s)", state, status);
- empathy_status_presets_set_last (state, status);
- }
-
- /* update the icon */
- presence_chooser_set_favorite_icon (self);
- g_free (status);
- }
-}
-
-static void
-presence_chooser_entry_activate_cb (EmpathyPresenceChooser *self,
- GtkEntry *entry)
-{
- presence_chooser_set_status_editing (self, FALSE);
- mc_set_custom_state (self);
-}
-
-static gboolean
-presence_chooser_entry_key_press_event_cb (EmpathyPresenceChooser *self,
- GdkEventKey *event,
- GtkWidget *entry)
-{
- EmpathyPresenceChooserPriv *priv = GET_PRIV (self);
-
- if (priv->editing_status && event->keyval == GDK_KEY_Escape) {
- /* the user pressed Escape, undo the editing */
- presence_chooser_reset_status (self);
- return TRUE;
- }
- else if (event->keyval == GDK_KEY_Up || event->keyval == GDK_KEY_Down) {
- /* ignore */
- return TRUE;
- }
-
- return FALSE; /* send this event elsewhere */
-}
-
-static gboolean
-presence_chooser_entry_button_press_event_cb (EmpathyPresenceChooser *self,
- GdkEventButton *event,
- GtkWidget *entry)
-{
- EmpathyPresenceChooserPriv *priv = GET_PRIV (self);
-
- if (!priv->editing_status &&
- event->button == 1 &&
- !gtk_widget_has_focus (entry)) {
- gtk_widget_grab_focus (entry);
- gtk_editable_select_region (GTK_EDITABLE (entry), 0, -1);
-
- return TRUE;
- }
-
- return FALSE;
-}
-
-static void
-presence_chooser_entry_changed_cb (EmpathyPresenceChooser *self,
- GtkEntry *entry)
-{
- EmpathyPresenceChooserPriv *priv = GET_PRIV (self);
-
- if (priv->block_changed){
- return;
- }
-
- /* the combo is being edited to a custom entry */
- if (!priv->editing_status) {
- presence_chooser_set_status_editing (self, TRUE);
- }
-}
-
-static void
-presence_chooser_changed_cb (GtkComboBox *self, gpointer user_data)
-{
- EmpathyPresenceChooserPriv *priv = GET_PRIV (self);
- GtkTreeIter iter;
- char *icon_name;
- TpConnectionPresenceType new_state;
- gboolean customisable = TRUE;
- PresenceChooserEntryType type = -1;
- GtkWidget *entry;
- GtkTreeModel *model;
-
- if (priv->block_changed ||
- !gtk_combo_box_get_active_iter (self, &iter)) {
- return;
- }
-
- model = gtk_combo_box_get_model (self);
- gtk_tree_model_get (model, &iter,
- COL_STATE_ICON_NAME, &icon_name,
- COL_STATE, &new_state,
- COL_STATUS_CUSTOMISABLE, &customisable,
- COL_TYPE, &type,
- -1);
-
- entry = gtk_bin_get_child (GTK_BIN (self));
-
- /* some types of status aren't editable, set the editability of the
- * entry appropriately. Unless we're just about to reset it anyway,
- * in which case, don't fiddle with it */
- if (type != ENTRY_TYPE_EDIT_CUSTOM) {
- gtk_editable_set_editable (GTK_EDITABLE (entry), customisable);
- priv->state = new_state;
- }
-
- if (type == ENTRY_TYPE_EDIT_CUSTOM) {
- GtkWidget *window, *dialog;
-
- presence_chooser_reset_status (EMPATHY_PRESENCE_CHOOSER (self));
-
- /* attempt to get the toplevel for this widget */
- window = gtk_widget_get_toplevel (GTK_WIDGET (self));
- if (!gtk_widget_is_toplevel (window) || !GTK_IS_WINDOW (window)) {
- window = NULL;
- }
-
- dialog = empathy_status_preset_dialog_new (GTK_WINDOW (window));
- gtk_dialog_run (GTK_DIALOG (dialog));
- gtk_widget_destroy (dialog);
- }
- else if (type == ENTRY_TYPE_CUSTOM) {
- gtk_entry_set_icon_from_icon_name (GTK_ENTRY (entry),
- GTK_ENTRY_ICON_PRIMARY,
- icon_name);
-
- /* preseed the status */
- if (priv->previous_type == ENTRY_TYPE_BUILTIN) {
- /* if their previous entry was a builtin, don't
- * preseed */
- gtk_entry_set_text (GTK_ENTRY (entry), "");
- } else {
- /* else preseed the text of their currently entered
- * status message */
- char *status;
-
- get_state_and_status (EMPATHY_PRESENCE_CHOOSER (self),
- &status);
- gtk_entry_set_text (GTK_ENTRY (entry), status);
- g_free (status);
- }
-
- /* grab the focus */
- gtk_widget_grab_focus (entry);
- } else {
- char *status;
-
- /* just in case we were setting a new status when
- * things were changed */
- presence_chooser_set_status_editing (
- EMPATHY_PRESENCE_CHOOSER (self),
- FALSE);
- gtk_entry_set_icon_from_icon_name (GTK_ENTRY (entry),
- GTK_ENTRY_ICON_PRIMARY,
- icon_name);
-
- gtk_tree_model_get (model, &iter,
- COL_STATUS_TEXT, &status,
- -1);
-
- empathy_presence_manager_set_presence (priv->presence_mgr, priv->state, status);
-
- g_free (status);
- }
-
- if (type != ENTRY_TYPE_EDIT_CUSTOM) {
- priv->previous_type = type;
- }
- g_free (icon_name);
-}
-
-static gboolean
-combo_row_separator_func (GtkTreeModel *model,
- GtkTreeIter *iter,
- gpointer data)
-{
- PresenceChooserEntryType type;
-
- gtk_tree_model_get (model, iter,
- COL_TYPE, &type,
- -1);
-
- return (type == ENTRY_TYPE_SEPARATOR);
-}
-
-static gboolean
-presence_chooser_entry_focus_out_idle_cb (gpointer user_data)
-{
- EmpathyPresenceChooser *chooser;
- GtkWidget *entry;
-
- DEBUG ("Autocommiting status message");
-
- chooser = EMPATHY_PRESENCE_CHOOSER (user_data);
- entry = gtk_bin_get_child (GTK_BIN (chooser));
-
- presence_chooser_entry_activate_cb (chooser, GTK_ENTRY (entry));
-
- return FALSE;
-}
-
-static gboolean
-presence_chooser_entry_focus_out_cb (EmpathyPresenceChooser *chooser,
- GdkEventFocus *event,
- GtkEntry *entry)
-{
- EmpathyPresenceChooserPriv *priv = GET_PRIV (chooser);
-
- if (priv->editing_status) {
- /* this seems a bit evil and maybe it will be fragile,
- * someone should think of a better way to do it.
- *
- * The entry has focused out, but we don't know where the focus
- * has gone. If it goes to the combo box, we don't want to
- * do anything. If it's gone anywhere else, we want to commit
- * the result.
- *
- * Thus we install this idle handler and store its source.
- * If the source is scheduled when the popup handler runs,
- * it will remove it, else the callback will commit the result.
- */
- priv->focus_out_idle_source = g_idle_add (
- presence_chooser_entry_focus_out_idle_cb,
- chooser);
- }
-
- gtk_editable_set_position (GTK_EDITABLE (entry), 0);
-
- return FALSE;
-}
-
-static void
-update_sensitivity_am_prepared_cb (GObject *source_object,
- GAsyncResult *result,
- gpointer user_data)
-{
- TpAccountManager *manager = TP_ACCOUNT_MANAGER (source_object);
- EmpathyPresenceChooser *chooser = user_data;
- EmpathyPresenceChooserPriv *priv = GET_PRIV (chooser);
- gboolean sensitive = FALSE;
- GList *accounts, *l;
- GError *error = NULL;
-
- if (!tp_proxy_prepare_finish (manager, result, &error)) {
- DEBUG ("Failed to prepare account manager: %s", error->message);
- g_error_free (error);
- return;
- }
-
- accounts = tp_account_manager_dup_valid_accounts (manager);
-
- for (l = accounts ; l != NULL ; l = g_list_next (l)) {
- TpAccount *a = TP_ACCOUNT (l->data);
-
- if (tp_account_is_enabled (a)) {
- sensitive = TRUE;
- break;
- }
- }
-
- g_list_free_full (accounts, g_object_unref);
-
- if (!g_network_monitor_get_network_available (priv->connectivity))
- sensitive = FALSE;
-
- gtk_widget_set_sensitive (GTK_WIDGET (chooser), sensitive);
-
- presence_chooser_presence_changed_cb (chooser);
-}
-
-static void
-presence_chooser_update_sensitivity (EmpathyPresenceChooser *chooser)
-{
- EmpathyPresenceChooserPriv *priv = GET_PRIV (chooser);
-
- tp_proxy_prepare_async (priv->account_manager, NULL,
- update_sensitivity_am_prepared_cb,
- chooser);
-}
-
-static void
-presence_chooser_account_manager_account_validity_changed_cb (
- TpAccountManager *manager,
- TpAccount *account,
- gboolean valid,
- EmpathyPresenceChooser *chooser)
-{
- presence_chooser_update_sensitivity (chooser);
-}
-
-static void
-presence_chooser_account_manager_account_changed_cb (
- TpAccountManager *manager,
- TpAccount *account,
- EmpathyPresenceChooser *chooser)
-{
- presence_chooser_update_sensitivity (chooser);
-}
-
-static void
-presence_chooser_network_change (GNetworkMonitor *connectivity,
- gboolean new_online,
- EmpathyPresenceChooser *chooser)
-{
- presence_chooser_update_sensitivity (chooser);
-}
-
-static void
-empathy_presence_chooser_init (EmpathyPresenceChooser *chooser)
-{
- EmpathyPresenceChooserPriv *priv = G_TYPE_INSTANCE_GET_PRIVATE (chooser,
- EMPATHY_TYPE_PRESENCE_CHOOSER, EmpathyPresenceChooserPriv);
-
- chooser->priv = priv;
-}
-
-static void
-presence_chooser_constructed (GObject *object)
-{
- EmpathyPresenceChooser *chooser = EMPATHY_PRESENCE_CHOOSER (object);
- EmpathyPresenceChooserPriv *priv = chooser->priv;
- GtkWidget *entry;
- GtkCellRenderer *renderer;
- const gchar *status_tooltip;
-
- presence_chooser_create_model (chooser);
-
- gtk_combo_box_set_entry_text_column (GTK_COMBO_BOX (chooser),
- COL_STATUS_TEXT);
- gtk_combo_box_set_row_separator_func (GTK_COMBO_BOX (chooser),
- combo_row_separator_func,
- NULL, NULL);
-
- entry = gtk_bin_get_child (GTK_BIN (chooser));
- gtk_entry_set_icon_activatable (GTK_ENTRY (entry),
- GTK_ENTRY_ICON_PRIMARY,
- FALSE);
-
- g_signal_connect_swapped (entry, "icon-release",
- G_CALLBACK (presence_chooser_entry_icon_release_cb),
- chooser);
- g_signal_connect_swapped (entry, "activate",
- G_CALLBACK (presence_chooser_entry_activate_cb),
- chooser);
- g_signal_connect_swapped (entry, "key-press-event",
- G_CALLBACK (presence_chooser_entry_key_press_event_cb),
- chooser);
- g_signal_connect_swapped (entry, "button-press-event",
- G_CALLBACK (presence_chooser_entry_button_press_event_cb),
- chooser);
-
- gtk_cell_layout_clear (GTK_CELL_LAYOUT (chooser));
-
- renderer = gtk_cell_renderer_pixbuf_new ();
- gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (chooser), renderer, FALSE);
- gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (chooser), renderer,
- "icon-name", COL_STATE_ICON_NAME,
- NULL);
- g_object_set (renderer, "stock-size", GTK_ICON_SIZE_MENU, NULL);
-
- renderer = gtk_cell_renderer_text_new ();
- gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (chooser), renderer, TRUE);
- gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (chooser), renderer,
- "markup", COL_DISPLAY_MARKUP,
- NULL);
- g_object_set (renderer, "ellipsize", PANGO_ELLIPSIZE_END, NULL);
-
- g_signal_connect (chooser, "notify::popup-shown",
- G_CALLBACK (presence_chooser_popup_shown_cb), NULL);
- g_signal_connect (chooser, "changed",
- G_CALLBACK (presence_chooser_changed_cb), NULL);
- g_signal_connect_swapped (entry, "changed",
- G_CALLBACK (presence_chooser_entry_changed_cb),
- chooser);
- g_signal_connect_swapped (entry, "focus-out-event",
- G_CALLBACK (presence_chooser_entry_focus_out_cb),
- chooser);
-
- priv->presence_mgr = empathy_presence_manager_dup_singleton ();
-
- priv->account_manager = tp_account_manager_dup ();
- g_signal_connect_swapped (priv->account_manager,
- "most-available-presence-changed",
- G_CALLBACK (presence_chooser_presence_changed_cb),
- chooser);
-
- tp_g_signal_connect_object (priv->account_manager, "account-validity-changed",
- G_CALLBACK (presence_chooser_account_manager_account_validity_changed_cb),
- chooser, 0);
- tp_g_signal_connect_object (priv->account_manager, "account-removed",
- G_CALLBACK (presence_chooser_account_manager_account_changed_cb),
- chooser, 0);
- tp_g_signal_connect_object (priv->account_manager, "account-enabled",
- G_CALLBACK (presence_chooser_account_manager_account_changed_cb),
- chooser, 0);
- tp_g_signal_connect_object (priv->account_manager, "account-disabled",
- G_CALLBACK (presence_chooser_account_manager_account_changed_cb),
- chooser, 0);
-
- status_tooltip = gtk_entry_get_text (GTK_ENTRY (entry));
- gtk_widget_set_tooltip_text (GTK_WIDGET (chooser), status_tooltip);
-
- priv->connectivity = g_network_monitor_get_default ();
- g_object_ref (priv->connectivity);
-
- tp_g_signal_connect_object (priv->connectivity,
- "network-changed",
- G_CALLBACK (presence_chooser_network_change),
- chooser, 0);
-
- presence_chooser_update_sensitivity (chooser);
-}
-
-static void
-presence_chooser_finalize (GObject *object)
-{
- EmpathyPresenceChooserPriv *priv;
-
- priv = GET_PRIV (object);
-
- if (priv->focus_out_idle_source) {
- g_source_remove (priv->focus_out_idle_source);
- }
-
- if (priv->account_manager != NULL)
- g_object_unref (priv->account_manager);
-
- g_signal_handlers_disconnect_by_func (priv->presence_mgr,
- presence_chooser_presence_changed_cb,
- object);
- g_object_unref (priv->presence_mgr);
-
- g_object_unref (priv->connectivity);
-
- G_OBJECT_CLASS (empathy_presence_chooser_parent_class)->finalize (object);
-}
-
-/**
- * empathy_presence_chooser_new:
- *
- * Creates a new #EmpathyPresenceChooser widget.
- *
- * Return value: A new #EmpathyPresenceChooser widget
- */
-GtkWidget *
-empathy_presence_chooser_new (void)
-{
- /* FIXME, why can't this go in init ()? */
- return g_object_new (EMPATHY_TYPE_PRESENCE_CHOOSER,
- "has-entry", TRUE,
- NULL);
-}
-
-static void
-presence_chooser_presence_changed_cb (EmpathyPresenceChooser *chooser)
-{
- EmpathyPresenceChooserPriv *priv;
- TpConnectionPresenceType state;
- gchar *status;
- GtkTreeModel *model;
- GtkTreeIter iter;
- gboolean valid, match_state = FALSE, match = FALSE;
- GtkWidget *entry;
-
- priv = GET_PRIV (chooser);
-
- if (priv->editing_status) {
- return;
- }
-
- state = get_state_and_status (chooser, &status);
- priv->state = state;
-
- /* An unset presence here doesn't make any sense. Force it to appear as
- * offline. */
- if (state == TP_CONNECTION_PRESENCE_TYPE_UNSET) {
- state = TP_CONNECTION_PRESENCE_TYPE_OFFLINE;
- }
-
- /* look through the model and attempt to find a matching state */
- model = gtk_combo_box_get_model (GTK_COMBO_BOX (chooser));
- for (valid = gtk_tree_model_get_iter_first (model, &iter);
- valid;
- valid = gtk_tree_model_iter_next (model, &iter)) {
- int m_type;
- TpConnectionPresenceType m_state;
- char *m_status;
-
- gtk_tree_model_get (model, &iter,
- COL_STATE, &m_state,
- COL_TYPE, &m_type,
- -1);
-
- if (m_type == ENTRY_TYPE_CUSTOM ||
- m_type == ENTRY_TYPE_SEPARATOR ||
- m_type == ENTRY_TYPE_EDIT_CUSTOM) {
- continue;
- }
- else if (!match_state && state == m_state) {
- /* we are now in the section that can contain our
- * match */
- match_state = TRUE;
- }
- else if (match_state && state != m_state) {
- /* we have passed the section that can contain our
- * match */
- break;
- }
-
- gtk_tree_model_get (model, &iter,
- COL_STATUS_TEXT, &m_status,
- -1);
-
- match = !tp_strdiff (status, m_status);
-
- g_free (m_status);
-
- if (match) break;
-
- }
-
- if (match) {
- priv->block_changed++;
- gtk_combo_box_set_active_iter (GTK_COMBO_BOX (chooser), &iter);
- presence_chooser_set_favorite_icon (chooser);
- priv->block_changed--;
- }
- else {
- ui_set_custom_state (chooser, state, status);
- }
-
- entry = gtk_bin_get_child (GTK_BIN (chooser));
- gtk_entry_set_icon_from_icon_name (GTK_ENTRY (entry),
- GTK_ENTRY_ICON_PRIMARY,
- empathy_icon_name_for_presence (state));
- gtk_widget_set_tooltip_text (GTK_WIDGET (entry), status);
-
- entry = gtk_bin_get_child (GTK_BIN (chooser));
- gtk_editable_set_editable (GTK_EDITABLE (entry),
- state != TP_CONNECTION_PRESENCE_TYPE_OFFLINE);
-
- g_free (status);
-}
-
-/**
- * empathy_presence_chooser_create_menu:
- *
- * Creates a new #GtkMenu allowing users to change their presence from a menu.
- *
- * Return value: a new #GtkMenu for changing presence in a menu.
- */
-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; states[i].state != TP_CONNECTION_PRESENCE_TYPE_UNSET; i++) {
- GList *list, *l;
-
- status = empathy_presence_get_default_message (states[i].state);
- presence_chooser_menu_add_item (menu,
- status,
- states[i].state);
-
- if (states[i].customisable) {
- /* Set custom messages if wanted */
- list = empathy_status_presets_get (states[i].state, 5);
- for (l = list; l; l = l->next) {
- presence_chooser_menu_add_item (menu,
- l->data,
- states[i].state);
- }
- 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,
- TpConnectionPresenceType 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_image_menu_item_set_always_show_image (GTK_IMAGE_MENU_ITEM (item), TRUE);
- 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)
-{
- TpConnectionPresenceType 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 (TpConnectionPresenceType state,
- const gchar *status)
-{
- EmpathyPresenceManager *presence_mgr;
-
- presence_mgr = empathy_presence_manager_dup_singleton ();
- empathy_presence_manager_set_presence (presence_mgr, state, status);
- g_object_unref (presence_mgr);
-}
-
-static void
-presence_chooser_custom_activate_cb (GtkWidget *item,
- gpointer user_data)
-{
- GtkWidget *dialog;
-
- dialog = empathy_status_preset_dialog_new (NULL);
- gtk_dialog_run (GTK_DIALOG (dialog));
- gtk_widget_destroy (dialog);
-}
diff --git a/libempathy-gtk/empathy-presence-chooser.h b/libempathy-gtk/empathy-presence-chooser.h
deleted file mode 100644
index d4595ab1..00000000
--- a/libempathy-gtk/empathy-presence-chooser.h
+++ /dev/null
@@ -1,62 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * Copyright (C) 2005-2007 Imendio AB
- * Copyright (C) 2009 Collabora Ltd.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301 USA
- *
- * Authors: Richard Hult <richard@imendio.com>
- * Martyn Russell <martyn@imendio.com>
- * Xavier Claessens <xclaesse@gmail.com>
- * Danielle Madeley <danielle.madeley@collabora.co.uk>
- */
-
-#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 {
- GtkComboBox parent;
-
- /*<private>*/
- gpointer priv;
-};
-
-struct _EmpathyPresenceChooserClass {
- GtkComboBoxClass 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/libempathy-gtk/empathy-protocol-chooser.c b/libempathy-gtk/empathy-protocol-chooser.c
deleted file mode 100644
index 837f8906..00000000
--- a/libempathy-gtk/empathy-protocol-chooser.c
+++ /dev/null
@@ -1,319 +0,0 @@
-/* -*- Mode: C; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2; -*- */
-/*
- * Copyright (C) 2007-2009 Collabora Ltd.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- *
- * Authors: Xavier Claessens <xclaesse@gmail.com>
- * Jonny Lamb <jonny.lamb@collabora.co.uk>
- */
-
-#include "config.h"
-#include "empathy-protocol-chooser.h"
-
-#include <glib/gi18n-lib.h>
-#include <tp-account-widgets/tpaw-connection-managers.h>
-#include <tp-account-widgets/tpaw-pixbuf-utils.h>
-#include <tp-account-widgets/tpaw-utils.h>
-
-#include "empathy-ui-utils.h"
-#include "empathy-utils.h"
-
-#define DEBUG_FLAG EMPATHY_DEBUG_ACCOUNT
-#include "empathy-debug.h"
-
-/**
- * SECTION:empathy-protocol-chooser
- * @title: EmpathyProtocolChooser
- * @short_description: A widget used to choose from a list of protocols
- * @include: libempathy-gtk/empathy-protocol-chooser.h
- *
- * #EmpathyProtocolChooser is a widget which extends #GtkComboBox to provides a
- * chooser of available protocols.
- */
-
-/**
- * EmpathyProtocolChooser:
- * @parent: parent object
- *
- * Widget which extends #GtkComboBox to provide a chooser of available
- * protocols.
- */
-
-#define GET_PRIV(obj) EMPATHY_GET_PRIV (obj, EmpathyProtocolChooser)
-typedef struct
-{
- GtkListStore *store;
-
- gboolean dispose_run;
-
- EmpathyProtocolChooserFilterFunc filter_func;
- gpointer filter_user_data;
-} EmpathyProtocolChooserPriv;
-
-enum
-{
- COL_ICON,
- COL_LABEL,
- COL_PROTOCOL,
- COL_COUNT
-};
-
-G_DEFINE_TYPE (EmpathyProtocolChooser, empathy_protocol_chooser,
- GTK_TYPE_COMBO_BOX);
-
-static void
-protocol_chooser_add_protocol (EmpathyProtocolChooser *chooser,
- TpawProtocol *protocol)
-{
- EmpathyProtocolChooserPriv *priv = GET_PRIV (chooser);
- GdkPixbuf *pixbuf;
-
- pixbuf = tpaw_pixbuf_from_icon_name (tpaw_protocol_get_icon_name (protocol),
- GTK_ICON_SIZE_BUTTON);
-
- gtk_list_store_insert_with_values (priv->store,
- NULL, -1,
- COL_ICON, pixbuf,
- COL_LABEL, tpaw_protocol_get_display_name (protocol),
- COL_PROTOCOL, protocol,
- -1);
-
- g_clear_object (&pixbuf);
-}
-
-static void
-protocol_chooser_get_protocols_cb (GObject *source,
- GAsyncResult *result,
- gpointer user_data)
-{
- EmpathyProtocolChooser *protocol_chooser = user_data;
- GList *protocols = NULL;
- GList *l;
-
- if (!tpaw_protocol_get_all_finish(&protocols, result, NULL))
- return;
-
- for (l = protocols; l != NULL; l = l->next)
- protocol_chooser_add_protocol (protocol_chooser, l->data);
-
- gtk_combo_box_set_active (GTK_COMBO_BOX (protocol_chooser), 0);
-
- g_list_free_full (protocols, g_object_unref);
-}
-
-static void
-protocol_chooser_constructed (GObject *object)
-{
- EmpathyProtocolChooser *protocol_chooser;
- EmpathyProtocolChooserPriv *priv;
- GtkCellRenderer *renderer;
-
- priv = GET_PRIV (object);
- protocol_chooser = EMPATHY_PROTOCOL_CHOOSER (object);
-
- /* set up combo box with new store */
- priv->store = gtk_list_store_new (COL_COUNT,
- GDK_TYPE_PIXBUF, /* Icon */
- G_TYPE_STRING, /* Label */
- G_TYPE_OBJECT); /* protocol */
-
- gtk_combo_box_set_model (GTK_COMBO_BOX (object),
- GTK_TREE_MODEL (priv->store));
-
- renderer = gtk_cell_renderer_pixbuf_new ();
- gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (object), renderer, FALSE);
- gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (object), renderer,
- "pixbuf", COL_ICON,
- NULL);
-
- renderer = gtk_cell_renderer_text_new ();
- gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (object), renderer, TRUE);
- gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (object), renderer,
- "text", COL_LABEL,
- NULL);
-
- tpaw_protocol_get_all_async (protocol_chooser_get_protocols_cb, protocol_chooser);
-
- if (G_OBJECT_CLASS (empathy_protocol_chooser_parent_class)->constructed)
- G_OBJECT_CLASS
- (empathy_protocol_chooser_parent_class)->constructed (object);
-}
-
-static void
-empathy_protocol_chooser_init (EmpathyProtocolChooser *protocol_chooser)
-{
- EmpathyProtocolChooserPriv *priv =
- G_TYPE_INSTANCE_GET_PRIVATE (protocol_chooser,
- EMPATHY_TYPE_PROTOCOL_CHOOSER, EmpathyProtocolChooserPriv);
-
- priv->dispose_run = FALSE;
- protocol_chooser->priv = priv;
-}
-
-static void
-protocol_chooser_dispose (GObject *object)
-{
- EmpathyProtocolChooser *protocol_chooser = EMPATHY_PROTOCOL_CHOOSER (object);
- EmpathyProtocolChooserPriv *priv = GET_PRIV (protocol_chooser);
-
- if (priv->dispose_run)
- return;
-
- priv->dispose_run = TRUE;
-
- if (priv->store)
- {
- g_object_unref (priv->store);
- priv->store = NULL;
- }
-
- (G_OBJECT_CLASS (empathy_protocol_chooser_parent_class)->dispose) (object);
-}
-
-static void
-empathy_protocol_chooser_class_init (EmpathyProtocolChooserClass *klass)
-{
- GObjectClass *object_class = G_OBJECT_CLASS (klass);
-
- object_class->constructed = protocol_chooser_constructed;
- object_class->dispose = protocol_chooser_dispose;
-
- g_type_class_add_private (object_class, sizeof (EmpathyProtocolChooserPriv));
-}
-
-static gboolean
-protocol_chooser_filter_visible_func (GtkTreeModel *model,
- GtkTreeIter *iter,
- gpointer user_data)
-{
- EmpathyProtocolChooser *protocol_chooser = user_data;
- EmpathyProtocolChooserPriv *priv = GET_PRIV (protocol_chooser);
- TpawProtocol *protocol;
- TpProtocol *tp_protocol;
- gboolean visible = FALSE;
-
- gtk_tree_model_get (model, iter,
- COL_PROTOCOL, &protocol,
- -1);
-
- tp_protocol = tp_connection_manager_get_protocol_object (
- tpaw_protocol_get_cm (protocol),
- tpaw_protocol_get_protocol_name (protocol));
-
- if (tp_protocol != NULL)
- {
- visible = priv->filter_func (tpaw_protocol_get_cm (protocol),
- tp_protocol, tpaw_protocol_get_service_name (protocol),
- priv->filter_user_data);
- }
-
- return visible;
-}
-
-/* public methods */
-
-/**
- * empathy_protocol_chooser_dup_selected:
- * @protocol_chooser: an #EmpathyProtocolChooser
- *
- * Returns a pointer to the selected #TpawProtocol in
- * @protocol_chooser.
- *
- * Return value: a pointer to the selected #TpawProtocol
- */
-TpawProtocol *
-empathy_protocol_chooser_dup_selected (
- EmpathyProtocolChooser *protocol_chooser)
-{
- GtkTreeIter iter;
- GtkTreeModel *cur_model;
- TpawProtocol *protocol = NULL;
-
- g_return_val_if_fail (EMPATHY_IS_PROTOCOL_CHOOSER (protocol_chooser), NULL);
-
- /* get the current model from the chooser, as we could either be filtering
- * or not.
- */
- cur_model = gtk_combo_box_get_model (GTK_COMBO_BOX (protocol_chooser));
-
- if (gtk_combo_box_get_active_iter (GTK_COMBO_BOX (protocol_chooser), &iter))
- {
- gtk_tree_model_get (GTK_TREE_MODEL (cur_model), &iter,
- COL_PROTOCOL, &protocol,
- -1);
- }
-
- return protocol;
-}
-
-/**
- * empathy_protocol_chooser_new:
- *
- * Triggers the creation of a new #EmpathyProtocolChooser.
- *
- * Return value: a new #EmpathyProtocolChooser widget
- */
-
-GtkWidget *
-empathy_protocol_chooser_new (void)
-{
- return GTK_WIDGET (g_object_new (EMPATHY_TYPE_PROTOCOL_CHOOSER, NULL));
-}
-
-void
-empathy_protocol_chooser_set_visible (EmpathyProtocolChooser *protocol_chooser,
- EmpathyProtocolChooserFilterFunc func,
- gpointer user_data)
-{
- EmpathyProtocolChooserPriv *priv;
- GtkTreeModel *filter_model;
-
- g_return_if_fail (EMPATHY_IS_PROTOCOL_CHOOSER (protocol_chooser));
-
- priv = GET_PRIV (protocol_chooser);
- priv->filter_func = func;
- priv->filter_user_data = user_data;
-
- filter_model = gtk_tree_model_filter_new (GTK_TREE_MODEL (priv->store),
- NULL);
- gtk_combo_box_set_model (GTK_COMBO_BOX (protocol_chooser), filter_model);
- g_object_unref (filter_model);
-
- gtk_tree_model_filter_set_visible_func (GTK_TREE_MODEL_FILTER
- (filter_model), protocol_chooser_filter_visible_func,
- protocol_chooser, NULL);
-
- gtk_tree_model_filter_refilter (GTK_TREE_MODEL_FILTER (filter_model));
-
- gtk_combo_box_set_active (GTK_COMBO_BOX (protocol_chooser), 0);
-}
-
-TpawAccountSettings *
-empathy_protocol_chooser_create_account_settings (EmpathyProtocolChooser *self)
-{
- TpawProtocol *protocol;
- TpawAccountSettings *settings;
-
- protocol = empathy_protocol_chooser_dup_selected (self);
- if (protocol == NULL)
- return NULL;
-
- settings = tpaw_protocol_create_account_settings (protocol);
-
- tp_clear_object (&protocol);
-
- return settings;
-}
diff --git a/libempathy-gtk/empathy-protocol-chooser.h b/libempathy-gtk/empathy-protocol-chooser.h
deleted file mode 100644
index 7797afc5..00000000
--- a/libempathy-gtk/empathy-protocol-chooser.h
+++ /dev/null
@@ -1,80 +0,0 @@
-/* -*- Mode: C; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2; -*- */
-/*
- * Copyright (C) 2007-2009 Collabora Ltd.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- *
- * Authors: Xavier Claessens <xclaesse@gmail.com>
- * Jonny Lamb <jonny.lamb@collabora.co.uk
- */
-
-#ifndef __EMPATHY_PROTOCOL_CHOOSER_H__
-#define __EMPATHY_PROTOCOL_CHOOSER_H__
-
-#include <gtk/gtk.h>
-#include <telepathy-glib/telepathy-glib.h>
-#include <tp-account-widgets/tpaw-account-settings.h>
-#include <tp-account-widgets/tpaw-protocol.h>
-
-G_BEGIN_DECLS
-
-#define EMPATHY_TYPE_PROTOCOL_CHOOSER (empathy_protocol_chooser_get_type ())
-#define EMPATHY_PROTOCOL_CHOOSER(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), \
- EMPATHY_TYPE_PROTOCOL_CHOOSER, EmpathyProtocolChooser))
-#define EMPATHY_PROTOCOL_CHOOSER_CLASS(k) (G_TYPE_CHECK_CLASS_CAST ((k), \
- EMPATHY_TYPE_PROTOCOL_CHOOSER, EmpathyProtocolChooserClass))
-#define EMPATHY_IS_PROTOCOL_CHOOSER(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), \
- EMPATHY_TYPE_PROTOCOL_CHOOSER))
-#define EMPATHY_IS_PROTOCOL_CHOOSER_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), \
- EMPATHY_TYPE_PROTOCOL_CHOOSER))
-#define EMPATHY_PROTOCOL_CHOOSER_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o),\
- EMPATHY_TYPE_PROTOCOL_CHOOSER, EmpathyProtocolChooserClass))
-
-typedef struct _EmpathyProtocolChooser EmpathyProtocolChooser;
-typedef struct _EmpathyProtocolChooserClass EmpathyProtocolChooserClass;
-
-struct _EmpathyProtocolChooser
-{
- GtkComboBox parent;
-
- /*<private>*/
- gpointer priv;
-};
-
-struct _EmpathyProtocolChooserClass
-{
- GtkComboBoxClass parent_class;
-};
-
-typedef gboolean (*EmpathyProtocolChooserFilterFunc) (TpConnectionManager *cm,
- TpProtocol *protocol,
- const gchar *service,
- gpointer user_data);
-
-GType empathy_protocol_chooser_get_type (void) G_GNUC_CONST;
-GtkWidget * empathy_protocol_chooser_new (void);
-TpawProtocol *empathy_protocol_chooser_dup_selected (
- EmpathyProtocolChooser *protocol_chooser);
-
-void empathy_protocol_chooser_set_visible (
- EmpathyProtocolChooser *protocol_chooser,
- EmpathyProtocolChooserFilterFunc func,
- gpointer user_data);
-
-TpawAccountSettings * empathy_protocol_chooser_create_account_settings (
- EmpathyProtocolChooser *self);
-
-G_END_DECLS
-#endif /* __EMPATHY_PROTOCOL_CHOOSER_H__ */
diff --git a/libempathy-gtk/empathy-roster-contact.c b/libempathy-gtk/empathy-roster-contact.c
deleted file mode 100644
index 328b5124..00000000
--- a/libempathy-gtk/empathy-roster-contact.c
+++ /dev/null
@@ -1,512 +0,0 @@
-#include "config.h"
-#include "empathy-roster-contact.h"
-
-#include <glib/gi18n-lib.h>
-#include <tp-account-widgets/tpaw-images.h>
-#include <tp-account-widgets/tpaw-pixbuf-utils.h>
-
-#include "empathy-ui-utils.h"
-#include "empathy-utils.h"
-
-G_DEFINE_TYPE (EmpathyRosterContact, empathy_roster_contact, GTK_TYPE_ALIGNMENT)
-
-#define AVATAR_SIZE 48
-
-enum
-{
- PROP_INDIVIDIUAL = 1,
- PROP_GROUP,
- PROP_ONLINE,
- PROP_ALIAS,
- N_PROPS
-};
-
-/*
-enum
-{
- LAST_SIGNAL
-};
-
-static guint signals[LAST_SIGNAL];
-*/
-
-struct _EmpathyRosterContactPriv
-{
- FolksIndividual *individual;
- gchar *group;
-
- GtkWidget *avatar;
- GtkWidget *first_line_alig;
- GtkWidget *alias;
- GtkWidget *presence_msg;
- GtkWidget *presence_icon;
- GtkWidget *phone_icon;
-
- /* If not NULL, used instead of the individual's presence icon */
- gchar *event_icon;
-
- gboolean online;
-};
-
-static const gchar *
-get_alias (EmpathyRosterContact *self)
-{
- return folks_alias_details_get_alias (FOLKS_ALIAS_DETAILS (
- self->priv->individual));
-}
-
-static void
-empathy_roster_contact_get_property (GObject *object,
- guint property_id,
- GValue *value,
- GParamSpec *pspec)
-{
- EmpathyRosterContact *self = EMPATHY_ROSTER_CONTACT (object);
-
- switch (property_id)
- {
- case PROP_INDIVIDIUAL:
- g_value_set_object (value, self->priv->individual);
- break;
- case PROP_GROUP:
- g_value_set_string (value, self->priv->group);
- break;
- case PROP_ONLINE:
- g_value_set_boolean (value, self->priv->online);
- break;
- case PROP_ALIAS:
- g_value_set_string (value, get_alias (self));
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
- break;
- }
-}
-
-static void
-empathy_roster_contact_set_property (GObject *object,
- guint property_id,
- const GValue *value,
- GParamSpec *pspec)
-{
- EmpathyRosterContact *self = EMPATHY_ROSTER_CONTACT (object);
-
- switch (property_id)
- {
- case PROP_INDIVIDIUAL:
- g_assert (self->priv->individual == NULL); /* construct only */
- self->priv->individual = g_value_dup_object (value);
- break;
- case PROP_GROUP:
- g_assert (self->priv->group == NULL); /* construct only */
- self->priv->group = g_value_dup_string (value);
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
- break;
- }
-}
-
-static void
-avatar_loaded_cb (GObject *source,
- GAsyncResult *result,
- gpointer user_data)
-{
- TpWeakRef *wr = user_data;
- EmpathyRosterContact *self;
- GdkPixbuf *pixbuf;
-
- self = tp_weak_ref_dup_object (wr);
- if (self == NULL)
- goto out;
-
- pixbuf = empathy_pixbuf_avatar_from_individual_scaled_finish (
- FOLKS_INDIVIDUAL (source), result, NULL);
-
- if (pixbuf == NULL)
- {
- pixbuf = tpaw_pixbuf_from_icon_name_sized (
- TPAW_IMAGE_AVATAR_DEFAULT, AVATAR_SIZE);
- }
-
- gtk_image_set_from_pixbuf (GTK_IMAGE (self->priv->avatar), pixbuf);
- g_object_unref (pixbuf);
-
- g_object_unref (self);
-
-out:
- tp_weak_ref_destroy (wr);
-}
-
-static void
-update_avatar (EmpathyRosterContact *self)
-{
- empathy_pixbuf_avatar_from_individual_scaled_async (self->priv->individual,
- AVATAR_SIZE, AVATAR_SIZE, NULL, avatar_loaded_cb,
- tp_weak_ref_new (self, NULL, NULL));
-}
-
-static void
-avatar_changed_cb (FolksIndividual *individual,
- GParamSpec *spec,
- EmpathyRosterContact *self)
-{
- update_avatar (self);
-}
-
-static void
-update_alias (EmpathyRosterContact *self)
-{
- gtk_label_set_text (GTK_LABEL (self->priv->alias), get_alias (self));
-
- g_object_notify (G_OBJECT (self), "alias");
-}
-
-static void
-alias_changed_cb (FolksIndividual *individual,
- GParamSpec *spec,
- EmpathyRosterContact *self)
-{
- update_alias (self);
-}
-
-static void
-update_presence_msg (EmpathyRosterContact *self)
-{
- const gchar *msg;
- GStrv types;
-
- msg = folks_presence_details_get_presence_message (
- FOLKS_PRESENCE_DETAILS (self->priv->individual));
-
- if (tp_str_empty (msg))
- {
- /* Just display the alias in the center of the row */
- gtk_alignment_set (GTK_ALIGNMENT (self->priv->first_line_alig),
- 0, 0.5, 1, 1);
-
- gtk_widget_hide (self->priv->presence_msg);
- }
- else
- {
- FolksPresenceType type;
-
- type = folks_presence_details_get_presence_type (
- FOLKS_PRESENCE_DETAILS (self->priv->individual));
- if (type == FOLKS_PRESENCE_TYPE_ERROR)
- {
- gchar *tmp;
-
- /* Add a prefix explaining that something goes wrong when trying to
- * fetch contact's presence. */
- tmp = g_strdup_printf (_("Server cannot find contact: %s"), msg);
- gtk_label_set_text (GTK_LABEL (self->priv->presence_msg), tmp);
-
- g_free (tmp);
- }
- else
- {
- gtk_label_set_text (GTK_LABEL (self->priv->presence_msg), msg);
- }
-
- gtk_alignment_set (GTK_ALIGNMENT (self->priv->first_line_alig),
- 0, 0.75, 1, 1);
- gtk_misc_set_alignment (GTK_MISC (self->priv->presence_msg), 0, 0.25);
-
- gtk_widget_show (self->priv->presence_msg);
- }
-
- types = (GStrv) empathy_individual_get_client_types (self->priv->individual);
-
- gtk_widget_set_visible (self->priv->phone_icon,
- empathy_client_types_contains_mobile_device (types));
-}
-
-static void
-presence_message_changed_cb (FolksIndividual *individual,
- GParamSpec *spec,
- EmpathyRosterContact *self)
-{
- update_presence_msg (self);
-}
-
-static void
-update_presence_icon (EmpathyRosterContact *self)
-{
- const gchar *icon;
-
- if (self->priv->event_icon == NULL)
- icon = empathy_icon_name_for_individual (self->priv->individual);
- else
- icon = self->priv->event_icon;
-
- gtk_image_set_from_icon_name (GTK_IMAGE (self->priv->presence_icon), icon,
- GTK_ICON_SIZE_MENU);
-}
-
-static void
-update_online (EmpathyRosterContact *self)
-{
- FolksPresenceType presence;
- gboolean online;
-
- presence = folks_presence_details_get_presence_type (
- FOLKS_PRESENCE_DETAILS (self->priv->individual));
-
- switch (presence)
- {
- case FOLKS_PRESENCE_TYPE_UNSET:
- case FOLKS_PRESENCE_TYPE_OFFLINE:
- case FOLKS_PRESENCE_TYPE_UNKNOWN:
- case FOLKS_PRESENCE_TYPE_ERROR:
- online = FALSE;
- break;
-
- case FOLKS_PRESENCE_TYPE_AVAILABLE:
- case FOLKS_PRESENCE_TYPE_AWAY:
- case FOLKS_PRESENCE_TYPE_EXTENDED_AWAY:
- case FOLKS_PRESENCE_TYPE_HIDDEN:
- case FOLKS_PRESENCE_TYPE_BUSY:
- online = TRUE;
- break;
-
- default:
- g_warning ("Unknown FolksPresenceType: %d", presence);
- online = FALSE;
- }
-
- if (self->priv->online == online)
- return;
-
- self->priv->online = online;
- g_object_notify (G_OBJECT (self), "online");
-}
-
-static void
-presence_status_changed_cb (FolksIndividual *individual,
- GParamSpec *spec,
- EmpathyRosterContact *self)
-{
- update_presence_icon (self);
- update_online (self);
-}
-
-static void
-empathy_roster_contact_constructed (GObject *object)
-{
- EmpathyRosterContact *self = EMPATHY_ROSTER_CONTACT (object);
- void (*chain_up) (GObject *) =
- ((GObjectClass *) empathy_roster_contact_parent_class)->constructed;
-
- if (chain_up != NULL)
- chain_up (object);
-
- g_assert (FOLKS_IS_INDIVIDUAL (self->priv->individual));
-
- tp_g_signal_connect_object (self->priv->individual, "notify::avatar",
- G_CALLBACK (avatar_changed_cb), self, 0);
- tp_g_signal_connect_object (self->priv->individual, "notify::alias",
- G_CALLBACK (alias_changed_cb), self, 0);
- tp_g_signal_connect_object (self->priv->individual,
- "notify::presence-message",
- G_CALLBACK (presence_message_changed_cb), self, 0);
- tp_g_signal_connect_object (self->priv->individual, "notify::presence-status",
- G_CALLBACK (presence_status_changed_cb), self, 0);
-
- update_avatar (self);
- update_alias (self);
- update_presence_msg (self);
- update_presence_icon (self);
-
- update_online (self);
-}
-
-static void
-empathy_roster_contact_dispose (GObject *object)
-{
- EmpathyRosterContact *self = EMPATHY_ROSTER_CONTACT (object);
- void (*chain_up) (GObject *) =
- ((GObjectClass *) empathy_roster_contact_parent_class)->dispose;
-
- g_clear_object (&self->priv->individual);
-
- if (chain_up != NULL)
- chain_up (object);
-}
-
-static void
-empathy_roster_contact_finalize (GObject *object)
-{
- EmpathyRosterContact *self = EMPATHY_ROSTER_CONTACT (object);
- void (*chain_up) (GObject *) =
- ((GObjectClass *) empathy_roster_contact_parent_class)->finalize;
-
- g_free (self->priv->group);
- g_free (self->priv->event_icon);
-
- if (chain_up != NULL)
- chain_up (object);
-}
-
-static void
-empathy_roster_contact_class_init (
- EmpathyRosterContactClass *klass)
-{
- GObjectClass *oclass = G_OBJECT_CLASS (klass);
- GParamSpec *spec;
-
- oclass->get_property = empathy_roster_contact_get_property;
- oclass->set_property = empathy_roster_contact_set_property;
- oclass->constructed = empathy_roster_contact_constructed;
- oclass->dispose = empathy_roster_contact_dispose;
- oclass->finalize = empathy_roster_contact_finalize;
-
- spec = g_param_spec_object ("individual", "Individual",
- "FolksIndividual",
- FOLKS_TYPE_INDIVIDUAL,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS);
- g_object_class_install_property (oclass, PROP_INDIVIDIUAL, spec);
-
- spec = g_param_spec_string ("group", "Group",
- "Group of this widget, or NULL",
- NULL,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS);
- g_object_class_install_property (oclass, PROP_GROUP, spec);
-
- spec = g_param_spec_boolean ("online", "Online",
- "TRUE if Individual is online",
- FALSE,
- G_PARAM_READABLE | G_PARAM_STATIC_STRINGS);
- g_object_class_install_property (oclass, PROP_ONLINE, spec);
-
- spec = g_param_spec_string ("alias", "Alias",
- "The Alias of the individual displayed in the widget",
- NULL,
- G_PARAM_READABLE | G_PARAM_STATIC_STRINGS);
- g_object_class_install_property (oclass, PROP_ALIAS, spec);
-
- g_type_class_add_private (klass, sizeof (EmpathyRosterContactPriv));
-}
-
-static void
-empathy_roster_contact_init (EmpathyRosterContact *self)
-{
- GtkWidget *main_box, *box, *first_line_box;
- GtkStyleContext *context;
-
- self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self,
- EMPATHY_TYPE_ROSTER_CONTACT, EmpathyRosterContactPriv);
-
- main_box = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 8);
-
- /* Avatar */
- self->priv->avatar = gtk_image_new ();
-
- gtk_widget_set_size_request (self->priv->avatar, AVATAR_SIZE, AVATAR_SIZE);
-
- gtk_box_pack_start (GTK_BOX (main_box), self->priv->avatar, FALSE, FALSE, 0);
- gtk_widget_show (self->priv->avatar);
-
- box = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
-
- /* Alias and phone icon */
- self->priv->first_line_alig = gtk_alignment_new (0, 0.5, 1, 1);
- first_line_box = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0);
-
- self->priv->alias = gtk_label_new (NULL);
- gtk_label_set_ellipsize (GTK_LABEL (self->priv->alias), PANGO_ELLIPSIZE_END);
- gtk_box_pack_start (GTK_BOX (first_line_box), self->priv->alias,
- FALSE, FALSE, 0);
- gtk_misc_set_alignment (GTK_MISC (self->priv->alias), 0, 0.5);
- gtk_widget_show (self->priv->alias);
-
- self->priv->phone_icon = gtk_image_new_from_icon_name ("phone-symbolic",
- GTK_ICON_SIZE_MENU);
- gtk_misc_set_alignment (GTK_MISC (self->priv->phone_icon), 0, 0.5);
- gtk_box_pack_start (GTK_BOX (first_line_box), self->priv->phone_icon,
- TRUE, TRUE, 0);
-
- gtk_container_add (GTK_CONTAINER (self->priv->first_line_alig),
- first_line_box);
- gtk_widget_show (self->priv->first_line_alig);
-
- gtk_box_pack_start (GTK_BOX (box), self->priv->first_line_alig,
- TRUE, TRUE, 0);
- gtk_widget_show (first_line_box);
-
- gtk_box_pack_start (GTK_BOX (main_box), box, TRUE, TRUE, 0);
- gtk_widget_show (box);
-
- /* Presence */
- self->priv->presence_msg = gtk_label_new (NULL);
- gtk_label_set_ellipsize (GTK_LABEL (self->priv->presence_msg),
- PANGO_ELLIPSIZE_END);
- gtk_box_pack_start (GTK_BOX (box), self->priv->presence_msg, TRUE, TRUE, 0);
- gtk_widget_show (self->priv->presence_msg);
-
- context = gtk_widget_get_style_context (self->priv->presence_msg);
- gtk_style_context_add_class (context, GTK_STYLE_CLASS_DIM_LABEL);
-
- /* Presence icon */
- self->priv->presence_icon = gtk_image_new ();
-
- gtk_box_pack_start (GTK_BOX (main_box), self->priv->presence_icon,
- FALSE, FALSE, 0);
- gtk_widget_show (self->priv->presence_icon);
-
- gtk_container_add (GTK_CONTAINER (self), main_box);
- gtk_widget_show (main_box);
-}
-
-GtkWidget *
-empathy_roster_contact_new (FolksIndividual *individual,
- const gchar *group)
-{
- g_return_val_if_fail (FOLKS_IS_INDIVIDUAL (individual), NULL);
-
- return g_object_new (EMPATHY_TYPE_ROSTER_CONTACT,
- "individual", individual,
- "group", group,
- "bottom-padding", 4,
- "top-padding", 4,
- "left-padding", 4,
- "right-padding", 12,
- NULL);
-}
-
-FolksIndividual *
-empathy_roster_contact_get_individual (EmpathyRosterContact *self)
-{
- return self->priv->individual;
-}
-
-gboolean
-empathy_roster_contact_is_online (EmpathyRosterContact *self)
-{
- return self->priv->online;
-}
-
-const gchar *
-empathy_roster_contact_get_group (EmpathyRosterContact *self)
-{
- return self->priv->group;
-}
-
-void
-empathy_roster_contact_set_event_icon (EmpathyRosterContact *self,
- const gchar *icon)
-{
- if (!tp_strdiff (self->priv->event_icon, icon))
- return;
-
- g_free (self->priv->event_icon);
- self->priv->event_icon = g_strdup (icon);
-
- update_presence_icon (self);
-}
-
-GdkPixbuf *
-empathy_roster_contact_get_avatar_pixbuf (EmpathyRosterContact *self)
-{
- return gtk_image_get_pixbuf (GTK_IMAGE (self->priv->avatar));
-}
diff --git a/libempathy-gtk/empathy-roster-contact.h b/libempathy-gtk/empathy-roster-contact.h
deleted file mode 100644
index 7b87e76d..00000000
--- a/libempathy-gtk/empathy-roster-contact.h
+++ /dev/null
@@ -1,67 +0,0 @@
-#ifndef __EMPATHY_ROSTER_CONTACT_H__
-#define __EMPATHY_ROSTER_CONTACT_H__
-
-#include <gtk/gtk.h>
-#include <folks/folks.h>
-
-G_BEGIN_DECLS
-
-typedef struct _EmpathyRosterContact EmpathyRosterContact;
-typedef struct _EmpathyRosterContactClass EmpathyRosterContactClass;
-typedef struct _EmpathyRosterContactPriv EmpathyRosterContactPriv;
-
-struct _EmpathyRosterContactClass
-{
- /*<private>*/
- GtkAlignmentClass parent_class;
-};
-
-struct _EmpathyRosterContact
-{
- /*<private>*/
- GtkAlignment parent;
- EmpathyRosterContactPriv *priv;
-};
-
-GType empathy_roster_contact_get_type (void);
-
-/* TYPE MACROS */
-#define EMPATHY_TYPE_ROSTER_CONTACT \
- (empathy_roster_contact_get_type ())
-#define EMPATHY_ROSTER_CONTACT(obj) \
- (G_TYPE_CHECK_INSTANCE_CAST((obj), \
- EMPATHY_TYPE_ROSTER_CONTACT, \
- EmpathyRosterContact))
-#define EMPATHY_ROSTER_CONTACT_CLASS(klass) \
- (G_TYPE_CHECK_CLASS_CAST((klass), \
- EMPATHY_TYPE_ROSTER_CONTACT, \
- EmpathyRosterContactClass))
-#define EMPATHY_IS_ROSTER_CONTACT(obj) \
- (G_TYPE_CHECK_INSTANCE_TYPE((obj), \
- EMPATHY_TYPE_ROSTER_CONTACT))
-#define EMPATHY_IS_ROSTER_CONTACT_CLASS(klass) \
- (G_TYPE_CHECK_CLASS_TYPE((klass), \
- EMPATHY_TYPE_ROSTER_CONTACT))
-#define EMPATHY_ROSTER_CONTACT_GET_CLASS(obj) \
- (G_TYPE_INSTANCE_GET_CLASS ((obj), \
- EMPATHY_TYPE_ROSTER_CONTACT, \
- EmpathyRosterContactClass))
-
-GtkWidget * empathy_roster_contact_new (FolksIndividual *individual,
- const gchar *group);
-
-FolksIndividual * empathy_roster_contact_get_individual (EmpathyRosterContact *self);
-
-const gchar * empathy_roster_contact_get_group (EmpathyRosterContact *self);
-
-gboolean empathy_roster_contact_is_online (EmpathyRosterContact *self);
-
-void empathy_roster_contact_set_event_icon (EmpathyRosterContact *self,
- const gchar *icon);
-
-GdkPixbuf * empathy_roster_contact_get_avatar_pixbuf (
- EmpathyRosterContact *self);
-
-G_END_DECLS
-
-#endif /* #ifndef __EMPATHY_ROSTER_CONTACT_H__*/
diff --git a/libempathy-gtk/empathy-roster-group.c b/libempathy-gtk/empathy-roster-group.c
deleted file mode 100644
index 9ca53a8e..00000000
--- a/libempathy-gtk/empathy-roster-group.c
+++ /dev/null
@@ -1,236 +0,0 @@
-#include "config.h"
-#include "empathy-roster-group.h"
-
-#include <telepathy-glib/telepathy-glib.h>
-
-G_DEFINE_TYPE (EmpathyRosterGroup, empathy_roster_group, GTK_TYPE_EXPANDER)
-
-enum
-{
- PROP_NAME = 1,
- PROP_ICON,
- N_PROPS
-};
-
-/*
-enum
-{
- LAST_SIGNAL
-};
-
-static guint signals[LAST_SIGNAL];
-*/
-
-struct _EmpathyRosterGroupPriv
-{
- gchar *name;
- gchar *icon_name;
-
- /* Widgets associated with this group. EmpathyRosterGroup is not responsible
- * of packing/displaying these widgets. This hash table is a just a set
- * to keep track of them. */
- GHashTable *widgets;
-};
-
-static void
-empathy_roster_group_get_property (GObject *object,
- guint property_id,
- GValue *value,
- GParamSpec *pspec)
-{
- EmpathyRosterGroup *self = EMPATHY_ROSTER_GROUP (object);
-
- switch (property_id)
- {
- case PROP_NAME:
- g_value_set_string (value, self->priv->name);
- break;
- case PROP_ICON:
- g_value_set_string (value, self->priv->icon_name);
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
- break;
- }
-}
-
-static void
-empathy_roster_group_set_property (GObject *object,
- guint property_id,
- const GValue *value,
- GParamSpec *pspec)
-{
- EmpathyRosterGroup *self = EMPATHY_ROSTER_GROUP (object);
-
- switch (property_id)
- {
- case PROP_NAME:
- g_assert (self->priv->name == NULL); /* construct-only */
- self->priv->name = g_value_dup_string (value);
- break;
- case PROP_ICON:
- g_assert (self->priv->icon_name == NULL); /* construct-only */
- self->priv->icon_name = g_value_dup_string (value);
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
- break;
- }
-}
-
-static void
-empathy_roster_group_constructed (GObject *object)
-{
- EmpathyRosterGroup *self = EMPATHY_ROSTER_GROUP (object);
- void (*chain_up) (GObject *) =
- ((GObjectClass *) empathy_roster_group_parent_class)->constructed;
- gchar *tmp;
- GtkWidget *box, *label;
-
- if (chain_up != NULL)
- chain_up (object);
-
- g_assert (self->priv->name != NULL);
-
- box = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 6);
-
- /* Icon, if any */
- if (!tp_str_empty (self->priv->icon_name))
- {
- GtkWidget *icon;
-
- icon = gtk_image_new_from_icon_name (self->priv->icon_name,
- GTK_ICON_SIZE_MENU);
-
- if (icon != NULL)
- gtk_box_pack_start (GTK_BOX (box), icon, FALSE, FALSE, 0);
- }
-
- /* Label */
- tmp = g_strdup_printf ("<b>%s</b>", self->priv->name);
- label = gtk_label_new (tmp);
- g_free (tmp);
-
- gtk_label_set_use_markup (GTK_LABEL (label), TRUE);
- gtk_box_pack_start (GTK_BOX (box), label, TRUE, TRUE, 0);
-
- gtk_widget_show_all (box);
-
- gtk_expander_set_label_widget (GTK_EXPANDER (self), box);
-}
-
-static void
-empathy_roster_group_dispose (GObject *object)
-{
- EmpathyRosterGroup *self = EMPATHY_ROSTER_GROUP (object);
- void (*chain_up) (GObject *) =
- ((GObjectClass *) empathy_roster_group_parent_class)->dispose;
-
- tp_clear_pointer (&self->priv->widgets, g_hash_table_unref);
-
- if (chain_up != NULL)
- chain_up (object);
-}
-
-static void
-empathy_roster_group_finalize (GObject *object)
-{
- EmpathyRosterGroup *self = EMPATHY_ROSTER_GROUP (object);
- void (*chain_up) (GObject *) =
- ((GObjectClass *) empathy_roster_group_parent_class)->finalize;
-
- g_free (self->priv->name);
- g_free (self->priv->icon_name);
-
- if (chain_up != NULL)
- chain_up (object);
-}
-
-static void
-empathy_roster_group_class_init (
- EmpathyRosterGroupClass *klass)
-{
- GObjectClass *oclass = G_OBJECT_CLASS (klass);
- GParamSpec *spec;
-
- oclass->get_property = empathy_roster_group_get_property;
- oclass->set_property = empathy_roster_group_set_property;
- oclass->constructed = empathy_roster_group_constructed;
- oclass->dispose = empathy_roster_group_dispose;
- oclass->finalize = empathy_roster_group_finalize;
-
- spec = g_param_spec_string ("name", "Name",
- "Group name",
- NULL,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS);
- g_object_class_install_property (oclass, PROP_NAME, spec);
-
- spec = g_param_spec_string ("icon", "Icon",
- "Icon name",
- NULL,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS);
- g_object_class_install_property (oclass, PROP_ICON, spec);
-
- g_type_class_add_private (klass, sizeof (EmpathyRosterGroupPriv));
-}
-
-static void
-empathy_roster_group_init (EmpathyRosterGroup *self)
-{
- self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self,
- EMPATHY_TYPE_ROSTER_GROUP, EmpathyRosterGroupPriv);
-
- self->priv->widgets = g_hash_table_new (NULL, NULL);
-}
-
-GtkWidget *
-empathy_roster_group_new (const gchar *name,
- const gchar *icon)
-{
- return g_object_new (EMPATHY_TYPE_ROSTER_GROUP,
- "name", name,
- "icon", icon,
- "use-markup", TRUE,
- "expanded", TRUE,
- NULL);
-}
-
-const gchar *
-empathy_roster_group_get_name (EmpathyRosterGroup *self)
-{
- return self->priv->name;
-}
-
-guint
-empathy_roster_group_add_widget (EmpathyRosterGroup *self,
- GtkWidget *widget)
-{
- g_return_val_if_fail (GTK_IS_WIDGET (widget), 0);
-
- g_hash_table_add (self->priv->widgets, widget);
-
- return empathy_roster_group_get_widgets_count (self);
-}
-
-guint
-empathy_roster_group_remove_widget (EmpathyRosterGroup *self,
- GtkWidget *widget)
-{
- g_return_val_if_fail (GTK_IS_WIDGET (widget), 0);
-
- g_hash_table_remove (self->priv->widgets, widget);
-
- return empathy_roster_group_get_widgets_count (self);
-}
-
-guint
-empathy_roster_group_get_widgets_count (EmpathyRosterGroup *self)
-{
- return g_hash_table_size (self->priv->widgets);
-}
-
-GList *
-empathy_roster_group_get_widgets (EmpathyRosterGroup *self)
-{
- return g_hash_table_get_keys (self->priv->widgets);
-}
diff --git a/libempathy-gtk/empathy-roster-group.h b/libempathy-gtk/empathy-roster-group.h
deleted file mode 100644
index 405455bf..00000000
--- a/libempathy-gtk/empathy-roster-group.h
+++ /dev/null
@@ -1,63 +0,0 @@
-#ifndef __EMPATHY_ROSTER_GROUP_H__
-#define __EMPATHY_ROSTER_GROUP_H__
-
-#include <gtk/gtk.h>
-
-G_BEGIN_DECLS
-
-typedef struct _EmpathyRosterGroup EmpathyRosterGroup;
-typedef struct _EmpathyRosterGroupClass EmpathyRosterGroupClass;
-typedef struct _EmpathyRosterGroupPriv EmpathyRosterGroupPriv;
-
-struct _EmpathyRosterGroupClass
-{
- /*<private>*/
- GtkExpanderClass parent_class;
-};
-
-struct _EmpathyRosterGroup
-{
- /*<private>*/
- GtkExpander parent;
- EmpathyRosterGroupPriv *priv;
-};
-
-GType empathy_roster_group_get_type (void);
-
-/* TYPE MACROS */
-#define EMPATHY_TYPE_ROSTER_GROUP \
- (empathy_roster_group_get_type ())
-#define EMPATHY_ROSTER_GROUP(obj) \
- (G_TYPE_CHECK_INSTANCE_CAST((obj), \
- EMPATHY_TYPE_ROSTER_GROUP, \
- EmpathyRosterGroup))
-#define EMPATHY_ROSTER_GROUP_CLASS(klass) \
- (G_TYPE_CHECK_CLASS_CAST((klass), \
- EMPATHY_TYPE_ROSTER_GROUP, \
- EmpathyRosterGroupClass))
-#define EMPATHY_IS_ROSTER_GROUP(obj) \
- (G_TYPE_CHECK_INSTANCE_TYPE((obj), \
- EMPATHY_TYPE_ROSTER_GROUP))
-#define EMPATHY_IS_ROSTER_GROUP_CLASS(klass) \
- (G_TYPE_CHECK_CLASS_TYPE((klass), \
- EMPATHY_TYPE_ROSTER_GROUP))
-#define EMPATHY_ROSTER_GROUP_GET_CLASS(obj) \
- (G_TYPE_INSTANCE_GET_CLASS ((obj), \
- EMPATHY_TYPE_ROSTER_GROUP, \
- EmpathyRosterGroupClass))
-
-GtkWidget * empathy_roster_group_new (const gchar *name,
- const gchar *icon);
-
-const gchar * empathy_roster_group_get_name (EmpathyRosterGroup *self);
-
-guint empathy_roster_group_add_widget (EmpathyRosterGroup *self,
- GtkWidget *widget);
-guint empathy_roster_group_remove_widget (EmpathyRosterGroup *self,
- GtkWidget *widget);
-guint empathy_roster_group_get_widgets_count (EmpathyRosterGroup *self);
-GList * empathy_roster_group_get_widgets (EmpathyRosterGroup *self);
-
-G_END_DECLS
-
-#endif /* #ifndef __EMPATHY_ROSTER_GROUP_H__*/
diff --git a/libempathy-gtk/empathy-roster-model-aggregator.c b/libempathy-gtk/empathy-roster-model-aggregator.c
deleted file mode 100644
index b82fd162..00000000
--- a/libempathy-gtk/empathy-roster-model-aggregator.c
+++ /dev/null
@@ -1,422 +0,0 @@
-/*
- * empathy-roster-model-aggregator.c
- *
- * Implementation of EmpathyRosterModel using FolksIndividualAggregator as
- * source.
- *
- * Copyright (C) 2012 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
- */
-
-#include "config.h"
-#include "empathy-roster-model-aggregator.h"
-
-#include <folks/folks-telepathy.h>
-
-/**
- * SECTION: empathy-roster-model-aggregator
- * @title: EmpathyRosterModelAggregator
- * @short_description: TODO
- *
- * TODO
- */
-
-/**
- * EmpathyRosterModelAggregator:
- *
- * Data structure representing a #EmpathyRosterModelAggregator.
- *
- * Since: UNRELEASED
- */
-
-/**
- * EmpathyRosterModelAggregatorClass:
- *
- * The class of a #EmpathyRosterModelAggregator.
- *
- * Since: UNRELEASED
- */
-
-static void roster_model_iface_init (EmpathyRosterModelInterface *iface);
-
-G_DEFINE_TYPE_WITH_CODE (EmpathyRosterModelAggregator,
- empathy_roster_model_aggregator,
- G_TYPE_OBJECT,
- G_IMPLEMENT_INTERFACE (EMPATHY_TYPE_ROSTER_MODEL, roster_model_iface_init))
-
-enum
-{
- PROP_AGGREGATOR = 1,
- PROP_FILTER_FUNC,
- PROP_FILTER_DATA,
- N_PROPS
-};
-
-/*
-enum
-{
- LAST_SIGNAL
-};
-
-static guint signals[LAST_SIGNAL];
-*/
-
-struct _EmpathyRosterModelAggregatorPriv
-{
- FolksIndividualAggregator *aggregator;
- GHashTable *filtered_individuals; /* Individual -> Individual */
-
- EmpathyRosterModelAggregatorFilterFunc filter_func;
- gpointer filter_data;
-};
-
-static void
-individual_group_changed_cb (FolksIndividual *individual,
- gchar *group,
- gboolean is_member,
- EmpathyRosterModelAggregator *self)
-{
- empathy_roster_model_fire_groups_changed (EMPATHY_ROSTER_MODEL (self),
- individual, group, is_member);
-}
-
-static void
-add_to_filtered_individuals (EmpathyRosterModelAggregator *self,
- FolksIndividual *individual)
-{
- g_hash_table_add (self->priv->filtered_individuals,
- g_object_ref (individual));
-
- tp_g_signal_connect_object (individual, "group-changed",
- G_CALLBACK (individual_group_changed_cb), self, 0);
-
- empathy_roster_model_fire_individual_added (EMPATHY_ROSTER_MODEL (self),
- individual);
-}
-
-static void
-remove_from_filtered_individuals (EmpathyRosterModelAggregator *self,
- FolksIndividual *individual)
-{
- g_signal_handlers_disconnect_by_func (individual,
- individual_group_changed_cb, self);
-
- g_hash_table_remove (self->priv->filtered_individuals, individual);
-
- empathy_roster_model_fire_individual_removed (EMPATHY_ROSTER_MODEL (self),
- individual);
-}
-
-static void
-individual_notify_cb (FolksIndividual *individual,
- GParamSpec *param,
- EmpathyRosterModelAggregator *self)
-{
- if (!self->priv->filter_func (EMPATHY_ROSTER_MODEL (self), individual, self)
- && g_hash_table_contains (self->priv->filtered_individuals, individual))
- remove_from_filtered_individuals (self, individual);
-
- if (self->priv->filter_func (EMPATHY_ROSTER_MODEL (self), individual, self)
- && !g_hash_table_contains (self->priv->filtered_individuals, individual))
- add_to_filtered_individuals (self, individual);
-}
-
-static void
-add_individual (EmpathyRosterModelAggregator *self,
- FolksIndividual *individual)
-{
- if (self->priv->filter_func != NULL)
- {
- tp_g_signal_connect_object (individual, "notify",
- G_CALLBACK (individual_notify_cb), self, 0);
-
- if (!self->priv->filter_func (EMPATHY_ROSTER_MODEL (self), individual,
- self))
- return;
- }
-
- add_to_filtered_individuals (self, individual);
-}
-
-static void
-remove_individual (EmpathyRosterModelAggregator *self,
- FolksIndividual *individual)
-{
- if (self->priv->filter_func != NULL)
- g_signal_handlers_disconnect_by_func (individual,
- individual_notify_cb, self);
-
- if (g_hash_table_contains (self->priv->filtered_individuals,
- individual))
- remove_from_filtered_individuals (self, individual);
-}
-
-static void
-populate_individuals (EmpathyRosterModelAggregator *self)
-{
- GeeMap *individuals;
- GeeMapIterator *iter;
-
- individuals = folks_individual_aggregator_get_individuals (
- self->priv->aggregator);
- iter = gee_map_map_iterator (individuals);
- while (gee_map_iterator_next (iter))
- {
- add_individual (self, gee_map_iterator_get_value (iter));
- }
- g_clear_object (&iter);
-}
-
-static void
-aggregator_individuals_changed_cb (FolksIndividualAggregator *aggregator,
- GeeSet *added,
- GeeSet *removed,
- gchar *message,
- FolksPersona *actor,
- FolksGroupDetailsChangeReason reason,
- EmpathyRosterModelAggregator *self)
-{
- if (gee_collection_get_size (GEE_COLLECTION (added)) > 0)
- {
- GeeIterator *iter = gee_iterable_iterator (GEE_ITERABLE (added));
-
- while (iter != NULL && gee_iterator_next (iter))
- {
- add_individual (self, gee_iterator_get (iter));
- }
- g_clear_object (&iter);
- }
-
- if (gee_collection_get_size (GEE_COLLECTION (removed)) > 0)
- {
- GeeIterator *iter = gee_iterable_iterator (GEE_ITERABLE (removed));
-
- while (iter != NULL && gee_iterator_next (iter))
- {
- remove_individual (self, gee_iterator_get (iter));
- }
- g_clear_object (&iter);
- }
-}
-
-static void
-empathy_roster_model_aggregator_get_property (GObject *object,
- guint property_id,
- GValue *value,
- GParamSpec *pspec)
-{
- EmpathyRosterModelAggregator *self = EMPATHY_ROSTER_MODEL_AGGREGATOR (object);
-
- switch (property_id)
- {
- case PROP_AGGREGATOR:
- g_value_set_object (value, self->priv->aggregator);
- break;
- case PROP_FILTER_FUNC:
- g_value_set_pointer (value, self->priv->filter_func);
- break;
- case PROP_FILTER_DATA:
- g_value_set_pointer (value, self->priv->filter_data);
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
- break;
- }
-}
-
-static void
-empathy_roster_model_aggregator_set_property (GObject *object,
- guint property_id,
- const GValue *value,
- GParamSpec *pspec)
-{
- EmpathyRosterModelAggregator *self = EMPATHY_ROSTER_MODEL_AGGREGATOR (object);
-
- switch (property_id)
- {
- case PROP_AGGREGATOR:
- g_assert (self->priv->aggregator == NULL); /* construct only */
- self->priv->aggregator = g_value_dup_object (value);
- break;
- case PROP_FILTER_FUNC:
- g_assert (self->priv->filter_func == NULL); /* construct only */
- self->priv->filter_func = g_value_get_pointer (value);
- break;
- case PROP_FILTER_DATA:
- g_assert (self->priv->filter_data == NULL); /* construct only */
- self->priv->filter_data = g_value_get_pointer (value);
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
- break;
- }
-}
-
-static void
-empathy_roster_model_aggregator_constructed (GObject *object)
-{
- EmpathyRosterModelAggregator *self = EMPATHY_ROSTER_MODEL_AGGREGATOR (object);
- void (*chain_up) (GObject *) =
- ((GObjectClass *) empathy_roster_model_aggregator_parent_class)->constructed;
-
- if (chain_up != NULL)
- chain_up (object);
-
- if (self->priv->aggregator == NULL)
- self->priv->aggregator = folks_individual_aggregator_new ();
-
- g_assert (FOLKS_IS_INDIVIDUAL_AGGREGATOR (self->priv->aggregator));
-
- tp_g_signal_connect_object (self->priv->aggregator, "individuals-changed",
- G_CALLBACK (aggregator_individuals_changed_cb), self, 0);
-
- folks_individual_aggregator_prepare (self->priv->aggregator, NULL, NULL);
-
- populate_individuals (self);
-}
-
-static void
-empathy_roster_model_aggregator_dispose (GObject *object)
-{
- EmpathyRosterModelAggregator *self = EMPATHY_ROSTER_MODEL_AGGREGATOR (object);
- void (*chain_up) (GObject *) =
- ((GObjectClass *) empathy_roster_model_aggregator_parent_class)->dispose;
-
- g_clear_object (&self->priv->aggregator);
- g_clear_pointer (&self->priv->filtered_individuals, g_hash_table_unref);
-
- if (chain_up != NULL)
- chain_up (object);
-}
-
-static void
-empathy_roster_model_aggregator_finalize (GObject *object)
-{
- //EmpathyRosterModelAggregator *self = EMPATHY_ROSTER_MODEL_AGGREGATOR (object);
- void (*chain_up) (GObject *) =
- ((GObjectClass *) empathy_roster_model_aggregator_parent_class)->finalize;
-
- if (chain_up != NULL)
- chain_up (object);
-}
-
-static void
-empathy_roster_model_aggregator_class_init (
- EmpathyRosterModelAggregatorClass *klass)
-{
- GObjectClass *oclass = G_OBJECT_CLASS (klass);
- GParamSpec *spec;
-
- oclass->get_property = empathy_roster_model_aggregator_get_property;
- oclass->set_property = empathy_roster_model_aggregator_set_property;
- oclass->constructed = empathy_roster_model_aggregator_constructed;
- oclass->dispose = empathy_roster_model_aggregator_dispose;
- oclass->finalize = empathy_roster_model_aggregator_finalize;
-
- spec = g_param_spec_object ("aggregator", "Aggregator",
- "FolksIndividualAggregator",
- FOLKS_TYPE_INDIVIDUAL_AGGREGATOR,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS);
- g_object_class_install_property (oclass, PROP_AGGREGATOR, spec);
-
- spec = g_param_spec_pointer ("filter-func", "Filter-Func",
- "EmpathyRosterModelAggregatorFilterFunc",
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS);
- g_object_class_install_property (oclass, PROP_FILTER_FUNC, spec);
-
- spec = g_param_spec_pointer ("filter-data", "Filter-Data",
- "GPointer",
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS);
- g_object_class_install_property (oclass, PROP_FILTER_DATA, spec);
-
- g_type_class_add_private (klass, sizeof (EmpathyRosterModelAggregatorPriv));
-}
-
-static void
-empathy_roster_model_aggregator_init (EmpathyRosterModelAggregator *self)
-{
- self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self,
- EMPATHY_TYPE_ROSTER_MODEL_AGGREGATOR, EmpathyRosterModelAggregatorPriv);
-
- self->priv->filtered_individuals = g_hash_table_new_full (NULL, NULL, NULL,
- g_object_unref);
-}
-
-EmpathyRosterModelAggregator *
-empathy_roster_model_aggregator_new (
- EmpathyRosterModelAggregatorFilterFunc filter_func,
- gpointer user_data)
-{
- return g_object_new (EMPATHY_TYPE_ROSTER_MODEL_AGGREGATOR,
- "filter-func", filter_func,
- "filter-data", user_data,
- NULL);
-}
-
-EmpathyRosterModelAggregator *
-empathy_roster_model_aggregator_new_with_aggregator (
- FolksIndividualAggregator *aggregator,
- EmpathyRosterModelAggregatorFilterFunc filter_func,
- gpointer user_data)
-{
- g_return_val_if_fail (FOLKS_IS_INDIVIDUAL_AGGREGATOR (aggregator), NULL);
-
- return g_object_new (EMPATHY_TYPE_ROSTER_MODEL_AGGREGATOR,
- "aggregator", aggregator,
- "filter-func", filter_func,
- "filter-data", user_data,
- NULL);
-}
-
-static GList *
-empathy_roster_model_aggregator_get_individuals (EmpathyRosterModel *model)
-{
- EmpathyRosterModelAggregator *self = EMPATHY_ROSTER_MODEL_AGGREGATOR (model);
-
- return g_hash_table_get_values (self->priv->filtered_individuals);
-}
-
-static GList *
-empathy_roster_model_aggregator_dup_groups_for_individual (
- EmpathyRosterModel *model,
- FolksIndividual *individual)
-{
- GList *groups_list = NULL;
- GeeSet *groups_set;
-
- groups_set = folks_group_details_get_groups (
- FOLKS_GROUP_DETAILS (individual));
- if (gee_collection_get_size (GEE_COLLECTION (groups_set)) > 0)
- {
- GeeIterator *iter = gee_iterable_iterator (GEE_ITERABLE (groups_set));
-
- while (iter != NULL && gee_iterator_next (iter))
- {
- groups_list = g_list_prepend (groups_list, gee_iterator_get (iter));
- }
- g_clear_object (&iter);
- }
-
- return groups_list;
-}
-
-static void
-roster_model_iface_init (EmpathyRosterModelInterface *iface)
-{
- iface->get_individuals = empathy_roster_model_aggregator_get_individuals;
- iface->dup_groups_for_individual =
- empathy_roster_model_aggregator_dup_groups_for_individual;
-}
diff --git a/libempathy-gtk/empathy-roster-model-aggregator.h b/libempathy-gtk/empathy-roster-model-aggregator.h
deleted file mode 100644
index 3b9c0202..00000000
--- a/libempathy-gtk/empathy-roster-model-aggregator.h
+++ /dev/null
@@ -1,92 +0,0 @@
-/*
- * empathy-roster-model-aggregator.h
- *
- * Copyright (C) 2012 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
- */
-
-
-#ifndef __EMPATHY_ROSTER_MODEL_AGGREGATOR_H__
-#define __EMPATHY_ROSTER_MODEL_AGGREGATOR_H__
-
-#include <glib-object.h>
-#include <folks/folks.h>
-
-#include "empathy-roster-model.h"
-
-G_BEGIN_DECLS
-
-typedef struct _EmpathyRosterModelAggregator EmpathyRosterModelAggregator;
-typedef struct _EmpathyRosterModelAggregatorClass
-EmpathyRosterModelAggregatorClass;
-typedef struct _EmpathyRosterModelAggregatorPriv
-EmpathyRosterModelAggregatorPriv;
-
-struct _EmpathyRosterModelAggregatorClass
-{
- /*<private>*/
- GObjectClass parent_class;
-};
-
-struct _EmpathyRosterModelAggregator
-{
- /*<private>*/
- GObject parent;
- EmpathyRosterModelAggregatorPriv *priv;
-};
-
-typedef gboolean (* EmpathyRosterModelAggregatorFilterFunc) (
- EmpathyRosterModel *model,
- FolksIndividual *individual,
- gpointer user_data);
-
-GType empathy_roster_model_aggregator_get_type (void);
-
-/* TYPE MACROS */
-#define EMPATHY_TYPE_ROSTER_MODEL_AGGREGATOR \
- (empathy_roster_model_aggregator_get_type ())
-#define EMPATHY_ROSTER_MODEL_AGGREGATOR(obj) \
- (G_TYPE_CHECK_INSTANCE_CAST((obj), \
- EMPATHY_TYPE_ROSTER_MODEL_AGGREGATOR, \
- EmpathyRosterModelAggregator))
-#define EMPATHY_ROSTER_MODEL_AGGREGATOR_CLASS(klass) \
- (G_TYPE_CHECK_CLASS_CAST((klass), \
- EMPATHY_TYPE_ROSTER_MODEL_AGGREGATOR, \
- EmpathyRosterModelAggregatorClass))
-#define EMPATHY_IS_ROSTER_MODEL_AGGREGATOR(obj) \
- (G_TYPE_CHECK_INSTANCE_TYPE((obj), \
- EMPATHY_TYPE_ROSTER_MODEL_AGGREGATOR))
-#define EMPATHY_IS_ROSTER_MODEL_AGGREGATOR_CLASS(klass) \
- (G_TYPE_CHECK_CLASS_TYPE((klass), \
- EMPATHY_TYPE_ROSTER_MODEL_AGGREGATOR))
-#define EMPATHY_ROSTER_MODEL_AGGREGATOR_GET_CLASS(obj) \
- (G_TYPE_INSTANCE_GET_CLASS ((obj), \
- EMPATHY_TYPE_ROSTER_MODEL_AGGREGATOR, \
- EmpathyRosterModelAggregatorClass))
-
-EmpathyRosterModelAggregator * empathy_roster_model_aggregator_new (
- EmpathyRosterModelAggregatorFilterFunc filter_func,
- gpointer user_data);
-
-EmpathyRosterModelAggregator *
-empathy_roster_model_aggregator_new_with_aggregator (
- FolksIndividualAggregator *aggregator,
- EmpathyRosterModelAggregatorFilterFunc filter_func,
- gpointer user_data);
-
-G_END_DECLS
-
-#endif /* #ifndef __EMPATHY_ROSTER_MODEL_AGGREGATOR_H__*/
diff --git a/libempathy-gtk/empathy-roster-model-manager.c b/libempathy-gtk/empathy-roster-model-manager.c
deleted file mode 100644
index e0fff03e..00000000
--- a/libempathy-gtk/empathy-roster-model-manager.c
+++ /dev/null
@@ -1,421 +0,0 @@
-/*
- * empathy-roster-model-manager.c
- *
- * Implementation of EmpathyRosterModel using EmpathyIndividualManager as
- * source.
- *
- * Copyright (C) 2012 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
- */
-
-#include "config.h"
-#include "empathy-roster-model-manager.h"
-
-#include <glib/gi18n-lib.h>
-
-#include "empathy-roster-model.h"
-#include "empathy-utils.h"
-
-static void roster_model_iface_init (EmpathyRosterModelInterface *iface);
-
-G_DEFINE_TYPE_WITH_CODE (EmpathyRosterModelManager,
- empathy_roster_model_manager,
- G_TYPE_OBJECT,
- G_IMPLEMENT_INTERFACE (EMPATHY_TYPE_ROSTER_MODEL, roster_model_iface_init))
-
-enum
-{
- PROP_MANAGER = 1,
- N_PROPS
-};
-
-/*
-enum
-{
- LAST_SIGNAL
-};
-
-static guint signals[LAST_SIGNAL];
-*/
-
-struct _EmpathyRosterModelManagerPriv
-{
- EmpathyIndividualManager *manager;
- /* FolksIndividual (borrowed) */
- GList *top_group_members;
-};
-
-static gboolean
-is_xmpp_local_contact (FolksIndividual *individual)
-{
- EmpathyContact *contact;
- TpConnection *connection;
- const gchar *protocol_name = NULL;
- gboolean result;
-
- contact = empathy_contact_dup_from_folks_individual (individual);
-
- if (contact == NULL)
- return FALSE;
-
- connection = empathy_contact_get_connection (contact);
- protocol_name = tp_connection_get_protocol_name (connection);
- result = !tp_strdiff (protocol_name, "local-xmpp");
- g_object_unref (contact);
-
- return result;
-}
-
-static gboolean
-individual_in_top_group_members (EmpathyRosterModelManager *self,
- FolksIndividual *individual)
-{
- return (g_list_find (self->priv->top_group_members, individual) != NULL);
-}
-
-static gboolean
-individual_should_be_in_top_group_members (EmpathyRosterModelManager *self,
- FolksIndividual *individual)
-{
- GList *tops;
-
- tops = empathy_individual_manager_get_top_individuals (self->priv->manager);
-
- return (folks_favourite_details_get_is_favourite (
- FOLKS_FAVOURITE_DETAILS (individual)) ||
- g_list_find (tops, individual) != NULL);
-}
-
-static void
-add_to_top_group_members (EmpathyRosterModelManager *self,
- FolksIndividual *individual)
-{
- self->priv->top_group_members = g_list_prepend (self->priv->top_group_members,
- individual);
-}
-
-static void
-remove_from_top_group_members (EmpathyRosterModelManager *self,
- FolksIndividual *individual)
-{
- self->priv->top_group_members = g_list_remove (self->priv->top_group_members,
- individual);
-}
-
-static void
-populate_model (EmpathyRosterModelManager *self)
-{
- GList *individuals, *l;
-
- individuals = empathy_individual_manager_get_members (self->priv->manager);
-
- for (l = individuals; l != NULL; l = g_list_next (l))
- {
- if (individual_should_be_in_top_group_members (self, l->data))
- add_to_top_group_members (self, l->data);
-
- empathy_roster_model_fire_individual_added (EMPATHY_ROSTER_MODEL (self),
- l->data);
- }
-}
-
-static void
-members_changed_cb (EmpathyIndividualManager *manager,
- const gchar *message,
- GList *added,
- GList *removed,
- TpChannelGroupChangeReason reason,
- EmpathyRosterModelManager *self)
-{
- GList *l;
-
- for (l = added; l != NULL; l = g_list_next (l))
- {
- if (individual_should_be_in_top_group_members (self, l->data) &&
- !individual_in_top_group_members (self, l->data))
- add_to_top_group_members (self, l->data);
-
- empathy_roster_model_fire_individual_added (EMPATHY_ROSTER_MODEL (self),
- l->data);
- }
-
- for (l = removed; l != NULL; l = g_list_next (l))
- {
- if (individual_in_top_group_members (self, l->data))
- remove_from_top_group_members (self, l->data);
-
- empathy_roster_model_fire_individual_removed (EMPATHY_ROSTER_MODEL (self),
- l->data);
- }
-}
-
-static void
-groups_changed_cb (EmpathyIndividualManager *manager,
- FolksIndividual *individual,
- const gchar *group,
- gboolean is_member,
- EmpathyRosterModelManager *self)
-{
- empathy_roster_model_fire_groups_changed (EMPATHY_ROSTER_MODEL (self),
- individual, group, is_member);
-}
-
-static void
-top_individuals_changed_cb (EmpathyIndividualManager *manager,
- GParamSpec *spec,
- EmpathyRosterModelManager *self)
-{
- GList *tops, *l;
-
- tops = empathy_individual_manager_get_top_individuals (self->priv->manager);
-
- for (l = tops; l != NULL; l = g_list_next (l))
- {
- if (!individual_in_top_group_members (self, l->data))
- {
- add_to_top_group_members (self, l->data);
-
- empathy_roster_model_fire_groups_changed (
- EMPATHY_ROSTER_MODEL (self), l->data,
- EMPATHY_ROSTER_MODEL_GROUP_TOP_GROUP, TRUE);
- }
- }
-
- l = self->priv->top_group_members;
- while (l != NULL)
- {
- FolksIndividual *individual = l->data;
-
- /* remove_from_top_group_members will modify the list so we already take
- * the next pointer. */
- l = g_list_next (l);
-
- if (!individual_should_be_in_top_group_members (self, individual))
- {
- remove_from_top_group_members (self, individual);
-
- empathy_roster_model_fire_groups_changed (EMPATHY_ROSTER_MODEL (self),
- individual, EMPATHY_ROSTER_MODEL_GROUP_TOP_GROUP, FALSE);
- }
- }
-}
-
-static void
-favourites_changed_cb (EmpathyIndividualManager *manager,
- FolksIndividual *individual,
- gboolean favourite,
- EmpathyRosterModelManager *self)
-{
- if (favourite && !individual_in_top_group_members (self, individual))
- {
- add_to_top_group_members (self, individual);
-
- empathy_roster_model_fire_groups_changed (
- EMPATHY_ROSTER_MODEL (self), individual,
- EMPATHY_ROSTER_MODEL_GROUP_TOP_GROUP, favourite);
- }
- else if (!favourite &&
- !individual_should_be_in_top_group_members (self, individual))
- {
- remove_from_top_group_members (self, individual);
-
- empathy_roster_model_fire_groups_changed (
- EMPATHY_ROSTER_MODEL (self), individual,
- EMPATHY_ROSTER_MODEL_GROUP_TOP_GROUP, favourite);
- }
-}
-
-static void
-empathy_roster_model_manager_get_property (GObject *object,
- guint property_id,
- GValue *value,
- GParamSpec *pspec)
-{
- EmpathyRosterModelManager *self = EMPATHY_ROSTER_MODEL_MANAGER (object);
-
- switch (property_id)
- {
- case PROP_MANAGER:
- g_value_set_object (value, self->priv->manager);
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
- break;
- }
-}
-
-static void
-empathy_roster_model_manager_set_property (GObject *object,
- guint property_id,
- const GValue *value,
- GParamSpec *pspec)
-{
- EmpathyRosterModelManager *self = EMPATHY_ROSTER_MODEL_MANAGER (object);
-
- switch (property_id)
- {
- case PROP_MANAGER:
- g_assert (self->priv->manager == NULL); /* construct only */
- self->priv->manager = g_value_dup_object (value);
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
- break;
- }
-}
-
-static void
-empathy_roster_model_manager_constructed (GObject *object)
-{
- EmpathyRosterModelManager *self = EMPATHY_ROSTER_MODEL_MANAGER (object);
- void (*chain_up) (GObject *) =
- ((GObjectClass *) empathy_roster_model_manager_parent_class)->constructed;
-
- if (chain_up != NULL)
- chain_up (object);
-
- g_assert (EMPATHY_IS_INDIVIDUAL_MANAGER (self->priv->manager));
-
- populate_model (self);
-
- tp_g_signal_connect_object (self->priv->manager, "members-changed",
- G_CALLBACK (members_changed_cb), self, 0);
- tp_g_signal_connect_object (self->priv->manager, "groups-changed",
- G_CALLBACK (groups_changed_cb), self, 0);
- tp_g_signal_connect_object (self->priv->manager, "notify::top-individuals",
- G_CALLBACK (top_individuals_changed_cb), self, 0);
- tp_g_signal_connect_object (self->priv->manager, "favourites-changed",
- G_CALLBACK (favourites_changed_cb), self, 0);
-}
-
-static void
-empathy_roster_model_manager_dispose (GObject *object)
-{
- EmpathyRosterModelManager *self = EMPATHY_ROSTER_MODEL_MANAGER (object);
- void (*chain_up) (GObject *) =
- ((GObjectClass *) empathy_roster_model_manager_parent_class)->dispose;
-
- g_clear_object (&self->priv->manager);
-
- if (chain_up != NULL)
- chain_up (object);
-}
-
-static void
-empathy_roster_model_manager_finalize (GObject *object)
-{
- EmpathyRosterModelManager *self = EMPATHY_ROSTER_MODEL_MANAGER (object);
- void (*chain_up) (GObject *) =
- ((GObjectClass *) empathy_roster_model_manager_parent_class)->finalize;
-
- g_list_free (self->priv->top_group_members);
-
- if (chain_up != NULL)
- chain_up (object);
-}
-
-static void
-empathy_roster_model_manager_class_init (
- EmpathyRosterModelManagerClass *klass)
-{
- GObjectClass *oclass = G_OBJECT_CLASS (klass);
- GParamSpec *spec;
-
- oclass->get_property = empathy_roster_model_manager_get_property;
- oclass->set_property = empathy_roster_model_manager_set_property;
- oclass->constructed = empathy_roster_model_manager_constructed;
- oclass->dispose = empathy_roster_model_manager_dispose;
- oclass->finalize = empathy_roster_model_manager_finalize;
-
- spec = g_param_spec_object ("manager", "Manager",
- "EmpathyIndividualManager",
- EMPATHY_TYPE_INDIVIDUAL_MANAGER,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS);
- g_object_class_install_property (oclass, PROP_MANAGER, spec);
-
- g_type_class_add_private (klass, sizeof (EmpathyRosterModelManagerPriv));
-}
-
-static void
-empathy_roster_model_manager_init (EmpathyRosterModelManager *self)
-{
- self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self,
- EMPATHY_TYPE_ROSTER_MODEL_MANAGER, EmpathyRosterModelManagerPriv);
-
- self->priv->top_group_members = NULL;
-}
-
-EmpathyRosterModelManager *
-empathy_roster_model_manager_new (EmpathyIndividualManager *manager)
-{
- g_return_val_if_fail (EMPATHY_IS_INDIVIDUAL_MANAGER (manager), NULL);
-
- return g_object_new (EMPATHY_TYPE_ROSTER_MODEL_MANAGER,
- "manager", manager,
- NULL);
-}
-
-static GList *
-empathy_roster_model_manager_get_individuals (EmpathyRosterModel *model)
-{
- EmpathyRosterModelManager *self = EMPATHY_ROSTER_MODEL_MANAGER (model);
-
- return empathy_individual_manager_get_members (self->priv->manager);
-}
-
-static GList *
-empathy_roster_model_manager_dup_groups_for_individual (
- EmpathyRosterModel *model,
- FolksIndividual *individual)
-{
- GList *groups_list = NULL;
- GeeSet *groups_set;
-
- if (is_xmpp_local_contact (individual))
- {
- groups_list = g_list_prepend (groups_list,
- g_strdup (EMPATHY_ROSTER_MODEL_GROUP_PEOPLE_NEARBY));
- return groups_list;
- }
-
- if (individual_in_top_group_members (EMPATHY_ROSTER_MODEL_MANAGER (model),
- individual))
- groups_list = g_list_prepend (groups_list,
- g_strdup (EMPATHY_ROSTER_MODEL_GROUP_TOP_GROUP));
-
- groups_set = folks_group_details_get_groups (
- FOLKS_GROUP_DETAILS (individual));
- if (gee_collection_get_size (GEE_COLLECTION (groups_set)) > 0)
- {
- GeeIterator *iter = gee_iterable_iterator (GEE_ITERABLE (groups_set));
-
- while (iter != NULL && gee_iterator_next (iter))
- {
- groups_list = g_list_prepend (groups_list, gee_iterator_get (iter));
- }
- g_clear_object (&iter);
- }
-
- return groups_list;
-}
-
-static void
-roster_model_iface_init (EmpathyRosterModelInterface *iface)
-{
- iface->get_individuals = empathy_roster_model_manager_get_individuals;
- iface->dup_groups_for_individual =
- empathy_roster_model_manager_dup_groups_for_individual;
-}
diff --git a/libempathy-gtk/empathy-roster-model-manager.h b/libempathy-gtk/empathy-roster-model-manager.h
deleted file mode 100644
index a38e6593..00000000
--- a/libempathy-gtk/empathy-roster-model-manager.h
+++ /dev/null
@@ -1,76 +0,0 @@
-/*
- * empathy-roster-model-manager.h
- *
- * Copyright (C) 2012 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
- */
-
-#ifndef __EMPATHY_ROSTER_MODEL_MANAGER_H__
-#define __EMPATHY_ROSTER_MODEL_MANAGER_H__
-
-#include <glib-object.h>
-
-#include "empathy-individual-manager.h"
-
-G_BEGIN_DECLS
-
-typedef struct _EmpathyRosterModelManager EmpathyRosterModelManager;
-typedef struct _EmpathyRosterModelManagerClass EmpathyRosterModelManagerClass;
-typedef struct _EmpathyRosterModelManagerPriv EmpathyRosterModelManagerPriv;
-
-struct _EmpathyRosterModelManagerClass
-{
- /*<private>*/
- GObjectClass parent_class;
-};
-
-struct _EmpathyRosterModelManager
-{
- /*<private>*/
- GObject parent;
- EmpathyRosterModelManagerPriv *priv;
-};
-
-GType empathy_roster_model_manager_get_type (void);
-
-/* TYPE MACROS */
-#define EMPATHY_TYPE_ROSTER_MODEL_MANAGER \
- (empathy_roster_model_manager_get_type ())
-#define EMPATHY_ROSTER_MODEL_MANAGER(obj) \
- (G_TYPE_CHECK_INSTANCE_CAST((obj), \
- EMPATHY_TYPE_ROSTER_MODEL_MANAGER, \
- EmpathyRosterModelManager))
-#define EMPATHY_ROSTER_MODEL_MANAGER_CLASS(klass) \
- (G_TYPE_CHECK_CLASS_CAST((klass), \
- EMPATHY_TYPE_ROSTER_MODEL_MANAGER, \
- EmpathyRosterModelManagerClass))
-#define EMPATHY_IS_ROSTER_MODEL_MANAGER(obj) \
- (G_TYPE_CHECK_INSTANCE_TYPE((obj), \
- EMPATHY_TYPE_ROSTER_MODEL_MANAGER))
-#define EMPATHY_IS_ROSTER_MODEL_MANAGER_CLASS(klass) \
- (G_TYPE_CHECK_CLASS_TYPE((klass), \
- EMPATHY_TYPE_ROSTER_MODEL_MANAGER))
-#define EMPATHY_ROSTER_MODEL_MANAGER_GET_CLASS(obj) \
- (G_TYPE_INSTANCE_GET_CLASS ((obj), \
- EMPATHY_TYPE_ROSTER_MODEL_MANAGER, \
- EmpathyRosterModelManagerClass))
-
-EmpathyRosterModelManager * empathy_roster_model_manager_new (
- EmpathyIndividualManager *manager);
-
-G_END_DECLS
-
-#endif /* #ifndef __EMPATHY_ROSTER_MODEL_MANAGER_H__*/
diff --git a/libempathy-gtk/empathy-roster-model.c b/libempathy-gtk/empathy-roster-model.c
deleted file mode 100644
index 994ab989..00000000
--- a/libempathy-gtk/empathy-roster-model.c
+++ /dev/null
@@ -1,136 +0,0 @@
-/*
- * empathy-roster-model.c
- *
- * Copyright (C) 2012 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
- */
-#include "config.h"
-#include "empathy-roster-model.h"
-
-G_DEFINE_INTERFACE (EmpathyRosterModel, empathy_roster_model, G_TYPE_OBJECT)
-
-enum
-{
- SIG_INDIVIDUAL_ADDED,
- SIG_INDIVIDUAL_REMOVED,
- SIG_GROUPS_CHANGED,
- LAST_SIGNAL
-};
-
-static guint signals[LAST_SIGNAL];
-
-static void
-empathy_roster_model_default_init (EmpathyRosterModelInterface *iface)
-{
- signals[SIG_INDIVIDUAL_ADDED] =
- g_signal_new ("individual-added",
- EMPATHY_TYPE_ROSTER_MODEL,
- G_SIGNAL_RUN_LAST,
- 0, NULL, NULL, NULL,
- G_TYPE_NONE, 1,
- FOLKS_TYPE_INDIVIDUAL);
-
- signals[SIG_INDIVIDUAL_REMOVED] =
- g_signal_new ("individual-removed",
- EMPATHY_TYPE_ROSTER_MODEL,
- G_SIGNAL_RUN_LAST,
- 0, NULL, NULL, NULL,
- G_TYPE_NONE, 1,
- FOLKS_TYPE_INDIVIDUAL);
-
- signals[SIG_GROUPS_CHANGED] =
- g_signal_new ("groups-changed",
- EMPATHY_TYPE_ROSTER_MODEL,
- G_SIGNAL_RUN_LAST,
- 0, NULL, NULL, NULL,
- G_TYPE_NONE, 3,
- FOLKS_TYPE_INDIVIDUAL,
- G_TYPE_STRING,
- G_TYPE_BOOLEAN);
-}
-
-/***** Restricted *****/
-
-void
-empathy_roster_model_fire_individual_added (EmpathyRosterModel *self,
- FolksIndividual *individual)
-{
- g_signal_emit (self, signals[SIG_INDIVIDUAL_ADDED], 0, individual);
-}
-
-void
-empathy_roster_model_fire_individual_removed (EmpathyRosterModel *self,
- FolksIndividual *individual)
-{
- g_signal_emit (self, signals[SIG_INDIVIDUAL_REMOVED], 0, individual);
-}
-
-void
-empathy_roster_model_fire_groups_changed (EmpathyRosterModel *self,
- FolksIndividual *individual,
- const gchar *group,
- gboolean is_member)
-{
- g_signal_emit (self, signals[SIG_GROUPS_CHANGED], 0, individual, group,
- is_member);
-}
-
-/***** Public *****/
-
-/**
- * empathy_roster_model_get_individuals:
- * @self: a #EmpathyRosterModel
- *
- * Returns all the individuals stored by @self.
- *
- * Returns: (transfer container): a #GList of #FolksIndividual
- */
-GList *
-empathy_roster_model_get_individuals (EmpathyRosterModel *self)
-{
- EmpathyRosterModelInterface *iface;
-
- g_return_val_if_fail (EMPATHY_IS_ROSTER_MODEL (self), NULL);
-
- iface = EMPATHY_ROSTER_MODEL_GET_IFACE (self);
- g_return_val_if_fail (iface->get_individuals != NULL, NULL);
-
- return (* iface->get_individuals) (self);
-}
-
-/**
- * empathy_roster_model_dup_groups_for_individual:
- * @self: a #EmpathyRosterModel
- * @individual: a #FolksIndidivual
- *
- * Returns the groups of which @individual is a member of.
- *
- * Returns: (transfer full): a #GList of (gchar *) representing the
- * groups of @individual
- */
-GList *
-empathy_roster_model_dup_groups_for_individual (EmpathyRosterModel *self,
- FolksIndividual *individual)
-{
- EmpathyRosterModelInterface *iface;
-
- g_return_val_if_fail (EMPATHY_IS_ROSTER_MODEL (self), NULL);
-
- iface = EMPATHY_ROSTER_MODEL_GET_IFACE (self);
- g_return_val_if_fail (iface->dup_groups_for_individual != NULL, NULL);
-
- return (* iface->dup_groups_for_individual) (self, individual);
-}
diff --git a/libempathy-gtk/empathy-roster-model.h b/libempathy-gtk/empathy-roster-model.h
deleted file mode 100644
index 1b35f1a1..00000000
--- a/libempathy-gtk/empathy-roster-model.h
+++ /dev/null
@@ -1,84 +0,0 @@
-/*
- * empathy-roster-model.h
- *
- * Copyright (C) 2012 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
- */
-#ifndef __EMPATHY_ROSTER_MODEL_H__
-#define __EMPATHY_ROSTER_MODEL_H__
-
-#include <folks/folks.h>
-
-G_BEGIN_DECLS
-
-#define EMPATHY_ROSTER_MODEL_GROUP_TOP_GROUP _("Top Contacts")
-#define EMPATHY_ROSTER_MODEL_GROUP_PEOPLE_NEARBY _("People Nearby")
-#define EMPATHY_ROSTER_MODEL_GROUP_UNGROUPED _("Ungrouped")
-
-typedef struct _EmpathyRosterModel EmpathyRosterModel;
-typedef struct _EmpathyRosterModelInterface EmpathyRosterModelInterface;
-
-struct _EmpathyRosterModelInterface
-{
- /*<private>*/
- GTypeInterface g_iface;
-
- /* Virtual table */
- GList * (* get_individuals) (EmpathyRosterModel *self);
- GList * (*dup_groups_for_individual) (EmpathyRosterModel *self,
- FolksIndividual *individual);
-};
-
-GType empathy_roster_model_get_type (void);
-
-/* TYPE MACROS */
-#define EMPATHY_TYPE_ROSTER_MODEL \
- (empathy_roster_model_get_type ())
-#define EMPATHY_ROSTER_MODEL(obj) \
- (G_TYPE_CHECK_INSTANCE_CAST((obj), \
- EMPATHY_TYPE_ROSTER_MODEL, \
- EmpathyRosterModel))
-#define EMPATHY_IS_ROSTER_MODEL(obj) \
- (G_TYPE_CHECK_INSTANCE_TYPE((obj), \
- EMPATHY_TYPE_ROSTER_MODEL))
-#define EMPATHY_ROSTER_MODEL_GET_IFACE(obj) \
- (G_TYPE_INSTANCE_GET_INTERFACE ((obj), \
- EMPATHY_TYPE_ROSTER_MODEL, \
- EmpathyRosterModelInterface))
-
-/* Restricted */
-
-void empathy_roster_model_fire_individual_added (EmpathyRosterModel *self,
- FolksIndividual *individual);
-
-void empathy_roster_model_fire_individual_removed (EmpathyRosterModel *self,
- FolksIndividual *individual);
-
-void empathy_roster_model_fire_groups_changed (EmpathyRosterModel *self,
- FolksIndividual *individual,
- const gchar *group,
- gboolean is_member);
-
-/* Public API */
-GList * empathy_roster_model_get_individuals (EmpathyRosterModel *self);
-
-GList * empathy_roster_model_dup_groups_for_individual (
- EmpathyRosterModel *self,
- FolksIndividual *individual);
-
-G_END_DECLS
-
-#endif /* #ifndef __EMPATHY_ROSTER_MODEL_H__*/
diff --git a/libempathy-gtk/empathy-roster-view.c b/libempathy-gtk/empathy-roster-view.c
deleted file mode 100644
index 44135106..00000000
--- a/libempathy-gtk/empathy-roster-view.c
+++ /dev/null
@@ -1,1593 +0,0 @@
-#include "config.h"
-#include "empathy-roster-view.h"
-
-#include <glib/gi18n-lib.h>
-
-#include "empathy-contact-groups.h"
-#include "empathy-roster-contact.h"
-#include "empathy-roster-group.h"
-#include "empathy-ui-utils.h"
-
-G_DEFINE_TYPE (EmpathyRosterView, empathy_roster_view, EGG_TYPE_LIST_BOX)
-
-/* Flashing delay for icons (milliseconds). */
-#define FLASH_TIMEOUT 500
-
-/* Delay in milliseconds between the last stroke on the keyboard and the start
- * of the live search. */
-#define SEARCH_TIMEOUT 500
-
-enum
-{
- PROP_MODEL = 1,
- PROP_SHOW_OFFLINE,
- PROP_SHOW_GROUPS,
- PROP_EMPTY,
- N_PROPS
-};
-
-enum
-{
- SIG_INDIVIDUAL_ACTIVATED,
- SIG_POPUP_INDIVIDUAL_MENU,
- SIG_EVENT_ACTIVATED,
- SIG_INDIVIDUAL_TOOLTIP,
- LAST_SIGNAL
-};
-
-static guint signals[LAST_SIGNAL];
-
-#define NO_GROUP "X-no-group"
-
-struct _EmpathyRosterViewPriv
-{
- /* FolksIndividual (borrowed) -> GHashTable (
- * (gchar * group_name) -> EmpathyRosterContact (borrowed))
- *
- * When not using groups, this hash just have one element mapped
- * from the special NO_GROUP key. We could use it as a set but
- * I prefer to stay coherent in the way this hash is managed.
- */
- GHashTable *roster_contacts;
- /* (gchar *group_name) -> EmpathyRosterGroup (borrowed) */
- GHashTable *roster_groups;
- /* Hash of the EmpathyRosterContact currently displayed */
- GHashTable *displayed_contacts;
-
- guint last_event_id;
- /* queue of (Event *). The most recent events are in the head of the queue
- * so we always display the icon of the oldest one. */
- GQueue *events;
- guint flash_id;
- gboolean display_flash_event;
-
- guint search_id;
-
- gboolean show_offline;
- gboolean show_groups;
- gboolean empty;
-
- TpawLiveSearch *search;
-
- EmpathyRosterModel *model;
-};
-
-/* Prototypes to break cycles */
-static void remove_from_group (EmpathyRosterView *self,
- FolksIndividual *individual,
- const gchar *group);
-
-typedef struct
-{
- guint id;
- FolksIndividual *individual;
- gchar *icon;
- gpointer user_data;
-} Event;
-
-static Event *
-event_new (guint id,
- FolksIndividual *individual,
- const gchar *icon,
- gpointer user_data)
-{
- Event *event = g_slice_new (Event);
-
- event->id = id;
- event->individual = g_object_ref (individual);
- event->icon = g_strdup (icon);
- event->user_data = user_data;
- return event;
-}
-
-static void
-event_free (gpointer data)
-{
- Event *event = data;
- g_object_unref (event->individual);
- g_free (event->icon);
-
- g_slice_free (Event, event);
-}
-
-static void
-empathy_roster_view_get_property (GObject *object,
- guint property_id,
- GValue *value,
- GParamSpec *pspec)
-{
- EmpathyRosterView *self = EMPATHY_ROSTER_VIEW (object);
-
- switch (property_id)
- {
- case PROP_MODEL:
- g_value_set_object (value, self->priv->model);
- break;
- case PROP_SHOW_OFFLINE:
- g_value_set_boolean (value, self->priv->show_offline);
- break;
- case PROP_SHOW_GROUPS:
- g_value_set_boolean (value, self->priv->show_groups);
- break;
- case PROP_EMPTY:
- g_value_set_boolean (value, self->priv->empty);
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
- break;
- }
-}
-
-static void
-empathy_roster_view_set_property (GObject *object,
- guint property_id,
- const GValue *value,
- GParamSpec *pspec)
-{
- EmpathyRosterView *self = EMPATHY_ROSTER_VIEW (object);
-
- switch (property_id)
- {
- case PROP_MODEL:
- g_assert (self->priv->model == NULL);
- self->priv->model = g_value_dup_object (value);
- break;
- case PROP_SHOW_OFFLINE:
- empathy_roster_view_show_offline (self, g_value_get_boolean (value));
- break;
- case PROP_SHOW_GROUPS:
- empathy_roster_view_show_groups (self, g_value_get_boolean (value));
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
- break;
- }
-}
-
-static void
-roster_contact_changed_cb (GtkWidget *child,
- GParamSpec *spec,
- EmpathyRosterView *self)
-{
- egg_list_box_child_changed (EGG_LIST_BOX (self), child);
-}
-
-static GtkWidget *
-add_roster_contact (EmpathyRosterView *self,
- FolksIndividual *individual,
- const gchar *group)
-{
- GtkWidget *contact;
-
- contact = empathy_roster_contact_new (individual, group);
-
- /* Need to refilter if online is changed */
- g_signal_connect (contact, "notify::online",
- G_CALLBACK (roster_contact_changed_cb), self);
-
- /* Need to resort if alias is changed */
- g_signal_connect (contact, "notify::alias",
- G_CALLBACK (roster_contact_changed_cb), self);
-
- gtk_widget_show (contact);
- gtk_container_add (GTK_CONTAINER (self), contact);
-
- return contact;
-}
-
-static void
-group_expanded_cb (EmpathyRosterGroup *group,
- GParamSpec *spec,
- EmpathyRosterView *self)
-{
- GList *widgets, *l;
-
- widgets = empathy_roster_group_get_widgets (group);
- for (l = widgets; l != NULL; l = g_list_next (l))
- {
- egg_list_box_child_changed (EGG_LIST_BOX (self), l->data);
- }
-
- g_list_free (widgets);
-
- empathy_contact_group_set_expanded (empathy_roster_group_get_name (group),
- gtk_expander_get_expanded (GTK_EXPANDER (group)));
-}
-
-static EmpathyRosterGroup *
-lookup_roster_group (EmpathyRosterView *self,
- const gchar *group)
-{
- return g_hash_table_lookup (self->priv->roster_groups, group);
-}
-
-static EmpathyRosterGroup *
-ensure_roster_group (EmpathyRosterView *self,
- const gchar *group)
-{
- GtkWidget *roster_group;
-
- roster_group = (GtkWidget *) lookup_roster_group (self, group);
- if (roster_group != NULL)
- return EMPATHY_ROSTER_GROUP (roster_group);
-
- if (!tp_strdiff (group, EMPATHY_ROSTER_MODEL_GROUP_TOP_GROUP))
- roster_group = empathy_roster_group_new (group, "emblem-favorite-symbolic");
- else if (!tp_strdiff (group, EMPATHY_ROSTER_MODEL_GROUP_PEOPLE_NEARBY))
- roster_group = empathy_roster_group_new (group, "im-local-xmpp");
- else
- roster_group = empathy_roster_group_new (group, NULL);
-
- gtk_expander_set_expanded (GTK_EXPANDER (roster_group),
- empathy_contact_group_get_expanded (group));
-
- g_signal_connect (roster_group, "notify::expanded",
- G_CALLBACK (group_expanded_cb), self);
-
- gtk_widget_show (roster_group);
- gtk_container_add (GTK_CONTAINER (self), roster_group);
-
- g_hash_table_insert (self->priv->roster_groups, g_strdup (group),
- roster_group);
-
- return EMPATHY_ROSTER_GROUP (roster_group);
-}
-
-static void
-update_empty (EmpathyRosterView *self,
- gboolean empty)
-{
- if (self->priv->empty == empty)
- return;
-
- self->priv->empty = empty;
- g_object_notify (G_OBJECT (self), "empty");
-}
-
-static gboolean filter_group (EmpathyRosterView *self,
- EmpathyRosterGroup *group);
-
-static gboolean
-at_least_one_group_displayed (EmpathyRosterView *self)
-{
- GHashTableIter iter;
- gpointer v;
-
- g_hash_table_iter_init (&iter, self->priv->roster_groups);
- while (g_hash_table_iter_next (&iter, NULL, &v))
- {
- EmpathyRosterGroup *group = EMPATHY_ROSTER_GROUP (v);
-
- if (filter_group (self, group))
- return TRUE;
- }
-
- return FALSE;
-}
-
-static void
-check_if_empty (EmpathyRosterView *self)
-{
- /* Roster is considered as empty if there is no contact *and* no group
- * currently displayed. */
- if (g_hash_table_size (self->priv->displayed_contacts) != 0 ||
- at_least_one_group_displayed (self))
- {
- update_empty (self, FALSE);
- return;
- }
-
- update_empty (self, TRUE);
-}
-
-static void
-update_group_widgets (EmpathyRosterView *self,
- EmpathyRosterGroup *group,
- EmpathyRosterContact *contact,
- gboolean add)
-{
- guint old_count, count;
-
- old_count = empathy_roster_group_get_widgets_count (group);
-
- if (add)
- count = empathy_roster_group_add_widget (group, GTK_WIDGET (contact));
- else
- count = empathy_roster_group_remove_widget (group, GTK_WIDGET (contact));
-
- if (count != old_count)
- {
- egg_list_box_child_changed (EGG_LIST_BOX (self), GTK_WIDGET (group));
-
- check_if_empty (self);
- }
-}
-
-static void
-add_to_group (EmpathyRosterView *self,
- FolksIndividual *individual,
- const gchar *group)
-{
- GtkWidget *contact;
- GHashTable *contacts;
- EmpathyRosterGroup *roster_group = NULL;
-
- contacts = g_hash_table_lookup (self->priv->roster_contacts, individual);
- if (contacts == NULL)
- return;
-
- if (g_hash_table_lookup (contacts, group) != NULL)
- return;
-
- if (tp_strdiff (group, NO_GROUP))
- roster_group = ensure_roster_group (self, group);
-
- contact = add_roster_contact (self, individual, group);
- g_hash_table_insert (contacts, g_strdup (group), contact);
-
- if (roster_group != NULL)
- {
- update_group_widgets (self, roster_group,
- EMPATHY_ROSTER_CONTACT (contact), TRUE);
- }
-
- if (tp_strdiff (group, NO_GROUP) &&
- tp_strdiff (group, EMPATHY_ROSTER_MODEL_GROUP_UNGROUPED) &&
- g_hash_table_size (contacts) == 2 /* 1:Ungrouped and 2:first group */)
- {
- remove_from_group (self, individual,
- EMPATHY_ROSTER_MODEL_GROUP_UNGROUPED);
- }
-}
-
-static void
-individual_favourite_change_cb (FolksIndividual *individual,
- GParamSpec *spec,
- EmpathyRosterView *self)
-{
- /* We may have to refilter the contact as only favorite contacts are always
- * displayed regardless of their presence. */
- GHashTable *contacts;
- GtkWidget *contact;
-
- contacts = g_hash_table_lookup (self->priv->roster_contacts, individual);
- if (contacts == NULL)
- return;
-
- if (self->priv->show_groups)
- contact = g_hash_table_lookup (contacts,
- EMPATHY_ROSTER_MODEL_GROUP_TOP_GROUP);
- else
- contact = g_hash_table_lookup (contacts, NO_GROUP);
-
- if (contact == NULL)
- return;
-
- egg_list_box_child_changed (EGG_LIST_BOX (self), contact);
-}
-
-static void
-individual_added (EmpathyRosterView *self,
- FolksIndividual *individual)
-{
- GHashTable *contacts;
-
- contacts = g_hash_table_lookup (self->priv->roster_contacts, individual);
- if (contacts != NULL)
- return;
-
- contacts = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, NULL);
-
- g_hash_table_insert (self->priv->roster_contacts, individual, contacts);
-
- if (!self->priv->show_groups)
- {
- add_to_group (self, individual, NO_GROUP);
- }
- else
- {
- GList *groups, *l;
-
- groups = empathy_roster_model_dup_groups_for_individual (self->priv->model,
- individual);
-
- if (g_list_length (groups) > 0)
- {
- for (l = groups; l != NULL; l = g_list_next (l))
- {
- add_to_group (self, individual, l->data);
- }
- }
- else
- {
- /* No group, adds to Ungrouped */
- add_to_group (self, individual, EMPATHY_ROSTER_MODEL_GROUP_UNGROUPED);
- }
-
- g_list_free_full (groups, g_free);
- }
-
- tp_g_signal_connect_object (individual, "notify::is-favourite",
- G_CALLBACK (individual_favourite_change_cb), self, 0);
-}
-
-static void
-set_event_icon_on_individual (EmpathyRosterView *self,
- FolksIndividual *individual,
- const gchar *icon)
-{
- GHashTable *contacts;
- GHashTableIter iter;
- gpointer v;
-
- contacts = g_hash_table_lookup (self->priv->roster_contacts, individual);
- if (contacts == NULL)
- return;
-
- g_hash_table_iter_init (&iter, contacts);
- while (g_hash_table_iter_next (&iter, NULL, &v))
- {
- EmpathyRosterContact *contact =v;
-
- empathy_roster_contact_set_event_icon (contact, icon);
- }
-}
-
-static void
-flash_event (Event *event,
- EmpathyRosterView *self)
-{
- set_event_icon_on_individual (self, event->individual, event->icon);
-}
-
-static void
-unflash_event (Event *event,
- EmpathyRosterView *self)
-{
- set_event_icon_on_individual (self, event->individual, NULL);
-}
-
-static gboolean
-flash_cb (gpointer data)
-{
- EmpathyRosterView *self = data;
-
- if (self->priv->display_flash_event)
- {
- g_queue_foreach (self->priv->events, (GFunc) flash_event, self);
- self->priv->display_flash_event = FALSE;
- }
- else
- {
- g_queue_foreach (self->priv->events, (GFunc) unflash_event, self);
- self->priv->display_flash_event = TRUE;
- }
-
- return TRUE;
-}
-
-static void
-start_flashing (EmpathyRosterView *self)
-{
- if (self->priv->flash_id != 0)
- return;
-
- self->priv->display_flash_event = TRUE;
-
- self->priv->flash_id = g_timeout_add (FLASH_TIMEOUT,
- flash_cb, self);
-}
-
-static void
-stop_flashing (EmpathyRosterView *self)
-{
- if (self->priv->flash_id == 0)
- return;
-
- g_source_remove (self->priv->flash_id);
- self->priv->flash_id = 0;
-}
-
-static void
-remove_event (EmpathyRosterView *self,
- Event *event)
-{
- unflash_event (event, self);
- g_queue_remove (self->priv->events, event);
-
- if (g_queue_get_length (self->priv->events) == 0)
- {
- stop_flashing (self);
- }
-}
-
-static void
-remove_all_individual_event (EmpathyRosterView *self,
- FolksIndividual *individual)
-{
- GList *l;
-
- for (l = g_queue_peek_head_link (self->priv->events); l != NULL;
- l = g_list_next (l))
- {
- Event *event = l->data;
-
- if (event->individual == individual)
- {
- remove_event (self, event);
- return;
- }
- }
-}
-
-static void
-individual_removed (EmpathyRosterView *self,
- FolksIndividual *individual)
-{
- GHashTable *contacts;
- GHashTableIter iter;
- gpointer key, value;
-
- contacts = g_hash_table_lookup (self->priv->roster_contacts, individual);
- if (contacts == NULL)
- return;
-
- remove_all_individual_event (self, individual);
-
- g_hash_table_iter_init (&iter, contacts);
- while (g_hash_table_iter_next (&iter, &key, &value))
- {
- const gchar *group_name = key;
- GtkWidget *contact = value;
- EmpathyRosterGroup *group;
-
- group = lookup_roster_group (self, group_name);
- if (group != NULL)
- {
- update_group_widgets (self, group,
- EMPATHY_ROSTER_CONTACT (contact), FALSE);
- }
-
- gtk_container_remove (GTK_CONTAINER (self), contact);
- }
-
- g_hash_table_remove (self->priv->roster_contacts, individual);
-}
-
-static void
-individual_added_cb (EmpathyRosterModel *model,
- FolksIndividual *individual,
- EmpathyRosterView *self)
-{
- individual_added (self, individual);
-}
-
-static void
-individual_removed_cb (EmpathyRosterModel *model,
- FolksIndividual *individual,
- EmpathyRosterView *self)
-{
- individual_removed (self, individual);
-}
-
-static gboolean
-contact_in_top (EmpathyRosterView *self,
- EmpathyRosterContact *contact)
-{
- if (!self->priv->show_groups)
- {
- /* Always display top contacts in non-group mode. */
- GList *groups;
- FolksIndividual *individual;
- gboolean result = FALSE;
-
- individual = empathy_roster_contact_get_individual (contact);
-
- groups = empathy_roster_model_dup_groups_for_individual (
- self->priv->model, individual);
-
- if (g_list_find_custom (groups, EMPATHY_ROSTER_MODEL_GROUP_TOP_GROUP,
- (GCompareFunc) g_strcmp0) != NULL)
- result = TRUE;
-
- g_list_free_full (groups, g_free);
-
- return result;
- }
-
- if (!tp_strdiff (empathy_roster_contact_get_group (contact),
- EMPATHY_ROSTER_MODEL_GROUP_TOP_GROUP))
- /* If we are displaying contacts, we only want to *always* display the
- * RosterContact which is displayed at the top; not the ones displayed in
- * the 'normal' group sections */
- return TRUE;
-
- return FALSE;
-}
-
-static gint
-compare_roster_contacts_by_alias (EmpathyRosterContact *a,
- EmpathyRosterContact *b)
-{
- FolksIndividual *ind_a, *ind_b;
- const gchar *alias_a, *alias_b;
-
- ind_a = empathy_roster_contact_get_individual (a);
- ind_b = empathy_roster_contact_get_individual (b);
-
- alias_a = folks_alias_details_get_alias (FOLKS_ALIAS_DETAILS (ind_a));
- alias_b = folks_alias_details_get_alias (FOLKS_ALIAS_DETAILS (ind_b));
-
- return g_utf8_collate (alias_a, alias_b);
-}
-
-static gint
-compare_roster_contacts_no_group (EmpathyRosterView *self,
- EmpathyRosterContact *a,
- EmpathyRosterContact *b)
-{
- gboolean top_a, top_b;
-
- top_a = contact_in_top (self, a);
- top_b = contact_in_top (self, b);
-
- if (top_a == top_b)
- /* Both contacts are in the top of the roster (or not). Sort them
- * alphabetically */
- return compare_roster_contacts_by_alias (a, b);
- else if (top_a)
- return -1;
- else
- return 1;
-}
-
-static gint
-compare_group_names (const gchar *group_a,
- const gchar *group_b)
-{
- if (!tp_strdiff (group_a, EMPATHY_ROSTER_MODEL_GROUP_TOP_GROUP))
- return -1;
-
- if (!tp_strdiff (group_b, EMPATHY_ROSTER_MODEL_GROUP_TOP_GROUP))
- return 1;
-
- if (!tp_strdiff (group_a, EMPATHY_ROSTER_MODEL_GROUP_UNGROUPED))
- return 1;
- else if (!tp_strdiff (group_b, EMPATHY_ROSTER_MODEL_GROUP_UNGROUPED))
- return -1;
-
- return g_utf8_collate (group_a, group_b);
-}
-
-static gint
-compare_roster_contacts_with_groups (EmpathyRosterView *self,
- EmpathyRosterContact *a,
- EmpathyRosterContact *b)
-{
- const gchar *group_a, *group_b;
-
- group_a = empathy_roster_contact_get_group (a);
- group_b = empathy_roster_contact_get_group (b);
-
- if (!tp_strdiff (group_a, group_b))
- /* Same group, compare the contacts */
- return compare_roster_contacts_by_alias (a, b);
-
- /* Sort by group */
- return compare_group_names (group_a, group_b);
-}
-
-static gint
-compare_roster_contacts (EmpathyRosterView *self,
- EmpathyRosterContact *a,
- EmpathyRosterContact *b)
-{
- if (!self->priv->show_groups)
- return compare_roster_contacts_no_group (self, a, b);
- else
- return compare_roster_contacts_with_groups (self, a, b);
-}
-
-static gint
-compare_roster_groups (EmpathyRosterGroup *a,
- EmpathyRosterGroup *b)
-{
- const gchar *name_a, *name_b;
-
- name_a = empathy_roster_group_get_name (a);
- name_b = empathy_roster_group_get_name (b);
-
- return compare_group_names (name_a, name_b);
-}
-
-static gint
-compare_contact_group (EmpathyRosterContact *contact,
- EmpathyRosterGroup *group)
-{
- const char *contact_group, *group_name;
-
- contact_group = empathy_roster_contact_get_group (contact);
- group_name = empathy_roster_group_get_name (group);
-
- if (!tp_strdiff (contact_group, group_name))
- /* @contact is in @group, @group has to be displayed first */
- return 1;
-
- /* @contact is in a different group, sort by group name */
- return compare_group_names (contact_group, group_name);
-}
-
-static gint
-roster_view_sort (gconstpointer a,
- gconstpointer b,
- gpointer user_data)
-{
- EmpathyRosterView *self = user_data;
-
- if (EMPATHY_IS_ROSTER_CONTACT (a) && EMPATHY_IS_ROSTER_CONTACT (b))
- return compare_roster_contacts (self, EMPATHY_ROSTER_CONTACT (a),
- EMPATHY_ROSTER_CONTACT (b));
- else if (EMPATHY_IS_ROSTER_GROUP (a) && EMPATHY_IS_ROSTER_GROUP (b))
- return compare_roster_groups (EMPATHY_ROSTER_GROUP (a),
- EMPATHY_ROSTER_GROUP (b));
- else if (EMPATHY_IS_ROSTER_CONTACT (a) && EMPATHY_IS_ROSTER_GROUP (b))
- return compare_contact_group (EMPATHY_ROSTER_CONTACT (a),
- EMPATHY_ROSTER_GROUP (b));
- else if (EMPATHY_IS_ROSTER_GROUP (a) && EMPATHY_IS_ROSTER_CONTACT (b))
- return -1 * compare_contact_group (EMPATHY_ROSTER_CONTACT (b),
- EMPATHY_ROSTER_GROUP (a));
-
- g_return_val_if_reached (0);
-}
-
-static void
-update_separator (GtkWidget **separator,
- GtkWidget *child,
- GtkWidget *before,
- gpointer user_data)
-{
- if (before == NULL)
- {
- /* No separator before the first row */
- g_clear_object (separator);
- return;
- }
-
- if (*separator != NULL)
- return;
-
- *separator = gtk_separator_new (GTK_ORIENTATION_HORIZONTAL);
- g_object_ref_sink (*separator);
-}
-
-static gboolean
-is_searching (EmpathyRosterView *self)
-{
- if (self->priv->search == NULL)
- return FALSE;
-
- return gtk_widget_get_visible (GTK_WIDGET (self->priv->search));
-}
-
-static void
-add_to_displayed (EmpathyRosterView *self,
- EmpathyRosterContact *contact)
-{
- FolksIndividual *individual;
- GHashTable *contacts;
- GHashTableIter iter;
- gpointer k;
-
- if (g_hash_table_lookup (self->priv->displayed_contacts, contact) != NULL)
- return;
-
- g_hash_table_add (self->priv->displayed_contacts, contact);
- update_empty (self, FALSE);
-
- /* Groups of this contact may now be displayed if we just displays the first
- * child in this group. */
-
- if (!self->priv->show_groups)
- return;
-
- individual = empathy_roster_contact_get_individual (contact);
- contacts = g_hash_table_lookup (self->priv->roster_contacts, individual);
- if (contacts == NULL)
- return;
-
- g_hash_table_iter_init (&iter, contacts);
- while (g_hash_table_iter_next (&iter, &k, NULL))
- {
- const gchar *group_name = k;
- GtkWidget *group;
-
- group = g_hash_table_lookup (self->priv->roster_groups, group_name);
- if (group == NULL)
- continue;
-
- egg_list_box_child_changed (EGG_LIST_BOX (self), group);
- }
-}
-
-static void
-remove_from_displayed (EmpathyRosterView *self,
- EmpathyRosterContact *contact)
-{
- g_hash_table_remove (self->priv->displayed_contacts, contact);
-
- check_if_empty (self);
-}
-
-static gboolean
-contact_is_favorite (EmpathyRosterContact *contact)
-{
- FolksIndividual *individual;
-
- individual = empathy_roster_contact_get_individual (contact);
-
- return folks_favourite_details_get_is_favourite (
- FOLKS_FAVOURITE_DETAILS (individual));
-}
-
-/**
- * check if @contact should be displayed according to @self's current status
- * and without consideration for the state of @contact's groups.
- */
-static gboolean
-contact_should_be_displayed (EmpathyRosterView *self,
- EmpathyRosterContact *contact)
-{
- if (is_searching (self))
- {
- FolksIndividual *individual;
-
- individual = empathy_roster_contact_get_individual (contact);
-
- return empathy_individual_match_string (individual,
- tpaw_live_search_get_text (self->priv->search),
- tpaw_live_search_get_words (self->priv->search));
- }
-
- if (self->priv->show_offline)
- return TRUE;
-
- if (contact_in_top (self, contact) &&
- contact_is_favorite (contact))
- /* Favorite top contacts are always displayed */
- return TRUE;
-
- return empathy_roster_contact_is_online (contact);
-}
-
-
-static gboolean
-filter_contact (EmpathyRosterView *self,
- EmpathyRosterContact *contact)
-{
- gboolean displayed;
-
- displayed = contact_should_be_displayed (self, contact);
-
- if (self->priv->show_groups)
- {
- const gchar *group_name;
- EmpathyRosterGroup *group;
-
- group_name = empathy_roster_contact_get_group (contact);
- group = lookup_roster_group (self, group_name);
-
- if (group != NULL)
- {
- /* When searching, always display even if the group is closed */
- if (!is_searching (self) &&
- !gtk_expander_get_expanded (GTK_EXPANDER (group)))
- displayed = FALSE;
- }
- }
-
- if (displayed)
- {
- add_to_displayed (self, contact);
- }
- else
- {
- remove_from_displayed (self, contact);
- }
-
- return displayed;
-}
-
-static gboolean
-filter_group (EmpathyRosterView *self,
- EmpathyRosterGroup *group)
-{
- GList *widgets, *l;
- gboolean result = FALSE;
-
- /* Display the group if it contains at least one displayed contact */
- widgets = empathy_roster_group_get_widgets (group);
- for (l = widgets; l != NULL; l = g_list_next (l))
- {
- EmpathyRosterContact *contact = l->data;
-
- if (contact_should_be_displayed (self, contact))
- {
- result = TRUE;
- break;
- }
- }
-
- g_list_free (widgets);
-
- return result;
-}
-
-static gboolean
-filter_list (GtkWidget *child,
- gpointer user_data)
-{
- EmpathyRosterView *self = user_data;
-
- if (EMPATHY_IS_ROSTER_CONTACT (child))
- return filter_contact (self, EMPATHY_ROSTER_CONTACT (child));
-
- else if (EMPATHY_IS_ROSTER_GROUP (child))
- return filter_group (self, EMPATHY_ROSTER_GROUP (child));
-
- g_return_val_if_reached (FALSE);
-}
-
-static void
-populate_view (EmpathyRosterView *self)
-{
- GList *individuals, *l;
-
- individuals = empathy_roster_model_get_individuals (self->priv->model);
- for (l = individuals; l != NULL; l = g_list_next (l))
- {
- FolksIndividual *individual = l->data;
-
- individual_added (self, individual);
- }
-
- g_list_free (individuals);
-}
-
-static void
-remove_from_group (EmpathyRosterView *self,
- FolksIndividual *individual,
- const gchar *group)
-{
- GHashTable *contacts;
- GtkWidget *contact;
- EmpathyRosterGroup *roster_group;
-
- contacts = g_hash_table_lookup (self->priv->roster_contacts, individual);
- if (contacts == NULL)
- return;
-
- contact = g_hash_table_lookup (contacts, group);
- if (contact == NULL)
- return;
-
- g_hash_table_remove (contacts, group);
-
- if (g_hash_table_size (contacts) == 0)
- {
- add_to_group (self, individual, EMPATHY_ROSTER_MODEL_GROUP_UNGROUPED);
- }
-
- roster_group = lookup_roster_group (self, group);
-
- if (roster_group != NULL)
- {
- update_group_widgets (self, roster_group,
- EMPATHY_ROSTER_CONTACT (contact), FALSE);
- }
-
- gtk_container_remove (GTK_CONTAINER (self), contact);
-}
-
-static void
-groups_changed_cb (EmpathyRosterModel *model,
- FolksIndividual *individual,
- const gchar *group,
- gboolean is_member,
- EmpathyRosterView *self)
-{
- if (!self->priv->show_groups)
- {
- egg_list_box_resort (EGG_LIST_BOX (self));
- return;
- }
-
- if (is_member)
- {
- add_to_group (self, individual, group);
- }
- else
- {
- remove_from_group (self, individual, group);
- }
-}
-
-static void
-empathy_roster_view_constructed (GObject *object)
-{
- EmpathyRosterView *self = EMPATHY_ROSTER_VIEW (object);
- void (*chain_up) (GObject *) =
- ((GObjectClass *) empathy_roster_view_parent_class)->constructed;
-
- if (chain_up != NULL)
- chain_up (object);
-
- g_assert (EMPATHY_IS_ROSTER_MODEL (self->priv->model));
-
- /* Get saved group states. */
- empathy_contact_groups_get_all ();
-
- populate_view (self);
-
- tp_g_signal_connect_object (self->priv->model, "individual-added",
- G_CALLBACK (individual_added_cb), self, 0);
- tp_g_signal_connect_object (self->priv->model, "individual-removed",
- G_CALLBACK (individual_removed_cb), self, 0);
- tp_g_signal_connect_object (self->priv->model, "groups-changed",
- G_CALLBACK (groups_changed_cb), self, 0);
-
- egg_list_box_set_sort_func (EGG_LIST_BOX (self),
- roster_view_sort, self, NULL);
-
- egg_list_box_set_separator_funcs (EGG_LIST_BOX (self), update_separator,
- self, NULL);
-
- egg_list_box_set_filter_func (EGG_LIST_BOX (self), filter_list, self, NULL);
-
- egg_list_box_set_activate_on_single_click (EGG_LIST_BOX (self), FALSE);
-}
-
-static void
-clear_view (EmpathyRosterView *self)
-{
- g_hash_table_remove_all (self->priv->roster_contacts);
- g_hash_table_remove_all (self->priv->roster_groups);
- g_hash_table_remove_all (self->priv->displayed_contacts);
-
- gtk_container_foreach (GTK_CONTAINER (self),
- (GtkCallback) gtk_widget_destroy, NULL);
-}
-
-static void
-empathy_roster_view_dispose (GObject *object)
-{
- EmpathyRosterView *self = EMPATHY_ROSTER_VIEW (object);
- void (*chain_up) (GObject *) =
- ((GObjectClass *) empathy_roster_view_parent_class)->dispose;
-
- /* Start by clearing the view so our internal hash tables are cleared from
- * objects being destroyed. */
- clear_view (self);
-
- stop_flashing (self);
-
- empathy_roster_view_set_live_search (self, NULL);
- g_clear_object (&self->priv->model);
-
- if (self->priv->search_id != 0)
- {
- g_source_remove (self->priv->search_id);
- self->priv->search_id = 0;
- }
-
- if (chain_up != NULL)
- chain_up (object);
-}
-
-static void
-empathy_roster_view_finalize (GObject *object)
-{
- EmpathyRosterView *self = EMPATHY_ROSTER_VIEW (object);
- void (*chain_up) (GObject *) =
- ((GObjectClass *) empathy_roster_view_parent_class)->finalize;
-
- g_hash_table_unref (self->priv->roster_contacts);
- g_hash_table_unref (self->priv->roster_groups);
- g_hash_table_unref (self->priv->displayed_contacts);
- g_queue_free_full (self->priv->events, event_free);
-
- if (chain_up != NULL)
- chain_up (object);
-}
-
-static void
-empathy_roster_view_child_activated (EggListBox *box,
- GtkWidget *child)
-{
- EmpathyRosterView *self = EMPATHY_ROSTER_VIEW (box);
- EmpathyRosterContact *contact;
- FolksIndividual *individual;
- GList *l;
-
- if (!EMPATHY_IS_ROSTER_CONTACT (child))
- return;
-
- contact = EMPATHY_ROSTER_CONTACT (child);
- individual = empathy_roster_contact_get_individual (contact);
-
- /* Activate the oldest event associated with this contact, if any */
- for (l = g_queue_peek_tail_link (self->priv->events); l != NULL;
- l = g_list_previous (l))
- {
- Event *event = l->data;
-
- if (event->individual == individual)
- {
- g_signal_emit (box, signals[SIG_EVENT_ACTIVATED], 0, individual,
- event->user_data);
- return;
- }
- }
-
- g_signal_emit (box, signals[SIG_INDIVIDUAL_ACTIVATED], 0, individual);
-}
-
-static void
-fire_popup_individual_menu (EmpathyRosterView *self,
- GtkWidget *child,
- guint button,
- guint time)
-{
- EmpathyRosterContact *contact;
- FolksIndividual *individual;
- const gchar *active_group;
-
- if (!EMPATHY_IS_ROSTER_CONTACT (child))
- return;
-
- contact = EMPATHY_ROSTER_CONTACT (child);
- individual = empathy_roster_contact_get_individual (contact);
-
- active_group = empathy_roster_contact_get_group (contact);
- g_signal_emit (self, signals[SIG_POPUP_INDIVIDUAL_MENU], 0,
- active_group, individual, button, time);
-}
-
-static gboolean
-empathy_roster_view_button_press_event (GtkWidget *widget,
- GdkEventButton *event)
-{
- EmpathyRosterView *self = EMPATHY_ROSTER_VIEW (widget);
- gboolean (*chain_up) (GtkWidget *, GdkEventButton *) =
- ((GtkWidgetClass *) empathy_roster_view_parent_class)->button_press_event;
-
- if (event->button == 3)
- {
- GtkWidget *child;
-
- child = egg_list_box_get_child_at_y (EGG_LIST_BOX (self), event->y);
-
- if (child != NULL)
- {
- egg_list_box_select_child (EGG_LIST_BOX (self), child);
-
- fire_popup_individual_menu (self, child, event->button, event->time);
- }
- }
-
- return chain_up (widget, event);
-}
-
-static gboolean
-empathy_roster_view_key_press_event (GtkWidget *widget,
- GdkEventKey *event)
-{
- EmpathyRosterView *self = EMPATHY_ROSTER_VIEW (widget);
- gboolean (*chain_up) (GtkWidget *, GdkEventKey *) =
- ((GtkWidgetClass *) empathy_roster_view_parent_class)->key_press_event;
-
- if (event->keyval == GDK_KEY_Menu)
- {
- GtkWidget *child;
-
- child = egg_list_box_get_selected_child (EGG_LIST_BOX (self));
-
- if (child != NULL)
- fire_popup_individual_menu (self, child, 0, event->time);
- }
-
- return chain_up (widget, event);
-}
-
-/**
- * @out_child: (out) (allow-none)
- */
-FolksIndividual *
-empathy_roster_view_get_individual_at_y (EmpathyRosterView *self,
- gint y,
- GtkWidget **out_child)
-{
- GtkWidget *child;
-
- child = egg_list_box_get_child_at_y (EGG_LIST_BOX (self), y);
-
- if (out_child != NULL)
- *out_child = child;
-
- if (!EMPATHY_IS_ROSTER_CONTACT (child))
- return NULL;
-
- return empathy_roster_contact_get_individual (EMPATHY_ROSTER_CONTACT (child));
-}
-
-/**
- * @out_child: (out) (allow-none)
- */
-const gchar *
-empathy_roster_view_get_group_at_y (EmpathyRosterView *self,
- gint y)
-{
- GtkWidget *child;
-
- child = egg_list_box_get_child_at_y (EGG_LIST_BOX (self), y);
-
- if (EMPATHY_IS_ROSTER_CONTACT (child))
- return empathy_roster_contact_get_group (EMPATHY_ROSTER_CONTACT (child));
- else if (EMPATHY_IS_ROSTER_GROUP (child))
- return empathy_roster_group_get_name (EMPATHY_ROSTER_GROUP (child));
-
- return NULL;
-}
-
-static gboolean
-empathy_roster_view_query_tooltip (GtkWidget *widget,
- gint x,
- gint y,
- gboolean keyboard_mode,
- GtkTooltip *tooltip)
-{
- EmpathyRosterView *self = EMPATHY_ROSTER_VIEW (widget);
- FolksIndividual *individual;
- gboolean result;
- GtkWidget *child;
-
- individual = empathy_roster_view_get_individual_at_y (self, y, &child);
- if (individual == NULL)
- return FALSE;
-
- g_signal_emit (self, signals[SIG_INDIVIDUAL_TOOLTIP], 0,
- individual, keyboard_mode, tooltip, &result);
-
- if (result)
- {
- GtkAllocation allocation;
-
- gtk_widget_get_allocation (child, &allocation);
- gtk_tooltip_set_tip_area (tooltip, (GdkRectangle *) &allocation);
- }
-
- return result;
-}
-
-static void
-empathy_roster_view_remove (GtkContainer *container,
- GtkWidget *widget)
-{
- EmpathyRosterView *self = EMPATHY_ROSTER_VIEW (container);
- void (*chain_up) (GtkContainer *, GtkWidget *) =
- ((GtkContainerClass *) empathy_roster_view_parent_class)->remove;
-
- chain_up (container, widget);
-
- if (EMPATHY_IS_ROSTER_CONTACT (widget))
- remove_from_displayed (self, (EmpathyRosterContact *) widget);
-}
-
-static void
-empathy_roster_view_class_init (
- EmpathyRosterViewClass *klass)
-{
- GObjectClass *oclass = G_OBJECT_CLASS (klass);
- EggListBoxClass *box_class = EGG_LIST_BOX_CLASS (klass);
- GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);
- GtkContainerClass *container_class = GTK_CONTAINER_CLASS (klass);
- GParamSpec *spec;
-
- oclass->get_property = empathy_roster_view_get_property;
- oclass->set_property = empathy_roster_view_set_property;
- oclass->constructed = empathy_roster_view_constructed;
- oclass->dispose = empathy_roster_view_dispose;
- oclass->finalize = empathy_roster_view_finalize;
-
- widget_class->button_press_event = empathy_roster_view_button_press_event;
- widget_class->key_press_event = empathy_roster_view_key_press_event;
- widget_class->query_tooltip = empathy_roster_view_query_tooltip;
-
- container_class->remove = empathy_roster_view_remove;
-
- box_class->child_activated = empathy_roster_view_child_activated;
-
- spec = g_param_spec_object ("model", "Model",
- "EmpathyRosterModel",
- EMPATHY_TYPE_ROSTER_MODEL,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS);
- g_object_class_install_property (oclass, PROP_MODEL, spec);
-
- spec = g_param_spec_boolean ("show-offline", "Show Offline",
- "Show offline contacts",
- FALSE,
- G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
- g_object_class_install_property (oclass, PROP_SHOW_OFFLINE, spec);
-
- spec = g_param_spec_boolean ("show-groups", "Show Groups",
- "Show groups",
- FALSE,
- G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
- g_object_class_install_property (oclass, PROP_SHOW_GROUPS, spec);
-
- spec = g_param_spec_boolean ("empty", "Empty",
- "Is the view currently empty?",
- FALSE,
- G_PARAM_READABLE | G_PARAM_STATIC_STRINGS);
- g_object_class_install_property (oclass, PROP_EMPTY, spec);
-
- signals[SIG_INDIVIDUAL_ACTIVATED] = g_signal_new ("individual-activated",
- G_OBJECT_CLASS_TYPE (klass),
- G_SIGNAL_RUN_LAST,
- 0, NULL, NULL, NULL,
- G_TYPE_NONE,
- 1, FOLKS_TYPE_INDIVIDUAL);
-
- signals[SIG_POPUP_INDIVIDUAL_MENU] = g_signal_new ("popup-individual-menu",
- G_OBJECT_CLASS_TYPE (klass),
- G_SIGNAL_RUN_LAST,
- 0, NULL, NULL, NULL,
- G_TYPE_NONE,
- 4, G_TYPE_STRING, FOLKS_TYPE_INDIVIDUAL, G_TYPE_UINT,
- G_TYPE_UINT);
-
- signals[SIG_EVENT_ACTIVATED] = g_signal_new ("event-activated",
- G_OBJECT_CLASS_TYPE (klass),
- G_SIGNAL_RUN_LAST,
- 0, NULL, NULL, NULL,
- G_TYPE_NONE,
- 2, FOLKS_TYPE_INDIVIDUAL, G_TYPE_POINTER);
-
- signals[SIG_INDIVIDUAL_TOOLTIP] = g_signal_new ("individual-tooltip",
- G_OBJECT_CLASS_TYPE (klass),
- G_SIGNAL_RUN_LAST,
- 0, g_signal_accumulator_true_handled, NULL, NULL,
- G_TYPE_BOOLEAN,
- 3, FOLKS_TYPE_INDIVIDUAL, G_TYPE_BOOLEAN, GTK_TYPE_TOOLTIP);
-
- g_type_class_add_private (klass, sizeof (EmpathyRosterViewPriv));
-}
-
-static void
-empathy_roster_view_init (EmpathyRosterView *self)
-{
- self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self,
- EMPATHY_TYPE_ROSTER_VIEW, EmpathyRosterViewPriv);
-
- self->priv->roster_contacts = g_hash_table_new_full (NULL, NULL,
- NULL, (GDestroyNotify) g_hash_table_unref);
- self->priv->roster_groups = g_hash_table_new_full (g_str_hash, g_str_equal,
- g_free, NULL);
- self->priv->displayed_contacts = g_hash_table_new (NULL, NULL);
-
- self->priv->events = g_queue_new ();
-
- self->priv->empty = TRUE;
-}
-
-GtkWidget *
-empathy_roster_view_new (EmpathyRosterModel *model)
-{
- g_return_val_if_fail (EMPATHY_IS_ROSTER_MODEL (model), NULL);
-
- return g_object_new (EMPATHY_TYPE_ROSTER_VIEW,
- "model", model,
- NULL);
-}
-
-void
-empathy_roster_view_show_offline (EmpathyRosterView *self,
- gboolean show)
-{
- if (self->priv->show_offline == show)
- return;
-
- self->priv->show_offline = show;
- egg_list_box_refilter (EGG_LIST_BOX (self));
-
- g_object_notify (G_OBJECT (self), "show-offline");
-}
-
-void
-empathy_roster_view_show_groups (EmpathyRosterView *self,
- gboolean show)
-{
- if (self->priv->show_groups == show)
- return;
-
- self->priv->show_groups = show;
-
- /* TODO: block sort/filter? */
- clear_view (self);
- populate_view (self);
-
- g_object_notify (G_OBJECT (self), "show-groups");
-}
-
-static void
-select_first_contact (EmpathyRosterView *self)
-{
- GList *children, *l;
-
- children = gtk_container_get_children (GTK_CONTAINER (self));
- for (l = children; l != NULL; l = g_list_next (l))
- {
- GtkWidget *child = l->data;
-
- if (!gtk_widget_get_child_visible (child))
- continue;
-
- if (!EMPATHY_IS_ROSTER_CONTACT (child))
- continue;
-
- egg_list_box_select_child (EGG_LIST_BOX (self), child);
- break;
- }
-
- g_list_free (children);
-}
-
-static gboolean
-search_timeout_cb (EmpathyRosterView *self)
-{
- egg_list_box_refilter (EGG_LIST_BOX (self));
-
- select_first_contact (self);
-
- self->priv->search_id = 0;
- return G_SOURCE_REMOVE;
-}
-
-static void
-search_text_notify_cb (TpawLiveSearch *search,
- GParamSpec *pspec,
- EmpathyRosterView *self)
-{
- if (self->priv->search_id != 0)
- g_source_remove (self->priv->search_id);
-
- self->priv->search_id = g_timeout_add (SEARCH_TIMEOUT,
- (GSourceFunc) search_timeout_cb, self);
-}
-
-static void
-search_activate_cb (GtkWidget *search,
- EmpathyRosterView *self)
-{
- EggListBox *box = EGG_LIST_BOX (self);
- GtkWidget *child;
-
- child = egg_list_box_get_selected_child (box);
- if (child == NULL)
- return;
-
- empathy_roster_view_child_activated (box, child);
-}
-
-void
-empathy_roster_view_set_live_search (EmpathyRosterView *self,
- TpawLiveSearch *search)
-{
- if (self->priv->search != NULL)
- {
- g_signal_handlers_disconnect_by_func (self->priv->search,
- search_text_notify_cb, self);
- g_signal_handlers_disconnect_by_func (self->priv->search,
- search_activate_cb, self);
-
- g_clear_object (&self->priv->search);
- }
-
- if (search == NULL)
- return;
-
- self->priv->search = g_object_ref (search);
-
- g_signal_connect (self->priv->search, "notify::text",
- G_CALLBACK (search_text_notify_cb), self);
- g_signal_connect (self->priv->search, "activate",
- G_CALLBACK (search_activate_cb), self);
-}
-
-gboolean
-empathy_roster_view_is_empty (EmpathyRosterView *self)
-{
- return self->priv->empty;
-}
-
-gboolean
-empathy_roster_view_is_searching (EmpathyRosterView *self)
-{
- return (self->priv->search != NULL &&
- gtk_widget_get_visible (GTK_WIDGET (self->priv->search)));
-}
-
-/* Don't use EmpathyEvent as I prefer to keep this object not too specific to
- * Empathy's internals. */
-guint
-empathy_roster_view_add_event (EmpathyRosterView *self,
- FolksIndividual *individual,
- const gchar *icon,
- gpointer user_data)
-{
- GHashTable *contacts;
-
- contacts = g_hash_table_lookup (self->priv->roster_contacts, individual);
- if (contacts == NULL)
- return 0;
-
- self->priv->last_event_id++;
-
- g_queue_push_head (self->priv->events,
- event_new (self->priv->last_event_id, individual, icon, user_data));
-
- start_flashing (self);
-
- return self->priv->last_event_id;
-}
-
-void
-empathy_roster_view_remove_event (EmpathyRosterView *self,
- guint event_id)
-{
- GList *l;
-
- for (l = g_queue_peek_head_link (self->priv->events); l != NULL;
- l = g_list_next (l))
- {
- Event *event = l->data;
-
- if (event->id == event_id)
- {
- remove_event (self, event);
- return;
- }
- }
-}
-
-FolksIndividual *
-empathy_roster_view_get_selected_individual (EmpathyRosterView *self)
-{
- GtkWidget *child;
-
- child = egg_list_box_get_selected_child (EGG_LIST_BOX (self));
-
- if (!EMPATHY_IS_ROSTER_CONTACT (child))
- return NULL;
-
- return empathy_roster_contact_get_individual (EMPATHY_ROSTER_CONTACT (child));
-}
diff --git a/libempathy-gtk/empathy-roster-view.h b/libempathy-gtk/empathy-roster-view.h
deleted file mode 100644
index 586d75b8..00000000
--- a/libempathy-gtk/empathy-roster-view.h
+++ /dev/null
@@ -1,89 +0,0 @@
-
-#ifndef __EMPATHY_ROSTER_VIEW_H__
-#define __EMPATHY_ROSTER_VIEW_H__
-
-#include <tp-account-widgets/tpaw-live-search.h>
-
-#include "egg-list-box/egg-list-box.h"
-#include "empathy-roster-model.h"
-
-G_BEGIN_DECLS
-
-typedef struct _EmpathyRosterView EmpathyRosterView;
-typedef struct _EmpathyRosterViewClass EmpathyRosterViewClass;
-typedef struct _EmpathyRosterViewPriv EmpathyRosterViewPriv;
-
-struct _EmpathyRosterViewClass
-{
- /*<private>*/
- EggListBoxClass parent_class;
-};
-
-struct _EmpathyRosterView
-{
- /*<private>*/
- EggListBox parent;
- EmpathyRosterViewPriv *priv;
-};
-
-GType empathy_roster_view_get_type (void);
-
-/* TYPE MACROS */
-#define EMPATHY_TYPE_ROSTER_VIEW \
- (empathy_roster_view_get_type ())
-#define EMPATHY_ROSTER_VIEW(obj) \
- (G_TYPE_CHECK_INSTANCE_CAST((obj), \
- EMPATHY_TYPE_ROSTER_VIEW, \
- EmpathyRosterView))
-#define EMPATHY_ROSTER_VIEW_CLASS(klass) \
- (G_TYPE_CHECK_CLASS_CAST((klass), \
- EMPATHY_TYPE_ROSTER_VIEW, \
- EmpathyRosterViewClass))
-#define EMPATHY_IS_ROSTER_VIEW(obj) \
- (G_TYPE_CHECK_INSTANCE_TYPE((obj), \
- EMPATHY_TYPE_ROSTER_VIEW))
-#define EMPATHY_IS_ROSTER_VIEW_CLASS(klass) \
- (G_TYPE_CHECK_CLASS_TYPE((klass), \
- EMPATHY_TYPE_ROSTER_VIEW))
-#define EMPATHY_ROSTER_VIEW_GET_CLASS(obj) \
- (G_TYPE_INSTANCE_GET_CLASS ((obj), \
- EMPATHY_TYPE_ROSTER_VIEW, \
- EmpathyRosterViewClass))
-
-GtkWidget * empathy_roster_view_new (EmpathyRosterModel *model);
-
-void empathy_roster_view_show_offline (EmpathyRosterView *self,
- gboolean show);
-
-void empathy_roster_view_show_groups (EmpathyRosterView *self,
- gboolean show);
-
-void empathy_roster_view_set_live_search (EmpathyRosterView *self,
- TpawLiveSearch *search);
-
-gboolean empathy_roster_view_is_empty (EmpathyRosterView *self);
-
-gboolean empathy_roster_view_is_searching (EmpathyRosterView *self);
-
-guint empathy_roster_view_add_event (EmpathyRosterView *self,
- FolksIndividual *individual,
- const gchar *icon,
- gpointer user_data);
-
-void empathy_roster_view_remove_event (EmpathyRosterView *self,
- guint event_id);
-
-FolksIndividual * empathy_roster_view_get_individual_at_y (
- EmpathyRosterView *self,
- gint y,
- GtkWidget **out_child);
-
-const gchar * empathy_roster_view_get_group_at_y (
- EmpathyRosterView *self,
- gint y);
-
-FolksIndividual * empathy_roster_view_get_selected_individual (EmpathyRosterView *self);
-
-G_END_DECLS
-
-#endif /* #ifndef __EMPATHY_ROSTER_VIEW_H__*/
diff --git a/libempathy-gtk/empathy-search-bar.c b/libempathy-gtk/empathy-search-bar.c
deleted file mode 100644
index 3383b9a1..00000000
--- a/libempathy-gtk/empathy-search-bar.c
+++ /dev/null
@@ -1,312 +0,0 @@
-/* -*- Mode: C; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/*
- * Copyright (C) 2010 Thomas Meire <blackskad@gmail.com>
- *
- * The code contained in this file is free software; you can redistribute
- * it and/or modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either version
- * 2.1 of the License, or (at your option) any later version.
- *
- * This file is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this code; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-#include "config.h"
-#include "empathy-search-bar.h"
-
-#include <glib/gi18n-lib.h>
-#include <tp-account-widgets/tpaw-builder.h>
-#include <tp-account-widgets/tpaw-utils.h>
-
-#include "empathy-ui-utils.h"
-#include "empathy-utils.h"
-
-#define GET_PRIV(obj) EMPATHY_GET_PRIV (obj, EmpathySearchBar)
-
-G_DEFINE_TYPE (EmpathySearchBar, empathy_search_bar, GTK_TYPE_BOX);
-
-typedef struct _EmpathySearchBarPriv EmpathySearchBarPriv;
-struct _EmpathySearchBarPriv
-{
- EmpathyThemeAdium *chat_view;
-
- GtkWidget *search_entry;
-
- GtkWidget *search_match_case;
-
- GtkWidget *search_match_case_toolitem;
-
- GtkWidget *search_close;
- GtkWidget *search_previous;
- GtkWidget *search_next;
- GtkWidget *search_not_found;
-};
-
-GtkWidget *
-empathy_search_bar_new (EmpathyThemeAdium *view)
-{
- EmpathySearchBar *self = g_object_new (EMPATHY_TYPE_SEARCH_BAR, NULL);
-
- GET_PRIV (self)->chat_view = view;
-
- return GTK_WIDGET (self);
-}
-
-static void
-empathy_search_bar_update_buttons (EmpathySearchBar *self,
- gchar *search,
- gboolean match_case)
-{
- gboolean can_go_forward = FALSE;
- gboolean can_go_backward = FALSE;
-
- EmpathySearchBarPriv* priv = GET_PRIV (self);
-
- /* update previous / next buttons */
- empathy_theme_adium_find_abilities (priv->chat_view, search, match_case,
- &can_go_backward, &can_go_forward);
-
- gtk_widget_set_sensitive (priv->search_previous,
- can_go_backward && !TPAW_STR_EMPTY (search));
- gtk_widget_set_sensitive (priv->search_next,
- can_go_forward && !TPAW_STR_EMPTY (search));
-}
-
-static void
-empathy_search_bar_update (EmpathySearchBar *self)
-{
- gchar *search;
- gboolean match_case;
- EmpathySearchBarPriv *priv = GET_PRIV (self);
-
- search = gtk_editable_get_chars (GTK_EDITABLE(priv->search_entry), 0, -1);
- match_case = gtk_toggle_button_get_active (
- GTK_TOGGLE_BUTTON (priv->search_match_case));
-
- /* highlight & search */
- empathy_theme_adium_highlight (priv->chat_view, search, match_case);
-
- /* update the buttons */
- empathy_search_bar_update_buttons (self, search, match_case);
-
- g_free (search);
-}
-
-void
-empathy_search_bar_show (EmpathySearchBar *self)
-{
- EmpathySearchBarPriv *priv = GET_PRIV (self);
-
- /* update the highlighting and buttons */
- empathy_search_bar_update (self);
-
- /* grab the focus to the search entry */
- gtk_widget_grab_focus (priv->search_entry);
-
- gtk_widget_show (GTK_WIDGET (self));
-}
-
-void
-empathy_search_bar_hide (EmpathySearchBar *self)
-{
- EmpathySearchBarPriv *priv = GET_PRIV (self);
-
- empathy_theme_adium_highlight (priv->chat_view, "", FALSE);
- gtk_widget_hide (GTK_WIDGET (self));
-
- /* give the focus back to the focus-chain with the chat view */
- gtk_widget_grab_focus (GTK_WIDGET (priv->chat_view));
-}
-
-static void
-empathy_search_bar_search (EmpathySearchBar *self,
- gboolean next,
- gboolean new_search)
-{
- gchar *search;
- gboolean found;
- gboolean match_case;
- EmpathySearchBarPriv *priv;
-
- priv = GET_PRIV (self);
-
- search = gtk_editable_get_chars (GTK_EDITABLE(priv->search_entry), 0, -1);
- match_case = gtk_toggle_button_get_active (
- GTK_TOGGLE_BUTTON (priv->search_match_case));
-
- /* highlight & search */
- empathy_theme_adium_highlight (priv->chat_view, search, match_case);
- if (next)
- {
- found = empathy_theme_adium_find_next (priv->chat_view,
- search,
- new_search,
- match_case);
- }
- else
- {
- found = empathy_theme_adium_find_previous (priv->chat_view,
- search,
- new_search,
- match_case);
- }
-
- /* (don't) display the not found label */
- gtk_widget_set_visible (priv->search_not_found,
- !(found || TPAW_STR_EMPTY (search)));
-
- /* update the buttons */
- empathy_search_bar_update_buttons (self, search, match_case);
-
- g_free (search);
-}
-
-static void
-empathy_search_bar_close_cb (GtkButton *button,
- gpointer user_data)
-{
- empathy_search_bar_hide (EMPATHY_SEARCH_BAR (user_data));
-}
-
-static void
-empathy_search_bar_entry_changed (GtkEditable *entry,
- gpointer user_data)
-{
- empathy_search_bar_search (EMPATHY_SEARCH_BAR (user_data), FALSE, TRUE);
-}
-
-static gboolean
-empathy_search_bar_key_pressed (GtkWidget *widget,
- GdkEventKey *event,
- gpointer user_data)
-{
- if (event->keyval == GDK_KEY_Escape)
- {
- empathy_search_bar_hide (EMPATHY_SEARCH_BAR (widget));
- return TRUE;
- }
- return FALSE;
-}
-
-static void
-empathy_search_bar_next_cb (GtkButton *button,
- gpointer user_data)
-{
- empathy_search_bar_search (EMPATHY_SEARCH_BAR (user_data), TRUE, FALSE);
-}
-
-static void
-empathy_search_bar_previous_cb (GtkButton *button,
- gpointer user_data)
-{
- empathy_search_bar_search (EMPATHY_SEARCH_BAR (user_data), FALSE, FALSE);
-}
-
-static void
-empathy_search_bar_match_case_toggled (GtkButton *button,
- gpointer user_data)
-{
- empathy_search_bar_update (EMPATHY_SEARCH_BAR (user_data));
-}
-
-static void
-empathy_search_bar_match_case_menu_toggled (GtkWidget *check,
- gpointer user_data)
-{
- EmpathySearchBarPriv* priv = GET_PRIV ( EMPATHY_SEARCH_BAR (user_data));
- gboolean match_case;
-
- match_case = gtk_check_menu_item_get_active (GTK_CHECK_MENU_ITEM (check));
-
- gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (priv->search_match_case),
- match_case);
-}
-
-static gboolean
-empathy_searchbar_create_menu_proxy_cb (GtkToolItem *toolitem,
- gpointer user_data)
-{
- EmpathySearchBarPriv* priv = GET_PRIV ( EMPATHY_SEARCH_BAR (user_data));
- GtkWidget *checkbox_menu;
- gboolean match_case;
-
- checkbox_menu = gtk_check_menu_item_new_with_mnemonic (_("_Match case"));
- match_case = gtk_toggle_button_get_active (
- GTK_TOGGLE_BUTTON (priv->search_match_case));
- gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (checkbox_menu),
- match_case);
-
- g_signal_connect (checkbox_menu, "toggled",
- G_CALLBACK (empathy_search_bar_match_case_menu_toggled), user_data);
-
- gtk_tool_item_set_proxy_menu_item (toolitem, "menu-proxy",
- checkbox_menu);
-
- return TRUE;
-}
-
-static void
-empathy_search_bar_init (EmpathySearchBar * self)
-{
- gchar *filename;
- GtkBuilder *gui;
- GtkWidget *internal;
- EmpathySearchBarPriv *priv;
-
- priv = G_TYPE_INSTANCE_GET_PRIVATE (self, EMPATHY_TYPE_SEARCH_BAR,
- EmpathySearchBarPriv);
-
- self->priv = priv;
-
- filename = empathy_file_lookup ("empathy-search-bar.ui", "libempathy-gtk");
- gui = tpaw_builder_get_file (filename,
- "search_widget", &internal,
- "search_close", &priv->search_close,
- "search_entry", &priv->search_entry,
- "search_previous", &priv->search_previous,
- "search_next", &priv->search_next,
- "search_not_found", &priv->search_not_found,
- "search_match_case", &priv->search_match_case,
- NULL);
- g_free (filename);
-
- /* Add the signals */
- tpaw_builder_connect (gui, self,
- "search_close", "clicked", empathy_search_bar_close_cb,
- "search_entry", "changed", empathy_search_bar_entry_changed,
- "search_previous", "clicked", empathy_search_bar_previous_cb,
- "search_next", "clicked", empathy_search_bar_next_cb,
- "search_match_case", "toggled", empathy_search_bar_match_case_toggled,
- "search_match_case_toolitem", "create-menu-proxy", empathy_searchbar_create_menu_proxy_cb,
- NULL);
-
- g_signal_connect (G_OBJECT (self), "key-press-event",
- G_CALLBACK (empathy_search_bar_key_pressed), NULL);
-
- gtk_box_pack_start (GTK_BOX (self), internal, TRUE, TRUE, 0);
- gtk_widget_show_all (internal);
- gtk_widget_hide (priv->search_not_found);
- g_object_unref (gui);
-}
-
-static void
-empathy_search_bar_class_init (EmpathySearchBarClass *class)
-{
- GObjectClass *gobject_class = G_OBJECT_CLASS (class);
-
- g_type_class_add_private (gobject_class, sizeof (EmpathySearchBarPriv));
-}
-
-void
-empathy_search_bar_paste_clipboard (EmpathySearchBar *self)
-{
- EmpathySearchBarPriv *priv = GET_PRIV (self);
-
- gtk_editable_paste_clipboard (GTK_EDITABLE (priv->search_entry));
-}
diff --git a/libempathy-gtk/empathy-search-bar.h b/libempathy-gtk/empathy-search-bar.h
deleted file mode 100644
index a710965b..00000000
--- a/libempathy-gtk/empathy-search-bar.h
+++ /dev/null
@@ -1,65 +0,0 @@
-/* -*- Mode: C; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/*
- * Copyright (C) 2010 Thomas Meire <blackskad@gmail.com>
- *
- * The code contained in this file is free software; you can redistribute
- * it and/or modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either version
- * 2.1 of the License, or (at your option) any later version.
- *
- * This file is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this code; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-#ifndef __EMPATHY_SEARCH_BAR_H__
-#define __EMPATHY_SEARCH_BAR_H__
-
-#include <gtk/gtk.h>
-
-#include "empathy-theme-adium.h"
-
-G_BEGIN_DECLS
-
-#define EMPATHY_TYPE_SEARCH_BAR (empathy_search_bar_get_type ())
-#define EMPATHY_SEARCH_BAR(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), \
- EMPATHY_TYPE_SEARCH_BAR, EmpathySearchBar))
-#define EMPATHY_SEARCH_BAR_CLASS(k) (G_TYPE_CHECK_CLASS_CAST ((k), \
- EMPATHY_TYPE_SEARCH_BAR, EmpathySearchBarClass))
-#define EMPATHY_IS_SEARCH_BAR(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), \
- EMPATHY_TYPE_SEARCH_BAR))
-#define EMPATHY_IS_SEARCH_BAR_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), \
- EMPATHY_TYPE_SEARCH_BAR))
-#define EMPATHY_SEARCH_BAR_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o),\
- EMPATHY_TYPE_SEARCH_BAR, EmpathySearchBarClass))
-
-typedef struct _EmpathySearchBar EmpathySearchBar;
-typedef struct _EmpathySearchBarClass EmpathySearchBarClass;
-
-struct _EmpathySearchBar
-{
- GtkBox parent;
-
- /*<private>*/
- gpointer priv;
-};
-
-struct _EmpathySearchBarClass
-{
- GtkBoxClass parent_class;
-};
-
-GType empathy_search_bar_get_type (void) G_GNUC_CONST;
-GtkWidget * empathy_search_bar_new (EmpathyThemeAdium *view);
-void empathy_search_bar_show (EmpathySearchBar *searchbar);
-void empathy_search_bar_hide (EmpathySearchBar *searchbar);
-void empathy_search_bar_paste_clipboard (EmpathySearchBar *searchbar);
-
-G_END_DECLS
-
-#endif /* __EMPATHY_SEARCH_BAR_H__ */
diff --git a/libempathy-gtk/empathy-search-bar.ui b/libempathy-gtk/empathy-search-bar.ui
deleted file mode 100644
index cfb8eedd..00000000
--- a/libempathy-gtk/empathy-search-bar.ui
+++ /dev/null
@@ -1,134 +0,0 @@
-<?xml version="1.0"?>
-<interface>
- <requires lib="gtk+" version="2.16"/>
- <!-- interface-naming-policy project-wide -->
- <object class="GtkToolbar" id="search_widget">
- <property name="visible">True</property>
- <property name="icon_size">1</property>
- <property name="toolbar_style">GTK_TOOLBAR_BOTH_HORIZ</property>
- <child>
- <object class="GtkToolItem" id="search_entry_toolitem">
- <property name="visible">True</property>
- <child>
- <object class="GtkAlignment" id="alignment1">
- <property name="visible">True</property>
- <child>
- <object class="GtkHBox" id="hbox1">
- <property name="visible">True</property>
- <property name="spacing">6</property>
- <child>
- <object class="GtkLabel" id="search_label">
- <property name="visible">True</property>
- <property name="label" translatable="yes">Find:</property>
- </object>
- </child>
- <child>
- <object class="GtkEntry" id="search_entry">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- </object>
- </child>
- </object>
- </child>
- </object>
- </child>
- </object>
- </child>
- <child>
- <object class="GtkToolButton" id="search_previous">
- <property name="label" translatable="yes">_Previous</property>
- <property name="visible">True</property>
- <property name="is_important">True</property>
- <property name="icon_name">gtk-go-back-ltr</property>
- <property name="use_underline">True</property>
- </object>
- <packing>
- <property name="homogeneous">True</property>
- </packing>
- </child>
- <child>
- <object class="GtkToolButton" id="search_next">
- <property name="label" translatable="yes">_Next</property>
- <property name="visible">True</property>
- <property name="is_important">True</property>
- <property name="icon_name">gtk-go-forward-ltr</property>
- <property name="use_underline">True</property>
- </object>
- <packing>
- <property name="homogeneous">True</property>
- </packing>
- </child>
- <child>
- <object class="GtkToolItem" id="search_match_case_toolitem">
- <property name="visible">True</property>
- <property name="is_important">True</property>
- <child>
- <object class="GtkCheckButton" id="search_match_case">
- <property name="label" translatable="yes">Mat_ch case</property>
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="draw_indicator">True</property>
- <property name="use_underline">True</property>
- </object>
- </child>
- </object>
- <packing>
- <property name="homogeneous">True</property>
- </packing>
- </child>
- <child>
- <object class="GtkToolItem" id="search_not_found_toolitem">
- <property name="visible">True</property>
- <child>
- <object class="GtkAlignment" id="alignment2">
- <property name="visible">True</property>
- <property name="left_padding">6</property>
- <child>
- <object class="GtkHBox" id="search_not_found">
- <property name="spacing">6</property>
- <child>
- <object class="GtkImage" id="image1">
- <property name="visible">True</property>
- <property name="stock">gtk-dialog-error</property>
- </object>
- <packing>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkLabel" id="not_found_label">
- <property name="visible">True</property>
- <property name="label" translatable="yes">Phrase not found</property>
- </object>
- <packing>
- <property name="position">1</property>
- </packing>
- </child>
- </object>
- </child>
- </object>
- </child>
- </object>
- </child>
- <child>
- <object class="GtkSeparatorToolItem" id="expander1">
- <property name="visible">True</property>
- </object>
- <packing>
- <property name="expand">True</property>
- <property name="homogeneous">True</property>
- </packing>
- </child>
- <child>
- <object class="GtkToolButton" id="search_close">
- <property name="visible">True</property>
- <property name="is_important">False</property>
- <property name="stock_id">gtk-close</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="homogeneous">True</property>
- </packing>
- </child>
- </object>
-</interface>
diff --git a/libempathy-gtk/empathy-share-my-desktop.c b/libempathy-gtk/empathy-share-my-desktop.c
deleted file mode 100644
index 9c29533c..00000000
--- a/libempathy-gtk/empathy-share-my-desktop.c
+++ /dev/null
@@ -1,77 +0,0 @@
-/*
- * © 2009, Collabora Ltd
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- *
- * Authors: Arnaud Maillet <arnaud.maillet@collabora.co.uk>
- */
-
-#include "config.h"
-#include "empathy-share-my-desktop.h"
-
-#define DEBUG_FLAG EMPATHY_DEBUG_SHARE_DESKTOP
-#include "empathy-debug.h"
-
-static void
-create_tube_channel_cb (GObject *source,
- GAsyncResult *result,
- gpointer user_data)
-{
- GError *error = NULL;
-
- if (!tp_account_channel_request_create_channel_finish (
- TP_ACCOUNT_CHANNEL_REQUEST (source), result, &error))
- {
- DEBUG ("Failed to create tube channel: %s", error->message);
- g_error_free (error);
- }
-}
-
-void
-empathy_share_my_desktop_share_with_contact (EmpathyContact *contact)
-{
- TpAccountChannelRequest *req;
- GHashTable *request;
- TpContact *tp_contact;
-
- tp_contact = empathy_contact_get_tp_contact (contact);
-
- DEBUG ("Creation of ShareMyDesktop");
-
- if (!TP_IS_CONTACT (tp_contact))
- {
- DEBUG ("It's not a tp contact");
- return;
- }
-
- request = tp_asv_new (
- TP_PROP_CHANNEL_CHANNEL_TYPE, G_TYPE_STRING,
- TP_IFACE_CHANNEL_TYPE_STREAM_TUBE,
- TP_PROP_CHANNEL_TARGET_HANDLE_TYPE, G_TYPE_UINT,
- TP_HANDLE_TYPE_CONTACT,
- TP_PROP_CHANNEL_TARGET_HANDLE, G_TYPE_UINT,
- tp_contact_get_handle (tp_contact),
- TP_PROP_CHANNEL_TYPE_STREAM_TUBE_SERVICE, G_TYPE_STRING, "rfb",
- NULL);
-
- req = tp_account_channel_request_new (empathy_contact_get_account (contact),
- request, TP_USER_ACTION_TIME_CURRENT_TIME);
-
- tp_account_channel_request_create_channel_async (req, NULL, NULL,
- create_tube_channel_cb, NULL);
-
- g_object_unref (req);
- g_hash_table_unref (request);
-}
diff --git a/libempathy-gtk/empathy-share-my-desktop.h b/libempathy-gtk/empathy-share-my-desktop.h
deleted file mode 100644
index 5953e15e..00000000
--- a/libempathy-gtk/empathy-share-my-desktop.h
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
- * © 2009, Collabora Ltd
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- *
- * Authors: Arnaud Maillet <arnaud.maillet@collabora.co.uk>
- */
-
-#ifndef __EMPATHY_SHARE_MY_DESKTOP_H__
-#define __EMPATHY_SHARE_MY_DESKTOP_H__
-
-#include "empathy-contact.h"
-
-void empathy_share_my_desktop_share_with_contact (EmpathyContact *contact);
-
-#endif \ No newline at end of file
diff --git a/libempathy-gtk/empathy-smiley-manager.c b/libempathy-gtk/empathy-smiley-manager.c
deleted file mode 100644
index 44ea817b..00000000
--- a/libempathy-gtk/empathy-smiley-manager.c
+++ /dev/null
@@ -1,500 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * Copyright (C) 2007-2008 Collabora Ltd.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- *
- * Authors: Dafydd Harrie <dafydd.harries@collabora.co.uk>
- * Xavier Claessens <xclaesse@gmail.com>
- */
-
-#include "config.h"
-#include "empathy-smiley-manager.h"
-
-#include <tp-account-widgets/tpaw-pixbuf-utils.h>
-#include <tp-account-widgets/tpaw-utils.h>
-
-#include "empathy-ui-utils.h"
-#include "empathy-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;
- gchar *path;
- GSList *childrens;
-};
-
-G_DEFINE_TYPE (EmpathySmileyManager, empathy_smiley_manager, G_TYPE_OBJECT);
-
-static EmpathySmileyManager *manager_singleton = NULL;
-
-static SmileyManagerTree *
-smiley_manager_tree_new (gunichar c)
-{
- SmileyManagerTree *tree;
-
- tree = g_slice_new0 (SmileyManagerTree);
- tree->c = c;
- tree->pixbuf = NULL;
- tree->childrens = NULL;
- tree->path = 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_free (tree->path);
- g_slice_free (SmileyManagerTree, tree);
-}
-
-static EmpathySmiley *
-smiley_new (GdkPixbuf *pixbuf, const gchar *str)
-{
- EmpathySmiley *smiley;
-
- smiley = g_slice_new0 (EmpathySmiley);
- smiley->pixbuf = g_object_ref (pixbuf);
- smiley->str = g_strdup (str);
-
- return smiley;
-}
-
-static void
-smiley_free (EmpathySmiley *smiley)
-{
- 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) smiley_free, NULL);
- g_slist_free (priv->smileys);
-}
-
-static GObject *
-smiley_manager_constructor (GType type,
- guint n_props,
- GObjectConstructParam *props)
-{
- GObject *retval;
-
- if (manager_singleton) {
- retval = g_object_ref (manager_singleton);
- } else {
- retval = G_OBJECT_CLASS (empathy_smiley_manager_parent_class)->constructor
- (type, n_props, props);
-
- manager_singleton = EMPATHY_SMILEY_MANAGER (retval);
- g_object_add_weak_pointer (retval, (gpointer) &manager_singleton);
- }
-
- return retval;
-}
-
-static void
-empathy_smiley_manager_class_init (EmpathySmileyManagerClass *klass)
-{
- GObjectClass *object_class = G_OBJECT_CLASS (klass);
-
- object_class->finalize = smiley_manager_finalize;
- object_class->constructor = smiley_manager_constructor;
-
- 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;
-
- empathy_smiley_manager_load (manager);
-}
-
-EmpathySmileyManager *
-empathy_smiley_manager_dup_singleton (void)
-{
- return g_object_new (EMPATHY_TYPE_SMILEY_MANAGER, NULL);
-}
-
-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 *pixbuf,
- const gchar *str,
- const gchar *path)
-{
- 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, pixbuf, str, path);
- return;
- }
-
- child->pixbuf = g_object_ref (pixbuf);
- child->path = g_strdup (path);
-}
-
-static void
-smiley_manager_add_valist (EmpathySmileyManager *manager,
- GdkPixbuf *pixbuf,
- const gchar *path,
- const gchar *first_str,
- va_list var_args)
-{
- EmpathySmileyManagerPriv *priv = GET_PRIV (manager);
- const gchar *str;
- EmpathySmiley *smiley;
-
- for (str = first_str; str; str = va_arg (var_args, gchar*)) {
- smiley_manager_tree_insert (priv->tree, pixbuf, str, path);
- }
-
- g_object_set_data_full (G_OBJECT (pixbuf), "smiley_str",
- g_strdup (first_str), g_free);
- smiley = smiley_new (pixbuf, first_str);
- priv->smileys = g_slist_prepend (priv->smileys, smiley);
-}
-
-void
-empathy_smiley_manager_add (EmpathySmileyManager *manager,
- const gchar *icon_name,
- const gchar *first_str,
- ...)
-{
- GdkPixbuf *pixbuf;
- va_list var_args;
-
- g_return_if_fail (EMPATHY_IS_SMILEY_MANAGER (manager));
- g_return_if_fail (!TPAW_STR_EMPTY (icon_name));
- g_return_if_fail (!TPAW_STR_EMPTY (first_str));
-
- pixbuf = tpaw_pixbuf_from_icon_name (icon_name, GTK_ICON_SIZE_MENU);
- if (pixbuf) {
- gchar *path;
-
- va_start (var_args, first_str);
- path = tpaw_filename_from_icon_name (icon_name, GTK_ICON_SIZE_MENU);
- smiley_manager_add_valist (manager, pixbuf, path, first_str, var_args);
- va_end (var_args);
- g_object_unref (pixbuf);
- g_free (path);
- }
-}
-
-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-angry", "X-(", ":@", NULL);
- empathy_smiley_manager_add (manager, "face-cool", "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-laugh", ":-))", ":))", 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-sick", ":-&", ":&", 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", ":-o", ":o", NULL);
- empathy_smiley_manager_add (manager, "face-tired", "|-)", "|)", NULL);
- empathy_smiley_manager_add (manager, "face-uncertain", ":-/", ":/", NULL);
- empathy_smiley_manager_add (manager, "face-wink", ";-)", ";)", NULL);
- empathy_smiley_manager_add (manager, "face-worried", ":-S", ":S", ":-s", ":s", NULL);
-}
-
-static EmpathySmileyHit *
-smiley_hit_new (SmileyManagerTree *tree,
- guint start,
- guint end)
-{
- EmpathySmileyHit *hit;
-
- hit = g_slice_new (EmpathySmileyHit);
- hit->pixbuf = tree->pixbuf;
- hit->path = tree->path;
- hit->start = start;
- hit->end = end;
-
- return hit;
-}
-
-void
-empathy_smiley_hit_free (EmpathySmileyHit *hit)
-{
- g_return_if_fail (hit != NULL);
-
- g_slice_free (EmpathySmileyHit, hit);
-}
-
-GSList *
-empathy_smiley_manager_parse_len (EmpathySmileyManager *manager,
- const gchar *text,
- gssize len)
-{
- EmpathySmileyManagerPriv *priv = GET_PRIV (manager);
- EmpathySmileyHit *hit;
- GSList *hits = NULL;
- SmileyManagerTree *cur_tree = priv->tree;
- const gchar *cur_str;
- const gchar *start = NULL;
-
- g_return_val_if_fail (EMPATHY_IS_SMILEY_MANAGER (manager), NULL);
- g_return_val_if_fail (text != NULL, NULL);
-
- /* If len is negative, parse the string until we find '\0' */
- if (len < 0) {
- len = G_MAXSSIZE;
- }
-
- /* Parse the len first bytes of text to find smileys. Each time a smiley
- * is detected, append a EmpathySmileyHit struct to the returned list,
- * containing the smiley pixbuf and the position of the text to be
- * replaced by it.
- * cur_str is a pointer in the text showing the current position
- * of the parsing. It is always at the begining of an UTF-8 character,
- * because we support unicode smileys! For example we could want to
- * replace ™ by an image. */
-
- for (cur_str = text;
- *cur_str != '\0' && cur_str - text < len;
- cur_str = g_utf8_next_char (cur_str)) {
- SmileyManagerTree *child;
- gunichar c;
-
- c = g_utf8_get_char (cur_str);
- child = smiley_manager_tree_find_child (cur_tree, c);
-
- /* If we have a child it means c is part of a smiley */
- if (child) {
- if (cur_tree == priv->tree) {
- /* c is the first char of some smileys, keep
- * the begining position */
- start = cur_str;
- }
- cur_tree = child;
- continue;
- }
-
- /* c is not part of a smiley. let's check if we found a smiley
- * before it. */
- if (cur_tree->pixbuf != NULL) {
- /* found! */
- hit = smiley_hit_new (cur_tree, start - text,
- cur_str - text);
- hits = g_slist_prepend (hits, hit);
-
- /* c was not part of this smiley, check if a new smiley
- * start with it. */
- cur_tree = smiley_manager_tree_find_child (priv->tree, c);
- if (cur_tree) {
- start = cur_str;
- } else {
- cur_tree = priv->tree;
- }
- } else if (cur_tree != priv->tree) {
- /* We searched a smiley starting at 'start' but we ended
- * with no smiley. Look again starting from next char.
- *
- * For example ">:)" and ":(" are both valid smileys,
- * when parsing text ">:(" we first see '>' which could
- * be the start of a smiley. 'start' variable is set to
- * that position and we parse next char which is ':' and
- * is still potential smiley. Then we see '(' which is
- * NOT part of the smiley, ">:(" does not exist, so we
- * have to start again from ':' to find ":(" which is
- * correct smiley. */
- cur_str = start;
- cur_tree = priv->tree;
- }
- }
-
- /* Check if last char of the text was the end of a smiley */
- if (cur_tree->pixbuf != NULL) {
- hit = smiley_hit_new (cur_tree, start - text, cur_str - text);
- hits = g_slist_prepend (hits, hit);
- }
-
- return g_slist_reverse (hits);
-}
-
-GSList *
-empathy_smiley_manager_get_all (EmpathySmileyManager *manager)
-{
- EmpathySmileyManagerPriv *priv = GET_PRIV (manager);
-
- return priv->smileys;
-}
-
-typedef struct {
- EmpathySmileyManager *manager;
- EmpathySmiley *smiley;
- EmpathySmileyMenuFunc func;
- gpointer user_data;
-} ActivateData;
-
-static void
-smiley_menu_data_free (gpointer user_data,
- GClosure *closure)
-{
- ActivateData *data = (ActivateData *) user_data;
-
- g_object_unref (data->manager);
- g_slice_free (ActivateData, data);
-}
-
-static void
-smiley_menu_activate_cb (GtkMenuItem *menuitem,
- gpointer user_data)
-{
- ActivateData *data = (ActivateData *) user_data;
-
- data->func (data->manager, data->smiley, data->user_data);
-}
-
-GtkWidget *
-empathy_smiley_menu_new (EmpathySmileyManager *manager,
- EmpathySmileyMenuFunc func,
- gpointer user_data)
-{
- EmpathySmileyManagerPriv *priv = GET_PRIV (manager);
- GSList *l;
- GtkWidget *menu;
- gint x = 0;
- gint y = 0;
-
- g_return_val_if_fail (EMPATHY_IS_SMILEY_MANAGER (manager), NULL);
- g_return_val_if_fail (func != NULL, NULL);
-
- menu = gtk_menu_new ();
-
- for (l = priv->smileys; l; l = l->next) {
- EmpathySmiley *smiley;
- GtkWidget *item;
- GtkWidget *image;
- ActivateData *data;
-
- 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_image_menu_item_set_always_show_image (GTK_IMAGE_MENU_ITEM (item), TRUE);
-
- gtk_menu_attach (GTK_MENU (menu), item,
- x, x + 1, y, y + 1);
-
- gtk_widget_set_tooltip_text (item, smiley->str);
-
- data = g_slice_new (ActivateData);
- data->manager = g_object_ref (manager);
- data->smiley = smiley;
- data->func = func;
- data->user_data = user_data;
-
- g_signal_connect_data (item, "activate",
- G_CALLBACK (smiley_menu_activate_cb),
- data,
- smiley_menu_data_free,
- 0);
-
- if (x > 3) {
- y++;
- x = 0;
- } else {
- x++;
- }
- }
-
- gtk_widget_show_all (menu);
-
- return menu;
-}
-
diff --git a/libempathy-gtk/empathy-smiley-manager.h b/libempathy-gtk/empathy-smiley-manager.h
deleted file mode 100644
index b9e753bf..00000000
--- a/libempathy-gtk/empathy-smiley-manager.h
+++ /dev/null
@@ -1,84 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * Copyright (C) 2007-2008 Collabora Ltd.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- *
- * Authors: Dafydd Harrie <dafydd.harries@collabora.co.uk>
- * Xavier Claessens <xclaesse@gmail.com>
- */
-
-#ifndef __EMPATHY_SMILEY_MANAGER__H__
-#define __EMPATHY_SMILEY_MANAGER_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;
-
-typedef struct {
- GdkPixbuf *pixbuf; /* Pixbuf of the smiley */
- const gchar *path; /* Filename of the smiley image */
- guint start; /* text[start:end] should be replaced by pixbuf */
- guint end;
-} EmpathySmileyHit;
-
-typedef void (*EmpathySmileyMenuFunc) (EmpathySmileyManager *manager,
- EmpathySmiley *smiley,
- gpointer user_data);
-
-GType empathy_smiley_manager_get_type (void) G_GNUC_CONST;
-EmpathySmileyManager *empathy_smiley_manager_dup_singleton (void);
-void empathy_smiley_manager_load (EmpathySmileyManager *manager);
-void empathy_smiley_manager_add (EmpathySmileyManager *manager,
- const gchar *icon_name,
- const gchar *first_str,
- ...);
-GSList * empathy_smiley_manager_get_all (EmpathySmileyManager *manager);
-GSList * empathy_smiley_manager_parse_len (EmpathySmileyManager *manager,
- const gchar *text,
- gssize len);
-GtkWidget * empathy_smiley_menu_new (EmpathySmileyManager *manager,
- EmpathySmileyMenuFunc func,
- gpointer user_data);
-void empathy_smiley_hit_free (EmpathySmileyHit *hit);
-
-G_END_DECLS
-
-#endif /* __EMPATHY_SMILEY_MANAGER_H__ */
-
diff --git a/libempathy-gtk/empathy-sound-manager.c b/libempathy-gtk/empathy-sound-manager.c
deleted file mode 100644
index 3453e8f2..00000000
--- a/libempathy-gtk/empathy-sound-manager.c
+++ /dev/null
@@ -1,486 +0,0 @@
-/*
- * empathy-sound-manager.c - Various sound related utility functions.
- * Copyright (C) 2009-2010 Collabora Ltd.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-#include "config.h"
-#include "empathy-sound-manager.h"
-
-#include <glib/gi18n-lib.h>
-
-#include "empathy-gsettings.h"
-#include "empathy-presence-manager.h"
-#include "empathy-utils.h"
-
-#define DEBUG_FLAG EMPATHY_DEBUG_OTHER
-#include "empathy-debug.h"
-
-typedef struct {
- EmpathySound sound_id;
- const char * event_ca_id;
- const char * event_ca_description;
- const char * key;
-} EmpathySoundEntry;
-
-typedef struct {
- GtkWidget *widget;
- gint sound_id;
- guint play_interval;
- guint replay_timeout_id;
- EmpathySoundManager *self;
-} EmpathyRepeatableSound;
-
-/* NOTE: these entries MUST be in the same order than EmpathySound enum */
-static EmpathySoundEntry sound_entries[LAST_EMPATHY_SOUND] = {
- { EMPATHY_SOUND_MESSAGE_INCOMING, "message-new-instant",
- N_("Received an instant message"), EMPATHY_PREFS_SOUNDS_INCOMING_MESSAGE } ,
- { EMPATHY_SOUND_MESSAGE_OUTGOING, "message-sent-instant",
- N_("Sent an instant message"), EMPATHY_PREFS_SOUNDS_OUTGOING_MESSAGE } ,
- { EMPATHY_SOUND_CONVERSATION_NEW, "message-new-instant",
- N_("Incoming chat request"), EMPATHY_PREFS_SOUNDS_NEW_CONVERSATION },
- { EMPATHY_SOUND_CONTACT_CONNECTED, "service-login",
- N_("Contact connected"), EMPATHY_PREFS_SOUNDS_CONTACT_LOGIN },
- { EMPATHY_SOUND_CONTACT_DISCONNECTED, "service-logout",
- N_("Contact disconnected"), EMPATHY_PREFS_SOUNDS_CONTACT_LOGOUT },
- { EMPATHY_SOUND_ACCOUNT_CONNECTED, "service-login",
- N_("Connected to server"), EMPATHY_PREFS_SOUNDS_SERVICE_LOGIN },
- { EMPATHY_SOUND_ACCOUNT_DISCONNECTED, "service-logout",
- N_("Disconnected from server"), EMPATHY_PREFS_SOUNDS_SERVICE_LOGOUT },
- { EMPATHY_SOUND_PHONE_INCOMING, "phone-incoming-call",
- N_("Incoming voice call"), NULL },
- { EMPATHY_SOUND_PHONE_OUTGOING, "phone-outgoing-calling",
- N_("Outgoing voice call"), NULL },
- { EMPATHY_SOUND_PHONE_HANGUP, "phone-hangup",
- N_("Voice call ended"), NULL },
-};
-
-G_DEFINE_TYPE (EmpathySoundManager, empathy_sound_manager, G_TYPE_OBJECT)
-
-struct _EmpathySoundManagerPrivate
-{
- /* A hash table containing currently repeating sounds. The format is the
- * following:
- * Key: An EmpathySound
- * Value : The EmpathyRepeatableSound associated with that EmpathySound. */
- GHashTable *repeating_sounds;
- GSettings *gsettings_sound;
-};
-
-static void
-empathy_sound_manager_dispose (GObject *object)
-{
- EmpathySoundManager *self = (EmpathySoundManager *) object;
-
- tp_clear_pointer (&self->priv->repeating_sounds, g_hash_table_unref);
- tp_clear_object (&self->priv->gsettings_sound);
-
- G_OBJECT_CLASS (empathy_sound_manager_parent_class)->dispose (object);
-}
-
-static void
-empathy_sound_manager_class_init (EmpathySoundManagerClass *cls)
-{
- GObjectClass *object_class = G_OBJECT_CLASS (cls);
-
- object_class->dispose = empathy_sound_manager_dispose;
-
- g_type_class_add_private (cls, sizeof (EmpathySoundManagerPrivate));
-}
-
-static void
-empathy_sound_widget_destroyed_cb (GtkWidget *widget,
- gpointer user_data)
-{
- EmpathyRepeatableSound *repeatable_sound = user_data;
-
- /* The sound must be stopped... If it is waiting for replay, remove
- * it from hash table to cancel. Otherwise playing_finished_cb will be
- * called with an error. */
- if (repeatable_sound->replay_timeout_id != 0)
- {
- g_hash_table_remove (repeatable_sound->self->priv->repeating_sounds,
- GINT_TO_POINTER (repeatable_sound->sound_id));
- }
-}
-
-static void
-repeating_sounds_item_delete (gpointer data)
-{
- EmpathyRepeatableSound *repeatable_sound = data;
-
- if (repeatable_sound->replay_timeout_id != 0)
- g_source_remove (repeatable_sound->replay_timeout_id);
-
- if (repeatable_sound->widget != NULL)
- {
- g_signal_handlers_disconnect_by_func (repeatable_sound->widget,
- empathy_sound_widget_destroyed_cb, repeatable_sound);
- }
-
- g_object_unref (repeatable_sound->self);
-
- g_slice_free (EmpathyRepeatableSound, repeatable_sound);
-}
-
-static void
-empathy_sound_manager_init (EmpathySoundManager *self)
-{
- self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self,
- EMPATHY_TYPE_SOUND_MANAGER, EmpathySoundManagerPrivate);
-
- self->priv->repeating_sounds = g_hash_table_new_full (NULL, NULL,
- NULL, repeating_sounds_item_delete);
-
- self->priv->gsettings_sound = g_settings_new (EMPATHY_PREFS_SOUNDS_SCHEMA);
-}
-
-EmpathySoundManager *
-empathy_sound_manager_dup_singleton (void)
-{
- static EmpathySoundManager *manager = NULL;
-
- if (G_LIKELY (manager != NULL))
- return g_object_ref (manager);
-
- manager = g_object_new (EMPATHY_TYPE_SOUND_MANAGER, NULL);
-
- g_object_add_weak_pointer (G_OBJECT (manager), (gpointer *) &manager);
- return manager;
-}
-
-static gboolean
-empathy_check_available_state (void)
-{
- TpConnectionPresenceType most_available_requested_presence;
- TpAccountManager *am;
- GList *accounts;
-
- /* We cannot use tp_account_manager_get_most_available_presence() or
- * empathy_presence_manager_get_state() because it is the requested presence
- * that matters, not the current presence.
- * See https://bugzilla.gnome.org/show_bug.cgi?id=704454 */
- most_available_requested_presence = TP_CONNECTION_PRESENCE_TYPE_UNSET;
- am = tp_account_manager_dup ();
- accounts = tp_account_manager_dup_valid_accounts (am);
- while (accounts != NULL)
- {
- TpAccount *account = accounts->data;
- TpConnectionPresenceType requested_presence;
-
- requested_presence = tp_account_get_requested_presence (account,
- NULL, NULL);
-
- if (tp_connection_presence_type_cmp_availability (requested_presence,
- most_available_requested_presence) > 0)
- most_available_requested_presence = requested_presence;
-
- g_object_unref (account);
- accounts = g_list_delete_link (accounts, accounts);
- }
-
- g_object_unref (am);
-
- if (most_available_requested_presence != TP_CONNECTION_PRESENCE_TYPE_AVAILABLE &&
- most_available_requested_presence != TP_CONNECTION_PRESENCE_TYPE_UNSET)
- return FALSE;
-
- return TRUE;
-}
-
-static gboolean
-empathy_sound_pref_is_enabled (EmpathySoundManager *self,
- EmpathySound sound_id)
-{
- EmpathySoundEntry *entry;
-
- entry = &(sound_entries[sound_id]);
- g_return_val_if_fail (entry->sound_id == sound_id, FALSE);
-
- if (entry->key == NULL)
- return TRUE;
-
- if (! g_settings_get_boolean (self->priv->gsettings_sound,
- EMPATHY_PREFS_SOUNDS_ENABLED))
- return FALSE;
-
- if (!empathy_check_available_state ())
- {
- if (g_settings_get_boolean (self->priv->gsettings_sound,
- EMPATHY_PREFS_SOUNDS_DISABLED_AWAY))
- return FALSE;
- }
-
- return g_settings_get_boolean (self->priv->gsettings_sound, entry->key);
-}
-
-/**
- * empathy_sound_manager_stop:
- * @self: a #EmpathySoundManager
- * @sound_id: The #EmpathySound to stop playing.
- *
- * Stop playing a sound. If it has been stated in loop with
- * empathy_sound_start_playing(), it will also stop replaying.
- */
-void
-empathy_sound_manager_stop (EmpathySoundManager *self,
- EmpathySound sound_id)
-{
- EmpathySoundEntry *entry;
- EmpathyRepeatableSound *repeatable_sound;
-
- g_return_if_fail (sound_id < LAST_EMPATHY_SOUND);
-
- entry = &(sound_entries[sound_id]);
- g_return_if_fail (entry->sound_id == sound_id);
-
- repeatable_sound = g_hash_table_lookup (self->priv->repeating_sounds,
- GINT_TO_POINTER (sound_id));
- if (repeatable_sound != NULL)
- {
- /* The sound must be stopped... If it is waiting for replay, remove
- * it from hash table to cancel. Otherwise we'll cancel the sound
- * being played. */
- if (repeatable_sound->replay_timeout_id != 0)
- {
- g_hash_table_remove (self->priv->repeating_sounds,
- GINT_TO_POINTER (sound_id));
- return;
- }
- }
-
- ca_context_cancel (ca_gtk_context_get (), entry->sound_id);
-}
-
-static gboolean
-empathy_sound_play_internal (GtkWidget *widget, EmpathySound sound_id,
- ca_finish_callback_t callback, gpointer user_data)
-{
- EmpathySoundEntry *entry;
- ca_context *c;
- ca_proplist *p = NULL;
-
- entry = &(sound_entries[sound_id]);
- g_return_val_if_fail (entry->sound_id == sound_id, FALSE);
-
- c = ca_gtk_context_get ();
- ca_context_cancel (c, entry->sound_id);
-
- DEBUG ("Play sound \"%s\" (%s)",
- entry->event_ca_id,
- entry->event_ca_description);
-
- if (ca_proplist_create (&p) < 0)
- goto failed;
-
- if (ca_proplist_sets (p, CA_PROP_EVENT_ID, entry->event_ca_id) < 0)
- goto failed;
-
- if (ca_proplist_sets (p, CA_PROP_EVENT_DESCRIPTION,
- gettext (entry->event_ca_description)) < 0)
- goto failed;
-
- if (widget != NULL)
- {
- if (ca_gtk_proplist_set_for_widget (p, widget) < 0)
- goto failed;
- }
-
- ca_context_play_full (ca_gtk_context_get (), entry->sound_id, p, callback,
- user_data);
-
- ca_proplist_destroy (p);
-
- return TRUE;
-
-failed:
- if (p != NULL)
- ca_proplist_destroy (p);
-
- return FALSE;
-}
-
-/**
- * empathy_sound_manager_play_full:
- * @self: a #EmpathySoundManager
- * @widget: The #GtkWidget from which the sound is originating.
- * @sound_id: The #EmpathySound to play.
- * @callback: The #ca_finish_callback_t function that will be called when the
- * sound has stopped playing.
- * @user_data: user data to pass to the function.
- *
- * Plays a sound.
- *
- * Returns %TRUE if the sound has successfully started playing, otherwise
- * returning %FALSE and @callback won't be called.
- *
- * This function returns %FALSE if the sound is already playing in loop using
- * %empathy_sound_start_playing.
- *
- * This function returns %FALSE if the sound is disabled in empathy preferences.
- *
- * Return value: %TRUE if the sound has successfully started playing, %FALSE
- * otherwise.
- */
-gboolean
-empathy_sound_manager_play_full (EmpathySoundManager *self,
- GtkWidget *widget,
- EmpathySound sound_id,
- ca_finish_callback_t callback,
- gpointer user_data)
-{
- g_return_val_if_fail (widget == NULL || GTK_IS_WIDGET (widget), FALSE);
- g_return_val_if_fail (sound_id < LAST_EMPATHY_SOUND, FALSE);
-
- if (!empathy_sound_pref_is_enabled (self, sound_id))
- return FALSE;
-
- /* The sound might already be playing repeatedly. If it's the case, we
- * immediadely return since there's no need to make it play again */
- if (g_hash_table_lookup (self->priv->repeating_sounds,
- GINT_TO_POINTER (sound_id)) != NULL)
- return FALSE;
-
- return empathy_sound_play_internal (widget, sound_id, callback, user_data);
-}
-
-/**
- * empathy_sound_manager_play:
- * @self: a #EmpathySoundManager
- * @widget: The #GtkWidget from which the sound is originating.
- * @sound_id: The #EmpathySound to play.
- *
- * Plays a sound. See %empathy_sound_manager_play_full for details.'
- *
- * Return value: %TRUE if the sound has successfully started playing, %FALSE
- * otherwise.
- */
-gboolean
-empathy_sound_manager_play (EmpathySoundManager *self,
- GtkWidget *widget,
- EmpathySound sound_id)
-{
- g_return_val_if_fail (widget == NULL || GTK_IS_WIDGET (widget), FALSE);
- g_return_val_if_fail (sound_id < LAST_EMPATHY_SOUND, FALSE);
-
- return empathy_sound_manager_play_full (self, widget, sound_id, NULL, NULL);
-}
-
-static void playing_finished_cb (ca_context *c, guint id, int error_code,
- gpointer user_data);
-
-static gboolean
-playing_timeout_cb (gpointer data)
-{
- EmpathyRepeatableSound *repeatable_sound = data;
- gboolean playing;
-
- repeatable_sound->replay_timeout_id = 0;
-
- playing = empathy_sound_play_internal (repeatable_sound->widget,
- repeatable_sound->sound_id, playing_finished_cb, data);
-
- if (!playing)
- {
- DEBUG ("Failed to replay sound, stop repeating");
- g_hash_table_remove (repeatable_sound->self->priv->repeating_sounds,
- GINT_TO_POINTER (repeatable_sound->sound_id));
- }
-
- return FALSE;
-}
-
-static void
-playing_finished_cb (ca_context *c, guint id, int error_code,
- gpointer user_data)
-{
- EmpathyRepeatableSound *repeatable_sound = user_data;
-
- if (error_code != CA_SUCCESS)
- {
- DEBUG ("Error: %s", ca_strerror (error_code));
- g_hash_table_remove (repeatable_sound->self->priv->repeating_sounds,
- GINT_TO_POINTER (repeatable_sound->sound_id));
- return;
- }
-
- repeatable_sound->replay_timeout_id = g_timeout_add (
- repeatable_sound->play_interval, playing_timeout_cb, user_data);
-}
-
-/**
- * empathy_sound_manager_start_playing:
- * @self: a #EmpathySoundManager
- * @widget: The #GtkWidget from which the sound is originating.
- * @sound_id: The #EmpathySound to play.
- * @timeout_before_replay: The amount of time, in milliseconds, between two
- * consecutive play.
- *
- * Start playing a sound in loop. To stop the sound, call empathy_call_stop ()
- * by passing it the same @sound_id. Note that if you start playing a sound
- * multiple times, you'll have to call %empathy_sound_stop the same number of
- * times.
- *
- * Return value: %TRUE if the sound has successfully started playing.
- */
-gboolean
-empathy_sound_manager_start_playing (EmpathySoundManager *self,
- GtkWidget *widget,
- EmpathySound sound_id,
- guint timeout_before_replay)
-{
- EmpathyRepeatableSound *repeatable_sound;
- gboolean playing = FALSE;
-
- g_return_val_if_fail (widget == NULL || GTK_IS_WIDGET (widget), FALSE);
- g_return_val_if_fail (sound_id < LAST_EMPATHY_SOUND, FALSE);
-
- if (!empathy_sound_pref_is_enabled (self, sound_id))
- return FALSE;
-
- if (g_hash_table_lookup (self->priv->repeating_sounds,
- GINT_TO_POINTER (sound_id)) != NULL)
- {
- /* The sound is already playing in loop. No need to continue. */
- return FALSE;
- }
-
- repeatable_sound = g_slice_new0 (EmpathyRepeatableSound);
- repeatable_sound->widget = widget;
- repeatable_sound->sound_id = sound_id;
- repeatable_sound->play_interval = timeout_before_replay;
- repeatable_sound->replay_timeout_id = 0;
- repeatable_sound->self = g_object_ref (self);
-
- g_hash_table_insert (self->priv->repeating_sounds, GINT_TO_POINTER (sound_id),
- repeatable_sound);
-
- if (widget != NULL)
- {
- g_signal_connect (G_OBJECT (widget), "destroy",
- G_CALLBACK (empathy_sound_widget_destroyed_cb),
- repeatable_sound);
- }
-
- playing = empathy_sound_play_internal (widget, sound_id, playing_finished_cb,
- repeatable_sound);
-
- if (!playing)
- g_hash_table_remove (self->priv->repeating_sounds,
- GINT_TO_POINTER (sound_id));
-
- return playing;
-}
diff --git a/libempathy-gtk/empathy-sound-manager.h b/libempathy-gtk/empathy-sound-manager.h
deleted file mode 100644
index b2fd0d29..00000000
--- a/libempathy-gtk/empathy-sound-manager.h
+++ /dev/null
@@ -1,89 +0,0 @@
-/*
- * empathy-sound-manager.h - Various sound related utility functions.
- * Copyright (C) 2009 Collabora Ltd.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-
-#ifndef __EMPATHY_SOUND_MANAGER_H__
-#define __EMPATHY_SOUND_MANAGER_H__
-
-#include <canberra-gtk.h>
-
-G_BEGIN_DECLS
-
-/* NOTE: Keep this sync with sound_entries in empathy-sound-manager.c */
-typedef enum {
- EMPATHY_SOUND_MESSAGE_INCOMING = 0,
- EMPATHY_SOUND_MESSAGE_OUTGOING,
- EMPATHY_SOUND_CONVERSATION_NEW,
- EMPATHY_SOUND_CONTACT_CONNECTED,
- EMPATHY_SOUND_CONTACT_DISCONNECTED,
- EMPATHY_SOUND_ACCOUNT_CONNECTED,
- EMPATHY_SOUND_ACCOUNT_DISCONNECTED,
- EMPATHY_SOUND_PHONE_INCOMING,
- EMPATHY_SOUND_PHONE_OUTGOING,
- EMPATHY_SOUND_PHONE_HANGUP,
- LAST_EMPATHY_SOUND,
-} EmpathySound;
-
-#define EMPATHY_TYPE_SOUND_MANAGER (empathy_sound_manager_get_type ())
-#define EMPATHY_SOUND_MANAGER(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), EMPATHY_TYPE_SOUND_MANAGER, EmpathySoundManager))
-#define EMPATHY_SOUND_MANAGER_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), EMPATHY_TYPE_SOUND_MANAGER, EmpathySoundManagerClass))
-#define EMPATHY_IS_SOUND_MANAGER(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), EMPATHY_TYPE_SOUND_MANAGER))
-#define EMPATHY_IS_SOUND_MANAGER_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), EMPATHY_TYPE_SOUND_MANAGER))
-#define EMPATHY_SOUND_MANAGER_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), EMPATHY_TYPE_SOUND_MANAGER, EmpathySoundManagerClass))
-
-typedef struct _EmpathySoundManager EmpathySoundManager;
-typedef struct _EmpathySoundManagerClass EmpathySoundManagerClass;
-typedef struct _EmpathySoundManagerPrivate EmpathySoundManagerPrivate;
-
-struct _EmpathySoundManager
-{
- GObject parent;
- EmpathySoundManagerPrivate *priv;
-};
-
-struct _EmpathySoundManagerClass
-{
- GObjectClass parent_class;
-};
-
-GType empathy_sound_manager_get_type (void) G_GNUC_CONST;
-
-EmpathySoundManager * empathy_sound_manager_dup_singleton (void);
-
-gboolean empathy_sound_manager_play (EmpathySoundManager *self,
- GtkWidget *widget,
- EmpathySound sound_id);
-
-void empathy_sound_manager_stop (EmpathySoundManager *self,
- EmpathySound sound_id);
-
-gboolean empathy_sound_manager_start_playing (EmpathySoundManager *self,
- GtkWidget *widget,
- EmpathySound sound_id,
- guint timeout_before_replay);
-
-gboolean empathy_sound_manager_play_full (EmpathySoundManager *self,
- GtkWidget *widget,
- EmpathySound sound_id,
- ca_finish_callback_t callback,
- gpointer user_data);
-
-G_END_DECLS
-
-#endif /* #ifndef __EMPATHY_SOUND_MANAGER_H__ */
diff --git a/libempathy-gtk/empathy-spell.c b/libempathy-gtk/empathy-spell.c
deleted file mode 100644
index 27f27f90..00000000
--- a/libempathy-gtk/empathy-spell.c
+++ /dev/null
@@ -1,500 +0,0 @@
-/* -*- 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., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301 USA
- *
- * Authors: Martyn Russell <martyn@imendio.com>
- * Richard Hult <richard@imendio.com>
- */
-
-#include "config.h"
-#include "empathy-spell.h"
-
-#include <glib/gi18n-lib.h>
-
-#ifdef HAVE_ENCHANT
-#include <enchant.h>
-#endif
-
-#include "empathy-gsettings.h"
-
-#define DEBUG_FLAG EMPATHY_DEBUG_OTHER
-#include "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"
-
-/* Language code (gchar *) -> language name (gchar *) */
-static GHashTable *iso_code_names = NULL;
-/* Contains only _enabled_ languages
- * Language code (gchar *) -> language (SpellLanguage *) */
-static GHashTable *languages = NULL;
-
-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 (GSettings *gsettings,
- const gchar *key,
- gpointer user_data)
-{
- DEBUG ("Resetting languages due to config change");
-
- /* We just reset the languages list. */
- if (languages != NULL) {
- g_hash_table_unref (languages);
- languages = NULL;
- }
-}
-
-static void
-empathy_spell_free_language (SpellLanguage *lang)
-{
- enchant_broker_free_dict (lang->config, lang->speller);
- enchant_broker_free (lang->config);
-
- g_slice_free (SpellLanguage, lang);
-}
-
-static void
-spell_setup_languages (void)
-{
- static GSettings *gsettings = NULL;
- gchar *str;
-
- if (gsettings == NULL) {
- /* FIXME: this is never uninitialised */
- gsettings = g_settings_new (EMPATHY_PREFS_CHAT_SCHEMA);
-
- g_signal_connect (gsettings,
- "changed::" EMPATHY_PREFS_CHAT_SPELL_CHECKER_LANGUAGES,
- G_CALLBACK (spell_notify_languages_cb), NULL);
- }
-
- if (languages) {
- return;
- }
-
- languages = g_hash_table_new_full (g_str_hash, g_str_equal,
- g_free, (GDestroyNotify) empathy_spell_free_language);
-
- str = g_settings_get_string (gsettings,
- EMPATHY_PREFS_CHAT_SPELL_CHECKER_LANGUAGES);
-
- if (str != NULL) {
- 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]);
-
- if (lang->speller == NULL) {
- DEBUG ("language '%s' has no valid dict", strv[i]);
- } else {
- g_hash_table_insert (languages,
- g_strdup (strv[i]),
- 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, 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;
-}
-
-GList *
-empathy_spell_get_enabled_language_codes (void)
-{
- spell_setup_languages ();
- return g_hash_table_get_keys (languages);
-}
-
-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;
- GHashTableIter iter;
- SpellLanguage *lang;
-
- g_return_val_if_fail (word != NULL, FALSE);
-
- spell_setup_languages ();
-
- if (!languages) {
- 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);
- g_hash_table_iter_init (&iter, languages);
- while (g_hash_table_iter_next (&iter, NULL, (gpointer *) &lang)) {
- 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 *code,
- const gchar *word)
-{
- gint len;
- GList *suggestion_list = NULL;
- SpellLanguage *lang;
- gchar **suggestions;
- gsize i, number_of_suggestions;
-
- g_return_val_if_fail (code != NULL, NULL);
- g_return_val_if_fail (word != NULL, NULL);
-
- spell_setup_languages ();
-
- if (!languages) {
- return NULL;
- }
-
- len = strlen (word);
-
- lang = g_hash_table_lookup (languages, code);
- if (!lang) {
- return NULL;
- }
-
- 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;
-}
-
-void
-empathy_spell_add_to_dictionary (const gchar *code,
- const gchar *word)
-{
- SpellLanguage *lang;
-
- g_return_if_fail (code != NULL);
- g_return_if_fail (word != NULL);
-
- spell_setup_languages ();
- if (languages == NULL)
- return;
-
- lang = g_hash_table_lookup (languages, code);
- if (lang == NULL)
- return;
-
- enchant_dict_add_to_pwl (lang->speller, word, strlen (word));
-}
-
-#else /* not HAVE_ENCHANT */
-
-gboolean
-empathy_spell_supported (void)
-{
- return FALSE;
-}
-
-GList *
-empathy_spell_get_suggestions (const gchar *code,
- 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)
-{
-}
-
-void
-empathy_spell_add_to_dictionary (const gchar *code,
- const gchar *word)
-{
- DEBUG ("Support disabled, could not expand the dictionary");
-}
-
-GList *
-empathy_spell_get_enabled_language_codes (void)
-{
- DEBUG ("Support disabled, could not get enabled language codes");
-
- return NULL;
-}
-
-#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/libempathy-gtk/empathy-spell.h b/libempathy-gtk/empathy-spell.h
deleted file mode 100644
index ebce1aef..00000000
--- a/libempathy-gtk/empathy-spell.h
+++ /dev/null
@@ -1,45 +0,0 @@
-/* -*- 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., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301 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);
-GList *empathy_spell_get_enabled_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 *code,
- const gchar *word);
-void empathy_spell_free_suggestions (GList *suggestions);
-void empathy_spell_add_to_dictionary (const gchar *code,
- const gchar *word);
-
-G_END_DECLS
-
-#endif /* __EMPATHY_SPELL_H__ */
diff --git a/libempathy-gtk/empathy-status-preset-dialog.c b/libempathy-gtk/empathy-status-preset-dialog.c
deleted file mode 100644
index f487b8cc..00000000
--- a/libempathy-gtk/empathy-status-preset-dialog.c
+++ /dev/null
@@ -1,357 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * empathy-status-preset-dialog.c
- *
- * EmpathyStatusPresetDialog - a dialog for adding and removing preset status
- * messages.
- *
- * Copyright (C) 2009 Collabora Ltd.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301 USA
- *
- * Authors: Danielle Madeley <danielle.madeley@collabora.co.uk>
- */
-/**
- * SECTION:empathy-status-preset-dialog
- * @title: EmpathyStatusPresetDialog
- * @short_description: a dialog for editing the saved status messages
- * @include: libempathy-gtk/empathy-status-preset-dialog.h
- *
- * #EmpathyStatusPresetDialog is a dialog allowing the user to add/remove/edit
- * their saved status messages.
- */
-
-#include "config.h"
-#include "empathy-status-preset-dialog.h"
-
-#include <glib/gi18n-lib.h>
-#include <tp-account-widgets/tpaw-builder.h>
-
-#include "empathy-status-presets.h"
-#include "empathy-ui-utils.h"
-#include "empathy-utils.h"
-
-#define DEBUG_FLAG EMPATHY_DEBUG_OTHER
-#include "empathy-debug.h"
-
-#define GET_PRIV(obj) EMPATHY_GET_PRIV (obj, EmpathyStatusPresetDialog)
-
-G_DEFINE_TYPE (EmpathyStatusPresetDialog, empathy_status_preset_dialog, GTK_TYPE_DIALOG);
-
-static TpConnectionPresenceType states[] = {
- TP_CONNECTION_PRESENCE_TYPE_AVAILABLE,
- TP_CONNECTION_PRESENCE_TYPE_BUSY,
- TP_CONNECTION_PRESENCE_TYPE_AWAY,
-};
-
-typedef struct _EmpathyStatusPresetDialogPriv EmpathyStatusPresetDialogPriv;
-struct _EmpathyStatusPresetDialogPriv
-{
- /* block status_preset_dialog_add_combo_changed () when > 0 */
- int block_add_combo_changed;
-
- GtkWidget *presets_treeview;
- GtkTreeViewColumn *column;
- GtkCellRenderer *text_cell;
-
- GtkTreeIter selected_iter;
- gboolean add_combo_changed;
- char *saved_status;
-};
-
-enum
-{
- PRESETS_STORE_STATE,
- PRESETS_STORE_ICON_NAME,
- PRESETS_STORE_STATUS,
- PRESETS_STORE_N_COLS
-};
-
-enum
-{
- ADD_COMBO_STATE,
- ADD_COMBO_ICON_NAME,
- ADD_COMBO_STATUS,
- ADD_COMBO_DEFAULT_TEXT,
- ADD_COMBO_N_COLS
-};
-
-static void
-empathy_status_preset_dialog_finalize (GObject *self)
-{
- EmpathyStatusPresetDialogPriv *priv = GET_PRIV (self);
-
- g_free (priv->saved_status);
-
- G_OBJECT_CLASS (empathy_status_preset_dialog_parent_class)->finalize (self);
-}
-
-static void
-empathy_status_preset_dialog_class_init (EmpathyStatusPresetDialogClass *class)
-{
- GObjectClass *gobject_class;
-
- gobject_class = G_OBJECT_CLASS (class);
- gobject_class->finalize = empathy_status_preset_dialog_finalize;
-
- g_type_class_add_private (gobject_class,
- sizeof (EmpathyStatusPresetDialogPriv));
-}
-
-static void
-status_preset_dialog_presets_update (EmpathyStatusPresetDialog *self)
-{
- EmpathyStatusPresetDialogPriv *priv = GET_PRIV (self);
- GtkListStore *store;
- guint i;
-
- store = GTK_LIST_STORE (gtk_tree_view_get_model (
- GTK_TREE_VIEW (priv->presets_treeview)));
-
- gtk_list_store_clear (store);
-
- for (i = 0; i < G_N_ELEMENTS (states); i++) {
- GList *presets, *l;
- const char *icon_name;
-
- icon_name = empathy_icon_name_for_presence (states[i]);
- presets = empathy_status_presets_get (states[i], -1);
- presets = g_list_sort (presets, (GCompareFunc) g_utf8_collate);
-
- for (l = presets; l; l = l->next) {
- char *preset = (char *) l->data;
-
- gtk_list_store_insert_with_values (store,
- NULL, -1,
- PRESETS_STORE_STATE, states[i],
- PRESETS_STORE_ICON_NAME, icon_name,
- PRESETS_STORE_STATUS, preset,
- -1);
- }
-
- g_list_free (presets);
- }
-}
-
-static void
-status_preset_dialog_status_edited (GtkCellRendererText *renderer,
- char *path_str,
- char *new_status,
- EmpathyStatusPresetDialog *self)
-{
- EmpathyStatusPresetDialogPriv *priv = GET_PRIV (self);
- GtkTreeModel *model;
- GtkTreePath *path;
- GtkTreeIter iter;
- TpConnectionPresenceType state;
- char *old_status;
- gboolean valid;
-
- if (strlen (new_status) == 0) {
- /* status is empty, ignore */
- return;
- }
-
- model = gtk_tree_view_get_model (GTK_TREE_VIEW (priv->presets_treeview));
- path = gtk_tree_path_new_from_string (path_str);
- valid = gtk_tree_model_get_iter (model, &iter, path);
- gtk_tree_path_free (path);
-
- if (!valid) return;
-
- gtk_tree_model_get (model, &iter,
- PRESETS_STORE_STATE, &state,
- PRESETS_STORE_STATUS, &old_status,
- -1);
-
- if (!strcmp (old_status, new_status)) {
- /* statuses are the same */
- g_free (old_status);
- return;
- }
-
- DEBUG ("EDITED STATUS (%s) -> (%s)\n", old_status, new_status);
-
- empathy_status_presets_remove (state, old_status);
- empathy_status_presets_set_last (state, new_status);
-
- g_free (old_status);
-
- status_preset_dialog_presets_update (self);
-}
-
-static void
-status_preset_dialog_setup_presets_treeview (EmpathyStatusPresetDialog *self)
-{
- EmpathyStatusPresetDialogPriv *priv = GET_PRIV (self);
- GtkWidget *treeview = priv->presets_treeview;
- GtkListStore *store;
- GtkTreeViewColumn *column;
- GtkCellRenderer *renderer;
-
- store = gtk_list_store_new (PRESETS_STORE_N_COLS,
- G_TYPE_UINT, /* PRESETS_STORE_STATE */
- G_TYPE_STRING, /* PRESETS_STORE_ICON_NAME */
- G_TYPE_STRING); /* PRESETS_STORE_STATUS */
-
- gtk_tree_view_set_model (GTK_TREE_VIEW (treeview),
- GTK_TREE_MODEL (store));
- g_object_unref (store);
-
- status_preset_dialog_presets_update (self);
-
- column = gtk_tree_view_column_new ();
- priv->column = column;
- gtk_tree_view_append_column (GTK_TREE_VIEW (treeview), column);
-
- renderer = gtk_cell_renderer_pixbuf_new ();
- gtk_tree_view_column_pack_start (column, renderer, FALSE);
- gtk_tree_view_column_add_attribute (column, renderer,
- "icon-name", PRESETS_STORE_ICON_NAME);
-
- renderer = gtk_cell_renderer_text_new ();
- priv->text_cell = renderer;
- gtk_tree_view_column_pack_start (column, renderer, TRUE);
- gtk_tree_view_column_add_attribute (column, renderer,
- "text", PRESETS_STORE_STATUS);
- g_object_set (renderer,
- "editable", TRUE,
- NULL);
- g_object_set (renderer, "ellipsize", PANGO_ELLIPSIZE_END, NULL);
-
- g_signal_connect (renderer, "edited",
- G_CALLBACK (status_preset_dialog_status_edited), self);
-}
-
-static void
-status_preset_dialog_preset_selection_changed (GtkTreeSelection *selection,
- GtkWidget *remove_button)
-{
- /* update the sensitivity of the Remove button */
- gtk_widget_set_sensitive (remove_button,
- gtk_tree_selection_count_selected_rows (selection) != 0);
-}
-
-static void
-foreach_removed_status (GtkTreeModel *model,
- GtkTreePath *path,
- GtkTreeIter *iter,
- gpointer data)
-{
- TpConnectionPresenceType state;
- char *status;
-
- gtk_tree_model_get (model, iter,
- PRESETS_STORE_STATE, &state,
- PRESETS_STORE_STATUS, &status,
- -1);
-
- DEBUG ("REMOVE PRESET (%i, %s)\n", state, status);
- empathy_status_presets_remove (state, status);
-
- g_free (status);
-}
-
-static void
-status_preset_dialog_preset_remove (GtkButton *button,
- EmpathyStatusPresetDialog *self)
-{
- EmpathyStatusPresetDialogPriv *priv = GET_PRIV (self);
- GtkTreeSelection *selection;
-
- selection = gtk_tree_view_get_selection (
- GTK_TREE_VIEW (priv->presets_treeview));
- gtk_tree_selection_selected_foreach (selection, foreach_removed_status, NULL);
- status_preset_dialog_presets_update (self);
-}
-
-static void
-empathy_status_preset_dialog_init (EmpathyStatusPresetDialog *self)
-{
- EmpathyStatusPresetDialogPriv *priv = self->priv =
- G_TYPE_INSTANCE_GET_PRIVATE (self,
- EMPATHY_TYPE_STATUS_PRESET_DIALOG,
- EmpathyStatusPresetDialogPriv);
- GtkBuilder *gui;
- GtkWidget *toplevel_vbox, *presets_sw, *remove_toolbar, *remove_button;
- GtkTreeSelection *selection;
- char *filename;
- GtkStyleContext *context;
-
- gtk_window_set_title (GTK_WINDOW (self),
- _("Edit Custom Messages"));
- gtk_dialog_add_button (GTK_DIALOG (self),
- GTK_STOCK_CLOSE, GTK_RESPONSE_CLOSE);
- gtk_window_set_resizable (GTK_WINDOW (self), FALSE);
-
- filename = empathy_file_lookup ("empathy-status-preset-dialog.ui",
- "libempathy-gtk");
- gui = tpaw_builder_get_file (filename,
- "toplevel-vbox", &toplevel_vbox,
- "presets-sw", &presets_sw,
- "presets-treeview", &priv->presets_treeview,
- "remove-toolbar", &remove_toolbar,
- "remove-button", &remove_button,
- NULL);
- g_free (filename);
-
- /* join the remove toolbar to the treeview */
- context = gtk_widget_get_style_context (presets_sw);
- gtk_style_context_set_junction_sides (context, GTK_JUNCTION_BOTTOM);
- context = gtk_widget_get_style_context (remove_toolbar);
- gtk_style_context_set_junction_sides (context, GTK_JUNCTION_TOP);
-
- selection = gtk_tree_view_get_selection (
- GTK_TREE_VIEW (priv->presets_treeview));
- g_signal_connect (selection,
- "changed",
- G_CALLBACK (status_preset_dialog_preset_selection_changed),
- remove_button);
- gtk_tree_selection_set_mode (selection, GTK_SELECTION_MULTIPLE);
-
- tpaw_builder_connect (gui, self,
- "remove-button", "clicked", status_preset_dialog_preset_remove,
- NULL);
-
- status_preset_dialog_setup_presets_treeview (self);
-
- gtk_box_pack_start (GTK_BOX (gtk_dialog_get_content_area (GTK_DIALOG (self))),
- toplevel_vbox, TRUE, TRUE, 0);
-
- g_object_unref (gui);
-}
-
-/**
- * empathy_status_preset_dialog_new:
- * @parent: the parent window of this dialog (or NULL)
- *
- * Creates a new #EmpathyStatusPresetDialog that allows the user to
- * add/remove/edit their saved status messages.
- *
- * Returns: the newly constructed dialog.
- */
-GtkWidget *
-empathy_status_preset_dialog_new (GtkWindow *parent)
-{
- GtkWidget *self = g_object_new (EMPATHY_TYPE_STATUS_PRESET_DIALOG,
- NULL);
-
- if (parent) {
- gtk_window_set_transient_for (GTK_WINDOW (self), parent);
- }
-
- return self;
-}
diff --git a/libempathy-gtk/empathy-status-preset-dialog.h b/libempathy-gtk/empathy-status-preset-dialog.h
deleted file mode 100644
index 625547fe..00000000
--- a/libempathy-gtk/empathy-status-preset-dialog.h
+++ /dev/null
@@ -1,63 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * empathy-status-preset-dialog.c
- *
- * EmpathyStatusPresetDialog - a dialog for adding and removing preset status
- * messages.
- *
- * Copyright (C) 2009 Collabora Ltd.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301 USA
- *
- * Authors: Danielle Madeley <danielle.madeley@collabora.co.uk>
- */
-
-#ifndef __EMPATHY_STATUS_PRESET_DIALOG_H__
-#define __EMPATHY_STATUS_PRESET_DIALOG_H__
-
-#include <gtk/gtk.h>
-
-G_BEGIN_DECLS
-
-#define EMPATHY_TYPE_STATUS_PRESET_DIALOG (empathy_status_preset_dialog_get_type ())
-#define EMPATHY_STATUS_PRESET_DIALOG(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), EMPATHY_TYPE_STATUS_PRESET_DIALOG, EmpathyStatusPresetDialog))
-#define EMPATHY_STATUS_PRESET_DIALOG_CLASS(obj) (G_TYPE_CHECK_CLASS_CAST ((obj), EMPATHY_TYPE_STATUS_PRESET_DIALOG, EmpathyStatusPresetDialogClass))
-#define EMPATHY_IS_STATUS_PRESET_DIALOG(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), EMPATHY_TYPE_STATUS_PRESET_DIALOG))
-#define EMPATHY_IS_STATUS_PRESET_DIALOG_CLASS(obj) (G_TYPE_CHECK_CLASS_TYPE ((obj), EMPATHY_TYPE_STATUS_PRESET_DIALOG))
-#define EMPATHY_STATUS_PRESET_DIALOG_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), EMPATHY_TYPE_STATUS_PRESET_DIALOG, EmpathyStatusPresetDialogClass))
-
-typedef struct _EmpathyStatusPresetDialog EmpathyStatusPresetDialog;
-typedef struct _EmpathyStatusPresetDialogClass EmpathyStatusPresetDialogClass;
-
-struct _EmpathyStatusPresetDialog
-{
- GtkDialog parent;
-
- /*< private >*/
- gpointer priv;
-};
-
-struct _EmpathyStatusPresetDialogClass
-{
- GtkDialogClass parent_class;
-};
-
-GType empathy_status_preset_dialog_get_type (void);
-GtkWidget *empathy_status_preset_dialog_new (GtkWindow *parent);
-
-G_END_DECLS
-
-#endif
diff --git a/libempathy-gtk/empathy-status-preset-dialog.ui b/libempathy-gtk/empathy-status-preset-dialog.ui
deleted file mode 100644
index 19bfdc91..00000000
--- a/libempathy-gtk/empathy-status-preset-dialog.ui
+++ /dev/null
@@ -1,62 +0,0 @@
-<?xml version="1.0"?>
-<interface>
- <requires lib="gtk+" version="2.16"/>
- <!-- interface-naming-policy project-wide -->
- <object class="GtkVBox" id="toplevel-vbox">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="margin-left">5</property>
- <property name="margin-right">5</property>
- <child>
- <object class="GtkScrolledWindow" id="presets-sw">
- <property name="width_request">408</property>
- <property name="height_request">252</property>
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="hscrollbar_policy">never</property>
- <property name="shadow_type">etched-in</property>
- <child>
- <object class="GtkTreeView" id="presets-treeview">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="headers_visible">False</property>
- </object>
- </child>
- </object>
- <packing>
- <property name="expand">True</property>
- <property name="fill">True</property>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkToolbar" id="remove-toolbar">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="icon_size">1</property>
- <style>
- <class name="inline-toolbar"/>
- </style>
- <child>
- <object class="GtkToolButton" id="remove-button">
- <property name="tooltip-text" translatable="yes">Remove</property>
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="receives_default">True</property>
- <property name="icon_name">list-remove-symbolic</property>
- <property name="use_underline">True</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="homogeneous">True</property>
- </packing>
- </child>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="position">1</property>
- </packing>
- </child>
- </object>
-</interface>
diff --git a/libempathy-gtk/empathy-string-parser.c b/libempathy-gtk/empathy-string-parser.c
deleted file mode 100644
index f17fc9c0..00000000
--- a/libempathy-gtk/empathy-string-parser.c
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- * Copyright (C) 2010 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-string-parser.h"
-
-#include "empathy-smiley-manager.h"
-
-void
-empathy_string_match_smiley (const gchar *text,
- gssize len,
- TpawStringReplace replace_func,
- TpawStringParser *sub_parsers,
- gpointer user_data)
-{
- guint last = 0;
- EmpathySmileyManager *smiley_manager;
- GSList *hits, *l;
-
- smiley_manager = empathy_smiley_manager_dup_singleton ();
- hits = empathy_smiley_manager_parse_len (smiley_manager, text, len);
-
- for (l = hits; l; l = l->next) {
- EmpathySmileyHit *hit = l->data;
-
- if (hit->start > last) {
- /* Append the text between last smiley (or the
- * start of the message) and this smiley */
- tpaw_string_parser_substr (text + last,
- hit->start - last,
- sub_parsers, user_data);
- }
-
- replace_func (text + hit->start, hit->end - hit->start,
- hit, user_data);
-
- last = hit->end;
-
- empathy_smiley_hit_free (hit);
- }
- g_slist_free (hits);
- g_object_unref (smiley_manager);
-
- tpaw_string_parser_substr (text + last, len - last,
- sub_parsers, user_data);
-}
diff --git a/libempathy-gtk/empathy-string-parser.h b/libempathy-gtk/empathy-string-parser.h
deleted file mode 100644
index 57b784ae..00000000
--- a/libempathy-gtk/empathy-string-parser.h
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * Copyright (C) 2010 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_STRING_PARSER_H__
-#define __EMPATHY_STRING_PARSER_H__
-
-#include <glib.h>
-#include <tp-account-widgets/tpaw-string-parser.h>
-
-G_BEGIN_DECLS
-
-void
-empathy_string_match_smiley (const gchar *text,
- gssize len,
- TpawStringReplace replace_func,
- TpawStringParser *sub_parsers,
- gpointer user_data);
-
-G_END_DECLS
-
-#endif /* __EMPATHY_STRING_PARSER_H__ */
diff --git a/libempathy-gtk/empathy-subscription-dialog.c b/libempathy-gtk/empathy-subscription-dialog.c
deleted file mode 100644
index 87883265..00000000
--- a/libempathy-gtk/empathy-subscription-dialog.c
+++ /dev/null
@@ -1,358 +0,0 @@
-/*
- * Copyright (C) 2012 Collabora Ltd.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * 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.com>
- */
-
-#include "config.h"
-#include "empathy-subscription-dialog.h"
-
-#include <glib/gi18n-lib.h>
-
-#include "empathy-individual-widget.h"
-#include "empathy-utils.h"
-
-G_DEFINE_TYPE (EmpathySubscriptionDialog, empathy_subscription_dialog, GTK_TYPE_MESSAGE_DIALOG)
-
-enum
-{
- PROP_INDIVIDUAL = 1,
- PROP_MESSAGE,
- N_PROPS
-};
-
-/*
-enum
-{
- LAST_SIGNAL
-};
-
-static guint signals[LAST_SIGNAL];
-*/
-
-struct _EmpathySubscriptionDialogPriv
-{
- FolksIndividual *individual;
- gchar *message;
-};
-
-static void
-empathy_subscription_dialog_get_property (GObject *object,
- guint property_id,
- GValue *value,
- GParamSpec *pspec)
-{
- EmpathySubscriptionDialog *self = EMPATHY_SUBSCRIPTION_DIALOG (object);
-
- switch (property_id)
- {
- case PROP_INDIVIDUAL:
- g_value_set_object (value, self->priv->individual);
- break;
- case PROP_MESSAGE:
- g_value_set_string (value, self->priv->message);
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
- break;
- }
-}
-
-static void
-empathy_subscription_dialog_set_property (GObject *object,
- guint property_id,
- const GValue *value,
- GParamSpec *pspec)
-{
- EmpathySubscriptionDialog *self = EMPATHY_SUBSCRIPTION_DIALOG (object);
-
- switch (property_id)
- {
- case PROP_INDIVIDUAL:
- g_assert (self->priv->individual == NULL); /* construct only */
- self->priv->individual = g_value_dup_object (value);
- break;
- case PROP_MESSAGE:
- g_assert (self->priv->message == NULL); /* construct only */
- self->priv->message = g_value_dup_string (value);
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
- break;
- }
-}
-
-/**
- * block_contact_dialog_show:
- * @parent: the parent of this dialog (or %NULL)
- * @contact: the contact for this dialog
- * @abusive: a pointer to store the value of the abusive contact check box
- * (or %NULL)
- *
- * Returns: %TRUE if the user wishes to block the contact
- */
-static gboolean
-block_contact_dialog_show (GtkWindow *parent,
- EmpathyContact *contact,
- GdkPixbuf *avatar,
- gboolean *abusive)
-{
- GtkWidget *dialog;
- GtkWidget *abusive_check = NULL;
- int res;
- TpConnection *conn;
-
- dialog = gtk_message_dialog_new (parent, GTK_DIALOG_MODAL,
- GTK_MESSAGE_QUESTION, GTK_BUTTONS_NONE, _("Block %s?"),
- empathy_contact_get_alias (contact));
-
- gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (dialog),
- _("Are you sure you want to block '%s' from contacting you again?"),
- empathy_contact_get_alias (contact));
-
- gtk_dialog_add_buttons (GTK_DIALOG (dialog),
- GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
- _("_Block"), GTK_RESPONSE_REJECT,
- NULL);
-
- if (avatar != NULL)
- {
- GtkWidget *image = gtk_image_new_from_pixbuf (avatar);
- gtk_message_dialog_set_image (GTK_MESSAGE_DIALOG (dialog), image);
- gtk_widget_show (image);
- }
-
- conn = empathy_contact_get_connection (contact);
-
- /* ask the user if they want to also report the contact as abusive */
- if (tp_connection_can_report_abusive (conn))
- {
- GtkWidget *vbox;
-
- vbox = gtk_message_dialog_get_message_area (
- GTK_MESSAGE_DIALOG (dialog));
- abusive_check = gtk_check_button_new_with_mnemonic (
- _("_Report this contact as abusive"));
-
- gtk_box_pack_start (GTK_BOX (vbox), abusive_check,
- FALSE, TRUE, 0);
- gtk_widget_show (abusive_check);
- }
-
- res = gtk_dialog_run (GTK_DIALOG (dialog));
- if (abusive != NULL)
- {
- if (abusive_check != NULL)
- *abusive = gtk_toggle_button_get_active (
- GTK_TOGGLE_BUTTON (abusive_check));
- else
- *abusive = FALSE;
- }
-
- gtk_widget_destroy (dialog);
-
- return res == GTK_RESPONSE_REJECT;
-}
-
-static void
-response_cb (GtkDialog *dialog,
- gint reponse,
- EmpathySubscriptionDialog *self)
-{
- EmpathyContact *contact;
-
- contact = empathy_contact_dup_from_folks_individual (self->priv->individual);
-
- if (reponse == GTK_RESPONSE_YES)
- {
- empathy_contact_add_to_contact_list (contact, "");
- }
- else if (reponse == GTK_RESPONSE_NO)
- {
- empathy_contact_remove_from_contact_list (contact);
- }
- else if (reponse == GTK_RESPONSE_REJECT)
- {
- gboolean abusive;
-
- /* confirm the blocking */
- if (block_contact_dialog_show (GTK_WINDOW (dialog), contact,
- NULL, &abusive))
- {
- TpContact *tp_contact;
-
- empathy_contact_remove_from_contact_list (contact);
-
- tp_contact = empathy_contact_get_tp_contact (contact);
-
- tp_contact_block_async (tp_contact, abusive, NULL, NULL);
- }
- else
- {
- /* if they don't confirm, return back to the
- * first dialog */
- return;
- }
- }
-
- gtk_widget_destroy (GTK_WIDGET (self));
-}
-
-static void
-empathy_subscription_dialog_constructed (GObject *object)
-{
- EmpathySubscriptionDialog *self = EMPATHY_SUBSCRIPTION_DIALOG (object);
- void (*chain_up) (GObject *) =
- ((GObjectClass *) empathy_subscription_dialog_parent_class)->constructed;
- GtkWidget *content;
- GtkWidget *individual_widget;
- const gchar *alias;
- gchar *tmp;
- EmpathyContact *contact;
- TpConnection *conn;
-
- if (chain_up != NULL)
- chain_up (object);
-
- g_assert (self->priv->individual != NULL);
-
- gtk_window_set_title (GTK_WINDOW (self), _("Subscription Request"));
-
- alias = folks_alias_details_get_alias (
- FOLKS_ALIAS_DETAILS (self->priv->individual));
-
- tmp = g_strdup_printf (
- _("%s would like permission to see when you are online"), alias);
-
- /* Why is there no gtk_message_dialog_set_text()? */
- g_object_set (self, "text", tmp, NULL);
- g_free (tmp);
-
- if (self->priv->message != NULL)
- {
- tmp = g_strdup_printf ("<i>%s</i>", self->priv->message);
- gtk_message_dialog_format_secondary_markup (GTK_MESSAGE_DIALOG (self),
- "%s", tmp);
- g_free (tmp);
- }
-
- /* Individual widget */
- individual_widget = empathy_individual_widget_new (self->priv->individual,
- EMPATHY_INDIVIDUAL_WIDGET_EDIT_ALIAS |
- EMPATHY_INDIVIDUAL_WIDGET_EDIT_GROUPS |
- EMPATHY_INDIVIDUAL_WIDGET_SHOW_DETAILS);
-
- gtk_container_set_border_width (GTK_CONTAINER (individual_widget), 8);
-
- content = gtk_dialog_get_content_area (GTK_DIALOG (self));
-
- gtk_box_pack_start (GTK_BOX (content), individual_widget, TRUE, TRUE, 0);
- gtk_widget_show (individual_widget);
-
- /* Add 'Block' button if supported */
- contact = empathy_contact_dup_from_folks_individual (self->priv->individual);
- conn = empathy_contact_get_connection (contact);
-
- if (tp_proxy_has_interface_by_id (conn,
- TP_IFACE_QUARK_CONNECTION_INTERFACE_CONTACT_BLOCKING))
- {
- gtk_dialog_add_button (GTK_DIALOG (self),
- _("_Block"), GTK_RESPONSE_REJECT);
- }
-
- g_object_unref (contact);
-
- gtk_dialog_add_buttons (GTK_DIALOG (self),
- _("_Decline"), GTK_RESPONSE_NO,
- _("_Accept"), GTK_RESPONSE_YES,
- NULL);
-
- g_signal_connect (self, "response",
- G_CALLBACK (response_cb), self);
-}
-
-static void
-empathy_subscription_dialog_dispose (GObject *object)
-{
- EmpathySubscriptionDialog *self = EMPATHY_SUBSCRIPTION_DIALOG (object);
- void (*chain_up) (GObject *) =
- ((GObjectClass *) empathy_subscription_dialog_parent_class)->dispose;
-
- g_clear_object (&self->priv->individual);
-
- if (chain_up != NULL)
- chain_up (object);
-}
-
-static void
-empathy_subscription_dialog_finalize (GObject *object)
-{
- EmpathySubscriptionDialog *self = EMPATHY_SUBSCRIPTION_DIALOG (object);
- void (*chain_up) (GObject *) =
- ((GObjectClass *) empathy_subscription_dialog_parent_class)->finalize;
-
- g_free (self->priv->message);
-
- if (chain_up != NULL)
- chain_up (object);
-}
-
-static void
-empathy_subscription_dialog_class_init (
- EmpathySubscriptionDialogClass *klass)
-{
- GObjectClass *oclass = G_OBJECT_CLASS (klass);
- GParamSpec *spec;
-
- oclass->get_property = empathy_subscription_dialog_get_property;
- oclass->set_property = empathy_subscription_dialog_set_property;
- oclass->constructed = empathy_subscription_dialog_constructed;
- oclass->dispose = empathy_subscription_dialog_dispose;
- oclass->finalize = empathy_subscription_dialog_finalize;
-
- spec = g_param_spec_object ("individual", "individual",
- "FolksIndividual",
- FOLKS_TYPE_INDIVIDUAL,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS);
- g_object_class_install_property (oclass, PROP_INDIVIDUAL, spec);
-
- spec = g_param_spec_string ("message", "message",
- "Message",
- NULL,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS);
- g_object_class_install_property (oclass, PROP_MESSAGE, spec);
-
- g_type_class_add_private (klass, sizeof (EmpathySubscriptionDialogPriv));
-}
-
-static void
-empathy_subscription_dialog_init (EmpathySubscriptionDialog *self)
-{
- self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self,
- EMPATHY_TYPE_SUBSCRIPTION_DIALOG, EmpathySubscriptionDialogPriv);
-}
-
-GtkWidget *
-empathy_subscription_dialog_new (FolksIndividual *individual,
- const gchar *message)
-{
- return g_object_new (EMPATHY_TYPE_SUBSCRIPTION_DIALOG,
- "individual", individual,
- "message", message,
- "message-type", GTK_MESSAGE_QUESTION,
- NULL);
-}
diff --git a/libempathy-gtk/empathy-subscription-dialog.h b/libempathy-gtk/empathy-subscription-dialog.h
deleted file mode 100644
index 2e7de953..00000000
--- a/libempathy-gtk/empathy-subscription-dialog.h
+++ /dev/null
@@ -1,75 +0,0 @@
-/*
- * Copyright (C) 2012 Collabora Ltd.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * 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.com>
- */
-
-#ifndef __EMPATHY_SUBSCRIPTION_DIALOG_H__
-#define __EMPATHY_SUBSCRIPTION_DIALOG_H__
-
-#include <gtk/gtk.h>
-#include <folks/folks.h>
-
-G_BEGIN_DECLS
-
-typedef struct _EmpathySubscriptionDialog EmpathySubscriptionDialog;
-typedef struct _EmpathySubscriptionDialogClass EmpathySubscriptionDialogClass;
-typedef struct _EmpathySubscriptionDialogPriv EmpathySubscriptionDialogPriv;
-
-struct _EmpathySubscriptionDialogClass
-{
- /*<private>*/
- GtkMessageDialogClass parent_class;
-};
-
-struct _EmpathySubscriptionDialog
-{
- /*<private>*/
- GtkMessageDialog parent;
- EmpathySubscriptionDialogPriv *priv;
-};
-
-GType empathy_subscription_dialog_get_type (void);
-
-/* TYPE MACROS */
-#define EMPATHY_TYPE_SUBSCRIPTION_DIALOG \
- (empathy_subscription_dialog_get_type ())
-#define EMPATHY_SUBSCRIPTION_DIALOG(obj) \
- (G_TYPE_CHECK_INSTANCE_CAST((obj), \
- EMPATHY_TYPE_SUBSCRIPTION_DIALOG, \
- EmpathySubscriptionDialog))
-#define EMPATHY_SUBSCRIPTION_DIALOG_CLASS(klass) \
- (G_TYPE_CHECK_CLASS_CAST((klass), \
- EMPATHY_TYPE_SUBSCRIPTION_DIALOG, \
- EmpathySubscriptionDialogClass))
-#define EMPATHY_IS_SUBSCRIPTION_DIALOG(obj) \
- (G_TYPE_CHECK_INSTANCE_TYPE((obj), \
- EMPATHY_TYPE_SUBSCRIPTION_DIALOG))
-#define EMPATHY_IS_SUBSCRIPTION_DIALOG_CLASS(klass) \
- (G_TYPE_CHECK_CLASS_TYPE((klass), \
- EMPATHY_TYPE_SUBSCRIPTION_DIALOG))
-#define EMPATHY_SUBSCRIPTION_DIALOG_GET_CLASS(obj) \
- (G_TYPE_INSTANCE_GET_CLASS ((obj), \
- EMPATHY_TYPE_SUBSCRIPTION_DIALOG, \
- EmpathySubscriptionDialogClass))
-
-GtkWidget * empathy_subscription_dialog_new (FolksIndividual *individual,
- const gchar *message);
-
-G_END_DECLS
-
-#endif /* #ifndef __EMPATHY_SUBSCRIPTION_DIALOG_H__*/
diff --git a/libempathy-gtk/empathy-theme-adium.c b/libempathy-gtk/empathy-theme-adium.c
deleted file mode 100644
index 0cf74e39..00000000
--- a/libempathy-gtk/empathy-theme-adium.c
+++ /dev/null
@@ -1,2233 +0,0 @@
-/*
- * Copyright (C) 2008-2012 Collabora Ltd.
- * Copyright (C) 2012 Red Hat, Inc.
- *
- * 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-theme-adium.h"
-
-#include <glib/gi18n-lib.h>
-#include <tp-account-widgets/tpaw-images.h>
-#include <tp-account-widgets/tpaw-time.h>
-#include <tp-account-widgets/tpaw-pixbuf-utils.h>
-#include <tp-account-widgets/tpaw-utils.h>
-
-#include "empathy-gsettings.h"
-#include "empathy-images.h"
-#include "empathy-plist.h"
-#include "empathy-smiley-manager.h"
-#include "empathy-ui-utils.h"
-#include "empathy-utils.h"
-#include "empathy-webkit-utils.h"
-
-#define DEBUG_FLAG EMPATHY_DEBUG_CHAT
-#include "empathy-debug.h"
-
-#define BORING_DPI_DEFAULT 96
-
-/* "Join" consecutive messages with timestamps within five minutes */
-#define MESSAGE_JOIN_PERIOD 5*60
-
-struct _EmpathyThemeAdiumPriv
-{
- EmpathyAdiumData *data;
- EmpathySmileyManager *smiley_manager;
- EmpathyContact *first_contact;
- EmpathyContact *last_contact;
- gint64 first_timestamp;
- gint64 last_timestamp;
- gboolean first_is_backlog;
- gboolean last_is_backlog;
- guint pages_loading;
- /* Queue of QueuedItem*s containing an EmpathyMessage or string */
- GQueue message_queue;
- /* Queue of guint32 of pending message id to remove unread
- * marker for when we lose focus. */
- GQueue acked_messages;
- GtkWidget *inspector_window;
-
- GSettings *gsettings_chat;
- GSettings *gsettings_desktop;
-
- gboolean has_focus;
- gboolean has_unread_message;
- gboolean allow_scrolling;
- gchar *variant;
- gboolean in_construction;
- gboolean show_avatars;
-};
-
-struct _EmpathyAdiumData
-{
- gint ref_count;
- gchar *path;
- gchar *basedir;
- gchar *default_avatar_filename;
- gchar *default_incoming_avatar_filename;
- gchar *default_outgoing_avatar_filename;
- GHashTable *info;
- guint version;
- gboolean custom_template;
- /* gchar* -> gchar* both owned */
- GHashTable *date_format_cache;
-
- /* HTML bits */
- const gchar *template_html;
- const gchar *content_html;
- const gchar *in_content_html;
- const gchar *in_context_html;
- const gchar *in_nextcontent_html;
- const gchar *in_nextcontext_html;
- const gchar *out_content_html;
- const gchar *out_context_html;
- const gchar *out_nextcontent_html;
- const gchar *out_nextcontext_html;
- const gchar *status_html;
-
- /* Above html strings are pointers to strings stored in this array.
- * We do this because of fallbacks, some htmls could be pointing the
- * same string. */
- GPtrArray *strings_to_free;
-};
-
-static gchar * adium_info_dup_path_for_variant (GHashTable *info,
- const gchar *variant);
-
-enum
-{
- PROP_0,
- PROP_ADIUM_DATA,
- PROP_VARIANT,
-};
-
-G_DEFINE_TYPE (EmpathyThemeAdium, empathy_theme_adium,
- WEBKIT_TYPE_WEB_VIEW)
-
-enum
-{
- QUEUED_EVENT,
- QUEUED_MESSAGE,
- QUEUED_EDIT
-};
-
-typedef struct
-{
- guint type;
- EmpathyMessage *msg;
- char *str;
- gboolean should_highlight;
-} QueuedItem;
-
-static QueuedItem *
-queue_item (GQueue *queue,
- guint type,
- EmpathyMessage *msg,
- const char *str,
- gboolean should_highlight,
- gboolean prepend)
-{
- QueuedItem *item = g_slice_new0 (QueuedItem);
-
- item->type = type;
- if (msg != NULL)
- item->msg = g_object_ref (msg);
- item->str = g_strdup (str);
- item->should_highlight = should_highlight;
-
- if (prepend)
- g_queue_push_head (queue, item);
- else
- g_queue_push_tail (queue, item);
-
- return item;
-}
-
-static void
-free_queued_item (QueuedItem *item)
-{
- tp_clear_object (&item->msg);
- g_free (item->str);
-
- g_slice_free (QueuedItem, item);
-}
-
-static gboolean
-theme_adium_navigation_policy_decision_requested_cb (WebKitWebView *view,
- WebKitWebFrame *web_frame,
- WebKitNetworkRequest *request,
- WebKitWebNavigationAction *action,
- WebKitWebPolicyDecision *decision,
- gpointer data)
-{
- const gchar *uri;
-
- /* Only call url_show on clicks */
- if (webkit_web_navigation_action_get_reason (action) !=
- WEBKIT_WEB_NAVIGATION_REASON_LINK_CLICKED)
- {
- webkit_web_policy_decision_use (decision);
- return TRUE;
- }
-
- uri = webkit_network_request_get_uri (request);
- empathy_url_show (GTK_WIDGET (view), uri);
-
- webkit_web_policy_decision_ignore (decision);
- return TRUE;
-}
-
-/* Replace each %@ in format with string passed in args */
-static gchar *
-string_with_format (const gchar *format,
- const gchar *first_string,
- ...)
-{
- va_list args;
- const gchar *str;
- GString *result;
-
- va_start (args, first_string);
- result = g_string_sized_new (strlen (format));
- for (str = first_string; str != NULL; str = va_arg (args, const gchar *))
- {
- const gchar *next;
-
- next = strstr (format, "%@");
- if (next == NULL)
- break;
-
- g_string_append_len (result, format, next - format);
- g_string_append (result, str);
- format = next + 2;
- }
- g_string_append (result, format);
- va_end (args);
-
- return g_string_free (result, FALSE);
-}
-
-static void
-theme_adium_load_template (EmpathyThemeAdium *self)
-{
- gchar *basedir_uri;
- gchar *variant_path;
- gchar *template;
-
- self->priv->pages_loading++;
- basedir_uri = g_strconcat ("file://", self->priv->data->basedir, NULL);
-
- variant_path = adium_info_dup_path_for_variant (self->priv->data->info,
- self->priv->variant);
-
- template = string_with_format (self->priv->data->template_html,
- variant_path, NULL);
-
- webkit_web_view_load_html_string (WEBKIT_WEB_VIEW (self),
- template, basedir_uri);
-
- g_free (basedir_uri);
- g_free (variant_path);
- g_free (template);
-}
-
-static gchar *
-theme_adium_parse_body (EmpathyThemeAdium *self,
- const gchar *text,
- const gchar *token)
-{
- TpawStringParser *parsers;
- GString *string;
-
- /* Check if we have to parse smileys */
- parsers = empathy_webkit_get_string_parser (
- g_settings_get_boolean (self->priv->gsettings_chat,
- EMPATHY_PREFS_CHAT_SHOW_SMILEYS));
-
- /* Parse text and construct string with links and smileys replaced
- * by html tags. Also escape text to make sure html code is
- * displayed verbatim. */
- string = g_string_sized_new (strlen (text));
-
- /* wrap this in HTML that allows us to find the message for later
- * editing */
- if (!tp_str_empty (token))
- g_string_append_printf (string,
- "<span id=\"message-token-%s\">",
- token);
-
- tpaw_string_parser_substr (text, -1, parsers, string);
-
- if (!tp_str_empty (token))
- g_string_append (string, "</span>");
-
- /* Wrap body in order to make tabs and multiple spaces displayed
- * properly. See bug #625745. */
- g_string_prepend (string, "<div style=\"display: inline; "
- "white-space: pre-wrap\"'>");
- g_string_append (string, "</div>");
-
- return g_string_free (string, FALSE);
-}
-
-static void
-escape_and_append_len (GString *string, const gchar *str, gint len)
-{
- while (str != NULL && *str != '\0' && len != 0)
- {
- switch (*str)
- {
- case '\\':
- /* \ becomes \\ */
- g_string_append (string, "\\\\");
- break;
- case '\"':
- /* " becomes \" */
- g_string_append (string, "\\\"");
- break;
- case '\n':
- /* Remove end of lines */
- break;
- default:
- g_string_append_c (string, *str);
- }
-
- str++;
- len--;
- }
-}
-
-/* If *str starts with match, returns TRUE and move pointer to the end */
-static gboolean
-theme_adium_match (const gchar **str,
- const gchar *match)
-{
- gint len;
-
- len = strlen (match);
- if (strncmp (*str, match, len) == 0)
- {
- *str += len - 1;
- return TRUE;
- }
-
- return FALSE;
-}
-
-/* Like theme_adium_match() but also return the X part if match is
- * like %foo{X}% */
-static gboolean
-theme_adium_match_with_format (const gchar **str,
- const gchar *match,
- gchar **format)
-{
- const gchar *cur = *str;
- const gchar *end;
-
- if (!theme_adium_match (&cur, match))
- return FALSE;
-
- cur++;
-
- end = strstr (cur, "}%");
- if (!end)
- return FALSE;
-
- *format = g_strndup (cur , end - cur);
- *str = end + 1;
- return TRUE;
-}
-
-/* List of colors used by %senderColor%. Copied from
- * adium/Frameworks/AIUtilities\ Framework/Source/AIColorAdditions.m
- */
-static gchar *colors[] = {
- "aqua", "aquamarine", "blue", "blueviolet", "brown", "burlywood", "cadetblue",
- "chartreuse", "chocolate", "coral", "cornflowerblue", "crimson", "cyan",
- "darkblue", "darkcyan", "darkgoldenrod", "darkgreen", "darkgrey", "darkkhaki",
- "darkmagenta", "darkolivegreen", "darkorange", "darkorchid", "darkred",
- "darksalmon", "darkseagreen", "darkslateblue", "darkslategrey",
- "darkturquoise", "darkviolet", "deeppink", "deepskyblue", "dimgrey",
- "dodgerblue", "firebrick", "forestgreen", "fuchsia", "gold", "goldenrod",
- "green", "greenyellow", "grey", "hotpink", "indianred", "indigo", "lawngreen",
- "lightblue", "lightcoral",
- "lightgreen", "lightgrey", "lightpink", "lightsalmon", "lightseagreen",
- "lightskyblue", "lightslategrey", "lightsteelblue", "lime", "limegreen",
- "magenta", "maroon", "mediumaquamarine", "mediumblue", "mediumorchid",
- "mediumpurple", "mediumseagreen", "mediumslateblue", "mediumspringgreen",
- "mediumturquoise", "mediumvioletred", "midnightblue", "navy", "olive",
- "olivedrab", "orange", "orangered", "orchid", "palegreen", "paleturquoise",
- "palevioletred", "peru", "pink", "plum", "powderblue", "purple", "red",
- "rosybrown", "royalblue", "saddlebrown", "salmon", "sandybrown", "seagreen",
- "sienna", "silver", "skyblue", "slateblue", "slategrey", "springgreen",
- "steelblue", "tan", "teal", "thistle", "tomato", "turquoise", "violet",
- "yellowgreen",
-};
-
-static const gchar *
-nsdate_to_strftime (EmpathyAdiumData *data, const gchar *nsdate)
-{
- /* Convert from NSDateFormatter
- * (http://www.stepcase.com/blog/2008/12/02/format-string-for-the-iphone-nsdateformatter/)
- * to strftime supported by g_date_time_format.
- * FIXME: table is incomplete, doc of g_date_time_format has a table of
- * supported tags.
- * FIXME: g_date_time_format in GLib 2.28 does 0 padding by default, but
- * in 2.29.x we have to explictely request padding with %0x */
- static const gchar *convert_table[] = {
- "a", "%p", // AM/PM
- "A", NULL, // 0~86399999 (Millisecond of Day)
-
- "cccc", "%A", // Sunday/Monday/Tuesday/Wednesday/Thursday/Friday/Saturday
- "ccc", "%a", // Sun/Mon/Tue/Wed/Thu/Fri/Sat
- "cc", "%u", // 1~7 (Day of Week)
- "c", "%u", // 1~7 (Day of Week)
-
- "dd", "%d", // 1~31 (0 padded Day of Month)
- "d", "%d", // 1~31 (0 padded Day of Month)
- "D", "%j", // 1~366 (0 padded Day of Year)
-
- "e", "%u", // 1~7 (0 padded Day of Week)
- "EEEE", "%A", // Sunday/Monday/Tuesday/Wednesday/Thursday/Friday/Saturday
- "EEE", "%a", // Sun/Mon/Tue/Wed/Thu/Fri/Sat
- "EE", "%a", // Sun/Mon/Tue/Wed/Thu/Fri/Sat
- "E", "%a", // Sun/Mon/Tue/Wed/Thu/Fri/Sat
-
- "F", NULL, // 1~5 (0 padded Week of Month, first day of week = Monday)
-
- "g", NULL, // Julian Day Number (number of days since 4713 BC January 1)
- "GGGG", NULL, // Before Christ/Anno Domini
- "GGG", NULL, // BC/AD (Era Designator Abbreviated)
- "GG", NULL, // BC/AD (Era Designator Abbreviated)
- "G", NULL, // BC/AD (Era Designator Abbreviated)
-
- "h", "%I", // 1~12 (0 padded Hour (12hr))
- "H", "%H", // 0~23 (0 padded Hour (24hr))
-
- "k", NULL, // 1~24 (0 padded Hour (24hr)
- "K", NULL, // 0~11 (0 padded Hour (12hr))
-
- "LLLL", "%B", // January/February/March/April/May/June/July/August/September/October/November/December
- "LLL", "%b", // Jan/Feb/Mar/Apr/May/Jun/Jul/Aug/Sep/Oct/Nov/Dec
- "LL", "%m", // 1~12 (0 padded Month)
- "L", "%m", // 1~12 (0 padded Month)
-
- "m", "%M", // 0~59 (0 padded Minute)
- "MMMM", "%B", // January/February/March/April/May/June/July/August/September/October/November/December
- "MMM", "%b", // Jan/Feb/Mar/Apr/May/Jun/Jul/Aug/Sep/Oct/Nov/Dec
- "MM", "%m", // 1~12 (0 padded Month)
- "M", "%m", // 1~12 (0 padded Month)
-
- "qqqq", NULL, // 1st quarter/2nd quarter/3rd quarter/4th quarter
- "qqq", NULL, // Q1/Q2/Q3/Q4
- "qq", NULL, // 1~4 (0 padded Quarter)
- "q", NULL, // 1~4 (0 padded Quarter)
- "QQQQ", NULL, // 1st quarter/2nd quarter/3rd quarter/4th quarter
- "QQQ", NULL, // Q1/Q2/Q3/Q4
- "QQ", NULL, // 1~4 (0 padded Quarter)
- "Q", NULL, // 1~4 (0 padded Quarter)
-
- "s", "%S", // 0~59 (0 padded Second)
- "S", NULL, // (rounded Sub-Second)
-
- "u", "%Y", // (0 padded Year)
-
- "vvvv", "%Z", // (General GMT Timezone Name)
- "vvv", "%Z", // (General GMT Timezone Abbreviation)
- "vv", "%Z", // (General GMT Timezone Abbreviation)
- "v", "%Z", // (General GMT Timezone Abbreviation)
-
- "w", "%W", // 1~53 (0 padded Week of Year, 1st day of week = Sunday, NB, 1st week of year starts from the last Sunday of last year)
- "W", NULL, // 1~5 (0 padded Week of Month, 1st day of week = Sunday)
-
- "yyyy", "%Y", // (Full Year)
- "yyy", "%y", // (2 Digits Year)
- "yy", "%y", // (2 Digits Year)
- "y", "%Y", // (Full Year)
- "YYYY", NULL, // (Full Year, starting from the Sunday of the 1st week of year)
- "YYY", NULL, // (2 Digits Year, starting from the Sunday of the 1st week of year)
- "YY", NULL, // (2 Digits Year, starting from the Sunday of the 1st week of year)
- "Y", NULL, // (Full Year, starting from the Sunday of the 1st week of year)
-
- "zzzz", NULL, // (Specific GMT Timezone Name)
- "zzz", NULL, // (Specific GMT Timezone Abbreviation)
- "zz", NULL, // (Specific GMT Timezone Abbreviation)
- "z", NULL, // (Specific GMT Timezone Abbreviation)
- "Z", "%z", // +0000 (RFC 822 Timezone)
- };
- const gchar *str;
- GString *string;
- guint i, j;
-
- if (nsdate == NULL)
- return NULL;
-
- str = g_hash_table_lookup (data->date_format_cache, nsdate);
- if (str != NULL) {
- return str;
- }
-
- /* Copy nsdate into string, replacing occurences of NSDateFormatter tags
- * by corresponding strftime tag. */
- string = g_string_sized_new (strlen (nsdate));
- for (i = 0; nsdate[i] != '\0'; i++)
- {
- gboolean found = FALSE;
-
- /* even indexes are NSDateFormatter tag, odd indexes are the
- * corresponding strftime tag */
- for (j = 0; j < G_N_ELEMENTS (convert_table); j += 2)
- {
- if (g_str_has_prefix (nsdate + i, convert_table[j]))
- {
- found = TRUE;
- break;
- }
- }
-
- if (found)
- {
- /* If we don't have a replacement, just ignore that tag */
- if (convert_table[j + 1] != NULL)
- g_string_append (string, convert_table[j + 1]);
-
- i += strlen (convert_table[j]) - 1;
- }
- else
- {
- g_string_append_c (string, nsdate[i]);
- }
- }
-
- DEBUG ("Date format converted '%s' → '%s'", nsdate, string->str);
-
- /* The cache takes ownership of string->str */
- g_hash_table_insert (data->date_format_cache, g_strdup (nsdate), string->str);
- return g_string_free (string, FALSE);
-}
-
-static void
-theme_adium_add_html (EmpathyThemeAdium *self,
- const gchar *func,
- const gchar *html,
- const gchar *message,
- const gchar *avatar_filename,
- const gchar *name,
- const gchar *contact_id,
- const gchar *service_name,
- const gchar *message_classes,
- gint64 timestamp,
- gboolean is_backlog,
- gboolean outgoing,
- PangoDirection direction)
-{
- GBytes *bytes;
- GString *string;
- const gchar *cur = NULL;
- const gchar *js;
- gchar *script;
-
- /* Make some search-and-replace in the html code */
- string = g_string_sized_new (strlen (html) + strlen (message));
- g_string_append_printf (string, "%s(\"", func);
-
- for (cur = html; *cur != '\0'; cur++)
- {
- const gchar *replace = NULL;
- gchar *dup_replace = NULL;
- gchar *format = NULL;
-
- /* Those are all well known keywords that needs replacement in
- * html files. Please keep them in the same order than the adium
- * spec. See http://trac.adium.im/wiki/CreatingMessageStyles */
- if (theme_adium_match (&cur, "%userIconPath%"))
- {
- replace = avatar_filename;
- }
- else if (theme_adium_match (&cur, "%senderScreenName%"))
- {
- replace = contact_id;
- }
- else if (theme_adium_match (&cur, "%sender%"))
- {
- replace = name;
- }
- else if (theme_adium_match (&cur, "%senderColor%"))
- {
- /* A color derived from the user's name.
- * FIXME: If a colon separated list of HTML colors is at
- * Incoming/SenderColors.txt it will be used instead of
- * the default colors.
- */
-
- /* Ensure we always use the same color when sending messages
- * (bgo #658821) */
- if (outgoing)
- {
- replace = "inherit";
- }
- else if (contact_id != NULL)
- {
- guint hash = g_str_hash (contact_id);
- replace = colors[hash % G_N_ELEMENTS (colors)];
- }
- }
- else if (theme_adium_match (&cur, "%senderStatusIcon%"))
- {
- /* FIXME: The path to the status icon of the sender
- * (available, away, etc...)
- */
- }
- else if (theme_adium_match (&cur, "%messageDirection%"))
- {
- switch (direction)
- {
- case PANGO_DIRECTION_LTR:
- case PANGO_DIRECTION_TTB_LTR:
- case PANGO_DIRECTION_WEAK_LTR:
- replace = "ltr";
- break;
- case PANGO_DIRECTION_RTL:
- case PANGO_DIRECTION_TTB_RTL:
- case PANGO_DIRECTION_WEAK_RTL:
- replace = "rtl";
- break;
- case PANGO_DIRECTION_NEUTRAL:
- default:
- break;
- }
- }
- else if (theme_adium_match (&cur, "%senderDisplayName%"))
- {
- /* FIXME: The serverside (remotely set) name of the
- * sender, such as an MSN display name.
- *
- * We don't have access to that yet so we use
- * local alias instead.
- */
- replace = name;
- }
- else if (theme_adium_match (&cur, "%senderPrefix%"))
- {
- /* FIXME: If we supported IRC user mode flags, this
- * would be replaced with @ if the user is an op, + if
- * the user has voice, etc. as per
- * http://hg.adium.im/adium/rev/b586b027de42. But we
- * don't, so for now we just strip it. */
- }
- else if (theme_adium_match_with_format (&cur, "%textbackgroundcolor{",
- &format))
- {
- /* FIXME: This keyword is used to represent the
- * highlight background color. "X" is the opacity of the
- * background, ranges from 0 to 1 and can be any decimal
- * between.
- */
- }
- else if (theme_adium_match (&cur, "%message%"))
- {
- replace = message;
- }
- else if (theme_adium_match (&cur, "%time%") ||
- theme_adium_match_with_format (&cur, "%time{", &format))
- {
- const gchar *strftime_format;
-
- strftime_format = nsdate_to_strftime (self->priv->data, format);
- if (is_backlog)
- dup_replace = tpaw_time_to_string_local (timestamp,
- strftime_format ? strftime_format :
- TPAW_TIME_DATE_FORMAT_DISPLAY_SHORT);
- else
- dup_replace = tpaw_time_to_string_local (timestamp,
- strftime_format ? strftime_format :
- TPAW_TIME_FORMAT_DISPLAY_SHORT);
-
- replace = dup_replace;
- }
- else if (theme_adium_match (&cur, "%shortTime%"))
- {
- dup_replace = tpaw_time_to_string_local (timestamp,
- TPAW_TIME_FORMAT_DISPLAY_SHORT);
- replace = dup_replace;
- }
- else if (theme_adium_match (&cur, "%service%"))
- {
- replace = service_name;
- }
- else if (theme_adium_match (&cur, "%variant%"))
- {
- /* FIXME: The name of the active message style variant,
- * with all spaces replaced with an underscore.
- * A variant named "Alternating Messages - Blue Red"
- * will become "Alternating_Messages_-_Blue_Red".
- */
- }
- else if (theme_adium_match (&cur, "%userIcons%"))
- {
- replace = self->priv->show_avatars ? "showIcons" : "hideIcons";
- }
- else if (theme_adium_match (&cur, "%messageClasses%"))
- {
- replace = message_classes;
- }
- else if (theme_adium_match (&cur, "%status%"))
- {
- /* FIXME: A description of the status event. This is
- * neither in the user's local language nor expected to
- * be displayed; it may be useful to use a different div
- * class to present different types of status messages.
- * The following is a list of some of the more important
- * status messages; your message style should be able to
- * handle being shown a status message not in this list,
- * as even at present the list is incomplete and is
- * certain to become out of date in the future:
- * online
- * offline
- * away
- * away_message
- * return_away
- * idle
- * return_idle
- * date_separator
- * contact_joined (group chats)
- * contact_left
- * error
- * timed_out
- * encryption (all OTR messages use this status)
- * purple (all IRC topic and join/part messages use this status)
- * fileTransferStarted
- * fileTransferCompleted
- */
- }
- else
- {
- escape_and_append_len (string, cur, 1);
- continue;
- }
-
- /* Here we have a replacement to make */
- escape_and_append_len (string, replace, -1);
-
- g_free (dup_replace);
- g_free (format);
- }
- g_string_append (string, "\")");
-
- bytes = g_resources_lookup_data ("/org/gnome/Empathy/Chat/empathy-chat.js",
- G_RESOURCE_LOOKUP_FLAGS_NONE,
- NULL);
- js = (const gchar *) g_bytes_get_data (bytes, NULL);
- g_string_prepend (string, js);
- g_bytes_unref (bytes);
-
- script = g_string_free (string, FALSE);
- webkit_web_view_execute_script (WEBKIT_WEB_VIEW (self), script);
- g_free (script);
-}
-
-static void
-theme_adium_append_event_escaped (EmpathyThemeAdium *self,
- const gchar *escaped,
- PangoDirection direction)
-{
- theme_adium_add_html (self, "appendMessage",
- self->priv->data->status_html, escaped, NULL, NULL, NULL,
- NULL, "event", tpaw_time_get_current (), FALSE, FALSE, direction);
-
- /* There is no last contact */
- if (self->priv->last_contact)
- {
- g_object_unref (self->priv->last_contact);
- self->priv->last_contact = NULL;
- }
-}
-
-static void
-theme_adium_remove_focus_marks (EmpathyThemeAdium *self,
- WebKitDOMNodeList *nodes)
-{
- guint i;
-
- /* Remove focus and firstFocus class */
- for (i = 0; i < webkit_dom_node_list_get_length (nodes); i++)
- {
- WebKitDOMNode *node = webkit_dom_node_list_item (nodes, i);
- WebKitDOMHTMLElement *element = WEBKIT_DOM_HTML_ELEMENT (node);
- gchar *class_name;
- gchar **classes, **iter;
- GString *new_class_name;
- gboolean first = TRUE;
-
- if (element == NULL)
- continue;
-
- class_name = webkit_dom_html_element_get_class_name (element);
- classes = g_strsplit (class_name, " ", -1);
- new_class_name = g_string_sized_new (strlen (class_name));
-
- for (iter = classes; *iter != NULL; iter++)
- {
- if (tp_strdiff (*iter, "focus") &&
- tp_strdiff (*iter, "firstFocus"))
- {
- if (!first)
- g_string_append_c (new_class_name, ' ');
-
- g_string_append (new_class_name, *iter);
- first = FALSE;
- }
- }
-
- webkit_dom_html_element_set_class_name (element, new_class_name->str);
-
- g_free (class_name);
- g_strfreev (classes);
- g_string_free (new_class_name, TRUE);
- }
-}
-
-static void
-theme_adium_remove_all_focus_marks (EmpathyThemeAdium *self)
-{
- WebKitDOMDocument *dom;
- WebKitDOMNodeList *nodes;
- GError *error = NULL;
-
- if (!self->priv->has_unread_message)
- return;
-
- self->priv->has_unread_message = FALSE;
-
- dom = webkit_web_view_get_dom_document (WEBKIT_WEB_VIEW (self));
- if (dom == NULL)
- return;
-
- /* Get all nodes with focus class */
- nodes = webkit_dom_document_query_selector_all (dom, ".focus", &error);
-
- if (nodes == NULL)
- {
- DEBUG ("Error getting focus nodes: %s",
- error ? error->message : "No error");
- g_clear_error (&error);
- return;
- }
-
- theme_adium_remove_focus_marks (self, nodes);
-}
-
-enum
-{
- ADD_CONSECUTIVE_MSG_SCROLL = 0,
- ADD_CONSECUTIVE_MSG_NO_SCROLL = 1,
- ADD_MSG_SCROLL = 2,
- ADD_MSG_NO_SCROLL = 3
-};
-
-/*
- * theme_adium_add_message:
- * @self: The #EmpathyThemeAdium used by the view.
- * @msg: An #EmpathyMessage that is to be added to the view.
- * @prev_contact: (out): The #EmpathyContact that sent the previous message.
- * @prev_timestamp: (out): Timestamp of the previous message.
- * @prev_is_backlog: (out): Whether the previous message was fetched
- * from the logs.
- * @should_highlight: Whether the message should be highlighted. eg.,
- * if it matches the user's username in multi-user chat.
- * @js_funcs: An array of JavaScript function names
- *
- * Shows @msg in the chat view by adding to @self. Addition is defined
- * by the JavaScript functions listed in @js_funcs. Common examples
- * are appending new incoming messages or prepending old messages from
- * the logs.
- *
- * @js_funcs should be an array with exactly 4 entries. The entries
- * should be the names of JavaScript functions that take the raw HTML
- * that is to be added to the view as an argument and take the following
- * actions, in this order:
- * - add a new consecutive message and scroll to it if needed,
- * - add a new consecutive message and do not scroll,
- * - add a new non-consecutive message and scroll to it if needed, and
- * - add a new non-consecutive message and do not scroll
- *
- * A message is considered to be consecutive with the previous one if
- * all the following conditions are met:
- * - senders are the same contact,
- * - last message was recieved recently,
- * - last message and this message both are/aren't backlog, and
- * - DisableCombineConsecutive is not set in theme's settings
- */
-static void
-theme_adium_add_message (EmpathyThemeAdium *self,
- EmpathyMessage *msg,
- EmpathyContact **prev_contact,
- gint64 *prev_timestamp,
- gboolean *prev_is_backlog,
- gboolean should_highlight,
- const gchar *js_funcs[])
-{
- EmpathyContact *sender;
- TpMessage *tp_msg;
- TpAccount *account;
- gchar *body_escaped, *name_escaped;
- const gchar *name;
- const gchar *contact_id;
- EmpathyAvatar *avatar;
- const gchar *avatar_filename = NULL;
- gint64 timestamp;
- const gchar *html = NULL;
- const gchar *func;
- const gchar *service_name;
- GString *message_classes = NULL;
- gboolean is_backlog;
- gboolean consecutive;
- gboolean action;
- PangoDirection direction;
-
-
- /* Get information */
- sender = empathy_message_get_sender (msg);
- account = empathy_contact_get_account (sender);
- service_name = tpaw_protocol_name_to_display_name
- (tp_account_get_protocol_name (account));
- if (service_name == NULL)
- service_name = tp_account_get_protocol_name (account);
- timestamp = empathy_message_get_timestamp (msg);
- body_escaped = theme_adium_parse_body (self,
- empathy_message_get_body (msg),
- empathy_message_get_token (msg));
- name = empathy_contact_get_logged_alias (sender);
- contact_id = empathy_contact_get_id (sender);
- action = (empathy_message_get_tptype (msg) ==
- TP_CHANNEL_TEXT_MESSAGE_TYPE_ACTION);
-
- name_escaped = g_markup_escape_text (name, -1);
-
- /* If this is a /me probably */
- if (action)
- {
- gchar *str;
-
- if (self->priv->data->version >= 4 || !self->priv->data->custom_template)
- {
- str = g_strdup_printf ("<span class='actionMessageUserName'>%s</span>"
- "<span class='actionMessageBody'>%s</span>",
- name_escaped, body_escaped);
- }
- else
- {
- str = g_strdup_printf ("*%s*", body_escaped);
- }
-
- g_free (body_escaped);
- body_escaped = str;
- }
-
- /* Get the avatar filename, or a fallback */
- avatar = empathy_contact_get_avatar (sender);
- if (avatar)
- avatar_filename = avatar->filename;
-
- if (!avatar_filename)
- {
- if (empathy_contact_is_user (sender))
- avatar_filename = self->priv->data->default_outgoing_avatar_filename;
- else
- avatar_filename = self->priv->data->default_incoming_avatar_filename;
-
- if (!avatar_filename)
- {
- if (!self->priv->data->default_avatar_filename)
- self->priv->data->default_avatar_filename =
- tpaw_filename_from_icon_name (TPAW_IMAGE_AVATAR_DEFAULT,
- GTK_ICON_SIZE_DIALOG);
-
- avatar_filename = self->priv->data->default_avatar_filename;
- }
- }
-
- is_backlog = empathy_message_is_backlog (msg);
- consecutive = empathy_contact_equal (*prev_contact, sender) &&
- (ABS (timestamp - *prev_timestamp) < MESSAGE_JOIN_PERIOD) &&
- (is_backlog == *prev_is_backlog) &&
- !tp_asv_get_boolean (self->priv->data->info,
- "DisableCombineConsecutive", NULL);
-
- /* Define message classes */
- message_classes = g_string_new ("message");
- if (!self->priv->has_focus && !is_backlog)
- {
- if (!self->priv->has_unread_message)
- {
- g_string_append (message_classes, " firstFocus");
- self->priv->has_unread_message = TRUE;
- }
- g_string_append (message_classes, " focus");
- }
-
- if (is_backlog)
- g_string_append (message_classes, " history");
-
- if (consecutive)
- g_string_append (message_classes, " consecutive");
-
- if (empathy_contact_is_user (sender))
- g_string_append (message_classes, " outgoing");
- else
- g_string_append (message_classes, " incoming");
-
- if (should_highlight)
- g_string_append (message_classes, " mention");
-
- if (empathy_message_get_tptype (msg) ==
- TP_CHANNEL_TEXT_MESSAGE_TYPE_AUTO_REPLY)
- g_string_append (message_classes, " autoreply");
-
- if (action)
- g_string_append (message_classes, " action");
-
- /* FIXME: other classes:
- * status - the message is a status change
- * event - the message is a notification of something happening
- * (for example, encryption being turned on)
- * %status% - See %status% in theme_adium_add_html ()
- */
-
- /* This is slightly a hack, but it's the only way to add
- * arbitrary data to messages in the HTML. We add another
- * class called "x-empathy-message-id-*" to the message. This
- * way, we can remove the unread marker for this specific
- * message later. */
- tp_msg = empathy_message_get_tp_message (msg);
- if (tp_msg != NULL)
- {
- guint32 id;
- gboolean valid;
-
- id = tp_message_get_pending_message_id (tp_msg, &valid);
- if (valid)
- g_string_append_printf (message_classes,
- " x-empathy-message-id-%u", id);
- }
-
- /* Define javascript function to use */
- if (consecutive)
- func = self->priv->allow_scrolling ? js_funcs[ADD_CONSECUTIVE_MSG_SCROLL] :
- js_funcs[ADD_CONSECUTIVE_MSG_NO_SCROLL];
- else
- func = self->priv->allow_scrolling ? js_funcs[ADD_MSG_SCROLL] :
- js_funcs[ADD_MSG_NO_SCROLL];
-
- if (empathy_contact_is_user (sender))
- {
- /* out */
- if (is_backlog)
- /* context */
- html = consecutive ? self->priv->data->out_nextcontext_html :
- self->priv->data->out_context_html;
- else
- /* content */
- html = consecutive ? self->priv->data->out_nextcontent_html :
- self->priv->data->out_content_html;
-
- /* remove all the unread marks when we are sending a message */
- theme_adium_remove_all_focus_marks (self);
- }
- else
- {
- /* in */
- if (is_backlog)
- /* context */
- html = consecutive ? self->priv->data->in_nextcontext_html :
- self->priv->data->in_context_html;
- else
- /* content */
- html = consecutive ? self->priv->data->in_nextcontent_html :
- self->priv->data->in_content_html;
- }
-
- direction = pango_find_base_dir (empathy_message_get_body (msg), -1);
-
- theme_adium_add_html (self, func, html, body_escaped,
- avatar_filename, name_escaped, contact_id,
- service_name, message_classes->str,
- timestamp, is_backlog, empathy_contact_is_user (sender), direction);
-
- /* Keep the sender of the last displayed message */
- if (*prev_contact)
- g_object_unref (*prev_contact);
-
- *prev_contact = g_object_ref (sender);
- *prev_timestamp = timestamp;
- *prev_is_backlog = is_backlog;
-
- g_free (body_escaped);
- g_free (name_escaped);
- g_string_free (message_classes, TRUE);
-}
-
-void
-empathy_theme_adium_append_message (EmpathyThemeAdium *self,
- EmpathyMessage *msg,
- gboolean should_highlight)
-{
- const gchar *js_funcs[] = { "appendNextMessage",
- "appendNextMessageNoScroll",
- "appendMessage",
- "appendMessageNoScroll" };
-
- if (self->priv->pages_loading != 0)
- {
- queue_item (&self->priv->message_queue, QUEUED_MESSAGE, msg, NULL,
- should_highlight, FALSE);
- return;
- }
-
- theme_adium_add_message (self, msg, &self->priv->last_contact,
- &self->priv->last_timestamp, &self->priv->last_is_backlog,
- should_highlight, js_funcs);
-}
-
-void
-empathy_theme_adium_append_event (EmpathyThemeAdium *self,
- const gchar *str)
-{
- gchar *str_escaped;
- PangoDirection direction;
-
- if (self->priv->pages_loading != 0)
- {
- queue_item (&self->priv->message_queue, QUEUED_EVENT, NULL, str, FALSE, FALSE);
- return;
- }
-
- direction = pango_find_base_dir (str, -1);
- str_escaped = g_markup_escape_text (str, -1);
- theme_adium_append_event_escaped (self, str_escaped, direction);
- g_free (str_escaped);
-}
-
-void
-empathy_theme_adium_append_event_markup (EmpathyThemeAdium *self,
- const gchar *markup_text,
- const gchar *fallback_text)
-{
- PangoDirection direction;
-
- direction = pango_find_base_dir (fallback_text, -1);
- theme_adium_append_event_escaped (self, markup_text, direction);
-}
-
-void
-empathy_theme_adium_prepend_message (EmpathyThemeAdium *self,
- EmpathyMessage *msg,
- gboolean should_highlight)
-{
- const gchar *js_funcs[] = { "prependPrev",
- "prependPrev",
- "prepend",
- "prepend" };
-
- if (self->priv->pages_loading != 0)
- {
- queue_item (&self->priv->message_queue, QUEUED_MESSAGE, msg, NULL,
- should_highlight, TRUE);
- return;
- }
-
- theme_adium_add_message (self, msg, &self->priv->first_contact,
- &self->priv->first_timestamp, &self->priv->first_is_backlog,
- should_highlight, js_funcs);
-}
-
-void
-empathy_theme_adium_edit_message (EmpathyThemeAdium *self,
- EmpathyMessage *message)
-{
- WebKitDOMDocument *doc;
- WebKitDOMElement *span;
- gchar *id, *parsed_body;
- gchar *tooltip, *timestamp;
- GtkIconInfo *icon_info;
- GError *error = NULL;
-
- if (self->priv->pages_loading != 0)
- {
- queue_item (&self->priv->message_queue, QUEUED_EDIT, message, NULL, FALSE, FALSE);
- return;
- }
-
- id = g_strdup_printf ("message-token-%s",
- empathy_message_get_supersedes (message));
- /* we don't pass a token here, because doing so will return another
- * <span> element, and we don't want nested <span> elements */
- parsed_body = theme_adium_parse_body (self,
- empathy_message_get_body (message), NULL);
-
- /* find the element */
- doc = webkit_web_view_get_dom_document (WEBKIT_WEB_VIEW (self));
- span = webkit_dom_document_get_element_by_id (doc, id);
-
- if (span == NULL)
- {
- DEBUG ("Failed to find id '%s'", id);
- goto except;
- }
-
- if (!WEBKIT_DOM_IS_HTML_ELEMENT (span))
- {
- DEBUG ("Not a HTML element");
- goto except;
- }
-
- /* update the HTML */
- webkit_dom_html_element_set_inner_html (WEBKIT_DOM_HTML_ELEMENT (span),
- parsed_body, &error);
-
- if (error != NULL)
- {
- DEBUG ("Error setting new inner-HTML: %s", error->message);
- g_error_free (error);
- goto except;
- }
-
- /* set a tooltip */
- timestamp = tpaw_time_to_string_local (
- empathy_message_get_timestamp (message),
- "%H:%M:%S");
- tooltip = g_strdup_printf (_("Message edited at %s"), timestamp);
-
- webkit_dom_html_element_set_title (WEBKIT_DOM_HTML_ELEMENT (span),
- tooltip);
-
- g_free (tooltip);
- g_free (timestamp);
-
- /* mark this message as edited */
- icon_info = gtk_icon_theme_lookup_icon (gtk_icon_theme_get_default (),
- EMPATHY_IMAGE_EDIT_MESSAGE, 16, 0);
-
- if (icon_info != NULL)
- {
- /* set the icon as a background image using CSS
- * FIXME: the icon won't update in response to theme changes */
- gchar *style = g_strdup_printf (
- "background-image:url('%s');"
- "background-repeat:no-repeat;"
- "background-position:left center;"
- "padding-left:19px;", /* 16px icon + 3px padding */
- gtk_icon_info_get_filename (icon_info));
-
- webkit_dom_element_set_attribute (span, "style", style, &error);
-
- if (error != NULL)
- {
- DEBUG ("Error setting element style: %s",
- error->message);
- g_clear_error (&error);
- /* not fatal */
- }
-
- g_free (style);
- gtk_icon_info_free (icon_info);
- }
-
- goto finally;
-
-except:
- DEBUG ("Could not find message to edit with: %s",
- empathy_message_get_body (message));
-
-finally:
- g_free (id);
- g_free (parsed_body);
-}
-
-void
-empathy_theme_adium_scroll (EmpathyThemeAdium *self,
- gboolean allow_scrolling)
-{
- self->priv->allow_scrolling = allow_scrolling;
-
- if (allow_scrolling)
- empathy_theme_adium_scroll_down (self);
-}
-
-void
-empathy_theme_adium_scroll_down (EmpathyThemeAdium *self)
-{
- webkit_web_view_execute_script (WEBKIT_WEB_VIEW (self), "alignChat(true);");
-}
-
-gboolean
-empathy_theme_adium_get_has_selection (EmpathyThemeAdium *self)
-{
- return webkit_web_view_has_selection (WEBKIT_WEB_VIEW (self));
-}
-
-void
-empathy_theme_adium_clear (EmpathyThemeAdium *self)
-{
- theme_adium_load_template (self);
-
- /* Clear last contact to avoid trying to add a 'joined'
- * message when we don't have an insertion point. */
- if (self->priv->last_contact)
- {
- g_object_unref (self->priv->last_contact);
- self->priv->last_contact = NULL;
- }
-}
-
-gboolean
-empathy_theme_adium_find_previous (EmpathyThemeAdium *self,
- const gchar *search_criteria,
- gboolean new_search,
- gboolean match_case)
-{
- /* FIXME: Doesn't respect new_search */
- return webkit_web_view_search_text (WEBKIT_WEB_VIEW (self),
- search_criteria, match_case, FALSE, TRUE);
-}
-
-gboolean
-empathy_theme_adium_find_next (EmpathyThemeAdium *self,
- const gchar *search_criteria,
- gboolean new_search,
- gboolean match_case)
-{
- /* FIXME: Doesn't respect new_search */
- return webkit_web_view_search_text (WEBKIT_WEB_VIEW (self),
- search_criteria, match_case, TRUE, TRUE);
-}
-
-void
-empathy_theme_adium_find_abilities (EmpathyThemeAdium *self,
- const gchar *search_criteria,
- gboolean match_case,
- gboolean *can_do_previous,
- gboolean *can_do_next)
-{
- /* FIXME: Does webkit provide an API for that? We have wrap=true in
- * find_next and find_previous to work around this problem. */
- if (can_do_previous)
- *can_do_previous = TRUE;
- if (can_do_next)
- *can_do_next = TRUE;
-}
-
-void
-empathy_theme_adium_highlight (EmpathyThemeAdium *self,
- const gchar *text,
- gboolean match_case)
-{
- webkit_web_view_unmark_text_matches (WEBKIT_WEB_VIEW (self));
- webkit_web_view_mark_text_matches (WEBKIT_WEB_VIEW (self),
- text, match_case, 0);
- webkit_web_view_set_highlight_text_matches (WEBKIT_WEB_VIEW (self),
- TRUE);
-}
-
-void
-empathy_theme_adium_copy_clipboard (EmpathyThemeAdium *self)
-{
- webkit_web_view_copy_clipboard (WEBKIT_WEB_VIEW (self));
-}
-
-static void
-theme_adium_remove_mark_from_message (EmpathyThemeAdium *self,
- guint32 id)
-{
- WebKitDOMDocument *dom;
- WebKitDOMNodeList *nodes;
- gchar *class;
- GError *error = NULL;
-
- dom = webkit_web_view_get_dom_document (WEBKIT_WEB_VIEW (self));
- if (dom == NULL)
- return;
-
- class = g_strdup_printf (".x-empathy-message-id-%u", id);
-
- /* Get all nodes with focus class */
- nodes = webkit_dom_document_query_selector_all (dom, class, &error);
- g_free (class);
-
- if (nodes == NULL)
- {
- DEBUG ("Error getting focus nodes: %s",
- error ? error->message : "No error");
- g_clear_error (&error);
- return;
- }
-
- theme_adium_remove_focus_marks (self, nodes);
-}
-
-static void
-theme_adium_remove_acked_message_unread_mark_foreach (gpointer data,
- gpointer user_data)
-{
- EmpathyThemeAdium *self = user_data;
- guint32 id = GPOINTER_TO_UINT (data);
-
- theme_adium_remove_mark_from_message (self, id);
-}
-
-void
-empathy_theme_adium_focus_toggled (EmpathyThemeAdium *self,
- gboolean has_focus)
-{
- self->priv->has_focus = has_focus;
- if (!self->priv->has_focus)
- {
- /* We've lost focus, so let's make sure all the acked
- * messages have lost their unread marker. */
- g_queue_foreach (&self->priv->acked_messages,
- theme_adium_remove_acked_message_unread_mark_foreach, self);
- g_queue_clear (&self->priv->acked_messages);
-
- self->priv->has_unread_message = FALSE;
- }
-}
-
-void
-empathy_theme_adium_message_acknowledged (EmpathyThemeAdium *self,
- EmpathyMessage *message)
-{
- TpMessage *tp_msg;
- guint32 id;
- gboolean valid;
-
- tp_msg = empathy_message_get_tp_message (message);
-
- if (tp_msg == NULL)
- return;
-
- id = tp_message_get_pending_message_id (tp_msg, &valid);
- if (!valid)
- {
- g_warning ("Acknoledged message doesn't have a pending ID");
- return;
- }
-
- /* We only want to actually remove the unread marker if the
- * view doesn't have focus. If we did it all the time we would
- * never see the unread markers, ever! So, we'll queue these
- * up, and when we lose focus, we'll remove the markers. */
- if (self->priv->has_focus)
- {
- g_queue_push_tail (&self->priv->acked_messages,
- GUINT_TO_POINTER (id));
- return;
- }
-
- theme_adium_remove_mark_from_message (self, id);
-}
-
-static gboolean
-theme_adium_context_menu_cb (EmpathyThemeAdium *self,
- GtkWidget *default_menu,
- WebKitHitTestResult *hit_test_result,
- gboolean triggered_with_keyboard,
- gpointer user_data)
-{
- GtkWidget *menu;
- EmpathyWebKitMenuFlags flags = EMPATHY_WEBKIT_MENU_CLEAR;
-
- if (g_settings_get_boolean (self->priv->gsettings_chat,
- EMPATHY_PREFS_CHAT_WEBKIT_DEVELOPER_TOOLS))
- flags |= EMPATHY_WEBKIT_MENU_INSPECT;
-
- menu = empathy_webkit_create_context_menu (
- WEBKIT_WEB_VIEW (self), hit_test_result, flags);
-
- gtk_widget_show_all (menu);
-
- gtk_menu_popup (GTK_MENU (menu), NULL, NULL, NULL, NULL, 3,
- gtk_get_current_event_time ());
-
- return TRUE;
-}
-
-void
-empathy_theme_adium_set_show_avatars (EmpathyThemeAdium *self,
- gboolean show_avatars)
-{
- self->priv->show_avatars = show_avatars;
-}
-
-static void
-theme_adium_load_finished_cb (WebKitWebView *view,
- WebKitWebFrame *frame,
- gpointer user_data)
-{
- EmpathyThemeAdium *self = EMPATHY_THEME_ADIUM (view);
- GList *l;
-
- DEBUG ("Page loaded");
- self->priv->pages_loading--;
-
- if (self->priv->pages_loading != 0)
- return;
-
- /* Display queued messages */
- for (l = self->priv->message_queue.head; l != NULL; l = l->next)
- {
- QueuedItem *item = l->data;
-
- switch (item->type)
- {
- case QUEUED_MESSAGE:
- empathy_theme_adium_append_message (self, item->msg,
- item->should_highlight);
- break;
-
- case QUEUED_EDIT:
- empathy_theme_adium_edit_message (self, item->msg);
- break;
-
- case QUEUED_EVENT:
- empathy_theme_adium_append_event (self, item->str);
- break;
- }
-
- free_queued_item (item);
- }
-
- g_queue_clear (&self->priv->message_queue);
-}
-
-static void
-theme_adium_finalize (GObject *object)
-{
- EmpathyThemeAdium *self = EMPATHY_THEME_ADIUM (object);
-
- empathy_adium_data_unref (self->priv->data);
-
- g_object_unref (self->priv->gsettings_chat);
- g_object_unref (self->priv->gsettings_desktop);
-
- g_free (self->priv->variant);
-
- G_OBJECT_CLASS (empathy_theme_adium_parent_class)->finalize (object);
-}
-
-static void
-theme_adium_dispose (GObject *object)
-{
- EmpathyThemeAdium *self = EMPATHY_THEME_ADIUM (object);
-
- if (self->priv->smiley_manager)
- {
- g_object_unref (self->priv->smiley_manager);
- self->priv->smiley_manager = NULL;
- }
-
- g_clear_object (&self->priv->first_contact);
-
- if (self->priv->last_contact)
- {
- g_object_unref (self->priv->last_contact);
- self->priv->last_contact = NULL;
- }
-
- if (self->priv->inspector_window)
- {
- gtk_widget_destroy (self->priv->inspector_window);
- self->priv->inspector_window = NULL;
- }
-
- if (self->priv->acked_messages.length > 0)
- {
- g_queue_clear (&self->priv->acked_messages);
- }
-
- G_OBJECT_CLASS (empathy_theme_adium_parent_class)->dispose (object);
-}
-
-static gboolean
-theme_adium_inspector_show_window_cb (WebKitWebInspector *inspector,
- EmpathyThemeAdium *self)
-{
- if (self->priv->inspector_window)
- {
- gtk_widget_show_all (self->priv->inspector_window);
- }
-
- return TRUE;
-}
-
-static gboolean
-theme_adium_inspector_close_window_cb (WebKitWebInspector *inspector,
- EmpathyThemeAdium *self)
-{
- if (self->priv->inspector_window)
- {
- gtk_widget_hide (self->priv->inspector_window);
- }
-
- return TRUE;
-}
-
-static WebKitWebView *
-theme_adium_inspect_web_view_cb (WebKitWebInspector *inspector,
- WebKitWebView *web_view,
- EmpathyThemeAdium *self)
-{
- GtkWidget *scrolled_window;
- GtkWidget *inspector_web_view;
-
- if (!self->priv->inspector_window)
- {
- /* Create main window */
- self->priv->inspector_window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
-
- gtk_window_set_default_size (GTK_WINDOW (self->priv->inspector_window),
- 800, 600);
-
- g_signal_connect (self->priv->inspector_window, "delete-event",
- G_CALLBACK (gtk_widget_hide_on_delete), NULL);
-
- /* Pack a scrolled window */
- scrolled_window = gtk_scrolled_window_new (NULL, NULL);
-
- gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window),
- GTK_POLICY_AUTOMATIC,
- GTK_POLICY_AUTOMATIC);
- gtk_container_add (GTK_CONTAINER (self->priv->inspector_window),
- scrolled_window);
- gtk_widget_show (scrolled_window);
-
- /* Pack a webview in the scrolled window. That webview will be
- * used to render the inspector tool. */
- inspector_web_view = webkit_web_view_new ();
- gtk_container_add (GTK_CONTAINER (scrolled_window),
- inspector_web_view);
- gtk_widget_show (scrolled_window);
-
- return WEBKIT_WEB_VIEW (inspector_web_view);
- }
-
- return NULL;
-}
-
-static void
-theme_adium_constructed (GObject *object)
-{
- EmpathyThemeAdium *self = EMPATHY_THEME_ADIUM (object);
- const gchar *font_family = NULL;
- gint font_size = 0;
- WebKitWebView *webkit_view = WEBKIT_WEB_VIEW (object);
- WebKitWebInspector *webkit_inspector;
-
- /* Set default settings */
- font_family = tp_asv_get_string (self->priv->data->info, "DefaultFontFamily");
- font_size = tp_asv_get_int32 (self->priv->data->info, "DefaultFontSize", NULL);
-
- if (font_family && font_size)
- {
- g_object_set (webkit_web_view_get_settings (webkit_view),
- "default-font-family", font_family,
- "default-font-size", font_size,
- NULL);
- }
- else
- {
- empathy_webkit_bind_font_setting (webkit_view,
- self->priv->gsettings_desktop,
- EMPATHY_PREFS_DESKTOP_INTERFACE_DOCUMENT_FONT_NAME);
- }
-
- /* Setup webkit inspector */
- webkit_inspector = webkit_web_view_get_inspector (webkit_view);
- g_signal_connect (webkit_inspector, "inspect-web-view",
- G_CALLBACK (theme_adium_inspect_web_view_cb), object);
- g_signal_connect (webkit_inspector, "show-window",
- G_CALLBACK (theme_adium_inspector_show_window_cb), object);
- g_signal_connect (webkit_inspector, "close-window",
- G_CALLBACK (theme_adium_inspector_close_window_cb), object);
-
- /* Load template */
- theme_adium_load_template (EMPATHY_THEME_ADIUM (object));
-
- self->priv->in_construction = FALSE;
-}
-
-static void
-theme_adium_get_property (GObject *object,
- guint param_id,
- GValue *value,
- GParamSpec *pspec)
-{
- EmpathyThemeAdium *self = EMPATHY_THEME_ADIUM (object);
-
- switch (param_id)
- {
- case PROP_ADIUM_DATA:
- g_value_set_boxed (value, self->priv->data);
- break;
- case PROP_VARIANT:
- g_value_set_string (value, self->priv->variant);
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, pspec);
- break;
- };
-}
-
-static void
-theme_adium_set_property (GObject *object,
- guint param_id,
- const GValue *value,
- GParamSpec *pspec)
-{
- EmpathyThemeAdium *self = EMPATHY_THEME_ADIUM (object);
-
- switch (param_id)
- {
- case PROP_ADIUM_DATA:
- g_assert (self->priv->data == NULL);
- self->priv->data = g_value_dup_boxed (value);
- break;
- case PROP_VARIANT:
- empathy_theme_adium_set_variant (self, g_value_get_string (value));
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, pspec);
- break;
- };
-}
-
-static void
-empathy_theme_adium_class_init (EmpathyThemeAdiumClass *klass)
-{
- GObjectClass *object_class = G_OBJECT_CLASS (klass);
-
- object_class->finalize = theme_adium_finalize;
- object_class->dispose = theme_adium_dispose;
- object_class->constructed = theme_adium_constructed;
- object_class->get_property = theme_adium_get_property;
- object_class->set_property = theme_adium_set_property;
-
- g_object_class_install_property (object_class, PROP_ADIUM_DATA,
- g_param_spec_boxed ("adium-data",
- "The theme data",
- "Data for the adium theme",
- EMPATHY_TYPE_ADIUM_DATA,
- G_PARAM_CONSTRUCT_ONLY |
- G_PARAM_READWRITE |
- G_PARAM_STATIC_STRINGS));
-
- g_object_class_install_property (object_class, PROP_VARIANT,
- g_param_spec_string ("variant",
- "The theme variant",
- "Variant name for the theme",
- NULL,
- G_PARAM_CONSTRUCT |
- G_PARAM_READWRITE |
- G_PARAM_STATIC_STRINGS));
-
- g_type_class_add_private (object_class, sizeof (EmpathyThemeAdiumPriv));
-}
-
-static void
-empathy_theme_adium_init (EmpathyThemeAdium *self)
-{
- self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self,
- EMPATHY_TYPE_THEME_ADIUM, EmpathyThemeAdiumPriv);
-
- self->priv->in_construction = TRUE;
- g_queue_init (&self->priv->message_queue);
- self->priv->allow_scrolling = TRUE;
- self->priv->smiley_manager = empathy_smiley_manager_dup_singleton ();
-
- /* Show avatars by default. */
- self->priv->show_avatars = TRUE;
-
- g_signal_connect (self, "load-finished",
- G_CALLBACK (theme_adium_load_finished_cb), NULL);
- g_signal_connect (self, "navigation-policy-decision-requested",
- G_CALLBACK (theme_adium_navigation_policy_decision_requested_cb), NULL);
- g_signal_connect (self, "context-menu",
- G_CALLBACK (theme_adium_context_menu_cb), NULL);
-
- self->priv->gsettings_chat = g_settings_new (EMPATHY_PREFS_CHAT_SCHEMA);
- self->priv->gsettings_desktop = g_settings_new (
- EMPATHY_PREFS_DESKTOP_INTERFACE_SCHEMA);
-}
-
-EmpathyThemeAdium *
-empathy_theme_adium_new (EmpathyAdiumData *data,
- const gchar *variant)
-{
- g_return_val_if_fail (data != NULL, NULL);
-
- return g_object_new (EMPATHY_TYPE_THEME_ADIUM,
- "adium-data", data,
- "variant", variant,
- NULL);
-}
-
-void
-empathy_theme_adium_set_variant (EmpathyThemeAdium *self,
- const gchar *variant)
-{
- gchar *variant_path;
- gchar *script;
-
- if (!tp_strdiff (self->priv->variant, variant))
- return;
-
- g_free (self->priv->variant);
- self->priv->variant = g_strdup (variant);
-
- if (self->priv->in_construction)
- return;
-
- DEBUG ("Update view with variant: '%s'", variant);
- variant_path = adium_info_dup_path_for_variant (self->priv->data->info,
- self->priv->variant);
- script = g_strdup_printf ("setStylesheet(\"mainStyle\",\"%s\");",
- variant_path);
-
- webkit_web_view_execute_script (WEBKIT_WEB_VIEW (self), script);
-
- g_free (variant_path);
- g_free (script);
-
- g_object_notify (G_OBJECT (self), "variant");
-}
-
-void
-empathy_theme_adium_show_inspector (EmpathyThemeAdium *self)
-{
- WebKitWebView *web_view = WEBKIT_WEB_VIEW (self);
-
- empathy_webkit_show_inspector (web_view);
-}
-
-gboolean
-empathy_adium_path_is_valid (const gchar *path)
-{
- gboolean ret;
- gchar *file;
- gchar **tmp;
- const gchar *dir;
-
- if (path[0] != '/')
- return FALSE;
-
- /* The directory has to be *.AdiumMessageStyle per the Adium spec */
- tmp = g_strsplit (path, "/", 0);
- if (tmp == NULL)
- return FALSE;
-
- dir = tmp[g_strv_length (tmp) - 1];
-
- if (!g_str_has_suffix (dir, ".AdiumMessageStyle"))
- {
- g_strfreev (tmp);
- return FALSE;
- }
-
- g_strfreev (tmp);
-
- /* The theme is not valid if there is no Info.plist */
- file = g_build_filename (path, "Contents", "Info.plist",
- NULL);
- ret = g_file_test (file, G_FILE_TEST_EXISTS);
- g_free (file);
-
- if (!ret)
- return FALSE;
-
- /* We ship a default Template.html as fallback if there is any problem
- * with the one inside the theme. The only other required file is
- * Content.html OR Incoming/Content.html*/
- file = g_build_filename (path, "Contents", "Resources", "Content.html",
- NULL);
- ret = g_file_test (file, G_FILE_TEST_EXISTS);
- g_free (file);
-
- if (!ret)
- {
- file = g_build_filename (path, "Contents", "Resources", "Incoming",
- "Content.html", NULL);
- ret = g_file_test (file, G_FILE_TEST_EXISTS);
- g_free (file);
- }
-
- return ret;
-}
-
-GHashTable *
-empathy_adium_info_new (const gchar *path)
-{
- gchar *file;
- GValue *value;
- GHashTable *info = NULL;
-
- g_return_val_if_fail (empathy_adium_path_is_valid (path), NULL);
-
- file = g_build_filename (path, "Contents", "Info.plist", NULL);
- value = empathy_plist_parse_from_file (file);
- g_free (file);
-
- if (value == NULL)
- return NULL;
-
- info = g_value_dup_boxed (value);
- tp_g_value_slice_free (value);
-
- /* Insert the theme's path into the hash table,
- * keys have to be dupped */
- tp_asv_set_string (info, g_strdup ("path"), path);
-
- return info;
-}
-
-static guint
-adium_info_get_version (GHashTable *info)
-{
- return tp_asv_get_int32 (info, "MessageViewVersion", NULL);
-}
-
-static const gchar *
-adium_info_get_no_variant_name (GHashTable *info)
-{
- const gchar *name = tp_asv_get_string (info, "DisplayNameForNoVariant");
- return name ? name : _("Normal");
-}
-
-static gchar *
-adium_info_dup_path_for_variant (GHashTable *info,
- const gchar *variant)
-{
- guint version = adium_info_get_version (info);
- const gchar *no_variant = adium_info_get_no_variant_name (info);
- GPtrArray *variants;
- guint i;
-
- if (version <= 2 && !tp_strdiff (variant, no_variant))
- return g_strdup ("main.css");
-
- variants = empathy_adium_info_get_available_variants (info);
- if (variants->len == 0)
- return g_strdup ("main.css");
-
- /* Verify the variant exists, fallback to the first one */
- for (i = 0; i < variants->len; i++)
- {
- if (!tp_strdiff (variant, g_ptr_array_index (variants, i)))
- break;
- }
-
- if (i == variants->len)
- {
- DEBUG ("Variant %s does not exist", variant);
- variant = g_ptr_array_index (variants, 0);
- }
-
- return g_strdup_printf ("Variants/%s.css", variant);
-
-}
-
-const gchar *
-empathy_adium_info_get_default_variant (GHashTable *info)
-{
- if (adium_info_get_version (info) <= 2)
- return adium_info_get_no_variant_name (info);
-
- return tp_asv_get_string (info, "DefaultVariant");
-}
-
-GPtrArray *
-empathy_adium_info_get_available_variants (GHashTable *info)
-{
- GPtrArray *variants;
- const gchar *path;
- gchar *dirpath;
- GDir *dir;
-
- variants = tp_asv_get_boxed (info, "AvailableVariants", G_TYPE_PTR_ARRAY);
- if (variants != NULL)
- return variants;
-
- variants = g_ptr_array_new_with_free_func (g_free);
- tp_asv_take_boxed (info, g_strdup ("AvailableVariants"),
- G_TYPE_PTR_ARRAY, variants);
-
- path = tp_asv_get_string (info, "path");
- dirpath = g_build_filename (path, "Contents", "Resources", "Variants", NULL);
- dir = g_dir_open (dirpath, 0, NULL);
- if (dir != NULL)
- {
- const gchar *name;
-
- for (name = g_dir_read_name (dir);
- name != NULL;
- name = g_dir_read_name (dir))
- {
- gchar *display_name;
-
- if (!g_str_has_suffix (name, ".css"))
- continue;
-
- display_name = g_strdup (name);
- strstr (display_name, ".css")[0] = '\0';
- g_ptr_array_add (variants, display_name);
- }
-
- g_dir_close (dir);
- }
- g_free (dirpath);
-
- if (adium_info_get_version (info) <= 2)
- g_ptr_array_add (variants,
- g_strdup (adium_info_get_no_variant_name (info)));
-
- return variants;
-}
-
-GType
-empathy_adium_data_get_type (void)
-{
- static GType type_id = 0;
-
- if (!type_id)
- {
- type_id = g_boxed_type_register_static ("EmpathyAdiumData",
- (GBoxedCopyFunc) empathy_adium_data_ref,
- (GBoxedFreeFunc) empathy_adium_data_unref);
- }
-
- return type_id;
-}
-
-EmpathyAdiumData *
-empathy_adium_data_new_with_info (const gchar *path,
- GHashTable *info)
-{
- EmpathyAdiumData *data;
- gchar *template_html = NULL;
- gchar *footer_html = NULL;
- gchar *tmp;
-
- g_return_val_if_fail (empathy_adium_path_is_valid (path), NULL);
-
- data = g_slice_new0 (EmpathyAdiumData);
- data->ref_count = 1;
- data->path = g_strdup (path);
- data->basedir = g_strconcat (path, G_DIR_SEPARATOR_S "Contents"
- G_DIR_SEPARATOR_S "Resources" G_DIR_SEPARATOR_S, NULL);
- data->info = g_hash_table_ref (info);
- data->version = adium_info_get_version (info);
- data->strings_to_free = g_ptr_array_new_with_free_func (g_free);
- data->date_format_cache = g_hash_table_new_full (g_str_hash,
- g_str_equal, g_free, g_free);
-
- DEBUG ("Loading theme at %s", path);
-
-#define LOAD(path, var) \
- tmp = g_build_filename (data->basedir, path, NULL); \
- g_file_get_contents (tmp, &var, NULL, NULL); \
- g_free (tmp); \
-
-#define LOAD_CONST(path, var) \
- { \
- gchar *content; \
- LOAD (path, content); \
- if (content != NULL) { \
- g_ptr_array_add (data->strings_to_free, content); \
- } \
- var = content; \
- }
-
- /* Load html files */
- LOAD_CONST ("Content.html", data->content_html);
- LOAD_CONST ("Incoming/Content.html", data->in_content_html);
- LOAD_CONST ("Incoming/NextContent.html", data->in_nextcontent_html);
- LOAD_CONST ("Incoming/Context.html", data->in_context_html);
- LOAD_CONST ("Incoming/NextContext.html", data->in_nextcontext_html);
- LOAD_CONST ("Outgoing/Content.html", data->out_content_html);
- LOAD_CONST ("Outgoing/NextContent.html", data->out_nextcontent_html);
- LOAD_CONST ("Outgoing/Context.html", data->out_context_html);
- LOAD_CONST ("Outgoing/NextContext.html", data->out_nextcontext_html);
- LOAD_CONST ("Status.html", data->status_html);
- LOAD ("Template.html", template_html);
- LOAD ("Footer.html", footer_html);
-
-#undef LOAD_CONST
-#undef LOAD
-
- /* HTML fallbacks: If we have at least content OR in_content, then
- * everything else gets a fallback */
-
-#define FALLBACK(html, fallback) \
- if (html == NULL) { \
- html = fallback; \
- }
-
- /* in_nextcontent -> in_content -> content */
- FALLBACK (data->in_content_html, data->content_html);
- FALLBACK (data->in_nextcontent_html, data->in_content_html);
-
- /* context -> content */
- FALLBACK (data->in_context_html, data->in_content_html);
- FALLBACK (data->in_nextcontext_html, data->in_nextcontent_html);
- FALLBACK (data->out_context_html, data->out_content_html);
- FALLBACK (data->out_nextcontext_html, data->out_nextcontent_html);
-
- /* out -> in */
- FALLBACK (data->out_content_html, data->in_content_html);
- FALLBACK (data->out_nextcontent_html, data->in_nextcontent_html);
- FALLBACK (data->out_context_html, data->in_context_html);
- FALLBACK (data->out_nextcontext_html, data->in_nextcontext_html);
-
- /* status -> in_content */
- FALLBACK (data->status_html, data->in_content_html);
-
-#undef FALLBACK
-
- /* template -> empathy's template */
- data->custom_template = (template_html != NULL);
- if (template_html == NULL)
- {
- GError *error = NULL;
-
- tmp = empathy_file_lookup ("Template.html", "data");
-
- if (!g_file_get_contents (tmp, &template_html, NULL, &error)) {
- g_warning ("couldn't load Empathy's default theme "
- "template: %s", error->message);
- g_return_val_if_reached (data);
- }
-
- g_free (tmp);
- }
-
- /* Default avatar */
- tmp = g_build_filename (data->basedir, "Incoming", "buddy_icon.png", NULL);
- if (g_file_test (tmp, G_FILE_TEST_EXISTS | G_FILE_TEST_IS_REGULAR))
- {
- data->default_incoming_avatar_filename = tmp;
- }
- else
- {
- g_free (tmp);
- }
-
- tmp = g_build_filename (data->basedir, "Outgoing", "buddy_icon.png", NULL);
- if (g_file_test (tmp, G_FILE_TEST_EXISTS | G_FILE_TEST_IS_REGULAR))
- {
- data->default_outgoing_avatar_filename = tmp;
- }
- else
- {
- g_free (tmp);
- }
-
- /* Old custom templates had only 4 parameters.
- * New templates have 5 parameters */
- if (data->version <= 2 && data->custom_template)
- {
- tmp = string_with_format (template_html,
- data->basedir,
- "%@", /* Leave variant unset */
- "", /* The header */
- footer_html ? footer_html : "",
- NULL);
- }
- else
- {
- tmp = string_with_format (template_html,
- data->basedir,
- data->version <= 2 ? "" : "@import url( \"main.css\" );",
- "%@", /* Leave variant unset */
- "", /* The header */
- footer_html ? footer_html : "",
- NULL);
- }
- g_ptr_array_add (data->strings_to_free, tmp);
- data->template_html = tmp;
-
- g_free (template_html);
- g_free (footer_html);
-
- return data;
-}
-
-EmpathyAdiumData *
-empathy_adium_data_new (const gchar *path)
-{
- EmpathyAdiumData *data;
- GHashTable *info;
-
- info = empathy_adium_info_new (path);
- data = empathy_adium_data_new_with_info (path, info);
- g_hash_table_unref (info);
-
- return data;
-}
-
-EmpathyAdiumData *
-empathy_adium_data_ref (EmpathyAdiumData *data)
-{
- g_return_val_if_fail (data != NULL, NULL);
-
- g_atomic_int_inc (&data->ref_count);
-
- return data;
-}
-
-void
-empathy_adium_data_unref (EmpathyAdiumData *data)
-{
- g_return_if_fail (data != NULL);
-
- if (g_atomic_int_dec_and_test (&data->ref_count)) {
- g_free (data->path);
- g_free (data->basedir);
- g_free (data->default_avatar_filename);
- g_free (data->default_incoming_avatar_filename);
- g_free (data->default_outgoing_avatar_filename);
- g_hash_table_unref (data->info);
- g_ptr_array_unref (data->strings_to_free);
- tp_clear_pointer (&data->date_format_cache, g_hash_table_unref);
-
- g_slice_free (EmpathyAdiumData, data);
- }
-}
-
-GHashTable *
-empathy_adium_data_get_info (EmpathyAdiumData *data)
-{
- g_return_val_if_fail (data != NULL, NULL);
-
- return data->info;
-}
-
-const gchar *
-empathy_adium_data_get_path (EmpathyAdiumData *data)
-{
- g_return_val_if_fail (data != NULL, NULL);
-
- return data->path;
-}
diff --git a/libempathy-gtk/empathy-theme-adium.h b/libempathy-gtk/empathy-theme-adium.h
deleted file mode 100644
index 698d2846..00000000
--- a/libempathy-gtk/empathy-theme-adium.h
+++ /dev/null
@@ -1,157 +0,0 @@
-/*
- * Copyright (C) 2008-2012 Collabora Ltd.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- *
- * Authors: Xavier Claessens <xclaesse@gmail.com>
- */
-
-#ifndef __EMPATHY_THEME_ADIUM_H__
-#define __EMPATHY_THEME_ADIUM_H__
-
-#include <webkit/webkitwebview.h>
-
-#include "empathy-message.h"
-
-G_BEGIN_DECLS
-
-/* TYPE MACROS */
-#define EMPATHY_TYPE_THEME_ADIUM \
- (empathy_theme_adium_get_type ())
-#define EMPATHY_THEME_ADIUM(obj) \
- (G_TYPE_CHECK_INSTANCE_CAST((obj), \
- EMPATHY_TYPE_THEME_ADIUM, \
- EmpathyThemeAdium))
-#define EMPATHY_THEME_ADIUM_CLASS(klass) \
- (G_TYPE_CHECK_CLASS_CAST((klass), \
- EMPATHY_TYPE_THEME_ADIUM, \
- EmpathyThemeAdiumClass))
-#define EMPATHY_IS_THEME_ADIUM(obj) \
- (G_TYPE_CHECK_INSTANCE_TYPE((obj), \
- EMPATHY_TYPE_THEME_ADIUM))
-#define EMPATHY_IS_THEME_ADIUM_CLASS(klass) \
- (G_TYPE_CHECK_CLASS_TYPE((klass), \
- EMPATHY_TYPE_THEME_ADIUM))
-#define EMPATHY_THEME_ADIUM_GET_CLASS(obj) \
- (G_TYPE_INSTANCE_GET_CLASS ((obj), \
- EMPATHY_TYPE_THEME_ADIUM, \
- EmpathyThemeAdiumClass))
-
-
-
-typedef struct _EmpathyThemeAdium EmpathyThemeAdium;
-typedef struct _EmpathyThemeAdiumClass EmpathyThemeAdiumClass;
-typedef struct _EmpathyThemeAdiumPriv EmpathyThemeAdiumPriv;
-
-typedef struct _EmpathyAdiumData EmpathyAdiumData;
-
-struct _EmpathyThemeAdium
-{
- WebKitWebView parent;
- EmpathyThemeAdiumPriv *priv;
-};
-
-struct _EmpathyThemeAdiumClass
-{
- WebKitWebViewClass parent_class;
-};
-
-GType empathy_theme_adium_get_type (void) G_GNUC_CONST;
-
-EmpathyThemeAdium *empathy_theme_adium_new (EmpathyAdiumData *data,
- const gchar *variant);
-void empathy_theme_adium_set_variant (EmpathyThemeAdium *theme,
- const gchar *variant);
-void empathy_theme_adium_show_inspector (EmpathyThemeAdium *theme);
-
-void empathy_theme_adium_append_message (EmpathyThemeAdium *self,
- EmpathyMessage *msg,
- gboolean should_highlight);
-
-void empathy_theme_adium_append_event (EmpathyThemeAdium *self,
- const gchar *str);
-
-void empathy_theme_adium_append_event_markup (EmpathyThemeAdium *self,
- const gchar *markup_text,
- const gchar *fallback_text);
-
-void empathy_theme_adium_prepend_message (EmpathyThemeAdium *self,
- EmpathyMessage *msg,
- gboolean should_highlight);
-
-void empathy_theme_adium_edit_message (EmpathyThemeAdium *self,
- EmpathyMessage *message);
-
-void empathy_theme_adium_scroll (EmpathyThemeAdium *self,
- gboolean allow_scrolling);
-
-void empathy_theme_adium_scroll_down (EmpathyThemeAdium *self);
-
-gboolean empathy_theme_adium_get_has_selection (EmpathyThemeAdium *self);
-
-void empathy_theme_adium_clear (EmpathyThemeAdium *self);
-
-gboolean empathy_theme_adium_find_previous (EmpathyThemeAdium *self,
- const gchar *search_criteria,
- gboolean new_search,
- gboolean match_case);
-
-gboolean empathy_theme_adium_find_next (EmpathyThemeAdium *self,
- const gchar *search_criteria,
- gboolean new_search,
- gboolean match_case);
-
-void empathy_theme_adium_find_abilities (EmpathyThemeAdium *self,
- const gchar *search_criteria,
- gboolean match_case,
- gboolean *can_do_previous,
- gboolean *can_do_next);
-
-void empathy_theme_adium_highlight (EmpathyThemeAdium *self,
- const gchar *text,
- gboolean match_case);
-
-void empathy_theme_adium_copy_clipboard (EmpathyThemeAdium *self);
-
-void empathy_theme_adium_focus_toggled (EmpathyThemeAdium *self,
- gboolean has_focus);
-
-void empathy_theme_adium_message_acknowledged (EmpathyThemeAdium *self,
- EmpathyMessage *message);
-
-void empathy_theme_adium_set_show_avatars (EmpathyThemeAdium *self,
- gboolean show_avatars);
-
-/* not methods functions */
-
-gboolean empathy_adium_path_is_valid (const gchar *path);
-
-GHashTable *empathy_adium_info_new (const gchar *path);
-const gchar * empathy_adium_info_get_default_variant (GHashTable *info);
-GPtrArray * empathy_adium_info_get_available_variants (GHashTable *info);
-
-#define EMPATHY_TYPE_ADIUM_DATA (empathy_adium_data_get_type ())
-GType empathy_adium_data_get_type (void) G_GNUC_CONST;
-EmpathyAdiumData *empathy_adium_data_new (const gchar *path);
-EmpathyAdiumData *empathy_adium_data_new_with_info (const gchar *path,
- GHashTable *info);
-EmpathyAdiumData *empathy_adium_data_ref (EmpathyAdiumData *data);
-void empathy_adium_data_unref (EmpathyAdiumData *data);
-GHashTable *empathy_adium_data_get_info (EmpathyAdiumData *data);
-const gchar *empathy_adium_data_get_path (EmpathyAdiumData *data);
-
-G_END_DECLS
-
-#endif /* __EMPATHY_THEME_ADIUM_H__ */
diff --git a/libempathy-gtk/empathy-theme-manager.c b/libempathy-gtk/empathy-theme-manager.c
deleted file mode 100644
index 81361c1e..00000000
--- a/libempathy-gtk/empathy-theme-manager.c
+++ /dev/null
@@ -1,450 +0,0 @@
-/*
- * Copyright (C) 2005-2007 Imendio AB
- * Copyright (C) 2008-2012 Collabora Ltd.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301 USA
- *
- * Authors: Xavier Claessens <xclaesse@gmail.com>
- */
-
-#include "config.h"
-#include "empathy-theme-manager.h"
-
-#include "empathy-gsettings.h"
-
-#define DEBUG_FLAG EMPATHY_DEBUG_OTHER
-#include "empathy-debug.h"
-
-struct _EmpathyThemeManagerPriv
-{
- GSettings *gsettings_chat;
- guint emit_changed_idle;
- gboolean in_constructor;
-
- EmpathyAdiumData *adium_data;
- gchar *adium_variant;
- /* list of weakref to EmpathyThemeAdium objects */
- GList *adium_views;
-};
-
-enum
-{
- THEME_CHANGED,
- LAST_SIGNAL
-};
-
-static guint signals[LAST_SIGNAL] = { 0 };
-
-G_DEFINE_TYPE (EmpathyThemeManager, empathy_theme_manager, G_TYPE_OBJECT);
-
-static gboolean
-theme_manager_emit_changed_idle_cb (gpointer manager)
-{
- EmpathyThemeManager *self = manager;
- const gchar *adium_path = NULL;
-
- if (self->priv->adium_data)
- adium_path = empathy_adium_data_get_path (self->priv->adium_data);
-
- DEBUG ("Emit theme-changed with: adium_path='%s' "
- "adium_variant='%s'", adium_path, self->priv->adium_variant);
-
- g_signal_emit (self, signals[THEME_CHANGED], 0, NULL);
- self->priv->emit_changed_idle = 0;
-
- return FALSE;
-}
-
-static void
-theme_manager_emit_changed (EmpathyThemeManager *self)
-{
- /* We emit the signal in idle callback to be sure we emit it only once
- * in the case both the name and adium_path changed */
- if (self->priv->emit_changed_idle == 0 && !self->priv->in_constructor)
- {
- self->priv->emit_changed_idle = g_idle_add (
- theme_manager_emit_changed_idle_cb, self);
- }
-}
-
-static void
-theme_manager_view_weak_notify_cb (gpointer data,
- GObject *where_the_object_was)
-{
- GList **list = data;
-
- *list = g_list_remove (*list, where_the_object_was);
-}
-
-static void
-clear_list_of_views (GList **views)
-{
- while (*views)
- {
- g_object_weak_unref ((*views)->data,
- theme_manager_view_weak_notify_cb,
- views);
-
- *views = g_list_delete_link (*views, *views);
- }
-}
-
-static EmpathyThemeAdium *
-theme_manager_create_adium_view (EmpathyThemeManager *self)
-{
- EmpathyThemeAdium *theme;
-
- theme = empathy_theme_adium_new (self->priv->adium_data, self->priv->adium_variant);
-
- self->priv->adium_views = g_list_prepend (self->priv->adium_views, theme);
-
- g_object_weak_ref (G_OBJECT (theme),
- theme_manager_view_weak_notify_cb,
- &self->priv->adium_views);
-
- return theme;
-}
-
-static void
-theme_manager_notify_theme_cb (GSettings *gsettings_chat,
- const gchar *key,
- gpointer user_data)
-{
- EmpathyThemeManager *self = EMPATHY_THEME_MANAGER (user_data);
- gchar *theme, *path;
-
- theme = g_settings_get_string (gsettings_chat, key);
-
- path = empathy_theme_manager_find_theme (theme);
- if (path == NULL)
- {
- DEBUG ("Can't find theme: %s; fallback to 'Classic'",
- theme);
-
- path = empathy_theme_manager_find_theme ("Classic");
- if (path == NULL)
- g_critical ("Can't find 'Classic theme");
- }
-
- /* Load new theme data, we can stop tracking existing views since we
- * won't be able to change them live anymore */
- clear_list_of_views (&self->priv->adium_views);
- tp_clear_pointer (&self->priv->adium_data, empathy_adium_data_unref);
- self->priv->adium_data = empathy_adium_data_new (path);
-
- theme_manager_emit_changed (self);
-
- g_free (path);
- g_free (theme);
-}
-
-static void
-theme_manager_notify_adium_variant_cb (GSettings *gsettings_chat,
- const gchar *key,
- gpointer user_data)
-{
- EmpathyThemeManager *self = EMPATHY_THEME_MANAGER (user_data);
- gchar *new_variant;
- GList *l;
-
- new_variant = g_settings_get_string (gsettings_chat, key);
- if (!tp_strdiff (self->priv->adium_variant, new_variant))
- {
- g_free (new_variant);
- return;
- }
-
- g_free (self->priv->adium_variant);
- self->priv->adium_variant = new_variant;
-
- for (l = self->priv->adium_views; l; l = l->next)
- {
- empathy_theme_adium_set_variant (EMPATHY_THEME_ADIUM (l->data),
- self->priv->adium_variant);
- }
-}
-
-EmpathyThemeAdium *
-empathy_theme_manager_create_view (EmpathyThemeManager *self)
-{
- g_return_val_if_fail (EMPATHY_IS_THEME_MANAGER (self), NULL);
-
- if (self->priv->adium_data != NULL)
- return theme_manager_create_adium_view (self);
-
- g_return_val_if_reached (NULL);
-}
-
-static void
-theme_manager_finalize (GObject *object)
-{
- EmpathyThemeManager *self = (EmpathyThemeManager *) object;
-
- g_object_unref (self->priv->gsettings_chat);
-
- if (self->priv->emit_changed_idle != 0)
- g_source_remove (self->priv->emit_changed_idle);
-
- clear_list_of_views (&self->priv->adium_views);
- g_free (self->priv->adium_variant);
- tp_clear_pointer (&self->priv->adium_data, empathy_adium_data_unref);
-
- G_OBJECT_CLASS (empathy_theme_manager_parent_class)->finalize (object);
-}
-
-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_generic,
- 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 *self)
-{
- self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self,
- EMPATHY_TYPE_THEME_MANAGER, EmpathyThemeManagerPriv);
-
- self->priv->in_constructor = TRUE;
-
- self->priv->gsettings_chat = g_settings_new (EMPATHY_PREFS_CHAT_SCHEMA);
-
- /* Take the adium path/variant and track changes */
- g_signal_connect (self->priv->gsettings_chat,
- "changed::" EMPATHY_PREFS_CHAT_THEME,
- G_CALLBACK (theme_manager_notify_theme_cb), self);
-
- theme_manager_notify_theme_cb (self->priv->gsettings_chat,
- EMPATHY_PREFS_CHAT_THEME, self);
-
- g_signal_connect (self->priv->gsettings_chat,
- "changed::" EMPATHY_PREFS_CHAT_THEME_VARIANT,
- G_CALLBACK (theme_manager_notify_adium_variant_cb), self);
-
- theme_manager_notify_adium_variant_cb (self->priv->gsettings_chat,
- EMPATHY_PREFS_CHAT_THEME_VARIANT, self);
-
- self->priv->in_constructor = FALSE;
-}
-
-EmpathyThemeManager *
-empathy_theme_manager_dup_singleton (void)
-{
- static EmpathyThemeManager *manager = NULL;
-
- if (manager == NULL)
- {
- manager = g_object_new (EMPATHY_TYPE_THEME_MANAGER, NULL);
- g_object_add_weak_pointer (G_OBJECT (manager), (gpointer *) &manager);
-
- return manager;
- }
-
- return g_object_ref (manager);
-}
-
-static void
-find_themes (GHashTable *hash,
- const gchar *dirpath)
-{
- GDir *dir;
- GError *error = NULL;
- const gchar *name = NULL;
- GHashTable *info = NULL;
-
- dir = g_dir_open (dirpath, 0, &error);
- if (dir != NULL)
- {
- name = g_dir_read_name (dir);
-
- while (name != NULL)
- {
- gchar *path;
-
- path = g_build_path (G_DIR_SEPARATOR_S, dirpath, name, NULL);
- if (empathy_adium_path_is_valid (path))
- {
- info = empathy_adium_info_new (path);
-
- if (info != NULL)
- {
- g_hash_table_insert (hash,
- empathy_theme_manager_dup_theme_name_from_path (path),
- info);
- }
- }
-
- g_free (path);
- name = g_dir_read_name (dir);
- }
-
- g_dir_close (dir);
- }
- else
- {
- DEBUG ("Error opening %s: %s\n", dirpath, error->message);
- g_error_free (error);
- }
-}
-
-GList *
-empathy_theme_manager_get_adium_themes (void)
-{
- /* Theme name -> GHashTable info */
- GHashTable *hash;
- GList *result;
- gchar *path = NULL;
- const gchar *const *paths = NULL;
- gint i = 0;
- const gchar *dir;
-
- hash = g_hash_table_new_full (g_str_hash, g_str_equal,
- g_free, (GDestroyNotify) g_hash_table_unref);
-
- /* Start from the more general locations (the system) to the more specific
- * ones ($HOME, EMPATHY_SRCDIR) so the more specific themes will override
- * the more general ones.*/
-
- /* System */
- paths = g_get_system_data_dirs ();
- for (i = 0; paths[i] != NULL; i++)
- {
- path = g_build_path (G_DIR_SEPARATOR_S, paths[i],
- "adium/message-styles", NULL);
-
- find_themes (hash, path);
- g_free (path);
- }
-
- /* Home */
- path = g_build_path (G_DIR_SEPARATOR_S, g_get_user_data_dir (),
- "adium/message-styles", NULL);
-
- find_themes (hash, path);
- g_free (path);
-
- /* EMPATHY_SRCDIR */
- dir = g_getenv ("EMPATHY_SRCDIR");
- if (dir != NULL)
- {
- path = g_build_path (G_DIR_SEPARATOR_S, dir, "data/themes/", NULL);
-
- find_themes (hash, path);
- g_free (path);
- }
-
- result = g_hash_table_get_values (hash);
- /* Pass ownership of the info hash table to the list */
- g_list_foreach (result, (GFunc) g_hash_table_ref, NULL);
-
- g_hash_table_unref (hash);
-
- return result;
-}
-
-gchar *
-empathy_theme_manager_find_theme (const gchar *name)
-{
- gchar *path;
- const gchar * const *paths;
- gint i;
-
- /* look in EMPATHY_SRCDIR */
- path = g_strjoin (NULL,
- g_getenv ("EMPATHY_SRCDIR"),
- "/data/themes/",
- name,
- ".AdiumMessageStyle",
- NULL);
-
- DEBUG ("Trying '%s'", path);
-
- if (empathy_adium_path_is_valid (path))
- return path;
-
- g_free (path);
-
- /* look in user dir */
- path = g_strjoin (NULL,
- g_get_user_data_dir (),
- "/adium/message-styles/",
- name,
- ".AdiumMessageStyle",
- NULL);
-
- DEBUG ("Trying '%s'", path);
-
- if (empathy_adium_path_is_valid (path))
- return path;
-
- g_free (path);
-
- /* look in system dirs */
- paths = g_get_system_data_dirs ();
-
- for (i = 0; paths[i] != NULL; i++)
- {
- path = g_strjoin (NULL,
- paths[i],
- "/adium/message-styles/",
- name,
- ".AdiumMessageStyle",
- NULL);
-
- DEBUG ("Trying '%s'", path);
-
- if (empathy_adium_path_is_valid (path))
- return path;
-
- g_free (path);
- }
-
- return NULL;
-}
-
-gchar *
-empathy_theme_manager_dup_theme_name_from_path (const gchar *path)
-{
- gchar *fullname = NULL, *result = NULL;
- gchar **tmp = NULL;
-
- if (path == NULL)
- return NULL;
-
- fullname = g_path_get_basename (path);
- if (!g_str_has_suffix (fullname, ".AdiumMessageStyle"))
- goto out;
-
- tmp = g_strsplit (fullname, ".AdiumMessageStyle", 0);
- result = g_strdup (tmp[0]);
-
-out:
- g_strfreev (tmp);
- g_free (fullname);
- return result;
-}
diff --git a/libempathy-gtk/empathy-theme-manager.h b/libempathy-gtk/empathy-theme-manager.h
deleted file mode 100644
index 590c343f..00000000
--- a/libempathy-gtk/empathy-theme-manager.h
+++ /dev/null
@@ -1,78 +0,0 @@
-/*
- * Copyright (C) 2005-2007 Imendio AB
- * Copyright (C) 2008-2012 Collabora Ltd.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301 USA
- *
- * Authors: Xavier Claessens <xclaesse@gmail.com>
- */
-
-#ifndef __EMPATHY_THEME_MANAGER_H__
-#define __EMPATHY_THEME_MANAGER_H__
-
-#include "empathy-theme-adium.h"
-
-G_BEGIN_DECLS
-
-/* TYPE MACROS */
-#define EMPATHY_TYPE_THEME_MANAGER \
- (empathy_theme_manager_get_type ())
-#define EMPATHY_THEME_MANAGER(obj) \
- (G_TYPE_CHECK_INSTANCE_CAST((obj), \
- EMPATHY_TYPE_THEME_MANAGER, \
- EmpathyThemeManager))
-#define EMPATHY_THEME_MANAGER_CLASS(klass) \
- (G_TYPE_CHECK_CLASS_CAST((klass), \
- EMPATHY_TYPE_THEME_MANAGER, \
- EmpathyThemeManagerClass))
-#define EMPATHY_IS_THEME_MANAGER(obj) \
- (G_TYPE_CHECK_INSTANCE_TYPE((obj), \
- EMPATHY_TYPE_THEME_MANAGER))
-#define EMPATHY_IS_THEME_MANAGER_CLASS(klass) \
- (G_TYPE_CHECK_CLASS_TYPE((klass), \
- EMPATHY_TYPE_THEME_MANAGER))
-#define EMPATHY_THEME_MANAGER_GET_CLASS(obj) \
- (G_TYPE_INSTANCE_GET_CLASS ((obj), \
- EMPATHY_TYPE_THEME_MANAGER, \
- EmpathyThemeManagerClass))
-
-
-typedef struct _EmpathyThemeManager EmpathyThemeManager;
-typedef struct _EmpathyThemeManagerClass EmpathyThemeManagerClass;
-typedef struct _EmpathyThemeManagerPriv EmpathyThemeManagerPriv;
-
-struct _EmpathyThemeManager
-{
- GObject parent;
- EmpathyThemeManagerPriv *priv;
-};
-
-struct _EmpathyThemeManagerClass
-{
- GObjectClass parent_class;
-};
-
-GType empathy_theme_manager_get_type (void) G_GNUC_CONST;
-EmpathyThemeManager * empathy_theme_manager_dup_singleton (void);
-GList * empathy_theme_manager_get_adium_themes (void);
-EmpathyThemeAdium * empathy_theme_manager_create_view (EmpathyThemeManager *self);
-gchar * empathy_theme_manager_find_theme (const gchar *name);
-
-gchar * empathy_theme_manager_dup_theme_name_from_path (const gchar *path);
-
-G_END_DECLS
-
-#endif /* __EMPATHY_THEME_MANAGER_H__ */
diff --git a/libempathy-gtk/empathy-tls-dialog.c b/libempathy-gtk/empathy-tls-dialog.c
deleted file mode 100644
index def31d22..00000000
--- a/libempathy-gtk/empathy-tls-dialog.c
+++ /dev/null
@@ -1,379 +0,0 @@
-/*
- * empathy-tls-dialog.c - Source for EmpathyTLSDialog
- * Copyright (C) 2010 Collabora Ltd.
- * @author Cosimo Cecchi <cosimo.cecchi@collabora.co.uk>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-#include "config.h"
-#include "empathy-tls-dialog.h"
-
-#include <glib/gi18n-lib.h>
-#include <gcr/gcr.h>
-
-#include "empathy-utils.h"
-
-#define DEBUG_FLAG EMPATHY_DEBUG_TLS
-#include "empathy-debug.h"
-
-G_DEFINE_TYPE (EmpathyTLSDialog, empathy_tls_dialog,
- GTK_TYPE_MESSAGE_DIALOG)
-
-#define GET_PRIV(obj) EMPATHY_GET_PRIV (obj, EmpathyTLSDialog);
-
-enum {
- PROP_TLS_CERTIFICATE = 1,
- PROP_REASON,
- PROP_REMEMBER,
- PROP_DETAILS,
-
- LAST_PROPERTY,
-};
-
-typedef struct {
- TpTLSCertificate *certificate;
- TpTLSCertificateRejectReason reason;
- GHashTable *details;
-
- gboolean remember;
-
- gboolean dispose_run;
-} EmpathyTLSDialogPriv;
-
-static void
-empathy_tls_dialog_get_property (GObject *object,
- guint property_id,
- GValue *value,
- GParamSpec *pspec)
-{
- EmpathyTLSDialogPriv *priv = GET_PRIV (object);
-
- switch (property_id)
- {
- case PROP_TLS_CERTIFICATE:
- g_value_set_object (value, priv->certificate);
- break;
- case PROP_REASON:
- g_value_set_uint (value, priv->reason);
- break;
- case PROP_REMEMBER:
- g_value_set_boolean (value, priv->remember);
- break;
- case PROP_DETAILS:
- g_value_set_boxed (value, priv->details);
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
- break;
- }
-}
-
-static void
-empathy_tls_dialog_set_property (GObject *object,
- guint property_id,
- const GValue *value,
- GParamSpec *pspec)
-{
- EmpathyTLSDialogPriv *priv = GET_PRIV (object);
-
- switch (property_id)
- {
- case PROP_TLS_CERTIFICATE:
- priv->certificate = g_value_dup_object (value);
- break;
- case PROP_REASON:
- priv->reason = g_value_get_uint (value);
- break;
- case PROP_DETAILS:
- priv->details = g_value_dup_boxed (value);
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
- break;
- }
-}
-
-static void
-empathy_tls_dialog_dispose (GObject *object)
-{
- EmpathyTLSDialogPriv *priv = GET_PRIV (object);
-
- if (priv->dispose_run)
- return;
-
- priv->dispose_run = TRUE;
-
- tp_clear_object (&priv->certificate);
-
- G_OBJECT_CLASS (empathy_tls_dialog_parent_class)->dispose (object);
-}
-
-static void
-empathy_tls_dialog_finalize (GObject *object)
-{
- EmpathyTLSDialogPriv *priv = GET_PRIV (object);
-
- tp_clear_boxed (G_TYPE_HASH_TABLE, &priv->details);
-
- G_OBJECT_CLASS (empathy_tls_dialog_parent_class)->finalize (object);
-}
-
-static gchar *
-reason_to_string (EmpathyTLSDialog *self)
-{
- GString *str;
- const gchar *reason_str;
- TpTLSCertificateRejectReason reason;
- GHashTable *details;
- EmpathyTLSDialogPriv *priv = GET_PRIV (self);
-
- str = g_string_new (NULL);
- reason = priv->reason;
- details = priv->details;
-
- g_string_append (str, _("The identity provided by the chat server cannot be "
- "verified."));
- g_string_append (str, "\n\n");
-
- switch (reason)
- {
- case TP_TLS_CERTIFICATE_REJECT_REASON_UNTRUSTED:
- reason_str = _("The certificate is not signed by a Certification "
- "Authority.");
- break;
- case TP_TLS_CERTIFICATE_REJECT_REASON_EXPIRED:
- reason_str = _("The certificate has expired.");
- break;
- case TP_TLS_CERTIFICATE_REJECT_REASON_NOT_ACTIVATED:
- reason_str = _("The certificate hasn't yet been activated.");
- break;
- case TP_TLS_CERTIFICATE_REJECT_REASON_FINGERPRINT_MISMATCH:
- reason_str = _("The certificate does not have the expected fingerprint.");
- break;
- case TP_TLS_CERTIFICATE_REJECT_REASON_HOSTNAME_MISMATCH:
- reason_str = _("The hostname verified by the certificate doesn't match "
- "the server name.");
- break;
- case TP_TLS_CERTIFICATE_REJECT_REASON_SELF_SIGNED:
- reason_str = _("The certificate is self-signed.");
- break;
- case TP_TLS_CERTIFICATE_REJECT_REASON_REVOKED:
- reason_str = _("The certificate has been revoked by the issuing "
- "Certification Authority.");
- break;
- case TP_TLS_CERTIFICATE_REJECT_REASON_INSECURE:
- reason_str = _("The certificate is cryptographically weak.");
- break;
- case TP_TLS_CERTIFICATE_REJECT_REASON_LIMIT_EXCEEDED:
- reason_str = _("The certificate length exceeds verifiable limits.");
- break;
- case TP_TLS_CERTIFICATE_REJECT_REASON_UNKNOWN:
- default:
- reason_str = _("The certificate is malformed.");
- break;
- }
-
- g_string_append (str, reason_str);
-
- /* add more information in case of HOSTNAME_MISMATCH */
- if (reason == TP_TLS_CERTIFICATE_REJECT_REASON_HOSTNAME_MISMATCH)
- {
- const gchar *expected_hostname, *certificate_hostname;
-
- expected_hostname = tp_asv_get_string (details, "expected-hostname");
- certificate_hostname = tp_asv_get_string (details,
- "certificate-hostname");
-
- if (expected_hostname != NULL && certificate_hostname != NULL)
- {
- g_string_append (str, "\n\n");
- g_string_append_printf (str, _("Expected hostname: %s"),
- expected_hostname);
- g_string_append (str, "\n");
- g_string_append_printf (str, _("Certificate hostname: %s"),
- certificate_hostname);
- }
- }
-
- return g_string_free (str, FALSE);
-}
-
-static GtkWidget *
-build_gcr_widget (EmpathyTLSDialog *self)
-{
- GcrCertificateWidget *widget;
- GcrCertificate *certificate;
- GPtrArray *cert_chain = NULL;
- GArray *first_cert;
- int height;
- EmpathyTLSDialogPriv *priv = GET_PRIV (self);
-
- g_object_get (priv->certificate,
- "cert-data", &cert_chain,
- NULL);
- first_cert = g_ptr_array_index (cert_chain, 0);
-
- certificate = gcr_simple_certificate_new ((const guchar *) first_cert->data,
- first_cert->len);
- widget = gcr_certificate_widget_new (certificate);
-
- /* FIXME: make this widget bigger by default -- GTK+ should really handle
- * this sort of thing for us */
- gtk_widget_get_preferred_height (GTK_WIDGET (widget), NULL, &height);
- /* force the widget to at least 150 pixels high */
- gtk_widget_set_size_request (GTK_WIDGET (widget), -1, MAX (height, 150));
-
- g_object_unref (certificate);
- g_ptr_array_unref (cert_chain);
-
- return GTK_WIDGET (widget);
-}
-
-static void
-checkbox_toggled_cb (GtkToggleButton *checkbox,
- gpointer user_data)
-{
- EmpathyTLSDialog *self = user_data;
- EmpathyTLSDialogPriv *priv = GET_PRIV (self);
-
- priv->remember = gtk_toggle_button_get_active (checkbox);
- g_object_notify (G_OBJECT (self), "remember");
-}
-
-static void
-certificate_invalidated_cb (TpTLSCertificate *certificate,
- guint domain,
- gint code,
- gchar *message,
- EmpathyTLSDialog *self)
-{
- gtk_widget_destroy (GTK_WIDGET (self));
-}
-
-static void
-empathy_tls_dialog_constructed (GObject *object)
-{
- GtkWidget *content_area, *expander, *details, *checkbox;
- gchar *text;
- EmpathyTLSDialog *self = EMPATHY_TLS_DIALOG (object);
- GtkMessageDialog *message_dialog = GTK_MESSAGE_DIALOG (self);
- GtkDialog *dialog = GTK_DIALOG (self);
- EmpathyTLSDialogPriv *priv = GET_PRIV (self);
-
- gtk_dialog_add_buttons (dialog,
- GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
- _("C_ontinue"), GTK_RESPONSE_YES,
- NULL);
-
- text = reason_to_string (self);
-
- g_object_set (message_dialog,
- "title", _("Untrusted connection"),
- "text", _("This connection is untrusted. Would you like to "
- "continue anyway?"),
- "secondary-text", text,
- NULL);
-
- g_free (text);
-
- content_area = gtk_dialog_get_content_area (dialog);
-
- checkbox = gtk_check_button_new_with_label (
- _("Remember this choice for future connections"));
- gtk_box_pack_end (GTK_BOX (content_area), checkbox, FALSE, FALSE, 0);
- gtk_widget_show (checkbox);
- g_signal_connect (checkbox, "toggled", G_CALLBACK (checkbox_toggled_cb),
- self);
-
- text = g_strdup_printf ("<b>%s</b>", _("Certificate Details"));
- expander = gtk_expander_new (text);
- gtk_expander_set_use_markup (GTK_EXPANDER (expander), TRUE);
- gtk_box_pack_end (GTK_BOX (content_area), expander, TRUE, TRUE, 0);
- gtk_widget_show (expander);
-
- g_free (text);
-
- details = build_gcr_widget (self);
- gtk_container_add (GTK_CONTAINER (expander), details);
- gtk_widget_show (details);
-
- gtk_window_set_keep_above (GTK_WINDOW (self), TRUE);
-
- tp_g_signal_connect_object (priv->certificate, "invalidated",
- G_CALLBACK (certificate_invalidated_cb), self, 0);
-}
-
-static void
-empathy_tls_dialog_init (EmpathyTLSDialog *self)
-{
- self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self,
- EMPATHY_TYPE_TLS_DIALOG, EmpathyTLSDialogPriv);
-}
-
-static void
-empathy_tls_dialog_class_init (EmpathyTLSDialogClass *klass)
-{
- GParamSpec *pspec;
- GObjectClass *oclass = G_OBJECT_CLASS (klass);
-
- g_type_class_add_private (klass, sizeof (EmpathyTLSDialogPriv));
-
- oclass->set_property = empathy_tls_dialog_set_property;
- oclass->get_property = empathy_tls_dialog_get_property;
- oclass->dispose = empathy_tls_dialog_dispose;
- oclass->finalize = empathy_tls_dialog_finalize;
- oclass->constructed = empathy_tls_dialog_constructed;
-
- pspec = g_param_spec_object ("certificate", "The TpTLSCertificate",
- "The TpTLSCertificate to be displayed.",
- TP_TYPE_TLS_CERTIFICATE,
- G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
- g_object_class_install_property (oclass, PROP_TLS_CERTIFICATE, pspec);
-
- pspec = g_param_spec_uint ("reason", "The reason",
- "The reason why the certificate is being asked for confirmation.",
- 0, NUM_TP_TLS_CERTIFICATE_REJECT_REASONS - 1,
- TP_TLS_CERTIFICATE_REJECT_REASON_UNKNOWN,
- G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
- g_object_class_install_property (oclass, PROP_REASON, pspec);
-
- pspec = g_param_spec_boolean ("remember", "Whether to remember the decision",
- "Whether we should remember the decision for this certificate.",
- FALSE,
- G_PARAM_READABLE | G_PARAM_STATIC_STRINGS);
- g_object_class_install_property (oclass, PROP_REMEMBER, pspec);
-
- pspec = g_param_spec_boxed ("details", "Rejection details",
- "Additional details about the rejection of this certificate.",
- G_TYPE_HASH_TABLE,
- G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
- g_object_class_install_property (oclass, PROP_DETAILS, pspec);
-}
-
-GtkWidget *
-empathy_tls_dialog_new (TpTLSCertificate *certificate,
- TpTLSCertificateRejectReason reason,
- GHashTable *details)
-{
- g_assert (TP_IS_TLS_CERTIFICATE (certificate));
-
- return g_object_new (EMPATHY_TYPE_TLS_DIALOG,
- "message-type", GTK_MESSAGE_WARNING,
- "certificate", certificate,
- "reason", reason,
- "details", details,
- NULL);
-}
diff --git a/libempathy-gtk/empathy-tls-dialog.h b/libempathy-gtk/empathy-tls-dialog.h
deleted file mode 100644
index b85e7d09..00000000
--- a/libempathy-gtk/empathy-tls-dialog.h
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- * empathy-tls-dialog.h - Header for EmpathyTLSDialog
- * Copyright (C) 2010 Collabora Ltd.
- * @author Cosimo Cecchi <cosimo.cecchi@collabora.co.uk>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-#ifndef __EMPATHY_TLS_DIALOG_H__
-#define __EMPATHY_TLS_DIALOG_H__
-
-#include <gtk/gtk.h>
-#include <telepathy-glib/telepathy-glib.h>
-
-G_BEGIN_DECLS
-
-typedef struct _EmpathyTLSDialog EmpathyTLSDialog;
-typedef struct _EmpathyTLSDialogClass EmpathyTLSDialogClass;
-
-struct _EmpathyTLSDialogClass {
- GtkMessageDialogClass parent_class;
-};
-
-struct _EmpathyTLSDialog {
- GtkMessageDialog parent;
- gpointer priv;
-};
-
-GType empathy_tls_dialog_get_type (void);
-
-#define EMPATHY_TYPE_TLS_DIALOG \
- (empathy_tls_dialog_get_type ())
-#define EMPATHY_TLS_DIALOG(obj) \
- (G_TYPE_CHECK_INSTANCE_CAST((obj), EMPATHY_TYPE_TLS_DIALOG, \
- EmpathyTLSDialog))
-#define EMPATHY_TLS_DIALOG_CLASS(klass) \
- (G_TYPE_CHECK_CLASS_CAST((klass), EMPATHY_TYPE_TLS_DIALOG, \
- EmpathyTLSDialogClass))
-#define EMPATHY_IS_TLS_DIALOG(obj) \
- (G_TYPE_CHECK_INSTANCE_TYPE((obj), EMPATHY_TYPE_TLS_DIALOG))
-#define EMPATHY_IS_TLS_DIALOG_CLASS(klass) \
- (G_TYPE_CHECK_CLASS_TYPE((klass), EMPATHY_TYPE_TLS_DIALOG))
-#define EMPATHY_TLS_DIALOG_GET_CLASS(obj) \
- (G_TYPE_INSTANCE_GET_CLASS ((obj), EMPATHY_TYPE_TLS_DIALOG, \
- EmpathyTLSDialogClass))
-
-GtkWidget * empathy_tls_dialog_new (TpTLSCertificate *certificate,
- TpTLSCertificateRejectReason reason,
- GHashTable *details);
-
-G_END_DECLS
-
-#endif /* #ifndef __EMPATHY_TLS_DIALOG_H__*/
diff --git a/libempathy-gtk/empathy-ui-utils.c b/libempathy-gtk/empathy-ui-utils.c
deleted file mode 100644
index 5e01d9fc..00000000
--- a/libempathy-gtk/empathy-ui-utils.c
+++ /dev/null
@@ -1,1355 +0,0 @@
-/*
- * Copyright (C) 2002-2007 Imendio AB
- * Copyright (C) 2007-2010 Collabora Ltd.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301 USA
- *
- * Authors: Mikael Hallendal <micke@imendio.com>
- * Richard Hult <richard@imendio.com>
- * Martyn Russell <martyn@imendio.com>
- * Xavier Claessens <xclaesse@gmail.com>
- * Jonny Lamb <jonny.lamb@collabora.co.uk>
- * Travis Reitter <travis.reitter@collabora.co.uk>
- *
- * Part of this file is copied from GtkSourceView (gtksourceiter.c):
- * Paolo Maggi
- * Jeroen Zwartepoorte
- */
-
-#include "config.h"
-#include "empathy-ui-utils.h"
-
-#include <X11/Xatom.h>
-#include <gdk/gdkx.h>
-#include <glib/gi18n-lib.h>
-#include <gio/gdesktopappinfo.h>
-#include <tp-account-widgets/tpaw-live-search.h>
-#include <tp-account-widgets/tpaw-pixbuf-utils.h>
-#include <tp-account-widgets/tpaw-utils.h>
-
-#include "empathy-ft-factory.h"
-#include "empathy-images.h"
-#include "empathy-utils.h"
-
-#define DEBUG_FLAG EMPATHY_DEBUG_OTHER
-#include "empathy-debug.h"
-
-void
-empathy_gtk_init (void)
-{
- static gboolean initialized = FALSE;
-
- if (initialized)
- return;
-
- empathy_init ();
-
- gtk_icon_theme_append_search_path (gtk_icon_theme_get_default (),
- PKGDATADIR G_DIR_SEPARATOR_S "icons");
-
- /* Add icons from source dir if available */
- if (g_getenv ("EMPATHY_SRCDIR") != NULL)
- {
- gchar *path;
-
- path = g_build_filename (g_getenv ("EMPATHY_SRCDIR"), "data",
- "icons", "local-copy", NULL);
-
- if (g_file_test (path, G_FILE_TEST_EXISTS))
- gtk_icon_theme_append_search_path (gtk_icon_theme_get_default (), path);
-
- g_free (path);
- }
-
- initialized = TRUE;
-}
-
-const gchar *
-empathy_icon_name_for_presence (TpConnectionPresenceType presence)
-{
- switch (presence)
- {
- case TP_CONNECTION_PRESENCE_TYPE_AVAILABLE:
- return EMPATHY_IMAGE_AVAILABLE;
- case TP_CONNECTION_PRESENCE_TYPE_BUSY:
- return EMPATHY_IMAGE_BUSY;
- case TP_CONNECTION_PRESENCE_TYPE_AWAY:
- return EMPATHY_IMAGE_AWAY;
- case TP_CONNECTION_PRESENCE_TYPE_EXTENDED_AWAY:
- if (gtk_icon_theme_has_icon (gtk_icon_theme_get_default (),
- EMPATHY_IMAGE_EXT_AWAY))
- return EMPATHY_IMAGE_EXT_AWAY;
-
- /* The 'extended-away' icon is not an official one so we fallback to
- * idle if it's not implemented */
- return EMPATHY_IMAGE_IDLE;
- case TP_CONNECTION_PRESENCE_TYPE_HIDDEN:
- if (gtk_icon_theme_has_icon (gtk_icon_theme_get_default (),
- EMPATHY_IMAGE_HIDDEN))
- return EMPATHY_IMAGE_HIDDEN;
-
- /* The 'hidden' icon is not an official one so we fallback to offline if
- * it's not implemented */
- return EMPATHY_IMAGE_OFFLINE;
- case TP_CONNECTION_PRESENCE_TYPE_OFFLINE:
- case TP_CONNECTION_PRESENCE_TYPE_ERROR:
- return EMPATHY_IMAGE_OFFLINE;
- case TP_CONNECTION_PRESENCE_TYPE_UNKNOWN:
- return EMPATHY_IMAGE_PENDING;
- case TP_CONNECTION_PRESENCE_TYPE_UNSET:
- default:
- return NULL;
- }
-
- return NULL;
-}
-
-const gchar *
-empathy_icon_name_for_contact (EmpathyContact *contact)
-{
- TpConnectionPresenceType 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);
-}
-
-const gchar *
-empathy_icon_name_for_individual (FolksIndividual *individual)
-{
- FolksPresenceType folks_presence;
- TpConnectionPresenceType presence;
-
- folks_presence = folks_presence_details_get_presence_type (
- FOLKS_PRESENCE_DETAILS (individual));
- presence = empathy_folks_presence_type_to_tp (folks_presence);
-
- return empathy_icon_name_for_presence (presence);
-}
-
-const gchar *
-empathy_protocol_name_for_contact (EmpathyContact *contact)
-{
- TpAccount *account;
-
- g_return_val_if_fail (EMPATHY_IS_CONTACT (contact), NULL);
-
- account = empathy_contact_get_account (contact);
- if (account == NULL)
- return NULL;
-
- return tp_account_get_icon_name (account);
-}
-
-struct SizeData
-{
- gint width;
- gint height;
- gboolean preserve_aspect_ratio;
-};
-
-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 height, rowstride, i;
- guchar *pixels;
- guchar *row;
-
- 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;
-}
-
-static GdkPixbuf *
-pixbuf_round_corners (GdkPixbuf *pixbuf)
-{
- GdkPixbuf *result;
-
- if (!gdk_pixbuf_get_has_alpha (pixbuf))
- {
- result = 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),
- result,
- 0, 0);
- }
- else
- {
- result = g_object_ref (pixbuf);
- }
-
- if (empathy_gdk_pixbuf_is_opaque (result))
- empathy_avatar_pixbuf_roundify (result);
-
- return result;
-}
-
-static GdkPixbuf *
-avatar_pixbuf_from_loader (GdkPixbufLoader *loader)
-{
- GdkPixbuf *pixbuf;
-
- pixbuf = gdk_pixbuf_loader_get_pixbuf (loader);
-
- return pixbuf_round_corners (pixbuf);
-}
-
-static 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 (avatar->len == 0)
- {
- g_warning ("Avatar has 0 length");
- return NULL;
- }
- else 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 = avatar_pixbuf_from_loader (loader);
-
- 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);
-}
-
-typedef struct
-{
- GSimpleAsyncResult *result;
- guint width;
- guint height;
- GCancellable *cancellable;
-} PixbufAvatarFromIndividualClosure;
-
-static PixbufAvatarFromIndividualClosure *
-pixbuf_avatar_from_individual_closure_new (FolksIndividual *individual,
- GSimpleAsyncResult *result,
- gint width,
- gint height,
- GCancellable *cancellable)
-{
- PixbufAvatarFromIndividualClosure *closure;
-
- g_return_val_if_fail (FOLKS_IS_INDIVIDUAL (individual), NULL);
- g_return_val_if_fail (G_IS_ASYNC_RESULT (result), NULL);
-
- closure = g_slice_new0 (PixbufAvatarFromIndividualClosure);
- closure->result = g_object_ref (result);
- closure->width = width;
- closure->height = height;
-
- if (cancellable != NULL)
- closure->cancellable = g_object_ref (cancellable);
-
- return closure;
-}
-
-static void
-pixbuf_avatar_from_individual_closure_free (
- PixbufAvatarFromIndividualClosure *closure)
-{
- g_clear_object (&closure->cancellable);
- g_object_unref (closure->result);
- g_slice_free (PixbufAvatarFromIndividualClosure, closure);
-}
-
-/**
- * @pixbuf: (transfer all)
- *
- * Return: (transfer all)
- */
-static GdkPixbuf *
-transform_pixbuf (GdkPixbuf *pixbuf)
-{
- GdkPixbuf *result;
-
- result = pixbuf_round_corners (pixbuf);
- g_object_unref (pixbuf);
-
- return result;
-}
-
-static void
-avatar_icon_load_cb (GObject *object,
- GAsyncResult *result,
- gpointer user_data)
-{
- GLoadableIcon *icon = G_LOADABLE_ICON (object);
- PixbufAvatarFromIndividualClosure *closure = user_data;
- GInputStream *stream;
- GError *error = NULL;
- GdkPixbuf *pixbuf;
- GdkPixbuf *final_pixbuf;
-
- stream = g_loadable_icon_load_finish (icon, result, NULL, &error);
- if (error != NULL)
- {
- DEBUG ("Failed to open avatar stream: %s", error->message);
- g_simple_async_result_set_from_error (closure->result, error);
- goto out;
- }
-
- pixbuf = gdk_pixbuf_new_from_stream_at_scale (stream,
- closure->width, closure->height, TRUE, closure->cancellable, &error);
-
- g_object_unref (stream);
-
- if (pixbuf == NULL)
- {
- DEBUG ("Failed to read avatar: %s", error->message);
- g_simple_async_result_set_from_error (closure->result, error);
- goto out;
- }
-
- final_pixbuf = transform_pixbuf (pixbuf);
-
- /* Pass ownership of final_pixbuf to the result */
- g_simple_async_result_set_op_res_gpointer (closure->result,
- final_pixbuf, g_object_unref);
-
-out:
- g_simple_async_result_complete (closure->result);
-
- g_clear_error (&error);
- pixbuf_avatar_from_individual_closure_free (closure);
-}
-
-void
-empathy_pixbuf_avatar_from_individual_scaled_async (
- FolksIndividual *individual,
- gint width,
- gint height,
- GCancellable *cancellable,
- GAsyncReadyCallback callback,
- gpointer user_data)
-{
- GLoadableIcon *avatar_icon;
- GSimpleAsyncResult *result;
- PixbufAvatarFromIndividualClosure *closure;
-
- result = g_simple_async_result_new (G_OBJECT (individual),
- callback, user_data, empathy_pixbuf_avatar_from_individual_scaled_async);
-
- avatar_icon = folks_avatar_details_get_avatar (
- FOLKS_AVATAR_DETAILS (individual));
-
- if (avatar_icon == NULL)
- {
- g_simple_async_result_set_error (result, G_IO_ERROR,
- G_IO_ERROR_NOT_FOUND, "no avatar found");
-
- g_simple_async_result_complete (result);
- g_object_unref (result);
- return;
- }
-
- closure = pixbuf_avatar_from_individual_closure_new (individual, result,
- width, height, cancellable);
-
- g_return_if_fail (closure != NULL);
-
- g_loadable_icon_load_async (avatar_icon, width, cancellable,
- avatar_icon_load_cb, closure);
-
- g_object_unref (result);
-}
-
-/* Return a ref on the GdkPixbuf */
-GdkPixbuf *
-empathy_pixbuf_avatar_from_individual_scaled_finish (
- FolksIndividual *individual,
- GAsyncResult *result,
- GError **error)
-{
- GSimpleAsyncResult *simple = G_SIMPLE_ASYNC_RESULT (result);
- gboolean result_valid;
- GdkPixbuf *pixbuf;
-
- g_return_val_if_fail (FOLKS_IS_INDIVIDUAL (individual), NULL);
- g_return_val_if_fail (G_IS_SIMPLE_ASYNC_RESULT (simple), NULL);
-
- if (g_simple_async_result_propagate_error (simple, error))
- return NULL;
-
- result_valid = g_simple_async_result_is_valid (result,
- G_OBJECT (individual),
- empathy_pixbuf_avatar_from_individual_scaled_async);
-
- g_return_val_if_fail (result_valid, NULL);
-
- pixbuf = g_simple_async_result_get_op_res_gpointer (simple);
- return pixbuf != NULL ? g_object_ref (pixbuf) : NULL;
-}
-
-GdkPixbuf *
-empathy_pixbuf_contact_status_icon (EmpathyContact *contact,
- gboolean show_protocol)
-{
- const gchar *icon_name;
-
- g_return_val_if_fail (EMPATHY_IS_CONTACT (contact), NULL);
-
- icon_name = empathy_icon_name_for_contact (contact);
-
- if (icon_name == NULL)
- return NULL;
-
- return empathy_pixbuf_contact_status_icon_with_icon_name (contact,
- icon_name, show_protocol);
-}
-
-static GdkPixbuf * empathy_pixbuf_protocol_from_contact_scaled (
- EmpathyContact *contact,
- gint width,
- gint height);
-
-GdkPixbuf *
-empathy_pixbuf_contact_status_icon_with_icon_name (EmpathyContact *contact,
- const gchar *icon_name,
- gboolean show_protocol)
-{
- GdkPixbuf *pix_status;
- GdkPixbuf *pix_protocol;
- gchar *icon_filename;
- gint height, width;
- gint numerator, denominator;
-
- g_return_val_if_fail (EMPATHY_IS_CONTACT (contact) ||
- (show_protocol == FALSE), NULL);
- g_return_val_if_fail (icon_name != NULL, NULL);
-
- numerator = 3;
- denominator = 4;
-
- icon_filename = tpaw_filename_from_icon_name (icon_name,
- GTK_ICON_SIZE_MENU);
-
- if (icon_filename == NULL)
- {
- DEBUG ("icon name: %s could not be found\n", icon_name);
- return NULL;
- }
-
- pix_status = gdk_pixbuf_new_from_file (icon_filename, NULL);
-
- if (pix_status == NULL)
- {
- DEBUG ("Could not open icon %s\n", icon_filename);
- g_free (icon_filename);
- return NULL;
- }
-
- g_free (icon_filename);
-
- if (!show_protocol)
- return pix_status;
-
- height = gdk_pixbuf_get_height (pix_status);
- width = gdk_pixbuf_get_width (pix_status);
-
- pix_protocol = empathy_pixbuf_protocol_from_contact_scaled (contact,
- width * numerator / denominator,
- height * numerator / denominator);
-
- if (pix_protocol == NULL)
- return pix_status;
-
- gdk_pixbuf_composite (pix_protocol, pix_status,
- 0, height - height * numerator / denominator,
- width * numerator / denominator, height * numerator / denominator,
- 0, height - height * numerator / denominator,
- 1, 1,
- GDK_INTERP_BILINEAR, 255);
-
- g_object_unref (pix_protocol);
-
- return pix_status;
-}
-
-static GdkPixbuf *
-empathy_pixbuf_protocol_from_contact_scaled (EmpathyContact *contact,
- gint width,
- gint height)
-{
- TpAccount *account;
- gchar *filename;
- GdkPixbuf *pixbuf = NULL;
-
- g_return_val_if_fail (EMPATHY_IS_CONTACT (contact), NULL);
-
- account = empathy_contact_get_account (contact);
- filename = tpaw_filename_from_icon_name (
- tp_account_get_icon_name (account), GTK_ICON_SIZE_MENU);
-
- if (filename != NULL)
- {
- pixbuf = gdk_pixbuf_new_from_file_at_size (filename, width, height, NULL);
- g_free (filename);
- }
-
- return pixbuf;
-}
-
-void
-empathy_url_show (GtkWidget *parent,
- const char *url)
-{
- gchar *real_url;
- GError *error = NULL;
-
- g_return_if_fail (parent == NULL || GTK_IS_WIDGET (parent));
- g_return_if_fail (url != NULL);
-
- real_url = tpaw_make_absolute_url (url);
-
- gtk_show_uri (parent ? gtk_widget_get_screen (parent) : NULL, real_url,
- gtk_get_current_event_time (), &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),
- "%s", 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);
-}
-
-void
-empathy_send_file (EmpathyContact *contact,
- GFile *file)
-{
- EmpathyFTFactory *factory;
- GtkRecentManager *manager;
- gchar *uri;
-
- g_return_if_fail (EMPATHY_IS_CONTACT (contact));
- g_return_if_fail (G_IS_FILE (file));
-
- factory = empathy_ft_factory_dup_singleton ();
-
- empathy_ft_factory_new_transfer_outgoing (factory, contact, file,
- empathy_get_current_action_time ());
-
- uri = g_file_get_uri (file);
- manager = gtk_recent_manager_get_default ();
- gtk_recent_manager_add_item (manager, uri);
- g_free (uri);
-
- g_object_unref (factory);
-}
-
-void
-empathy_send_file_from_uri_list (EmpathyContact *contact,
- const gchar *uri_list)
-{
- const gchar *nl;
- GFile *file;
-
- /* Only handle a single file for now. It would be wicked cool to be
- able to do multiple files, offering to zip them or whatever like
- nautilus-sendto does. Note that text/uri-list is defined to have
- each line terminated by \r\n, but we can be tolerant of applications
- that only use \n or don't terminate single-line entries.
- */
- nl = strstr (uri_list, "\r\n");
- if (!nl)
- nl = strchr (uri_list, '\n');
-
- if (nl)
- {
- gchar *uri = g_strndup (uri_list, nl - uri_list);
- file = g_file_new_for_uri (uri);
- g_free (uri);
- }
- else
- {
- file = g_file_new_for_uri (uri_list);
- }
-
- empathy_send_file (contact, file);
-
- g_object_unref (file);
-}
-
-static void
-file_manager_send_file_response_cb (GtkDialog *widget,
- gint response_id,
- EmpathyContact *contact)
-{
- GFile *file;
-
- if (response_id == GTK_RESPONSE_OK)
- {
- file = gtk_file_chooser_get_file (GTK_FILE_CHOOSER (widget));
-
- empathy_send_file (contact, file);
-
- g_object_unref (file);
- }
-
- g_object_unref (contact);
- gtk_widget_destroy (GTK_WIDGET (widget));
-}
-
-static gboolean
-filter_cb (const GtkFileFilterInfo *filter_info,
- gpointer data)
-{
- /* filter out socket files */
- return tp_strdiff (filter_info->mime_type, "inode/socket");
-}
-
-static GtkFileFilter *
-create_file_filter (void)
-{
- GtkFileFilter *filter;
-
- filter = gtk_file_filter_new ();
-
- gtk_file_filter_add_custom (filter, GTK_FILE_FILTER_MIME_TYPE, filter_cb,
- NULL, NULL);
-
- return filter;
-}
-
-void
-empathy_send_file_with_file_chooser (EmpathyContact *contact)
-{
- GtkWidget *widget;
- GtkWidget *button;
-
- g_return_if_fail (EMPATHY_IS_CONTACT (contact));
-
- DEBUG ("Creating selection file chooser");
-
- widget = gtk_file_chooser_dialog_new (_("Select a file"), NULL,
- GTK_FILE_CHOOSER_ACTION_OPEN,
- GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
- NULL);
-
- /* send button */
- button = gtk_button_new_with_mnemonic (_("_Send"));
- gtk_button_set_image (GTK_BUTTON (button),
- gtk_image_new_from_icon_name (EMPATHY_IMAGE_DOCUMENT_SEND,
- GTK_ICON_SIZE_BUTTON));
- gtk_widget_show (button);
-
- gtk_dialog_add_action_widget (GTK_DIALOG (widget), button,
- GTK_RESPONSE_OK);
-
- gtk_widget_set_can_default (button, TRUE);
- gtk_dialog_set_default_response (GTK_DIALOG (widget),
- GTK_RESPONSE_OK);
-
- gtk_file_chooser_set_local_only (GTK_FILE_CHOOSER (widget), FALSE);
-
- gtk_file_chooser_set_current_folder (GTK_FILE_CHOOSER (widget),
- g_get_home_dir ());
-
- gtk_file_chooser_add_filter (GTK_FILE_CHOOSER (widget),
- create_file_filter ());
-
- g_signal_connect (widget, "response",
- G_CALLBACK (file_manager_send_file_response_cb), g_object_ref (contact));
-
- gtk_widget_show (widget);
-}
-
-static void
-file_manager_receive_file_response_cb (GtkDialog *dialog,
- GtkResponseType response,
- EmpathyFTHandler *handler)
-{
- EmpathyFTFactory *factory;
- GFile *file;
-
- if (response == GTK_RESPONSE_OK)
- {
- GFile *parent;
- GFileInfo *info;
- guint64 free_space, file_size;
- GError *error = NULL;
-
- file = gtk_file_chooser_get_file (GTK_FILE_CHOOSER (dialog));
- parent = g_file_get_parent (file);
- info = g_file_query_filesystem_info (parent,
- G_FILE_ATTRIBUTE_FILESYSTEM_FREE, NULL, &error);
-
- g_object_unref (parent);
-
- if (error != NULL)
- {
- g_warning ("Error: %s", error->message);
-
- g_object_unref (file);
- return;
- }
-
- free_space = g_file_info_get_attribute_uint64 (info,
- G_FILE_ATTRIBUTE_FILESYSTEM_FREE);
- file_size = empathy_ft_handler_get_total_bytes (handler);
-
- g_object_unref (info);
-
- if (file_size > free_space)
- {
- GtkWidget *message = gtk_message_dialog_new (GTK_WINDOW (dialog),
- GTK_DIALOG_MODAL, GTK_MESSAGE_ERROR,
- GTK_BUTTONS_CLOSE,
- _("Insufficient free space to save file"));
- char *file_size_str, *free_space_str;
-
- file_size_str = g_format_size (file_size);
- free_space_str = g_format_size (free_space);
-
- gtk_message_dialog_format_secondary_text (
- GTK_MESSAGE_DIALOG (message),
- _("%s of free space are required to save this "
- "file, but only %s is available. Please "
- "choose another location."),
- file_size_str, free_space_str);
-
- gtk_dialog_run (GTK_DIALOG (message));
-
- g_free (file_size_str);
- g_free (free_space_str);
- gtk_widget_destroy (message);
-
- g_object_unref (file);
-
- return;
- }
-
- factory = empathy_ft_factory_dup_singleton ();
-
- empathy_ft_factory_set_destination_for_incoming_handler (
- factory, handler, file);
-
- g_object_unref (factory);
- g_object_unref (file);
- }
- else
- {
- /* unref the handler, as we dismissed the file chooser,
- * and refused the transfer.
- */
- g_object_unref (handler);
- }
-
- gtk_widget_destroy (GTK_WIDGET (dialog));
-}
-
-void
-empathy_receive_file_with_file_chooser (EmpathyFTHandler *handler)
-{
- GtkWidget *widget;
- const gchar *dir;
- EmpathyContact *contact;
- gchar *title;
-
- contact = empathy_ft_handler_get_contact (handler);
- g_assert (contact != NULL);
-
- title = g_strdup_printf (_("Incoming file from %s"),
- empathy_contact_get_alias (contact));
-
- widget = gtk_file_chooser_dialog_new (title,
- NULL, GTK_FILE_CHOOSER_ACTION_SAVE,
- GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
- GTK_STOCK_SAVE, GTK_RESPONSE_OK,
- NULL);
-
- gtk_file_chooser_set_current_name (GTK_FILE_CHOOSER (widget),
- empathy_ft_handler_get_filename (handler));
-
- gtk_file_chooser_set_do_overwrite_confirmation
- (GTK_FILE_CHOOSER (widget), TRUE);
-
- dir = g_get_user_special_dir (G_USER_DIRECTORY_DOWNLOAD);
- if (dir == NULL)
- /* Fallback to $HOME if $XDG_DOWNLOAD_DIR is not set */
- dir = g_get_home_dir ();
-
- gtk_file_chooser_set_current_folder (GTK_FILE_CHOOSER (widget), dir);
-
- g_signal_connect (widget, "response",
- G_CALLBACK (file_manager_receive_file_response_cb), handler);
-
- gtk_widget_show (widget);
- g_free (title);
-}
-
-void
-empathy_make_color_whiter (GdkRGBA *color)
-{
- const GdkRGBA white = { 1.0, 1.0, 1.0, 1.0 };
-
- color->red = (color->red + white.red) / 2;
- color->green = (color->green + white.green) / 2;
- color->blue = (color->blue + white.blue) / 2;
-}
-
-static void
-menu_deactivate_cb (GtkMenu *menu,
- gpointer user_data)
-{
- /* FIXME: we shouldn't have to disconnect the signal (bgo #641327) */
- g_signal_handlers_disconnect_by_func (menu,
- menu_deactivate_cb, user_data);
-
- gtk_menu_detach (menu);
-}
-
-/* Convenient function to create a GtkMenu attached to @attach_to and detach
- * it when the menu is not displayed any more. This is useful when creating a
- * context menu that we want to get rid as soon as it as been displayed. */
-GtkWidget *
-empathy_context_menu_new (GtkWidget *attach_to)
-{
- GtkWidget *menu;
-
- menu = gtk_menu_new ();
-
- gtk_menu_attach_to_widget (GTK_MENU (menu), attach_to, NULL);
-
- /* menu is initially unowned but gtk_menu_attach_to_widget () taked its
- * floating ref. We can either wait that @attach_to releases its ref when
- * it will be destroyed (when leaving Empathy most of the time) or explicitely
- * detach the menu when it's not displayed any more.
- * We go for the latter as we don't want to keep useless menus in memory
- * during the whole lifetime of Empathy. */
- g_signal_connect (menu, "deactivate", G_CALLBACK (menu_deactivate_cb), NULL);
-
- return menu;
-}
-
-gint64
-empathy_get_current_action_time (void)
-{
- return (tp_user_action_time_from_x11 (gtk_get_current_event_time ()));
-}
-
-/* @words = tpaw_live_search_strip_utf8_string (@text);
- *
- * User has to pass both so we don't have to compute @words ourself each time
- * this function is called. */
-gboolean
-empathy_individual_match_string (FolksIndividual *individual,
- const char *text,
- GPtrArray *words)
-{
- const gchar *str;
- GeeSet *personas;
- GeeIterator *iter;
- gboolean retval = FALSE;
-
- /* check alias name */
- str = folks_alias_details_get_alias (FOLKS_ALIAS_DETAILS (individual));
-
- if (tpaw_live_search_match_words (str, words))
- return TRUE;
-
- personas = folks_individual_get_personas (individual);
-
- /* check contact id, remove the @server.com part */
- iter = gee_iterable_iterator (GEE_ITERABLE (personas));
- while (retval == FALSE && gee_iterator_next (iter))
- {
- FolksPersona *persona = gee_iterator_get (iter);
- const gchar *p;
-
- if (empathy_folks_persona_is_interesting (persona))
- {
- str = folks_persona_get_display_id (persona);
-
- /* Accept the persona if @text is a full prefix of his ID; that allows
- * user to find, say, a jabber contact by typing his JID. */
- if (g_str_has_prefix (str, text))
- {
- retval = TRUE;
- }
- else
- {
- gchar *dup_str = NULL;
- gboolean visible;
-
- p = strstr (str, "@");
- if (p != NULL)
- str = dup_str = g_strndup (str, p - str);
-
- visible = tpaw_live_search_match_words (str, words);
- g_free (dup_str);
- if (visible)
- retval = TRUE;
- }
- }
- g_clear_object (&persona);
- }
- g_clear_object (&iter);
-
- /* FIXME: Add more rules here, we could check phone numbers in
- * contact's vCard for example. */
- return retval;
-}
-
-void
-empathy_launch_program (const gchar *dir,
- const gchar *name,
- const gchar *args)
-{
- GdkDisplay *display;
- GError *error = NULL;
- gchar *path, *cmd;
- GAppInfo *app_info;
- GdkAppLaunchContext *context = NULL;
-
- /* Try to run from source directory if possible */
- path = g_build_filename (g_getenv ("EMPATHY_SRCDIR"), "src",
- name, NULL);
-
- if (!g_file_test (path, G_FILE_TEST_EXISTS))
- {
- g_free (path);
- path = g_build_filename (dir, name, NULL);
- }
-
- if (args != NULL)
- cmd = g_strconcat (path, " ", args, NULL);
- else
- cmd = g_strdup (path);
-
- app_info = g_app_info_create_from_commandline (cmd, NULL, 0, &error);
- if (app_info == NULL)
- {
- DEBUG ("Failed to create app info: %s", error->message);
- g_error_free (error);
- goto out;
- }
-
- display = gdk_display_get_default ();
- context = gdk_display_get_app_launch_context (display);
-
- if (!g_app_info_launch (app_info, NULL, (GAppLaunchContext *) context,
- &error))
- {
- g_warning ("Failed to launch %s: %s", name, error->message);
- g_error_free (error);
- goto out;
- }
-
-out:
- tp_clear_object (&app_info);
- tp_clear_object (&context);
- g_free (path);
- g_free (cmd);
-}
-
-/* Most of the workspace manipulation code has been copied from libwnck
- * Copyright (C) 2001 Havoc Pennington
- * Copyright (C) 2005-2007 Vincent Untz
- */
-static void
-_wnck_activate_workspace (Screen *screen,
- int new_active_space,
- Time timestamp)
-{
- Display *display;
- Window root;
- XEvent xev;
-
- display = DisplayOfScreen (screen);
- root = RootWindowOfScreen (screen);
-
- xev.xclient.type = ClientMessage;
- xev.xclient.serial = 0;
- xev.xclient.send_event = True;
- xev.xclient.display = display;
- xev.xclient.window = root;
- xev.xclient.message_type = gdk_x11_get_xatom_by_name ("_NET_CURRENT_DESKTOP");
- xev.xclient.format = 32;
- xev.xclient.data.l[0] = new_active_space;
- xev.xclient.data.l[1] = timestamp;
- xev.xclient.data.l[2] = 0;
- xev.xclient.data.l[3] = 0;
- xev.xclient.data.l[4] = 0;
-
- gdk_error_trap_push ();
- XSendEvent (display, root, False,
- SubstructureRedirectMask | SubstructureNotifyMask,
- &xev);
- XSync (display, False);
- gdk_error_trap_pop_ignored ();
-}
-
-static gboolean
-_wnck_get_cardinal (Screen *screen,
- Window xwindow,
- Atom atom,
- int *val)
-{
- Display *display;
- Atom type;
- int format;
- gulong nitems;
- gulong bytes_after;
- gulong *num;
- int err, result;
-
- display = DisplayOfScreen (screen);
-
- *val = 0;
-
- gdk_error_trap_push ();
- type = None;
- result = XGetWindowProperty (display, xwindow, atom,
- 0, G_MAXLONG, False, XA_CARDINAL, &type, &format, &nitems,
- &bytes_after, (void *) &num);
- err = gdk_error_trap_pop ();
- if (err != Success ||
- result != Success)
- return FALSE;
-
- if (type != XA_CARDINAL)
- {
- XFree (num);
- return FALSE;
- }
-
- *val = *num;
-
- XFree (num);
-
- return TRUE;
-}
-
-static int
-window_get_workspace (Screen *xscreen,
- Window win)
-{
- int number;
-
- if (!_wnck_get_cardinal (xscreen, win,
- gdk_x11_get_xatom_by_name ("_NET_WM_DESKTOP"), &number))
- return -1;
-
- return number;
-}
-
-/* Ask X to move to the desktop on which @window currently is
- * and the present @window. */
-void
-empathy_move_to_window_desktop (GtkWindow *window,
- guint32 timestamp)
-{
- GdkScreen *screen;
- Screen *xscreen;
- GdkWindow *gdk_window;
- int workspace;
-
- screen = gtk_window_get_screen (window);
- xscreen = gdk_x11_screen_get_xscreen (screen);
- gdk_window = gtk_widget_get_window (GTK_WIDGET (window));
-
- workspace = window_get_workspace (xscreen,
- gdk_x11_window_get_xid (gdk_window));
- if (workspace == -1)
- goto out;
-
- _wnck_activate_workspace (xscreen, workspace, timestamp);
-
-out:
- gtk_window_present_with_time (window, timestamp);
-}
-
-void
-empathy_set_css_provider (GtkWidget *widget)
-{
- GtkCssProvider *provider;
- gchar *filename;
- GError *error = NULL;
- GdkScreen *screen;
-
- filename = empathy_file_lookup ("empathy.css", "data");
-
- provider = gtk_css_provider_new ();
-
- if (!gtk_css_provider_load_from_path (provider, filename, &error))
- {
- g_warning ("Failed to load css file '%s': %s", filename, error->message);
- g_error_free (error);
- goto out;
- }
-
- if (widget != NULL)
- screen = gtk_widget_get_screen (widget);
- else
- screen = gdk_screen_get_default ();
-
- gtk_style_context_add_provider_for_screen (screen,
- GTK_STYLE_PROVIDER (provider),
- GTK_STYLE_PROVIDER_PRIORITY_APPLICATION);
-
-out:
- g_free (filename);
- g_object_unref (provider);
-}
-
-static gboolean
-launch_app_info (GAppInfo *app_info,
- GError **error)
-{
- GdkAppLaunchContext *context = NULL;
- GdkDisplay *display;
- GError *err = NULL;
-
- display = gdk_display_get_default ();
- context = gdk_display_get_app_launch_context (display);
-
- if (!g_app_info_launch (app_info, NULL, (GAppLaunchContext *) context,
- &err))
- {
- DEBUG ("Failed to launch %s: %s",
- g_app_info_get_display_name (app_info), err->message);
- g_propagate_error (error, err);
- return FALSE;
- }
-
- tp_clear_object (&context);
- return TRUE;
-}
-
-gboolean
-empathy_launch_external_app (const gchar *desktop_file,
- const gchar *args,
- GError **error)
-{
- GDesktopAppInfo *desktop_info;
- gboolean result;
- GError *err = NULL;
-
- desktop_info = g_desktop_app_info_new (desktop_file);
- if (desktop_info == NULL)
- {
- DEBUG ("%s not found", desktop_file);
-
- g_set_error (error, G_IO_ERROR, G_IO_ERROR_NOT_FOUND,
- "%s not found", desktop_file);
- return FALSE;
- }
-
- if (args == NULL)
- {
- result = launch_app_info (G_APP_INFO (desktop_info), error);
- }
- else
- {
- gchar *cmd;
- GAppInfo *app_info;
-
- /* glib doesn't have API to start a desktop file with args... (#637875) */
- cmd = g_strdup_printf ("%s %s", g_app_info_get_commandline (
- (GAppInfo *) desktop_info), args);
-
- app_info = g_app_info_create_from_commandline (cmd, NULL, 0, &err);
- if (app_info == NULL)
- {
- DEBUG ("Failed to launch '%s': %s", cmd, err->message);
- g_free (cmd);
- g_object_unref (desktop_info);
- g_propagate_error (error, err);
- return FALSE;
- }
-
- result = launch_app_info (app_info, error);
-
- g_object_unref (app_info);
- g_free (cmd);
- }
-
- g_object_unref (desktop_info);
- return result;
-}
diff --git a/libempathy-gtk/empathy-ui-utils.h b/libempathy-gtk/empathy-ui-utils.h
deleted file mode 100644
index 24ad6a71..00000000
--- a/libempathy-gtk/empathy-ui-utils.h
+++ /dev/null
@@ -1,121 +0,0 @@
-/*
- * Copyright (C) 2002-2007 Imendio AB
- * Copyright (C) 2007-2010 Collabora Ltd.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301 USA
- *
- * Authors: Mikael Hallendal <micke@imendio.com>
- * Richard Hult <richard@imendio.com>
- * Martyn Russell <martyn@imendio.com>
- * Xavier Claessens <xclaesse@gmail.com>
- * Jonny Lamb <jonny.lamb@collabora.co.uk>
- * Travis Reitter <travis.reitter@collabora.co.uk>
- *
- * 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 <folks/folks.h>
-
-#include "empathy-contact.h"
-#include "empathy-ft-handler.h"
-
-G_BEGIN_DECLS
-
-#define EMPATHY_RECT_IS_ON_SCREEN(x,y,w,h) ((x) + (w) > 0 && \
- (y) + (h) > 0 && \
- (x) < gdk_screen_width () && \
- (y) < gdk_screen_height ())
-
-typedef void (*EmpathyPixbufAvatarFromIndividualCb) (
- FolksIndividual *individual,
- GdkPixbuf *pixbuf,
- gpointer user_data);
-
-void empathy_gtk_init (void);
-
-/* Pixbufs */
-const gchar * empathy_icon_name_for_presence (
- TpConnectionPresenceType presence);
-const gchar * empathy_icon_name_for_contact (EmpathyContact *contact);
-const gchar * empathy_icon_name_for_individual (FolksIndividual *individual);
-const gchar * empathy_protocol_name_for_contact (EmpathyContact *contact);
-void empathy_pixbuf_avatar_from_individual_scaled_async (
- FolksIndividual *individual,
- gint width,
- gint height,
- GCancellable *cancellable,
- GAsyncReadyCallback callback,
- gpointer user_data);
-GdkPixbuf * empathy_pixbuf_avatar_from_individual_scaled_finish (
- FolksIndividual *individual,
- GAsyncResult *result,
- GError **error);
-GdkPixbuf * empathy_pixbuf_avatar_from_contact_scaled (EmpathyContact *contact,
- gint width,
- gint height);
-GdkPixbuf * empathy_pixbuf_contact_status_icon (EmpathyContact *contact,
- gboolean show_protocol);
-GdkPixbuf * empathy_pixbuf_contact_status_icon_with_icon_name (
- EmpathyContact *contact,
- const gchar *icon_name,
- gboolean show_protocol);
-
-void empathy_move_to_window_desktop (GtkWindow *window,
- guint32 timestamp);
-
-/* URL */
-void empathy_url_show (GtkWidget *parent,
- const char *url);
-
-/* File transfer */
-void empathy_send_file (EmpathyContact *contact,
- GFile *file);
-void empathy_send_file_from_uri_list (EmpathyContact *contact,
- const gchar *uri_list);
-void empathy_send_file_with_file_chooser (EmpathyContact *contact);
-void empathy_receive_file_with_file_chooser (EmpathyFTHandler *handler);
-
-/* Misc */
-void empathy_make_color_whiter (GdkRGBA *color);
-
-GtkWidget * empathy_context_menu_new (GtkWidget *attach_to);
-
-gint64 empathy_get_current_action_time (void);
-
-gboolean empathy_individual_match_string (
- FolksIndividual *individual,
- const gchar *text,
- GPtrArray *words);
-
-void empathy_launch_program (const gchar *dir,
- const gchar *name,
- const gchar *args);
-
-void empathy_set_css_provider (GtkWidget *widget);
-
-gboolean empathy_launch_external_app (const gchar *desktop_file,
- const gchar *args,
- GError **error);
-
-G_END_DECLS
-
-#endif /* __EMPATHY_UI_UTILS_H__ */
diff --git a/libempathy-gtk/empathy-webkit-utils.c b/libempathy-gtk/empathy-webkit-utils.c
deleted file mode 100644
index 90dc28c1..00000000
--- a/libempathy-gtk/empathy-webkit-utils.c
+++ /dev/null
@@ -1,348 +0,0 @@
-/*
- * Copyright (C) 2008-2009 Collabora Ltd.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- *
- * Authors: Xavier Claessens <xclaesse@gmail.com>
- */
-
-#include "config.h"
-#include "empathy-webkit-utils.h"
-
-#include <glib/gi18n-lib.h>
-
-#include "empathy-smiley-manager.h"
-#include "empathy-string-parser.h"
-#include "empathy-theme-adium.h"
-#include "empathy-ui-utils.h"
-
-#define BORING_DPI_DEFAULT 96
-
-static void
-empathy_webkit_match_newline (const gchar *text,
- gssize len,
- TpawStringReplace replace_func,
- TpawStringParser *sub_parsers,
- gpointer user_data)
-{
- GString *string = user_data;
- gint i;
- gint prev = 0;
-
- if (len < 0)
- len = G_MAXSSIZE;
-
- /* Replace \n by <br/> */
- for (i = 0; i < len && text[i] != '\0'; i++)
- {
- if (text[i] == '\n')
- {
- tpaw_string_parser_substr (text + prev, i - prev,
- sub_parsers, user_data);
- g_string_append (string, "<br/>");
- prev = i + 1;
- }
- }
-
- tpaw_string_parser_substr (text + prev, i - prev,
- sub_parsers, user_data);
-}
-
-static void
-empathy_webkit_replace_smiley (const gchar *text,
- gssize len,
- gpointer match_data,
- gpointer user_data)
-{
- EmpathySmileyHit *hit = match_data;
- GString *string = user_data;
-
- /* Replace smiley by a <img/> tag */
- g_string_append_printf (string,
- "<img src=\"%s\" alt=\"%.*s\" title=\"%.*s\"/>",
- hit->path, (int)len, text, (int)len, text);
-}
-
-static TpawStringParser string_parsers[] = {
- { tpaw_string_match_link, tpaw_string_replace_link },
- { empathy_webkit_match_newline, NULL },
- { tpaw_string_match_all, tpaw_string_replace_escaped },
- { NULL, NULL}
-};
-
-static TpawStringParser string_parsers_with_smiley[] = {
- { tpaw_string_match_link, tpaw_string_replace_link },
- { empathy_string_match_smiley, empathy_webkit_replace_smiley },
- { empathy_webkit_match_newline, NULL },
- { tpaw_string_match_all, tpaw_string_replace_escaped },
- { NULL, NULL }
-};
-
-TpawStringParser *
-empathy_webkit_get_string_parser (gboolean smileys)
-{
- if (smileys)
- return string_parsers_with_smiley;
- else
- return string_parsers;
-}
-
-static gboolean
-webkit_get_font_family (GValue *value,
- GVariant *variant,
- gpointer user_data)
-{
- PangoFontDescription *font = pango_font_description_from_string (
- g_variant_get_string (variant, NULL));
-
- if (font == NULL)
- return FALSE;
-
- g_value_set_string (value, pango_font_description_get_family (font));
- pango_font_description_free (font);
-
- return TRUE;
-}
-
-static gboolean
-webkit_get_font_size (GValue *value,
- GVariant *variant,
- gpointer user_data)
-{
- PangoFontDescription *font = pango_font_description_from_string (
- g_variant_get_string (variant, NULL));
- int size;
-
- if (font == NULL)
- return FALSE;
-
- size = pango_font_description_get_size (font) / PANGO_SCALE;
-
- if (pango_font_description_get_size_is_absolute (font))
- {
- GdkScreen *screen = gdk_screen_get_default ();
- double dpi;
-
- if (screen != NULL)
- dpi = gdk_screen_get_resolution (screen);
- else
- dpi = BORING_DPI_DEFAULT;
-
- size = (gint) (size / (dpi / 72));
- }
-
- g_value_set_int (value, size);
- pango_font_description_free (font);
-
- return TRUE;
-}
-
-void
-empathy_webkit_bind_font_setting (WebKitWebView *webview,
- GSettings *gsettings,
- const char *key)
-{
- WebKitWebSettings *settings = webkit_web_view_get_settings (webview);
-
- g_settings_bind_with_mapping (gsettings, key,
- settings, "default-font-family",
- G_SETTINGS_BIND_GET,
- webkit_get_font_family,
- NULL,
- NULL, NULL);
-
- g_settings_bind_with_mapping (gsettings, key,
- settings, "default-font-size",
- G_SETTINGS_BIND_GET,
- webkit_get_font_size,
- NULL,
- NULL, NULL);
-}
-
-static void
-empathy_webkit_copy_address_cb (GtkMenuItem *menuitem,
- gpointer user_data)
-{
- WebKitHitTestResult *hit_test_result = WEBKIT_HIT_TEST_RESULT (user_data);
- gchar *uri;
- GtkClipboard *clipboard;
-
- g_object_get (G_OBJECT (hit_test_result),
- "link-uri", &uri,
- NULL);
-
- clipboard = gtk_clipboard_get (GDK_SELECTION_CLIPBOARD);
- gtk_clipboard_set_text (clipboard, uri, -1);
-
- clipboard = gtk_clipboard_get (GDK_SELECTION_PRIMARY);
- gtk_clipboard_set_text (clipboard, uri, -1);
-
- g_free (uri);
-}
-
-static void
-empathy_webkit_open_address_cb (GtkMenuItem *menuitem,
- gpointer user_data)
-{
- WebKitHitTestResult *hit_test_result = WEBKIT_HIT_TEST_RESULT (user_data);
- gchar *uri;
-
- g_object_get (G_OBJECT (hit_test_result),
- "link-uri", &uri,
- NULL);
-
- empathy_url_show (GTK_WIDGET (menuitem), uri);
-
- g_free (uri);
-}
-
-static void
-empathy_webkit_inspect_cb (GtkMenuItem *menuitem,
- WebKitWebView *view)
-{
- empathy_webkit_show_inspector (view);
-}
-
-static void
-empathy_webkit_context_menu_selection_done_cb (GtkMenuShell *menu,
- gpointer user_data)
-{
- WebKitHitTestResult *hit_test_result = WEBKIT_HIT_TEST_RESULT (user_data);
-
- g_object_unref (hit_test_result);
-}
-
-GtkWidget *
-empathy_webkit_create_context_menu (WebKitWebView *view,
- WebKitHitTestResult *hit_test_result,
- EmpathyWebKitMenuFlags flags)
-{
- WebKitHitTestResultContext context;
- GtkWidget *menu;
- GtkWidget *item;
-
- g_object_get (G_OBJECT (hit_test_result),
- "context", &context,
- NULL);
-
- /* The menu */
- menu = empathy_context_menu_new (GTK_WIDGET (view));
-
- /* Select all item */
- item = gtk_image_menu_item_new_from_stock (GTK_STOCK_SELECT_ALL, NULL);
- gtk_menu_shell_prepend (GTK_MENU_SHELL (menu), item);
-
- g_signal_connect_swapped (item, "activate",
- G_CALLBACK (webkit_web_view_select_all),
- view);
-
- /* Copy menu item */
- if (webkit_web_view_can_copy_clipboard (view))
- {
- item = gtk_image_menu_item_new_from_stock (GTK_STOCK_COPY, NULL);
- gtk_menu_shell_prepend (GTK_MENU_SHELL (menu), item);
-
- g_signal_connect_swapped (item, "activate",
- G_CALLBACK (webkit_web_view_copy_clipboard),
- view);
- }
-
- /* Clear menu item */
- if (flags & EMPATHY_WEBKIT_MENU_CLEAR)
- {
- item = gtk_separator_menu_item_new ();
- gtk_menu_shell_prepend (GTK_MENU_SHELL (menu), item);
-
- item = gtk_image_menu_item_new_from_stock (GTK_STOCK_CLEAR, NULL);
- gtk_menu_shell_prepend (GTK_MENU_SHELL (menu), item);
-
- g_signal_connect_swapped (item, "activate",
- G_CALLBACK (empathy_theme_adium_clear),
- view);
- }
-
- /* We will only add the following menu items if we are
- * right-clicking a link */
- if (context & WEBKIT_HIT_TEST_RESULT_CONTEXT_LINK)
- {
- /* Separator */
- item = gtk_separator_menu_item_new ();
- gtk_menu_shell_prepend (GTK_MENU_SHELL (menu), item);
-
- /* Copy Link Address menu item */
- item = gtk_menu_item_new_with_mnemonic (_("_Copy Link Address"));
- g_signal_connect (item, "activate",
- G_CALLBACK (empathy_webkit_copy_address_cb),
- hit_test_result);
- gtk_menu_shell_prepend (GTK_MENU_SHELL (menu), item);
-
- /* Open Link menu item */
- item = gtk_menu_item_new_with_mnemonic (_("_Open Link"));
- g_signal_connect (item, "activate",
- G_CALLBACK (empathy_webkit_open_address_cb),
- hit_test_result);
- gtk_menu_shell_prepend (GTK_MENU_SHELL (menu), item);
- }
-
- if ((flags & EMPATHY_WEBKIT_MENU_INSPECT) != 0)
- {
- /* Separator */
- item = gtk_separator_menu_item_new ();
- gtk_menu_shell_append (GTK_MENU_SHELL (menu), item);
-
- /* Inspector */
- item = gtk_menu_item_new_with_mnemonic (_("Inspect HTML"));
- g_signal_connect (item, "activate",
- G_CALLBACK (empathy_webkit_inspect_cb), view);
- gtk_menu_shell_append (GTK_MENU_SHELL (menu), item);
- }
-
- g_signal_connect (GTK_MENU_SHELL (menu), "selection-done",
- G_CALLBACK (empathy_webkit_context_menu_selection_done_cb),
- g_object_ref (hit_test_result));
-
- return menu;
-}
-
-void
-empathy_webkit_context_menu_for_event (WebKitWebView *view,
- GdkEventButton *event,
- EmpathyWebKitMenuFlags flags)
-{
- GtkWidget *menu;
- WebKitHitTestResult *hit_test_result;
-
- hit_test_result = webkit_web_view_get_hit_test_result (view, event);
-
- menu = empathy_webkit_create_context_menu (view, hit_test_result, flags);
-
- gtk_widget_show_all (menu);
- gtk_menu_popup (GTK_MENU (menu), NULL, NULL, NULL, NULL,
- event->button, event->time);
-
- g_object_unref (hit_test_result);
-}
-
-void
-empathy_webkit_show_inspector (WebKitWebView *view)
-{
- WebKitWebInspector *inspector;
-
- g_object_set (G_OBJECT (webkit_web_view_get_settings (view)),
- "enable-developer-extras", TRUE, NULL);
-
- inspector = webkit_web_view_get_inspector (view);
- webkit_web_inspector_show (inspector);
-}
diff --git a/libempathy-gtk/empathy-webkit-utils.h b/libempathy-gtk/empathy-webkit-utils.h
deleted file mode 100644
index 98fdc4dc..00000000
--- a/libempathy-gtk/empathy-webkit-utils.h
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * Copyright (C) 2008-2009 Collabora Ltd.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- *
- * Authors: Xavier Claessens <xclaesse@gmail.com>
- */
-
-#ifndef _EMPATHY_WEBKIT_UTILS__H_
-#define _EMPATHY_WEBKIT_UTILS__H_
-
-#include <tp-account-widgets/tpaw-string-parser.h>
-#include <webkit/webkit.h>
-
-G_BEGIN_DECLS
-
-typedef enum {
- EMPATHY_WEBKIT_MENU_CLEAR = 1 << 0,
- EMPATHY_WEBKIT_MENU_INSPECT = 1 << 1,
-} EmpathyWebKitMenuFlags;
-
-TpawStringParser * empathy_webkit_get_string_parser (gboolean smileys);
-
-void empathy_webkit_bind_font_setting (WebKitWebView *webview,
- GSettings *gsettings,
- const char *key);
-
-GtkWidget * empathy_webkit_create_context_menu (WebKitWebView *view,
- WebKitHitTestResult *hit_test_result,
- EmpathyWebKitMenuFlags flags);
-
-void empathy_webkit_context_menu_for_event (WebKitWebView *view,
- GdkEventButton *event,
- EmpathyWebKitMenuFlags flags);
-
-void empathy_webkit_show_inspector (WebKitWebView *view);
-
-G_END_DECLS
-
-#endif
diff --git a/libempathy/.gitignore b/libempathy/.gitignore
deleted file mode 100644
index 5cc6b339..00000000
--- a/libempathy/.gitignore
+++ /dev/null
@@ -1,5 +0,0 @@
-empathy-chandler-glue.h
-empathy-dtd-resources.[ch]
-empathy-marshal.*
-empathy-filter-glue.h
-tp-stream-engine-gen.h
diff --git a/libempathy/Makefile.am b/libempathy/Makefile.am
deleted file mode 100644
index e7dbd7f8..00000000
--- a/libempathy/Makefile.am
+++ /dev/null
@@ -1,203 +0,0 @@
-include $(top_srcdir)/tools/flymake.mk
-
-AM_CPPFLAGS = \
- $(ERROR_CFLAGS) \
- -I$(top_srcdir)/extensions \
- -I$(top_builddir) \
- -DDATADIR=\""$(datadir)"\" \
- -DLOCALEDIR=\""$(datadir)/locale"\" \
- -DG_LOG_DOMAIN=\"empathy\" \
- -DGCR_API_SUBJECT_TO_CHANGE \
- $(EMPATHY_CFLAGS) \
- $(GEOCLUE_CFLAGS) \
- $(GEOCODE_CFLAGS) \
- $(NETWORK_MANAGER_CFLAGS) \
- $(CONNMAN_CFLAGS) \
- $(GOA_CFLAGS) \
- $(UOA_CFLAGS) \
- $(WARN_CFLAGS) \
- $(DISABLE_DEPRECATED)
-
-BUILT_SOURCES = \
- empathy-dtd-resources.c \
- empathy-dtd-resources.h \
- empathy-enum-types.h \
- empathy-enum-types.c
-
-libempathy_headers = \
- action-chain-internal.h \
- empathy-auth-factory.h \
- empathy-chatroom-manager.h \
- empathy-chatroom.h \
- empathy-client-factory.h \
- empathy-connection-aggregator.h \
- empathy-contact-groups.h \
- empathy-contact.h \
- empathy-debug.h \
- empathy-ft-factory.h \
- empathy-ft-handler.h \
- empathy-gsettings.h \
- empathy-presence-manager.h \
- empathy-individual-manager.h \
- empathy-location.h \
- empathy-message.h \
- empathy-pkg-kit.h \
- empathy-request-util.h \
- empathy-sasl-mechanisms.h \
- empathy-server-sasl-handler.h \
- empathy-server-tls-handler.h \
- empathy-status-presets.h \
- empathy-tls-verifier.h \
- empathy-tp-chat.h \
- empathy-types.h \
- empathy-utils.h
-
-libempathy_handwritten_source = \
- $(libempathy_headers) \
- action-chain.c \
- empathy-auth-factory.c \
- empathy-chatroom-manager.c \
- empathy-chatroom.c \
- empathy-client-factory.c \
- empathy-connection-aggregator.c \
- empathy-contact-groups.c \
- empathy-contact.c \
- empathy-debug.c \
- empathy-ft-factory.c \
- empathy-ft-handler.c \
- empathy-presence-manager.c \
- empathy-individual-manager.c \
- empathy-message.c \
- empathy-pkg-kit.c \
- empathy-request-util.c \
- empathy-sasl-mechanisms.c \
- empathy-server-sasl-handler.c \
- empathy-server-tls-handler.c \
- empathy-status-presets.c \
- empathy-tls-verifier.c \
- empathy-tp-chat.c \
- empathy-utils.c
-
-# these are sources that depend on GOA
-goa_sources = \
- empathy-goa-auth-handler.c \
- empathy-goa-auth-handler.h \
- $(NULL)
-
-# these are sources that depend on Ubuntu Online Accounts
-uoa_sources = \
- empathy-uoa-auth-handler.c \
- empathy-uoa-auth-handler.h \
- $(NULL)
-
-pkglib_LTLIBRARIES = libempathy.la
-
-# libempathy's API is not stable and will never be, so use -release to make the
-# SONAME of the plugin library change with every Empathy release.
-libempathy_la_LDFLAGS = \
- -no-undefined \
- -release $(VERSION) \
- $(NULL)
-
-libempathy_la_SOURCES = \
- $(libempathy_handwritten_source) \
- $(NULL)
-
-libempathy_la_LIBADD = \
- $(top_builddir)/extensions/libemp-extensions.la \
- $(GCR_LIBS) \
- $(EMPATHY_LIBS) \
- $(GEOCLUE_LIBS) \
- $(GEOCODE_LIBS) \
- $(NETWORK_MANAGER_LIBS) \
- $(CONNMAN_LIBS) \
- $(UDEV_LIBS) \
- $(GOA_LIBS) \
- $(UOA_LIBS) \
- $(LIBM)
-
-dtd_resources_files = \
- empathy-status-presets.dtd \
- empathy-contact-groups.dtd \
- empathy-chatroom-manager.dtd \
- $(NULL)
-
-dtd_resource_files: $(shell $(GLIB_COMPILE_RESOURCES) --sourcedir=$(srcdir) --generate-dependencies $(srcdir)/empathy-dtd.gresource.xml)
-
-empathy-dtd-resources.c: empathy-dtd.gresource.xml $(dtd_resource_files)
- $(AM_V_GEN)$(GLIB_COMPILE_RESOURCES) --target=$@ --sourcedir=$(srcdir) --generate-source $<
-
-empathy-dtd-resources.h: empathy-dtd.gresource.xml $(dtd_resource_files)
- $(AM_V_GEN)$(GLIB_COMPILE_RESOURCES) --target=$@ --sourcedir=$(srcdir) --generate-header $<
-
-EXTRA_DIST = \
- empathy-dtd.gresource.xml \
- $(dtd_resources_files) \
- $(NULL)
-
-CLEANFILES = \
- $(BUILT_SOURCES) \
- stamp-empathy-enum-types.h
-
-if HAVE_GOA
-libempathy_la_SOURCES += $(goa_sources)
-else
-EXTRA_DIST += $(goa_sources)
-endif
-
-if HAVE_UOA
-libempathy_la_SOURCES += $(uoa_sources)
-else
-EXTRA_DIST += $(uoa_sources)
-endif
-
-# do not distribute generated files
-nodist_libempathy_la_SOURCES =\
- $(BUILT_SOURCES)
-
-check_c_sources = \
- $(libempathy_handwritten_source) \
- $(goa_sources) \
- $(uoa_sources) \
- $(NULL)
-
-include $(top_srcdir)/tools/check-coding-style.mk
-check-local: check-coding-style
-
-empathy-enum-types.h: stamp-empathy-enum-types.h
- $(AM_V_GEN)true
-stamp-empathy-enum-types.h: $(libempathy_headers) Makefile
- $(AM_V_GEN)(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 "@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
- $(AM_V_GEN)(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
diff --git a/libempathy/action-chain-internal.h b/libempathy/action-chain-internal.h
deleted file mode 100644
index 14750c93..00000000
--- a/libempathy/action-chain-internal.h
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Copyright (C) 2009 Collabora Ltd.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- *
- * Authors: Cosimo Alfarano <cosimo.alfarano@collabora.co.uk>
- */
-
-#ifndef __TPL_ACTION_CHAIN_H__
-#define __TPL_ACTION_CHAIN_H__
-
-#include <glib-object.h>
-#include <gio/gio.h>
-
-typedef struct {
- GQueue *chain;
- GSimpleAsyncResult *simple;
- gboolean running;
-} TplActionChain;
-
-TplActionChain *_tpl_action_chain_new_async (GObject *obj,
- GAsyncReadyCallback cb,
- gpointer user_data);
-void _tpl_action_chain_free (TplActionChain *self);
-typedef void (*TplPendingAction) (TplActionChain *ctx, gpointer user_data);
-void _tpl_action_chain_append (TplActionChain *self, TplPendingAction func,
- gpointer user_data);
-void _tpl_action_chain_prepend (TplActionChain *self, TplPendingAction func,
- gpointer user_data);
-void _tpl_action_chain_start (TplActionChain *self);
-void _tpl_action_chain_continue (TplActionChain *self);
-void _tpl_action_chain_terminate (TplActionChain *self, const GError *error);
-void _tpl_action_chain_clear (TplActionChain *self);
-
-gpointer _tpl_action_chain_get_object (TplActionChain *self);
-gboolean _tpl_action_chain_new_finish (GObject *source,
- GAsyncResult *result, GError **error);
-
-#endif // __TPL_ACTION_CHAIN_H__
diff --git a/libempathy/action-chain.c b/libempathy/action-chain.c
deleted file mode 100644
index b6bf25ab..00000000
--- a/libempathy/action-chain.c
+++ /dev/null
@@ -1,192 +0,0 @@
-/*
- * Copyright (C) 2009 Collabora Ltd.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- *
- * Authors: Cosimo Alfarano <cosimo.alfarano@collabora.co.uk>
- */
-
-#include "config.h"
-#include "action-chain-internal.h"
-
-typedef struct {
- TplPendingAction action;
- gpointer user_data;
-} TplActionLink;
-
-
-TplActionChain *
-_tpl_action_chain_new_async (GObject *obj,
- GAsyncReadyCallback cb,
- gpointer user_data)
-{
- TplActionChain *ret = g_slice_new0 (TplActionChain);
-
- ret->chain = g_queue_new ();
- ret->simple = g_simple_async_result_new (obj, cb, user_data,
- _tpl_action_chain_new_async);
-
- g_object_set_data (G_OBJECT (ret->simple), "chain", ret);
-
- return ret;
-}
-
-
-static void
-link_free (TplActionLink *l)
-{
- g_slice_free (TplActionLink, l);
-}
-
-
-void
-_tpl_action_chain_free (TplActionChain *self)
-{
- g_queue_foreach (self->chain, (GFunc) link_free, NULL);
- g_queue_free (self->chain);
- g_object_unref (self->simple);
- g_slice_free (TplActionChain, self);
-}
-
-
-gpointer // FIXME GObject *
-_tpl_action_chain_get_object (TplActionChain *self)
-{
- GObject *obj;
-
- g_return_val_if_fail (self != NULL && self->simple != NULL, NULL);
-
- obj = g_async_result_get_source_object (G_ASYNC_RESULT (self->simple));
- g_object_unref (obj); /* don't want the extra ref */
-
- return obj;
-}
-
-
-void
-_tpl_action_chain_prepend (TplActionChain *self,
- TplPendingAction func,
- gpointer user_data)
-{
- TplActionLink *l;
-
- l = g_slice_new0 (TplActionLink);
- l->action = func;
- l->user_data = user_data;
-
- g_queue_push_head (self->chain, l);
-}
-
-
-void
-_tpl_action_chain_append (TplActionChain *self,
- TplPendingAction func,
- gpointer user_data)
-{
- TplActionLink *l;
-
- l = g_slice_new0 (TplActionLink);
- l->action = func;
- l->user_data = user_data;
-
- g_queue_push_tail (self->chain, l);
-}
-
-void
-_tpl_action_chain_start (TplActionChain *self)
-{
- g_return_if_fail (!g_queue_is_empty (self->chain));
-
- if (self->running)
- return;
-
- _tpl_action_chain_continue (self);
-}
-
-void
-_tpl_action_chain_continue (TplActionChain *self)
-{
- if (g_queue_is_empty (self->chain))
- {
- self->running = FALSE;
- g_simple_async_result_complete (self->simple);
- }
- else
- {
- TplActionLink *l = g_queue_pop_head (self->chain);
-
- self->running = TRUE;
- l->action (self, l->user_data);
- link_free (l);
- if (g_queue_is_empty (self->chain))
- self->running = FALSE;
- }
-}
-
-
-void
-_tpl_action_chain_clear (TplActionChain *self)
-{
- g_queue_foreach (self->chain, (GFunc) link_free, NULL);
- g_queue_clear (self->chain);
-}
-
-void
-_tpl_action_chain_terminate (TplActionChain *self,
- const GError *error)
-{
- GSimpleAsyncResult *simple = self->simple;
-
- g_assert (error != NULL);
-
- g_simple_async_result_set_from_error (simple, error);
- g_simple_async_result_complete (simple);
-}
-
-
-/**
- * _tpl_action_chain_new_finish:
- * @source: the #GObject pass to _tpl_action_chain_new_async()
- * @result: the #GAsyncResult pass in callback
- * @error: a pointer to a #GError that will be set on error, or NULL to ignore
- *
- * Get the result from running the action chain (%TRUE if the chain completed
- * successfully, %FALSE with @error set if it was terminated).
- *
- * This function also frees the chain.
- *
- * Returns: %TRUE on success, %FALSE with @error set on error.
- */
-gboolean
-_tpl_action_chain_new_finish (GObject *source,
- GAsyncResult *result,
- GError **error)
-{
- TplActionChain *chain;
-
- g_return_val_if_fail (g_simple_async_result_is_valid (result, source,
- _tpl_action_chain_new_async), FALSE);
-
- chain = g_object_get_data (G_OBJECT (result), "chain");
-
- g_return_val_if_fail (chain != NULL, FALSE);
-
- if (g_simple_async_result_propagate_error (G_SIMPLE_ASYNC_RESULT (result),
- error))
- return FALSE;
-
- _tpl_action_chain_free (chain);
- return TRUE;
-}
diff --git a/libempathy/empathy-auth-factory.c b/libempathy/empathy-auth-factory.c
deleted file mode 100644
index cbf7020b..00000000
--- a/libempathy/empathy-auth-factory.c
+++ /dev/null
@@ -1,786 +0,0 @@
-/*
- * empathy-auth-factory.c - Source for EmpathyAuthFactory
- * Copyright (C) 2010 Collabora Ltd.
- * @author Cosimo Cecchi <cosimo.cecchi@collabora.co.uk>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-#include "config.h"
-#include "empathy-auth-factory.h"
-
-#include <tp-account-widgets/tpaw-keyring.h>
-
-#include "empathy-sasl-mechanisms.h"
-#include "empathy-server-sasl-handler.h"
-#include "empathy-server-tls-handler.h"
-#include "empathy-utils.h"
-
-#ifdef HAVE_GOA
-#include "empathy-goa-auth-handler.h"
-#endif /* HAVE_GOA */
-
-#ifdef HAVE_UOA
-#include "empathy-uoa-auth-handler.h"
-#endif /* HAVE_UOA */
-
-#include "extensions.h"
-
-#define DEBUG_FLAG EMPATHY_DEBUG_TLS
-#include "empathy-debug.h"
-
-G_DEFINE_TYPE (EmpathyAuthFactory, empathy_auth_factory, TP_TYPE_BASE_CLIENT);
-
-struct _EmpathyAuthFactoryPriv {
- /* Keep a ref here so the auth client doesn't have to mess with
- * refs. It will be cleared when the channel (and so the handler)
- * gets invalidated.
- *
- * The channel path of the handler's channel (borrowed gchar *) ->
- * reffed (EmpathyServerSASLHandler *)
- * */
- GHashTable *sasl_handlers;
-
-#ifdef HAVE_GOA
- EmpathyGoaAuthHandler *goa_handler;
-#endif /* HAVE_GOA */
-
-#ifdef HAVE_UOA
- EmpathyUoaAuthHandler *uoa_handler;
-#endif /* HAVE_UOA */
-
- /* If an account failed to connect and user enters a new password to try, we
- * store it in this hash table and will try to use it next time the account
- * attemps to connect.
- *
- * reffed TpAccount -> owned password (gchar *) */
- GHashTable *retry_passwords;
-
- gboolean dispose_run;
-};
-
-enum {
- NEW_SERVER_TLS_HANDLER,
- NEW_SERVER_SASL_HANDLER,
- AUTH_PASSWORD_FAILED,
- LAST_SIGNAL,
-};
-
-static guint signals[LAST_SIGNAL] = { 0, };
-
-#define GET_PRIV(obj) EMPATHY_GET_PRIV (obj, EmpathyAuthFactory)
-
-static EmpathyAuthFactory *auth_factory_singleton = NULL;
-
-typedef struct {
- TpHandleChannelsContext *context;
- EmpathyAuthFactory *self;
-} HandlerContextData;
-
-static void
-handler_context_data_free (HandlerContextData *data)
-{
- tp_clear_object (&data->self);
- tp_clear_object (&data->context);
-
- g_slice_free (HandlerContextData, data);
-}
-
-static HandlerContextData *
-handler_context_data_new (EmpathyAuthFactory *self,
- TpHandleChannelsContext *context)
-{
- HandlerContextData *data;
-
- data = g_slice_new0 (HandlerContextData);
- data->self = g_object_ref (self);
-
- if (context != NULL)
- data->context = g_object_ref (context);
-
- return data;
-}
-
-static void
-server_tls_handler_ready_cb (GObject *source,
- GAsyncResult *res,
- gpointer user_data)
-{
- EmpathyServerTLSHandler *handler;
- GError *error = NULL;
- HandlerContextData *data = user_data;
-
- handler = empathy_server_tls_handler_new_finish (res, &error);
-
- if (error != NULL)
- {
- DEBUG ("Failed to create a server TLS handler; error %s",
- error->message);
- tp_handle_channels_context_fail (data->context, error);
-
- g_error_free (error);
- }
- else
- {
- tp_handle_channels_context_accept (data->context);
- g_signal_emit (data->self, signals[NEW_SERVER_TLS_HANDLER], 0,
- handler);
-
- g_object_unref (handler);
- }
-
- handler_context_data_free (data);
-}
-
-static void
-sasl_handler_invalidated_cb (EmpathyServerSASLHandler *handler,
- gpointer user_data)
-{
- EmpathyAuthFactory *self = user_data;
- EmpathyAuthFactoryPriv *priv = GET_PRIV (self);
- TpChannel * channel;
-
- channel = empathy_server_sasl_handler_get_channel (handler);
- g_assert (channel != NULL);
-
- DEBUG ("SASL handler for channel %s is invalidated, unref it",
- tp_proxy_get_object_path (channel));
-
- g_hash_table_remove (priv->sasl_handlers, tp_proxy_get_object_path (channel));
-}
-
-static void
-sasl_handler_auth_password_failed_cb (EmpathyServerSASLHandler *handler,
- const gchar *password,
- EmpathyAuthFactory *self)
-{
- TpAccount *account;
-
- account = empathy_server_sasl_handler_get_account (handler);
-
- g_signal_emit (self, signals[AUTH_PASSWORD_FAILED], 0, account, password);
-}
-
-static void
-server_sasl_handler_ready_cb (GObject *source,
- GAsyncResult *res,
- gpointer user_data)
-{
- EmpathyAuthFactoryPriv *priv;
- GError *error = NULL;
- HandlerContextData *data = user_data;
- EmpathyServerSASLHandler *handler;
-
- priv = GET_PRIV (data->self);
- handler = empathy_server_sasl_handler_new_finish (res, &error);
-
- if (error != NULL)
- {
- DEBUG ("Failed to create a server SASL handler; error %s",
- error->message);
-
- if (data->context != NULL)
- tp_handle_channels_context_fail (data->context, error);
-
- g_error_free (error);
- }
- else
- {
- TpChannel *channel;
- const gchar *password;
- TpAccount *account;
-
- if (data->context != NULL)
- tp_handle_channels_context_accept (data->context);
-
- channel = empathy_server_sasl_handler_get_channel (handler);
- g_assert (channel != NULL);
-
- /* Pass the ref to the hash table */
- g_hash_table_insert (priv->sasl_handlers,
- (gpointer) tp_proxy_get_object_path (channel), handler);
-
- tp_g_signal_connect_object (handler, "invalidated",
- G_CALLBACK (sasl_handler_invalidated_cb), data->self, 0);
-
- tp_g_signal_connect_object (handler, "auth-password-failed",
- G_CALLBACK (sasl_handler_auth_password_failed_cb), data->self, 0);
-
- /* Is there a retry password? */
- account = empathy_server_sasl_handler_get_account (handler);
-
- password = g_hash_table_lookup (data->self->priv->retry_passwords,
- account);
- if (password != NULL)
- {
- gboolean save;
-
- DEBUG ("Use retry password");
-
- /* We want to save this new password only if there is another
- * (wrong) password saved. The SASL handler will only save it if it
- * manages to connect. */
- save = empathy_server_sasl_handler_has_password (handler);
-
- empathy_server_sasl_handler_provide_password (handler,
- password, save);
-
- /* We only want to try this password once */
- g_hash_table_remove (data->self->priv->retry_passwords, account);
- }
-
- g_signal_emit (data->self, signals[NEW_SERVER_SASL_HANDLER], 0,
- handler);
- }
-
- handler_context_data_free (data);
-}
-
-static gboolean
-common_checks (EmpathyAuthFactory *self,
- GList *channels,
- gboolean observe,
- GError **error)
-{
- EmpathyAuthFactoryPriv *priv = GET_PRIV (self);
- TpChannel *channel;
- const GError *dbus_error;
- EmpathyServerSASLHandler *handler;
-
- /* there can't be more than one ServerTLSConnection or
- * ServerAuthentication channels at the same time, for the same
- * connection/account.
- */
- if (g_list_length (channels) != 1)
- {
- g_set_error (error, TP_ERROR, TP_ERROR_INVALID_ARGUMENT,
- "Can't %s more than one ServerTLSConnection or ServerAuthentication "
- "channel for the same connection.", observe ? "observe" : "handle");
-
- return FALSE;
- }
-
- channel = channels->data;
-
- if (tp_channel_get_channel_type_id (channel) !=
- TP_IFACE_QUARK_CHANNEL_TYPE_SERVER_AUTHENTICATION)
- {
- /* If we are observing we care only about ServerAuthentication channels.
- * If we are handling we care about ServerAuthentication and
- * ServerTLSConnection channels. */
- if (observe
- || tp_channel_get_channel_type_id (channel) !=
- EMP_IFACE_QUARK_CHANNEL_TYPE_SERVER_TLS_CONNECTION)
- {
- g_set_error (error, TP_ERROR, TP_ERROR_INVALID_ARGUMENT,
- "Can only %s ServerTLSConnection or ServerAuthentication channels, "
- "this was a %s channel", observe ? "observe" : "handle",
- tp_channel_get_channel_type (channel));
-
- return FALSE;
- }
- }
-
- handler = g_hash_table_lookup (priv->sasl_handlers,
- tp_proxy_get_object_path (channel));
-
- if (tp_channel_get_channel_type_id (channel) ==
- TP_IFACE_QUARK_CHANNEL_TYPE_SERVER_AUTHENTICATION
- && handler != NULL &&
- !observe)
- {
- g_set_error (error, TP_ERROR, TP_ERROR_INVALID_ARGUMENT,
- "We are already handling this channel: %s",
- tp_proxy_get_object_path (channel));
-
- return FALSE;
- }
-
- dbus_error = tp_proxy_get_invalidated (channel);
- if (dbus_error != NULL)
- {
- *error = g_error_copy (dbus_error);
- return FALSE;
- }
-
- return TRUE;
-}
-
-static void
-handle_channels (TpBaseClient *handler,
- TpAccount *account,
- TpConnection *connection,
- GList *channels,
- GList *requests_satisfied,
- gint64 user_action_time,
- TpHandleChannelsContext *context)
-{
- TpChannel *channel;
- GError *error = NULL;
- EmpathyAuthFactory *self = EMPATHY_AUTH_FACTORY (handler);
- HandlerContextData *data;
-
- DEBUG ("Handle TLS or SASL carrier channels.");
-
- if (!common_checks (self, channels, FALSE, &error))
- {
- DEBUG ("Failed checks: %s", error->message);
- tp_handle_channels_context_fail (context, error);
- g_clear_error (&error);
- return;
- }
-
- /* The common checks above have checked this is fine. */
- channel = channels->data;
-
- /* Only password authentication is supported from here */
- if (tp_channel_get_channel_type_id (channel) ==
- TP_IFACE_QUARK_CHANNEL_TYPE_SERVER_AUTHENTICATION &&
- !empathy_sasl_channel_supports_mechanism (channel,
- "X-TELEPATHY-PASSWORD"))
- {
- g_set_error_literal (&error, TP_ERROR, TP_ERROR_INVALID_ARGUMENT,
- "Only the X-TELEPATHY-PASSWORD SASL mechanism is supported");
- DEBUG ("%s", error->message);
- tp_handle_channels_context_fail (context, error);
- g_clear_error (&error);
- return;
- }
-
- data = handler_context_data_new (self, context);
- tp_handle_channels_context_delay (context);
-
- /* create a handler */
- if (tp_channel_get_channel_type_id (channel) ==
- EMP_IFACE_QUARK_CHANNEL_TYPE_SERVER_TLS_CONNECTION)
- {
- empathy_server_tls_handler_new_async (channel, server_tls_handler_ready_cb,
- data);
- }
- else if (tp_channel_get_channel_type_id (channel) ==
- TP_IFACE_QUARK_CHANNEL_TYPE_SERVER_AUTHENTICATION)
- {
- empathy_server_sasl_handler_new_async (account, channel,
- server_sasl_handler_ready_cb, data);
- }
-}
-
-typedef struct
-{
- EmpathyAuthFactory *self;
- TpObserveChannelsContext *context;
- TpChannelDispatchOperation *dispatch_operation;
- TpAccount *account;
- TpChannel *channel;
-} ObserveChannelsData;
-
-static void
-observe_channels_data_free (ObserveChannelsData *data)
-{
- g_object_unref (data->context);
- g_object_unref (data->account);
- g_object_unref (data->channel);
- g_object_unref (data->dispatch_operation);
- g_slice_free (ObserveChannelsData, data);
-}
-
-static void
-password_claim_cb (GObject *source,
- GAsyncResult *result,
- gpointer user_data)
-{
- ObserveChannelsData *data = user_data;
- GError *error = NULL;
-
- if (!tp_channel_dispatch_operation_claim_with_finish (
- TP_CHANNEL_DISPATCH_OPERATION (source), result, &error))
- {
- DEBUG ("Failed to call Claim: %s", error->message);
- g_clear_error (&error);
- }
- else
- {
- HandlerContextData *h_data;
-
- DEBUG ("Claim called successfully");
-
- h_data = handler_context_data_new (data->self, NULL);
-
- empathy_server_sasl_handler_new_async (TP_ACCOUNT (data->account),
- data->channel, server_sasl_handler_ready_cb, h_data);
- }
-
- observe_channels_data_free (data);
-}
-
-static void
-get_password_cb (GObject *source,
- GAsyncResult *result,
- gpointer user_data)
-{
- ObserveChannelsData *data = user_data;
-
- if (tpaw_keyring_get_account_password_finish (TP_ACCOUNT (source), result, NULL) == NULL)
- {
- /* We don't actually mind if this fails, just let the approver
- * go ahead and take the channel. */
-
- DEBUG ("We don't have a password for account %s, letting the event "
- "manager approver take it", tp_proxy_get_object_path (source));
-
- tp_observe_channels_context_accept (data->context);
- observe_channels_data_free (data);
- }
- else
- {
- DEBUG ("We have a password for account %s, calling Claim",
- tp_proxy_get_object_path (source));
-
- tp_channel_dispatch_operation_claim_with_async (data->dispatch_operation,
- TP_BASE_CLIENT (data->self), password_claim_cb, data);
-
- tp_observe_channels_context_accept (data->context);
- }
-}
-
-#ifdef HAVE_GOA
-static void
-goa_claim_cb (GObject *source,
- GAsyncResult *result,
- gpointer user_data)
-{
- ObserveChannelsData *data = user_data;
- EmpathyAuthFactory *self = data->self;
- GError *error = NULL;
-
- if (!tp_channel_dispatch_operation_claim_with_finish (data->dispatch_operation,
- result, &error))
- {
- DEBUG ("Failed to claim: %s", error->message);
- g_clear_error (&error);
- }
- else
- {
- empathy_goa_auth_handler_start (self->priv->goa_handler,
- data->channel, data->account);
- }
-
- observe_channels_data_free (data);
-}
-#endif /* HAVE_GOA */
-
-#ifdef HAVE_UOA
-static void
-uoa_claim_cb (GObject *source,
- GAsyncResult *result,
- gpointer user_data)
-{
- ObserveChannelsData *data = user_data;
- EmpathyAuthFactory *self = data->self;
- GError *error = NULL;
-
- if (!tp_channel_dispatch_operation_claim_with_finish (data->dispatch_operation,
- result, &error))
- {
- DEBUG ("Failed to claim: %s", error->message);
- g_clear_error (&error);
- }
- else
- {
- empathy_uoa_auth_handler_start (self->priv->uoa_handler,
- data->channel, data->account);
- }
-
- observe_channels_data_free (data);
-}
-#endif /* HAVE_UOA */
-
-static void
-observe_channels (TpBaseClient *client,
- TpAccount *account,
- TpConnection *connection,
- GList *channels,
- TpChannelDispatchOperation *dispatch_operation,
- GList *requests,
- TpObserveChannelsContext *context)
-{
- EmpathyAuthFactory *self = EMPATHY_AUTH_FACTORY (client);
- TpChannel *channel;
- GError *error = NULL;
- ObserveChannelsData *data;
-
- DEBUG ("New auth channel to observe");
-
- if (!common_checks (self, channels, TRUE, &error))
- {
- DEBUG ("Failed checks: %s", error->message);
- tp_observe_channels_context_fail (context, error);
- g_clear_error (&error);
- return;
- }
-
- /* The common checks above have checked this is fine. */
- channel = channels->data;
-
- data = g_slice_new0 (ObserveChannelsData);
- data->self = self;
- data->context = g_object_ref (context);
- data->dispatch_operation = g_object_ref (dispatch_operation);
- data->account = g_object_ref (account);
- data->channel = g_object_ref (channel);
-
-#ifdef HAVE_GOA
- /* GOA auth? */
- if (empathy_goa_auth_handler_supports (self->priv->goa_handler, channel, account))
- {
- DEBUG ("Supported GOA account (%s), claim SASL channel",
- tp_proxy_get_object_path (account));
-
- tp_channel_dispatch_operation_claim_with_async (dispatch_operation,
- client, goa_claim_cb, data);
- tp_observe_channels_context_accept (context);
- return;
- }
-#endif /* HAVE_GOA */
-
-#ifdef HAVE_UOA
- /* UOA auth? */
- if (empathy_uoa_auth_handler_supports (self->priv->uoa_handler, channel, account))
- {
- DEBUG ("Supported UOA account (%s), claim SASL channel",
- tp_proxy_get_object_path (account));
-
- tp_channel_dispatch_operation_claim_with_async (dispatch_operation,
- client, uoa_claim_cb, data);
- tp_observe_channels_context_accept (context);
- return;
- }
-#endif /* HAVE_UOA */
-
- /* Password auth? */
- if (empathy_sasl_channel_supports_mechanism (data->channel,
- "X-TELEPATHY-PASSWORD"))
- {
- if (g_hash_table_lookup (self->priv->retry_passwords, account) != NULL)
- {
- DEBUG ("We have a retry password for account %s, calling Claim",
- tp_account_get_path_suffix (account));
-
- tp_channel_dispatch_operation_claim_with_async (dispatch_operation,
- client, password_claim_cb, data);
-
- tp_observe_channels_context_accept (context);
- return;
- }
-
- tpaw_keyring_get_account_password_async (data->account,
- get_password_cb, data);
- tp_observe_channels_context_delay (context);
- return;
- }
-
- /* Unknown auth */
- error = g_error_new_literal (TP_ERROR, TP_ERROR_INVALID_ARGUMENT,
- "Unknown auth mechanism");
- tp_observe_channels_context_fail (context, error);
- g_clear_error (&error);
-
- observe_channels_data_free (data);
-}
-
-static GObject *
-empathy_auth_factory_constructor (GType type,
- guint n_params,
- GObjectConstructParam *params)
-{
- GObject *retval;
-
- if (auth_factory_singleton != NULL)
- {
- retval = g_object_ref (auth_factory_singleton);
- }
- else
- {
- retval = G_OBJECT_CLASS (empathy_auth_factory_parent_class)->constructor
- (type, n_params, params);
-
- auth_factory_singleton = EMPATHY_AUTH_FACTORY (retval);
- g_object_add_weak_pointer (retval, (gpointer *) &auth_factory_singleton);
- }
-
- return retval;
-}
-
-static void
-empathy_auth_factory_init (EmpathyAuthFactory *self)
-{
- self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self,
- EMPATHY_TYPE_AUTH_FACTORY, EmpathyAuthFactoryPriv);
-
- self->priv->sasl_handlers = g_hash_table_new_full (g_str_hash, g_str_equal,
- NULL, g_object_unref);
-
-#ifdef HAVE_GOA
- self->priv->goa_handler = empathy_goa_auth_handler_new ();
-#endif /* HAVE_GOA */
-
-#ifdef HAVE_UOA
- self->priv->uoa_handler = empathy_uoa_auth_handler_new ();
-#endif /* HAVE_UOA */
-
- self->priv->retry_passwords = g_hash_table_new_full (NULL, NULL,
- g_object_unref, g_free);
-}
-
-static void
-empathy_auth_factory_constructed (GObject *obj)
-{
- EmpathyAuthFactory *self = EMPATHY_AUTH_FACTORY (obj);
- TpBaseClient *client = TP_BASE_CLIENT (self);
-
- /* chain up to TpBaseClient first */
- G_OBJECT_CLASS (empathy_auth_factory_parent_class)->constructed (obj);
-
- tp_base_client_set_handler_bypass_approval (client, FALSE);
-
- /* Handle ServerTLSConnection and ServerAuthentication channels */
- tp_base_client_take_handler_filter (client, tp_asv_new (
- /* ChannelType */
- TP_PROP_CHANNEL_CHANNEL_TYPE, G_TYPE_STRING,
- EMP_IFACE_CHANNEL_TYPE_SERVER_TLS_CONNECTION,
- /* AuthenticationMethod */
- TP_PROP_CHANNEL_TARGET_HANDLE_TYPE, G_TYPE_UINT,
- TP_HANDLE_TYPE_NONE, NULL));
-
- tp_base_client_take_handler_filter (client, tp_asv_new (
- /* ChannelType */
- TP_PROP_CHANNEL_CHANNEL_TYPE, G_TYPE_STRING,
- TP_IFACE_CHANNEL_TYPE_SERVER_AUTHENTICATION,
- /* AuthenticationMethod */
- TP_PROP_CHANNEL_TYPE_SERVER_AUTHENTICATION_AUTHENTICATION_METHOD,
- G_TYPE_STRING, TP_IFACE_CHANNEL_INTERFACE_SASL_AUTHENTICATION,
- NULL));
-
- /* We are also an observer so that we can see new auth channels
- * popping up and if we have the password already saved to one
- * account where an auth channel has just appeared we can call
- * Claim() on the CDO so the approver won't get it, which makes
- * sense. */
-
- /* Observe ServerAuthentication channels */
- tp_base_client_take_observer_filter (client, tp_asv_new (
- /* ChannelType */
- TP_PROP_CHANNEL_CHANNEL_TYPE, G_TYPE_STRING,
- TP_IFACE_CHANNEL_TYPE_SERVER_AUTHENTICATION,
- /* AuthenticationMethod */
- TP_PROP_CHANNEL_TYPE_SERVER_AUTHENTICATION_AUTHENTICATION_METHOD,
- G_TYPE_STRING, TP_IFACE_CHANNEL_INTERFACE_SASL_AUTHENTICATION,
- NULL));
-
- tp_base_client_set_observer_delay_approvers (client, TRUE);
-}
-
-static void
-empathy_auth_factory_dispose (GObject *object)
-{
- EmpathyAuthFactoryPriv *priv = GET_PRIV (object);
-
- if (priv->dispose_run)
- return;
-
- priv->dispose_run = TRUE;
-
- g_hash_table_unref (priv->sasl_handlers);
-
-#ifdef HAVE_GOA
- g_object_unref (priv->goa_handler);
-#endif /* HAVE_GOA */
-
-#ifdef HAVE_UOA
- g_object_unref (priv->uoa_handler);
-#endif /* HAVE_UOA */
-
- g_hash_table_unref (priv->retry_passwords);
-
- G_OBJECT_CLASS (empathy_auth_factory_parent_class)->dispose (object);
-}
-
-static void
-empathy_auth_factory_class_init (EmpathyAuthFactoryClass *klass)
-{
- GObjectClass *oclass = G_OBJECT_CLASS (klass);
- TpBaseClientClass *base_client_cls = TP_BASE_CLIENT_CLASS (klass);
-
- oclass->constructor = empathy_auth_factory_constructor;
- oclass->constructed = empathy_auth_factory_constructed;
- oclass->dispose = empathy_auth_factory_dispose;
-
- base_client_cls->handle_channels = handle_channels;
- base_client_cls->observe_channels = observe_channels;
-
- g_type_class_add_private (klass, sizeof (EmpathyAuthFactoryPriv));
-
- signals[NEW_SERVER_TLS_HANDLER] =
- g_signal_new ("new-server-tls-handler",
- G_TYPE_FROM_CLASS (klass),
- G_SIGNAL_RUN_LAST, 0,
- NULL, NULL,
- g_cclosure_marshal_generic,
- G_TYPE_NONE,
- 1, EMPATHY_TYPE_SERVER_TLS_HANDLER);
-
- signals[NEW_SERVER_SASL_HANDLER] =
- g_signal_new ("new-server-sasl-handler",
- G_TYPE_FROM_CLASS (klass),
- G_SIGNAL_RUN_LAST, 0,
- NULL, NULL,
- g_cclosure_marshal_generic,
- G_TYPE_NONE,
- 1, EMPATHY_TYPE_SERVER_SASL_HANDLER);
-
- signals[AUTH_PASSWORD_FAILED] =
- g_signal_new ("auth-password-failed",
- G_TYPE_FROM_CLASS (klass),
- G_SIGNAL_RUN_LAST, 0,
- NULL, NULL,
- g_cclosure_marshal_generic,
- G_TYPE_NONE,
- 2, TP_TYPE_ACCOUNT, G_TYPE_STRING);
-}
-
-EmpathyAuthFactory *
-empathy_auth_factory_new (TpSimpleClientFactory *factory)
-{
- return g_object_new (EMPATHY_TYPE_AUTH_FACTORY,
- "factory", factory,
- "name", "Empathy.Auth",
- NULL);
-}
-
-gboolean
-empathy_auth_factory_register (EmpathyAuthFactory *self,
- GError **error)
-{
- return tp_base_client_register (TP_BASE_CLIENT (self), error);
-}
-
-void
-empathy_auth_factory_save_retry_password (EmpathyAuthFactory *self,
- TpAccount *account,
- const gchar *password)
-{
- g_hash_table_insert (self->priv->retry_passwords,
- g_object_ref (account), g_strdup (password));
-}
diff --git a/libempathy/empathy-auth-factory.h b/libempathy/empathy-auth-factory.h
deleted file mode 100644
index 73e90578..00000000
--- a/libempathy/empathy-auth-factory.h
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
- * empathy-auth-factory.h - Header for EmpathyAuthFactory
- * Copyright (C) 2010 Collabora Ltd.
- * @author Cosimo Cecchi <cosimo.cecchi@collabora.co.uk>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-#ifndef __EMPATHY_AUTH_FACTORY_H__
-#define __EMPATHY_AUTH_FACTORY_H__
-
-#include <glib-object.h>
-#include <telepathy-glib/telepathy-glib.h>
-
-G_BEGIN_DECLS
-
-typedef struct _EmpathyAuthFactory EmpathyAuthFactory;
-typedef struct _EmpathyAuthFactoryClass EmpathyAuthFactoryClass;
-typedef struct _EmpathyAuthFactoryPriv EmpathyAuthFactoryPriv;
-
-struct _EmpathyAuthFactoryClass {
- TpBaseClientClass parent_class;
-};
-
-struct _EmpathyAuthFactory {
- TpBaseClient parent;
- EmpathyAuthFactoryPriv *priv;
-};
-
-GType empathy_auth_factory_get_type (void);
-
-/* TYPE MACROS */
-#define EMPATHY_TYPE_AUTH_FACTORY \
- (empathy_auth_factory_get_type ())
-#define EMPATHY_AUTH_FACTORY(obj) \
- (G_TYPE_CHECK_INSTANCE_CAST((obj), EMPATHY_TYPE_AUTH_FACTORY, \
- EmpathyAuthFactory))
-#define EMPATHY_AUTH_FACTORY_CLASS(klass) \
- (G_TYPE_CHECK_CLASS_CAST((klass), EMPATHY_TYPE_AUTH_FACTORY, \
- EmpathyAuthFactoryClass))
-#define EMPATHY_IS_AUTH_FACTORY(obj) \
- (G_TYPE_CHECK_INSTANCE_TYPE((obj), EMPATHY_TYPE_AUTH_FACTORY))
-#define EMPATHY_IS_AUTH_FACTORY_CLASS(klass) \
- (G_TYPE_CHECK_CLASS_TYPE((klass), EMPATHY_TYPE_AUTH_FACTORY))
-#define EMPATHY_AUTH_FACTORY_GET_CLASS(obj) \
- (G_TYPE_INSTANCE_GET_CLASS ((obj), EMPATHY_TYPE_AUTH_FACTORY, \
- EmpathyAuthFactoryClass))
-
-EmpathyAuthFactory * empathy_auth_factory_new (TpSimpleClientFactory *factory);
-
-gboolean empathy_auth_factory_register (EmpathyAuthFactory *self,
- GError **error);
-
-void empathy_auth_factory_save_retry_password (EmpathyAuthFactory *self,
- TpAccount *account,
- const gchar *password);
-
-G_END_DECLS
-
-#endif /* #ifndef __EMPATHY_AUTH_FACTORY_H__*/
diff --git a/libempathy/empathy-chatroom-manager.c b/libempathy/empathy-chatroom-manager.c
deleted file mode 100644
index 215d8edb..00000000
--- a/libempathy/empathy-chatroom-manager.c
+++ /dev/null
@@ -1,906 +0,0 @@
-/*
- * Copyright (C) 2004-2007 Imendio AB
- * Copyright (C) 2007-2010 Collabora Ltd.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301 USA
- *
- * Authors: Xavier Claessens <xclaesse@gmail.com>
- * Martyn Russell <martyn@imendio.com>
- */
-
-#include "config.h"
-#include "empathy-chatroom-manager.h"
-
-#include <sys/stat.h>
-#include <tp-account-widgets/tpaw-utils.h>
-
-#include "empathy-client-factory.h"
-#include "empathy-utils.h"
-
-#define DEBUG_FLAG EMPATHY_DEBUG_OTHER
-#include "empathy-debug.h"
-
-#define CHATROOMS_XML_FILENAME "chatrooms.xml"
-#define CHATROOMS_DTD_RESOURCENAME "/org/gnome/Empathy/empathy-chatroom-manager.dtd"
-#define SAVE_TIMER 4
-
-static EmpathyChatroomManager *chatroom_manager_singleton = NULL;
-
-static void observe_channels_cb (TpSimpleObserver *observer,
- TpAccount *account,
- TpConnection *connection,
- GList *channels,
- TpChannelDispatchOperation *dispatch_operation,
- GList *requests,
- TpObserveChannelsContext *context,
- gpointer user_data);
-
-#define GET_PRIV(obj) EMPATHY_GET_PRIV (obj, EmpathyChatroomManager)
-typedef struct
-{
- GList *chatrooms;
- gchar *file;
- TpAccountManager *account_manager;
-
- /* source id of the autosave timer */
- gint save_timer_id;
- gboolean ready;
- GFileMonitor *monitor;
- gboolean writing;
-
- TpBaseClient *observer;
-} EmpathyChatroomManagerPriv;
-
-enum {
- CHATROOM_ADDED,
- CHATROOM_REMOVED,
- LAST_SIGNAL
-};
-
-static guint signals[LAST_SIGNAL];
-
-/* properties */
-enum
-{
- PROP_FILE = 1,
- PROP_READY,
- LAST_PROPERTY
-};
-
-G_DEFINE_TYPE (EmpathyChatroomManager, empathy_chatroom_manager, G_TYPE_OBJECT);
-
-/*
- * API to save/load and parse the chatrooms file.
- */
-
-static gboolean
-chatroom_manager_file_save (EmpathyChatroomManager *manager)
-{
- EmpathyChatroomManagerPriv *priv;
- xmlDocPtr doc;
- xmlNodePtr root;
- GList *l;
-
- priv = GET_PRIV (manager);
-
- priv->writing = TRUE;
-
- doc = xmlNewDoc ((const xmlChar *) "1.0");
- root = xmlNewNode (NULL, (const xmlChar *) "chatrooms");
- xmlDocSetRootElement (doc, root);
-
- for (l = priv->chatrooms; l; l = l->next)
- {
- EmpathyChatroom *chatroom;
- xmlNodePtr node;
- const gchar *account_id;
-
- chatroom = l->data;
-
- if (!empathy_chatroom_is_favorite (chatroom))
- continue;
-
- account_id = tp_proxy_get_object_path (empathy_chatroom_get_account (
- chatroom));
-
- node = xmlNewChild (root, NULL, (const xmlChar *) "chatroom", NULL);
- xmlNewTextChild (node, NULL, (const xmlChar *) "name",
- (const xmlChar *) empathy_chatroom_get_name (chatroom));
- xmlNewTextChild (node, NULL, (const xmlChar *) "room",
- (const xmlChar *) empathy_chatroom_get_room (chatroom));
- xmlNewTextChild (node, NULL, (const xmlChar *) "account",
- (const xmlChar *) account_id);
- xmlNewTextChild (node, NULL, (const xmlChar *) "auto_connect",
- empathy_chatroom_get_auto_connect (chatroom) ?
- (const xmlChar *) "yes" : (const xmlChar *) "no");
- xmlNewTextChild (node, NULL, (const xmlChar *) "always_urgent",
- empathy_chatroom_is_always_urgent (chatroom) ?
- (const xmlChar *) "yes" : (const xmlChar *) "no");
- }
-
- /* Make sure the XML is indented properly */
- xmlIndentTreeOutput = 1;
-
- DEBUG ("Saving file:'%s'", priv->file);
- xmlSaveFormatFileEnc (priv->file, doc, "utf-8", 1);
- xmlFreeDoc (doc);
-
- xmlMemoryDump ();
-
- priv->writing = FALSE;
- return TRUE;
-}
-
-static gboolean
-save_timeout (EmpathyChatroomManager *self)
-{
- EmpathyChatroomManagerPriv *priv = GET_PRIV (self);
-
- priv->save_timer_id = 0;
- chatroom_manager_file_save (self);
-
- return FALSE;
-}
-
-static void
-reset_save_timeout (EmpathyChatroomManager *self)
-{
- EmpathyChatroomManagerPriv *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
-chatroom_changed_cb (EmpathyChatroom *chatroom,
- GParamSpec *spec,
- EmpathyChatroomManager *self)
-{
- reset_save_timeout (self);
-}
-
-static void
-add_chatroom (EmpathyChatroomManager *self,
- EmpathyChatroom *chatroom)
-{
- EmpathyChatroomManagerPriv *priv = GET_PRIV (self);
-
- priv->chatrooms = g_list_prepend (priv->chatrooms, g_object_ref (chatroom));
-
- /* Watch only those properties which are exported in the save file */
- g_signal_connect (chatroom, "notify::name",
- G_CALLBACK (chatroom_changed_cb), self);
- g_signal_connect (chatroom, "notify::room",
- G_CALLBACK (chatroom_changed_cb), self);
- g_signal_connect (chatroom, "notify::account",
- G_CALLBACK (chatroom_changed_cb), self);
- g_signal_connect (chatroom, "notify::auto-connect",
- G_CALLBACK (chatroom_changed_cb), self);
- g_signal_connect (chatroom, "notify::always_urgent",
- G_CALLBACK (chatroom_changed_cb), self);
- g_signal_connect (chatroom, "notify::favorite",
- G_CALLBACK (chatroom_changed_cb), self);
-}
-
-static void
-chatroom_manager_parse_chatroom (EmpathyChatroomManager *manager,
- xmlNodePtr node)
-{
- EmpathyChatroom *chatroom = NULL;
- TpAccount *account;
- xmlNodePtr child;
- gchar *str;
- gchar *name;
- gchar *room;
- gchar *account_id;
- gboolean auto_connect;
- gboolean always_urgent;
- EmpathyClientFactory *factory;
- GError *error = NULL;
-
- /* default values. */
- name = NULL;
- room = NULL;
- auto_connect = TRUE;
- always_urgent = FALSE;
- 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 (!tp_strdiff (tag, "always_urgent"))
- {
- if (strcmp (str, "yes") == 0)
- always_urgent = TRUE;
- else
- always_urgent = FALSE;
- }
- else if (strcmp (tag, "account") == 0)
- {
- account_id = g_strdup (str);
- }
-
- xmlFree (str);
- }
-
- /* account has to be a valid Account object path */
- if (!tp_dbus_check_valid_object_path (account_id, NULL) ||
- !g_str_has_prefix (account_id, TP_ACCOUNT_OBJECT_PATH_BASE))
- goto out;
-
- factory = empathy_client_factory_dup ();
-
- account = tp_simple_client_factory_ensure_account (
- TP_SIMPLE_CLIENT_FACTORY (factory), account_id, NULL, &error);
- g_object_unref (factory);
-
- if (account == NULL)
- {
- DEBUG ("Failed to create account: %s", error->message);
- g_error_free (error);
-
- g_free (name);
- g_free (room);
- g_free (account_id);
- return;
- }
-
- chatroom = empathy_chatroom_new_full (account, room, name, auto_connect);
- empathy_chatroom_set_favorite (chatroom, TRUE);
- empathy_chatroom_set_always_urgent (chatroom, always_urgent);
- add_chatroom (manager, chatroom);
- g_signal_emit (manager, signals[CHATROOM_ADDED], 0, chatroom);
-
-out:
- g_free (name);
- g_free (room);
- g_free (account_id);
- tp_clear_object (&chatroom);
-}
-
-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 == NULL)
- {
- g_warning ("Failed to parse file:'%s'", filename);
- xmlFreeParserCtxt (ctxt);
- return FALSE;
- }
-
- if (!tpaw_xml_validate_from_resource (doc, CHATROOMS_DTD_RESOURCENAME))
- {
- 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 gboolean
-chatroom_manager_get_all (EmpathyChatroomManager *manager)
-{
- EmpathyChatroomManagerPriv *priv;
-
- priv = GET_PRIV (manager);
-
- /* read file in */
- if (g_file_test (priv->file, G_FILE_TEST_EXISTS) &&
- !chatroom_manager_file_parse (manager, priv->file))
- return FALSE;
-
- if (!priv->ready)
- {
- priv->ready = TRUE;
- g_object_notify (G_OBJECT (manager), "ready");
- }
-
- return TRUE;
-}
-
-static void
-empathy_chatroom_manager_get_property (GObject *object,
- guint property_id,
- GValue *value,
- GParamSpec *pspec)
-{
- EmpathyChatroomManager *self = EMPATHY_CHATROOM_MANAGER (object);
- EmpathyChatroomManagerPriv *priv = GET_PRIV (self);
-
- switch (property_id)
- {
- case PROP_FILE:
- g_value_set_string (value, priv->file);
- break;
- case PROP_READY:
- g_value_set_boolean (value, priv->ready);
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
- break;
- }
-}
-
-static void
-empathy_chatroom_manager_set_property (GObject *object,
- guint property_id,
- const GValue *value,
- GParamSpec *pspec)
-{
- EmpathyChatroomManager *self = EMPATHY_CHATROOM_MANAGER (object);
- EmpathyChatroomManagerPriv *priv = GET_PRIV (self);
-
- switch (property_id)
- {
- case PROP_FILE:
- g_free (priv->file);
- priv->file = g_value_dup_string (value);
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
- break;
- }
-}
-
-static void
-chatroom_manager_dispose (GObject *object)
-{
- EmpathyChatroomManagerPriv *priv;
-
- priv = GET_PRIV (object);
-
- tp_clear_object (&priv->observer);
- tp_clear_object (&priv->monitor);
-
- (G_OBJECT_CLASS (empathy_chatroom_manager_parent_class)->dispose) (object);
-}
-
-static void
-clear_chatrooms (EmpathyChatroomManager *self)
-{
- EmpathyChatroomManagerPriv *priv = GET_PRIV (self);
- GList *l, *tmp;
-
- tmp = priv->chatrooms;
-
- /* Unreffing the chatroom may result in destroying the underlying
- * EmpathyTpChat which will fire the invalidated signal and so make us
- * re-call this function. We already set priv->chatrooms to NULL so we won't
- * try to destroy twice the same objects. */
- priv->chatrooms = NULL;
-
- for (l = tmp; l != NULL; l = g_list_next (l))
- {
- EmpathyChatroom *chatroom = l->data;
-
- g_signal_handlers_disconnect_by_func (chatroom, chatroom_changed_cb,
- self);
- g_signal_emit (self, signals[CHATROOM_REMOVED], 0, chatroom);
-
- g_object_unref (chatroom);
- }
-
- g_list_free (tmp);
-}
-
-static void
-chatroom_manager_finalize (GObject *object)
-{
- EmpathyChatroomManager *self = EMPATHY_CHATROOM_MANAGER (object);
- EmpathyChatroomManagerPriv *priv;
-
- priv = GET_PRIV (object);
-
- g_object_unref (priv->account_manager);
-
- if (priv->save_timer_id > 0)
- {
- /* have to save before destroy the object */
- g_source_remove (priv->save_timer_id);
- priv->save_timer_id = 0;
- chatroom_manager_file_save (self);
- }
-
- clear_chatrooms (self);
-
- g_free (priv->file);
-
- (G_OBJECT_CLASS (empathy_chatroom_manager_parent_class)->finalize) (object);
-}
-
-static void
-file_changed_cb (GFileMonitor *monitor,
- GFile *file,
- GFile *other_file,
- GFileMonitorEvent event_type,
- gpointer user_data)
-{
- EmpathyChatroomManager *self = user_data;
- EmpathyChatroomManagerPriv *priv = GET_PRIV (self);
-
- if (event_type != G_FILE_MONITOR_EVENT_CHANGES_DONE_HINT)
- return;
-
- if (priv->writing)
- return;
-
- DEBUG ("chatrooms file changed; reloading list");
-
- clear_chatrooms (self);
- chatroom_manager_get_all (self);
-}
-
-static void
-account_manager_ready_cb (GObject *source_object,
- GAsyncResult *result,
- gpointer user_data)
-{
- EmpathyChatroomManager *self = EMPATHY_CHATROOM_MANAGER (user_data);
- EmpathyChatroomManagerPriv *priv = GET_PRIV (self);
- TpAccountManager *manager = TP_ACCOUNT_MANAGER (source_object);
- GError *error = NULL;
- GFile *file = NULL;
-
- if (!tp_proxy_prepare_finish (manager, result, &error))
- {
- DEBUG ("Failed to prepare account manager: %s", error->message);
- g_error_free (error);
- goto out;
- }
-
- chatroom_manager_get_all (self);
-
- /* Set up file monitor */
- file = g_file_new_for_path (priv->file);
-
- priv->monitor = g_file_monitor (file, 0, NULL, &error);
- if (priv->monitor == NULL)
- {
- DEBUG ("Failed to create file monitor on %s: %s", priv->file,
- error->message);
-
- g_error_free (error);
- goto out;
- }
-
- g_signal_connect (priv->monitor, "changed", G_CALLBACK (file_changed_cb),
- self);
-
-out:
- tp_clear_object (&file);
- g_object_unref (self);
-}
-
-static GObject *
-empathy_chatroom_manager_constructor (GType type,
- guint n_props,
- GObjectConstructParam *props)
-{
- GObject *obj;
- EmpathyChatroomManager *self;
- EmpathyChatroomManagerPriv *priv;
- GError *error = NULL;
-
- if (chatroom_manager_singleton != NULL)
- return g_object_ref (chatroom_manager_singleton);
-
- /* Parent constructor chain */
- obj = G_OBJECT_CLASS (empathy_chatroom_manager_parent_class)->
- constructor (type, n_props, props);
-
- self = EMPATHY_CHATROOM_MANAGER (obj);
- priv = GET_PRIV (self);
-
- priv->ready = FALSE;
-
- chatroom_manager_singleton = self;
- g_object_add_weak_pointer (obj, (gpointer) &chatroom_manager_singleton);
-
- priv->account_manager = tp_account_manager_dup ();
-
- tp_proxy_prepare_async (priv->account_manager, NULL,
- account_manager_ready_cb, g_object_ref (self));
-
- if (priv->file == NULL)
- {
- /* Set the default file path */
- gchar *dir;
-
- dir = g_build_filename (g_get_user_config_dir (), 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);
-
- priv->file = g_build_filename (dir, CHATROOMS_XML_FILENAME, NULL);
- g_free (dir);
- }
-
- /* Setup a room observer */
- priv->observer = tp_simple_observer_new_with_am (priv->account_manager, TRUE,
- "Empathy.ChatroomManager", TRUE, observe_channels_cb, self, NULL);
-
- tp_base_client_take_observer_filter (priv->observer, tp_asv_new (
- TP_PROP_CHANNEL_CHANNEL_TYPE, G_TYPE_STRING,
- TP_IFACE_CHANNEL_TYPE_TEXT,
- TP_PROP_CHANNEL_TARGET_HANDLE_TYPE, G_TYPE_UINT,
- TP_HANDLE_TYPE_ROOM,
- NULL));
-
- if (!tp_base_client_register (priv->observer, &error))
- {
- g_critical ("Failed to register Observer: %s", error->message);
-
- g_error_free (error);
- }
-
- return obj;
-}
-
-static void
-empathy_chatroom_manager_class_init (EmpathyChatroomManagerClass *klass)
-{
- GObjectClass *object_class = G_OBJECT_CLASS (klass);
- GParamSpec *param_spec;
-
- object_class->constructor = empathy_chatroom_manager_constructor;
- object_class->get_property = empathy_chatroom_manager_get_property;
- object_class->set_property = empathy_chatroom_manager_set_property;
- object_class->dispose = chatroom_manager_dispose;
- object_class->finalize = chatroom_manager_finalize;
-
- param_spec = g_param_spec_string (
- "file",
- "path of the favorite file",
- "The path of the XML file containing user's favorites",
- 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_FILE, param_spec);
-
- param_spec = g_param_spec_boolean (
- "ready",
- "whether the manager is ready yet",
- "whether the manager is ready yet",
- FALSE,
- G_PARAM_READABLE);
- g_object_class_install_property (object_class, PROP_READY, param_spec);
-
- signals[CHATROOM_ADDED] = g_signal_new ("chatroom-added",
- G_TYPE_FROM_CLASS (klass),
- G_SIGNAL_RUN_LAST,
- 0, NULL, NULL,
- g_cclosure_marshal_generic,
- 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_generic,
- 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;
-}
-
-EmpathyChatroomManager *
-empathy_chatroom_manager_dup_singleton (const gchar *file)
-{
- return EMPATHY_CHATROOM_MANAGER (g_object_new (EMPATHY_TYPE_CHATROOM_MANAGER,
- "file", file, NULL));
-}
-
-gboolean
-empathy_chatroom_manager_add (EmpathyChatroomManager *manager,
- EmpathyChatroom *chatroom)
-{
- g_return_val_if_fail (EMPATHY_IS_CHATROOM_MANAGER (manager), FALSE);
- g_return_val_if_fail (EMPATHY_IS_CHATROOM (chatroom), FALSE);
-
- /* don't add more than once */
- if (!empathy_chatroom_manager_find (manager,
- empathy_chatroom_get_account (chatroom),
- empathy_chatroom_get_room (chatroom)))
- {
- add_chatroom (manager, chatroom);
-
- if (empathy_chatroom_is_favorite (chatroom))
- reset_save_timeout (manager);
-
- g_signal_emit (manager, signals[CHATROOM_ADDED], 0, chatroom);
- return TRUE;
- }
-
- return FALSE;
-}
-
-static void
-chatroom_manager_remove_link (EmpathyChatroomManager *manager,
- GList *l)
-{
- EmpathyChatroomManagerPriv *priv;
- EmpathyChatroom *chatroom;
-
- priv = GET_PRIV (manager);
-
- chatroom = l->data;
-
- if (empathy_chatroom_is_favorite (chatroom))
- reset_save_timeout (manager);
-
- priv->chatrooms = g_list_delete_link (priv->chatrooms, l);
-
- g_signal_emit (manager, signals[CHATROOM_REMOVED], 0, chatroom);
- g_signal_handlers_disconnect_by_func (chatroom, chatroom_changed_cb, manager);
-
- g_object_unref (chatroom);
-}
-
-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 (this_chatroom == chatroom ||
- empathy_chatroom_equal (chatroom, this_chatroom))
- {
- chatroom_manager_remove_link (manager, l);
- break;
- }
- }
-}
-
-EmpathyChatroom *
-empathy_chatroom_manager_find (EmpathyChatroomManager *manager,
- TpAccount *account,
- const gchar *room)
-{
- EmpathyChatroomManagerPriv *priv;
- GList *l;
-
- g_return_val_if_fail (EMPATHY_IS_CHATROOM_MANAGER (manager), NULL);
- g_return_val_if_fail (room != NULL, NULL);
-
- priv = GET_PRIV (manager);
-
- for (l = priv->chatrooms; l; l = l->next)
- {
- EmpathyChatroom *chatroom;
- TpAccount *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 && account == this_account
- && strcmp (this_room, room) == 0)
- return chatroom;
- }
-
- return NULL;
-}
-
-EmpathyChatroom *
-empathy_chatroom_manager_ensure_chatroom (EmpathyChatroomManager *manager,
- TpAccount *account,
- const gchar *room,
- const gchar *name)
-{
- EmpathyChatroom *chatroom;
-
- chatroom = empathy_chatroom_manager_find (manager, account, room);
-
- if (chatroom)
- {
- return g_object_ref (chatroom);
- }
- else
- {
- chatroom = empathy_chatroom_new_full (account,
- room,
- name,
- FALSE);
- empathy_chatroom_manager_add (manager, chatroom);
- return chatroom;
- }
-}
-
-GList *
-empathy_chatroom_manager_get_chatrooms (EmpathyChatroomManager *manager,
- TpAccount *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 (account == empathy_chatroom_get_account (chatroom))
- chatrooms = g_list_append (chatrooms, chatroom);
- }
-
- return chatrooms;
-}
-
-static void
-chatroom_manager_chat_invalidated_cb (EmpathyTpChat *chat,
- guint domain,
- gint code,
- gchar *message,
- gpointer manager)
-{
- EmpathyChatroomManagerPriv *priv = GET_PRIV (manager);
- GList *l;
-
- for (l = priv->chatrooms; l; l = l->next)
- {
- EmpathyChatroom *chatroom = l->data;
-
- if (empathy_chatroom_get_tp_chat (chatroom) != chat)
- continue;
-
- empathy_chatroom_set_tp_chat (chatroom, NULL);
-
- if (!empathy_chatroom_is_favorite (chatroom))
- {
- /* Remove the chatroom from the list, unless it's in the list of
- * favourites..
- * FIXME this policy should probably not be in libempathy */
- chatroom_manager_remove_link (manager, l);
- }
-
- break;
- }
-}
-
-static void
-observe_channels_cb (TpSimpleObserver *observer,
- TpAccount *account,
- TpConnection *connection,
- GList *channels,
- TpChannelDispatchOperation *dispatch_operation,
- GList *requests,
- TpObserveChannelsContext *context,
- gpointer user_data)
-{
- EmpathyChatroomManager *self = user_data;
- GList *l;
-
- for (l = channels; l != NULL; l = g_list_next (l))
- {
- EmpathyTpChat *tp_chat = l->data;
- const gchar *roomname;
- EmpathyChatroom *chatroom;
-
- if (tp_proxy_get_invalidated ((TpChannel *) tp_chat) != NULL)
- continue;
-
- if (!EMPATHY_IS_TP_CHAT (tp_chat))
- continue;
-
- roomname = empathy_tp_chat_get_id (tp_chat);
- chatroom = empathy_chatroom_manager_find (self, account, roomname);
-
- if (chatroom == NULL)
- {
- chatroom = empathy_chatroom_new_full (account, roomname, roomname,
- FALSE);
- empathy_chatroom_manager_add (self, chatroom);
- g_object_unref (chatroom);
- }
-
- empathy_chatroom_set_tp_chat (chatroom, tp_chat);
-
- g_signal_connect (tp_chat, "invalidated",
- G_CALLBACK (chatroom_manager_chat_invalidated_cb),
- self);
- }
-
- tp_observe_channels_context_accept (context);
-}
diff --git a/libempathy/empathy-chatroom-manager.dtd b/libempathy/empathy-chatroom-manager.dtd
deleted file mode 100644
index d40cae23..00000000
--- a/libempathy/empathy-chatroom-manager.dtd
+++ /dev/null
@@ -1,18 +0,0 @@
-<!--
- 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?),(always_urgent?))>
-
-<!ELEMENT name (#PCDATA)>
-<!ELEMENT room (#PCDATA)>
-<!ELEMENT auto_connect (#PCDATA)>
-<!ELEMENT always_urgent (#PCDATA)>
-<!ELEMENT account (#PCDATA)>
-
diff --git a/libempathy/empathy-chatroom-manager.h b/libempathy/empathy-chatroom-manager.h
deleted file mode 100644
index 498d225a..00000000
--- a/libempathy/empathy-chatroom-manager.h
+++ /dev/null
@@ -1,82 +0,0 @@
-/*
- * Copyright (C) 2004-2007 Imendio AB
- * Copyright (C) 2007-2010 Collabora Ltd.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301 USA
- *
- * Authors: Xavier Claessens <xclaesse@gmail.com>
- * Martyn Russell <martyn@imendio.com>
- */
-
-#ifndef __EMPATHY_CHATROOM_MANAGER_H__
-#define __EMPATHY_CHATROOM_MANAGER_H__
-
-#include <glib-object.h>
-#include <telepathy-glib/telepathy-glib.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_dup_singleton (
- const gchar *file);
-
-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,
- TpAccount *account,
- const gchar *room);
-
-EmpathyChatroom * empathy_chatroom_manager_ensure_chatroom (
- EmpathyChatroomManager *manager,
- TpAccount *account,
- const gchar *room,
- const gchar *name);
-
-GList * empathy_chatroom_manager_get_chatrooms (EmpathyChatroomManager *manager,
- TpAccount *account);
-
-G_END_DECLS
-
-#endif /* __EMPATHY_CHATROOM_MANAGER_H__ */
diff --git a/libempathy/empathy-chatroom.c b/libempathy/empathy-chatroom.c
deleted file mode 100644
index b186b2dd..00000000
--- a/libempathy/empathy-chatroom.c
+++ /dev/null
@@ -1,705 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * Copyright (C) 2007-2008 Collabora Ltd.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- *
- * Authors: Xavier Claessens <xclaesse@gmail.com>
- */
-
-#include "config.h"
-#include "empathy-chatroom.h"
-
-#include <tp-account-widgets/tpaw-utils.h>
-
-#include "empathy-utils.h"
-
-#define GET_PRIV(obj) EMPATHY_GET_PRIV (obj, EmpathyChatroom)
-typedef struct {
- TpAccount *account;
- gchar *room;
- gchar *name;
- gboolean auto_connect;
- gboolean favorite;
- EmpathyTpChat *tp_chat;
- gchar *subject;
- guint members_count;
- gboolean invite_only;
- gboolean need_password;
- gboolean always_urgent;
-} 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,
- PROP_FAVORITE,
- PROP_TP_CHAT,
- PROP_SUBJECT,
- PROP_MEMBERS_COUNT,
- PROP_NEED_PASSWORD,
- PROP_INVITE_ONLY,
- PROP_ALWAYS_URGENT,
-};
-
-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",
- TP_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_object_class_install_property (object_class,
- PROP_FAVORITE,
- g_param_spec_boolean ("favorite",
- "Favorite",
- "TRUE if the chatroom is in user's favorite list",
- FALSE,
- G_PARAM_READWRITE |
- G_PARAM_CONSTRUCT));
-
- g_object_class_install_property (object_class,
- PROP_ALWAYS_URGENT,
- g_param_spec_boolean ("always_urgent",
- "Always Urgent",
- "TRUE if every message should be considered urgent",
- FALSE,
- G_PARAM_READWRITE));
-
- g_object_class_install_property (object_class,
- PROP_TP_CHAT,
- g_param_spec_object ("tp-chat",
- "Chatroom channel wrapper",
- "The wrapper for the chatroom channel if there is one",
- EMPATHY_TYPE_TP_CHAT,
- G_PARAM_READWRITE));
-
- g_object_class_install_property (object_class,
- PROP_SUBJECT,
- g_param_spec_string ("subject",
- "Subject",
- "The chatroom's subject",
- "",
- G_PARAM_READWRITE |
- G_PARAM_CONSTRUCT |
- G_PARAM_STATIC_NAME |
- G_PARAM_STATIC_NICK |
- G_PARAM_STATIC_BLURB));
-
- g_object_class_install_property (object_class,
- PROP_MEMBERS_COUNT,
- g_param_spec_uint ("members-count",
- "Members count",
- "The chatroom's members count",
- 0,
- G_MAXUINT,
- 0,
- G_PARAM_READWRITE |
- G_PARAM_CONSTRUCT |
- G_PARAM_STATIC_NAME |
- G_PARAM_STATIC_NICK |
- G_PARAM_STATIC_BLURB));
-
- g_object_class_install_property (object_class,
- PROP_INVITE_ONLY,
- g_param_spec_boolean ("invite-only",
- "Invite Only",
- "The chatroom is invite only",
- FALSE,
- G_PARAM_READWRITE |
- G_PARAM_CONSTRUCT |
- G_PARAM_STATIC_NAME |
- G_PARAM_STATIC_NICK |
- G_PARAM_STATIC_BLURB));
-
- g_object_class_install_property (object_class,
- PROP_NEED_PASSWORD,
- g_param_spec_boolean ("need-password",
- "Password Needed",
- "The chatroom is password protected",
- FALSE,
- G_PARAM_READWRITE |
- G_PARAM_CONSTRUCT |
- G_PARAM_STATIC_NAME |
- G_PARAM_STATIC_NICK |
- G_PARAM_STATIC_BLURB));
-
- 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);
-
- if (priv->tp_chat != NULL)
- g_object_unref (priv->tp_chat);
-
- g_object_unref (priv->account);
- g_free (priv->room);
- g_free (priv->name);
- g_free (priv->subject);
-
- (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;
- case PROP_FAVORITE:
- g_value_set_boolean (value, priv->favorite);
- break;
- case PROP_ALWAYS_URGENT:
- g_value_set_boolean (value, priv->always_urgent);
- break;
- case PROP_TP_CHAT:
- g_value_set_object (value, priv->tp_chat);
- break;
- case PROP_SUBJECT:
- g_value_set_string (value, priv->subject);
- break;
- case PROP_MEMBERS_COUNT:
- g_value_set_uint (value, priv->members_count);
- break;
- case PROP_INVITE_ONLY:
- g_value_set_boolean (value, priv->invite_only);
- break;
- case PROP_NEED_PASSWORD:
- g_value_set_boolean (value, priv->need_password);
- 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)
-{
- 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;
- case PROP_FAVORITE:
- empathy_chatroom_set_favorite (EMPATHY_CHATROOM (object),
- g_value_get_boolean (value));
- break;
- case PROP_ALWAYS_URGENT:
- empathy_chatroom_set_always_urgent (EMPATHY_CHATROOM (object),
- g_value_get_boolean (value));
- break;
- case PROP_TP_CHAT:
- empathy_chatroom_set_tp_chat (EMPATHY_CHATROOM (object),
- g_value_get_object (value));
- break;
- case PROP_SUBJECT:
- empathy_chatroom_set_subject (EMPATHY_CHATROOM (object),
- g_value_get_string (value));
- break;
- case PROP_MEMBERS_COUNT:
- empathy_chatroom_set_members_count (EMPATHY_CHATROOM (object),
- g_value_get_uint (value));
- break;
- case PROP_NEED_PASSWORD:
- empathy_chatroom_set_need_password (EMPATHY_CHATROOM (object),
- g_value_get_boolean (value));
- break;
- case PROP_INVITE_ONLY:
- empathy_chatroom_set_invite_only (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 (TpAccount *account)
-{
- return g_object_new (EMPATHY_TYPE_CHATROOM,
- "account", account,
- NULL);
-}
-
-EmpathyChatroom *
-empathy_chatroom_new_full (TpAccount *account,
- const gchar *room,
- const gchar *name,
- gboolean auto_connect)
-{
- 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);
-}
-
-TpAccount *
-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,
- TpAccount *account)
-{
- EmpathyChatroomPriv *priv;
-
- g_return_if_fail (EMPATHY_IS_CHATROOM (chatroom));
-
- 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 (TPAW_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;
-
- if (priv->auto_connect) {
- /* auto_connect implies favorite */
- priv->favorite = TRUE;
- g_object_notify (G_OBJECT (chatroom), "favorite");
- }
-
- g_object_notify (G_OBJECT (chatroom), "auto-connect");
-}
-
-gboolean
-empathy_chatroom_equal (gconstpointer v1,
- gconstpointer v2)
-{
- TpAccount *account_a;
- TpAccount *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 account_a == account_b && !tp_strdiff (room_a, room_b);
-}
-
-EmpathyTpChat *
-empathy_chatroom_get_tp_chat (EmpathyChatroom *chatroom)
-{
- EmpathyChatroomPriv *priv;
-
- g_return_val_if_fail (EMPATHY_IS_CHATROOM (chatroom), NULL);
-
- priv = GET_PRIV (chatroom);
-
- return priv->tp_chat;
-}
-
-const gchar *
-empathy_chatroom_get_subject (EmpathyChatroom *chatroom)
-{
- EmpathyChatroomPriv *priv;
-
- g_return_val_if_fail (EMPATHY_IS_CHATROOM (chatroom), NULL);
-
- priv = GET_PRIV (chatroom);
-
- return priv->subject;
-}
-
-void
-empathy_chatroom_set_subject (EmpathyChatroom *chatroom,
- const gchar *subject)
-{
- EmpathyChatroomPriv *priv;
-
- g_return_if_fail (EMPATHY_IS_CHATROOM (chatroom));
-
- priv = GET_PRIV (chatroom);
-
- g_free (priv->subject);
- priv->subject = NULL;
-
- if (subject)
- priv->subject = g_strdup (subject);
-
- g_object_notify (G_OBJECT (chatroom), "subject");
-}
-
-guint
-empathy_chatroom_get_members_count (EmpathyChatroom *chatroom)
-{
- EmpathyChatroomPriv *priv;
-
- g_return_val_if_fail (EMPATHY_IS_CHATROOM (chatroom), 0);
-
- priv = GET_PRIV (chatroom);
-
- return priv->members_count;
-}
-
-void
-empathy_chatroom_set_members_count (EmpathyChatroom *chatroom,
- guint count)
-{
- EmpathyChatroomPriv *priv;
-
- g_return_if_fail (EMPATHY_IS_CHATROOM (chatroom));
-
- priv = GET_PRIV (chatroom);
-
- priv->members_count = count;
-
- g_object_notify (G_OBJECT (chatroom), "members-count");
-}
-
-gboolean
-empathy_chatroom_get_need_password (EmpathyChatroom *chatroom)
-{
- EmpathyChatroomPriv *priv;
-
- g_return_val_if_fail (EMPATHY_IS_CHATROOM (chatroom), FALSE);
-
- priv = GET_PRIV (chatroom);
-
- return priv->need_password;
-}
-
-void
-empathy_chatroom_set_need_password (EmpathyChatroom *chatroom,
- gboolean need_password)
-{
- EmpathyChatroomPriv *priv;
-
- g_return_if_fail (EMPATHY_IS_CHATROOM (chatroom));
-
- priv = GET_PRIV (chatroom);
-
- priv->need_password = need_password;
-
- g_object_notify (G_OBJECT (chatroom), "need-password");
-}
-
-gboolean
-empathy_chatroom_get_invite_only (EmpathyChatroom *chatroom)
-{
- EmpathyChatroomPriv *priv;
-
- g_return_val_if_fail (EMPATHY_IS_CHATROOM (chatroom), FALSE);
-
- priv = GET_PRIV (chatroom);
-
- return priv->invite_only;
-}
-
-void
-empathy_chatroom_set_invite_only (EmpathyChatroom *chatroom,
- gboolean invite_only)
-{
- EmpathyChatroomPriv *priv;
-
- g_return_if_fail (EMPATHY_IS_CHATROOM (chatroom));
-
- priv = GET_PRIV (chatroom);
-
- priv->invite_only = invite_only;
-
- g_object_notify (G_OBJECT (chatroom), "invite-only");
-}
-
-void
-empathy_chatroom_set_tp_chat (EmpathyChatroom *chatroom,
- EmpathyTpChat *tp_chat)
-{
- EmpathyChatroomPriv *priv;
-
- g_return_if_fail (EMPATHY_IS_CHATROOM (chatroom));
- g_return_if_fail (tp_chat == NULL || EMPATHY_IS_TP_CHAT (tp_chat));
-
- priv = GET_PRIV (chatroom);
-
- if (priv->tp_chat == tp_chat) {
- return;
- }
-
- if (priv->tp_chat != NULL) {
- g_object_unref (priv->tp_chat);
- }
-
- priv->tp_chat = tp_chat ? g_object_ref (tp_chat) : NULL;
- g_object_notify (G_OBJECT (chatroom), "tp-chat");
-}
-
-gboolean
-empathy_chatroom_is_favorite (EmpathyChatroom *chatroom)
-{
- EmpathyChatroomPriv *priv;
-
- g_return_val_if_fail (EMPATHY_IS_CHATROOM (chatroom), FALSE);
-
- priv = GET_PRIV (chatroom);
-
- return priv->favorite;
-}
-
-void
-empathy_chatroom_set_favorite (EmpathyChatroom *chatroom,
- gboolean favorite)
-{
- EmpathyChatroomPriv *priv;
-
- g_return_if_fail (EMPATHY_IS_CHATROOM (chatroom));
-
- priv = GET_PRIV (chatroom);
-
- if (priv->favorite == favorite) {
- return;
- }
-
- priv->favorite = favorite;
- if (!priv->favorite) {
- empathy_chatroom_set_auto_connect (chatroom, FALSE);
- }
- g_object_notify (G_OBJECT (chatroom), "favorite");
-}
-
-gboolean
-empathy_chatroom_is_always_urgent (EmpathyChatroom *chatroom)
-{
- EmpathyChatroomPriv *priv;
-
- g_return_val_if_fail (EMPATHY_IS_CHATROOM (chatroom), FALSE);
-
- priv = GET_PRIV (chatroom);
-
- return priv->always_urgent;
-}
-
-void
-empathy_chatroom_set_always_urgent (EmpathyChatroom *chatroom,
- gboolean always_urgent)
-{
- EmpathyChatroomPriv *priv;
-
- g_return_if_fail (EMPATHY_IS_CHATROOM (chatroom));
-
- priv = GET_PRIV (chatroom);
-
- if (priv->always_urgent == always_urgent)
- return;
-
- priv->always_urgent = always_urgent;
- g_object_notify (G_OBJECT (chatroom), "always_urgent");
-}
-
diff --git a/libempathy/empathy-chatroom.h b/libempathy/empathy-chatroom.h
deleted file mode 100644
index 98ed04b9..00000000
--- a/libempathy/empathy-chatroom.h
+++ /dev/null
@@ -1,97 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * Copyright (C) 2007-2008 Collabora Ltd.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- *
- * Authors: Xavier Claessens <xclaesse@gmail.com>
- */
-
-#ifndef __EMPATHY_CHATROOM_H__
-#define __EMPATHY_CHATROOM_H__
-
-#include <glib-object.h>
-#include <telepathy-glib/telepathy-glib.h>
-
-#include "empathy-tp-chat.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 (TpAccount *account);
-EmpathyChatroom *empathy_chatroom_new_full (TpAccount *account,
- const gchar *room,
- const gchar *name,
- gboolean auto_connect);
-TpAccount * empathy_chatroom_get_account (EmpathyChatroom *chatroom);
-void empathy_chatroom_set_account (EmpathyChatroom *chatroom,
- TpAccount *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);
-const gchar * empathy_chatroom_get_subject (EmpathyChatroom *chatroom);
-void empathy_chatroom_set_subject (EmpathyChatroom *chatroom,
- const gchar *subject);
-guint empathy_chatroom_get_members_count (EmpathyChatroom *chatroom);
-void empathy_chatroom_set_members_count (EmpathyChatroom *chatroom,
- guint count);
-gboolean empathy_chatroom_get_need_password (EmpathyChatroom *chatroom);
-void empathy_chatroom_set_need_password (EmpathyChatroom *chatroom,
- gboolean need_password);
-gboolean empathy_chatroom_get_invite_only (EmpathyChatroom *chatroom);
-void empathy_chatroom_set_invite_only (EmpathyChatroom *chatroom,
- gboolean invite_only);
-gboolean empathy_chatroom_equal (gconstpointer v1,
- gconstpointer v2);
-EmpathyTpChat * empathy_chatroom_get_tp_chat (EmpathyChatroom *chatroom);
-void empathy_chatroom_set_tp_chat (EmpathyChatroom *chatroom,
- EmpathyTpChat *tp_chat);
-gboolean empathy_chatroom_is_favorite (EmpathyChatroom *chatroom);
-void empathy_chatroom_set_favorite (EmpathyChatroom *chatroom,
- gboolean favorite);
-gboolean empathy_chatroom_is_always_urgent (EmpathyChatroom *chatroom);
-void empathy_chatroom_set_always_urgent (EmpathyChatroom *chatroom,
- gboolean always_urgent);
-
-G_END_DECLS
-
-#endif /* __EMPATHY_CHATROOM_H__ */
diff --git a/libempathy/empathy-client-factory.c b/libempathy/empathy-client-factory.c
deleted file mode 100644
index e82b8620..00000000
--- a/libempathy/empathy-client-factory.c
+++ /dev/null
@@ -1,281 +0,0 @@
-/*
- * Copyright (C) 2010 Collabora Ltd.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301 USA
- *
- * Authors: Guillaume Desmottes <guillaume.desmottes@collabora.co.uk>
- */
-
-#include "config.h"
-#include "empathy-client-factory.h"
-
-#include <tp-account-widgets/tpaw-utils.h>
-
-#include "empathy-tp-chat.h"
-#include "empathy-utils.h"
-
-G_DEFINE_TYPE (EmpathyClientFactory, empathy_client_factory,
- TP_TYPE_AUTOMATIC_CLIENT_FACTORY)
-
-#define chainup ((TpSimpleClientFactoryClass *) \
- empathy_client_factory_parent_class)
-
-static TpChannel *
-empathy_client_factory_create_channel (TpSimpleClientFactory *factory,
- TpConnection *conn,
- const gchar *path,
- const GHashTable *properties,
- GError **error)
-{
- const gchar *chan_type;
-
- chan_type = tp_asv_get_string (properties, TP_PROP_CHANNEL_CHANNEL_TYPE);
-
- if (!tp_strdiff (chan_type, TP_IFACE_CHANNEL_TYPE_TEXT))
- {
- return TP_CHANNEL (empathy_tp_chat_new (
- TP_SIMPLE_CLIENT_FACTORY (factory), conn, path,
- properties));
- }
-
- return chainup->create_channel (factory, conn, path, properties, error);
-}
-
-static GArray *
-empathy_client_factory_dup_channel_features (TpSimpleClientFactory *factory,
- TpChannel *channel)
-{
- GArray *features;
- GQuark feature;
-
- features = chainup->dup_channel_features (factory, channel);
-
- feature = TP_CHANNEL_FEATURE_CONTACTS;
- g_array_append_val (features, feature);
-
- if (EMPATHY_IS_TP_CHAT (channel))
- {
- feature = TP_TEXT_CHANNEL_FEATURE_CHAT_STATES;
- g_array_append_val (features, feature);
-
- feature = EMPATHY_TP_CHAT_FEATURE_READY;
- g_array_append_val (features, feature);
- }
-
- return features;
-}
-
-static GArray *
-empathy_client_factory_dup_account_features (TpSimpleClientFactory *factory,
- TpAccount *account)
-{
- GArray *features;
- GQuark feature;
-
- features = chainup->dup_account_features (factory, account);
-
- feature = TP_ACCOUNT_FEATURE_CONNECTION;
- g_array_append_val (features, feature);
-
- feature = TP_ACCOUNT_FEATURE_ADDRESSING;
- g_array_append_val (features, feature);
-
- feature = TP_ACCOUNT_FEATURE_STORAGE;
- g_array_append_val (features, feature);
-
- return features;
-}
-
-static GArray *
-empathy_client_factory_dup_connection_features (TpSimpleClientFactory *factory,
- TpConnection *connection)
-{
- GArray *features;
- GQuark feature;
-
- features = chainup->dup_connection_features (factory, connection);
-
- feature = TP_CONNECTION_FEATURE_CAPABILITIES;
- g_array_append_val (features, feature);
-
- feature = TP_CONNECTION_FEATURE_AVATAR_REQUIREMENTS;
- g_array_append_val (features, feature);
-
- feature = TP_CONNECTION_FEATURE_CONTACT_INFO;
- g_array_append_val (features, feature);
-
- feature = TP_CONNECTION_FEATURE_BALANCE;
- g_array_append_val (features, feature);
-
- feature = TP_CONNECTION_FEATURE_CONTACT_BLOCKING;
- g_array_append_val (features, feature);
-
- /* Most empathy-* may allow user to add a contact to his contact list. We
- * need this property to check if the connection allows it. It's cheap to
- * prepare anyway as it will just call GetAll() on the ContactList iface. */
- feature = TP_CONNECTION_FEATURE_CONTACT_LIST_PROPERTIES;
- g_array_append_val (features, feature);
-
- return features;
-}
-
-static GArray *
-empathy_client_factory_dup_contact_features (TpSimpleClientFactory *factory,
- TpConnection *connection)
-{
- GArray *features;
- TpContactFeature extra_features[] = {
- TP_CONTACT_FEATURE_ALIAS,
- TP_CONTACT_FEATURE_PRESENCE,
- TP_CONTACT_FEATURE_AVATAR_TOKEN,
- TP_CONTACT_FEATURE_AVATAR_DATA,
- TP_CONTACT_FEATURE_CAPABILITIES,
- /* Needed by empathy_individual_add_menu_item_new to check if a contact
- * is already in the contact list. This feature is pretty cheap to
- * prepare as it doesn't prepare the full roster. */
- TP_CONTACT_FEATURE_SUBSCRIPTION_STATES,
- TP_CONTACT_FEATURE_CONTACT_GROUPS,
- TP_CONTACT_FEATURE_CLIENT_TYPES,
- };
-
- features = chainup->dup_contact_features (factory, connection);
-
- g_array_append_vals (features, extra_features, G_N_ELEMENTS (extra_features));
-
- return features;
-}
-
-static void
-empathy_client_factory_class_init (EmpathyClientFactoryClass *cls)
-{
- TpSimpleClientFactoryClass *simple_class = (TpSimpleClientFactoryClass *) cls;
-
- simple_class->create_channel = empathy_client_factory_create_channel;
- simple_class->dup_channel_features =
- empathy_client_factory_dup_channel_features;
-
- simple_class->dup_account_features =
- empathy_client_factory_dup_account_features;
-
- simple_class->dup_connection_features =
- empathy_client_factory_dup_connection_features;
-
- simple_class->dup_contact_features =
- empathy_client_factory_dup_contact_features;
-}
-
-static void
-empathy_client_factory_init (EmpathyClientFactory *self)
-{
-}
-
-static EmpathyClientFactory *
-empathy_client_factory_new (TpDBusDaemon *dbus)
-{
- return g_object_new (EMPATHY_TYPE_CLIENT_FACTORY,
- "dbus-daemon", dbus,
- NULL);
-}
-
-EmpathyClientFactory *
-empathy_client_factory_dup (void)
-{
- static EmpathyClientFactory *singleton = NULL;
- TpDBusDaemon *dbus;
- GError *error = NULL;
-
- if (singleton != NULL)
- return g_object_ref (singleton);
-
- dbus = tp_dbus_daemon_dup (&error);
- if (dbus == NULL)
- {
- g_warning ("Failed to get TpDBusDaemon: %s", error->message);
- g_error_free (error);
- return NULL;
- }
-
- singleton = empathy_client_factory_new (dbus);
- g_object_unref (dbus);
-
- g_object_add_weak_pointer (G_OBJECT (singleton), (gpointer) &singleton);
-
- return singleton;
-}
-
-static void
-dup_contact_cb (GObject *source,
- GAsyncResult *result,
- gpointer user_data)
-{
- GSimpleAsyncResult *my_result = user_data;
- GError *error = NULL;
- TpContact *contact;
-
- contact = tp_connection_dup_contact_by_id_finish (TP_CONNECTION (source),
- result, &error);
-
- if (contact == NULL)
- {
- g_simple_async_result_take_error (my_result, error);
- }
- else
- {
- g_simple_async_result_set_op_res_gpointer (my_result,
- empathy_contact_dup_from_tp_contact (contact), g_object_unref);
-
- g_object_unref (contact);
- }
-
- g_simple_async_result_complete (my_result);
- g_object_unref (my_result);
-}
-
-void
-empathy_client_factory_dup_contact_by_id_async (
- EmpathyClientFactory *self,
- TpConnection *connection,
- const gchar *id,
- GAsyncReadyCallback callback,
- gpointer user_data)
-{
- GSimpleAsyncResult *result;
- GArray *features;
-
- g_return_if_fail (EMPATHY_IS_CLIENT_FACTORY (self));
- g_return_if_fail (id != NULL);
-
- result = g_simple_async_result_new ((GObject *) self, callback, user_data,
- empathy_client_factory_dup_contact_by_id_async);
-
- features = empathy_client_factory_dup_contact_features (
- TP_SIMPLE_CLIENT_FACTORY (self), connection);
-
- tp_connection_dup_contact_by_id_async (connection, id, features->len,
- (TpContactFeature * ) features->data, dup_contact_cb, result);
-
- g_array_unref (features);
-}
-
-EmpathyContact *
-empathy_client_factory_dup_contact_by_id_finish (
- EmpathyClientFactory *self,
- GAsyncResult *result,
- GError **error)
-{
- tpaw_implement_finish_return_copy_pointer (self,
- empathy_client_factory_dup_contact_by_id_async, g_object_ref);
-}
diff --git a/libempathy/empathy-client-factory.h b/libempathy/empathy-client-factory.h
deleted file mode 100644
index 2f426116..00000000
--- a/libempathy/empathy-client-factory.h
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
- * Copyright (C) 2010 Collabora Ltd.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301 USA
- *
- * Authors: Guillaume Desmottes <guillaume.desmottes@collabora.co.uk>
- */
-
-#ifndef __EMPATHY_CLIENT_FACTORY_H__
-#define __EMPATHY_CLIENT_FACTORY_H__
-
-#include <telepathy-glib/telepathy-glib.h>
-
-#include "empathy-contact.h"
-
-G_BEGIN_DECLS
-
-#define EMPATHY_TYPE_CLIENT_FACTORY (empathy_client_factory_get_type ())
-#define EMPATHY_CLIENT_FACTORY(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), EMPATHY_TYPE_CLIENT_FACTORY, EmpathyClientFactory))
-#define EMPATHY_CLIENT_FACTORY_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), EMPATHY_TYPE_CLIENT_FACTORY, EmpathyClientFactoryClass))
-#define EMPATHY_IS_CLIENT_FACTORY(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), EMPATHY_TYPE_CLIENT_FACTORY))
-#define EMPATHY_IS_CLIENT_FACTORY_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), EMPATHY_TYPE_CLIENT_FACTORY))
-#define EMPATHY_CLIENT_FACTORY_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), EMPATHY_TYPE_CLIENT_FACTORY, EmpathyClientFactoryClass))
-
-typedef struct _EmpathyClientFactory EmpathyClientFactory;
-typedef struct _EmpathyClientFactoryClass EmpathyClientFactoryClass;
-typedef struct _EmpathyClientFactoryPrivate EmpathyClientFactoryPrivate;
-
-struct _EmpathyClientFactory
-{
- TpAutomaticClientFactory parent;
- EmpathyClientFactoryPrivate *priv;
-};
-
-struct _EmpathyClientFactoryClass
-{
- TpAutomaticClientFactoryClass parent_class;
-};
-
-GType empathy_client_factory_get_type (void) G_GNUC_CONST;
-
-EmpathyClientFactory * empathy_client_factory_dup (void);
-
-void empathy_client_factory_dup_contact_by_id_async (
- EmpathyClientFactory *self,
- TpConnection *connection,
- const gchar *id,
- GAsyncReadyCallback callback,
- gpointer user_data);
-
-EmpathyContact * empathy_client_factory_dup_contact_by_id_finish (
- EmpathyClientFactory *self,
- GAsyncResult *result,
- GError **error) G_GNUC_WARN_UNUSED_RESULT;
-
-G_END_DECLS
-#endif /* __EMPATHY_CLIENT_FACTORY_H__ */
diff --git a/libempathy/empathy-connection-aggregator.c b/libempathy/empathy-connection-aggregator.c
deleted file mode 100644
index 763715f9..00000000
--- a/libempathy/empathy-connection-aggregator.c
+++ /dev/null
@@ -1,325 +0,0 @@
-/*
- * empathy-connection-aggregator.c - Source for EmpathyConnectionAggregator
- * Copyright (C) 2010 Collabora Ltd.
- * @author Cosimo Cecchi <cosimo.cecchi@collabora.co.uk>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-#include "config.h"
-#include "empathy-connection-aggregator.h"
-
-#define DEBUG_FLAG EMPATHY_DEBUG_OTHER
-#include "empathy-debug.h"
-
-G_DEFINE_TYPE (EmpathyConnectionAggregator, empathy_connection_aggregator,
- G_TYPE_OBJECT);
-
-enum {
- EVENT_CONTACT_LIST_CHANGED,
- LAST_SIGNAL
-};
-
-static guint signals[LAST_SIGNAL];
-
-struct _EmpathyConnectionAggregatorPriv {
- TpAccountManager *mgr;
-
- /* List of owned TpConnection */
- GList *conns;
-};
-
-static void
-empathy_connection_aggregator_dispose (GObject *object)
-{
- EmpathyConnectionAggregator *self = (EmpathyConnectionAggregator *) object;
-
- g_clear_object (&self->priv->mgr);
-
- g_list_free_full (self->priv->conns, g_object_unref);
- self->priv->conns = NULL;
-
- G_OBJECT_CLASS (empathy_connection_aggregator_parent_class)->dispose (object);
-}
-
-static void
-empathy_connection_aggregator_class_init (
- EmpathyConnectionAggregatorClass *klass)
-{
- GObjectClass *oclass = G_OBJECT_CLASS (klass);
-
- oclass->dispose = empathy_connection_aggregator_dispose;
-
- signals[EVENT_CONTACT_LIST_CHANGED] =
- g_signal_new ("contact-list-changed",
- G_TYPE_FROM_CLASS (klass),
- G_SIGNAL_RUN_LAST,
- 0,
- NULL, NULL,
- g_cclosure_marshal_generic,
- G_TYPE_NONE,
- 2, G_TYPE_PTR_ARRAY, G_TYPE_PTR_ARRAY);
-
- g_type_class_add_private (klass, sizeof (EmpathyConnectionAggregatorPriv));
-}
-
-static void
-contact_list_changed_cb (TpConnection *conn,
- GPtrArray *added,
- GPtrArray *removed,
- EmpathyConnectionAggregator *self)
-{
- g_signal_emit (self, signals[EVENT_CONTACT_LIST_CHANGED], 0, added, removed);
-}
-
-static void
-conn_invalidated_cb (TpConnection *conn,
- guint domain,
- gint code,
- gchar *message,
- EmpathyConnectionAggregator *self)
-{
- self->priv->conns = g_list_remove (self->priv->conns, conn);
-
- g_object_unref (conn);
-}
-
-static void
-check_connection (EmpathyConnectionAggregator *self,
- TpConnection *conn)
-{
- GPtrArray *contacts;
-
- if (g_list_find (self->priv->conns, conn) != NULL)
- return;
-
- self->priv->conns = g_list_prepend (self->priv->conns,
- g_object_ref (conn));
-
- tp_g_signal_connect_object (conn, "contact-list-changed",
- G_CALLBACK (contact_list_changed_cb), self, 0);
-
- contacts = tp_connection_dup_contact_list (conn);
- if (contacts != NULL)
- {
- GPtrArray *empty;
-
- empty = g_ptr_array_new ();
-
- contact_list_changed_cb (conn, contacts, empty, self);
- g_ptr_array_unref (empty);
- }
- g_ptr_array_unref (contacts);
-
- tp_g_signal_connect_object (conn, "invalidated",
- G_CALLBACK (conn_invalidated_cb), self, 0);
-}
-
-static void
-check_account (EmpathyConnectionAggregator *self,
- TpAccount *account)
-{
- TpConnection *conn;
-
- conn = tp_account_get_connection (account);
- if (conn != NULL)
- check_connection (self, conn);
-}
-
-static void
-account_conn_changed_cb (TpAccount *account,
- GParamSpec *spec,
- EmpathyConnectionAggregator *self)
-{
- check_account (self, account);
-}
-
-static void
-add_account (EmpathyConnectionAggregator *self,
- TpAccount *account)
-{
- check_account (self, account);
-
- tp_g_signal_connect_object (account, "notify::connection",
- G_CALLBACK (account_conn_changed_cb), self, 0);
-}
-
-static void
-account_validity_changed_cb (TpAccountManager *manager,
- TpAccount *account,
- gboolean valid,
- EmpathyConnectionAggregator *self)
-{
- if (valid)
- add_account (self, account);
-}
-
-static void
-am_prepare_cb (GObject *source,
- GAsyncResult *result,
- gpointer user_data)
-{
- EmpathyConnectionAggregator *self = EMPATHY_CONNECTION_AGGREGATOR (user_data);
- GError *error = NULL;
- GList *accounts, *l;
-
- if (!tp_proxy_prepare_finish (source, result, &error))
- {
- DEBUG ("Failed to prepare account manager: %s", error->message);
- g_error_free (error);
- goto out;
- }
-
- accounts = tp_account_manager_dup_valid_accounts (self->priv->mgr);
- for (l = accounts; l != NULL; l = g_list_next (l))
- {
- TpAccount *account = l->data;
-
- add_account (self, account);
- }
-
- tp_g_signal_connect_object (self->priv->mgr, "account-validity-changed",
- G_CALLBACK (account_validity_changed_cb), self, 0);
-
- g_list_free_full (accounts, g_object_unref);
-
-out:
- g_object_unref (self);
-}
-
-static void
-empathy_connection_aggregator_init (EmpathyConnectionAggregator *self)
-{
- self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self,
- EMPATHY_TYPE_CONNECTION_AGGREGATOR, EmpathyConnectionAggregatorPriv);
-
- self->priv->mgr = tp_account_manager_dup ();
-
- tp_proxy_prepare_async (self->priv->mgr, NULL, am_prepare_cb,
- g_object_ref (self));
-}
-
-EmpathyConnectionAggregator *
-empathy_connection_aggregator_dup_singleton (void)
-{
- static EmpathyConnectionAggregator *aggregator = NULL;
-
- if (G_LIKELY (aggregator != NULL))
- return g_object_ref (aggregator);
-
- aggregator = g_object_new (EMPATHY_TYPE_CONNECTION_AGGREGATOR, NULL);
-
- g_object_add_weak_pointer (G_OBJECT (aggregator), (gpointer *) &aggregator);
- return aggregator;
-}
-
-/* (transfer container) */
-GList *
-empathy_connection_aggregator_get_all_groups (EmpathyConnectionAggregator *self)
-{
- GList *keys, *l;
- GHashTable *set;
-
- set = g_hash_table_new (g_str_hash, g_str_equal);
-
- for (l = self->priv->conns; l != NULL; l = g_list_next (l))
- {
- TpConnection *conn = l->data;
- const gchar * const *groups;
- guint i;
-
- groups = tp_connection_get_contact_groups (conn);
- if (groups == NULL)
- continue;
-
- for (i = 0; groups[i] != NULL; i++)
- g_hash_table_insert (set, (gchar *) groups[i], GUINT_TO_POINTER (TRUE));
- }
-
- keys = g_hash_table_get_keys (set);
- g_hash_table_unref (set);
-
- return keys;
-}
-
-GPtrArray *
-empathy_connection_aggregator_dup_all_contacts (
- EmpathyConnectionAggregator *self)
-{
- GPtrArray *result;
- GList *l;
-
- result = g_ptr_array_new_with_free_func (g_object_unref);
-
- for (l = self->priv->conns; l != NULL; l = g_list_next (l))
- {
- TpConnection *conn = l->data;
- GPtrArray *contacts;
-
- contacts = tp_connection_dup_contact_list (conn);
- if (contacts == NULL)
- continue;
-
- tp_g_ptr_array_extend (result, contacts);
-
- /* tp_g_ptr_array_extend() doesn't give us an extra ref */
- g_ptr_array_foreach (contacts, (GFunc) g_object_ref, NULL);
-
- g_ptr_array_unref (contacts);
- }
-
- return result;
-}
-
-static void
-rename_group_cb (GObject *source,
- GAsyncResult *result,
- gpointer user_data)
-{
- GError *error = NULL;
-
- if (!tp_connection_rename_group_finish (TP_CONNECTION (source), result,
- &error))
- {
- DEBUG ("Failed to rename group on %s: %s",
- tp_proxy_get_object_path (source), error->message);
- g_error_free (error);
- }
-}
-
-void
-empathy_connection_aggregator_rename_group (EmpathyConnectionAggregator *self,
- const gchar *old_name,
- const gchar *new_name)
-{
- GList *l;
-
- for (l = self->priv->conns; l != NULL; l = g_list_next (l))
- {
- TpConnection *conn = l->data;
- const gchar * const *groups;
-
- groups = tp_connection_get_contact_groups (conn);
-
- if (!tp_strv_contains (groups, old_name))
- continue;
-
- DEBUG ("Rename group '%s' to '%s' on %s", old_name, new_name,
- tp_proxy_get_object_path (conn));
-
- tp_connection_rename_group_async (conn, old_name, new_name,
- rename_group_cb, NULL);
- }
-}
diff --git a/libempathy/empathy-connection-aggregator.h b/libempathy/empathy-connection-aggregator.h
deleted file mode 100644
index 267b2093..00000000
--- a/libempathy/empathy-connection-aggregator.h
+++ /dev/null
@@ -1,76 +0,0 @@
-/*
- * empathy-connection-aggregator.h - Header for EmpathyConnectionAggregator
- * Copyright (C) 2010 Collabora Ltd.
- * @author Cosimo Cecchi <cosimo.cecchi@collabora.co.uk>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-#ifndef __EMPATHY_CONNECTION_AGGREGATOR_H__
-#define __EMPATHY_CONNECTION_AGGREGATOR_H__
-
-#include <glib-object.h>
-#include <telepathy-glib/telepathy-glib.h>
-
-G_BEGIN_DECLS
-
-typedef struct _EmpathyConnectionAggregator EmpathyConnectionAggregator;
-typedef struct _EmpathyConnectionAggregatorClass EmpathyConnectionAggregatorClass;
-typedef struct _EmpathyConnectionAggregatorPriv EmpathyConnectionAggregatorPriv;
-
-struct _EmpathyConnectionAggregatorClass {
- GObjectClass parent_class;
-};
-
-struct _EmpathyConnectionAggregator {
- GObject parent;
- EmpathyConnectionAggregatorPriv *priv;
-};
-
-GType empathy_connection_aggregator_get_type (void);
-
-/* TYPE MACROS */
-#define EMPATHY_TYPE_CONNECTION_AGGREGATOR \
- (empathy_connection_aggregator_get_type ())
-#define EMPATHY_CONNECTION_AGGREGATOR(obj) \
- (G_TYPE_CHECK_INSTANCE_CAST((obj), EMPATHY_TYPE_CONNECTION_AGGREGATOR, \
- EmpathyConnectionAggregator))
-#define EMPATHY_CONNECTION_AGGREGATOR_CLASS(klass) \
- (G_TYPE_CHECK_CLASS_CAST((klass), EMPATHY_TYPE_CONNECTION_AGGREGATOR, \
- EmpathyConnectionAggregatorClass))
-#define EMPATHY_IS_CONNECTION_AGGREGATOR(obj) \
- (G_TYPE_CHECK_INSTANCE_TYPE((obj), EMPATHY_TYPE_CONNECTION_AGGREGATOR))
-#define EMPATHY_IS_CONNECTION_AGGREGATOR_CLASS(klass) \
- (G_TYPE_CHECK_CLASS_TYPE((klass), EMPATHY_TYPE_CONNECTION_AGGREGATOR))
-#define EMPATHY_CONNECTION_AGGREGATOR_GET_CLASS(obj) \
- (G_TYPE_INSTANCE_GET_CLASS ((obj), EMPATHY_TYPE_CONNECTION_AGGREGATOR, \
- EmpathyConnectionAggregatorClass))
-
-EmpathyConnectionAggregator * empathy_connection_aggregator_dup_singleton (void);
-
-GList * empathy_connection_aggregator_get_all_groups (
- EmpathyConnectionAggregator *self);
-
-GPtrArray * empathy_connection_aggregator_dup_all_contacts (
- EmpathyConnectionAggregator *self);
-
-void empathy_connection_aggregator_rename_group (
- EmpathyConnectionAggregator *self,
- const gchar *old_name,
- const gchar *new_name);
-
-G_END_DECLS
-
-#endif /* #ifndef __EMPATHY_CONNECTION_AGGREGATOR_H__*/
diff --git a/libempathy/empathy-contact-groups.c b/libempathy/empathy-contact-groups.c
deleted file mode 100644
index 7818eb55..00000000
--- a/libempathy/empathy-contact-groups.c
+++ /dev/null
@@ -1,278 +0,0 @@
-/* -*- 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., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301 USA
- *
- * Authors: Martyn Russell <martyn@imendio.com>
- */
-
-#include "config.h"
-#include "empathy-contact-groups.h"
-
-#include <sys/stat.h>
-#include <tp-account-widgets/tpaw-utils.h>
-
-#include "empathy-utils.h"
-
-#define DEBUG_FLAG EMPATHY_DEBUG_CONTACT
-#include "empathy-debug.h"
-
-#define CONTACT_GROUPS_XML_FILENAME "contact-groups.xml"
-#define CONTACT_GROUPS_DTD_RESOURCENAME "/org/gnome/Empathy/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_user_config_dir (), 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 (!tpaw_xml_validate_from_resource (doc, CONTACT_GROUPS_DTD_RESOURCENAME)) {
- 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, (const xmlChar *) "name");
- expanded_str = (gchar *) xmlGetProp (node, (const xmlChar *) "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_user_config_dir (), 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 ((const xmlChar *) "1.0");
- root = xmlNewNode (NULL, (const xmlChar *) "contacts");
- xmlDocSetRootElement (doc, root);
-
- node = xmlNewChild (root, NULL, (const xmlChar *) "account", NULL);
- xmlNewProp (node, (const xmlChar *) "name", (const xmlChar *) "Default");
-
- for (l = groups; l; l = l->next) {
- ContactGroup *cg;
- xmlNodePtr subnode;
-
- cg = l->data;
-
- subnode = xmlNewChild (node, NULL, (const xmlChar *) "group", NULL);
- xmlNewProp (subnode, (const xmlChar *) "expanded", cg->expanded ?
- (const xmlChar *) "yes" : (const xmlChar *) "no");
- xmlNewProp (subnode, (const xmlChar *) "name", (const xmlChar *) cg->name);
- }
-
- /* Make sure the XML is indented properly */
- xmlIndentTreeOutput = 1;
-
- DEBUG ("Saving file:'%s'", file);
- xmlSaveFormatFileEnc (file, doc, "utf-8", 1);
- xmlFreeDoc (doc);
-
- 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) {
- 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/libempathy/empathy-contact-groups.dtd b/libempathy/empathy-contact-groups.dtd
deleted file mode 100644
index b4de2260..00000000
--- a/libempathy/empathy-contact-groups.dtd
+++ /dev/null
@@ -1,17 +0,0 @@
-<!--
- 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/libempathy/empathy-contact-groups.h b/libempathy/empathy-contact-groups.h
deleted file mode 100644
index 0be1c81b..00000000
--- a/libempathy/empathy-contact-groups.h
+++ /dev/null
@@ -1,38 +0,0 @@
-/* -*- 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., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301 USA
- *
- * Authors: Martyn Russell <martyn@imendio.com>
- */
-
-#ifndef __EMPATHY_CONTACT_GROUPS_H__
-#define __EMPATHY_CONTACT_GROUPS_H__
-
-#include <glib.h>
-
-G_BEGIN_DECLS
-
-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/libempathy/empathy-contact.c b/libempathy/empathy-contact.c
deleted file mode 100644
index 2f381a5b..00000000
--- a/libempathy/empathy-contact.c
+++ /dev/null
@@ -1,2057 +0,0 @@
-/* -*- Mode: C; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2; -*- */
-/*
- * Copyright (C) 2007-2009 Collabora Ltd.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- *
- * Authors: Xavier Claessens <xclaesse@gmail.com>
- */
-
-#include "config.h"
-#include "empathy-contact.h"
-
-#include <tp-account-widgets/tpaw-utils.h>
-
-#ifdef HAVE_GEOCODE
-#include <geocode-glib/geocode-glib.h>
-#endif
-
-#include "empathy-location.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 {
- TpContact *tp_contact;
- TpAccount *account;
- FolksPersona *persona;
- gchar *id;
- gchar *alias;
- gchar *logged_alias;
- EmpathyAvatar *avatar;
- TpConnectionPresenceType presence;
- guint handle;
- EmpathyCapabilities capabilities;
- gboolean is_user;
- /* Location is composed of string keys and GValues.
- * Example: a "city" key would have "Helsinki" as string GValue,
- * a "latitude" would have 65.0 as double GValue.
- *
- * This is a super set of the location stored in TpContact as we can try add
- * more fields by searching the address using geoclue.
- */
- GHashTable *location;
- GeeHashSet *groups;
- gchar **client_types;
-} 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);
-
-#ifdef HAVE_GEOCODE
-static void update_geocode (EmpathyContact *contact);
-#endif
-
-static void empathy_contact_set_location (EmpathyContact *contact,
- GHashTable *location);
-
-static void contact_set_client_types (EmpathyContact *contact,
- const gchar * const *types);
-
-static void set_capabilities_from_tp_caps (EmpathyContact *self,
- TpCapabilities *caps);
-
-static void contact_set_avatar (EmpathyContact *contact,
- EmpathyAvatar *avatar);
-static void contact_set_avatar_from_tp_contact (EmpathyContact *contact);
-static gboolean contact_load_avatar_cache (EmpathyContact *contact,
- const gchar *token);
-
-G_DEFINE_TYPE (EmpathyContact, empathy_contact, G_TYPE_OBJECT);
-
-enum
-{
- PROP_0,
- PROP_TP_CONTACT,
- PROP_ACCOUNT,
- PROP_PERSONA,
- PROP_ID,
- PROP_ALIAS,
- PROP_LOGGED_ALIAS,
- PROP_AVATAR,
- PROP_PRESENCE,
- PROP_PRESENCE_MESSAGE,
- PROP_HANDLE,
- PROP_CAPABILITIES,
- PROP_IS_USER,
- PROP_LOCATION,
- PROP_CLIENT_TYPES
-};
-
-enum {
- PRESENCE_CHANGED,
- LAST_SIGNAL
-};
-
-static guint signals[LAST_SIGNAL];
-
-/* TpContact* -> EmpathyContact*, both borrowed ref */
-static GHashTable *contacts_table = NULL;
-
-static void
-tp_contact_notify_cb (TpContact *tp_contact,
- GParamSpec *param,
- GObject *contact)
-{
- EmpathyContactPriv *priv = GET_PRIV (contact);
-
- /* Forward property notifications */
- if (!tp_strdiff (param->name, "alias"))
- g_object_notify (contact, "alias");
- else if (!tp_strdiff (param->name, "presence-type")) {
- TpConnectionPresenceType presence;
-
- presence = empathy_contact_get_presence (EMPATHY_CONTACT (contact));
- g_signal_emit (contact, signals[PRESENCE_CHANGED], 0, presence,
- priv->presence);
- priv->presence = presence;
- g_object_notify (contact, "presence");
- }
- else if (!tp_strdiff (param->name, "identifier"))
- g_object_notify (contact, "id");
- else if (!tp_strdiff (param->name, "handle"))
- g_object_notify (contact, "handle");
- else if (!tp_strdiff (param->name, "location"))
- {
- GHashTable *location;
-
- location = tp_contact_get_location (tp_contact);
- /* This will start a geoclue search to find the address if needed */
- empathy_contact_set_location (EMPATHY_CONTACT (contact), location);
- }
- else if (!tp_strdiff (param->name, "capabilities"))
- {
- set_capabilities_from_tp_caps (EMPATHY_CONTACT (contact),
- tp_contact_get_capabilities (tp_contact));
- }
- else if (!tp_strdiff (param->name, "avatar-file"))
- {
- contact_set_avatar_from_tp_contact (EMPATHY_CONTACT (contact));
- }
- else if (!tp_strdiff (param->name, "client-types"))
- {
- contact_set_client_types (EMPATHY_CONTACT (contact),
- tp_contact_get_client_types (tp_contact));
- }
-}
-
-static void
-folks_persona_notify_cb (FolksPersona *folks_persona,
- GParamSpec *param,
- GObject *contact)
-{
- if (!tp_strdiff (param->name, "presence-message"))
- g_object_notify (contact, "presence-message");
-}
-
-static void
-contact_dispose (GObject *object)
-{
- EmpathyContactPriv *priv = GET_PRIV (object);
-
- if (priv->tp_contact != NULL)
- {
- g_signal_handlers_disconnect_by_func (priv->tp_contact,
- tp_contact_notify_cb, object);
- }
- tp_clear_object (&priv->tp_contact);
-
- if (priv->account)
- g_object_unref (priv->account);
- priv->account = NULL;
-
- if (priv->persona)
- {
- g_signal_handlers_disconnect_by_func (priv->persona,
- folks_persona_notify_cb, object);
- g_object_unref (priv->persona);
- }
- priv->persona = NULL;
-
- if (priv->avatar != NULL)
- {
- empathy_avatar_unref (priv->avatar);
- priv->avatar = NULL;
- }
-
- if (priv->location != NULL)
- {
- g_hash_table_unref (priv->location);
- priv->location = NULL;
- }
-
- G_OBJECT_CLASS (empathy_contact_parent_class)->dispose (object);
-}
-
-static void
-contact_constructed (GObject *object)
-{
- EmpathyContact *contact = (EmpathyContact *) object;
- EmpathyContactPriv *priv = GET_PRIV (contact);
- GHashTable *location;
- TpContact *self_contact;
- const gchar * const *client_types;
-
- if (priv->tp_contact == NULL)
- return;
-
- priv->presence = empathy_contact_get_presence (contact);
-
- location = tp_contact_get_location (priv->tp_contact);
- if (location != NULL)
- empathy_contact_set_location (contact, location);
-
- client_types = tp_contact_get_client_types (priv->tp_contact);
- if (client_types != NULL)
- contact_set_client_types (contact, client_types);
-
- set_capabilities_from_tp_caps (contact,
- tp_contact_get_capabilities (priv->tp_contact));
-
- contact_set_avatar_from_tp_contact (contact);
-
- /* Set is-user property. Note that it could still be the handle is
- * different from the connection's self handle, in the case the handle
- * comes from a group interface. */
- self_contact = tp_connection_get_self_contact (
- tp_contact_get_connection (priv->tp_contact));
- empathy_contact_set_is_user (contact, self_contact == priv->tp_contact);
-
- g_signal_connect (priv->tp_contact, "notify",
- G_CALLBACK (tp_contact_notify_cb), contact);
-}
-
-static void
-empathy_contact_class_init (EmpathyContactClass *class)
-{
- GObjectClass *object_class;
-
- object_class = G_OBJECT_CLASS (class);
-
- object_class->finalize = contact_finalize;
- object_class->dispose = contact_dispose;
- object_class->get_property = contact_get_property;
- object_class->set_property = contact_set_property;
- object_class->constructed = contact_constructed;
-
- g_object_class_install_property (object_class,
- PROP_TP_CONTACT,
- g_param_spec_object ("tp-contact",
- "TpContact",
- "The TpContact associated with the contact",
- TP_TYPE_CONTACT,
- G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-
- g_object_class_install_property (object_class,
- PROP_ACCOUNT,
- g_param_spec_object ("account",
- "The account",
- "The account associated with the contact",
- TP_TYPE_ACCOUNT,
- G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-
- g_object_class_install_property (object_class,
- PROP_PERSONA,
- g_param_spec_object ("persona",
- "Persona",
- "The FolksPersona associated with the contact",
- FOLKS_TYPE_PERSONA,
- G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-
- g_object_class_install_property (object_class,
- PROP_ID,
- g_param_spec_string ("id",
- "Contact id",
- "String identifying contact",
- NULL,
- G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-
- g_object_class_install_property (object_class,
- PROP_ALIAS,
- g_param_spec_string ("alias",
- "Contact alias",
- "An alias for the contact",
- NULL,
- G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-
- g_object_class_install_property (object_class,
- PROP_LOGGED_ALIAS,
- g_param_spec_string ("logged-alias",
- "Logged alias",
- "The alias the user had when a message was logged, "
- "only set when using empathy_contact_from_tpl_contact()",
- NULL,
- G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-
- g_object_class_install_property (object_class,
- PROP_AVATAR,
- g_param_spec_boxed ("avatar",
- "Avatar image",
- "The avatar image",
- EMPATHY_TYPE_AVATAR,
- G_PARAM_READABLE | G_PARAM_STATIC_STRINGS));
-
- g_object_class_install_property (object_class,
- PROP_PRESENCE,
- g_param_spec_uint ("presence",
- "Contact presence",
- "Presence of contact",
- TP_CONNECTION_PRESENCE_TYPE_UNSET,
- NUM_TP_CONNECTION_PRESENCE_TYPES,
- TP_CONNECTION_PRESENCE_TYPE_UNSET,
- G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-
- 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_PARAM_STATIC_STRINGS));
-
- 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_PARAM_STATIC_STRINGS));
-
- 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_PARAM_STATIC_STRINGS));
-
- 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_PARAM_STATIC_STRINGS));
-
-
- g_object_class_install_property (object_class,
- PROP_LOCATION,
- g_param_spec_boxed ("location",
- "Contact location",
- "Physical location of the contact",
- G_TYPE_HASH_TABLE,
- G_PARAM_READABLE | G_PARAM_STATIC_STRINGS));
-
- g_object_class_install_property (object_class,
- PROP_CLIENT_TYPES,
- g_param_spec_boxed ("client-types",
- "Contact client types",
- "Client types of the contact",
- G_TYPE_STRV,
- G_PARAM_READABLE | G_PARAM_STATIC_STRINGS));
-
- signals[PRESENCE_CHANGED] =
- g_signal_new ("presence-changed",
- G_TYPE_FROM_CLASS (class),
- G_SIGNAL_RUN_LAST,
- 0,
- NULL, NULL,
- g_cclosure_marshal_generic,
- G_TYPE_NONE,
- 2, G_TYPE_UINT,
- G_TYPE_UINT);
-
- 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;
-
- priv->location = NULL;
- priv->client_types = NULL;
- priv->groups = NULL;
-}
-
-static void
-contact_finalize (GObject *object)
-{
- EmpathyContactPriv *priv;
-
- priv = GET_PRIV (object);
-
- DEBUG ("finalize: %p", object);
-
- g_clear_object (&priv->groups);
- g_free (priv->alias);
- g_free (priv->logged_alias);
- g_free (priv->id);
- g_strfreev (priv->client_types);
-
- G_OBJECT_CLASS (empathy_contact_parent_class)->finalize (object);
-}
-
-static 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");
-}
-
-static 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);
- if (tp_strdiff (id, priv->id))
- {
- g_free (priv->id);
- priv->id = g_strdup (id);
-
- g_object_notify (G_OBJECT (contact), "id");
- if (TPAW_STR_EMPTY (priv->alias))
- g_object_notify (G_OBJECT (contact), "alias");
- }
-
- g_object_unref (contact);
-}
-
-static void
-empathy_contact_set_presence (EmpathyContact *contact,
- TpConnectionPresenceType presence)
-{
- EmpathyContactPriv *priv;
- TpConnectionPresenceType old_presence;
-
- g_return_if_fail (EMPATHY_IS_CONTACT (contact));
-
- priv = GET_PRIV (contact);
-
- if (presence == priv->presence)
- return;
-
- old_presence = priv->presence;
- priv->presence = presence;
-
- g_signal_emit (contact, signals[PRESENCE_CHANGED], 0, presence, old_presence);
-
- g_object_notify (G_OBJECT (contact), "presence");
-}
-
-static 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 (priv->persona != NULL)
- {
- folks_presence_details_set_presence_message (
- FOLKS_PRESENCE_DETAILS (priv->persona), message);
- }
-}
-
-static 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);
- if (handle != priv->handle)
- {
- priv->handle = handle;
- g_object_notify (G_OBJECT (contact), "handle");
- }
- g_object_unref (contact);
-}
-
-static void
-contact_get_property (GObject *object,
- guint param_id,
- GValue *value,
- GParamSpec *pspec)
-{
- EmpathyContact *contact = EMPATHY_CONTACT (object);
-
- switch (param_id)
- {
- case PROP_TP_CONTACT:
- g_value_set_object (value, empathy_contact_get_tp_contact (contact));
- break;
- case PROP_ACCOUNT:
- g_value_set_object (value, empathy_contact_get_account (contact));
- break;
- case PROP_PERSONA:
- g_value_set_object (value, empathy_contact_get_persona (contact));
- break;
- case PROP_ID:
- g_value_set_string (value, empathy_contact_get_id (contact));
- break;
- case PROP_ALIAS:
- g_value_set_string (value, empathy_contact_get_alias (contact));
- break;
- case PROP_LOGGED_ALIAS:
- g_value_set_string (value, empathy_contact_get_logged_alias (contact));
- break;
- case PROP_AVATAR:
- g_value_set_boxed (value, empathy_contact_get_avatar (contact));
- break;
- case PROP_PRESENCE:
- g_value_set_uint (value, empathy_contact_get_presence (contact));
- break;
- case PROP_PRESENCE_MESSAGE:
- g_value_set_string (value, empathy_contact_get_presence_message (contact));
- break;
- case PROP_HANDLE:
- g_value_set_uint (value, empathy_contact_get_handle (contact));
- break;
- case PROP_CAPABILITIES:
- g_value_set_flags (value, empathy_contact_get_capabilities (contact));
- break;
- case PROP_IS_USER:
- g_value_set_boolean (value, empathy_contact_is_user (contact));
- 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)
-{
- EmpathyContact *contact = EMPATHY_CONTACT (object);
- EmpathyContactPriv *priv = GET_PRIV (object);
-
- switch (param_id)
- {
- case PROP_TP_CONTACT:
- priv->tp_contact = g_value_dup_object (value);
- break;
- case PROP_ACCOUNT:
- g_assert (priv->account == NULL);
- priv->account = g_value_dup_object (value);
- break;
- case PROP_PERSONA:
- empathy_contact_set_persona (contact, g_value_get_object (value));
- break;
- case PROP_ID:
- empathy_contact_set_id (contact, g_value_get_string (value));
- break;
- case PROP_ALIAS:
- empathy_contact_set_alias (contact, g_value_get_string (value));
- break;
- case PROP_LOGGED_ALIAS:
- g_assert (priv->logged_alias == NULL);
- priv->logged_alias = g_value_dup_string (value);
- break;
- case PROP_PRESENCE:
- empathy_contact_set_presence (contact, g_value_get_uint (value));
- break;
- case PROP_PRESENCE_MESSAGE:
- empathy_contact_set_presence_message (contact, g_value_get_string (value));
- break;
- case PROP_HANDLE:
- empathy_contact_set_handle (contact, g_value_get_uint (value));
- break;
- case PROP_CAPABILITIES:
- empathy_contact_set_capabilities (contact, g_value_get_flags (value));
- break;
- case PROP_IS_USER:
- empathy_contact_set_is_user (contact, g_value_get_boolean (value));
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, pspec);
- break;
- };
-}
-
-static void
-remove_tp_contact (gpointer data,
- GObject *object)
-{
- g_hash_table_remove (contacts_table, data);
-}
-
-static EmpathyContact *
-empathy_contact_new (TpContact *tp_contact)
-{
- EmpathyContact *retval;
-
- g_return_val_if_fail (TP_IS_CONTACT (tp_contact), NULL);
-
- retval = g_object_new (EMPATHY_TYPE_CONTACT,
- "tp-contact", tp_contact,
- NULL);
-
- g_object_weak_ref (G_OBJECT (retval), remove_tp_contact, tp_contact);
-
- return retval;
-}
-
-typedef struct
-{
- TplEntity *entity;
- TpAccount *account;
-} FindContactData;
-
-static gboolean
-contact_is_tpl_entity (gpointer key,
- gpointer value,
- gpointer user_data)
-{
- EmpathyContact *contact = value;
- FindContactData *data = user_data;
- TpAccount *account = empathy_contact_get_account (contact);
- const gchar *path = NULL;
-
- if (account != NULL)
- path = tp_proxy_get_object_path (account);
-
- return !tp_strdiff (empathy_contact_get_id (contact),
- tpl_entity_get_identifier (data->entity)) &&
- !tp_strdiff (tp_proxy_get_object_path (data->account), path);
-}
-
-static void
-get_contacts_cb (GObject *source,
- GAsyncResult *result,
- gpointer user_data)
-{
- TpWeakRef *wr = user_data;
- EmpathyContactPriv *priv;
- EmpathyContact *self;
-
- self = tp_weak_ref_dup_object (wr);
- if (self == NULL)
- goto out;
-
- priv = GET_PRIV (self);
-
- g_return_if_fail (priv->tp_contact == NULL);
-
- priv->tp_contact = tp_connection_dup_contact_by_id_finish (
- TP_CONNECTION (source), result, NULL);
- if (priv->tp_contact == NULL)
- goto out;
-
- g_object_notify (G_OBJECT (self), "tp-contact");
-
- /* Update capabilities now that we have a TpContact */
- set_capabilities_from_tp_caps (self,
- tp_contact_get_capabilities (priv->tp_contact));
-
-out:
- g_clear_object (&self);
- tp_weak_ref_destroy (wr);
-}
-
-EmpathyContact *
-empathy_contact_from_tpl_contact (TpAccount *account,
- TplEntity *tpl_entity)
-{
- EmpathyContact *retval;
- gboolean is_user;
- EmpathyContact *existing_contact = NULL;
-
- g_return_val_if_fail (TPL_IS_ENTITY (tpl_entity), NULL);
-
- if (contacts_table != NULL)
- {
- FindContactData data;
-
- data.entity = tpl_entity;
- data.account = account;
-
- existing_contact = g_hash_table_find (contacts_table,
- contact_is_tpl_entity, &data);
- }
-
- if (existing_contact != NULL)
- {
- retval = g_object_new (EMPATHY_TYPE_CONTACT,
- "tp-contact", empathy_contact_get_tp_contact (existing_contact),
- "logged-alias", tpl_entity_get_alias (tpl_entity),
- NULL);
- }
- else
- {
- TpConnection *conn;
- const gchar *id;
-
- is_user = (TPL_ENTITY_SELF == tpl_entity_get_entity_type (tpl_entity));
-
- id = tpl_entity_get_identifier (tpl_entity);
-
- retval = g_object_new (EMPATHY_TYPE_CONTACT,
- "id", id,
- "alias", tpl_entity_get_alias (tpl_entity),
- "account", account,
- "is-user", is_user,
- NULL);
-
- /* Try to get a TpContact associated to have at least contact
- * capabilities if possible. This is useful for CM supporting calling
- * offline contacts for example. */
- conn = tp_account_get_connection (account);
- if (conn != NULL)
- {
- TpContactFeature features[] = { TP_CONTACT_FEATURE_CAPABILITIES };
- conn = tp_account_get_connection (account);
-
- tp_connection_dup_contact_by_id_async (conn, id,
- G_N_ELEMENTS (features), features, get_contacts_cb,
- tp_weak_ref_new (retval, NULL, NULL));
- }
- }
-
- if (!TPAW_STR_EMPTY (tpl_entity_get_avatar_token (tpl_entity)))
- contact_load_avatar_cache (retval,
- tpl_entity_get_avatar_token (tpl_entity));
-
- return retval;
-}
-
-TpContact *
-empathy_contact_get_tp_contact (EmpathyContact *contact)
-{
- EmpathyContactPriv *priv;
-
- g_return_val_if_fail (EMPATHY_IS_CONTACT (contact), NULL);
-
- priv = GET_PRIV (contact);
-
- return priv->tp_contact;
-}
-
-const gchar *
-empathy_contact_get_id (EmpathyContact *contact)
-{
- EmpathyContactPriv *priv;
-
- g_return_val_if_fail (EMPATHY_IS_CONTACT (contact), NULL);
-
- priv = GET_PRIV (contact);
-
- if (priv->tp_contact != NULL)
- return tp_contact_get_identifier (priv->tp_contact);
-
- return priv->id;
-}
-
-const gchar *
-empathy_contact_get_alias (EmpathyContact *contact)
-{
- EmpathyContactPriv *priv;
- const gchar *alias = NULL;
-
- g_return_val_if_fail (EMPATHY_IS_CONTACT (contact), NULL);
-
- priv = GET_PRIV (contact);
-
- if (!TPAW_STR_EMPTY (priv->alias))
- alias = priv->alias;
- else if (priv->tp_contact != NULL)
- alias = tp_contact_get_alias (priv->tp_contact);
-
- if (!TPAW_STR_EMPTY (alias))
- return alias;
- else
- return empathy_contact_get_id (contact);
-}
-
-const gchar *
-empathy_contact_get_logged_alias (EmpathyContact *contact)
-{
- EmpathyContactPriv *priv;
-
- g_return_val_if_fail (EMPATHY_IS_CONTACT (contact), NULL);
-
- priv = GET_PRIV (contact);
-
- if (priv->logged_alias != NULL)
- return priv->logged_alias;
- else
- return empathy_contact_get_alias (contact);
-}
-
-void
-empathy_contact_set_alias (EmpathyContact *contact,
- const gchar *alias)
-{
- EmpathyContactPriv *priv;
- FolksPersona *persona;
-
- g_return_if_fail (EMPATHY_IS_CONTACT (contact));
-
- priv = GET_PRIV (contact);
-
- g_object_ref (contact);
-
- /* Set the alias on the persona if possible */
- persona = empathy_contact_get_persona (contact);
- if (persona != NULL && FOLKS_IS_ALIAS_DETAILS (persona))
- {
- DEBUG ("Setting alias for contact %s to %s",
- empathy_contact_get_id (contact), alias);
-
- folks_alias_details_set_alias (FOLKS_ALIAS_DETAILS (persona), alias);
- }
-
- if (tp_strdiff (alias, priv->alias))
- {
- g_free (priv->alias);
- priv->alias = g_strdup (alias);
- g_object_notify (G_OBJECT (contact), "alias");
- }
-
- g_object_unref (contact);
-}
-
-static void
-groups_change_group_cb (GObject *source,
- GAsyncResult *result,
- gpointer user_data)
-{
- FolksGroupDetails *group_details = FOLKS_GROUP_DETAILS (source);
- GError *error = NULL;
-
- folks_group_details_change_group_finish (group_details, result, &error);
- if (error != NULL)
- {
- g_warning ("failed to change group: %s", error->message);
- g_clear_error (&error);
- }
-}
-
-void
-empathy_contact_change_group (EmpathyContact *contact, const gchar *group,
- gboolean is_member)
-{
- EmpathyContactPriv *priv;
- FolksPersona *persona;
-
- g_return_if_fail (EMPATHY_IS_CONTACT (contact));
- g_return_if_fail (group != NULL);
-
- priv = GET_PRIV (contact);
-
- /* Normally pass through the changes to the persona */
- persona = empathy_contact_get_persona (contact);
- if (persona != NULL)
- {
- if (FOLKS_IS_GROUP_DETAILS (persona))
- folks_group_details_change_group (FOLKS_GROUP_DETAILS (persona), group,
- is_member, groups_change_group_cb, contact);
- return;
- }
-
- /* If the persona doesn't exist yet, we have to cache the changes until it
- * does */
- if (priv->groups == NULL)
- {
- priv->groups = gee_hash_set_new (G_TYPE_STRING, (GBoxedCopyFunc) g_strdup,
- g_free, NULL, NULL, NULL, NULL, NULL, NULL);
- }
-
- gee_collection_add (GEE_COLLECTION (priv->groups), group);
-}
-
-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;
-}
-
-static void
-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");
-}
-
-TpAccount *
-empathy_contact_get_account (EmpathyContact *contact)
-{
- EmpathyContactPriv *priv;
-
- g_return_val_if_fail (EMPATHY_IS_CONTACT (contact), NULL);
-
- priv = GET_PRIV (contact);
-
- if (priv->account == NULL && priv->tp_contact != NULL)
- {
- TpConnection *connection;
-
- /* FIXME: This assume the account manager already exists */
- connection = tp_contact_get_connection (priv->tp_contact);
- priv->account =
- g_object_ref (tp_connection_get_account (connection));
- }
-
- return priv->account;
-}
-
-FolksPersona *
-empathy_contact_get_persona (EmpathyContact *contact)
-{
- EmpathyContactPriv *priv;
-
- g_return_val_if_fail (EMPATHY_IS_CONTACT (contact), NULL);
-
- priv = GET_PRIV (contact);
-
- if (priv->persona == NULL && priv->tp_contact != NULL)
- {
- TpfPersona *persona;
-
- persona = tpf_persona_dup_for_contact (priv->tp_contact);
- if (persona != NULL)
- {
- empathy_contact_set_persona (contact, (FolksPersona *) persona);
- g_object_unref (persona);
- }
- }
-
- return priv->persona;
-}
-
-void
-empathy_contact_set_persona (EmpathyContact *contact,
- FolksPersona *persona)
-{
- EmpathyContactPriv *priv;
-
- g_return_if_fail (EMPATHY_IS_CONTACT (contact));
- g_return_if_fail (TPF_IS_PERSONA (persona));
-
- priv = GET_PRIV (contact);
-
- if (persona == priv->persona)
- return;
-
- if (priv->persona != NULL)
- {
- g_signal_handlers_disconnect_by_func (priv->persona,
- folks_persona_notify_cb, contact);
- g_object_unref (priv->persona);
- }
- priv->persona = g_object_ref (persona);
-
- g_signal_connect (priv->persona, "notify",
- G_CALLBACK (folks_persona_notify_cb), contact);
-
- g_object_notify (G_OBJECT (contact), "persona");
-
- /* Set the persona's alias, since ours could've been set using
- * empathy_contact_set_alias() before we had a persona; this happens when
- * adding a contact. */
- if (priv->alias != NULL)
- empathy_contact_set_alias (contact, priv->alias);
-
- /* Set the persona's groups */
- if (priv->groups != NULL)
- {
- folks_group_details_set_groups (FOLKS_GROUP_DETAILS (persona),
- GEE_SET (priv->groups));
- g_object_unref (priv->groups);
- priv->groups = NULL;
- }
-}
-
-TpConnection *
-empathy_contact_get_connection (EmpathyContact *contact)
-{
- EmpathyContactPriv *priv;
-
- g_return_val_if_fail (EMPATHY_IS_CONTACT (contact), NULL);
-
- priv = GET_PRIV (contact);
-
- if (priv->tp_contact != NULL)
- return tp_contact_get_connection (priv->tp_contact);
-
- return NULL;
-}
-
-TpConnectionPresenceType
-empathy_contact_get_presence (EmpathyContact *contact)
-{
- EmpathyContactPriv *priv;
-
- g_return_val_if_fail (EMPATHY_IS_CONTACT (contact),
- TP_CONNECTION_PRESENCE_TYPE_UNSET);
-
- priv = GET_PRIV (contact);
-
- if (priv->tp_contact != NULL)
- return tp_contact_get_presence_type (priv->tp_contact);
-
- return priv->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);
-
- if (priv->persona != NULL)
- return folks_presence_details_get_presence_message (
- FOLKS_PRESENCE_DETAILS (priv->persona));
-
- if (priv->tp_contact != NULL)
- return tp_contact_get_presence_message (priv->tp_contact);
-
- return NULL;
-}
-
-guint
-empathy_contact_get_handle (EmpathyContact *contact)
-{
- EmpathyContactPriv *priv;
-
- g_return_val_if_fail (EMPATHY_IS_CONTACT (contact), 0);
-
- priv = GET_PRIV (contact);
-
- if (priv->tp_contact != NULL)
- return tp_contact_get_handle (priv->tp_contact);
-
- return priv->handle;
-}
-
-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;
-}
-
-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)
-{
- g_return_val_if_fail (EMPATHY_IS_CONTACT (contact), FALSE);
-
- switch (empathy_contact_get_presence (contact))
- {
- case TP_CONNECTION_PRESENCE_TYPE_OFFLINE:
- case TP_CONNECTION_PRESENCE_TYPE_UNKNOWN:
- case TP_CONNECTION_PRESENCE_TYPE_ERROR:
- return FALSE;
- /* Contacts without presence are considered online so we can display IRC
- * contacts in rooms. */
- case TP_CONNECTION_PRESENCE_TYPE_UNSET:
- case TP_CONNECTION_PRESENCE_TYPE_AVAILABLE:
- case TP_CONNECTION_PRESENCE_TYPE_AWAY:
- case TP_CONNECTION_PRESENCE_TYPE_EXTENDED_AWAY:
- case TP_CONNECTION_PRESENCE_TYPE_HIDDEN:
- case TP_CONNECTION_PRESENCE_TYPE_BUSY:
- default:
- return TRUE;
- }
-}
-
-const gchar *
-empathy_contact_get_status (EmpathyContact *contact)
-{
- const gchar *message;
-
- g_return_val_if_fail (EMPATHY_IS_CONTACT (contact), "");
-
- message = empathy_contact_get_presence_message (contact);
- if (!TPAW_STR_EMPTY (message))
- return message;
-
- return empathy_presence_get_default_message (
- empathy_contact_get_presence (contact));
-}
-
-gboolean
-empathy_contact_can_sms (EmpathyContact *contact)
-{
- EmpathyContactPriv *priv;
-
- g_return_val_if_fail (EMPATHY_IS_CONTACT (contact), FALSE);
-
- priv = GET_PRIV (contact);
-
- return priv->capabilities & EMPATHY_CAPABILITIES_SMS;
-}
-
-gboolean
-empathy_contact_can_voip (EmpathyContact *contact)
-{
- EmpathyContactPriv *priv;
-
- g_return_val_if_fail (EMPATHY_IS_CONTACT (contact), FALSE);
-
- priv = GET_PRIV (contact);
-
- return priv->capabilities & (EMPATHY_CAPABILITIES_AUDIO |
- EMPATHY_CAPABILITIES_VIDEO);
-}
-
-gboolean
-empathy_contact_can_voip_audio (EmpathyContact *contact)
-{
- EmpathyContactPriv *priv;
-
- g_return_val_if_fail (EMPATHY_IS_CONTACT (contact), FALSE);
-
- priv = GET_PRIV (contact);
-
- return priv->capabilities & EMPATHY_CAPABILITIES_AUDIO;
-}
-
-gboolean
-empathy_contact_can_voip_video (EmpathyContact *contact)
-{
- EmpathyContactPriv *priv;
-
- g_return_val_if_fail (EMPATHY_IS_CONTACT (contact), FALSE);
-
- priv = GET_PRIV (contact);
-
- return priv->capabilities & EMPATHY_CAPABILITIES_VIDEO;
-}
-
-gboolean
-empathy_contact_can_send_files (EmpathyContact *contact)
-{
- EmpathyContactPriv *priv;
-
- g_return_val_if_fail (EMPATHY_IS_CONTACT (contact), FALSE);
-
- priv = GET_PRIV (contact);
-
- return priv->capabilities & EMPATHY_CAPABILITIES_FT;
-}
-
-gboolean
-empathy_contact_can_use_rfb_stream_tube (EmpathyContact *contact)
-{
- EmpathyContactPriv *priv;
-
- g_return_val_if_fail (EMPATHY_IS_CONTACT (contact), FALSE);
-
- priv = GET_PRIV (contact);
-
- return priv->capabilities & EMPATHY_CAPABILITIES_RFB_STREAM_TUBE;
-}
-
-static gboolean
-contact_has_log (EmpathyContact *contact)
-{
- TplLogManager *manager;
- TplEntity *entity;
- gboolean have_log;
-
- manager = tpl_log_manager_dup_singleton ();
- entity = tpl_entity_new (empathy_contact_get_id (contact),
- TPL_ENTITY_CONTACT, NULL, NULL);
-
- have_log = tpl_log_manager_exists (manager,
- empathy_contact_get_account (contact), entity, TPL_EVENT_MASK_TEXT);
-
- g_object_unref (entity);
- g_object_unref (manager);
-
- return have_log;
-}
-
-gboolean
-empathy_contact_can_do_action (EmpathyContact *self,
- EmpathyActionType action_type)
-{
- gboolean sensitivity = FALSE;
-
- switch (action_type)
- {
- case EMPATHY_ACTION_CHAT:
- sensitivity = TRUE;
- break;
- case EMPATHY_ACTION_SMS:
- sensitivity = empathy_contact_can_sms (self);
- break;
- case EMPATHY_ACTION_AUDIO_CALL:
- sensitivity = empathy_contact_can_voip_audio (self);
- break;
- case EMPATHY_ACTION_VIDEO_CALL:
- sensitivity = empathy_contact_can_voip_video (self);
- break;
- case EMPATHY_ACTION_VIEW_LOGS:
- sensitivity = contact_has_log (self);
- break;
- case EMPATHY_ACTION_SEND_FILE:
- sensitivity = empathy_contact_can_send_files (self);
- break;
- case EMPATHY_ACTION_SHARE_MY_DESKTOP:
- sensitivity = empathy_contact_can_use_rfb_stream_tube (self);
- break;
- default:
- g_assert_not_reached ();
- }
-
- return (sensitivity ? TRUE : FALSE);
-}
-
-static gchar *
-contact_get_avatar_filename (EmpathyContact *contact,
- const gchar *token)
-{
- TpAccount *account;
- gchar *avatar_path;
- gchar *avatar_file;
- gchar *token_escaped;
-
- if (TPAW_STR_EMPTY (empathy_contact_get_id (contact)))
- return NULL;
-
- token_escaped = tp_escape_as_identifier (token);
- account = empathy_contact_get_account (contact);
-
- avatar_path = g_build_filename (g_get_user_cache_dir (),
- "telepathy",
- "avatars",
- tp_account_get_cm_name (account),
- tp_account_get_protocol_name (account),
- NULL);
- g_mkdir_with_parents (avatar_path, 0700);
-
- avatar_file = g_build_filename (avatar_path, token_escaped, NULL);
-
- g_free (token_escaped);
- g_free (avatar_path);
-
- return avatar_file;
-}
-
-static gboolean
-contact_load_avatar_cache (EmpathyContact *contact,
- const gchar *token)
-{
- EmpathyAvatar *avatar = NULL;
- gchar *filename;
- gchar *data = NULL;
- gsize len;
- GError *error = NULL;
-
- g_return_val_if_fail (EMPATHY_IS_CONTACT (contact), FALSE);
- g_return_val_if_fail (!TPAW_STR_EMPTY (token), FALSE);
-
- /* Load the avatar from file if it exists */
- filename = contact_get_avatar_filename (contact, token);
- if (filename && 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 != NULL)
- {
- DEBUG ("Avatar loaded from %s", filename);
- avatar = empathy_avatar_new ((guchar *) data, len, NULL, filename);
- contact_set_avatar (contact, avatar);
- empathy_avatar_unref (avatar);
- }
-
- g_free (data);
- g_free (filename);
-
- return data != NULL;
-}
-
-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;
-}
-
-/**
- * empathy_avatar_new:
- * @data: the avatar data
- * @len: the size of avatar data
- * @format: the mime type of the avatar image
- * @filename: the filename where the avatar is stored in cache
- *
- * Create a #EmpathyAvatar from the provided data.
- *
- * Returns: a new #EmpathyAvatar
- */
-EmpathyAvatar *
-empathy_avatar_new (const guchar *data,
- gsize len,
- const gchar *format,
- const gchar *filename)
-{
- EmpathyAvatar *avatar;
-
- avatar = g_slice_new0 (EmpathyAvatar);
- avatar->data = g_memdup (data, len);
- avatar->len = len;
- avatar->format = g_strdup (format);
- avatar->filename = g_strdup (filename);
- avatar->refcount = 1;
-
- 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->filename);
- g_slice_free (EmpathyAvatar, avatar);
- }
-}
-
-EmpathyAvatar *
-empathy_avatar_ref (EmpathyAvatar *avatar)
-{
- g_return_val_if_fail (avatar != NULL, NULL);
-
- avatar->refcount++;
-
- return avatar;
-}
-
-/**
- * empathy_avatar_save_to_file:
- * @avatar: the avatar
- * @filename: name of a file to write avatar to
- * @error: return location for a GError, or NULL
- *
- * Save the avatar to a file named filename
- *
- * Returns: %TRUE on success, %FALSE if an error occurred
- */
-gboolean
-empathy_avatar_save_to_file (EmpathyAvatar *self,
- const gchar *filename,
- GError **error)
-{
- return g_file_set_contents (filename, (const gchar *) self->data, self->len,
- error);
-}
-
-/**
- * empathy_contact_get_location:
- * @contact: an #EmpathyContact
- *
- * Returns the user's location if available. The keys are defined in
- * empathy-location.h. If the contact doesn't have location
- * information, the GHashTable will be empthy. Use #g_hash_table_unref when
- * you are done with the #GHashTable.
- *
- * It is composed of string keys and GValues. Keys are
- * defined in empathy-location.h such as #EMPATHY_LOCATION_COUNTRY.
- * Example: a "city" key would have "Helsinki" as string GValue,
- * a "latitude" would have 65.0 as double GValue.
- *
- * Returns: a #GHashTable of location values
- */
-GHashTable *
-empathy_contact_get_location (EmpathyContact *contact)
-{
- EmpathyContactPriv *priv;
-
- g_return_val_if_fail (EMPATHY_CONTACT (contact), NULL);
-
- priv = GET_PRIV (contact);
-
- return priv->location;
-}
-
-/**
- * empathy_contact_set_location:
- * @contact: an #EmpathyContact
- * @location: a #GHashTable of the location
- *
- * Sets the user's location based on the location #GHashTable passed.
- * It is composed of string keys and GValues. Keys are
- * defined in empathy-location.h such as #EMPATHY_LOCATION_COUNTRY.
- * Example: a "city" key would have "Helsinki" as string GValue,
- * a "latitude" would have 65.0 as double GValue.
- */
-static void
-empathy_contact_set_location (EmpathyContact *contact,
- GHashTable *location)
-{
- EmpathyContactPriv *priv;
-
- g_return_if_fail (EMPATHY_CONTACT (contact));
- g_return_if_fail (location != NULL);
-
- priv = GET_PRIV (contact);
-
- if (priv->location != NULL)
- g_hash_table_unref (priv->location);
-
- priv->location = g_hash_table_ref (location);
-#ifdef HAVE_GEOCODE
- update_geocode (contact);
-#endif
- g_object_notify (G_OBJECT (contact), "location");
-}
-
-const gchar * const *
-empathy_contact_get_client_types (EmpathyContact *contact)
-{
- EmpathyContactPriv *priv;
-
- g_return_val_if_fail (EMPATHY_IS_CONTACT (contact), NULL);
-
- priv = GET_PRIV (contact);
-
- return (const gchar * const *) priv->client_types;
-}
-
-static void
-contact_set_client_types (EmpathyContact *contact,
- const gchar * const *client_types)
-{
- EmpathyContactPriv *priv = GET_PRIV (contact);
-
- if (priv->client_types != NULL)
- g_strfreev (priv->client_types);
-
- priv->client_types = g_strdupv ((gchar **) client_types);
- g_object_notify (G_OBJECT (contact), "client-types");
-}
-
-/**
- * empathy_contact_equal:
- * @contact1: an #EmpathyContact
- * @contact2: an #EmpathyContact
- *
- * Returns FALSE if one of the contacts is NULL but the other is not.
- * Otherwise returns TRUE if both pointer are equal or if they bith
- * refer to the same id.
- * It's only necessary to call this function if your contact objects
- * come from logs where contacts are created dynamically and comparing
- * pointers is not enough.
- */
-gboolean
-empathy_contact_equal (gconstpointer contact1,
- gconstpointer contact2)
-{
- EmpathyContact *c1;
- EmpathyContact *c2;
- const gchar *id1;
- const gchar *id2;
-
- if ((contact1 == NULL) != (contact2 == NULL)) {
- return FALSE;
- }
- if (contact1 == contact2) {
- return TRUE;
- }
- c1 = EMPATHY_CONTACT (contact1);
- c2 = EMPATHY_CONTACT (contact2);
- id1 = empathy_contact_get_id (c1);
- id2 = empathy_contact_get_id (c2);
- if (!tp_strdiff (id1, id2)) {
- return TRUE;
- }
- return FALSE;
-}
-
-#ifdef HAVE_GEOCODE
-/* This callback is called by geocode-glib when it found a position
- * for the given address. A position is necessary for a contact
- * to show up on the map
- */
-static void
-geocode_cb (GObject *source,
- GAsyncResult *result,
- gpointer user_data)
-{
- EmpathyContact *contact = user_data;
- EmpathyContactPriv *priv = GET_PRIV (contact);
- GError *error = NULL;
- GList *res;
- GeocodeLocation *loc;
- GHashTable *new_location;
- GHashTable *resolved = NULL;
-
- if (priv->location == NULL)
- goto out;
-
- res = geocode_forward_search_finish (GEOCODE_FORWARD (source), result,
- &error);
-
- if (res == NULL)
- {
- DEBUG ("Failed to resolve geocode: %s", error->message);
- g_error_free (error);
- goto out;
- }
-
- loc = res->data;
-
- new_location = tp_asv_new (
- EMPATHY_LOCATION_LAT, G_TYPE_DOUBLE, geocode_location_get_latitude (loc),
- EMPATHY_LOCATION_LON, G_TYPE_DOUBLE, geocode_location_get_longitude (loc),
- NULL);
-
- DEBUG ("\t - Latitude: %f", geocode_location_get_latitude (loc));
- DEBUG ("\t - Longitude: %f", geocode_location_get_longitude (loc));
-
- g_list_free_full (res, g_object_unref);
-
- /* Copy remaning fields. LAT and LON were not defined so we won't overwrite
- * the values we just set. */
- tp_g_hash_table_update (new_location, priv->location,
- (GBoxedCopyFunc) g_strdup, (GBoxedCopyFunc) tp_g_value_slice_dup);
-
- /* Don't change the accuracy as we used an address to get this position */
- g_hash_table_unref (priv->location);
- priv->location = new_location;
- g_object_notify ((GObject *) contact, "location");
-
-out:
- tp_clear_pointer (&resolved, g_hash_table_unref);
- g_object_unref (contact);
-}
-
-static void
-update_geocode (EmpathyContact *contact)
-{
- GeocodeForward *geocode;
- GHashTable *location;
-
- location = empathy_contact_get_location (contact);
- if (location == NULL ||
- g_hash_table_size (location) == 0)
- return;
-
- /* No need to search for position if contact published it */
- if (g_hash_table_lookup (location, EMPATHY_LOCATION_LAT) != NULL ||
- g_hash_table_lookup (location, EMPATHY_LOCATION_LON) != NULL)
- return;
-
- geocode = geocode_forward_new_for_params (location);
- if (geocode == NULL)
- return;
-
- geocode_forward_search_async (geocode, NULL, geocode_cb,
- g_object_ref (contact));
-
- g_object_unref (geocode);
-}
-#endif
-
-static EmpathyCapabilities
-tp_caps_to_capabilities (TpCapabilities *caps)
-{
- EmpathyCapabilities capabilities = 0;
-
- if (tp_capabilities_supports_file_transfer (caps))
- capabilities |= EMPATHY_CAPABILITIES_FT;
-
- if (tp_capabilities_supports_stream_tubes (caps, TP_HANDLE_TYPE_CONTACT,
- "rfb"))
- capabilities |= EMPATHY_CAPABILITIES_RFB_STREAM_TUBE;
-
- if (tp_capabilities_supports_audio_video_call (caps, TP_HANDLE_TYPE_CONTACT))
- {
- capabilities |= EMPATHY_CAPABILITIES_AUDIO;
- capabilities |= EMPATHY_CAPABILITIES_VIDEO;
- }
- else if (tp_capabilities_supports_audio_call (caps, TP_HANDLE_TYPE_CONTACT))
- {
- capabilities |= EMPATHY_CAPABILITIES_AUDIO;
- }
-
- if (tp_capabilities_supports_sms (caps))
- capabilities |= EMPATHY_CAPABILITIES_SMS;
-
- return capabilities;
-}
-
-static void
-set_capabilities_from_tp_caps (EmpathyContact *self,
- TpCapabilities *caps)
-{
- EmpathyCapabilities capabilities;
-
- if (caps == NULL)
- return;
-
- capabilities = tp_caps_to_capabilities (caps);
- empathy_contact_set_capabilities (self, capabilities);
-}
-
-static void
-contact_set_avatar_from_tp_contact (EmpathyContact *contact)
-{
- EmpathyContactPriv *priv = GET_PRIV (contact);
- const gchar *mime;
- GFile *file;
-
- mime = tp_contact_get_avatar_mime_type (priv->tp_contact);
- file = tp_contact_get_avatar_file (priv->tp_contact);
-
- if (file != NULL)
- {
- EmpathyAvatar *avatar;
- gchar *data;
- gsize len;
- gchar *path;
- GError *error = NULL;
-
- if (!g_file_load_contents (file, NULL, &data, &len, NULL, &error))
- {
- DEBUG ("Failed to load avatar: %s", error->message);
-
- g_error_free (error);
- contact_set_avatar (contact, NULL);
- return;
- }
-
- path = g_file_get_path (file);
-
- avatar = empathy_avatar_new ((guchar *) data, len, mime, path);
-
- contact_set_avatar (contact, avatar);
- empathy_avatar_unref (avatar);
- g_free (path);
- g_free (data);
- }
- else
- {
- contact_set_avatar (contact, NULL);
- }
-}
-
-EmpathyContact *
-empathy_contact_dup_from_tp_contact (TpContact *tp_contact)
-{
- EmpathyContact *contact = NULL;
-
- g_return_val_if_fail (TP_IS_CONTACT (tp_contact), NULL);
-
- if (contacts_table == NULL)
- contacts_table = g_hash_table_new (g_direct_hash, g_direct_equal);
- else
- contact = g_hash_table_lookup (contacts_table, tp_contact);
-
- if (contact == NULL)
- {
- contact = empathy_contact_new (tp_contact);
-
- /* The hash table does not keep any ref.
- * contact keeps a ref to tp_contact, and is removed from the table in
- * contact_dispose() */
- g_hash_table_insert (contacts_table, tp_contact, contact);
- }
- else
- {
- g_object_ref (contact);
- }
-
- return contact;
-}
-
-static int
-presence_cmp_func (EmpathyContact *a,
- EmpathyContact *b)
-{
- FolksPresenceDetails *presence_a, *presence_b;
-
- presence_a = FOLKS_PRESENCE_DETAILS (empathy_contact_get_persona (a));
- presence_b = FOLKS_PRESENCE_DETAILS (empathy_contact_get_persona (b));
-
- /* We negate the result because we're sorting in reverse order (i.e. such that
- * the Personas with the highest presence are at the beginning of the list. */
- return -folks_presence_details_typecmp (
- folks_presence_details_get_presence_type (presence_a),
- folks_presence_details_get_presence_type (presence_b));
-}
-
-static gint
-voip_cmp_func (EmpathyContact *a,
- EmpathyContact *b)
-{
- gboolean has_audio_a, has_audio_b;
- gboolean has_video_a, has_video_b;
-
- has_audio_a = empathy_contact_can_voip_audio (a);
- has_audio_b = empathy_contact_can_voip_audio (b);
- has_video_a = empathy_contact_can_voip_video (a);
- has_video_b = empathy_contact_can_voip_video (b);
-
- /* First check video */
- if (has_video_a == has_video_b)
- {
- /* Use audio to to break tie */
- if (has_audio_a == has_audio_b)
- return 0;
- else if (has_audio_a)
- return -1;
- else
- return 1;
- }
- else if (has_video_a)
- return -1;
- else
- return 1;
-}
-
-static gint
-ft_cmp_func (EmpathyContact *a,
- EmpathyContact *b)
-{
- gboolean can_send_files_a, can_send_files_b;
-
- can_send_files_a = empathy_contact_can_send_files (a);
- can_send_files_b = empathy_contact_can_send_files (b);
-
- if (can_send_files_a == can_send_files_b)
- return 0;
- else if (can_send_files_a)
- return -1;
- else
- return 1;
-}
-
-static gint
-rfb_stream_tube_cmp_func (EmpathyContact *a,
- EmpathyContact *b)
-{
- gboolean rfb_a, rfb_b;
-
- rfb_a = empathy_contact_can_use_rfb_stream_tube (a);
- rfb_b = empathy_contact_can_use_rfb_stream_tube (b);
-
- if (rfb_a == rfb_b)
- return 0;
- else if (rfb_a)
- return -1;
- else
- return 1;
-}
-
-/* Sort by presence as with presence_cmp_func(), but if the two contacts have
- * the same presence, prefer the one which can do both audio *and* video calls,
- * over the one which can only do one of the two. */
-static int
-voip_sort_func (EmpathyContact *a, EmpathyContact *b)
-{
- gint presence_sort = presence_cmp_func (a, b);
-
- if (presence_sort != 0)
- return presence_sort;
-
- return voip_cmp_func (a, b);
-}
-
-/* Sort by presence as with presence_cmp_func() and then break ties using the
- * most "capable" individual. So users will be able to pick more actions on
- * the contact in the "Contact" menu of the chat window. */
-static gint
-chat_sort_func (EmpathyContact *a,
- EmpathyContact *b)
-{
- gint result;
-
- result = presence_cmp_func (a, b);
- if (result != 0)
- return result;
-
- /* Prefer individual supporting file transfer */
- result = ft_cmp_func (a, b);
- if (result != 0)
- return result;
-
- /* Check audio/video capabilities */
- result = voip_cmp_func (a, b);
- if (result != 0)
- return result;
-
- /* Check 'Share my destop' feature */
- return rfb_stream_tube_cmp_func (a, b);
-}
-
-static GCompareFunc
-get_sort_func_for_action (EmpathyActionType action_type)
-{
- switch (action_type)
- {
- case EMPATHY_ACTION_AUDIO_CALL:
- case EMPATHY_ACTION_VIDEO_CALL:
- return (GCompareFunc) voip_sort_func;
- case EMPATHY_ACTION_CHAT:
- return (GCompareFunc) chat_sort_func;
- case EMPATHY_ACTION_VIEW_LOGS:
- case EMPATHY_ACTION_SEND_FILE:
- case EMPATHY_ACTION_SHARE_MY_DESKTOP:
- default:
- return (GCompareFunc) presence_cmp_func;
- }
-}
-
-/**
- * empathy_contact_dup_best_for_action:
- * @individual: a #FolksIndividual
- * @action_type: the type of action to be performed on the contact
- *
- * Chooses a #FolksPersona from the given @individual which is best-suited for
- * the given @action_type. "Best-suited" is determined by choosing the persona
- * with the highest presence out of all the personas which can perform the given
- * @action_type (e.g. are capable of video calling).
- *
- * Return value: an #EmpathyContact for the best persona, or %NULL;
- * unref with g_object_unref()
- */
-EmpathyContact *
-empathy_contact_dup_best_for_action (FolksIndividual *individual,
- EmpathyActionType action_type)
-{
- GeeSet *personas;
- GeeIterator *iter;
- GList *contacts;
- EmpathyContact *best_contact = NULL;
-
- /* Build a list of EmpathyContacts that we can sort */
- personas = folks_individual_get_personas (individual);
- contacts = NULL;
-
- iter = gee_iterable_iterator (GEE_ITERABLE (personas));
- while (gee_iterator_next (iter))
- {
- FolksPersona *persona = gee_iterator_get (iter);
- TpContact *tp_contact;
- EmpathyContact *contact = NULL;
-
- if (!empathy_folks_persona_is_interesting (persona))
- goto while_finish;
-
- tp_contact = tpf_persona_get_contact (TPF_PERSONA (persona));
- if (tp_contact == NULL)
- goto while_finish;
-
- contact = empathy_contact_dup_from_tp_contact (tp_contact);
- empathy_contact_set_persona (contact, FOLKS_PERSONA (persona));
-
- /* Only choose the contact if they're actually capable of the specified
- * action. */
- if (empathy_contact_can_do_action (contact, action_type))
- contacts = g_list_prepend (contacts, g_object_ref (contact));
-
-while_finish:
- g_clear_object (&contact);
- g_clear_object (&persona);
- }
- g_clear_object (&iter);
-
- /* Sort the contacts by some heuristic based on the action type, then take
- * the top contact. */
- if (contacts != NULL)
- {
- contacts = g_list_sort (contacts, get_sort_func_for_action (action_type));
- best_contact = g_object_ref (contacts->data);
- }
-
- g_list_foreach (contacts, (GFunc) g_object_unref, NULL);
- g_list_free (contacts);
-
- return best_contact;
-}
-
-#define declare_contact_cb(name) \
-static void \
-contact_##name##_cb (GObject *source, \
- GAsyncResult *result, \
- gpointer user_data) \
-{ \
- TpContact *contact = (TpContact *) source; \
- GError *error = NULL; \
- \
- if (!tp_contact_##name##_finish (contact, result, &error)) \
- { \
- DEBUG ("Failed to ##name## on %s\n", \
- tp_contact_get_identifier (contact)); \
- g_error_free (error); \
- } \
-}
-
-declare_contact_cb (request_subscription)
-declare_contact_cb (authorize_publication)
-declare_contact_cb (unblock)
-
-void
-empathy_contact_add_to_contact_list (EmpathyContact *self,
- const gchar *message)
-{
- EmpathyContactPriv *priv = GET_PRIV (self);
-
- g_return_if_fail (priv->tp_contact != NULL);
-
- tp_contact_request_subscription_async (priv->tp_contact, message,
- contact_request_subscription_cb, NULL);
-
- tp_contact_authorize_publication_async (priv->tp_contact,
- contact_authorize_publication_cb, NULL);
-
- tp_contact_unblock_async (priv->tp_contact, contact_unblock_cb, NULL);
-}
-
-declare_contact_cb (remove)
-
-void
-empathy_contact_remove_from_contact_list (EmpathyContact *self)
-{
- EmpathyContactPriv *priv = GET_PRIV (self);
-
- g_return_if_fail (priv->tp_contact != NULL);
-
- tp_contact_remove_async (priv->tp_contact, contact_remove_cb, NULL);
-}
diff --git a/libempathy/empathy-contact.h b/libempathy/empathy-contact.h
deleted file mode 100644
index e7ce10e4..00000000
--- a/libempathy/empathy-contact.h
+++ /dev/null
@@ -1,146 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * Copyright (C) 2007-2009 Collabora Ltd.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- *
- * Authors: Xavier Claessens <xclaesse@gmail.com>
- */
-
-#ifndef __EMPATHY_CONTACT_H__
-#define __EMPATHY_CONTACT_H__
-
-#include <glib-object.h>
-#include <telepathy-glib/telepathy-glib.h>
-#include <telepathy-logger/telepathy-logger.h>
-#include <folks/folks.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 struct {
- guchar *data;
- gsize len;
- gchar *format;
- gchar *token;
- gchar *filename;
- guint refcount;
-} EmpathyAvatar;
-
-typedef enum {
- EMPATHY_CAPABILITIES_NONE = 0,
- EMPATHY_CAPABILITIES_AUDIO = 1 << 0,
- EMPATHY_CAPABILITIES_VIDEO = 1 << 1,
- EMPATHY_CAPABILITIES_FT = 1 << 2,
- EMPATHY_CAPABILITIES_RFB_STREAM_TUBE = 1 << 3,
- EMPATHY_CAPABILITIES_SMS = 1 << 4,
- EMPATHY_CAPABILITIES_UNKNOWN = 1 << 7
-} EmpathyCapabilities;
-
-GType empathy_contact_get_type (void) G_GNUC_CONST;
-EmpathyContact * empathy_contact_from_tpl_contact (TpAccount *account,
- TplEntity *tpl_contact);
-TpContact * empathy_contact_get_tp_contact (EmpathyContact *contact);
-const gchar * empathy_contact_get_id (EmpathyContact *contact);
-const gchar * empathy_contact_get_alias (EmpathyContact *contact);
-const gchar * empathy_contact_get_logged_alias (EmpathyContact *contact);
-void empathy_contact_set_alias (EmpathyContact *contact, const gchar *alias);
-void empathy_contact_change_group (EmpathyContact *contact, const gchar *group,
- gboolean is_member);
-EmpathyAvatar * empathy_contact_get_avatar (EmpathyContact *contact);
-TpAccount * empathy_contact_get_account (EmpathyContact *contact);
-FolksPersona * empathy_contact_get_persona (EmpathyContact *contact);
-void empathy_contact_set_persona (EmpathyContact *contact,
- FolksPersona *persona);
-TpConnection * empathy_contact_get_connection (EmpathyContact *contact);
-TpConnectionPresenceType empathy_contact_get_presence (EmpathyContact *contact);
-const gchar * empathy_contact_get_presence_message (EmpathyContact *contact);
-guint empathy_contact_get_handle (EmpathyContact *contact);
-EmpathyCapabilities empathy_contact_get_capabilities (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_sms (EmpathyContact *contact);
-gboolean empathy_contact_can_voip (EmpathyContact *contact);
-gboolean empathy_contact_can_voip_audio (EmpathyContact *contact);
-gboolean empathy_contact_can_voip_video (EmpathyContact *contact);
-gboolean empathy_contact_can_send_files (EmpathyContact *contact);
-gboolean empathy_contact_can_use_rfb_stream_tube (EmpathyContact *contact);
-
-typedef enum {
- EMPATHY_ACTION_CHAT,
- EMPATHY_ACTION_SMS,
- EMPATHY_ACTION_AUDIO_CALL,
- EMPATHY_ACTION_VIDEO_CALL,
- EMPATHY_ACTION_VIEW_LOGS,
- EMPATHY_ACTION_SEND_FILE,
- EMPATHY_ACTION_SHARE_MY_DESKTOP,
-} EmpathyActionType;
-
-gboolean empathy_contact_can_do_action (EmpathyContact *self,
- EmpathyActionType action_type);
-
-#define EMPATHY_TYPE_AVATAR (empathy_avatar_get_type ())
-GType empathy_avatar_get_type (void) G_GNUC_CONST;
-EmpathyAvatar * empathy_avatar_new (const guchar *data,
- gsize len,
- const gchar *format,
- const gchar *filename);
-EmpathyAvatar * empathy_avatar_ref (EmpathyAvatar *avatar);
-void empathy_avatar_unref (EmpathyAvatar *avatar);
-
-gboolean empathy_avatar_save_to_file (EmpathyAvatar *avatar,
- const gchar *filename, GError **error);
-
-GHashTable * empathy_contact_get_location (EmpathyContact *contact);
-const gchar * const * empathy_contact_get_client_types (EmpathyContact *contact);
-gboolean empathy_contact_equal (gconstpointer contact1,
- gconstpointer contact2);
-
-EmpathyContact *empathy_contact_dup_from_tp_contact (TpContact *tp_contact);
-EmpathyContact * empathy_contact_dup_best_for_action (
- FolksIndividual *individual,
- EmpathyActionType action_type);
-
-void empathy_contact_add_to_contact_list (EmpathyContact *self,
- const gchar *message);
-
-void empathy_contact_remove_from_contact_list (EmpathyContact *self);
-
-G_END_DECLS
-
-#endif /* __EMPATHY_CONTACT_H__ */
diff --git a/libempathy/empathy-debug.c b/libempathy/empathy-debug.c
deleted file mode 100644
index d919743e..00000000
--- a/libempathy/empathy-debug.c
+++ /dev/null
@@ -1,167 +0,0 @@
-/* -*- Mode: C; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2; -*- */
-/*
- * 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 "empathy-debug.h"
-
-#include <tp-account-widgets/tpaw-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 },
- { "Dispatcher", EMPATHY_DEBUG_DISPATCHER },
- { "Ft", EMPATHY_DEBUG_FT },
- { "Location", EMPATHY_DEBUG_LOCATION },
- { "Other", EMPATHY_DEBUG_OTHER },
- { "Connectivity", EMPATHY_DEBUG_CONNECTIVITY },
- { "ImportMc4Accounts", EMPATHY_DEBUG_IMPORT_MC4_ACCOUNTS },
- { "Tests", EMPATHY_DEBUG_TESTS },
- { "Voip", EMPATHY_DEBUG_VOIP },
- { "Tls", EMPATHY_DEBUG_TLS },
- { "Sasl", EMPATHY_DEBUG_SASL },
- { "Camera", EMPATHY_DEBUG_CAMERA },
- { 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);
- tpaw_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;
-}
-
-GHashTable *flag_to_keys = NULL;
-
-static const gchar *
-debug_flag_to_key (EmpathyDebugFlags flag)
-{
- if (flag_to_keys == NULL)
- {
- guint i;
-
- flag_to_keys = g_hash_table_new_full (g_direct_hash, g_direct_equal,
- NULL, g_free);
-
- for (i = 0; keys[i].value; i++)
- {
- GDebugKey key = (GDebugKey) keys[i];
- g_hash_table_insert (flag_to_keys, GUINT_TO_POINTER (key.value),
- g_strdup (key.key));
- }
- }
-
- return g_hash_table_lookup (flag_to_keys, GUINT_TO_POINTER (flag));
-}
-
-void
-empathy_debug_free (void)
-{
- if (flag_to_keys == NULL)
- return;
-
- g_hash_table_unref (flag_to_keys);
- flag_to_keys = NULL;
-}
-
-static void
-log_to_debug_sender (EmpathyDebugFlags flag,
- const gchar *message)
-{
- TpDebugSender *sender;
- gchar *domain;
- GTimeVal now;
-
- sender = tp_debug_sender_dup ();
-
- g_get_current_time (&now);
-
- domain = g_strdup_printf ("%s/%s", G_LOG_DOMAIN, debug_flag_to_key (flag));
-
- tp_debug_sender_add_message (sender, &now, domain, G_LOG_LEVEL_DEBUG, message);
-
- g_free (domain);
- g_object_unref (sender);
-}
-
-void
-empathy_debug (EmpathyDebugFlags flag,
- const gchar *format,
- ...)
-{
- gchar *message;
- va_list args;
-
- va_start (args, format);
- message = g_strdup_vprintf (format, args);
- va_end (args);
-
- log_to_debug_sender (flag, message);
-
- if (flag & flags)
- g_log (G_LOG_DOMAIN, G_LOG_LEVEL_DEBUG, "%s", message);
-
- g_free (message);
-}
-
-#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/libempathy/empathy-debug.h b/libempathy/empathy-debug.h
deleted file mode 100644
index 5058f4ba..00000000
--- a/libempathy/empathy-debug.h
+++ /dev/null
@@ -1,99 +0,0 @@
-/* -*- Mode: C; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2; -*- */
-/*
- * 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 <glib.h>
-#include <telepathy-glib/telepathy-glib.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_DISPATCHER = 1 << 5,
- EMPATHY_DEBUG_FT = 1 << 6,
- EMPATHY_DEBUG_LOCATION = 1 << 7,
- EMPATHY_DEBUG_OTHER = 1 << 8,
- EMPATHY_DEBUG_SHARE_DESKTOP = 1 << 9,
- EMPATHY_DEBUG_CONNECTIVITY = 1 << 10,
- EMPATHY_DEBUG_IMPORT_MC4_ACCOUNTS = 1 << 10,
- EMPATHY_DEBUG_TESTS = 1 << 11,
- EMPATHY_DEBUG_VOIP = 1 << 12,
- EMPATHY_DEBUG_TLS = 1 << 13,
- EMPATHY_DEBUG_SASL = 1 << 14,
- EMPATHY_DEBUG_CAMERA = 1 << 15,
-} 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_free (void);
-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) */
-
-#define gabble_debug_free() G_STMT_START { } G_STMT_END
-
-#endif /* defined (DEBUG_FLAG) */
diff --git a/libempathy/empathy-dtd.gresource.xml b/libempathy/empathy-dtd.gresource.xml
deleted file mode 100644
index f222363c..00000000
--- a/libempathy/empathy-dtd.gresource.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<gresources>
- <gresource prefix="/org/gnome/Empathy">
- <file>empathy-status-presets.dtd</file>
- <file>empathy-contact-groups.dtd</file>
- <file>empathy-chatroom-manager.dtd</file>
- </gresource>
-</gresources>
-
diff --git a/libempathy/empathy-ft-factory.c b/libempathy/empathy-ft-factory.c
deleted file mode 100644
index 855ddb98..00000000
--- a/libempathy/empathy-ft-factory.c
+++ /dev/null
@@ -1,302 +0,0 @@
-/*
- * empathy-ft-factory.c - Source for EmpathyFTFactory
- * Copyright (C) 2009 Collabora Ltd.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- *
- * Author: Cosimo Cecchi <cosimo.cecchi@collabora.co.uk>
- */
-
-/* empathy-ft-factory.c */
-
-#include "config.h"
-#include "empathy-ft-factory.h"
-
-#include "empathy-request-util.h"
-#include "empathy-utils.h"
-
-/**
- * SECTION:empathy-ft-factory
- * @title:EmpathyFTFactory
- * @short_description: creates #EmpathyFTHandler objects
- * @include: libempathy/empathy-ft-factory.h
- *
- * #EmpathyFTFactory takes care of the creation of the #EmpathyFTHandler
- * objects used for file transfer. As the creation of the handlers is
- * async, a client will have to connect to the ::new-ft-handler signal
- * to receive the handler.
- * In case of an incoming file transfer, the handler will need the destination
- * file before being useful; as this is usually decided by the user (e.g. with
- * a file selector), a ::new-incoming-transfer is emitted by the factory when
- * a destination file is needed, which can be set later with
- * empathy_ft_factory_set_destination_for_incoming_handler().
- */
-
-G_DEFINE_TYPE (EmpathyFTFactory, empathy_ft_factory, G_TYPE_OBJECT);
-
-enum {
- NEW_FT_HANDLER,
- NEW_INCOMING_TRANSFER,
- LAST_SIGNAL
-};
-
-static EmpathyFTFactory *factory_singleton = NULL;
-static guint signals[LAST_SIGNAL] = { 0 };
-
-/* private structure */
-typedef struct {
- TpBaseClient *handler;
-} EmpathyFTFactoryPriv;
-
-#define GET_PRIV(obj) EMPATHY_GET_PRIV (obj, EmpathyFTFactory)
-
-static GObject *
-do_constructor (GType type,
- guint n_props,
- GObjectConstructParam *props)
-{
- GObject *retval;
-
- if (factory_singleton != NULL)
- {
- retval = g_object_ref (factory_singleton);
- }
- else
- {
- retval = G_OBJECT_CLASS (empathy_ft_factory_parent_class)->constructor
- (type, n_props, props);
-
- factory_singleton = EMPATHY_FT_FACTORY (retval);
- g_object_add_weak_pointer (retval, (gpointer *) &factory_singleton);
- }
-
- return retval;
-}
-
-static void
-empathy_ft_factory_dispose (GObject *object)
-{
- EmpathyFTFactory *self = (EmpathyFTFactory *) object;
- EmpathyFTFactoryPriv *priv = GET_PRIV (self);
-
- tp_clear_object (&priv->handler);
-
- (G_OBJECT_CLASS (empathy_ft_factory_parent_class)->dispose) (object);
-}
-
-static void
-empathy_ft_factory_class_init (EmpathyFTFactoryClass *klass)
-{
- GObjectClass *object_class = G_OBJECT_CLASS (klass);
-
- g_type_class_add_private (klass, sizeof (EmpathyFTFactoryPriv));
-
- object_class->constructor = do_constructor;
- object_class->dispose = empathy_ft_factory_dispose;
-
- /**
- * EmpathyFTFactory::new-ft-handler
- * @factory: the object which received the signal
- * @handler: the handler made available by the factory
- * @error: a #GError or %NULL
- *
- * The signal is emitted when a new #EmpathyFTHandler is available.
- * Note that @handler is never %NULL even if @error is set, as you might want
- * to display the error in an UI; in that case, the handler won't support
- * any transfer.
- */
- signals[NEW_FT_HANDLER] =
- g_signal_new ("new-ft-handler",
- G_TYPE_FROM_CLASS (klass),
- G_SIGNAL_RUN_LAST, 0,
- NULL, NULL,
- g_cclosure_marshal_generic,
- G_TYPE_NONE, 2, EMPATHY_TYPE_FT_HANDLER, G_TYPE_POINTER);
-
- /**
- * EmpathyFTFactory::new-incoming-transfer
- * @factory: the object which received the signal
- * @handler: the incoming handler being constructed
- * @error: a #GError or %NULL
- *
- * The signal is emitted when a new incoming #EmpathyFTHandler is being
- * constructed, and needs a destination #GFile to be useful.
- * Clients that connect to this signal will have to call
- * empathy_ft_factory_set_destination_for_incoming_handler() when they
- * have a #GFile.
- * Note that @handler is never %NULL even if @error is set, as you might want
- * to display the error in an UI; in that case, the handler won't support
- * any transfer.
- */
- signals[NEW_INCOMING_TRANSFER] =
- g_signal_new ("new-incoming-transfer",
- G_TYPE_FROM_CLASS (klass),
- G_SIGNAL_RUN_LAST, 0,
- NULL, NULL,
- g_cclosure_marshal_generic,
- G_TYPE_NONE, 2, EMPATHY_TYPE_FT_HANDLER, G_TYPE_POINTER);
-}
-
-static void
-ft_handler_incoming_ready_cb (EmpathyFTHandler *handler,
- GError *error,
- gpointer user_data)
-{
- EmpathyFTFactory *factory = user_data;
-
- g_signal_emit (factory, signals[NEW_INCOMING_TRANSFER], 0, handler, error);
-}
-
-static void
-handle_channels_cb (TpSimpleHandler *handler,
- TpAccount *account,
- TpConnection *connection,
- GList *channels,
- GList *requests_satisfied,
- gint64 user_action_time,
- TpHandleChannelsContext *context,
- gpointer user_data)
-{
- EmpathyFTFactory *self = user_data;
- GList *l;
-
- for (l = channels; l != NULL; l = g_list_next (l))
- {
- TpChannel *channel = l->data;
-
- if (tp_proxy_get_invalidated (channel) != NULL)
- continue;
-
- if (!TP_IS_FILE_TRANSFER_CHANNEL (channel))
- continue;
-
- /* We handle only incoming FT */
- empathy_ft_handler_new_incoming ((TpFileTransferChannel *) channel,
- ft_handler_incoming_ready_cb, self);
- }
-
-
- tp_handle_channels_context_accept (context);
-}
-
-static void
-empathy_ft_factory_init (EmpathyFTFactory *self)
-{
- EmpathyFTFactoryPriv *priv = G_TYPE_INSTANCE_GET_PRIVATE (self,
- EMPATHY_TYPE_FT_FACTORY, EmpathyFTFactoryPriv);
- TpAccountManager *am;
-
- self->priv = priv;
-
- am = tp_account_manager_dup ();
-
- priv->handler = tp_simple_handler_new_with_am (am, FALSE, FALSE,
- EMPATHY_FT_BUS_NAME_SUFFIX, FALSE, handle_channels_cb, self, NULL);
-
- tp_base_client_take_handler_filter (priv->handler, tp_asv_new (
- TP_PROP_CHANNEL_CHANNEL_TYPE, G_TYPE_STRING,
- TP_IFACE_CHANNEL_TYPE_FILE_TRANSFER,
- TP_PROP_CHANNEL_TARGET_HANDLE_TYPE, G_TYPE_UINT, TP_HANDLE_TYPE_CONTACT,
- /* Only handle *incoming* channels as outgoing FT channels has to be
- * handled by the requester. */
- TP_PROP_CHANNEL_REQUESTED, G_TYPE_BOOLEAN, FALSE,
- NULL));
-
- g_object_unref (am);
-}
-
-static void
-ft_handler_outgoing_ready_cb (EmpathyFTHandler *handler,
- GError *error,
- gpointer user_data)
-{
- EmpathyFTFactory *factory = EMPATHY_FT_FACTORY (user_data);
-
- g_signal_emit (factory, signals[NEW_FT_HANDLER], 0, handler, error);
-
- g_object_unref (factory);
-}
-
-/* public methods */
-
-/**
- * empathy_ft_factory_dup_singleton:
- *
- * Gives the caller a reference to the #EmpathyFTFactory singleton,
- * (creating it if necessary).
- *
- * Return value: an #EmpathyFTFactory object
- */
-EmpathyFTFactory *
-empathy_ft_factory_dup_singleton (void)
-{
- return g_object_new (EMPATHY_TYPE_FT_FACTORY, NULL);
-}
-
-/**
- * empathy_ft_factory_new_transfer_outgoing:
- * @factory: an #EmpathyFTFactory
- * @contact: the #EmpathyContact destination of the transfer
- * @source: the #GFile to be transferred to @contact
- *
- * Trigger the creation of an #EmpathyFTHandler object to send @source to
- * the specified @contact.
- */
-void
-empathy_ft_factory_new_transfer_outgoing (EmpathyFTFactory *factory,
- EmpathyContact *contact,
- GFile *source,
- gint64 action_time)
-{
- g_return_if_fail (EMPATHY_IS_FT_FACTORY (factory));
- g_return_if_fail (EMPATHY_IS_CONTACT (contact));
- g_return_if_fail (G_IS_FILE (source));
-
- empathy_ft_handler_new_outgoing (contact, source, action_time,
- ft_handler_outgoing_ready_cb, g_object_ref (factory));
-}
-
-/**
- * empathy_ft_factory_set_destination_for_incoming_handler:
- * @factory: an #EmpathyFTFactory
- * @handler: the #EmpathyFTHandler to set the destination of
- * @destination: the #GFile destination of the transfer
- *
- * Sets @destination as destination file for the transfer. After the call of
- * this method, the ::new-ft-handler will be emitted for the incoming handler.
- */
-void
-empathy_ft_factory_set_destination_for_incoming_handler (
- EmpathyFTFactory *factory,
- EmpathyFTHandler *handler,
- GFile *destination)
-{
- g_return_if_fail (EMPATHY_IS_FT_FACTORY (factory));
- g_return_if_fail (EMPATHY_IS_FT_HANDLER (handler));
- g_return_if_fail (G_IS_FILE (destination));
-
- empathy_ft_handler_incoming_set_destination (handler, destination);
-
- g_signal_emit (factory, signals[NEW_FT_HANDLER], 0, handler, NULL);
-}
-
-gboolean
-empathy_ft_factory_register (EmpathyFTFactory *self,
- GError **error)
-{
- EmpathyFTFactoryPriv *priv = GET_PRIV (self);
-
- return tp_base_client_register (priv->handler, error);
-}
diff --git a/libempathy/empathy-ft-factory.h b/libempathy/empathy-ft-factory.h
deleted file mode 100644
index dcbffe1e..00000000
--- a/libempathy/empathy-ft-factory.h
+++ /dev/null
@@ -1,78 +0,0 @@
-/*
- * empathy-ft-factory.h - Header for EmpathyFTFactory
- * Copyright (C) 2009 Collabora Ltd.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- *
- * Author: Cosimo Cecchi <cosimo.cecchi@collabora.co.uk>
- */
-
-/* empathy-ft-factory.h */
-
-#ifndef __EMPATHY_FT_FACTORY_H__
-#define __EMPATHY_FT_FACTORY_H__
-
-#include <glib-object.h>
-#include <gio/gio.h>
-
-#include "empathy-contact.h"
-#include "empathy-ft-handler.h"
-
-G_BEGIN_DECLS
-
-#define EMPATHY_TYPE_FT_FACTORY empathy_ft_factory_get_type()
-#define EMPATHY_FT_FACTORY(obj) \
- (G_TYPE_CHECK_INSTANCE_CAST ((obj), \
- EMPATHY_TYPE_FT_FACTORY, EmpathyFTFactory))
-#define EMPATHY_FT_FACTORY_CLASS(klass) \
- (G_TYPE_CHECK_CLASS_CAST ((klass), \
- EMPATHY_TYPE_FT_FACTORY, EmpathyFTFactoryClass))
-#define EMPATHY_IS_FT_FACTORY(obj) \
- (G_TYPE_CHECK_INSTANCE_TYPE ((obj), EMPATHY_TYPE_FT_FACTORY))
-#define EMPATHY_IS_FT_FACTORY_CLASS(klass) \
- (G_TYPE_CHECK_CLASS_TYPE ((klass), EMPATHY_TYPE_FT_FACTORY))
-#define EMPATHY_FT_FACTORY_GET_CLASS(obj) \
- (G_TYPE_INSTANCE_GET_CLASS ((obj), \
- EMPATHY_TYPE_FT_FACTORY, EmpathyFTFactoryClass))
-
-typedef struct {
- GObject parent;
- gpointer priv;
-} EmpathyFTFactory;
-
-typedef struct {
- GObjectClass parent_class;
-} EmpathyFTFactoryClass;
-
-GType empathy_ft_factory_get_type (void);
-
-/* public methods */
-EmpathyFTFactory* empathy_ft_factory_dup_singleton (void);
-void empathy_ft_factory_new_transfer_outgoing (EmpathyFTFactory *factory,
- EmpathyContact *contact,
- GFile *source,
- gint64 user_action_time);
-void empathy_ft_factory_set_destination_for_incoming_handler (
- EmpathyFTFactory *factory,
- EmpathyFTHandler *handler,
- GFile *destination);
-
-gboolean empathy_ft_factory_register (EmpathyFTFactory *self,
- GError **error);
-
-G_END_DECLS
-
-#endif /* __EMPATHY_FT_FACTORY_H__ */
-
diff --git a/libempathy/empathy-ft-handler.c b/libempathy/empathy-ft-handler.c
deleted file mode 100644
index d7e112a2..00000000
--- a/libempathy/empathy-ft-handler.c
+++ /dev/null
@@ -1,1730 +0,0 @@
-/*
- * empathy-ft-handler.c - Source for EmpathyFTHandler
- * Copyright (C) 2009 Collabora Ltd.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- *
- * Author: Cosimo Cecchi <cosimo.cecchi@collabora.co.uk>
- */
-
-/* empathy-ft-handler.c */
-
-#include "config.h"
-#include "empathy-ft-handler.h"
-
-#include <glib/gi18n-lib.h>
-#include <tp-account-widgets/tpaw-time.h>
-#include <tp-account-widgets/tpaw-utils.h>
-
-#include "empathy-utils.h"
-
-#define DEBUG_FLAG EMPATHY_DEBUG_FT
-#include "empathy-debug.h"
-
-/**
- * SECTION:empathy-ft-handler
- * @title: EmpathyFTHandler
- * @short_description: an object representing a File Transfer
- * @include: libempathy/empathy-ft-handler
- *
- * #EmpathyFTHandler is the object which represents a File Transfer with all
- * its properties.
- * The creation of an #EmpathyFTHandler is done with
- * empathy_ft_handler_new_outgoing() or empathy_ft_handler_new_incoming(),
- * even though clients should not need to call them directly, as
- * #EmpathyFTFactory does it for them. Remember that for the file transfer
- * to work with an incoming handler,
- * empathy_ft_handler_incoming_set_destination() should be called after
- * empathy_ft_handler_new_incoming(). #EmpathyFTFactory does this
- * automatically.
- * It's important to note that, as the creation of the handlers is async, once
- * an handler is created, it already has all the interesting properties set,
- * like filename, total bytes, content type and so on, making it useful
- * to be displayed in an UI.
- * The transfer API works like a state machine; it has three signals,
- * ::transfer-started, ::transfer-progress, ::transfer-done, which will be
- * emitted in the relevant phases.
- * In addition, if the handler is created with checksumming enabled,
- * other three signals (::hashing-started, ::hashing-progress, ::hashing-done)
- * will be emitted before or after the transfer, depending on the direction
- * (respectively outgoing and incoming) of the handler.
- * At any time between the call to empathy_ft_handler_start_transfer() and
- * the last signal, a ::transfer-error can be emitted, indicating that an
- * error has happened in the operation. The message of the error is localized
- * to use in an UI.
- */
-
-G_DEFINE_TYPE (EmpathyFTHandler, empathy_ft_handler, G_TYPE_OBJECT)
-
-#define GET_PRIV(obj) EMPATHY_GET_PRIV (obj, EmpathyFTHandler)
-
-#define BUFFER_SIZE 4096
-
-enum {
- PROP_CHANNEL = 1,
- PROP_G_FILE,
- PROP_CONTACT,
- PROP_CONTENT_TYPE,
- PROP_DESCRIPTION,
- PROP_FILENAME,
- PROP_MODIFICATION_TIME,
- PROP_TOTAL_BYTES,
- PROP_TRANSFERRED_BYTES,
- PROP_USER_ACTION_TIME
-};
-
-enum {
- HASHING_STARTED,
- HASHING_PROGRESS,
- HASHING_DONE,
- TRANSFER_STARTED,
- TRANSFER_PROGRESS,
- TRANSFER_DONE,
- TRANSFER_ERROR,
- LAST_SIGNAL
-};
-
-typedef struct {
- GInputStream *stream;
- GError *error /* comment to make the style checker happy */;
- guchar *buffer;
- GChecksum *checksum;
- gssize total_read;
- guint64 total_bytes;
- EmpathyFTHandler *handler;
-} HashingData;
-
-typedef struct {
- EmpathyFTHandlerReadyCallback callback;
- gpointer user_data;
- EmpathyFTHandler *handler;
-} CallbacksData;
-
-/* private data */
-typedef struct {
- gboolean dispose_run;
-
- GFile *gfile;
- TpFileTransferChannel *channel;
- GCancellable *cancellable;
- gboolean use_hash;
-
- /* request for the new transfer */
- GHashTable *request;
-
- /* transfer properties */
- EmpathyContact *contact;
- gchar *content_type;
- gchar *filename;
- gchar *description;
- guint64 total_bytes;
- guint64 transferred_bytes;
- guint64 mtime;
- gchar *content_hash;
- TpFileHashType content_hash_type;
-
- gint64 user_action_time;
-
- /* time and speed */
- gdouble speed;
- guint remaining_time;
- gint64 last_update_time;
-
- gboolean is_completed;
-} EmpathyFTHandlerPriv;
-
-static guint signals[LAST_SIGNAL] = { 0 };
-
-static gboolean do_hash_job_incoming (GIOSchedulerJob *job,
- GCancellable *cancellable, gpointer user_data);
-
-/* GObject implementations */
-static void
-do_get_property (GObject *object,
- guint property_id,
- GValue *value,
- GParamSpec *pspec)
-{
- EmpathyFTHandlerPriv *priv = GET_PRIV (object);
-
- switch (property_id)
- {
- case PROP_CONTACT:
- g_value_set_object (value, priv->contact);
- break;
- case PROP_CONTENT_TYPE:
- g_value_set_string (value, priv->content_type);
- break;
- case PROP_DESCRIPTION:
- g_value_set_string (value, priv->description);
- break;
- case PROP_FILENAME:
- g_value_set_string (value, priv->filename);
- break;
- case PROP_MODIFICATION_TIME:
- g_value_set_uint64 (value, priv->mtime);
- break;
- case PROP_TOTAL_BYTES:
- g_value_set_uint64 (value, priv->total_bytes);
- break;
- case PROP_TRANSFERRED_BYTES:
- g_value_set_uint64 (value, priv->transferred_bytes);
- break;
- case PROP_G_FILE:
- g_value_set_object (value, priv->gfile);
- break;
- case PROP_CHANNEL:
- g_value_set_object (value, priv->channel);
- break;
- case PROP_USER_ACTION_TIME:
- g_value_set_int64 (value, priv->user_action_time);
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
- }
-}
-
-static void
-do_set_property (GObject *object,
- guint property_id,
- const GValue *value,
- GParamSpec *pspec)
-{
- EmpathyFTHandlerPriv *priv = GET_PRIV (object);
-
- switch (property_id)
- {
- case PROP_CONTACT:
- priv->contact = g_value_dup_object (value);
- break;
- case PROP_CONTENT_TYPE:
- priv->content_type = g_value_dup_string (value);
- break;
- case PROP_DESCRIPTION:
- priv->description = g_value_dup_string (value);
- break;
- case PROP_FILENAME:
- priv->filename = g_value_dup_string (value);
- break;
- case PROP_MODIFICATION_TIME:
- priv->mtime = g_value_get_uint64 (value);
- break;
- case PROP_TOTAL_BYTES:
- priv->total_bytes = g_value_get_uint64 (value);
- break;
- case PROP_TRANSFERRED_BYTES:
- priv->transferred_bytes = g_value_get_uint64 (value);
- break;
- case PROP_G_FILE:
- priv->gfile = g_value_dup_object (value);
- break;
- case PROP_CHANNEL:
- priv->channel = g_value_dup_object (value);
- break;
- case PROP_USER_ACTION_TIME:
- priv->user_action_time = g_value_get_int64 (value);
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
- }
-}
-
-static void
-do_dispose (GObject *object)
-{
- EmpathyFTHandlerPriv *priv = GET_PRIV (object);
-
- if (priv->dispose_run)
- return;
-
- priv->dispose_run = TRUE;
-
- if (priv->contact != NULL) {
- g_object_unref (priv->contact);
- priv->contact = NULL;
- }
-
- if (priv->gfile != NULL) {
- g_object_unref (priv->gfile);
- priv->gfile = NULL;
- }
-
- if (priv->channel != NULL) {
- tp_channel_close_async (TP_CHANNEL (priv->channel), NULL, NULL);
- g_object_unref (priv->channel);
- priv->channel = NULL;
- }
-
- if (priv->cancellable != NULL) {
- g_object_unref (priv->cancellable);
- priv->cancellable = NULL;
- }
-
- if (priv->request != NULL)
- {
- g_hash_table_unref (priv->request);
- priv->request = NULL;
- }
-
- G_OBJECT_CLASS (empathy_ft_handler_parent_class)->dispose (object);
-}
-
-static void
-do_finalize (GObject *object)
-{
- EmpathyFTHandlerPriv *priv = GET_PRIV (object);
-
- DEBUG ("%p", object);
-
- g_free (priv->content_type);
- priv->content_type = NULL;
-
- g_free (priv->filename);
- priv->filename = NULL;
-
- g_free (priv->description);
- priv->description = NULL;
-
- g_free (priv->content_hash);
- priv->content_hash = NULL;
-
- G_OBJECT_CLASS (empathy_ft_handler_parent_class)->finalize (object);
-}
-
-static void
-empathy_ft_handler_class_init (EmpathyFTHandlerClass *klass)
-{
- GObjectClass *object_class = G_OBJECT_CLASS (klass);
- GParamSpec *param_spec;
-
- g_type_class_add_private (klass, sizeof (EmpathyFTHandlerPriv));
-
- object_class->get_property = do_get_property;
- object_class->set_property = do_set_property;
- object_class->dispose = do_dispose;
- object_class->finalize = do_finalize;
-
- /* properties */
-
- /**
- * EmpathyFTHandler:contact:
- *
- * The remote #EmpathyContact for the transfer
- */
- param_spec = g_param_spec_object ("contact",
- "contact", "The remote contact",
- EMPATHY_TYPE_CONTACT,
- G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | G_PARAM_CONSTRUCT_ONLY);
- g_object_class_install_property (object_class, PROP_CONTACT, param_spec);
-
- /**
- * EmpathyFTHandler:content-type:
- *
- * The content type of the file being transferred
- */
- param_spec = g_param_spec_string ("content-type",
- "content-type", "The content type of the file", NULL,
- G_PARAM_READABLE | G_PARAM_STATIC_STRINGS);
- g_object_class_install_property (object_class,
- PROP_CONTENT_TYPE, param_spec);
-
- /**
- * EmpathyFTHandler:description:
- *
- * The description of the file being transferred
- */
- param_spec = g_param_spec_string ("description",
- "description", "The description of the file", NULL,
- G_PARAM_READABLE | G_PARAM_STATIC_STRINGS);
- g_object_class_install_property (object_class,
- PROP_DESCRIPTION, param_spec);
-
- /**
- * EmpathyFTHandler:filename:
- *
- * The name of the file being transferred
- */
- param_spec = g_param_spec_string ("filename",
- "filename", "The name of the file", NULL,
- G_PARAM_READABLE | G_PARAM_STATIC_STRINGS);
- g_object_class_install_property (object_class,
- PROP_FILENAME, param_spec);
-
- /**
- * EmpathyFTHandler:modification-time:
- *
- * The modification time of the file being transferred
- */
- param_spec = g_param_spec_uint64 ("modification-time",
- "modification-time", "The mtime of the file", 0,
- G_MAXUINT64, 0, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS);
- g_object_class_install_property (object_class,
- PROP_MODIFICATION_TIME, param_spec);
-
- /**
- * EmpathyFTHandler:total-bytes:
- *
- * The size (in bytes) of the file being transferred
- */
- param_spec = g_param_spec_uint64 ("total-bytes",
- "total-bytes", "The size of the file", 0,
- G_MAXUINT64, 0, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS);
- g_object_class_install_property (object_class,
- PROP_TOTAL_BYTES, param_spec);
-
- /**
- * EmpathyFTHandler:transferred-bytes:
- *
- * The number of the bytes already transferred
- */
- param_spec = g_param_spec_uint64 ("transferred-bytes",
- "transferred-bytes", "The number of bytes already transferred", 0,
- G_MAXUINT64, 0, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS);
- g_object_class_install_property (object_class,
- PROP_TRANSFERRED_BYTES, param_spec);
-
- /**
- * EmpathyFTHandler:gfile:
- *
- * The #GFile object where the transfer actually happens
- */
- param_spec = g_param_spec_object ("gfile",
- "gfile", "The GFile we're handling",
- G_TYPE_FILE,
- G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
- g_object_class_install_property (object_class, PROP_G_FILE, param_spec);
-
- /**
- * EmpathyFTHandler:channel:
- *
- * The underlying #TpFileTransferChannel managing the transfer
- */
- param_spec = g_param_spec_object ("channel",
- "channel", "The file transfer channel",
- TP_TYPE_FILE_TRANSFER_CHANNEL,
- G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | G_PARAM_CONSTRUCT_ONLY);
- g_object_class_install_property (object_class, PROP_CHANNEL, param_spec);
-
- param_spec = g_param_spec_int64 ("user-action-time", "user action time",
- "User action time",
- 0, G_MAXINT64, 0,
- G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | G_PARAM_CONSTRUCT_ONLY);
- g_object_class_install_property (object_class, PROP_USER_ACTION_TIME,
- param_spec);
-
- /* signals */
-
- /**
- * EmpathyFTHandler::transfer-started
- * @handler: the object which has received the signal
- * @channel: the #TpFileTransferChannel for which the transfer has started
- *
- * This signal is emitted when the actual transfer starts.
- */
- signals[TRANSFER_STARTED] =
- g_signal_new ("transfer-started", G_TYPE_FROM_CLASS (klass),
- G_SIGNAL_RUN_LAST, 0, NULL, NULL,
- g_cclosure_marshal_generic,
- G_TYPE_NONE,
- 1, TP_TYPE_FILE_TRANSFER_CHANNEL);
-
- /**
- * EmpathyFTHandler::transfer-done
- * @handler: the object which has received the signal
- * @channel: the #TpFileTransferChannel for which the transfer has started
- *
- * This signal will be emitted when the actual transfer is completed
- * successfully.
- */
- signals[TRANSFER_DONE] =
- g_signal_new ("transfer-done", G_TYPE_FROM_CLASS (klass),
- G_SIGNAL_RUN_LAST, 0, NULL, NULL,
- g_cclosure_marshal_generic,
- G_TYPE_NONE,
- 1, TP_TYPE_FILE_TRANSFER_CHANNEL);
-
- /**
- * EmpathyFTHandler::transfer-error
- * @handler: the object which has received the signal
- * @error: a #GError
- *
- * This signal can be emitted anytime between the call to
- * empathy_ft_handler_start_transfer() and the last expected signal
- * (::transfer-done or ::hashing-done), and it's guaranteed to be the last
- * signal coming from the handler, meaning that no other operation will
- * take place after this signal.
- */
- signals[TRANSFER_ERROR] =
- g_signal_new ("transfer-error", G_TYPE_FROM_CLASS (klass),
- G_SIGNAL_RUN_LAST, 0, NULL, NULL,
- g_cclosure_marshal_generic,
- G_TYPE_NONE,
- 1, G_TYPE_POINTER);
-
- /**
- * EmpathyFTHandler::transfer-progress
- * @handler: the object which has received the signal
- * @current_bytes: the bytes currently transferred
- * @total_bytes: the total bytes of the handler
- * @remaining_time: the number of seconds remaining for the transfer
- * to be completed
- * @speed: the current speed of the transfer (in KB/s)
- *
- * This signal is emitted to notify clients of the progress of the
- * transfer.
- */
- signals[TRANSFER_PROGRESS] =
- g_signal_new ("transfer-progress", G_TYPE_FROM_CLASS (klass),
- G_SIGNAL_RUN_LAST, 0, NULL, NULL,
- g_cclosure_marshal_generic,
- G_TYPE_NONE,
- 4, G_TYPE_UINT64, G_TYPE_UINT64, G_TYPE_UINT, G_TYPE_DOUBLE);
-
- /**
- * EmpathyFTHandler::hashing-started
- * @handler: the object which has received the signal
- *
- * This signal is emitted when the hashing operation of the handler
- * is started. Note that this might happen or not, depending on the CM
- * and remote contact capabilities. Clients shoud use
- * empathy_ft_handler_get_use_hash() before calling
- * empathy_ft_handler_start_transfer() to know whether they should connect
- * to this signal.
- */
- signals[HASHING_STARTED] =
- g_signal_new ("hashing-started", G_TYPE_FROM_CLASS (klass),
- G_SIGNAL_RUN_LAST, 0, NULL, NULL,
- g_cclosure_marshal_generic,
- G_TYPE_NONE, 0);
-
- /**
- * EmpathyFTHandler::hashing-progress
- * @handler: the object which has received the signal
- * @current_bytes: the bytes currently hashed
- * @total_bytes: the total bytes of the handler
- *
- * This signal is emitted to notify clients of the progress of the
- * hashing operation.
- */
- signals[HASHING_PROGRESS] =
- g_signal_new ("hashing-progress", G_TYPE_FROM_CLASS (klass),
- G_SIGNAL_RUN_LAST, 0, NULL, NULL,
- g_cclosure_marshal_generic,
- G_TYPE_NONE,
- 2, G_TYPE_UINT64, G_TYPE_UINT64);
-
- /**
- * EmpathyFTHandler::hashing-done
- * @handler: the object which has received the signal
- *
- * This signal is emitted when the hashing operation of the handler
- * is completed.
- */
- signals[HASHING_DONE] =
- g_signal_new ("hashing-done", G_TYPE_FROM_CLASS (klass),
- G_SIGNAL_RUN_LAST, 0, NULL, NULL,
- g_cclosure_marshal_generic,
- G_TYPE_NONE, 0);
-}
-
-static void
-empathy_ft_handler_init (EmpathyFTHandler *self)
-{
- EmpathyFTHandlerPriv *priv = G_TYPE_INSTANCE_GET_PRIVATE (self,
- EMPATHY_TYPE_FT_HANDLER, EmpathyFTHandlerPriv);
-
- self->priv = priv;
- priv->cancellable = g_cancellable_new ();
-}
-
-/* private functions */
-
-static void
-hash_data_free (HashingData *data)
-{
- g_free (data->buffer);
-
- if (data->stream != NULL)
- g_object_unref (data->stream);
-
- if (data->checksum != NULL)
- g_checksum_free (data->checksum);
-
- if (data->error != NULL)
- g_error_free (data->error);
-
- if (data->handler != NULL)
- g_object_unref (data->handler);
-
- g_slice_free (HashingData, data);
-}
-
-static GChecksumType
-tp_file_hash_to_g_checksum (TpFileHashType type)
-{
- GChecksumType retval;
-
- switch (type)
- {
- case TP_FILE_HASH_TYPE_MD5:
- retval = G_CHECKSUM_MD5;
- break;
- case TP_FILE_HASH_TYPE_SHA1:
- retval = G_CHECKSUM_SHA1;
- break;
- case TP_FILE_HASH_TYPE_SHA256:
- retval = G_CHECKSUM_SHA256;
- break;
- case TP_FILE_HASH_TYPE_NONE:
- default:
- g_assert_not_reached ();
- break;
- }
-
- return retval;
-}
-
-static void
-check_hash_incoming (EmpathyFTHandler *handler)
-{
- HashingData *hash_data;
- EmpathyFTHandlerPriv *priv = GET_PRIV (handler);
-
- if (!TPAW_STR_EMPTY (priv->content_hash))
- {
- hash_data = g_slice_new0 (HashingData);
- hash_data->total_bytes = priv->total_bytes;
- hash_data->handler = g_object_ref (handler);
- hash_data->checksum = g_checksum_new
- (tp_file_hash_to_g_checksum (priv->content_hash_type));
-
- g_signal_emit (handler, signals[HASHING_STARTED], 0);
-
- g_io_scheduler_push_job (do_hash_job_incoming, hash_data, NULL,
- G_PRIORITY_DEFAULT, priv->cancellable);
- }
-}
-
-static void
-emit_error_signal (EmpathyFTHandler *handler,
- const GError *error)
-{
- EmpathyFTHandlerPriv *priv = GET_PRIV (handler);
-
- DEBUG ("Error in transfer: %s\n", error->message);
-
- if (!g_cancellable_is_cancelled (priv->cancellable))
- g_cancellable_cancel (priv->cancellable);
-
- g_signal_emit (handler, signals[TRANSFER_ERROR], 0, error);
-}
-
-static void
-update_remaining_time_and_speed (EmpathyFTHandler *handler,
- guint64 transferred_bytes)
-{
- EmpathyFTHandlerPriv *priv = GET_PRIV (handler);
- gint64 elapsed_time, current_time;
- guint64 transferred, last_transferred_bytes;
- gdouble speed;
- gint remaining_time;
-
- last_transferred_bytes = priv->transferred_bytes;
- priv->transferred_bytes = transferred_bytes;
-
- current_time = tpaw_time_get_current ();
- elapsed_time = current_time - priv->last_update_time;
-
- if (elapsed_time >= 1)
- {
- transferred = transferred_bytes - last_transferred_bytes;
- speed = (gdouble) transferred / (gdouble) elapsed_time;
- remaining_time = (priv->total_bytes - priv->transferred_bytes) / speed;
- priv->speed = speed;
- priv->remaining_time = remaining_time;
- priv->last_update_time = current_time;
- }
-}
-
-static void
-ft_transfer_transferred_bytes_cb (TpFileTransferChannel *channel,
- GParamSpec *pspec,
- EmpathyFTHandler *handler)
-{
- EmpathyFTHandlerPriv *priv = GET_PRIV (handler);
- guint64 bytes;
-
- if (empathy_ft_handler_is_cancelled (handler))
- return;
-
- bytes = tp_file_transfer_channel_get_transferred_bytes (channel);
-
- if (priv->transferred_bytes == 0)
- {
- priv->last_update_time = tpaw_time_get_current ();
- g_signal_emit (handler, signals[TRANSFER_STARTED], 0, channel);
- }
-
- if (priv->transferred_bytes != bytes)
- {
- update_remaining_time_and_speed (handler, bytes);
-
- g_signal_emit (handler, signals[TRANSFER_PROGRESS], 0,
- bytes, priv->total_bytes, priv->remaining_time,
- priv->speed);
- }
-}
-
-static void
-ft_transfer_provide_cb (GObject *source,
- GAsyncResult *result,
- gpointer user_data)
-{
- TpFileTransferChannel *channel = TP_FILE_TRANSFER_CHANNEL (source);
- EmpathyFTHandler *handler = user_data;
- GError *error = NULL;
-
- if (!tp_file_transfer_channel_provide_file_finish (channel, result, &error))
- {
- emit_error_signal (handler, error);
- g_clear_error (&error);
- }
-}
-
-static void
-ft_transfer_accept_cb (GObject *source,
- GAsyncResult *result,
- gpointer user_data)
-{
- TpFileTransferChannel *channel = TP_FILE_TRANSFER_CHANNEL (source);
- EmpathyFTHandler *handler = user_data;
- GError *error = NULL;
-
- if (!tp_file_transfer_channel_accept_file_finish (channel, result, &error))
- {
- emit_error_signal (handler, error);
- g_clear_error (&error);
- }
-}
-
-static GError *
-error_from_state_change_reason (TpFileTransferStateChangeReason reason)
-{
- const char *string;
- GError *retval = NULL;
-
- string = NULL;
-
- switch (reason)
- {
- case TP_FILE_TRANSFER_STATE_CHANGE_REASON_NONE:
- string = _("No reason was specified");
- break;
- case TP_FILE_TRANSFER_STATE_CHANGE_REASON_REQUESTED:
- string = _("The change in state was requested");
- break;
- case TP_FILE_TRANSFER_STATE_CHANGE_REASON_LOCAL_STOPPED:
- string = _("You canceled the file transfer");
- break;
- case TP_FILE_TRANSFER_STATE_CHANGE_REASON_REMOTE_STOPPED:
- string = _("The other participant canceled the file transfer");
- break;
- case TP_FILE_TRANSFER_STATE_CHANGE_REASON_LOCAL_ERROR:
- string = _("Error while trying to transfer the file");
- break;
- case TP_FILE_TRANSFER_STATE_CHANGE_REASON_REMOTE_ERROR:
- string = _("The other participant is unable to transfer the file");
- break;
- default:
- string = _("Unknown reason");
- break;
- }
-
- retval = g_error_new_literal (EMPATHY_FT_ERROR_QUARK,
- EMPATHY_FT_ERROR_TP_ERROR, string);
-
- return retval;
-}
-
-static void
-ft_transfer_state_cb (TpFileTransferChannel *channel,
- GParamSpec *pspec,
- EmpathyFTHandler *handler)
-{
- EmpathyFTHandlerPriv *priv = GET_PRIV (handler);
- TpFileTransferStateChangeReason reason;
- TpFileTransferState state = tp_file_transfer_channel_get_state (
- channel, &reason);
-
- if (state == TP_FILE_TRANSFER_STATE_COMPLETED)
- {
- priv->is_completed = TRUE;
- g_signal_emit (handler, signals[TRANSFER_DONE], 0, channel);
-
- tp_channel_close_async (TP_CHANNEL (channel), NULL, NULL);
-
- if (empathy_ft_handler_is_incoming (handler) && priv->use_hash)
- {
- check_hash_incoming (handler);
- }
- }
- else if (state == TP_FILE_TRANSFER_STATE_CANCELLED)
- {
- GError *error = error_from_state_change_reason (reason);
- emit_error_signal (handler, error);
- g_clear_error (&error);
- }
-}
-
-static void
-ft_handler_create_channel_cb (GObject *source,
- GAsyncResult *result,
- gpointer user_data)
-{
- EmpathyFTHandler *handler = user_data;
- EmpathyFTHandlerPriv *priv = GET_PRIV (handler);
- GError *error = NULL;
- TpChannel *channel;
-
- DEBUG ("Dispatcher create channel CB");
-
- channel = tp_account_channel_request_create_and_handle_channel_finish (
- TP_ACCOUNT_CHANNEL_REQUEST (source), result, NULL, &error);
-
- if (channel == NULL)
- DEBUG ("Failed to request FT channel: %s", error->message);
- else
- g_cancellable_set_error_if_cancelled (priv->cancellable, &error);
-
- if (error != NULL)
- {
- emit_error_signal (handler, error);
-
- g_clear_object (&channel);
- g_error_free (error);
- return;
- }
-
- priv->channel = TP_FILE_TRANSFER_CHANNEL (channel);
-
- tp_g_signal_connect_object (priv->channel, "notify::state",
- G_CALLBACK (ft_transfer_state_cb), handler, 0);
- tp_g_signal_connect_object (priv->channel, "notify::transferred-bytes",
- G_CALLBACK (ft_transfer_transferred_bytes_cb), handler, 0);
-
- tp_file_transfer_channel_provide_file_async (priv->channel, priv->gfile,
- ft_transfer_provide_cb, handler);
-}
-
-static void
-ft_handler_push_to_dispatcher (EmpathyFTHandler *handler)
-{
- TpAccount *account;
- EmpathyFTHandlerPriv *priv = GET_PRIV (handler);
- TpAccountChannelRequest *req;
-
- DEBUG ("Pushing request to the dispatcher");
-
- account = empathy_contact_get_account (priv->contact);
-
- req = tp_account_channel_request_new (account, priv->request,
- priv->user_action_time);
-
- tp_account_channel_request_create_and_handle_channel_async (req, NULL,
- ft_handler_create_channel_cb, handler);
-
- g_object_unref (req);
-}
-
-static void
-ft_handler_populate_outgoing_request (EmpathyFTHandler *handler)
-{
- guint contact_handle;
- EmpathyFTHandlerPriv *priv = GET_PRIV (handler);
- gchar *uri;
-
- contact_handle = empathy_contact_get_handle (priv->contact);
- uri = g_file_get_uri (priv->gfile);
-
- priv->request = tp_asv_new (
- TP_PROP_CHANNEL_CHANNEL_TYPE, G_TYPE_STRING,
- TP_IFACE_CHANNEL_TYPE_FILE_TRANSFER,
- TP_PROP_CHANNEL_TARGET_HANDLE_TYPE, G_TYPE_UINT,
- TP_HANDLE_TYPE_CONTACT,
- TP_PROP_CHANNEL_TARGET_HANDLE, G_TYPE_UINT,
- contact_handle,
- TP_PROP_CHANNEL_TYPE_FILE_TRANSFER_CONTENT_TYPE, G_TYPE_STRING,
- priv->content_type,
- TP_PROP_CHANNEL_TYPE_FILE_TRANSFER_FILENAME, G_TYPE_STRING,
- priv->filename,
- TP_PROP_CHANNEL_TYPE_FILE_TRANSFER_SIZE, G_TYPE_UINT64,
- priv->total_bytes,
- TP_PROP_CHANNEL_TYPE_FILE_TRANSFER_DATE, G_TYPE_UINT64,
- priv->mtime,
- TP_PROP_CHANNEL_TYPE_FILE_TRANSFER_URI, G_TYPE_STRING, uri,
- NULL);
-
- g_free (uri);
-}
-
-static gboolean
-hash_job_done (gpointer user_data)
-{
- HashingData *hash_data = user_data;
- EmpathyFTHandler *handler = hash_data->handler;
- EmpathyFTHandlerPriv *priv;
- GError *error = NULL;
-
- DEBUG ("Closing stream after hashing.");
-
- priv = GET_PRIV (handler);
-
- if (hash_data->error != NULL)
- {
- error = hash_data->error;
- hash_data->error = NULL;
- goto cleanup;
- }
-
- DEBUG ("Got file hash %s", g_checksum_get_string (hash_data->checksum));
-
- if (empathy_ft_handler_is_incoming (handler))
- {
- if (g_strcmp0 (g_checksum_get_string (hash_data->checksum),
- priv->content_hash))
- {
- DEBUG ("Hash mismatch when checking incoming handler: "
- "received %s, calculated %s", priv->content_hash,
- g_checksum_get_string (hash_data->checksum));
-
- error = g_error_new_literal (EMPATHY_FT_ERROR_QUARK,
- EMPATHY_FT_ERROR_HASH_MISMATCH,
- _("File transfer completed, but the file was corrupted"));
- goto cleanup;
- }
- else
- {
- DEBUG ("Hash verification matched, received %s, calculated %s",
- priv->content_hash,
- g_checksum_get_string (hash_data->checksum));
- }
- }
- else
- {
- /* set the checksum in the request...
- * org.freedesktop.Telepathy.Channel.Type.FileTransfer.ContentHash
- */
- tp_asv_set_string (priv->request,
- TP_PROP_CHANNEL_TYPE_FILE_TRANSFER_CONTENT_HASH,
- g_checksum_get_string (hash_data->checksum));
- }
-
-cleanup:
-
- if (error != NULL)
- {
- emit_error_signal (handler, error);
- g_clear_error (&error);
- }
- else
- {
- g_signal_emit (handler, signals[HASHING_DONE], 0);
-
- if (!empathy_ft_handler_is_incoming (handler))
- /* the request is complete now, push it to the dispatcher */
- ft_handler_push_to_dispatcher (handler);
- }
-
- hash_data_free (hash_data);
-
- return FALSE;
-}
-
-static gboolean
-emit_hashing_progress (gpointer user_data)
-{
- HashingData *hash_data = user_data;
-
- g_signal_emit (hash_data->handler, signals[HASHING_PROGRESS], 0,
- (guint64) hash_data->total_read, (guint64) hash_data->total_bytes);
-
- return FALSE;
-}
-
-static gboolean
-do_hash_job (GIOSchedulerJob *job,
- GCancellable *cancellable,
- gpointer user_data)
-{
- HashingData *hash_data = user_data;
- gssize bytes_read;
- GError *error = NULL;
-
-again:
- if (hash_data->buffer == NULL)
- hash_data->buffer = g_malloc0 (BUFFER_SIZE);
-
- bytes_read = g_input_stream_read (hash_data->stream, hash_data->buffer,
- BUFFER_SIZE, cancellable, &error);
- if (error != NULL)
- goto out;
-
- hash_data->total_read += bytes_read;
-
- /* we now have the chunk */
- if (bytes_read > 0)
- {
- g_checksum_update (hash_data->checksum, hash_data->buffer, bytes_read);
- g_io_scheduler_job_send_to_mainloop_async (job, emit_hashing_progress,
- hash_data, NULL);
-
- g_free (hash_data->buffer);
- hash_data->buffer = NULL;
-
- goto again;
- }
- else
- {
- g_input_stream_close (hash_data->stream, cancellable, &error);
- }
-
-out:
- if (error != NULL)
- hash_data->error = error;
-
- g_io_scheduler_job_send_to_mainloop_async (job, hash_job_done,
- hash_data, NULL);
-
- return FALSE;
-}
-
-static gboolean
-do_hash_job_incoming (GIOSchedulerJob *job,
- GCancellable *cancellable,
- gpointer user_data)
-{
- HashingData *hash_data = user_data;
- EmpathyFTHandler *handler = hash_data->handler;
- EmpathyFTHandlerPriv *priv = GET_PRIV (handler);
- GError *error = NULL;
-
- DEBUG ("checking integrity for incoming handler");
-
- /* need to get the stream first */
- hash_data->stream =
- G_INPUT_STREAM (g_file_read (priv->gfile, cancellable, &error));
-
- if (error != NULL)
- {
- hash_data->error = error;
- g_io_scheduler_job_send_to_mainloop_async (job, hash_job_done,
- hash_data, NULL);
- return FALSE;
- }
-
- return do_hash_job (job, cancellable, user_data);
-}
-
-static void
-ft_handler_read_async_cb (GObject *source,
- GAsyncResult *res,
- gpointer user_data)
-{
- GFileInputStream *stream;
- GError *error = NULL;
- HashingData *hash_data;
- EmpathyFTHandler *handler = user_data;
- EmpathyFTHandlerPriv *priv = GET_PRIV (handler);
-
- DEBUG ("GFile read async CB.");
-
- stream = g_file_read_finish (priv->gfile, res, &error);
- if (error != NULL)
- {
- emit_error_signal (handler, error);
- g_clear_error (&error);
-
- return;
- }
-
- hash_data = g_slice_new0 (HashingData);
- hash_data->stream = G_INPUT_STREAM (stream);
- hash_data->total_bytes = priv->total_bytes;
- hash_data->handler = g_object_ref (handler);
- /* FIXME: MD5 is the only ContentHashType supported right now */
- hash_data->checksum = g_checksum_new (G_CHECKSUM_MD5);
-
- tp_asv_set_uint32 (priv->request,
- TP_PROP_CHANNEL_TYPE_FILE_TRANSFER_CONTENT_HASH_TYPE,
- TP_FILE_HASH_TYPE_MD5);
-
- g_signal_emit (handler, signals[HASHING_STARTED], 0);
-
- g_io_scheduler_push_job (do_hash_job, hash_data, NULL,
- G_PRIORITY_DEFAULT, priv->cancellable);
-}
-
-static void
-callbacks_data_free (gpointer user_data)
-{
- CallbacksData *data = user_data;
-
- if (data->handler != NULL)
- g_object_unref (data->handler);
-
- g_slice_free (CallbacksData, data);
-}
-
-static gboolean
-set_content_hash_type_from_classes (EmpathyFTHandler *handler,
- GPtrArray *classes)
-{
- GArray *possible_values;
- guint value;
- gboolean valid;
- EmpathyFTHandlerPriv *priv = GET_PRIV (handler);
- gboolean support_ft = FALSE;
- guint i;
-
- possible_values = g_array_new (TRUE, TRUE, sizeof (guint));
-
- for (i = 0; i < classes->len; i++)
- {
- GHashTable *fixed;
- GStrv allowed;
- const gchar *chan_type;
-
- tp_value_array_unpack (g_ptr_array_index (classes, i), 2,
- &fixed, &allowed);
-
- chan_type = tp_asv_get_string (fixed, TP_PROP_CHANNEL_CHANNEL_TYPE);
-
- if (tp_strdiff (chan_type, TP_IFACE_CHANNEL_TYPE_FILE_TRANSFER))
- continue;
-
- if (tp_asv_get_uint32 (fixed, TP_PROP_CHANNEL_TARGET_HANDLE_TYPE, NULL) !=
- TP_HANDLE_TYPE_CONTACT)
- continue;
-
- support_ft = TRUE;
-
- value = tp_asv_get_uint32
- (fixed, TP_PROP_CHANNEL_TYPE_FILE_TRANSFER_CONTENT_HASH_TYPE,
- &valid);
-
- if (valid)
- g_array_append_val (possible_values, value);
- }
-
- if (!support_ft)
- {
- g_array_unref (possible_values);
- return FALSE;
- }
-
- if (possible_values->len == 0)
- {
- /* there are no channel classes with hash support, disable it. */
- priv->use_hash = FALSE;
- priv->content_hash_type = TP_FILE_HASH_TYPE_NONE;
-
- goto out;
- }
-
- priv->use_hash = TRUE;
-
- if (possible_values->len == 1)
- {
- priv->content_hash_type = g_array_index (possible_values, guint, 0);
- }
- else
- {
- /* order the array and pick the first non zero, so that MD5
- * is the preferred value.
- */
- g_array_sort (possible_values, empathy_uint_compare);
-
- if (g_array_index (possible_values, guint, 0) == 0)
- priv->content_hash_type = g_array_index (possible_values, guint, 1);
- else
- priv->content_hash_type = g_array_index (possible_values, guint, 0);
- }
-
-out:
- g_array_unref (possible_values);
-
- DEBUG ("Hash enabled %s; setting content hash type as %u",
- priv->use_hash ? "True" : "False", priv->content_hash_type);
-
- return TRUE;
-}
-
-static void
-check_hashing (CallbacksData *data)
-{
- EmpathyFTHandler *handler = data->handler;
- EmpathyFTHandlerPriv *priv = GET_PRIV (handler);
- GError *myerr = NULL;
- TpCapabilities *caps;
- GPtrArray *classes;
- TpConnection *conn;
-
- conn = empathy_contact_get_connection (priv->contact);
-
- caps = tp_connection_get_capabilities (conn);
- if (caps == NULL)
- {
- data->callback (handler, NULL, data->user_data);
- goto out;
- }
-
- classes = tp_capabilities_get_channel_classes (caps);
-
- /* set whether we support hash and the type of it */
- if (!set_content_hash_type_from_classes (handler, classes))
- {
- g_set_error_literal (&myerr, EMPATHY_FT_ERROR_QUARK,
- EMPATHY_FT_ERROR_NOT_SUPPORTED,
- _("File transfer not supported by remote contact"));
-
- if (!g_cancellable_is_cancelled (priv->cancellable))
- g_cancellable_cancel (priv->cancellable);
-
- data->callback (handler, myerr, data->user_data);
- g_clear_error (&myerr);
- }
- else
- {
- /* get back to the caller now */
- data->callback (handler, NULL, data->user_data);
- }
-
-out:
- callbacks_data_free (data);
-}
-
-static void
-ft_handler_complete_request (EmpathyFTHandler *handler)
-{
- EmpathyFTHandlerPriv *priv = GET_PRIV (handler);
-
- /* populate the request table with all the known properties */
- ft_handler_populate_outgoing_request (handler);
-
- if (priv->use_hash)
- /* start hashing the file */
- g_file_read_async (priv->gfile, G_PRIORITY_DEFAULT,
- priv->cancellable, ft_handler_read_async_cb, handler);
- else
- /* push directly the handler to the dispatcher */
- ft_handler_push_to_dispatcher (handler);
-}
-
-static void
-ft_handler_gfile_ready_cb (GObject *source,
- GAsyncResult *res,
- CallbacksData *cb_data)
-{
- GFileInfo *info;
- GError *error = NULL;
- GTimeVal mtime;
- EmpathyFTHandlerPriv *priv = GET_PRIV (cb_data->handler);
-
- DEBUG ("Got GFileInfo.");
-
- info = g_file_query_info_finish (priv->gfile, res, &error);
-
- if (error != NULL)
- goto out;
-
- if (g_file_info_get_file_type (info) != G_FILE_TYPE_REGULAR)
- {
- error = g_error_new_literal (EMPATHY_FT_ERROR_QUARK,
- EMPATHY_FT_ERROR_INVALID_SOURCE_FILE,
- _("The selected file is not a regular file"));
- goto out;
- }
-
- priv->total_bytes = g_file_info_get_size (info);
- if (priv->total_bytes == 0)
- {
- error = g_error_new_literal (EMPATHY_FT_ERROR_QUARK,
- EMPATHY_FT_ERROR_EMPTY_SOURCE_FILE,
- _("The selected file is empty"));
- goto out;
- }
-
- priv->content_type = g_strdup (g_file_info_get_content_type (info));
- priv->filename = g_strdup (g_file_info_get_display_name (info));
- g_file_info_get_modification_time (info, &mtime);
- priv->mtime = mtime.tv_sec;
- priv->transferred_bytes = 0;
- priv->description = NULL;
-
- g_object_unref (info);
-
-out:
- if (error != NULL)
- {
- if (!g_cancellable_is_cancelled (priv->cancellable))
- g_cancellable_cancel (priv->cancellable);
-
- cb_data->callback (cb_data->handler, error, cb_data->user_data);
- g_error_free (error);
-
- callbacks_data_free (cb_data);
- }
- else
- {
- /* see if FT/hashing are allowed */
- check_hashing (cb_data);
- }
-}
-
-static void
-channel_get_all_properties_cb (TpProxy *proxy,
- GHashTable *properties,
- const GError *error,
- gpointer user_data,
- GObject *weak_object)
-{
- CallbacksData *cb_data = user_data;
- EmpathyFTHandler *handler = EMPATHY_FT_HANDLER (weak_object);
- EmpathyFTHandlerPriv *priv = GET_PRIV (handler);
- TpContact *contact;
-
- if (error != NULL)
- {
- if (!g_cancellable_is_cancelled (priv->cancellable))
- g_cancellable_cancel (priv->cancellable);
-
- cb_data->callback (handler, (GError *) error, cb_data->user_data);
-
- callbacks_data_free (cb_data);
- return;
- }
-
- priv->content_hash = g_value_dup_string (
- g_hash_table_lookup (properties, "ContentHash"));
-
- priv->content_hash_type = g_value_get_uint (
- g_hash_table_lookup (properties, "ContentHashType"));
-
- contact = tp_channel_get_target_contact (TP_CHANNEL (proxy));
- priv->contact = empathy_contact_dup_from_tp_contact (contact);
-
- cb_data->callback (handler, NULL, cb_data->user_data);
-}
-
-/* public methods */
-
-/**
- * empathy_ft_handler_new_outgoing:
- * @contact: the #EmpathyContact to send @source to
- * @source: the #GFile to send
- * @callback: callback to be called when the handler has been created
- * @user_data: user data to be passed to @callback
- *
- * Triggers the creation of a new #EmpathyFTHandler for an outgoing transfer.
- */
-void
-empathy_ft_handler_new_outgoing (EmpathyContact *contact,
- GFile *source,
- gint64 action_time,
- EmpathyFTHandlerReadyCallback callback,
- gpointer user_data)
-{
- EmpathyFTHandler *handler;
- CallbacksData *data;
- EmpathyFTHandlerPriv *priv;
-
- DEBUG ("New handler outgoing");
-
- g_return_if_fail (EMPATHY_IS_CONTACT (contact));
- g_return_if_fail (G_IS_FILE (source));
-
- handler = g_object_new (EMPATHY_TYPE_FT_HANDLER,
- "contact", contact,
- "gfile", source,
- "user-action-time", action_time,
- NULL);
-
- priv = GET_PRIV (handler);
-
- data = g_slice_new0 (CallbacksData);
- data->callback = callback;
- data->user_data = user_data;
- data->handler = g_object_ref (handler);
-
- /* start collecting info about the file */
- g_file_query_info_async (priv->gfile,
- G_FILE_ATTRIBUTE_STANDARD_DISPLAY_NAME ","
- G_FILE_ATTRIBUTE_STANDARD_SIZE ","
- G_FILE_ATTRIBUTE_STANDARD_CONTENT_TYPE ","
- G_FILE_ATTRIBUTE_STANDARD_TYPE ","
- G_FILE_ATTRIBUTE_TIME_MODIFIED,
- G_FILE_QUERY_INFO_NONE, G_PRIORITY_DEFAULT,
- NULL, (GAsyncReadyCallback) ft_handler_gfile_ready_cb, data);
-}
-
-/**
- * empathy_ft_handler_new_incoming:
- * @channel: the #TpFileTransferChannel proxy to the incoming channel
- * @callback: callback to be called when the handler has been created
- * @user_data: user data to be passed to @callback
- *
- * Triggers the creation of a new #EmpathyFTHandler for an incoming transfer.
- * Note that for the handler to be useful, you will have to set a destination
- * file with empathy_ft_handler_incoming_set_destination() after the handler
- * is ready.
- */
-void
-empathy_ft_handler_new_incoming (TpFileTransferChannel *channel,
- EmpathyFTHandlerReadyCallback callback,
- gpointer user_data)
-{
- EmpathyFTHandler *handler;
- CallbacksData *data;
- EmpathyFTHandlerPriv *priv;
-
- g_return_if_fail (TP_IS_FILE_TRANSFER_CHANNEL (channel));
-
- handler = g_object_new (EMPATHY_TYPE_FT_HANDLER,
- "channel", channel, NULL);
-
- priv = GET_PRIV (handler);
-
- data = g_slice_new0 (CallbacksData);
- data->callback = callback;
- data->user_data = user_data;
- data->handler = g_object_ref (handler);
-
- priv->total_bytes = tp_file_transfer_channel_get_size (channel);
-
- priv->transferred_bytes = tp_file_transfer_channel_get_transferred_bytes (
- channel);
-
- priv->filename = g_strdup (tp_file_transfer_channel_get_filename (channel));
-
- priv->content_type = g_strdup (tp_file_transfer_channel_get_mime_type (
- channel));
-
- priv->description = g_strdup (tp_file_transfer_channel_get_description (
- channel));
-
- tp_cli_dbus_properties_call_get_all (channel,
- -1, TP_IFACE_CHANNEL_TYPE_FILE_TRANSFER,
- channel_get_all_properties_cb, data, NULL, G_OBJECT (handler));
-}
-
-/**
- * empathy_ft_handler_start_transfer:
- * @handler: an #EmpathyFTHandler
- *
- * Starts the transfer machinery. After this call, the transfer and hashing
- * signals will be emitted by the handler.
- */
-void
-empathy_ft_handler_start_transfer (EmpathyFTHandler *handler)
-{
- EmpathyFTHandlerPriv *priv;
-
- g_return_if_fail (EMPATHY_IS_FT_HANDLER (handler));
-
- priv = GET_PRIV (handler);
-
- if (priv->channel == NULL)
- {
- ft_handler_complete_request (handler);
- }
- else
- {
- /* TODO: add support for resume. */
- tp_file_transfer_channel_accept_file_async (priv->channel,
- priv->gfile, 0, ft_transfer_accept_cb, handler);
-
- tp_g_signal_connect_object (priv->channel, "notify::state",
- G_CALLBACK (ft_transfer_state_cb), handler, 0);
- tp_g_signal_connect_object (priv->channel, "notify::transferred-bytes",
- G_CALLBACK (ft_transfer_transferred_bytes_cb), handler, 0);
- }
-}
-
-/**
- * empathy_ft_handler_cancel_transfer:
- * @handler: an #EmpathyFTHandler
- *
- * Cancels an ongoing handler operation. Note that this doesn't destroy
- * the object, which will keep all the properties, altough it won't be able
- * to do any more I/O.
- */
-void
-empathy_ft_handler_cancel_transfer (EmpathyFTHandler *handler)
-{
- EmpathyFTHandlerPriv *priv;
-
- g_return_if_fail (EMPATHY_IS_FT_HANDLER (handler));
-
- priv = GET_PRIV (handler);
-
- /* if we don't have a channel, we are hashing, so
- * we can just cancel the GCancellable to stop it.
- */
- if (priv->channel == NULL)
- g_cancellable_cancel (priv->cancellable);
- else
- tp_channel_close_async (TP_CHANNEL (priv->channel), NULL, NULL);
-}
-
-/**
- * empathy_ft_handler_incoming_set_destination:
- * @handler: an #EmpathyFTHandler
- * @destination: the #GFile where the transfer should be saved
- *
- * Sets the destination of the incoming handler to be @destination.
- * Note that calling this method is mandatory before starting the transfer
- * for incoming handlers.
- */
-void
-empathy_ft_handler_incoming_set_destination (EmpathyFTHandler *handler,
- GFile *destination)
-{
- EmpathyFTHandlerPriv *priv;
-
- g_return_if_fail (EMPATHY_IS_FT_HANDLER (handler));
- g_return_if_fail (G_IS_FILE (destination));
-
- priv = GET_PRIV (handler);
-
- g_object_set (handler, "gfile", destination, NULL);
-
- /* check if hash is supported. if it isn't, set use_hash to FALSE
- * anyway, so that clients won't be expecting us to checksum.
- */
- if (TPAW_STR_EMPTY (priv->content_hash) ||
- priv->content_hash_type == TP_FILE_HASH_TYPE_NONE)
- priv->use_hash = FALSE;
- else
- priv->use_hash = TRUE;
-}
-
-/**
- * empathy_ft_handler_get_filename:
- * @handler: an #EmpathyFTHandler
- *
- * Returns the name of the file being transferred.
- *
- * Return value: the name of the file being transferred
- */
-const char *
-empathy_ft_handler_get_filename (EmpathyFTHandler *handler)
-{
- EmpathyFTHandlerPriv *priv;
-
- g_return_val_if_fail (EMPATHY_IS_FT_HANDLER (handler), NULL);
-
- priv = GET_PRIV (handler);
-
- return priv->filename;
-}
-
-/**
- * empathy_ft_handler_get_content_type:
- * @handler: an #EmpathyFTHandler
- *
- * Returns the content type of the file being transferred.
- *
- * Return value: the content type of the file being transferred
- */
-const char *
-empathy_ft_handler_get_content_type (EmpathyFTHandler *handler)
-{
- EmpathyFTHandlerPriv *priv;
-
- g_return_val_if_fail (EMPATHY_IS_FT_HANDLER (handler), NULL);
-
- priv = GET_PRIV (handler);
-
- return priv->content_type;
-}
-
-/**
- * empathy_ft_handler_get_contact:
- * @handler: an #EmpathyFTHandler
- *
- * Returns the remote #EmpathyContact at the other side of the transfer.
- *
- * Return value: the remote #EmpathyContact for @handler
- */
-EmpathyContact *
-empathy_ft_handler_get_contact (EmpathyFTHandler *handler)
-{
- EmpathyFTHandlerPriv *priv;
-
- g_return_val_if_fail (EMPATHY_IS_FT_HANDLER (handler), NULL);
-
- priv = GET_PRIV (handler);
-
- return priv->contact;
-}
-
-/**
- * empathy_ft_handler_get_gfile:
- * @handler: an #EmpathyFTHandler
- *
- * Returns the #GFile where the transfer is being read/saved.
- *
- * Return value: the #GFile where the transfer is being read/saved
- */
-GFile *
-empathy_ft_handler_get_gfile (EmpathyFTHandler *handler)
-{
- EmpathyFTHandlerPriv *priv;
-
- g_return_val_if_fail (EMPATHY_IS_FT_HANDLER (handler), NULL);
-
- priv = GET_PRIV (handler);
-
- return priv->gfile;
-}
-
-/**
- * empathy_ft_handler_get_use_hash:
- * @handler: an #EmpathyFTHandler
- *
- * Returns whether @handler has checksumming enabled. This can depend on
- * the CM and the remote contact capabilities.
- *
- * Return value: %TRUE if the handler has checksumming enabled,
- * %FALSE otherwise.
- */
-gboolean
-empathy_ft_handler_get_use_hash (EmpathyFTHandler *handler)
-{
- EmpathyFTHandlerPriv *priv;
-
- g_return_val_if_fail (EMPATHY_IS_FT_HANDLER (handler), FALSE);
-
- priv = GET_PRIV (handler);
-
- return priv->use_hash;
-}
-
-/**
- * empathy_ft_handler_is_incoming:
- * @handler: an #EmpathyFTHandler
- *
- * Returns whether @handler is incoming or outgoing.
- *
- * Return value: %TRUE if the handler is incoming, %FALSE otherwise.
- */
-gboolean
-empathy_ft_handler_is_incoming (EmpathyFTHandler *handler)
-{
- EmpathyFTHandlerPriv *priv;
-
- g_return_val_if_fail (EMPATHY_IS_FT_HANDLER (handler), FALSE);
-
- priv = GET_PRIV (handler);
-
- if (priv->channel == NULL)
- return FALSE;
-
- return !tp_channel_get_requested ((TpChannel *) priv->channel);
-}
-
-/**
- * empathy_ft_handler_get_transferred_bytes:
- * @handler: an #EmpathyFTHandler
- *
- * Returns the number of bytes already transferred by the handler.
- *
- * Return value: the number of bytes already transferred by the handler.
- */
-guint64
-empathy_ft_handler_get_transferred_bytes (EmpathyFTHandler *handler)
-{
- EmpathyFTHandlerPriv *priv;
-
- g_return_val_if_fail (EMPATHY_IS_FT_HANDLER (handler), 0);
-
- priv = GET_PRIV (handler);
-
- return priv->transferred_bytes;
-}
-
-/**
- * empathy_ft_handler_get_total_bytes:
- * @handler: an #EmpathyFTHandler
- *
- * Returns the total size of the file being transferred by the handler.
- *
- * Return value: a number of bytes indicating the total size of the file being
- * transferred by the handler.
- */
-guint64
-empathy_ft_handler_get_total_bytes (EmpathyFTHandler *handler)
-{
- EmpathyFTHandlerPriv *priv;
-
- g_return_val_if_fail (EMPATHY_IS_FT_HANDLER (handler), 0);
-
- priv = GET_PRIV (handler);
-
- return priv->total_bytes;
-}
-
-/**
- * empathy_ft_handler_is_completed:
- * @handler: an #EmpathyFTHandler
- *
- * Returns whether the transfer for @handler has been completed succesfully.
- *
- * Return value: %TRUE if the handler has been transferred correctly, %FALSE
- * otherwise
- */
-gboolean
-empathy_ft_handler_is_completed (EmpathyFTHandler *handler)
-{
- EmpathyFTHandlerPriv *priv;
-
- g_return_val_if_fail (EMPATHY_IS_FT_HANDLER (handler), FALSE);
-
- priv = GET_PRIV (handler);
-
- return priv->is_completed;
-}
-
-/**
- * empathy_ft_handler_is_cancelled:
- * @handler: an #EmpathyFTHandler
- *
- * Returns whether the transfer for @handler has been cancelled or has stopped
- * due to an error.
- *
- * Return value: %TRUE if the transfer for @handler has been cancelled
- * or has stopped due to an error, %FALSE otherwise.
- */
-gboolean
-empathy_ft_handler_is_cancelled (EmpathyFTHandler *handler)
-{
- EmpathyFTHandlerPriv *priv;
-
- g_return_val_if_fail (EMPATHY_IS_FT_HANDLER (handler), FALSE);
-
- priv = GET_PRIV (handler);
-
- return g_cancellable_is_cancelled (priv->cancellable);
-}
diff --git a/libempathy/empathy-ft-handler.h b/libempathy/empathy-ft-handler.h
deleted file mode 100644
index 2fc1b609..00000000
--- a/libempathy/empathy-ft-handler.h
+++ /dev/null
@@ -1,113 +0,0 @@
-/*
- * empathy-ft-handler.h - Header for EmpathyFTHandler
- * Copyright (C) 2009 Collabora Ltd.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- *
- * Author: Cosimo Cecchi <cosimo.cecchi@collabora.co.uk>
- */
-
-/* empathy-ft-handler.h */
-
-#ifndef __EMPATHY_FT_HANDLER_H__
-#define __EMPATHY_FT_HANDLER_H__
-
-#include <glib-object.h>
-#include <gio/gio.h>
-#include <telepathy-glib/telepathy-glib.h>
-
-#include "empathy-contact.h"
-
-G_BEGIN_DECLS
-
-#define EMPATHY_TYPE_FT_HANDLER empathy_ft_handler_get_type()
-#define EMPATHY_FT_HANDLER(obj) \
- (G_TYPE_CHECK_INSTANCE_CAST ((obj), \
- EMPATHY_TYPE_FT_HANDLER, EmpathyFTHandler))
-#define EMPATHY_FT_HANDLER_CLASS(klass) \
- (G_TYPE_CHECK_CLASS_CAST ((klass), \
- EMPATHY_TYPE_FT_HANDLER, EmpathyFTHandlerClass))
-#define EMPATHY_IS_FT_HANDLER(obj) \
- (G_TYPE_CHECK_INSTANCE_TYPE ((obj), EMPATHY_TYPE_FT_HANDLER))
-#define EMPATHY_IS_FT_HANDLER_CLASS(klass) \
- (G_TYPE_CHECK_CLASS_TYPE ((klass), EMPATHY_TYPE_FT_HANDLER))
-#define EMPATHY_FT_HANDLER_GET_CLASS(obj) \
- (G_TYPE_INSTANCE_GET_CLASS ((obj), \
- EMPATHY_TYPE_FT_HANDLER, EmpathyFTHandlerClass))
-
-typedef struct {
- GObject parent;
- gpointer priv;
-} EmpathyFTHandler;
-
-typedef struct {
- GObjectClass parent_class;
-} EmpathyFTHandlerClass;
-
-#define EMPATHY_FT_ERROR_QUARK g_quark_from_static_string ("EmpathyFTError")
-
-typedef enum {
- EMPATHY_FT_ERROR_FAILED,
- EMPATHY_FT_ERROR_HASH_MISMATCH,
- EMPATHY_FT_ERROR_TP_ERROR,
- EMPATHY_FT_ERROR_SOCKET,
- EMPATHY_FT_ERROR_NOT_SUPPORTED,
- EMPATHY_FT_ERROR_INVALID_SOURCE_FILE,
- EMPATHY_FT_ERROR_EMPTY_SOURCE_FILE
-} EmpathyFTErrorEnum;
-
-/**
- * EmpathyFTHandlerReadyCallback:
- * @handler: the handler which is now ready
- * @error: a #GError if the operation failed, or %NULL
- * @user_data: user data passed to the callback
- */
-typedef void (* EmpathyFTHandlerReadyCallback) (EmpathyFTHandler *handler,
- GError *error,
- gpointer user_data);
-
-GType empathy_ft_handler_get_type (void);
-
-/* public methods */
-void empathy_ft_handler_new_outgoing (EmpathyContact *contact,
- GFile *source,
- gint64 action_time,
- EmpathyFTHandlerReadyCallback callback,
- gpointer user_data);
-
-void empathy_ft_handler_new_incoming (TpFileTransferChannel *channel,
- EmpathyFTHandlerReadyCallback callback,
- gpointer user_data);
-void empathy_ft_handler_incoming_set_destination (EmpathyFTHandler *handler,
- GFile *destination);
-
-void empathy_ft_handler_start_transfer (EmpathyFTHandler *handler);
-void empathy_ft_handler_cancel_transfer (EmpathyFTHandler *handler);
-
-/* properties of the transfer */
-const char * empathy_ft_handler_get_filename (EmpathyFTHandler *handler);
-const char * empathy_ft_handler_get_content_type (EmpathyFTHandler *handler);
-EmpathyContact * empathy_ft_handler_get_contact (EmpathyFTHandler *handler);
-GFile * empathy_ft_handler_get_gfile (EmpathyFTHandler *handler);
-gboolean empathy_ft_handler_get_use_hash (EmpathyFTHandler *handler);
-gboolean empathy_ft_handler_is_incoming (EmpathyFTHandler *handler);
-guint64 empathy_ft_handler_get_transferred_bytes (EmpathyFTHandler *handler);
-guint64 empathy_ft_handler_get_total_bytes (EmpathyFTHandler *handler);
-gboolean empathy_ft_handler_is_completed (EmpathyFTHandler *handler);
-gboolean empathy_ft_handler_is_cancelled (EmpathyFTHandler *handler);
-
-G_END_DECLS
-
-#endif /* __EMPATHY_FT_HANDLER_H__ */
diff --git a/libempathy/empathy-goa-auth-handler.c b/libempathy/empathy-goa-auth-handler.c
deleted file mode 100644
index 37973000..00000000
--- a/libempathy/empathy-goa-auth-handler.c
+++ /dev/null
@@ -1,409 +0,0 @@
-/*
- * empathy-goa-auth-handler.c - Source for Goa SASL authentication
- * Copyright (C) 2011 Collabora Ltd.
- * @author Xavier Claessens <xavier.claessens@collabora.co.uk>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-#include "config.h"
-#include "empathy-goa-auth-handler.h"
-
-#define GOA_API_IS_SUBJECT_TO_CHANGE /* awesome! */
-#include <goa/goa.h>
-
-#include "empathy-sasl-mechanisms.h"
-
-#define DEBUG_FLAG EMPATHY_DEBUG_SASL
-#include "empathy-debug.h"
-
-struct _EmpathyGoaAuthHandlerPriv
-{
- GoaClient *client;
- gboolean client_preparing;
-
- /* List of AuthData waiting for client to be created */
- GList *auth_queue;
-};
-
-G_DEFINE_TYPE (EmpathyGoaAuthHandler, empathy_goa_auth_handler, G_TYPE_OBJECT);
-
-static void
-empathy_goa_auth_handler_init (EmpathyGoaAuthHandler *self)
-{
- self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self,
- EMPATHY_TYPE_GOA_AUTH_HANDLER, EmpathyGoaAuthHandlerPriv);
-}
-
-static void
-empathy_goa_auth_handler_dispose (GObject *object)
-{
- EmpathyGoaAuthHandler *self = (EmpathyGoaAuthHandler *) object;
-
- /* AuthData keeps a ref on self */
- g_assert (self->priv->auth_queue == NULL);
-
- tp_clear_object (&self->priv->client);
-
- G_OBJECT_CLASS (empathy_goa_auth_handler_parent_class)->dispose (object);
-}
-
-static void
-empathy_goa_auth_handler_class_init (EmpathyGoaAuthHandlerClass *klass)
-{
- GObjectClass *oclass = G_OBJECT_CLASS (klass);
-
- oclass->dispose = empathy_goa_auth_handler_dispose;
-
- g_type_class_add_private (klass, sizeof (EmpathyGoaAuthHandlerPriv));
-}
-
-EmpathyGoaAuthHandler *
-empathy_goa_auth_handler_new (void)
-{
- return g_object_new (EMPATHY_TYPE_GOA_AUTH_HANDLER, NULL);
-}
-
-typedef struct
-{
- EmpathyGoaAuthHandler *self;
- TpChannel *channel;
- TpAccount *account;
-
- GoaObject *goa_object;
- gchar *access_token;
-} AuthData;
-
-static AuthData *
-auth_data_new (EmpathyGoaAuthHandler *self,
- TpChannel *channel,
- TpAccount *account)
-{
- AuthData *data;
-
- data = g_slice_new0 (AuthData);
- data->self = g_object_ref (self);
- data->channel = g_object_ref (channel);
- data->account = g_object_ref (account);
-
- return data;
-}
-
-static void
-auth_data_free (AuthData *data)
-{
- tp_clear_object (&data->self);
- tp_clear_object (&data->channel);
- tp_clear_object (&data->account);
- tp_clear_object (&data->goa_object);
- g_free (data->access_token);
- g_slice_free (AuthData, data);
-}
-
-static void
-fail_auth (AuthData *data)
-{
- DEBUG ("Auth failed for account %s",
- tp_proxy_get_object_path (data->account));
-
- tp_channel_close_async (data->channel, NULL, NULL);
- auth_data_free (data);
-}
-
-static void
-auth_cb (GObject *source,
- GAsyncResult *result,
- gpointer user_data)
-{
- TpChannel *channel = (TpChannel *) source;
- AuthData *data = user_data;
- GError *error = NULL;
-
- if (!empathy_sasl_auth_finish (channel, result, &error))
- {
- DEBUG ("SASL Mechanism error: %s", error->message);
- fail_auth (data);
- g_clear_error (&error);
- return;
- }
-
- /* Success! */
- tp_channel_close_async (channel, NULL, NULL);
- auth_data_free (data);
-}
-
-static void
-got_oauth2_access_token_cb (GObject *source,
- GAsyncResult *result,
- gpointer user_data)
-{
- GoaOAuth2Based *oauth2 = (GoaOAuth2Based *) source;
- AuthData *data = user_data;
- gchar *access_token;
- gint expires_in;
- GError *error = NULL;
-
- if (!goa_oauth2_based_call_get_access_token_finish (oauth2,
- &access_token, &expires_in, result, &error))
- {
- DEBUG ("Failed to get access token: %s", error->message);
- fail_auth (data);
- g_clear_error (&error);
- return;
- }
-
- DEBUG ("Got access token for %s:\n%s",
- tp_proxy_get_object_path (data->account),
- access_token);
-
- switch (empathy_sasl_channel_select_mechanism (data->channel))
- {
- case EMPATHY_SASL_MECHANISM_FACEBOOK:
- empathy_sasl_auth_facebook_async (data->channel,
- goa_oauth2_based_get_client_id (oauth2), access_token,
- auth_cb, data);
- break;
-
- case EMPATHY_SASL_MECHANISM_WLM:
- empathy_sasl_auth_wlm_async (data->channel,
- access_token,
- auth_cb, data);
- break;
-
- case EMPATHY_SASL_MECHANISM_GOOGLE:
- empathy_sasl_auth_google_async (data->channel,
- goa_account_get_identity (goa_object_peek_account (data->goa_object)),
- access_token, auth_cb, data);
- break;
-
- default:
- g_assert_not_reached ();
- }
-
- g_free (access_token);
-}
-
-static void
-got_password_passwd_cb (GObject *source,
- GAsyncResult *result,
- gpointer user_data)
-{
- GoaPasswordBased *password = (GoaPasswordBased *) source;
- AuthData *data = user_data;
- gchar *passwd;
- GError *error = NULL;
-
- if (!goa_password_based_call_get_password_finish (password,
- &passwd, result, &error))
- {
- DEBUG ("Failed to get password: %s", error->message);
- fail_auth (data);
- g_clear_error (&error);
- return;
- }
-
- DEBUG ("Got password for %s", tp_proxy_get_object_path (data->account));
-
- empathy_sasl_auth_password_async (data->channel, passwd, auth_cb, data);
- g_free (passwd);
-}
-
-static void
-ensure_credentials_cb (GObject *source,
- GAsyncResult *result,
- gpointer user_data)
-{
- AuthData *data = user_data;
- GoaAccount *goa_account = (GoaAccount *) source;
- GoaOAuth2Based *oauth2;
- GoaPasswordBased *password;
- EmpathySaslMechanism mech;
- gboolean supports_password;
- gint expires_in;
- GError *error = NULL;
-
- if (!goa_account_call_ensure_credentials_finish (goa_account, &expires_in,
- result, &error))
- {
- DEBUG ("Failed to EnsureCredentials: %s", error->message);
- fail_auth (data);
- g_clear_error (&error);
- return;
- }
-
- /* We prefer oauth2, if available */
- oauth2 = goa_object_get_oauth2_based (data->goa_object);
- mech = empathy_sasl_channel_select_mechanism (data->channel);
- if (oauth2 != NULL && mech != EMPATHY_SASL_MECHANISM_PASSWORD)
- {
- DEBUG ("Goa daemon has credentials for %s, get the access token",
- tp_proxy_get_object_path (data->account));
-
- goa_oauth2_based_call_get_access_token (oauth2, NULL,
- got_oauth2_access_token_cb, data);
-
- g_object_unref (oauth2);
- return;
- }
-
- /* Else we use the password */
- password = goa_object_get_password_based (data->goa_object);
- supports_password = empathy_sasl_channel_supports_mechanism (data->channel,
- "X-TELEPATHY-PASSWORD");
- if (password != NULL && supports_password)
- {
- DEBUG ("Goa daemon has credentials for %s, get the password",
- tp_proxy_get_object_path (data->account));
-
- /* arg_id is currently unused */
- goa_password_based_call_get_password (password, "", NULL,
- got_password_passwd_cb, data);
-
- g_object_unref (password);
- return;
- }
-
- DEBUG ("GoaObject does not implement oauth2 or password");
- fail_auth (data);
-}
-
-static void
-start_auth (AuthData *data)
-{
- EmpathyGoaAuthHandler *self = data->self;
- const GValue *id_value;
- const gchar *id;
- GList *goa_accounts, *l;
- gboolean found = FALSE;
-
- id_value = tp_account_get_storage_identifier (data->account);
- id = g_value_get_string (id_value);
-
- goa_accounts = goa_client_get_accounts (self->priv->client);
- for (l = goa_accounts; l != NULL && !found; l = l->next)
- {
- GoaObject *goa_object = l->data;
- GoaAccount *goa_account;
-
- goa_account = goa_object_get_account (goa_object);
- if (!tp_strdiff (goa_account_get_id (goa_account), id))
- {
- data->goa_object = g_object_ref (goa_object);
-
- DEBUG ("Found the GoaAccount for %s, ensure credentials",
- tp_proxy_get_object_path (data->account));
-
- goa_account_call_ensure_credentials (goa_account, NULL,
- ensure_credentials_cb, data);
-
- found = TRUE;
- }
-
- g_object_unref (goa_account);
- }
- g_list_free_full (goa_accounts, g_object_unref);
-
- if (!found)
- {
- DEBUG ("Cannot find GoaAccount");
- fail_auth (data);
- }
-}
-
-static void
-client_new_cb (GObject *source,
- GAsyncResult *result,
- gpointer user_data)
-{
- EmpathyGoaAuthHandler *self = user_data;
- GList *l;
- GError *error = NULL;
-
- self->priv->client_preparing = FALSE;
- self->priv->client = goa_client_new_finish (result, &error);
- if (self->priv->client == NULL)
- {
- DEBUG ("Error getting GoaClient: %s", error->message);
- g_clear_error (&error);
- }
-
- /* process queued data */
- for (l = self->priv->auth_queue; l != NULL; l = l->next)
- {
- AuthData *data = l->data;
-
- if (self->priv->client != NULL)
- start_auth (data);
- else
- fail_auth (data);
- }
-
- tp_clear_pointer (&self->priv->auth_queue, g_list_free);
-}
-
-void
-empathy_goa_auth_handler_start (EmpathyGoaAuthHandler *self,
- TpChannel *channel,
- TpAccount *account)
-{
- AuthData *data;
-
- g_return_if_fail (TP_IS_CHANNEL (channel));
- g_return_if_fail (TP_IS_ACCOUNT (account));
- g_return_if_fail (empathy_goa_auth_handler_supports (self, channel, account));
-
- DEBUG ("Start Goa auth for account: %s",
- tp_proxy_get_object_path (account));
-
- data = auth_data_new (self, channel, account);
-
- if (self->priv->client == NULL)
- {
- /* GOA client not ready yet, queue data */
- if (!self->priv->client_preparing)
- {
- goa_client_new (NULL, client_new_cb, self);
- self->priv->client_preparing = TRUE;
- }
-
- self->priv->auth_queue = g_list_prepend (self->priv->auth_queue, data);
- }
- else
- {
- start_auth (data);
- }
-}
-
-gboolean
-empathy_goa_auth_handler_supports (EmpathyGoaAuthHandler *self,
- TpChannel *channel,
- TpAccount *account)
-{
- const gchar *provider;
- EmpathySaslMechanism mech;
-
- g_return_val_if_fail (TP_IS_CHANNEL (channel), FALSE);
- g_return_val_if_fail (TP_IS_ACCOUNT (account), FALSE);
-
- provider = tp_account_get_storage_provider (account);
- if (tp_strdiff (provider, EMPATHY_GOA_PROVIDER))
- return FALSE;
-
- mech = empathy_sasl_channel_select_mechanism (channel);
- return mech == EMPATHY_SASL_MECHANISM_FACEBOOK ||
- mech == EMPATHY_SASL_MECHANISM_WLM ||
- mech == EMPATHY_SASL_MECHANISM_GOOGLE ||
- mech == EMPATHY_SASL_MECHANISM_PASSWORD;
-}
diff --git a/libempathy/empathy-goa-auth-handler.h b/libempathy/empathy-goa-auth-handler.h
deleted file mode 100644
index 9e7d110c..00000000
--- a/libempathy/empathy-goa-auth-handler.h
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
- * empathy-goa-auth-handler.h - Header for Goa SASL authentication
- * Copyright (C) 2011 Collabora Ltd.
- * @author Xavier Claessens <xavier.claessens@collabora.co.uk>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-#ifndef __EMPATHY_GOA_AUTH_HANDLER_H__
-#define __EMPATHY_GOA_AUTH_HANDLER_H__
-
-#include <telepathy-glib/telepathy-glib.h>
-
-G_BEGIN_DECLS
-
-typedef struct _EmpathyGoaAuthHandler EmpathyGoaAuthHandler;
-typedef struct _EmpathyGoaAuthHandlerClass EmpathyGoaAuthHandlerClass;
-typedef struct _EmpathyGoaAuthHandlerPriv EmpathyGoaAuthHandlerPriv;
-
-struct _EmpathyGoaAuthHandlerClass {
- GObjectClass parent_class;
-};
-
-struct _EmpathyGoaAuthHandler {
- GObject parent;
- EmpathyGoaAuthHandlerPriv *priv;
-};
-
-GType empathy_goa_auth_handler_get_type (void);
-
-/* TYPE MACROS */
-#define EMPATHY_TYPE_GOA_AUTH_HANDLER \
- (empathy_goa_auth_handler_get_type ())
-#define EMPATHY_GOA_AUTH_HANDLER(obj) \
- (G_TYPE_CHECK_INSTANCE_CAST((obj), EMPATHY_TYPE_GOA_AUTH_HANDLER, \
- EmpathyGoaAuthHandler))
-#define EMPATHY_GOA_AUTH_HANDLER_CLASS(klass) \
- (G_TYPE_CHECK_CLASS_CAST((klass), EMPATHY_TYPE_GOA_AUTH_HANDLER, \
- EmpathyGoaAuthHandlerClass))
-#define EMPATHY_IS_GOA_AUTH_HANDLER(obj) \
- (G_TYPE_CHECK_INSTANCE_TYPE((obj), EMPATHY_TYPE_GOA_AUTH_HANDLER))
-#define EMPATHY_IS_GOA_AUTH_HANDLER_CLASS(klass) \
- (G_TYPE_CHECK_CLASS_TYPE((klass), EMPATHY_TYPE_GOA_AUTH_HANDLER))
-#define EMPATHY_GOA_AUTH_HANDLER_GET_CLASS(obj) \
- (G_TYPE_INSTANCE_GET_CLASS ((obj), EMPATHY_TYPE_GOA_AUTH_HANDLER, \
- EmpathyGoaAuthHandlerClass))
-
-EmpathyGoaAuthHandler *empathy_goa_auth_handler_new (void);
-
-void empathy_goa_auth_handler_start (EmpathyGoaAuthHandler *self,
- TpChannel *channel,
- TpAccount *account);
-
-gboolean empathy_goa_auth_handler_supports (EmpathyGoaAuthHandler *self,
- TpChannel *channel,
- TpAccount *account);
-
-G_END_DECLS
-
-#endif /* #ifndef __EMPATHY_GOA_AUTH_HANDLER_H__*/
diff --git a/libempathy/empathy-gsettings.h b/libempathy/empathy-gsettings.h
deleted file mode 100644
index 6f6fb3cf..00000000
--- a/libempathy/empathy-gsettings.h
+++ /dev/null
@@ -1,101 +0,0 @@
-/*
- * Copyright (C) 2010 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: Danielle Madeley <danielle.madeley@collabora.co.uk>
- */
-
-#ifndef __EMPATHY_GSETTINGS_H__
-#define __EMPATHY_GSETTINGS_H__
-
-#include <gio/gio.h>
-
-G_BEGIN_DECLS
-
-#define EMPATHY_PREFS_SCHEMA "org.gnome.Empathy"
-#define EMPATHY_PREFS_USE_CONN "use-conn"
-#define EMPATHY_PREFS_AUTOCONNECT "autoconnect"
-#define EMPATHY_PREFS_AUTOAWAY "autoaway"
-#define EMPATHY_PREFS_FILE_TRANSFER_DEFAULT_FOLDER "file-transfer-default-folder"
-#define EMPATHY_PREFS_SANITY_CLEANING_NUMBER "sanity-cleaning-number"
-
-#define EMPATHY_PREFS_NOTIFICATIONS_SCHEMA EMPATHY_PREFS_SCHEMA ".notifications"
-#define EMPATHY_PREFS_NOTIFICATIONS_ENABLED "notifications-enabled"
-#define EMPATHY_PREFS_NOTIFICATIONS_DISABLED_AWAY "notifications-disabled-away"
-#define EMPATHY_PREFS_NOTIFICATIONS_FOCUS "notifications-focus"
-#define EMPATHY_PREFS_NOTIFICATIONS_CONTACT_SIGNIN "notifications-contact-signin"
-#define EMPATHY_PREFS_NOTIFICATIONS_CONTACT_SIGNOUT "notifications-contact-signout"
-#define EMPATHY_PREFS_NOTIFICATIONS_POPUPS_WHEN_AVAILABLE "popups-when-available"
-
-#define EMPATHY_PREFS_SOUNDS_SCHEMA EMPATHY_PREFS_SCHEMA ".sounds"
-#define EMPATHY_PREFS_SOUNDS_ENABLED "sounds-enabled"
-#define EMPATHY_PREFS_SOUNDS_DISABLED_AWAY "sounds-disabled-away"
-#define EMPATHY_PREFS_SOUNDS_INCOMING_MESSAGE "sounds-incoming-message"
-#define EMPATHY_PREFS_SOUNDS_OUTGOING_MESSAGE "sounds-outgoing-message"
-#define EMPATHY_PREFS_SOUNDS_NEW_CONVERSATION "sounds-new-conversation"
-#define EMPATHY_PREFS_SOUNDS_SERVICE_LOGIN "sounds-service-login"
-#define EMPATHY_PREFS_SOUNDS_SERVICE_LOGOUT "sounds-service-logout"
-#define EMPATHY_PREFS_SOUNDS_CONTACT_LOGIN "sounds-contact-login"
-#define EMPATHY_PREFS_SOUNDS_CONTACT_LOGOUT "sounds-contact-logout"
-
-#define EMPATHY_PREFS_CALL_SCHEMA EMPATHY_PREFS_SCHEMA ".call"
-#define EMPATHY_PREFS_CALL_CAMERA_DEVICE "camera-device"
-#define EMPATHY_PREFS_CALL_ECHO_CANCELLATION "echo-cancellation"
-
-#define EMPATHY_PREFS_CHAT_SCHEMA EMPATHY_PREFS_SCHEMA ".conversation"
-#define EMPATHY_PREFS_CHAT_SHOW_SMILEYS "graphical-smileys"
-#define EMPATHY_PREFS_CHAT_SHOW_CONTACTS_IN_ROOMS "show-contacts-in-rooms"
-#define EMPATHY_PREFS_CHAT_THEME "theme"
-#define EMPATHY_PREFS_CHAT_THEME_VARIANT "theme-variant"
-#define EMPATHY_PREFS_CHAT_ADIUM_PATH "adium-path"
-#define EMPATHY_PREFS_CHAT_SPELL_CHECKER_LANGUAGES "spell-checker-languages"
-#define EMPATHY_PREFS_CHAT_SPELL_CHECKER_ENABLED "spell-checker-enabled"
-#define EMPATHY_PREFS_CHAT_NICK_COMPLETION_CHAR "nick-completion-char"
-#define EMPATHY_PREFS_CHAT_AVATAR_IN_ICON "avatar-in-icon"
-#define EMPATHY_PREFS_CHAT_WEBKIT_DEVELOPER_TOOLS "enable-webkit-developer-tools"
-#define EMPATHY_PREFS_CHAT_ROOM_LAST_ACCOUNT "room-last-account"
-#define EMPATHY_PREFS_CHAT_SEND_CHAT_STATES "send-chat-states"
-
-#define EMPATHY_PREFS_UI_SCHEMA EMPATHY_PREFS_SCHEMA ".ui"
-#define EMPATHY_PREFS_UI_SEPARATE_CHAT_WINDOWS "separate-chat-windows"
-#define EMPATHY_PREFS_UI_EVENTS_NOTIFY_AREA "events-notify-area"
-#define EMPATHY_PREFS_UI_MAIN_WINDOW_HIDDEN "main-window-hidden"
-#define EMPATHY_PREFS_UI_SHOW_BALANCES "show-balance-in-roster"
-#define EMPATHY_PREFS_UI_CHAT_WINDOW_PANED_POS "chat-window-paned-pos"
-#define EMPATHY_PREFS_UI_SHOW_OFFLINE "show-offline"
-#define EMPATHY_PREFS_UI_SHOW_GROUPS "show-groups"
-
-#define EMPATHY_PREFS_HINTS_SCHEMA EMPATHY_PREFS_SCHEMA ".hints"
-#define EMPATHY_PREFS_HINTS_CLOSE_MAIN_WINDOW "close-main-window"
-
-#define EMPATHY_PREFS_LOCATION_SCHEMA EMPATHY_PREFS_SCHEMA ".location"
-#define EMPATHY_PREFS_LOCATION_PUBLISH "publish"
-#define EMPATHY_PREFS_LOCATION_RESOURCE_NETWORK "resource-network"
-#define EMPATHY_PREFS_LOCATION_RESOURCE_CELL "resource-cell"
-#define EMPATHY_PREFS_LOCATION_RESOURCE_GPS "resource-gps"
-#define EMPATHY_PREFS_LOCATION_REDUCE_ACCURACY "reduce-accuracy"
-
-#define EMPATHY_PREFS_LOGGER_SCHEMA "org.freedesktop.Telepathy.Logger"
-#define EMPATHY_PREFS_LOGGER_ENABLED "enabled"
-
-#define EMPATHY_PREFS_DESKTOP_INTERFACE_SCHEMA "org.gnome.desktop.interface"
-#define EMPATHY_PREFS_DESKTOP_INTERFACE_DOCUMENT_FONT_NAME "document-font-name"
-#define EMPATHY_PREFS_DESKTOP_INTERFACE_FONT_NAME "font-name"
-
-G_END_DECLS
-
-#endif /* __EMPATHY_GSETTINGS_H__ */
-
diff --git a/libempathy/empathy-individual-manager.c b/libempathy/empathy-individual-manager.c
deleted file mode 100644
index 85189853..00000000
--- a/libempathy/empathy-individual-manager.c
+++ /dev/null
@@ -1,953 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * Copyright (C) 2007-2010 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>
- * Travis Reitter <travis.reitter@collabora.co.uk>
- */
-
-#include "config.h"
-#include "empathy-individual-manager.h"
-
-#include <tp-account-widgets/tpaw-utils.h>
-
-#include "empathy-utils.h"
-
-#define DEBUG_FLAG EMPATHY_DEBUG_CONTACT
-#include "empathy-debug.h"
-
-#define GET_PRIV(obj) EMPATHY_GET_PRIV (obj, EmpathyIndividualManager)
-
-/* We just expose the $TOP_INDIVIDUALS_LEN more popular individuals as that's
- * what the view actually care about. We just want to notify it when this list
- * changes, not when the position of every single individual is updated. */
-#define TOP_INDIVIDUALS_LEN 5
-
-/* The constant INDIVIDUALS_COUNT_COMPRESS_FACTOR represents the number of
- * interactions needed to be considered as 1 interaction */
-#define INTERACTION_COUNT_COMPRESS_FACTOR 50
-
-/* The constant DAY_IN_SECONDS represents the seconds in a day */
-#define DAY_IN_SECONDS 86400
-
-/* This class only stores and refs Individuals who contain an EmpathyContact.
- *
- * This class merely forwards along signals from the aggregator and individuals
- * and wraps aggregator functions for other client code. */
-typedef struct
-{
- FolksIndividualAggregator *aggregator;
- GHashTable *individuals; /* Individual.id -> Individual */
- gboolean contacts_loaded;
-
- /* reffed FolksIndividual sorted by popularity (most popular first) */
- GSequence *individuals_pop;
- /* The TOP_INDIVIDUALS_LEN first FolksIndividual (borrowed) from
- * individuals_pop */
- GList *top_individuals;
- guint global_interaction_counter;
-} EmpathyIndividualManagerPriv;
-
-enum
-{
- PROP_TOP_INDIVIDUALS = 1,
- N_PROPS
-};
-
-enum
-{
- FAVOURITES_CHANGED,
- GROUPS_CHANGED,
- MEMBERS_CHANGED,
- CONTACTS_LOADED,
- LAST_SIGNAL
-};
-
-static guint signals[LAST_SIGNAL] = { 0 };
-
-G_DEFINE_TYPE (EmpathyIndividualManager, empathy_individual_manager,
- G_TYPE_OBJECT);
-
-static EmpathyIndividualManager *manager_singleton = NULL;
-
-static void
-individual_manager_get_property (GObject *object,
- guint property_id,
- GValue *value,
- GParamSpec *pspec)
-{
- EmpathyIndividualManager *self = EMPATHY_INDIVIDUAL_MANAGER (object);
- EmpathyIndividualManagerPriv *priv = GET_PRIV (self);
-
- switch (property_id)
- {
- case PROP_TOP_INDIVIDUALS:
- g_value_set_pointer (value, priv->top_individuals);
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
- break;
- }
-}
-
-static void
-individual_group_changed_cb (FolksIndividual *individual,
- gchar *group,
- gboolean is_member,
- EmpathyIndividualManager *self)
-{
- g_signal_emit (self, signals[GROUPS_CHANGED], 0, individual, group,
- is_member);
-}
-
-static void
-individual_notify_is_favourite_cb (FolksIndividual *individual,
- GParamSpec *pspec,
- EmpathyIndividualManager *self)
-{
- gboolean is_favourite = folks_favourite_details_get_is_favourite (
- FOLKS_FAVOURITE_DETAILS (individual));
- g_signal_emit (self, signals[FAVOURITES_CHANGED], 0, individual,
- is_favourite);
-}
-
-
-/* Contacts that have been interacted with within the last 30 days and have
- * have an interaction count > INTERACTION_COUNT_COMPRESS_FACTOR have a
- * popularity value of the count/INTERACTION_COUNT_COMPRESS_FACTOR */
-static guint
-compute_popularity (FolksIndividual *individual)
-{
- FolksInteractionDetails *details = FOLKS_INTERACTION_DETAILS (individual);
- GDateTime *last;
- guint current_timestamp, count;
- float timediff;
-
- last = folks_interaction_details_get_last_im_interaction_datetime (details);
- if (last == NULL)
- return 0;
-
- /* Convert g_get_real_time () fro microseconds to seconds */
- current_timestamp = g_get_real_time () / 1000000;
- timediff = current_timestamp - g_date_time_to_unix (last);
-
- if (timediff / DAY_IN_SECONDS > 30)
- return 0;
-
- count = folks_interaction_details_get_im_interaction_count (details);
- count = count / INTERACTION_COUNT_COMPRESS_FACTOR;
- if (count == 0)
- return 0;
-
- return count;
-}
-
-static void
-check_top_individuals (EmpathyIndividualManager *self)
-{
- EmpathyIndividualManagerPriv *priv = GET_PRIV (self);
- GSequenceIter *iter;
- GList *l, *new_list = NULL;
- gboolean modified = FALSE;
- guint i;
-
- iter = g_sequence_get_begin_iter (priv->individuals_pop);
- l = priv->top_individuals;
-
- /* Check if the TOP_INDIVIDUALS_LEN first individuals in individuals_pop are
- * still the same as the ones in top_individuals */
- for (i = 0; i < TOP_INDIVIDUALS_LEN && !g_sequence_iter_is_end (iter); i++)
- {
- FolksIndividual *individual = g_sequence_get (iter);
- guint pop;
-
- /* Don't include individual having 0 as pop */
- pop = compute_popularity (individual);
- if (pop <= 0)
- break;
-
- if (!modified)
- {
- if (l == NULL)
- {
- /* Old list is shorter than the new one */
- modified = TRUE;
- }
- else
- {
- modified = (individual != l->data);
-
- l = g_list_next (l);
- }
- }
-
- new_list = g_list_prepend (new_list, individual);
-
- iter = g_sequence_iter_next (iter);
- }
-
- g_list_free (priv->top_individuals);
- priv->top_individuals = g_list_reverse (new_list);
-
- if (modified)
- {
- DEBUG ("Top individuals changed:");
-
- for (l = priv->top_individuals; l != NULL; l = g_list_next (l))
- {
- FolksIndividual *individual = l->data;
-
- DEBUG (" %s (%u)",
- folks_alias_details_get_alias (FOLKS_ALIAS_DETAILS (individual)),
- compute_popularity (individual));
- }
-
- g_object_notify (G_OBJECT (self), "top-individuals");
- }
-}
-
-static gint
-compare_individual_by_pop (gconstpointer a,
- gconstpointer b,
- gpointer user_data)
-{
- guint pop_a, pop_b;
-
- pop_a = compute_popularity (FOLKS_INDIVIDUAL (a));
- pop_b = compute_popularity (FOLKS_INDIVIDUAL (b));
-
- return pop_b - pop_a;
-}
-
-static void
-individual_notify_im_interaction_count (FolksIndividual *individual,
- GParamSpec *pspec,
- EmpathyIndividualManager *self)
-{
- EmpathyIndividualManagerPriv *priv = GET_PRIV (self);
-
- /* We don't use g_sequence_sort_changed() because we'll first have to find
- * the iter of @individual using g_sequence_lookup() but the lookup function
- * won't work as it assumes that the sequence is sorted which is no longer
- * the case at this point as @individual's popularity just changed. */
- g_sequence_sort (priv->individuals_pop, compare_individual_by_pop, NULL);
-
- /* Only check for top individuals after 10 interaction events happen */
- if (priv->global_interaction_counter % 10 == 0)
- check_top_individuals (self);
- priv->global_interaction_counter++;
-}
-
-static void
-add_individual (EmpathyIndividualManager *self, FolksIndividual *individual)
-{
- EmpathyIndividualManagerPriv *priv = GET_PRIV (self);
-
- g_hash_table_insert (priv->individuals,
- g_strdup (folks_individual_get_id (individual)),
- g_object_ref (individual));
-
- g_sequence_insert_sorted (priv->individuals_pop, g_object_ref (individual),
- compare_individual_by_pop, NULL);
- check_top_individuals (self);
-
- g_signal_connect (individual, "group-changed",
- G_CALLBACK (individual_group_changed_cb), self);
- g_signal_connect (individual, "notify::is-favourite",
- G_CALLBACK (individual_notify_is_favourite_cb), self);
- g_signal_connect (individual, "notify::im-interaction-count",
- G_CALLBACK (individual_notify_im_interaction_count), self);
-}
-
-static void
-remove_individual (EmpathyIndividualManager *self, FolksIndividual *individual)
-{
- EmpathyIndividualManagerPriv *priv = GET_PRIV (self);
- GSequenceIter *iter;
-
- iter = g_sequence_lookup (priv->individuals_pop, individual,
- compare_individual_by_pop, NULL);
- if (iter != NULL)
- {
- /* priv->top_individuals borrows its reference from
- * priv->individuals_pop so we take a reference on the individual while
- * removing it to make sure it stays alive while calling
- * check_top_individuals(). */
- g_object_ref (individual);
- g_sequence_remove (iter);
- check_top_individuals (self);
- g_object_unref (individual);
- }
-
- g_signal_handlers_disconnect_by_func (individual,
- individual_group_changed_cb, self);
- g_signal_handlers_disconnect_by_func (individual,
- individual_notify_is_favourite_cb, self);
- g_signal_handlers_disconnect_by_func (individual,
- individual_notify_im_interaction_count, self);
-
- g_hash_table_remove (priv->individuals, folks_individual_get_id (individual));
-}
-
-/* This is emitted for *all* individuals in the individual aggregator (not
- * just the ones we keep a reference to), to allow for the case where a new
- * individual doesn't contain an EmpathyContact, but later has a persona added
- * which does. */
-static void
-individual_notify_personas_cb (FolksIndividual *individual,
- GParamSpec *pspec,
- EmpathyIndividualManager *self)
-{
- EmpathyIndividualManagerPriv *priv = GET_PRIV (self);
-
- const gchar *id = folks_individual_get_id (individual);
- gboolean has_contact = empathy_folks_individual_contains_contact (individual);
- gboolean had_contact = (g_hash_table_lookup (priv->individuals,
- id) != NULL) ? TRUE : FALSE;
-
- if (had_contact == TRUE && has_contact == FALSE)
- {
- GList *removed = NULL;
-
- /* The Individual has lost its EmpathyContact */
- removed = g_list_prepend (removed, individual);
- g_signal_emit (self, signals[MEMBERS_CHANGED], 0, NULL, NULL, removed,
- TP_CHANNEL_GROUP_CHANGE_REASON_NONE /* FIXME */);
- g_list_free (removed);
-
- remove_individual (self, individual);
- }
- else if (had_contact == FALSE && has_contact == TRUE)
- {
- GList *added = NULL;
-
- /* The Individual has gained its first EmpathyContact */
- add_individual (self, individual);
-
- added = g_list_prepend (added, individual);
- g_signal_emit (self, signals[MEMBERS_CHANGED], 0, NULL, added, NULL,
- TP_CHANNEL_GROUP_CHANGE_REASON_NONE /* FIXME */);
- g_list_free (added);
- }
-}
-
-static void
-aggregator_individuals_changed_cb (FolksIndividualAggregator *aggregator,
- GeeMultiMap *changes,
- EmpathyIndividualManager *self)
-{
- EmpathyIndividualManagerPriv *priv = GET_PRIV (self);
- GeeIterator *iter;
- GeeSet *removed;
- GeeCollection *added;
- GList *added_set = NULL, *added_filtered = NULL, *removed_list = NULL;
-
- /* We're not interested in the relationships between the added and removed
- * individuals, so just extract collections of them. Note that the added
- * collection may contain duplicates, while the removed set won't. */
- removed = gee_multi_map_get_keys (changes);
- added = gee_multi_map_get_values (changes);
-
- /* Handle the removals first, as one of the added Individuals might have the
- * same ID as one of the removed Individuals (due to linking). */
- iter = gee_iterable_iterator (GEE_ITERABLE (removed));
- while (gee_iterator_next (iter))
- {
- FolksIndividual *ind = gee_iterator_get (iter);
-
- if (ind == NULL)
- continue;
-
- g_signal_handlers_disconnect_by_func (ind,
- individual_notify_personas_cb, self);
-
- if (g_hash_table_lookup (priv->individuals,
- folks_individual_get_id (ind)) != NULL)
- {
- remove_individual (self, ind);
- removed_list = g_list_prepend (removed_list, ind);
- }
-
- g_clear_object (&ind);
- }
- g_clear_object (&iter);
-
- /* Filter the individuals for ones which contain EmpathyContacts */
- iter = gee_iterable_iterator (GEE_ITERABLE (added));
- while (gee_iterator_next (iter))
- {
- FolksIndividual *ind = gee_iterator_get (iter);
-
- /* Make sure we handle each added individual only once. */
- if (ind == NULL || g_list_find (added_set, ind) != NULL)
- continue;
- added_set = g_list_prepend (added_set, ind);
-
- g_signal_connect (ind, "notify::personas",
- G_CALLBACK (individual_notify_personas_cb), self);
-
- if (empathy_folks_individual_contains_contact (ind) == TRUE)
- {
- add_individual (self, ind);
- added_filtered = g_list_prepend (added_filtered, ind);
- }
-
- g_clear_object (&ind);
- }
- g_clear_object (&iter);
-
- g_list_free (added_set);
-
- g_object_unref (added);
- g_object_unref (removed);
-
- /* Bail if we have no individuals left */
- if (added_filtered == NULL && removed == NULL)
- return;
-
- added_filtered = g_list_reverse (added_filtered);
-
- g_signal_emit (self, signals[MEMBERS_CHANGED], 0, NULL,
- added_filtered, removed_list,
- TP_CHANNEL_GROUP_CHANGE_REASON_NONE,
- TRUE);
-
- g_list_free (added_filtered);
- g_list_free (removed_list);
-}
-
-static void
-individual_manager_dispose (GObject *object)
-{
- EmpathyIndividualManagerPriv *priv = GET_PRIV (object);
-
- g_hash_table_unref (priv->individuals);
-
- tp_clear_object (&priv->aggregator);
-
- G_OBJECT_CLASS (empathy_individual_manager_parent_class)->dispose (object);
-}
-
-static void
-individual_manager_finalize (GObject *object)
-{
- EmpathyIndividualManagerPriv *priv = GET_PRIV (object);
-
- g_sequence_free (priv->individuals_pop);
-
- G_OBJECT_CLASS (empathy_individual_manager_parent_class)->finalize (object);
-}
-
-static GObject *
-individual_manager_constructor (GType type,
- guint n_props,
- GObjectConstructParam *props)
-{
- GObject *retval;
-
- if (manager_singleton)
- {
- retval = g_object_ref (manager_singleton);
- }
- else
- {
- retval =
- G_OBJECT_CLASS (empathy_individual_manager_parent_class)->
- constructor (type, n_props, props);
-
- manager_singleton = EMPATHY_INDIVIDUAL_MANAGER (retval);
- g_object_add_weak_pointer (retval, (gpointer) & manager_singleton);
- }
-
- return retval;
-}
-
-/**
- * empathy_individual_manager_initialized:
- *
- * Reports whether or not the singleton has already been created.
- *
- * There can be instances where you want to access the #EmpathyIndividualManager
- * only if it has been set up for this process.
- *
- * Returns: %TRUE if the #EmpathyIndividualManager singleton has previously
- * been initialized.
- */
-gboolean
-empathy_individual_manager_initialized (void)
-{
- return (manager_singleton != NULL);
-}
-
-static void
-empathy_individual_manager_class_init (EmpathyIndividualManagerClass *klass)
-{
- GObjectClass *object_class = G_OBJECT_CLASS (klass);
- GParamSpec *spec;
-
- object_class->get_property = individual_manager_get_property;
- object_class->dispose = individual_manager_dispose;
- object_class->finalize = individual_manager_finalize;
- object_class->constructor = individual_manager_constructor;
-
- spec = g_param_spec_pointer ("top-individuals", "top individuals",
- "Top Individuals",
- G_PARAM_READABLE | G_PARAM_STATIC_STRINGS);
- g_object_class_install_property (object_class, PROP_TOP_INDIVIDUALS, spec);
-
- signals[GROUPS_CHANGED] =
- g_signal_new ("groups-changed",
- G_TYPE_FROM_CLASS (klass),
- G_SIGNAL_RUN_LAST,
- 0,
- NULL, NULL,
- g_cclosure_marshal_generic,
- G_TYPE_NONE, 3, FOLKS_TYPE_INDIVIDUAL, G_TYPE_STRING, G_TYPE_BOOLEAN);
-
- signals[FAVOURITES_CHANGED] =
- g_signal_new ("favourites-changed",
- G_TYPE_FROM_CLASS (klass),
- G_SIGNAL_RUN_LAST,
- 0,
- NULL, NULL,
- g_cclosure_marshal_generic,
- G_TYPE_NONE, 2, FOLKS_TYPE_INDIVIDUAL, G_TYPE_BOOLEAN);
-
- signals[MEMBERS_CHANGED] =
- g_signal_new ("members-changed",
- G_TYPE_FROM_CLASS (klass),
- G_SIGNAL_RUN_LAST,
- 0,
- NULL, NULL,
- g_cclosure_marshal_generic,
- G_TYPE_NONE,
- 4, G_TYPE_STRING, G_TYPE_POINTER, G_TYPE_POINTER, G_TYPE_UINT);
-
- signals[CONTACTS_LOADED] =
- g_signal_new ("contacts-loaded",
- G_TYPE_FROM_CLASS (klass),
- G_SIGNAL_RUN_LAST,
- 0,
- NULL, NULL,
- g_cclosure_marshal_generic,
- G_TYPE_NONE,
- 0);
-
- g_type_class_add_private (object_class,
- sizeof (EmpathyIndividualManagerPriv));
-}
-
-static void
-aggregator_is_quiescent_notify_cb (FolksIndividualAggregator *aggregator,
- GParamSpec *spec,
- EmpathyIndividualManager *self)
-{
- EmpathyIndividualManagerPriv *priv = GET_PRIV (self);
- gboolean is_quiescent;
-
- if (priv->contacts_loaded)
- return;
-
- g_object_get (aggregator, "is-quiescent", &is_quiescent, NULL);
-
- if (!is_quiescent)
- return;
-
- priv->contacts_loaded = TRUE;
-
- g_signal_emit (self, signals[CONTACTS_LOADED], 0);
-}
-
-static void
-empathy_individual_manager_init (EmpathyIndividualManager *self)
-{
- EmpathyIndividualManagerPriv *priv = G_TYPE_INSTANCE_GET_PRIVATE (self,
- EMPATHY_TYPE_INDIVIDUAL_MANAGER, EmpathyIndividualManagerPriv);
-
- self->priv = priv;
- priv->individuals = g_hash_table_new_full (g_str_hash, g_str_equal,
- g_free, g_object_unref);
-
- priv->individuals_pop = g_sequence_new (g_object_unref);
-
- priv->aggregator = folks_individual_aggregator_new ();
- tp_g_signal_connect_object (priv->aggregator, "individuals-changed-detailed",
- G_CALLBACK (aggregator_individuals_changed_cb), self, 0);
- tp_g_signal_connect_object (priv->aggregator, "notify::is-quiescent",
- G_CALLBACK (aggregator_is_quiescent_notify_cb), self, 0);
- folks_individual_aggregator_prepare (priv->aggregator, NULL, NULL);
-}
-
-EmpathyIndividualManager *
-empathy_individual_manager_dup_singleton (void)
-{
- return g_object_new (EMPATHY_TYPE_INDIVIDUAL_MANAGER, NULL);
-}
-
-GList *
-empathy_individual_manager_get_members (EmpathyIndividualManager *self)
-{
- EmpathyIndividualManagerPriv *priv = GET_PRIV (self);
-
- g_return_val_if_fail (EMPATHY_IS_INDIVIDUAL_MANAGER (self), NULL);
-
- return g_hash_table_get_values (priv->individuals);
-}
-
-FolksIndividual *
-empathy_individual_manager_lookup_member (EmpathyIndividualManager *self,
- const gchar *id)
-{
- EmpathyIndividualManagerPriv *priv = GET_PRIV (self);
-
- g_return_val_if_fail (EMPATHY_IS_INDIVIDUAL_MANAGER (self), NULL);
-
- return g_hash_table_lookup (priv->individuals, id);
-}
-
-static void
-aggregator_add_persona_from_details_cb (GObject *source,
- GAsyncResult *result,
- gpointer user_data)
-{
- FolksIndividualAggregator *aggregator = FOLKS_INDIVIDUAL_AGGREGATOR (source);
- EmpathyContact *contact = EMPATHY_CONTACT (user_data);
- FolksPersona *persona;
- GError *error = NULL;
-
- persona = folks_individual_aggregator_add_persona_from_details_finish (
- aggregator, result, &error);
- if (error != NULL)
- {
- g_warning ("failed to add individual from contact: %s", error->message);
- g_clear_error (&error);
- }
-
- /* The persona can be NULL even if there wasn't an error, if the persona was
- * already in the contact list */
- if (persona != NULL)
- {
- /* Set the contact's persona */
- empathy_contact_set_persona (contact, persona);
- g_object_unref (persona);
- }
-
- g_object_unref (contact);
-}
-
-void
-empathy_individual_manager_add_from_contact (EmpathyIndividualManager *self,
- EmpathyContact *contact)
-{
- EmpathyIndividualManagerPriv *priv;
- FolksBackendStore *backend_store;
- FolksBackend *backend;
- FolksPersonaStore *persona_store;
- GHashTable* details;
- GeeMap *persona_stores;
- TpAccount *account;
- const gchar *store_id;
-
- g_return_if_fail (EMPATHY_IS_INDIVIDUAL_MANAGER (self));
- g_return_if_fail (EMPATHY_IS_CONTACT (contact));
-
- priv = GET_PRIV (self);
-
- /* We need to ref the contact since otherwise its linked TpHandle will be
- * destroyed. */
- g_object_ref (contact);
-
- DEBUG ("adding individual from contact %s (%s)",
- empathy_contact_get_id (contact), empathy_contact_get_alias (contact));
-
- account = empathy_contact_get_account (contact);
- store_id = tp_proxy_get_object_path (TP_PROXY (account));
-
- /* Get the persona store to use */
- backend_store = folks_backend_store_dup ();
- backend =
- folks_backend_store_dup_backend_by_name (backend_store, "telepathy");
-
- if (backend == NULL)
- {
- g_warning ("Failed to add individual from contact: couldn't get "
- "'telepathy' backend");
- goto finish;
- }
-
- persona_stores = folks_backend_get_persona_stores (backend);
- persona_store = gee_map_get (persona_stores, store_id);
-
- if (persona_store == NULL)
- {
- g_warning ("Failed to add individual from contact: couldn't get persona "
- "store '%s'", store_id);
- goto finish;
- }
-
- details = tp_asv_new (
- "contact", G_TYPE_STRING, empathy_contact_get_id (contact),
- NULL);
-
- folks_individual_aggregator_add_persona_from_details (
- priv->aggregator, NULL, persona_store, details,
- aggregator_add_persona_from_details_cb, contact);
-
- g_hash_table_unref (details);
- g_object_unref (persona_store);
-
-finish:
- tp_clear_object (&backend);
- tp_clear_object (&backend_store);
-}
-
-static void
-aggregator_remove_individual_cb (GObject *source,
- GAsyncResult *result,
- gpointer user_data)
-{
- FolksIndividualAggregator *aggregator = FOLKS_INDIVIDUAL_AGGREGATOR (source);
- GError *error = NULL;
-
- folks_individual_aggregator_remove_individual_finish (
- aggregator, result, &error);
- if (error != NULL)
- {
- g_warning ("failed to remove individual: %s", error->message);
- g_clear_error (&error);
- }
-}
-
-/**
- * Removes the inner contact from the server (and thus the Individual). Not
- * meant for de-shelling inner personas from an Individual.
- */
-void
-empathy_individual_manager_remove (EmpathyIndividualManager *self,
- FolksIndividual *individual,
- const gchar *message)
-{
- EmpathyIndividualManagerPriv *priv;
-
- g_return_if_fail (EMPATHY_IS_INDIVIDUAL_MANAGER (self));
- g_return_if_fail (FOLKS_IS_INDIVIDUAL (individual));
-
- priv = GET_PRIV (self);
-
- DEBUG ("removing individual %s (%s)",
- folks_individual_get_id (individual),
- folks_alias_details_get_alias (FOLKS_ALIAS_DETAILS (individual)));
-
- folks_individual_aggregator_remove_individual (priv->aggregator, individual,
- aggregator_remove_individual_cb, self);
-}
-
-/* FIXME: The parameter @self is not required and the method can be placed in
- * utilities. I left it as it is to stay coherent with empathy-2.34 */
-/**
- * empathy_individual_manager_supports_blocking
- * @self: the #EmpathyIndividualManager
- * @individual: an individual to check
- *
- * Indicates whether any personas of an @individual can be blocked.
- *
- * Returns: %TRUE if any persona supports contact blocking
- */
-gboolean
-empathy_individual_manager_supports_blocking (EmpathyIndividualManager *self,
- FolksIndividual *individual)
-{
- GeeSet *personas;
- GeeIterator *iter;
- gboolean retval = FALSE;
-
- g_return_val_if_fail (EMPATHY_IS_INDIVIDUAL_MANAGER (self), FALSE);
-
- personas = folks_individual_get_personas (individual);
- iter = gee_iterable_iterator (GEE_ITERABLE (personas));
- while (!retval && gee_iterator_next (iter))
- {
- TpfPersona *persona = gee_iterator_get (iter);
- TpConnection *conn;
-
- if (TPF_IS_PERSONA (persona))
- {
- TpContact *tp_contact;
-
- tp_contact = tpf_persona_get_contact (persona);
- if (tp_contact != NULL)
- {
- conn = tp_contact_get_connection (tp_contact);
-
- if (tp_proxy_has_interface_by_id (conn,
- TP_IFACE_QUARK_CONNECTION_INTERFACE_CONTACT_BLOCKING))
- retval = TRUE;
- }
- }
- g_clear_object (&persona);
- }
- g_clear_object (&iter);
-
- return retval;
-}
-
-void
-empathy_individual_manager_set_blocked (EmpathyIndividualManager *self,
- FolksIndividual *individual,
- gboolean blocked,
- gboolean abusive)
-{
- GeeSet *personas;
- GeeIterator *iter;
-
- g_return_if_fail (EMPATHY_IS_INDIVIDUAL_MANAGER (self));
-
- personas = folks_individual_get_personas (individual);
- iter = gee_iterable_iterator (GEE_ITERABLE (personas));
- while (gee_iterator_next (iter))
- {
- TpfPersona *persona = gee_iterator_get (iter);
-
- if (TPF_IS_PERSONA (persona))
- {
- TpContact *tp_contact;
- TpConnection *conn;
-
- tp_contact = tpf_persona_get_contact (persona);
- if (tp_contact == NULL)
- continue;
-
- conn = tp_contact_get_connection (tp_contact);
-
- if (!tp_proxy_has_interface_by_id (conn,
- TP_IFACE_QUARK_CONNECTION_INTERFACE_CONTACT_BLOCKING))
- continue;
-
- if (blocked)
- tp_contact_block_async (tp_contact, abusive, NULL, NULL);
- else
- tp_contact_unblock_async (tp_contact, NULL, NULL);
- }
- g_clear_object (&persona);
- }
- g_clear_object (&iter);
-}
-
-static void
-groups_change_group_cb (GObject *source,
- GAsyncResult *result,
- gpointer user_data)
-{
- FolksGroupDetails *group_details = FOLKS_GROUP_DETAILS (source);
- GError *error = NULL;
-
- folks_group_details_change_group_finish (group_details, result, &error);
- if (error != NULL)
- {
- g_warning ("failed to change group: %s", error->message);
- g_clear_error (&error);
- }
-}
-
-static void
-remove_group_cb (const gchar *id,
- FolksIndividual *individual,
- const gchar *group)
-{
- folks_group_details_change_group (FOLKS_GROUP_DETAILS (individual), group,
- FALSE, groups_change_group_cb, NULL);
-}
-
-void
-empathy_individual_manager_remove_group (EmpathyIndividualManager *manager,
- const gchar *group)
-{
- EmpathyIndividualManagerPriv *priv;
-
- g_return_if_fail (EMPATHY_IS_INDIVIDUAL_MANAGER (manager));
- g_return_if_fail (group != NULL);
-
- priv = GET_PRIV (manager);
-
- DEBUG ("removing group %s", group);
-
- /* Remove every individual from the group */
- g_hash_table_foreach (priv->individuals, (GHFunc) remove_group_cb,
- (gpointer) group);
-}
-
-gboolean
-empathy_individual_manager_get_contacts_loaded (EmpathyIndividualManager *self)
-{
- EmpathyIndividualManagerPriv *priv = GET_PRIV (self);
-
- return priv->contacts_loaded;
-}
-
-GList *
-empathy_individual_manager_get_top_individuals (EmpathyIndividualManager *self)
-{
- EmpathyIndividualManagerPriv *priv = GET_PRIV (self);
-
- return priv->top_individuals;
-}
-
-static void
-unprepare_cb (GObject *source,
- GAsyncResult *result,
- gpointer user_data)
-{
- GError *error = NULL;
- GSimpleAsyncResult *my_result = user_data;
-
- folks_individual_aggregator_unprepare_finish (
- FOLKS_INDIVIDUAL_AGGREGATOR (source), result, &error);
-
- if (error != NULL)
- {
- DEBUG ("Failed to unprepare the aggregator: %s", error->message);
- g_simple_async_result_take_error (my_result, error);
- }
-
- g_simple_async_result_complete (my_result);
- g_object_unref (my_result);
-}
-
-void
-empathy_individual_manager_unprepare_async (
- EmpathyIndividualManager *self,
- GAsyncReadyCallback callback,
- gpointer user_data)
-{
- EmpathyIndividualManagerPriv *priv = GET_PRIV (self);
- GSimpleAsyncResult *result;
-
- result = g_simple_async_result_new (G_OBJECT (self), callback, user_data,
- empathy_individual_manager_unprepare_async);
-
- folks_individual_aggregator_unprepare (priv->aggregator, unprepare_cb,
- result);
-}
-
-gboolean
-empathy_individual_manager_unprepare_finish (
- EmpathyIndividualManager *self,
- GAsyncResult *result,
- GError **error)
-{
- tpaw_implement_finish_void (self,
- empathy_individual_manager_unprepare_async)
-}
diff --git a/libempathy/empathy-individual-manager.h b/libempathy/empathy-individual-manager.h
deleted file mode 100644
index fc270437..00000000
--- a/libempathy/empathy-individual-manager.h
+++ /dev/null
@@ -1,103 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * Copyright (C) 2007-2010 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>
- * Travis Reitter <travis.reitter@collabora.co.uk>
- */
-
-#ifndef __EMPATHY_INDIVIDUAL_MANAGER_H__
-#define __EMPATHY_INDIVIDUAL_MANAGER_H__
-
-#include <glib.h>
-#include <folks/folks.h>
-
-#include "empathy-contact.h"
-
-G_BEGIN_DECLS
-#define EMPATHY_TYPE_INDIVIDUAL_MANAGER (empathy_individual_manager_get_type ())
-#define EMPATHY_INDIVIDUAL_MANAGER(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), EMPATHY_TYPE_INDIVIDUAL_MANAGER, EmpathyIndividualManager))
-#define EMPATHY_INDIVIDUAL_MANAGER_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), EMPATHY_TYPE_INDIVIDUAL_MANAGER, EmpathyIndividualManagerClass))
-#define EMPATHY_IS_INDIVIDUAL_MANAGER(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), EMPATHY_TYPE_INDIVIDUAL_MANAGER))
-#define EMPATHY_IS_INDIVIDUAL_MANAGER_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), EMPATHY_TYPE_INDIVIDUAL_MANAGER))
-#define EMPATHY_INDIVIDUAL_MANAGER_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), EMPATHY_TYPE_INDIVIDUAL_MANAGER, EmpathyIndividualManagerClass))
-
-typedef struct _EmpathyIndividualManager EmpathyIndividualManager;
-typedef struct _EmpathyIndividualManagerClass EmpathyIndividualManagerClass;
-
-struct _EmpathyIndividualManager
-{
- GObject parent;
- gpointer priv;
-};
-
-struct _EmpathyIndividualManagerClass
-{
- GObjectClass parent_class;
-};
-
-GType empathy_individual_manager_get_type (void) G_GNUC_CONST;
-
-gboolean empathy_individual_manager_initialized (void);
-
-EmpathyIndividualManager *empathy_individual_manager_dup_singleton (void);
-
-GList *empathy_individual_manager_get_members (
- EmpathyIndividualManager *manager);
-
-FolksIndividual *empathy_individual_manager_lookup_member (
- EmpathyIndividualManager *manager,
- const gchar *id);
-
-void empathy_individual_manager_add_from_contact (
- EmpathyIndividualManager *manager,
- EmpathyContact *contact);
-
-void empathy_individual_manager_remove (EmpathyIndividualManager *manager,
- FolksIndividual *individual,
- const gchar *message);
-
-void empathy_individual_manager_remove_group (EmpathyIndividualManager *manager,
- const gchar *group);
-
-gboolean empathy_individual_manager_supports_blocking (
- EmpathyIndividualManager *self,
- FolksIndividual *individual);
-
-void empathy_individual_manager_set_blocked (EmpathyIndividualManager *self,
- FolksIndividual *individual,
- gboolean blocked,
- gboolean abusive);
-
-gboolean empathy_individual_manager_get_contacts_loaded (
- EmpathyIndividualManager *self);
-
-GList * empathy_individual_manager_get_top_individuals (
- EmpathyIndividualManager *self);
-
-void empathy_individual_manager_unprepare_async (
- EmpathyIndividualManager *self,
- GAsyncReadyCallback callback,
- gpointer user_data);
-
-gboolean empathy_individual_manager_unprepare_finish (
- EmpathyIndividualManager *self,
- GAsyncResult *result,
- GError **error);
-
-G_END_DECLS
-#endif /* __EMPATHY_INDIVIDUAL_MANAGER_H__ */
diff --git a/libempathy/empathy-location.h b/libempathy/empathy-location.h
deleted file mode 100644
index 0feb0e52..00000000
--- a/libempathy/empathy-location.h
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- * Copyright (C) 2008, 2009 Collabora Ltd.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- *
- * Authors: Pierre-Luc Beaudoin <pierre-luc.beaudoin@collabora.co.uk>
- */
-
-#ifndef __EMPATHY_LOCATION_H__
-#define __EMPATHY_LOCATION_H__
-
-#include <glib.h>
-
-G_BEGIN_DECLS
-
-/* These keys come from the Telepathy-Spec 0.7.20 */
-#define EMPATHY_LOCATION_COUNTRY_CODE "countrycode"
-#define EMPATHY_LOCATION_COUNTRY "country"
-#define EMPATHY_LOCATION_REGION "region"
-#define EMPATHY_LOCATION_LOCALITY "locality"
-#define EMPATHY_LOCATION_AREA "area"
-#define EMPATHY_LOCATION_POSTAL_CODE "postalcode"
-#define EMPATHY_LOCATION_STREET "street"
-#define EMPATHY_LOCATION_BUILDING "building"
-#define EMPATHY_LOCATION_FLOOR "floor"
-#define EMPATHY_LOCATION_ROOM "room"
-#define EMPATHY_LOCATION_TEXT "text"
-#define EMPATHY_LOCATION_DESCRIPTION "description"
-#define EMPATHY_LOCATION_URI "uri"
-#define EMPATHY_LOCATION_LAT "lat"
-#define EMPATHY_LOCATION_LON "lon"
-#define EMPATHY_LOCATION_ALT "alt"
-#define EMPATHY_LOCATION_ACCURACY "accuracy"
-#define EMPATHY_LOCATION_ACCURACY_LEVEL "accuracy-level"
-#define EMPATHY_LOCATION_ERROR "error"
-#define EMPATHY_LOCATION_VERTICAL_ERROR_M "vertical-error-m"
-#define EMPATHY_LOCATION_HORIZONTAL_ERROR_M "horizontal-error-m"
-#define EMPATHY_LOCATION_SPEED "speed"
-#define EMPATHY_LOCATION_BEARING "bearing"
-#define EMPATHY_LOCATION_CLIMB "climb"
-#define EMPATHY_LOCATION_TIMESTAMP "timestamp"
-
-G_END_DECLS
-
-#endif /* __EMPATHY_LOCATION_H__ */
diff --git a/libempathy/empathy-message.c b/libempathy/empathy-message.c
deleted file mode 100644
index d6f30a67..00000000
--- a/libempathy/empathy-message.c
+++ /dev/null
@@ -1,740 +0,0 @@
-/* -*- 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., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301 USA
- *
- * Authors: Mikael Hallendal <micke@imendio.com>
- * Xavier Claessens <xclaesse@gmail.com>
- */
-
-#include "config.h"
-#include "empathy-message.h"
-
-#include <glib/gi18n-lib.h>
-#include <tp-account-widgets/tpaw-time.h>
-
-#include "empathy-client-factory.h"
-#include "empathy-utils.h"
-#include "empathy-enum-types.h"
-
-#define GET_PRIV(obj) EMPATHY_GET_PRIV (obj, EmpathyMessage)
-typedef struct {
- TpMessage *tp_message;
- TpChannelTextMessageType type;
- EmpathyContact *sender;
- EmpathyContact *receiver;
- gchar *token;
- gchar *supersedes;
- gchar *body;
- gint64 timestamp;
- gint64 original_timestamp;
- gboolean is_backlog;
- guint id;
- gboolean incoming;
- TpChannelTextMessageFlags flags;
-} 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_TOKEN,
- PROP_SUPERSEDES,
- PROP_BODY,
- PROP_TIMESTAMP,
- PROP_ORIGINAL_TIMESTAMP,
- PROP_IS_BACKLOG,
- PROP_INCOMING,
- PROP_FLAGS,
- PROP_TP_MESSAGE,
-};
-
-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_PARAM_STATIC_STRINGS |
- G_PARAM_CONSTRUCT_ONLY));
- 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_PARAM_STATIC_STRINGS));
- 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_PARAM_STATIC_STRINGS));
- g_object_class_install_property (object_class,
- PROP_TOKEN,
- g_param_spec_string ("token",
- "Message Token",
- "The message-token",
- NULL,
- G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | G_PARAM_CONSTRUCT_ONLY));
- g_object_class_install_property (object_class,
- PROP_SUPERSEDES,
- g_param_spec_string ("supersedes",
- "Supersedes Token",
- "The message-token this message supersedes",
- NULL,
- G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | G_PARAM_CONSTRUCT_ONLY));
- 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_PARAM_STATIC_STRINGS |
- G_PARAM_CONSTRUCT_ONLY));
- g_object_class_install_property (object_class,
- PROP_TIMESTAMP,
- g_param_spec_int64 ("timestamp",
- "timestamp",
- "timestamp",
- G_MININT64, G_MAXINT64, 0,
- G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS |
- G_PARAM_CONSTRUCT_ONLY));
- g_object_class_install_property (object_class,
- PROP_ORIGINAL_TIMESTAMP,
- g_param_spec_int64 ("original-timestamp",
- "Original Timestamp",
- "Timestamp of the original message",
- G_MININT64, G_MAXINT64, 0,
- G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | G_PARAM_CONSTRUCT_ONLY));
- g_object_class_install_property (object_class,
- PROP_IS_BACKLOG,
- g_param_spec_boolean ("is-backlog",
- "History message",
- "If the message belongs to history",
- FALSE,
- G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS |
- G_PARAM_CONSTRUCT_ONLY));
-
-
- g_object_class_install_property (object_class,
- PROP_INCOMING,
- g_param_spec_boolean ("incoming",
- "Incoming",
- "If this is an incoming (as opposed to sent) message",
- FALSE,
- G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS |
- G_PARAM_CONSTRUCT_ONLY));
-
- g_object_class_install_property (object_class,
- PROP_FLAGS,
- g_param_spec_uint ("flags",
- "Flags",
- "The TpChannelTextMessageFlags of this message",
- 0, G_MAXUINT, 0,
- G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS |
- G_PARAM_CONSTRUCT_ONLY));
-
- g_object_class_install_property (object_class,
- PROP_TP_MESSAGE,
- g_param_spec_object ("tp-message",
- "TpMessage",
- "The TpMessage of this message",
- TP_TYPE_MESSAGE,
- G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS |
- G_PARAM_CONSTRUCT_ONLY));
-
- 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 = tpaw_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);
- }
-
- if (priv->tp_message) {
- g_object_unref (priv->tp_message);
- }
-
- g_free (priv->token);
- g_free (priv->supersedes);
- 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_TOKEN:
- g_value_set_string (value, priv->token);
- break;
- case PROP_SUPERSEDES:
- g_value_set_string (value, priv->supersedes);
- break;
- case PROP_BODY:
- g_value_set_string (value, priv->body);
- break;
- case PROP_TIMESTAMP:
- g_value_set_int64 (value, priv->timestamp);
- break;
- case PROP_ORIGINAL_TIMESTAMP:
- g_value_set_int64 (value, priv->original_timestamp);
- break;
- case PROP_IS_BACKLOG:
- g_value_set_boolean (value, priv->is_backlog);
- break;
- case PROP_INCOMING:
- g_value_set_boolean (value, priv->incoming);
- break;
- case PROP_FLAGS:
- g_value_set_uint (value, priv->flags);
- break;
- case PROP_TP_MESSAGE:
- g_value_set_object (value, priv->tp_message);
- 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:
- priv->type = 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_TOKEN:
- g_assert (priv->token == NULL); /* construct only */
- priv->token = g_value_dup_string (value);
- break;
- case PROP_SUPERSEDES:
- g_assert (priv->supersedes == NULL); /* construct only */
- priv->supersedes = g_value_dup_string (value);
- break;
- case PROP_BODY:
- g_assert (priv->body == NULL); /* construct only */
- priv->body = g_value_dup_string (value);
- break;
- case PROP_TIMESTAMP:
- priv->timestamp = g_value_get_int64 (value);
- if (priv->timestamp <= 0)
- priv->timestamp = tpaw_time_get_current ();
- break;
- case PROP_ORIGINAL_TIMESTAMP:
- priv->original_timestamp = g_value_get_int64 (value);
- break;
- case PROP_IS_BACKLOG:
- priv->is_backlog = g_value_get_boolean (value);
- break;
- case PROP_INCOMING:
- priv->incoming = g_value_get_boolean (value);
- break;
- case PROP_FLAGS:
- priv->flags = g_value_get_uint (value);
- break;
- case PROP_TP_MESSAGE:
- priv->tp_message = g_value_dup_object (value);
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, pspec);
- break;
- };
-}
-
-EmpathyMessage *
-empathy_message_from_tpl_log_event (TplEvent *logevent)
-{
- EmpathyMessage *retval = NULL;
- EmpathyClientFactory *factory;
- TpAccount *account = NULL;
- TplEntity *receiver = NULL;
- TplEntity *sender = NULL;
- gchar *body = NULL;
- const gchar *token = NULL, *supersedes = NULL;
- EmpathyContact *contact;
- TpChannelTextMessageType type = TP_CHANNEL_TEXT_MESSAGE_TYPE_NORMAL;
- gint64 timestamp, original_timestamp = 0;
-
- g_return_val_if_fail (TPL_IS_EVENT (logevent), NULL);
-
- factory = empathy_client_factory_dup ();
- /* FIXME Currently Empathy shows in the log viewer only valid accounts, so it
- * won't be selected any non-existing (ie removed) account.
- * When #610455 will be fixed, calling tp_account_manager_ensure_account ()
- * might add a not existing account to the AM. tp_account_new () probably
- * will be the best way to handle it.
- * Note: When creating an EmpathyContact from a TplEntity instance, the
- * TpAccount is passed *only* to let EmpathyContact be able to retrieve the
- * avatar (contact_get_avatar_filename () need a TpAccount).
- * If the way EmpathyContact stores the avatar is changes, it might not be
- * needed anymore any TpAccount passing and the following call will be
- * useless */
- account = tp_simple_client_factory_ensure_account (
- TP_SIMPLE_CLIENT_FACTORY (factory),
- tpl_event_get_account_path (logevent), NULL, NULL);
- g_object_unref (factory);
-
- if (TPL_IS_TEXT_EVENT (logevent)) {
- TplTextEvent *textevent = TPL_TEXT_EVENT (logevent);
-
- supersedes = tpl_text_event_get_supersedes_token (textevent);
-
- /* tp-logger is kind of messy in that instead of having
- * timestamp and original-timestamp like Telepathy it has
- * timestamp (which is the original) and edited-timestamp,
- * (which is when the message was edited) */
- if (tp_str_empty (supersedes)) {
- /* not an edited message */
- timestamp = tpl_event_get_timestamp (logevent);
- } else {
- /* this is an edited event */
- original_timestamp = tpl_event_get_timestamp (logevent);
- timestamp = tpl_text_event_get_edit_timestamp (textevent);
- }
-
- body = g_strdup (tpl_text_event_get_message (textevent));
-
- type = tpl_text_event_get_message_type (TPL_TEXT_EVENT (logevent));
- token = tpl_text_event_get_message_token (textevent);
- }
- else if (TPL_IS_CALL_EVENT (logevent)) {
- TplCallEvent *call = TPL_CALL_EVENT (logevent);
-
- timestamp = tpl_event_get_timestamp (logevent);
-
- if (tpl_call_event_get_end_reason (call) == TP_CALL_STATE_CHANGE_REASON_NO_ANSWER)
- body = g_strdup_printf (_("Missed call from %s"),
- tpl_entity_get_alias (tpl_event_get_sender (logevent)));
- else if (tpl_entity_get_entity_type (tpl_event_get_sender (logevent)) == TPL_ENTITY_SELF)
- /* Translators: this is an outgoing call, e.g. 'Called Alice' */
- body = g_strdup_printf (_("Called %s"),
- tpl_entity_get_alias (tpl_event_get_receiver (logevent)));
- else
- body = g_strdup_printf (_("Call from %s"),
- tpl_entity_get_alias (tpl_event_get_sender (logevent)));
- }
- else {
- /* Unknown event type */
- return NULL;
- }
-
- receiver = tpl_event_get_receiver (logevent);
- sender = tpl_event_get_sender (logevent);
-
- retval = g_object_new (EMPATHY_TYPE_MESSAGE,
- "type", type,
- "token", token,
- "supersedes", supersedes,
- "body", body,
- "is-backlog", TRUE,
- "timestamp", timestamp,
- "original-timestamp", original_timestamp,
- NULL);
-
- if (receiver != NULL) {
- contact = empathy_contact_from_tpl_contact (account, receiver);
- empathy_message_set_receiver (retval, contact);
- g_object_unref (contact);
- }
-
- if (sender != NULL) {
- contact = empathy_contact_from_tpl_contact (account, sender);
- empathy_message_set_sender (retval, contact);
- g_object_unref (contact);
- }
-
- g_free (body);
-
- return retval;
-}
-
-TpMessage *
-empathy_message_get_tp_message (EmpathyMessage *message)
-{
- EmpathyMessagePriv *priv;
-
- g_return_val_if_fail (EMPATHY_IS_MESSAGE (message), NULL);
-
- priv = GET_PRIV (message);
-
- return priv->tp_message;
-}
-
-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;
-}
-
-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_token (EmpathyMessage *message)
-{
- EmpathyMessagePriv *priv;
-
- g_return_val_if_fail (EMPATHY_IS_MESSAGE (message), NULL);
-
- priv = GET_PRIV (message);
-
- return priv->token;
-}
-
-const gchar *
-empathy_message_get_supersedes (EmpathyMessage *message)
-{
- EmpathyMessagePriv *priv;
-
- g_return_val_if_fail (EMPATHY_IS_MESSAGE (message), NULL);
-
- priv = GET_PRIV (message);
-
- return priv->supersedes;
-}
-
-gboolean
-empathy_message_is_edit (EmpathyMessage *message)
-{
- EmpathyMessagePriv *priv;
-
- g_return_val_if_fail (EMPATHY_IS_MESSAGE (message), FALSE);
-
- priv = GET_PRIV (message);
-
- return !tp_str_empty (priv->supersedes);
-}
-
-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;
-}
-
-gint64
-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;
-}
-
-gint64
-empathy_message_get_original_timestamp (EmpathyMessage *message)
-{
- EmpathyMessagePriv *priv;
-
- g_return_val_if_fail (EMPATHY_IS_MESSAGE (message), -1);
-
- priv = GET_PRIV (message);
-
- return priv->original_timestamp;
-}
-
-gboolean
-empathy_message_is_backlog (EmpathyMessage *message)
-{
- EmpathyMessagePriv *priv;
-
- g_return_val_if_fail (EMPATHY_IS_MESSAGE (message), FALSE);
-
- priv = GET_PRIV (message);
-
- return priv->is_backlog;
-}
-
-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";
- case TP_CHANNEL_TEXT_MESSAGE_TYPE_DELIVERY_REPORT:
- return "delivery-report";
- case TP_CHANNEL_TEXT_MESSAGE_TYPE_NORMAL:
- default:
- return "normal";
- }
-}
-
-gboolean
-empathy_message_is_incoming (EmpathyMessage *message)
-{
- EmpathyMessagePriv *priv = GET_PRIV (message);
-
- g_return_val_if_fail (EMPATHY_IS_MESSAGE (message), FALSE);
-
- return priv->incoming;
-}
-
-gboolean
-empathy_message_equal (EmpathyMessage *message1, EmpathyMessage *message2)
-{
- EmpathyMessagePriv *priv1;
- EmpathyMessagePriv *priv2;
-
- g_return_val_if_fail (EMPATHY_IS_MESSAGE (message1), FALSE);
- g_return_val_if_fail (EMPATHY_IS_MESSAGE (message2), FALSE);
-
- priv1 = GET_PRIV (message1);
- priv2 = GET_PRIV (message2);
-
- if (priv1->timestamp == priv2->timestamp &&
- !tp_strdiff (priv1->body, priv2->body)) {
- return TRUE;
- }
-
- return FALSE;
-}
-
-TpChannelTextMessageFlags
-empathy_message_get_flags (EmpathyMessage *self)
-{
- EmpathyMessagePriv *priv = GET_PRIV (self);
-
- g_return_val_if_fail (EMPATHY_IS_MESSAGE (self), 0);
-
- return priv->flags;
-}
-
-EmpathyMessage *
-empathy_message_new_from_tp_message (TpMessage *tp_msg,
- gboolean incoming)
-{
- EmpathyMessage *message;
- gchar *body;
- TpChannelTextMessageFlags flags;
- gint64 timestamp;
- gint64 original_timestamp;
- const GHashTable *part = tp_message_peek (tp_msg, 0);
- gboolean is_backlog;
-
- g_return_val_if_fail (TP_IS_MESSAGE (tp_msg), NULL);
-
- body = tp_message_to_text (tp_msg, &flags);
-
- timestamp = tp_message_get_sent_timestamp (tp_msg);
- if (timestamp == 0)
- timestamp = tp_message_get_received_timestamp (tp_msg);
-
- original_timestamp = tp_asv_get_int64 (part,
- "original-message-received", NULL);
-
- is_backlog = (flags & TP_CHANNEL_TEXT_MESSAGE_FLAG_SCROLLBACK) ==
- TP_CHANNEL_TEXT_MESSAGE_FLAG_SCROLLBACK;
-
- message = g_object_new (EMPATHY_TYPE_MESSAGE,
- "body", body,
- "token", tp_message_get_token (tp_msg),
- "supersedes", tp_message_get_supersedes (tp_msg),
- "type", tp_message_get_message_type (tp_msg),
- "timestamp", timestamp,
- "original-timestamp", original_timestamp,
- "flags", flags,
- "is-backlog", is_backlog,
- "incoming", incoming,
- "tp-message", tp_msg,
- NULL);
-
- g_free (body);
- return message;
-}
diff --git a/libempathy/empathy-message.h b/libempathy/empathy-message.h
deleted file mode 100644
index db38ddfd..00000000
--- a/libempathy/empathy-message.h
+++ /dev/null
@@ -1,88 +0,0 @@
-/* -*- 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., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301 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 <telepathy-glib/telepathy-glib.h>
-#include <telepathy-logger/telepathy-logger.h>
-
-#include "empathy-contact.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_from_tpl_log_event (TplEvent *logevent);
-EmpathyMessage * empathy_message_new_from_tp_message (TpMessage *tp_msg,
- gboolean incoming);
-
-TpMessage * empathy_message_get_tp_message (EmpathyMessage *message);
-
-TpChannelTextMessageType empathy_message_get_tptype (EmpathyMessage *message);
-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);
-const gchar * empathy_message_get_token (EmpathyMessage *message);
-const gchar * empathy_message_get_supersedes (EmpathyMessage *message);
-gboolean empathy_message_is_edit (EmpathyMessage *message);
-gint64 empathy_message_get_timestamp (EmpathyMessage *message);
-gint64 empathy_message_get_original_timestamp (EmpathyMessage *message);
-gboolean empathy_message_is_backlog (EmpathyMessage *message);
-gboolean empathy_message_is_incoming (EmpathyMessage *message);
-
-TpChannelTextMessageType empathy_message_type_from_str (const gchar *type_str);
-const gchar * empathy_message_type_to_str (TpChannelTextMessageType type);
-
-gboolean empathy_message_equal (EmpathyMessage *message1, EmpathyMessage *message2);
-
-TpChannelTextMessageFlags empathy_message_get_flags (EmpathyMessage *message);
-
-G_END_DECLS
-
-#endif /* __EMPATHY_MESSAGE_H__ */
diff --git a/libempathy/empathy-pkg-kit.c b/libempathy/empathy-pkg-kit.c
deleted file mode 100644
index 21f703b6..00000000
--- a/libempathy/empathy-pkg-kit.c
+++ /dev/null
@@ -1,160 +0,0 @@
-/*
- * Copyright (C) 2012 Collabora Ltd.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * 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.com>
- */
-
-#include "config.h"
-#include "empathy-pkg-kit.h"
-
-typedef struct
-{
- guint xid;
- gchar **packages;
- gchar *options;
-
- GSimpleAsyncResult *result;
- GCancellable *cancellable;
-} InstallCtx;
-
-static InstallCtx *
-install_ctx_new (guint xid,
- const gchar **packages,
- const gchar *options,
- GSimpleAsyncResult *result,
- GCancellable *cancellable)
-{
- InstallCtx *ctx = g_slice_new (InstallCtx);
-
- ctx->xid = xid;
- ctx->packages = g_strdupv ((gchar **) packages);
- ctx->options = g_strdup (options);
- ctx->result = g_object_ref (result);
- ctx->cancellable = cancellable != NULL ? g_object_ref (cancellable) : NULL;
- return ctx;
-}
-
-static void
-install_ctx_free (InstallCtx *ctx)
-{
- g_free (ctx->packages);
- g_free (ctx->options);
- g_object_unref (ctx->result);
- g_slice_free (InstallCtx, ctx);
-}
-
-static void
-install_ctx_complete (InstallCtx *ctx)
-{
- g_simple_async_result_complete (ctx->result);
- install_ctx_free (ctx);
-}
-
-static void
-install_ctx_failed (InstallCtx *ctx,
- GError *error)
-{
- g_simple_async_result_take_error (ctx->result, error);
- install_ctx_complete (ctx);
-}
-
-static void
-install_package_names_cb (GObject *source,
- GAsyncResult *result,
- gpointer user_data)
-{
- InstallCtx *ctx = user_data;
- GError *error = NULL;
- GVariant *res;
-
- res = g_dbus_proxy_call_finish (G_DBUS_PROXY (source), result, &error);
- if (res == NULL)
- {
- install_ctx_failed (ctx, error);
- return;
- }
-
- install_ctx_complete (ctx);
-
- g_variant_unref (res);
-}
-
-static void
-pkg_kit_proxy_new_cb (GObject *source,
- GAsyncResult *result,
- gpointer user_data)
-{
- InstallCtx *ctx = user_data;
- GError *error = NULL;
- GDBusProxy *proxy;
-
- proxy = g_dbus_proxy_new_for_bus_finish (result, &error);
- if (proxy == NULL)
- {
- install_ctx_failed (ctx, error);
- return;
- }
-
- g_dbus_proxy_call (proxy, "InstallPackageNames",
- g_variant_new ("(u^a&ss)", ctx->xid, ctx->packages, ctx->options),
- G_DBUS_CALL_FLAGS_NONE, G_MAXINT, NULL, install_package_names_cb, ctx);
-
- g_object_unref (proxy);
-}
-
-/* Ideally this should live in PackageKit (fdo #45741) */
-void
-empathy_pkg_kit_install_packages_async (
- guint xid,
- const gchar **packages,
- const gchar *options,
- GCancellable *cancellable,
- GAsyncReadyCallback callback,
- gpointer user_data)
-{
- InstallCtx *ctx;
- GSimpleAsyncResult *result;
-
- result = g_simple_async_result_new (NULL, callback, user_data,
- empathy_pkg_kit_install_packages_async);
-
- ctx = install_ctx_new (xid, packages, options != NULL ? options : "",
- result, cancellable);
-
- g_dbus_proxy_new_for_bus (G_BUS_TYPE_SESSION,
- G_DBUS_PROXY_FLAGS_NONE, NULL,
- "org.freedesktop.PackageKit",
- "/org/freedesktop/PackageKit",
- "org.freedesktop.PackageKit.Modify",
- NULL, pkg_kit_proxy_new_cb, ctx);
-
- g_object_unref (result);
-}
-
-gboolean
-empathy_pkg_kit_install_packages_finish (GAsyncResult *result,
- GError **error)
-{
- g_return_val_if_fail (g_simple_async_result_is_valid (result, NULL,
- empathy_pkg_kit_install_packages_async), FALSE);
-
- if (g_simple_async_result_propagate_error (G_SIMPLE_ASYNC_RESULT (result),
- error))
- return FALSE;
-
- return TRUE;
-}
diff --git a/libempathy/empathy-pkg-kit.h b/libempathy/empathy-pkg-kit.h
deleted file mode 100644
index b824d768..00000000
--- a/libempathy/empathy-pkg-kit.h
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * Copyright (C) 2012 Collabora Ltd.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * 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.com>
- */
-
-#ifndef __EMPATHY_PKG_KIT__
-#define __EMPATHY_PKG_KIT__
-
-#include <glib.h>
-#include <gio/gio.h>
-
-void empathy_pkg_kit_install_packages_async (
- guint xid,
- const gchar **packages,
- const gchar *options,
- GCancellable *cancellable,
- GAsyncReadyCallback callback,
- gpointer user_data);
-
-gboolean empathy_pkg_kit_install_packages_finish (GAsyncResult *result,
- GError **error);
-
-#endif
diff --git a/libempathy/empathy-presence-manager.c b/libempathy/empathy-presence-manager.c
deleted file mode 100644
index 6eab7f15..00000000
--- a/libempathy/empathy-presence-manager.c
+++ /dev/null
@@ -1,615 +0,0 @@
-/*
- * Copyright (C) 2007-2011 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-presence-manager.h"
-
-#include <tp-account-widgets/tpaw-utils.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)
-
-/* Number of seconds to consider an account in the "just connected" state
- * for. */
-#define ACCOUNT_IS_JUST_CONNECTED_SECONDS 10
-
-struct _EmpathyPresenceManagerPrivate
-{
- DBusGProxy *gs_proxy;
-
- gboolean ready;
-
- TpConnectionPresenceType state;
- gchar *status;
- gboolean auto_away;
-
- TpConnectionPresenceType away_saved_state;
-
- gboolean is_idle;
- guint ext_away_timeout;
-
- TpAccountManager *manager;
-
- /* pointer to a TpAccount --> glong of time of connection */
- GHashTable *connect_times;
-
- TpConnectionPresenceType requested_presence_type;
- gchar *requested_status_message;
-};
-
-typedef enum
-{
- SESSION_STATUS_AVAILABLE,
- SESSION_STATUS_INVISIBLE,
- SESSION_STATUS_BUSY,
- SESSION_STATUS_IDLE,
- SESSION_STATUS_UNKNOWN
-} SessionStatus;
-
-enum
-{
- PROP_0,
- PROP_STATE,
- PROP_STATUS,
- PROP_AUTO_AWAY
-};
-
-G_DEFINE_TYPE (EmpathyPresenceManager, empathy_presence_manager, G_TYPE_OBJECT);
-
-static EmpathyPresenceManager * singleton = NULL;
-
-static const gchar *presence_type_to_status[NUM_TP_CONNECTION_PRESENCE_TYPES] =
-{
- NULL,
- "offline",
- "available",
- "away",
- "xa",
- "hidden",
- "busy",
- NULL,
- NULL,
-};
-
-static void
-most_available_presence_changed (TpAccountManager *manager,
- TpConnectionPresenceType state,
- gchar *status,
- gchar *status_message,
- EmpathyPresenceManager *self)
-{
- if (state == TP_CONNECTION_PRESENCE_TYPE_UNSET)
- /* Assume our presence is offline if MC reports UNSET */
- state = TP_CONNECTION_PRESENCE_TYPE_OFFLINE;
-
- DEBUG ("Presence changed to '%s' (%d) \"%s\"", status, state,
- status_message);
-
- g_free (self->priv->status);
- self->priv->state = state;
- if (TPAW_STR_EMPTY (status_message))
- self->priv->status = NULL;
- else
- self->priv->status = g_strdup (status_message);
-
- g_object_notify (G_OBJECT (self), "state");
- g_object_notify (G_OBJECT (self), "status");
-}
-
-static gboolean
-ext_away_cb (EmpathyPresenceManager *self)
-{
- DEBUG ("Going to extended autoaway");
- empathy_presence_manager_set_state (self,
- TP_CONNECTION_PRESENCE_TYPE_EXTENDED_AWAY);
- self->priv->ext_away_timeout = 0;
-
- return FALSE;
-}
-
-static void
-next_away_stop (EmpathyPresenceManager *self)
-{
- if (self->priv->ext_away_timeout)
- {
- g_source_remove (self->priv->ext_away_timeout);
- self->priv->ext_away_timeout = 0;
- }
-}
-
-static void
-ext_away_start (EmpathyPresenceManager *self)
-{
- if (self->priv->ext_away_timeout != 0)
- return;
-
- self->priv->ext_away_timeout = g_timeout_add_seconds (EXT_AWAY_TIME,
- (GSourceFunc) ext_away_cb, self);
-}
-
-static void
-session_status_changed_cb (DBusGProxy *gs_proxy,
- SessionStatus status,
- EmpathyPresenceManager *self)
-{
- gboolean is_idle;
-
- is_idle = (status == SESSION_STATUS_IDLE);
-
- DEBUG ("Session idle state changed, %s -> %s",
- self->priv->is_idle ? "yes" : "no",
- is_idle ? "yes" : "no");
-
- if (!self->priv->auto_away ||
- (self->priv->state <= TP_CONNECTION_PRESENCE_TYPE_OFFLINE ||
- self->priv->state == TP_CONNECTION_PRESENCE_TYPE_HIDDEN))
- {
- /* We don't want to go auto away OR we explicitely asked to be
- * offline, nothing to do here */
- self->priv->is_idle = is_idle;
- return;
- }
-
- if (is_idle && !self->priv->is_idle)
- {
- TpConnectionPresenceType new_state;
- /* We are now idle */
-
- ext_away_start (self);
-
- self->priv->away_saved_state = self->priv->state;
-
- new_state = TP_CONNECTION_PRESENCE_TYPE_AWAY;
- if (self->priv->state == TP_CONNECTION_PRESENCE_TYPE_EXTENDED_AWAY)
- new_state = TP_CONNECTION_PRESENCE_TYPE_EXTENDED_AWAY;
-
- DEBUG ("Going to autoaway. Saved state=%d, new state=%d",
- self->priv->away_saved_state, new_state);
- empathy_presence_manager_set_state (self, new_state);
- }
- else if (!is_idle && self->priv->is_idle)
- {
- /* We are no more idle, restore state */
-
- next_away_stop (self);
-
- /* Only try and set the presence if the away saved state is not
- * unset. This is an odd case because it means that the session
- * didn't notify us of the state change to idle, and as a
- * result, we couldn't save the current state at that time.
- */
- if (self->priv->away_saved_state != TP_CONNECTION_PRESENCE_TYPE_UNSET)
- {
- DEBUG ("Restoring state to %d",
- self->priv->away_saved_state);
-
- empathy_presence_manager_set_state (self,
- self->priv->away_saved_state);
- }
- else
- {
- DEBUG ("Away saved state is unset. This means that we "
- "weren't told when the session went idle. "
- "As a result, I'm not trying to set presence");
- }
-
- self->priv->away_saved_state = TP_CONNECTION_PRESENCE_TYPE_UNSET;
- }
-
- self->priv->is_idle = is_idle;
-}
-
-static void
-presence_manager_dispose (GObject *object)
-{
- EmpathyPresenceManager *self = (EmpathyPresenceManager *) object;
-
- tp_clear_object (&self->priv->gs_proxy);
- tp_clear_object (&self->priv->manager);
-
- tp_clear_pointer (&self->priv->connect_times, g_hash_table_unref);
-
- next_away_stop (EMPATHY_PRESENCE_MANAGER (object));
-
- G_OBJECT_CLASS (empathy_presence_manager_parent_class)->dispose (object);
-}
-
-static void
-presence_manager_finalize (GObject *object)
-{
- EmpathyPresenceManager *self = (EmpathyPresenceManager *) object;
-
- g_free (self->priv->status);
- g_free (self->priv->requested_status_message);
-
- G_OBJECT_CLASS (empathy_presence_manager_parent_class)->finalize (object);
-}
-
-static GObject *
-presence_manager_constructor (GType type,
- guint n_props,
- GObjectConstructParam *props)
-{
- GObject *retval;
-
- if (singleton)
- {
- retval = g_object_ref (singleton);
- }
- else
- {
- retval = G_OBJECT_CLASS (empathy_presence_manager_parent_class)->
- constructor (type, n_props, props);
-
- singleton = EMPATHY_PRESENCE_MANAGER (retval);
- g_object_add_weak_pointer (retval, (gpointer) &singleton);
- }
-
- return retval;
-}
-
-static const gchar *
-empathy_presence_manager_get_status (EmpathyPresenceManager *self)
-{
- if (G_UNLIKELY (!self->priv->ready))
- g_critical (G_STRLOC ": %s called before AccountManager ready",
- G_STRFUNC);
-
- if (!self->priv->status)
- return empathy_presence_get_default_message (self->priv->state);
-
- return self->priv->status;
-}
-
-static void
-presence_manager_get_property (GObject *object,
- guint param_id,
- GValue *value,
- GParamSpec *pspec)
-{
- EmpathyPresenceManager *self = EMPATHY_PRESENCE_MANAGER (object);
-
- switch (param_id)
- {
- case PROP_STATE:
- g_value_set_enum (value, empathy_presence_manager_get_state (self));
- break;
- case PROP_STATUS:
- g_value_set_string (value, empathy_presence_manager_get_status (self));
- break;
- case PROP_AUTO_AWAY:
- g_value_set_boolean (value,
- empathy_presence_manager_get_auto_away (self));
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, pspec);
- break;
- };
-}
-
-static void
-presence_manager_set_property (GObject *object,
- guint param_id,
- const GValue *value,
- GParamSpec *pspec)
-{
- EmpathyPresenceManager *self = EMPATHY_PRESENCE_MANAGER (object);
-
- switch (param_id)
- {
- case PROP_STATE:
- empathy_presence_manager_set_state (self, g_value_get_enum (value));
- break;
- case PROP_STATUS:
- empathy_presence_manager_set_status (self, g_value_get_string (value));
- break;
- case PROP_AUTO_AWAY:
- empathy_presence_manager_set_auto_away (self,
- g_value_get_boolean (value));
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, pspec);
- break;
- };
-}
-
-static void
-empathy_presence_manager_class_init (EmpathyPresenceManagerClass *klass)
-{
- GObjectClass *object_class = G_OBJECT_CLASS (klass);
-
- object_class->dispose = presence_manager_dispose;
- object_class->finalize = presence_manager_finalize;
- object_class->constructor = presence_manager_constructor;
- object_class->get_property = presence_manager_get_property;
- object_class->set_property = presence_manager_set_property;
-
- g_object_class_install_property (object_class,
- PROP_STATE,
- g_param_spec_uint ("state", "state", "state",
- 0, NUM_TP_CONNECTION_PRESENCE_TYPES,
- TP_CONNECTION_PRESENCE_TYPE_UNSET,
- 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_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_type_class_add_private (object_class,
- sizeof (EmpathyPresenceManagerPrivate));
-}
-
-static void
-account_status_changed_cb (TpAccount *account,
- guint old_status,
- guint new_status,
- guint reason,
- gchar *dbus_error_name,
- GHashTable *details,
- gpointer user_data)
-{
- EmpathyPresenceManager *self = EMPATHY_PRESENCE_MANAGER (user_data);
- GTimeVal val;
-
- if (new_status == TP_CONNECTION_STATUS_CONNECTED)
- {
- g_get_current_time (&val);
- g_hash_table_insert (self->priv->connect_times, account,
- GINT_TO_POINTER (val.tv_sec));
- }
- else if (new_status == TP_CONNECTION_STATUS_DISCONNECTED)
- {
- g_hash_table_remove (self->priv->connect_times, account);
- }
-}
-
-static void
-account_manager_ready_cb (GObject *source_object,
- GAsyncResult *result,
- gpointer user_data)
-{
- EmpathyPresenceManager *self = user_data;
- TpAccountManager *account_manager = TP_ACCOUNT_MANAGER (source_object);
- TpConnectionPresenceType state;
- gchar *status, *status_message;
- GList *accounts, *l;
- GError *error = NULL;
-
- /* In case we've been finalized before reading this callback */
- if (singleton == NULL)
- return;
-
- self->priv->ready = TRUE;
-
- if (!tp_proxy_prepare_finish (account_manager, result, &error))
- {
- DEBUG ("Failed to prepare account manager: %s", error->message);
- g_error_free (error);
- return;
- }
-
- state = tp_account_manager_get_most_available_presence (self->priv->manager,
- &status, &status_message);
-
- most_available_presence_changed (account_manager, state, status,
- status_message, self);
-
- accounts = tp_account_manager_dup_valid_accounts (self->priv->manager);
- for (l = accounts; l != NULL; l = l->next)
- {
- tp_g_signal_connect_object (l->data, "status-changed",
- G_CALLBACK (account_status_changed_cb), self, 0);
- }
- g_list_free_full (accounts, g_object_unref);
-
- g_free (status);
- g_free (status_message);
-}
-
-static void
-empathy_presence_manager_init (EmpathyPresenceManager *self)
-{
- TpDBusDaemon *dbus;
-
- self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self,
- EMPATHY_TYPE_PRESENCE_MANAGER, EmpathyPresenceManagerPrivate);
-
- self->priv->is_idle = FALSE;
-
- self->priv->manager = tp_account_manager_dup ();
-
- tp_proxy_prepare_async (self->priv->manager, NULL,
- account_manager_ready_cb, self);
-
- tp_g_signal_connect_object (self->priv->manager,
- "most-available-presence-changed",
- G_CALLBACK (most_available_presence_changed), self, 0);
-
- dbus = tp_dbus_daemon_dup (NULL);
-
- self->priv->gs_proxy = dbus_g_proxy_new_for_name (
- tp_proxy_get_dbus_connection (dbus),
- "org.gnome.SessionManager",
- "/org/gnome/SessionManager/Presence",
- "org.gnome.SessionManager.Presence");
-
- if (self->priv->gs_proxy)
- {
- dbus_g_proxy_add_signal (self->priv->gs_proxy, "StatusChanged",
- G_TYPE_UINT, G_TYPE_INVALID);
- dbus_g_proxy_connect_signal (self->priv->gs_proxy, "StatusChanged",
- G_CALLBACK (session_status_changed_cb),
- self, NULL);
- }
- else
- {
- DEBUG ("Failed to get gs proxy");
- }
-
- g_object_unref (dbus);
-
- self->priv->connect_times = g_hash_table_new (g_direct_hash, g_direct_equal);
-}
-
-EmpathyPresenceManager *
-empathy_presence_manager_dup_singleton (void)
-{
- return g_object_new (EMPATHY_TYPE_PRESENCE_MANAGER, NULL);
-}
-
-TpConnectionPresenceType
-empathy_presence_manager_get_state (EmpathyPresenceManager *self)
-{
- if (G_UNLIKELY (!self->priv->ready))
- g_critical (G_STRLOC ": %s called before AccountManager ready",
- G_STRFUNC);
-
- return self->priv->state;
-}
-
-void
-empathy_presence_manager_set_state (EmpathyPresenceManager *self,
- TpConnectionPresenceType state)
-{
- empathy_presence_manager_set_presence (self, state, self->priv->status);
-}
-
-void
-empathy_presence_manager_set_status (EmpathyPresenceManager *self,
- const gchar *status)
-{
- empathy_presence_manager_set_presence (self, self->priv->state, status);
-}
-
-static void
-empathy_presence_manager_do_set_presence (EmpathyPresenceManager *self,
- TpConnectionPresenceType status_type,
- const gchar *status_message)
-{
- const gchar *status;
-
- g_assert (status_type > 0 && status_type < NUM_TP_CONNECTION_PRESENCE_TYPES);
-
- status = presence_type_to_status[status_type];
-
- g_return_if_fail (status != NULL);
-
- /* We possibly should be sure that the account manager is prepared, but
- * sometimes this isn't possible, like when exiting. In other words,
- * we need a callback to empathy_presence_manager_set_presence to be sure the
- * presence is set on all accounts successfully.
- * However, in practice, this is fine as we've already prepared the
- * account manager here in _init. */
- tp_account_manager_set_all_requested_presences (self->priv->manager,
- status_type, status, status_message);
-}
-
-void
-empathy_presence_manager_set_presence (EmpathyPresenceManager *self,
- TpConnectionPresenceType state,
- const gchar *status)
-{
- const gchar *default_status;
-
- DEBUG ("Changing presence to %s (%d)", status, state);
-
- g_free (self->priv->requested_status_message);
- self->priv->requested_presence_type = state;
- self->priv->requested_status_message = g_strdup (status);
-
- /* Do not set translated default messages */
- default_status = empathy_presence_get_default_message (state);
- if (!tp_strdiff (status, default_status))
- status = NULL;
-
- empathy_presence_manager_do_set_presence (self, state, status);
-}
-
-gboolean
-empathy_presence_manager_get_auto_away (EmpathyPresenceManager *self)
-{
- return self->priv->auto_away;
-}
-
-void
-empathy_presence_manager_set_auto_away (EmpathyPresenceManager *self,
- gboolean auto_away)
-{
- self->priv->auto_away = auto_away;
-
- g_object_notify (G_OBJECT (self), "auto-away");
-}
-
-TpConnectionPresenceType
-empathy_presence_manager_get_requested_presence (EmpathyPresenceManager *self,
- gchar **status,
- gchar **status_message)
-{
- if (status != NULL)
- *status = g_strdup (presence_type_to_status[
- self->priv->requested_presence_type]);
-
- if (status_message != NULL)
- *status_message = g_strdup (self->priv->requested_status_message);
-
- return self->priv->requested_presence_type;
-}
-
-/* This function returns %TRUE if EmpathyPresenceManager considers the account
- * @account as having just connected recently. Otherwise, it returns
- * %FALSE. In doubt, %FALSE is returned. */
-gboolean
-empathy_presence_manager_account_is_just_connected (
- EmpathyPresenceManager *self,
- TpAccount *account)
-{
- GTimeVal val;
- gpointer ptr;
- glong t;
-
- if (tp_account_get_connection_status (account, NULL)
- != TP_CONNECTION_STATUS_CONNECTED)
- return FALSE;
-
- ptr = g_hash_table_lookup (self->priv->connect_times, account);
-
- if (ptr == NULL)
- return FALSE;
-
- t = GPOINTER_TO_INT (ptr);
-
- g_get_current_time (&val);
-
- return (val.tv_sec - t) < ACCOUNT_IS_JUST_CONNECTED_SECONDS;
-}
diff --git a/libempathy/empathy-presence-manager.h b/libempathy/empathy-presence-manager.h
deleted file mode 100644
index f616647a..00000000
--- a/libempathy/empathy-presence-manager.h
+++ /dev/null
@@ -1,83 +0,0 @@
-/*
- * Copyright (C) 2007-2011 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_PRESENCE_MANAGER_H__
-#define __EMPATHY_PRESENCE_MANAGER_H__
-
-#include <glib.h>
-#include <telepathy-glib/telepathy-glib.h>
-
-G_BEGIN_DECLS
-
-#define EMPATHY_TYPE_PRESENCE_MANAGER (empathy_presence_manager_get_type ())
-#define EMPATHY_PRESENCE_MANAGER(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), EMPATHY_TYPE_PRESENCE_MANAGER, EmpathyPresenceManager))
-#define EMPATHY_PRESENCE_MANAGER_CLASS(k) (G_TYPE_CHECK_CLASS_CAST ((k), EMPATHY_TYPE_PRESENCE_MANAGER, EmpathyPresenceManagerClass))
-#define EMPATHY_IS_PRESENCE_MANAGER(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), EMPATHY_TYPE_PRESENCE_MANAGER))
-#define EMPATHY_IS_PRESENCE_MANAGER_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), EMPATHY_TYPE_PRESENCE_MANAGER))
-#define EMPATHY_PRESENCE_MANAGER_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), EMPATHY_TYPE_PRESENCE_MANAGER, EmpathyPresenceManagerClass))
-
-typedef struct _EmpathyPresenceManager EmpathyPresenceManager;
-typedef struct _EmpathyPresenceManagerClass EmpathyPresenceManagerClass;
-typedef struct _EmpathyPresenceManagerPrivate EmpathyPresenceManagerPrivate;
-
-struct _EmpathyPresenceManager {
- GObject parent;
- EmpathyPresenceManagerPrivate *priv;
-};
-
-struct _EmpathyPresenceManagerClass
-{
- GObjectClass parent_class;
-};
-
-GType empathy_presence_manager_get_type (void) G_GNUC_CONST;
-
-EmpathyPresenceManager * empathy_presence_manager_dup_singleton (void);
-
-TpConnectionPresenceType empathy_presence_manager_get_state (
- EmpathyPresenceManager *self);
-
-void empathy_presence_manager_set_state (EmpathyPresenceManager *self,
- TpConnectionPresenceType state);
-
-void empathy_presence_manager_set_status (EmpathyPresenceManager *self,
- const gchar *status);
-
-void empathy_presence_manager_set_presence (EmpathyPresenceManager *self,
- TpConnectionPresenceType state,
- const gchar *status);
-
-gboolean empathy_presence_manager_get_auto_away (EmpathyPresenceManager *self);
-
-void empathy_presence_manager_set_auto_away (EmpathyPresenceManager *self,
- gboolean auto_away);
-
-TpConnectionPresenceType empathy_presence_manager_get_requested_presence (
- EmpathyPresenceManager *self,
- gchar **status,
- gchar **status_message);
-
-gboolean empathy_presence_manager_account_is_just_connected (
- EmpathyPresenceManager *self,
- TpAccount *account);
-
-G_END_DECLS
-
-#endif /* __EMPATHY_PRESENCE_MANAGER_H__ */
diff --git a/libempathy/empathy-request-util.c b/libempathy/empathy-request-util.c
deleted file mode 100644
index c5f693f0..00000000
--- a/libempathy/empathy-request-util.c
+++ /dev/null
@@ -1,118 +0,0 @@
-/* * Copyright (C) 2007-2010 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>
- * Sjoerd Simons <sjoerd.simons@collabora.co.uk>
- * Cosimo Cecchi <cosimo.cecchi@collabora.co.uk>
- */
-
-#include "config.h"
-#include "empathy-request-util.h"
-
-#define DEBUG_FLAG EMPATHY_DEBUG_DISPATCHER
-#include "empathy-debug.h"
-
-void
-empathy_chat_with_contact (EmpathyContact *contact,
- gint64 timestamp)
-{
- empathy_chat_with_contact_id (
- empathy_contact_get_account (contact), empathy_contact_get_id (contact),
- timestamp, NULL, NULL);
-}
-
-static void
-ensure_text_channel_cb (GObject *source,
- GAsyncResult *result,
- gpointer user_data)
-{
- GError *error = NULL;
-
- if (!tp_account_channel_request_ensure_channel_finish (
- TP_ACCOUNT_CHANNEL_REQUEST (source), result, &error))
- {
- DEBUG ("Failed to ensure text channel: %s", error->message);
- g_error_free (error);
- }
-}
-
-static void
-create_text_channel (TpAccount *account,
- TpHandleType target_handle_type,
- const gchar *target_id,
- gboolean sms_channel,
- gint64 timestamp,
- GAsyncReadyCallback callback,
- gpointer user_data)
-{
- GHashTable *request;
- TpAccountChannelRequest *req;
-
- request = tp_asv_new (
- TP_PROP_CHANNEL_CHANNEL_TYPE, G_TYPE_STRING,
- TP_IFACE_CHANNEL_TYPE_TEXT,
- TP_PROP_CHANNEL_TARGET_HANDLE_TYPE, G_TYPE_UINT, target_handle_type,
- TP_PROP_CHANNEL_TARGET_ID, G_TYPE_STRING, target_id,
- NULL);
-
- if (sms_channel)
- tp_asv_set_boolean (request,
- TP_PROP_CHANNEL_INTERFACE_SMS_SMS_CHANNEL, TRUE);
-
- req = tp_account_channel_request_new (account, request, timestamp);
- tp_account_channel_request_set_delegate_to_preferred_handler (req, TRUE);
-
- tp_account_channel_request_ensure_channel_async (req, EMPATHY_CHAT_BUS_NAME,
- NULL, callback ? callback : ensure_text_channel_cb, user_data);
-
- g_hash_table_unref (request);
- g_object_unref (req);
-}
-
-/* @callback is optional, but if it's provided, it should call the right
- * _finish() func that we call in ensure_text_channel_cb() */
-void
-empathy_chat_with_contact_id (TpAccount *account,
- const gchar *contact_id,
- gint64 timestamp,
- GAsyncReadyCallback callback,
- gpointer user_data)
-{
- create_text_channel (account, TP_HANDLE_TYPE_CONTACT,
- contact_id, FALSE, timestamp, callback, user_data);
-}
-
-void
-empathy_join_muc (TpAccount *account,
- const gchar *room_name,
- gint64 timestamp)
-{
- create_text_channel (account, TP_HANDLE_TYPE_ROOM,
- room_name, FALSE, timestamp, NULL, NULL);
-}
-
-/* @callback is optional, but if it's provided, it should call the right
- * _finish() func that we call in ensure_text_channel_cb() */
-void
-empathy_sms_contact_id (TpAccount *account,
- const gchar *contact_id,
- gint64 timestamp,
- GAsyncReadyCallback callback,
- gpointer user_data)
-{
- create_text_channel (account, TP_HANDLE_TYPE_CONTACT,
- contact_id, TRUE, timestamp, callback, user_data);
-}
diff --git a/libempathy/empathy-request-util.h b/libempathy/empathy-request-util.h
deleted file mode 100644
index 9c168d7a..00000000
--- a/libempathy/empathy-request-util.h
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- * Copyright (C) 2007-2010 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 <gio/gio.h>
-#include <telepathy-glib/telepathy-glib.h>
-
-#include "empathy-contact.h"
-
-G_BEGIN_DECLS
-
-#define EMPATHY_CHAT_BUS_NAME_SUFFIX "Empathy.Chat"
-#define EMPATHY_CHAT_BUS_NAME TP_CLIENT_BUS_NAME_BASE EMPATHY_CHAT_BUS_NAME_SUFFIX
-
-#define EMPATHY_CALL_BUS_NAME_SUFFIX "Empathy.Call"
-#define EMPATHY_CALL_BUS_NAME TP_CLIENT_BUS_NAME_BASE EMPATHY_CALL_BUS_NAME_SUFFIX
-
-#define EMPATHY_FT_BUS_NAME_SUFFIX "Empathy.FileTransfer"
-#define EMPATHY_FT_BUS_NAME TP_CLIENT_BUS_NAME_BASE EMPATHY_FT_BUS_NAME_SUFFIX
-
-/* Requesting 1 to 1 text channels */
-void empathy_chat_with_contact_id (TpAccount *account,
- const gchar *contact_id,
- gint64 timestamp,
- GAsyncReadyCallback callback,
- gpointer user_data);
-
-void empathy_chat_with_contact (EmpathyContact *contact,
- gint64 timestamp);
-
-/* Request a muc channel */
-void empathy_join_muc (TpAccount *account,
- const gchar *roomname,
- gint64 timestamp);
-
-/* Request a sms channel */
-void empathy_sms_contact_id (TpAccount *account,
- const gchar *contact_id,
- gint64 timestamp,
- GAsyncReadyCallback callback,
- gpointer user_data);
-
-G_END_DECLS
-
-#endif /* __EMPATHY_DISPATCHER_H__ */
diff --git a/libempathy/empathy-sasl-mechanisms.c b/libempathy/empathy-sasl-mechanisms.c
deleted file mode 100644
index 75a924f0..00000000
--- a/libempathy/empathy-sasl-mechanisms.c
+++ /dev/null
@@ -1,378 +0,0 @@
-/*
- * empathy-sasl-mechanisms.h - Header for SASL authentication mechanisms
- * Copyright (C) 2012 Collabora Ltd.
- * @author Xavier Claessens <xavier.claessens@collabora.co.uk>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-#include "config.h"
-#include "empathy-sasl-mechanisms.h"
-
-#include <libsoup/soup.h>
-#include <tp-account-widgets/tpaw-utils.h>
-
-#define DEBUG_FLAG EMPATHY_DEBUG_SASL
-#include "empathy-debug.h"
-#include "empathy-utils.h"
-
-#define MECH_FACEBOOK "X-FACEBOOK-PLATFORM"
-#define MECH_WLM "X-MESSENGER-OAUTH2"
-#define MECH_GOOGLE "X-OAUTH2"
-#define MECH_PASSWORD "X-TELEPATHY-PASSWORD"
-
-typedef struct
-{
- EmpathySaslMechanism id;
- const gchar *name;
-} SupportedMech;
-
-static SupportedMech supported_mechanisms[] = {
- { EMPATHY_SASL_MECHANISM_FACEBOOK, MECH_FACEBOOK },
- { EMPATHY_SASL_MECHANISM_WLM, MECH_WLM },
- { EMPATHY_SASL_MECHANISM_GOOGLE, MECH_GOOGLE },
-
- /* Must be the last one, otherwise empathy_sasl_channel_select_mechanism()
- * will prefer password over web auth for servers supporting both. */
- { EMPATHY_SASL_MECHANISM_PASSWORD, MECH_PASSWORD }
-};
-
-static void
-generic_cb (TpChannel *proxy,
- const GError *error,
- gpointer user_data,
- GObject *weak_object)
-{
- GSimpleAsyncResult *result = user_data;
-
- if (error != NULL)
- {
- g_simple_async_result_set_from_error (result, error);
- g_simple_async_result_complete (result);
- }
-}
-
-static void
-sasl_status_changed_cb (TpChannel *channel,
- guint status,
- const gchar *dbus_error,
- GHashTable *details,
- gpointer user_data,
- GObject *self)
-{
- GSimpleAsyncResult *result = user_data;
-
- switch (status)
- {
- case TP_SASL_STATUS_SERVER_SUCCEEDED:
- tp_cli_channel_interface_sasl_authentication_call_accept_sasl (channel,
- -1, generic_cb, g_object_ref (result), g_object_unref, NULL);
- break;
-
- case TP_SASL_STATUS_SERVER_FAILED:
- case TP_SASL_STATUS_CLIENT_FAILED:
- {
- GError *error = NULL;
-
- tp_proxy_dbus_error_to_gerror (channel, dbus_error,
- tp_asv_get_string (details, "debug-message"), &error);
-
- DEBUG ("SASL failed: %s", error->message);
-
- g_simple_async_result_take_error (result, error);
- g_simple_async_result_complete (result);
- }
- break;
-
- case TP_SASL_STATUS_SUCCEEDED:
- DEBUG ("SASL succeeded");
-
- g_simple_async_result_complete (result);
- break;
-
- default:
- break;
- }
-}
-
-static GSimpleAsyncResult *
-empathy_sasl_auth_common_async (TpChannel *channel,
- GAsyncReadyCallback callback,
- gpointer user_data)
-{
- GSimpleAsyncResult *result;
- GError *error = NULL;
-
- g_return_val_if_fail (TP_IS_CHANNEL (channel), NULL);
- g_return_val_if_fail (tp_proxy_has_interface_by_id (channel,
- TP_IFACE_QUARK_CHANNEL_INTERFACE_SASL_AUTHENTICATION), NULL);
-
- result = g_simple_async_result_new ((GObject *) channel,
- callback, user_data, empathy_sasl_auth_common_async);
-
- tp_cli_channel_interface_sasl_authentication_connect_to_sasl_status_changed (
- channel, sasl_status_changed_cb,
- g_object_ref (result), g_object_unref, NULL, &error);
- g_assert_no_error (error);
-
- return result;
-}
-
-typedef struct
-{
- TpChannel *channel;
- gchar *client_id;
- gchar *access_token;
-} FacebookData;
-
-static void
-facebook_data_free (FacebookData *data)
-{
- g_object_unref (data->channel);
- g_free (data->client_id);
- g_free (data->access_token);
- g_slice_free (FacebookData, data);
-}
-
-static void
-facebook_new_challenge_cb (TpChannel *channel,
- const GArray *challenge,
- gpointer user_data,
- GObject *weak_object)
-{
- GSimpleAsyncResult *result = user_data;
- FacebookData *data;
- GHashTable *h;
- GHashTable *params;
- gchar *response;
- GArray *response_array;
-
- DEBUG ("new challenge: %s", challenge->data);
-
- data = g_simple_async_result_get_op_res_gpointer (result);
-
- h = soup_form_decode (challenge->data);
-
- /* See https://developers.facebook.com/docs/chat/#platauth */
- params = g_hash_table_new (g_str_hash, g_str_equal);
- g_hash_table_insert (params, "method", g_hash_table_lookup (h, "method"));
- g_hash_table_insert (params, "nonce", g_hash_table_lookup (h, "nonce"));
- g_hash_table_insert (params, "access_token", data->access_token);
- g_hash_table_insert (params, "api_key", data->client_id);
- g_hash_table_insert (params, "call_id", "0");
- g_hash_table_insert (params, "v", "1.0");
-
- response = soup_form_encode_hash (params);
- DEBUG ("Response: %s", response);
-
- response_array = g_array_new (FALSE, FALSE, sizeof (gchar));
- g_array_append_vals (response_array, response, strlen (response));
-
- tp_cli_channel_interface_sasl_authentication_call_respond (data->channel, -1,
- response_array, generic_cb, g_object_ref (result), g_object_unref, NULL);
-
- g_hash_table_unref (h);
- g_hash_table_unref (params);
- g_free (response);
- g_array_unref (response_array);
-}
-
-void
-empathy_sasl_auth_facebook_async (TpChannel *channel,
- const gchar *client_id,
- const gchar *access_token,
- GAsyncReadyCallback callback,
- gpointer user_data)
-{
- GSimpleAsyncResult *result;
- FacebookData *data;
- GError *error = NULL;
-
- result = empathy_sasl_auth_common_async (channel, callback, user_data);
-
- g_return_if_fail (result != NULL);
- g_return_if_fail (empathy_sasl_channel_supports_mechanism (channel,
- MECH_FACEBOOK));
- g_return_if_fail (!tp_str_empty (client_id));
- g_return_if_fail (!tp_str_empty (access_token));
-
- DEBUG ("Start %s mechanism", MECH_FACEBOOK);
-
- data = g_slice_new0 (FacebookData);
- data->channel = g_object_ref (channel);
- data->client_id = g_strdup (client_id);
- data->access_token = g_strdup (access_token);
-
- g_simple_async_result_set_op_res_gpointer (result, data,
- (GDestroyNotify) facebook_data_free);
-
- tp_cli_channel_interface_sasl_authentication_connect_to_new_challenge (
- channel, facebook_new_challenge_cb,
- g_object_ref (result), g_object_unref,
- NULL, &error);
- g_assert_no_error (error);
-
- tp_cli_channel_interface_sasl_authentication_call_start_mechanism (
- channel, -1, MECH_FACEBOOK, generic_cb,
- g_object_ref (result), g_object_unref, NULL);
-
- g_object_unref (result);
-}
-
-void
-empathy_sasl_auth_wlm_async (TpChannel *channel,
- const gchar *access_token,
- GAsyncReadyCallback callback,
- gpointer user_data)
-{
- GSimpleAsyncResult *result;
- guchar *token_decoded;
- gsize token_decoded_len;
- GArray *token_decoded_array;
-
- result = empathy_sasl_auth_common_async (channel, callback, user_data);
-
- g_return_if_fail (result != NULL);
- g_return_if_fail (empathy_sasl_channel_supports_mechanism (channel,
- MECH_WLM));
- g_return_if_fail (!tp_str_empty (access_token));
-
- DEBUG ("Start %s mechanism", MECH_WLM);
-
- /* Wocky will base64 encode, but token actually already is base64, so we
- * decode now and it will be re-encoded. */
- token_decoded = g_base64_decode (access_token, &token_decoded_len);
- token_decoded_array = g_array_new (FALSE, FALSE, sizeof (guchar));
- g_array_append_vals (token_decoded_array, token_decoded, token_decoded_len);
-
- tp_cli_channel_interface_sasl_authentication_call_start_mechanism_with_data (
- channel, -1, MECH_WLM, token_decoded_array,
- generic_cb, g_object_ref (result), g_object_unref, NULL);
-
- g_array_unref (token_decoded_array);
- g_free (token_decoded);
- g_object_unref (result);
-}
-
-void
-empathy_sasl_auth_google_async (TpChannel *channel,
- const gchar *username,
- const gchar *access_token,
- GAsyncReadyCallback callback,
- gpointer user_data)
-{
- GSimpleAsyncResult *result;
- GArray *credential;
-
- result = empathy_sasl_auth_common_async (channel, callback, user_data);
-
- g_return_if_fail (result != NULL);
- g_return_if_fail (empathy_sasl_channel_supports_mechanism (channel,
- MECH_GOOGLE));
- g_return_if_fail (!tp_str_empty (username));
- g_return_if_fail (!tp_str_empty (access_token));
-
- DEBUG ("Start %s mechanism", MECH_GOOGLE);
-
- credential = g_array_sized_new (FALSE, FALSE, sizeof (gchar),
- strlen (access_token) + strlen (username) + 2);
-
- g_array_append_val (credential, "\0");
- g_array_append_vals (credential, username, strlen (username));
- g_array_append_val (credential, "\0");
- g_array_append_vals (credential, access_token, strlen (access_token));
-
- tp_cli_channel_interface_sasl_authentication_call_start_mechanism_with_data (
- channel, -1, MECH_GOOGLE, credential,
- generic_cb, g_object_ref (result), g_object_unref, NULL);
-
- g_array_unref (credential);
- g_object_unref (result);
-}
-
-void
-empathy_sasl_auth_password_async (TpChannel *channel,
- const gchar *password,
- GAsyncReadyCallback callback,
- gpointer user_data)
-{
- GSimpleAsyncResult *result;
- GArray *password_array;
-
- result = empathy_sasl_auth_common_async (channel, callback, user_data);
-
- g_return_if_fail (result != NULL);
- g_return_if_fail (empathy_sasl_channel_supports_mechanism (channel,
- MECH_PASSWORD));
- g_return_if_fail (!tp_str_empty (password));
-
- DEBUG ("Start %s mechanism", MECH_PASSWORD);
-
- password_array = g_array_sized_new (FALSE, FALSE, sizeof (gchar),
- strlen (password));
- g_array_append_vals (password_array, password, strlen (password));
-
- tp_cli_channel_interface_sasl_authentication_call_start_mechanism_with_data (
- channel, -1, MECH_PASSWORD, password_array,
- generic_cb, g_object_ref (result), g_object_unref, NULL);
-
- g_array_unref (password_array);
- g_object_unref (result);
-}
-
-gboolean
-empathy_sasl_auth_finish (TpChannel *channel,
- GAsyncResult *result,
- GError **error)
-{
- tpaw_implement_finish_void (channel, empathy_sasl_auth_common_async);
-}
-
-gboolean
-empathy_sasl_channel_supports_mechanism (TpChannel *channel,
- const gchar *mechanism)
-{
- GVariant *props;
- GStrv available_mechanisms;
- gboolean result;
-
- props = tp_channel_dup_immutable_properties (channel);
-
- g_variant_lookup (props,
- TP_PROP_CHANNEL_INTERFACE_SASL_AUTHENTICATION_AVAILABLE_MECHANISMS,
- "^as", &available_mechanisms);
-
- result = tp_strv_contains ((const gchar * const *) available_mechanisms,
- mechanism);
-
- g_variant_unref (props);
- g_strfreev (available_mechanisms);
- return result;
-}
-
-EmpathySaslMechanism
-empathy_sasl_channel_select_mechanism (TpChannel *channel)
-{
- guint i;
-
- for (i = 0; i < G_N_ELEMENTS (supported_mechanisms); i++)
- {
- if (empathy_sasl_channel_supports_mechanism (channel,
- supported_mechanisms[i].name))
- return supported_mechanisms[i].id;
- }
-
- return EMPATHY_SASL_MECHANISM_UNSUPPORTED;
-}
diff --git a/libempathy/empathy-sasl-mechanisms.h b/libempathy/empathy-sasl-mechanisms.h
deleted file mode 100644
index ef7ccd6d..00000000
--- a/libempathy/empathy-sasl-mechanisms.h
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
- * empathy-sasl-mechanisms.h - Header for SASL authentication mechanisms
- * Copyright (C) 2012 Collabora Ltd.
- * @author Xavier Claessens <xavier.claessens@collabora.co.uk>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-#ifndef __EMPATHY_SASL_MECHANISMS_H__
-#define __EMPATHY_SASL_MECHANISMS_H__
-
-#include <telepathy-glib/telepathy-glib.h>
-
-G_BEGIN_DECLS
-
-typedef enum
-{
- EMPATHY_SASL_MECHANISM_UNSUPPORTED,
- EMPATHY_SASL_MECHANISM_FACEBOOK,
- EMPATHY_SASL_MECHANISM_WLM,
- EMPATHY_SASL_MECHANISM_GOOGLE,
- EMPATHY_SASL_MECHANISM_PASSWORD,
-} EmpathySaslMechanism;
-
-void empathy_sasl_auth_facebook_async (TpChannel *channel,
- const gchar *client_id,
- const gchar *access_token,
- GAsyncReadyCallback callback,
- gpointer user_data);
-
-void empathy_sasl_auth_wlm_async (TpChannel *channel,
- const gchar *access_token,
- GAsyncReadyCallback callback,
- gpointer user_data);
-
-void empathy_sasl_auth_google_async (TpChannel *channel,
- const gchar *username,
- const gchar *access_token,
- GAsyncReadyCallback callback,
- gpointer user_data);
-
-void empathy_sasl_auth_password_async (TpChannel *channel,
- const gchar *password,
- GAsyncReadyCallback callback,
- gpointer user_data);
-
-gboolean empathy_sasl_auth_finish (TpChannel *channel,
- GAsyncResult *result,
- GError **error);
-
-gboolean empathy_sasl_channel_supports_mechanism (TpChannel *channel,
- const gchar *mechanism);
-
-EmpathySaslMechanism empathy_sasl_channel_select_mechanism (TpChannel *channel);
-
-G_END_DECLS
-
-#endif /* #ifndef __EMPATHY_SASL_MECHANISMS_H__*/
diff --git a/libempathy/empathy-server-sasl-handler.c b/libempathy/empathy-server-sasl-handler.c
deleted file mode 100644
index e98134eb..00000000
--- a/libempathy/empathy-server-sasl-handler.c
+++ /dev/null
@@ -1,524 +0,0 @@
-/*
- * empathy-server-sasl-handler.c - Source for EmpathyServerSASLHandler
- * Copyright (C) 2010 Collabora Ltd.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-#include "config.h"
-#include "empathy-server-sasl-handler.h"
-
-#include <tp-account-widgets/tpaw-keyring.h>
-
-#include "empathy-sasl-mechanisms.h"
-#include "extensions.h"
-
-#define DEBUG_FLAG EMPATHY_DEBUG_SASL
-#include "empathy-debug.h"
-
-enum {
- PROP_CHANNEL = 1,
- PROP_ACCOUNT,
- LAST_PROPERTY,
-};
-
-/* signal enum */
-enum {
- AUTH_PASSWORD_FAILED,
- INVALIDATED,
- LAST_SIGNAL,
-};
-
-static guint signals[LAST_SIGNAL] = {0};
-
-typedef struct {
- TpChannel *channel;
- TpAccount *account;
-
- GSimpleAsyncResult *result;
-
- gchar *password;
- gboolean save_password;
-
- GSimpleAsyncResult *async_init_res;
-} EmpathyServerSASLHandlerPriv;
-
-static void async_initable_iface_init (GAsyncInitableIface *iface);
-
-G_DEFINE_TYPE_WITH_CODE (EmpathyServerSASLHandler, empathy_server_sasl_handler,
- G_TYPE_OBJECT,
- G_IMPLEMENT_INTERFACE (G_TYPE_ASYNC_INITABLE, async_initable_iface_init));
-
-static void
-empathy_server_sasl_handler_set_password_cb (GObject *source,
- GAsyncResult *result,
- gpointer user_data)
-{
- GError *error = NULL;
-
- if (!tpaw_keyring_set_account_password_finish (TP_ACCOUNT (source), result,
- &error))
- {
- DEBUG ("Failed to set password: %s", error->message);
- g_clear_error (&error);
- }
- else
- {
- DEBUG ("Password set successfully.");
- }
-}
-
-static gboolean
-empathy_server_sasl_handler_give_password (gpointer data)
-{
- EmpathyServerSASLHandler *self = data;
- EmpathyServerSASLHandlerPriv *priv = self->priv;
-
- empathy_server_sasl_handler_provide_password (self,
- priv->password, FALSE);
-
- return FALSE;
-}
-
-static void
-empathy_server_sasl_handler_get_password_async_cb (GObject *source,
- GAsyncResult *result,
- gpointer user_data)
-{
- EmpathyServerSASLHandlerPriv *priv;
- const gchar *password;
- GError *error = NULL;
-
- priv = EMPATHY_SERVER_SASL_HANDLER (user_data)->priv;
-
- password = tpaw_keyring_get_account_password_finish (TP_ACCOUNT (source),
- result, &error);
-
- if (password != NULL)
- {
- priv->password = g_strdup (password);
-
- /* Do this in an idle so the async result will get there
- * first. */
- g_idle_add (empathy_server_sasl_handler_give_password, user_data);
- }
-
- g_simple_async_result_complete (priv->async_init_res);
- tp_clear_object (&priv->async_init_res);
-}
-
-static void
-empathy_server_sasl_handler_init_async (GAsyncInitable *initable,
- gint io_priority,
- GCancellable *cancellable,
- GAsyncReadyCallback callback,
- gpointer user_data)
-{
- EmpathyServerSASLHandler *self = EMPATHY_SERVER_SASL_HANDLER (initable);
- EmpathyServerSASLHandlerPriv *priv = self->priv;
-
- g_assert (priv->account != NULL);
-
- priv->async_init_res = g_simple_async_result_new (G_OBJECT (self),
- callback, user_data, empathy_server_sasl_handler_new_async);
-
- tpaw_keyring_get_account_password_async (priv->account,
- empathy_server_sasl_handler_get_password_async_cb, self);
-}
-
-static gboolean
-empathy_server_sasl_handler_init_finish (GAsyncInitable *initable,
- GAsyncResult *res,
- GError **error)
-{
- if (g_simple_async_result_propagate_error (G_SIMPLE_ASYNC_RESULT (res),
- error))
- return FALSE;
-
- return TRUE;
-}
-
-static void
-async_initable_iface_init (GAsyncInitableIface *iface)
-{
- iface->init_async = empathy_server_sasl_handler_init_async;
- iface->init_finish = empathy_server_sasl_handler_init_finish;
-}
-
-static void
-channel_invalidated_cb (TpProxy *proxy,
- guint domain,
- gint code,
- gchar *message,
- EmpathyServerSASLHandler *self)
-{
- g_signal_emit (self, signals[INVALIDATED], 0);
-}
-
-static void
-empathy_server_sasl_handler_constructed (GObject *object)
-{
- EmpathyServerSASLHandlerPriv *priv = EMPATHY_SERVER_SASL_HANDLER (object)->priv;
- GError *error = NULL;
-
- if (error != NULL)
- {
- DEBUG ("Failed to connect to SASLStatusChanged: %s", error->message);
- g_clear_error (&error);
- }
-
- tp_g_signal_connect_object (priv->channel, "invalidated",
- G_CALLBACK (channel_invalidated_cb), object, 0);
-}
-
-static void
-empathy_server_sasl_handler_get_property (GObject *object,
- guint property_id,
- GValue *value,
- GParamSpec *pspec)
-{
- EmpathyServerSASLHandlerPriv *priv = EMPATHY_SERVER_SASL_HANDLER (object)->priv;
-
- switch (property_id)
- {
- case PROP_CHANNEL:
- g_value_set_object (value, priv->channel);
- break;
- case PROP_ACCOUNT:
- g_value_set_object (value, priv->account);
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
- break;
- }
-}
-
-static void
-empathy_server_sasl_handler_set_property (GObject *object,
- guint property_id,
- const GValue *value,
- GParamSpec *pspec)
-{
- EmpathyServerSASLHandlerPriv *priv = EMPATHY_SERVER_SASL_HANDLER (object)->priv;
-
- switch (property_id)
- {
- case PROP_CHANNEL:
- priv->channel = g_value_dup_object (value);
- break;
- case PROP_ACCOUNT:
- priv->account = g_value_dup_object (value);
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
- break;
- }
-}
-
-static void
-empathy_server_sasl_handler_dispose (GObject *object)
-{
- EmpathyServerSASLHandlerPriv *priv = EMPATHY_SERVER_SASL_HANDLER (object)->priv;
-
- DEBUG ("%p", object);
-
- tp_clear_object (&priv->channel);
- tp_clear_object (&priv->account);
-
- G_OBJECT_CLASS (empathy_server_sasl_handler_parent_class)->dispose (object);
-}
-
-static void
-empathy_server_sasl_handler_finalize (GObject *object)
-{
- EmpathyServerSASLHandlerPriv *priv = EMPATHY_SERVER_SASL_HANDLER (object)->priv;
-
- DEBUG ("%p", object);
-
- tp_clear_pointer (&priv->password, g_free);
-
- G_OBJECT_CLASS (empathy_server_sasl_handler_parent_class)->finalize (object);
-}
-
-static void
-empathy_server_sasl_handler_class_init (EmpathyServerSASLHandlerClass *klass)
-{
- GObjectClass *oclass = G_OBJECT_CLASS (klass);
- GParamSpec *pspec;
-
- oclass->constructed = empathy_server_sasl_handler_constructed;
- oclass->get_property = empathy_server_sasl_handler_get_property;
- oclass->set_property = empathy_server_sasl_handler_set_property;
- oclass->dispose = empathy_server_sasl_handler_dispose;
- oclass->finalize = empathy_server_sasl_handler_finalize;
-
- g_type_class_add_private (klass, sizeof (EmpathyServerSASLHandlerPriv));
-
- pspec = g_param_spec_object ("channel", "The TpChannel",
- "The TpChannel this handler is supposed to handle.",
- TP_TYPE_CHANNEL,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS);
- g_object_class_install_property (oclass, PROP_CHANNEL, pspec);
-
- pspec = g_param_spec_object ("account", "The TpAccount",
- "The TpAccount this channel belongs to.",
- TP_TYPE_ACCOUNT,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS);
- g_object_class_install_property (oclass, PROP_ACCOUNT, pspec);
-
- signals[AUTH_PASSWORD_FAILED] = g_signal_new ("auth-password-failed",
- G_TYPE_FROM_CLASS (klass),
- G_SIGNAL_RUN_LAST, 0,
- NULL, NULL,
- g_cclosure_marshal_generic,
- G_TYPE_NONE, 1, G_TYPE_STRING);
-
- signals[INVALIDATED] = g_signal_new ("invalidated",
- G_TYPE_FROM_CLASS (klass),
- G_SIGNAL_RUN_LAST, 0,
- NULL, NULL,
- g_cclosure_marshal_generic,
- G_TYPE_NONE, 0);
-}
-
-static void
-empathy_server_sasl_handler_init (EmpathyServerSASLHandler *self)
-{
- self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self,
- EMPATHY_TYPE_SERVER_SASL_HANDLER, EmpathyServerSASLHandlerPriv);
-}
-
-EmpathyServerSASLHandler *
-empathy_server_sasl_handler_new_finish (GAsyncResult *result,
- GError **error)
-{
- GObject *object, *source_object;
-
- source_object = g_async_result_get_source_object (result);
-
- object = g_async_initable_new_finish (G_ASYNC_INITABLE (source_object),
- result, error);
- g_object_unref (source_object);
-
- if (object != NULL)
- return EMPATHY_SERVER_SASL_HANDLER (object);
- else
- return NULL;
-}
-
-void
-empathy_server_sasl_handler_new_async (TpAccount *account,
- TpChannel *channel,
- GAsyncReadyCallback callback,
- gpointer user_data)
-{
- g_return_if_fail (TP_IS_ACCOUNT (account));
- g_return_if_fail (TP_IS_CHANNEL (channel));
- g_return_if_fail (callback != NULL);
-
- g_async_initable_new_async (EMPATHY_TYPE_SERVER_SASL_HANDLER,
- G_PRIORITY_DEFAULT, NULL, callback, user_data,
- "account", account,
- "channel", channel,
- NULL);
-}
-
-static void
-auth_cb (GObject *source,
- GAsyncResult *result,
- gpointer user_data)
-{
- EmpathyServerSASLHandler *self = user_data;
- EmpathyServerSASLHandlerPriv *priv = self->priv;
- GError *error = NULL;
-
- if (!empathy_sasl_auth_finish (priv->channel, result, &error))
- {
- if (g_error_matches (error, TP_ERROR, TP_ERROR_AUTHENTICATION_FAILED))
- {
- g_signal_emit (self, signals[AUTH_PASSWORD_FAILED], 0, priv->password);
- }
- g_clear_error (&error);
- }
- else
- {
- DEBUG ("Saving password in keyring");
- tpaw_keyring_set_account_password_async (priv->account,
- priv->password, priv->save_password,
- empathy_server_sasl_handler_set_password_cb,
- NULL);
- }
-
- tp_channel_close_async (priv->channel, NULL, NULL);
- g_object_unref (self);
-}
-
-static gboolean
-channel_has_may_save_response (TpChannel *channel)
-{
- /* determine if we are permitted to save the password locally */
- GVariant *props;
- gboolean may_save_response;
-
- props = tp_channel_dup_immutable_properties (channel);
-
- if (!g_variant_lookup (props,
- TP_PROP_CHANNEL_INTERFACE_SASL_AUTHENTICATION_MAY_SAVE_RESPONSE,
- "b", &may_save_response))
- {
- DEBUG ("MaySaveResponse unknown, assuming TRUE");
- may_save_response = TRUE;
- }
-
- g_variant_unref (props);
- return may_save_response;
-}
-
-void
-empathy_server_sasl_handler_provide_password (
- EmpathyServerSASLHandler *handler,
- const gchar *password,
- gboolean remember)
-{
- EmpathyServerSASLHandlerPriv *priv;
- gboolean may_save_response;
-
- g_return_if_fail (EMPATHY_IS_SERVER_SASL_HANDLER (handler));
-
- priv = handler->priv;
-
- empathy_sasl_auth_password_async (priv->channel, password,
- auth_cb, g_object_ref (handler));
-
- DEBUG ("%sremembering the password", remember ? "" : "not ");
-
- may_save_response = channel_has_may_save_response (priv->channel);
-
- if (remember)
- {
- if (may_save_response)
- {
- g_free (priv->password);
-
- /* We'll save the password if we manage to connect */
- priv->password = g_strdup (password);
- priv->save_password = TRUE;
- }
- else if (tp_proxy_has_interface_by_id (priv->channel,
- EMP_IFACE_QUARK_CHANNEL_INTERFACE_CREDENTIALS_STORAGE))
- {
- DEBUG ("Channel implements Ch.I.CredentialsStorage");
- }
- else
- {
- DEBUG ("Asked to remember password, but doing so is not permitted");
- }
- }
-
- if (!may_save_response)
- {
- /* delete any password present, it shouldn't be there */
- tpaw_keyring_delete_account_password_async (priv->account, NULL, NULL);
- }
-
- /* Additionally, if we implement Ch.I.CredentialsStorage, inform that
- * whether we want to remember the password */
- if (tp_proxy_has_interface_by_id (priv->channel,
- EMP_IFACE_QUARK_CHANNEL_INTERFACE_CREDENTIALS_STORAGE))
- {
- emp_cli_channel_interface_credentials_storage_call_store_credentials (
- TP_PROXY (priv->channel), -1, remember, NULL, NULL, NULL, NULL);
- }
-}
-
-void
-empathy_server_sasl_handler_cancel (EmpathyServerSASLHandler *handler)
-{
- EmpathyServerSASLHandlerPriv *priv;
-
- g_return_if_fail (EMPATHY_IS_SERVER_SASL_HANDLER (handler));
-
- priv = handler->priv;
-
- DEBUG ("Cancelling SASL mechanism...");
-
- tp_cli_channel_interface_sasl_authentication_call_abort_sasl (
- priv->channel, -1, TP_SASL_ABORT_REASON_USER_ABORT,
- "User cancelled the authentication",
- NULL, NULL, NULL, NULL);
-}
-
-TpAccount *
-empathy_server_sasl_handler_get_account (EmpathyServerSASLHandler *handler)
-{
- EmpathyServerSASLHandlerPriv *priv;
-
- g_return_val_if_fail (EMPATHY_IS_SERVER_SASL_HANDLER (handler), NULL);
-
- priv = handler->priv;
-
- return priv->account;
-}
-
-TpChannel *
-empathy_server_sasl_handler_get_channel (EmpathyServerSASLHandler *handler)
-{
- EmpathyServerSASLHandlerPriv *priv;
-
- g_return_val_if_fail (EMPATHY_IS_SERVER_SASL_HANDLER (handler), NULL);
-
- priv = handler->priv;
-
- return priv->channel;
-}
-
-gboolean
-empathy_server_sasl_handler_has_password (EmpathyServerSASLHandler *handler)
-{
- EmpathyServerSASLHandlerPriv *priv;
-
- g_return_val_if_fail (EMPATHY_IS_SERVER_SASL_HANDLER (handler), FALSE);
-
- priv = handler->priv;
-
- return (priv->password != NULL);
-}
-
-/**
- * empathy_server_sasl_handler_can_save_response_somewhere:
- * @self:
- *
- * Returns: %TRUE if the response can be saved somewhere, either the keyring
- * or via Ch.I.CredentialsStorage
- */
-gboolean
-empathy_server_sasl_handler_can_save_response_somewhere (
- EmpathyServerSASLHandler *self)
-{
- EmpathyServerSASLHandlerPriv *priv;
- gboolean may_save_response;
- gboolean has_storage_iface;
-
- g_return_val_if_fail (EMPATHY_IS_SERVER_SASL_HANDLER (self), FALSE);
-
- priv = self->priv;
-
- may_save_response = channel_has_may_save_response (priv->channel);
-
- has_storage_iface = tp_proxy_has_interface_by_id (priv->channel,
- EMP_IFACE_QUARK_CHANNEL_INTERFACE_CREDENTIALS_STORAGE);
-
- return may_save_response || has_storage_iface;
-}
diff --git a/libempathy/empathy-server-sasl-handler.h b/libempathy/empathy-server-sasl-handler.h
deleted file mode 100644
index 8bf7e3b7..00000000
--- a/libempathy/empathy-server-sasl-handler.h
+++ /dev/null
@@ -1,86 +0,0 @@
-/*
- * empathy-server-sasl-handler.h - Header for EmpathyServerSASLHandler
- * Copyright (C) 2010 Collabora Ltd.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-#ifndef __EMPATHY_SERVER_SASL_HANDLER_H__
-#define __EMPATHY_SERVER_SASL_HANDLER_H__
-
-#include <glib-object.h>
-#include <gio/gio.h>
-#include <telepathy-glib/telepathy-glib.h>
-
-G_BEGIN_DECLS
-
-typedef struct _EmpathyServerSASLHandler EmpathyServerSASLHandler;
-typedef struct _EmpathyServerSASLHandlerClass EmpathyServerSASLHandlerClass;
-
-struct _EmpathyServerSASLHandlerClass {
- GObjectClass parent_class;
-};
-
-struct _EmpathyServerSASLHandler {
- GObject parent;
- gpointer priv;
-};
-
-GType empathy_server_sasl_handler_get_type (void);
-
-#define EMPATHY_TYPE_SERVER_SASL_HANDLER \
- (empathy_server_sasl_handler_get_type ())
-#define EMPATHY_SERVER_SASL_HANDLER(obj) \
- (G_TYPE_CHECK_INSTANCE_CAST((obj), EMPATHY_TYPE_SERVER_SASL_HANDLER, \
- EmpathyServerSASLHandler))
-#define EMPATHY_SERVER_SASL_HANDLER_CLASS(klass) \
- (G_TYPE_CHECK_CLASS_CAST((klass), EMPATHY_TYPE_SERVER_SASL_HANDLER, \
- EmpathyServerSASLHandlerClass))
-#define EMPATHY_IS_SERVER_SASL_HANDLER(obj) \
- (G_TYPE_CHECK_INSTANCE_TYPE((obj), EMPATHY_TYPE_SERVER_SASL_HANDLER))
-#define EMPATHY_IS_SERVER_SASL_HANDLER_CLASS(klass) \
- (G_TYPE_CHECK_CLASS_TYPE((klass), EMPATHY_TYPE_SERVER_SASL_HANDLER))
-#define EMPATHY_SERVER_SASL_HANDLER_GET_CLASS(obj) \
- (G_TYPE_INSTANCE_GET_CLASS ((obj), EMPATHY_TYPE_SERVER_SASL_HANDLER, \
- EmpathyServerSASLHandlerClass))
-
-void empathy_server_sasl_handler_new_async (
- TpAccount *account, TpChannel *channel,
- GAsyncReadyCallback callback, gpointer user_data);
-
-EmpathyServerSASLHandler * empathy_server_sasl_handler_new_finish (
- GAsyncResult *result, GError **error);
-
-void empathy_server_sasl_handler_provide_password (
- EmpathyServerSASLHandler *handler, const gchar *password,
- gboolean remember);
-
-void empathy_server_sasl_handler_cancel (EmpathyServerSASLHandler *handler);
-
-TpAccount * empathy_server_sasl_handler_get_account (
- EmpathyServerSASLHandler *handler);
-
-TpChannel * empathy_server_sasl_handler_get_channel (
- EmpathyServerSASLHandler *handler);
-
-gboolean empathy_server_sasl_handler_has_password (
- EmpathyServerSASLHandler *handler);
-
-gboolean empathy_server_sasl_handler_can_save_response_somewhere (
- EmpathyServerSASLHandler *self);
-
-G_END_DECLS
-
-#endif /* #ifndef __EMPATHY_SERVER_SASL_HANDLER_H__*/
diff --git a/libempathy/empathy-server-tls-handler.c b/libempathy/empathy-server-tls-handler.c
deleted file mode 100644
index 34c3147a..00000000
--- a/libempathy/empathy-server-tls-handler.c
+++ /dev/null
@@ -1,328 +0,0 @@
-/*
- * empathy-server-tls-handler.c - Source for EmpathyServerTLSHandler
- * Copyright (C) 2010 Collabora Ltd.
- * @author Cosimo Cecchi <cosimo.cecchi@collabora.co.uk>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-#include "config.h"
-#include "empathy-server-tls-handler.h"
-
-#include "empathy-utils.h"
-#include "extensions.h"
-
-#define DEBUG_FLAG EMPATHY_DEBUG_TLS
-#include "empathy-debug.h"
-
-static void async_initable_iface_init (GAsyncInitableIface *iface);
-
-enum {
- PROP_CHANNEL = 1,
- PROP_TLS_CERTIFICATE,
- PROP_HOSTNAME,
- PROP_REFERENCE_IDENTITIES,
- LAST_PROPERTY,
-};
-
-typedef struct {
- TpChannel *channel;
-
- TpTLSCertificate *certificate;
- gchar *hostname;
- gchar **reference_identities;
-
- GSimpleAsyncResult *async_init_res;
-} EmpathyServerTLSHandlerPriv;
-
-G_DEFINE_TYPE_WITH_CODE (EmpathyServerTLSHandler, empathy_server_tls_handler,
- G_TYPE_OBJECT,
- G_IMPLEMENT_INTERFACE (G_TYPE_ASYNC_INITABLE, async_initable_iface_init));
-
-#define GET_PRIV(obj) EMPATHY_GET_PRIV (obj, EmpathyServerTLSHandler);
-
-static void
-tls_certificate_prepared_cb (GObject *source,
- GAsyncResult *result,
- gpointer user_data)
-{
- TpTLSCertificate *certificate = TP_TLS_CERTIFICATE (source);
- EmpathyServerTLSHandler *self = user_data;
- GError *error = NULL;
- EmpathyServerTLSHandlerPriv *priv = GET_PRIV (self);
-
- if (!tp_proxy_prepare_finish (certificate, result, &error))
- {
- g_simple_async_result_set_from_error (priv->async_init_res, error);
- g_error_free (error);
- }
-
- g_simple_async_result_complete_in_idle (priv->async_init_res);
- tp_clear_object (&priv->async_init_res);
-}
-
-static gboolean
-tls_handler_init_finish (GAsyncInitable *initable,
- GAsyncResult *res,
- GError **error)
-{
- gboolean retval = TRUE;
-
- if (g_simple_async_result_propagate_error (G_SIMPLE_ASYNC_RESULT (res),
- error))
- retval = FALSE;
-
- return retval;
-}
-
-static void
-tls_handler_init_async (GAsyncInitable *initable,
- gint io_priority,
- GCancellable *cancellable,
- GAsyncReadyCallback callback,
- gpointer user_data)
-{
- GVariant *properties;
- const gchar *cert_object_path;
- const gchar *bus_name;
- GError *error = NULL;
- GQuark features[] = { TP_TLS_CERTIFICATE_FEATURE_CORE, 0 };
- /*
- * Used when channel doesn't implement ReferenceIdentities. A GStrv
- * with [0] the hostname, and [1] a NULL terminator.
- */
- gchar *default_identities[2];
- EmpathyServerTLSHandler *self = EMPATHY_SERVER_TLS_HANDLER (initable);
- EmpathyServerTLSHandlerPriv *priv = GET_PRIV (self);
-
- g_assert (priv->channel != NULL);
-
- priv->async_init_res = g_simple_async_result_new (G_OBJECT (self),
- callback, user_data, empathy_server_tls_handler_new_async);
- properties = tp_channel_dup_immutable_properties (priv->channel);
-
- g_variant_lookup (properties,
- TP_PROP_CHANNEL_TYPE_SERVER_TLS_CONNECTION_HOSTNAME,
- "s", &priv->hostname);
-
- DEBUG ("Received hostname: %s", priv->hostname);
-
- g_variant_lookup (properties,
- TP_PROP_CHANNEL_TYPE_SERVER_TLS_CONNECTION_REFERENCE_IDENTITIES,
- "^as", &priv->reference_identities);
-
- /*
- * If the channel doesn't implement the ReferenceIdentities parameter
- * then fallback to the hostname.
- */
- if (priv->reference_identities == NULL)
- {
- default_identities[0] = (gchar *) priv->hostname;
- default_identities[1] = NULL;
- priv->reference_identities = g_strdupv (default_identities);
- }
- else
- {
-#ifdef ENABLE_DEBUG
- gchar *output = g_strjoinv (", ", (gchar **) priv->reference_identities);
- DEBUG ("Received reference identities: %s", output);
- g_free (output);
-#endif /* ENABLE_DEBUG */
- }
-
- g_variant_lookup (properties,
- EMP_IFACE_CHANNEL_TYPE_SERVER_TLS_CONNECTION ".ServerCertificate",
- "&o", &cert_object_path);
- bus_name = tp_proxy_get_bus_name (TP_PROXY (priv->channel));
-
- DEBUG ("Creating an TpTLSCertificate for path %s, bus name %s",
- cert_object_path, bus_name);
-
- priv->certificate = tp_tls_certificate_new (TP_PROXY (priv->channel),
- cert_object_path, &error);
-
- g_variant_unref (properties);
-
- if (error != NULL)
- {
- DEBUG ("Unable to create the TpTLSCertificate: error %s",
- error->message);
-
- g_simple_async_result_set_from_error (priv->async_init_res, error);
- g_simple_async_result_complete_in_idle (priv->async_init_res);
-
- g_error_free (error);
- tp_clear_object (&priv->async_init_res);
-
- return;
- }
-
- tp_proxy_prepare_async (priv->certificate, features,
- tls_certificate_prepared_cb, self);
-}
-
-static void
-async_initable_iface_init (GAsyncInitableIface *iface)
-{
- iface->init_async = tls_handler_init_async;
- iface->init_finish = tls_handler_init_finish;
-}
-
-static void
-empathy_server_tls_handler_finalize (GObject *object)
-{
- EmpathyServerTLSHandlerPriv *priv = GET_PRIV (object);
-
- DEBUG ("%p", object);
-
- tp_clear_object (&priv->channel);
- tp_clear_object (&priv->certificate);
- g_strfreev (priv->reference_identities);
- g_free (priv->hostname);
-
- G_OBJECT_CLASS (empathy_server_tls_handler_parent_class)->finalize (object);
-}
-
-static void
-empathy_server_tls_handler_get_property (GObject *object,
- guint property_id,
- GValue *value,
- GParamSpec *pspec)
-{
- EmpathyServerTLSHandlerPriv *priv = GET_PRIV (object);
-
- switch (property_id)
- {
- case PROP_CHANNEL:
- g_value_set_object (value, priv->channel);
- break;
- case PROP_TLS_CERTIFICATE:
- g_value_set_object (value, priv->certificate);
- break;
- case PROP_HOSTNAME:
- g_value_set_string (value, priv->hostname);
- break;
- case PROP_REFERENCE_IDENTITIES:
- g_value_set_boxed (value, priv->reference_identities);
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
- break;
- }
-}
-
-static void
-empathy_server_tls_handler_set_property (GObject *object,
- guint property_id,
- const GValue *value,
- GParamSpec *pspec)
-{
- EmpathyServerTLSHandlerPriv *priv = GET_PRIV (object);
-
- switch (property_id)
- {
- case PROP_CHANNEL:
- priv->channel = g_value_dup_object (value);
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
- break;
- }
-}
-
-static void
-empathy_server_tls_handler_class_init (EmpathyServerTLSHandlerClass *klass)
-{
- GObjectClass *oclass = G_OBJECT_CLASS (klass);
- GParamSpec *pspec;
-
- oclass->get_property = empathy_server_tls_handler_get_property;
- oclass->set_property = empathy_server_tls_handler_set_property;
- oclass->finalize = empathy_server_tls_handler_finalize;
-
- g_type_class_add_private (klass, sizeof (EmpathyServerTLSHandlerPriv));
-
- pspec = g_param_spec_object ("channel", "The TpChannel",
- "The TpChannel this handler is supposed to handle.",
- TP_TYPE_CHANNEL,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS);
- g_object_class_install_property (oclass, PROP_CHANNEL, pspec);
-
- pspec = g_param_spec_object ("certificate", "The TpTLSCertificate",
- "The TpTLSCertificate carried by the channel.",
- TP_TYPE_TLS_CERTIFICATE,
- G_PARAM_READABLE | G_PARAM_STATIC_STRINGS);
- g_object_class_install_property (oclass, PROP_TLS_CERTIFICATE, pspec);
-
- pspec = g_param_spec_string ("hostname", "The hostname",
- "The hostname the user is expecting to connect to.",
- NULL,
- G_PARAM_READABLE | G_PARAM_STATIC_STRINGS);
- g_object_class_install_property (oclass, PROP_HOSTNAME, pspec);
-
- pspec = g_param_spec_boxed ("reference-identities", "Reference Identities",
- "The server certificate should certify one of these identities",
- G_TYPE_STRV, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS);
- g_object_class_install_property (oclass, PROP_REFERENCE_IDENTITIES, pspec);
-
-}
-
-static void
-empathy_server_tls_handler_init (EmpathyServerTLSHandler *self)
-{
- self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self,
- EMPATHY_TYPE_SERVER_TLS_HANDLER, EmpathyServerTLSHandlerPriv);
-}
-
-void
-empathy_server_tls_handler_new_async (TpChannel *channel,
- GAsyncReadyCallback callback,
- gpointer user_data)
-{
- g_assert (TP_IS_CHANNEL (channel));
- g_assert (channel != NULL);
-
- g_async_initable_new_async (EMPATHY_TYPE_SERVER_TLS_HANDLER,
- G_PRIORITY_DEFAULT, NULL, callback, user_data,
- "channel", channel, NULL);
-}
-
-EmpathyServerTLSHandler *
-empathy_server_tls_handler_new_finish (GAsyncResult *result,
- GError **error)
-{
- GObject *object, *source_object;
-
- source_object = g_async_result_get_source_object (result);
-
- object = g_async_initable_new_finish (G_ASYNC_INITABLE (source_object),
- result, error);
- g_object_unref (source_object);
-
- if (object != NULL)
- return EMPATHY_SERVER_TLS_HANDLER (object);
- else
- return NULL;
-}
-
-TpTLSCertificate *
-empathy_server_tls_handler_get_certificate (EmpathyServerTLSHandler *self)
-{
- EmpathyServerTLSHandlerPriv *priv = GET_PRIV (self);
-
- g_assert (priv->certificate != NULL);
-
- return priv->certificate;
-}
diff --git a/libempathy/empathy-server-tls-handler.h b/libempathy/empathy-server-tls-handler.h
deleted file mode 100644
index ed19c72f..00000000
--- a/libempathy/empathy-server-tls-handler.h
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
- * empathy-server-tls-handler.h - Header for EmpathyServerTLSHandler
- * Copyright (C) 2010 Collabora Ltd.
- * @author Cosimo Cecchi <cosimo.cecchi@collabora.co.uk>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-#ifndef __EMPATHY_SERVER_TLS_HANDLER_H__
-#define __EMPATHY_SERVER_TLS_HANDLER_H__
-
-#include <glib-object.h>
-#include <gio/gio.h>
-#include <telepathy-glib/telepathy-glib.h>
-
-G_BEGIN_DECLS
-
-typedef struct _EmpathyServerTLSHandler EmpathyServerTLSHandler;
-typedef struct _EmpathyServerTLSHandlerClass EmpathyServerTLSHandlerClass;
-
-struct _EmpathyServerTLSHandlerClass {
- GObjectClass parent_class;
-};
-
-struct _EmpathyServerTLSHandler {
- GObject parent;
- gpointer priv;
-};
-
-GType empathy_server_tls_handler_get_type (void);
-
-#define EMPATHY_TYPE_SERVER_TLS_HANDLER \
- (empathy_server_tls_handler_get_type ())
-#define EMPATHY_SERVER_TLS_HANDLER(obj) \
- (G_TYPE_CHECK_INSTANCE_CAST((obj), EMPATHY_TYPE_SERVER_TLS_HANDLER, \
- EmpathyServerTLSHandler))
-#define EMPATHY_SERVER_TLS_HANDLER_CLASS(klass) \
- (G_TYPE_CHECK_CLASS_CAST((klass), EMPATHY_TYPE_SERVER_TLS_HANDLER, \
- EmpathyServerTLSHandlerClass))
-#define EMPATHY_IS_SERVER_TLS_HANDLER(obj) \
- (G_TYPE_CHECK_INSTANCE_TYPE((obj), EMPATHY_TYPE_SERVER_TLS_HANDLER))
-#define EMPATHY_IS_SERVER_TLS_HANDLER_CLASS(klass) \
- (G_TYPE_CHECK_CLASS_TYPE((klass), EMPATHY_TYPE_SERVER_TLS_HANDLER))
-#define EMPATHY_SERVER_TLS_HANDLER_GET_CLASS(obj) \
- (G_TYPE_INSTANCE_GET_CLASS ((obj), EMPATHY_TYPE_SERVER_TLS_HANDLER, \
- EmpathyServerTLSHandlerClass))
-
-void empathy_server_tls_handler_new_async (TpChannel *channel,
- GAsyncReadyCallback callback, gpointer user_data);
-EmpathyServerTLSHandler * empathy_server_tls_handler_new_finish (
- GAsyncResult *result, GError **error);
-
-TpTLSCertificate * empathy_server_tls_handler_get_certificate (
- EmpathyServerTLSHandler *self);
-
-G_END_DECLS
-
-#endif /* #ifndef __EMPATHY_SERVER_TLS_HANDLER_H__*/
diff --git a/libempathy/empathy-status-presets.c b/libempathy/empathy-status-presets.c
deleted file mode 100644
index 9895d4d4..00000000
--- a/libempathy/empathy-status-presets.c
+++ /dev/null
@@ -1,429 +0,0 @@
-/* -*- 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., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301 USA
- *
- * Author: Martyn Russell <martyn@imendio.com>
- */
-
-#include "config.h"
-#include "empathy-status-presets.h"
-
-#include <sys/stat.h>
-#include <tp-account-widgets/tpaw-utils.h>
-
-#include "empathy-utils.h"
-
-#define DEBUG_FLAG EMPATHY_DEBUG_OTHER
-#include "empathy-debug.h"
-
-#define STATUS_PRESETS_XML_FILENAME "status-presets.xml"
-#define STATUS_PRESETS_DTD_RESOURCENAME "/org/gnome/Empathy/empathy-status-presets.dtd"
-#define STATUS_PRESETS_MAX_EACH 15
-
-typedef struct {
- gchar *status;
- TpConnectionPresenceType state;
-} StatusPreset;
-
-static StatusPreset *status_preset_new (TpConnectionPresenceType 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 (TpConnectionPresenceType state);
-static gboolean status_presets_file_save (void);
-static void status_presets_set_default (TpConnectionPresenceType state,
- const gchar *status);
-
-static GList *presets = NULL;
-static StatusPreset *default_preset = NULL;
-
-static StatusPreset *
-status_preset_new (TpConnectionPresenceType 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 (!tpaw_xml_validate_from_resource (doc, STATUS_PRESETS_DTD_RESOURCENAME)) {
- 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) {
- TpConnectionPresenceType 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, (const xmlChar *) "presence");
-
- if (state_str) {
- state = empathy_presence_from_str (state_str);
- if (empathy_status_presets_is_valid (state)) {
- if (is_default) {
- DEBUG ("Default status preset state is:"
- " '%s', status:'%s'", state_str,
- status);
-
- status_presets_set_default (state, status);
- } else {
- preset = status_preset_new (state, status);
- presets = g_list_append (presets, preset);
- }
- }
- }
-
- xmlFree (status);
- xmlFree (state_str);
- }
-
- node = node->next;
- }
-
- /* Use the default if not set */
- if (!default_preset) {
- status_presets_set_default (TP_CONNECTION_PRESENCE_TYPE_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_user_config_dir (), 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[NUM_TP_CONNECTION_PRESENCE_TYPES];
- gint i;
-
- for (i = 0; i < NUM_TP_CONNECTION_PRESENCE_TYPES; i++) {
- count[i] = 0;
- }
-
- dir = g_build_filename (g_get_user_config_dir (), 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 ((const xmlChar *) "1.0");
- root = xmlNewNode (NULL, (const xmlChar *) "presets");
- xmlDocSetRootElement (doc, root);
-
- if (default_preset) {
- xmlNodePtr subnode;
- xmlChar *state;
-
- state = (xmlChar *) empathy_presence_to_str (default_preset->state);
-
- subnode = xmlNewTextChild (root, NULL, (const xmlChar *) "default",
- (const xmlChar *) default_preset->status);
- xmlNewProp (subnode, (const xmlChar *) "presence", state);
- }
-
- for (l = presets; l; l = l->next) {
- StatusPreset *sp;
- xmlNodePtr subnode;
- xmlChar *state;
-
- sp = l->data;
- state = (xmlChar *) empathy_presence_to_str (sp->state);
-
- count[sp->state]++;
- if (count[sp->state] > STATUS_PRESETS_MAX_EACH) {
- continue;
- }
-
- subnode = xmlNewTextChild (root, NULL,
- (const xmlChar *) "status", (const xmlChar *) sp->status);
- xmlNewProp (subnode, (const xmlChar *) "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 (TpConnectionPresenceType 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 (TpConnectionPresenceType 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 (TpConnectionPresenceType 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 (TP_CONNECTION_PRESENCE_TYPE_AVAILABLE, NULL);
-
- status_presets_file_save ();
-}
-
-TpConnectionPresenceType
-empathy_status_presets_get_default_state (void)
-{
- if (!default_preset) {
- return TP_CONNECTION_PRESENCE_TYPE_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 (TpConnectionPresenceType 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 (TpConnectionPresenceType 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 ();
-}
-
-/**
- * empathy_status_presets_is_valid:
- * @state: a #TpConnectionPresenceType
- *
- * Check if a presence type can be used as a preset.
- *
- * Returns: %TRUE if the presence type can be used as a preset.
- */
-gboolean
-empathy_status_presets_is_valid (TpConnectionPresenceType state)
-{
- switch (state) {
- case TP_CONNECTION_PRESENCE_TYPE_UNSET:
- case TP_CONNECTION_PRESENCE_TYPE_OFFLINE:
- case TP_CONNECTION_PRESENCE_TYPE_UNKNOWN:
- case TP_CONNECTION_PRESENCE_TYPE_ERROR:
- return FALSE;
-
- case TP_CONNECTION_PRESENCE_TYPE_AVAILABLE:
- case TP_CONNECTION_PRESENCE_TYPE_AWAY:
- case TP_CONNECTION_PRESENCE_TYPE_EXTENDED_AWAY:
- case TP_CONNECTION_PRESENCE_TYPE_HIDDEN:
- case TP_CONNECTION_PRESENCE_TYPE_BUSY:
- return TRUE;
-
- default:
- return FALSE;
- }
-}
diff --git a/libempathy/empathy-status-presets.dtd b/libempathy/empathy-status-presets.dtd
deleted file mode 100644
index 872be6b4..00000000
--- a/libempathy/empathy-status-presets.dtd
+++ /dev/null
@@ -1,14 +0,0 @@
-<!--
- 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/libempathy/empathy-status-presets.h b/libempathy/empathy-status-presets.h
deleted file mode 100644
index 5e490221..00000000
--- a/libempathy/empathy-status-presets.h
+++ /dev/null
@@ -1,47 +0,0 @@
-/* -*- 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., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301 USA
- *
- * Author: Martyn Russell <martyn@imendio.com>
- */
-
-#ifndef __EMPATHY_STATUS_PRESETS_H__
-#define __EMPATHY_STATUS_PRESETS_H__
-
-#include <telepathy-glib/telepathy-glib.h>
-
-G_BEGIN_DECLS
-
-void empathy_status_presets_get_all (void);
-GList * empathy_status_presets_get (TpConnectionPresenceType state,
- gint max_number);
-void empathy_status_presets_set_last (TpConnectionPresenceType state,
- const gchar *status);
-void empathy_status_presets_remove (TpConnectionPresenceType state,
- const gchar *status);
-void empathy_status_presets_reset (void);
-TpConnectionPresenceType empathy_status_presets_get_default_state (void);
-const gchar * empathy_status_presets_get_default_status (void);
-void empathy_status_presets_set_default (TpConnectionPresenceType state,
- const gchar *status);
-void empathy_status_presets_clear_default (void);
-gboolean empathy_status_presets_is_valid (TpConnectionPresenceType state);
-
-G_END_DECLS
-
-#endif /* __EMPATHY_STATUS_PRESETS_H__ */
diff --git a/libempathy/empathy-tls-verifier.c b/libempathy/empathy-tls-verifier.c
deleted file mode 100644
index fcbc559b..00000000
--- a/libempathy/empathy-tls-verifier.c
+++ /dev/null
@@ -1,598 +0,0 @@
-/*
- * empathy-tls-verifier.c - Source for EmpathyTLSVerifier
- * Copyright (C) 2010 Collabora Ltd.
- * @author Cosimo Cecchi <cosimo.cecchi@collabora.co.uk>
- * @author Stef Walter <stefw@collabora.co.uk>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-#include "config.h"
-#include "empathy-tls-verifier.h"
-
-#include <gcr/gcr.h>
-
-#include "empathy-utils.h"
-
-#define DEBUG_FLAG EMPATHY_DEBUG_TLS
-#include "empathy-debug.h"
-
-G_DEFINE_TYPE (EmpathyTLSVerifier, empathy_tls_verifier,
- G_TYPE_OBJECT)
-
-#define GET_PRIV(obj) EMPATHY_GET_PRIV (obj, EmpathyTLSVerifier);
-
-enum {
- PROP_TLS_CERTIFICATE = 1,
- PROP_HOSTNAME,
- PROP_REFERENCE_IDENTITIES,
-
- LAST_PROPERTY,
-};
-
-typedef struct {
- TpTLSCertificate *certificate;
- gchar *hostname;
- gchar **reference_identities;
-
- GSimpleAsyncResult *verify_result;
- GHashTable *details;
-
- gboolean dispose_run;
-} EmpathyTLSVerifierPriv;
-
-static gboolean
-verification_output_to_reason (gint res,
- guint verify_output,
- TpTLSCertificateRejectReason *reason)
-{
- gboolean retval = TRUE;
-
- g_assert (reason != NULL);
-
- if (res != GNUTLS_E_SUCCESS)
- {
- retval = FALSE;
-
- /* the certificate is not structurally valid */
- switch (res)
- {
- case GNUTLS_E_INSUFFICIENT_CREDENTIALS:
- *reason = TP_TLS_CERTIFICATE_REJECT_REASON_UNTRUSTED;
- break;
- case GNUTLS_E_CONSTRAINT_ERROR:
- *reason = TP_TLS_CERTIFICATE_REJECT_REASON_LIMIT_EXCEEDED;
- break;
- default:
- *reason = TP_TLS_CERTIFICATE_REJECT_REASON_UNKNOWN;
- break;
- }
-
- goto out;
- }
-
- /* the certificate is structurally valid, check for other errors. */
- if (verify_output & GNUTLS_CERT_INVALID)
- {
- retval = FALSE;
-
- if (verify_output & GNUTLS_CERT_SIGNER_NOT_FOUND)
- *reason = TP_TLS_CERTIFICATE_REJECT_REASON_SELF_SIGNED;
- else if (verify_output & GNUTLS_CERT_SIGNER_NOT_CA)
- *reason = TP_TLS_CERTIFICATE_REJECT_REASON_UNTRUSTED;
- else if (verify_output & GNUTLS_CERT_INSECURE_ALGORITHM)
- *reason = TP_TLS_CERTIFICATE_REJECT_REASON_INSECURE;
- else if (verify_output & GNUTLS_CERT_NOT_ACTIVATED)
- *reason = TP_TLS_CERTIFICATE_REJECT_REASON_NOT_ACTIVATED;
- else if (verify_output & GNUTLS_CERT_EXPIRED)
- *reason = TP_TLS_CERTIFICATE_REJECT_REASON_EXPIRED;
- else
- *reason = TP_TLS_CERTIFICATE_REJECT_REASON_UNKNOWN;
-
- goto out;
- }
-
- out:
- return retval;
-}
-
-static void
-build_certificate_list_for_gnutls (GcrCertificateChain *chain,
- gnutls_x509_crt_t **list,
- guint *n_list,
- gnutls_x509_crt_t **anchors,
- guint *n_anchors)
-{
- GcrCertificate *cert;
- guint idx, length;
- gnutls_x509_crt_t *retval;
- gnutls_x509_crt_t gcert;
- gnutls_datum_t datum;
- gsize n_data;
-
- g_assert (list);
- g_assert (n_list);
- g_assert (anchors);
- g_assert (n_anchors);
-
- *list = *anchors = NULL;
- *n_list = *n_anchors = 0;
-
- length = gcr_certificate_chain_get_length (chain);
- retval = g_malloc0 (sizeof (gnutls_x509_crt_t) * length);
-
- /* Convert the main body of the chain to gnutls */
- for (idx = 0; idx < length; ++idx)
- {
- cert = gcr_certificate_chain_get_certificate (chain, idx);
- datum.data = (gpointer)gcr_certificate_get_der_data (cert, &n_data);
- datum.size = n_data;
-
- gnutls_x509_crt_init (&gcert);
- if (gnutls_x509_crt_import (gcert, &datum, GNUTLS_X509_FMT_DER) < 0)
- g_return_if_reached ();
-
- retval[idx] = gcert;
- }
-
- *list = retval;
- *n_list = length;
-
- /* See if we have an anchor */
- if (gcr_certificate_chain_get_status (chain) ==
- GCR_CERTIFICATE_CHAIN_ANCHORED)
- {
- cert = gcr_certificate_chain_get_anchor (chain);
- g_return_if_fail (cert);
-
- datum.data = (gpointer)gcr_certificate_get_der_data (cert, &n_data);
- datum.size = n_data;
-
- gnutls_x509_crt_init (&gcert);
- if (gnutls_x509_crt_import (gcert, &datum, GNUTLS_X509_FMT_DER) < 0)
- g_return_if_reached ();
-
- retval = g_malloc0 (sizeof (gnutls_x509_crt_t) * 1);
- retval[0] = gcert;
- *anchors = retval;
- *n_anchors = 1;
- }
-}
-
-static void
-free_certificate_list_for_gnutls (gnutls_x509_crt_t *list,
- guint n_list)
-{
- guint idx;
-
- for (idx = 0; idx < n_list; idx++)
- gnutls_x509_crt_deinit (list[idx]);
- g_free (list);
-}
-
-static void
-complete_verification (EmpathyTLSVerifier *self)
-{
- EmpathyTLSVerifierPriv *priv = GET_PRIV (self);
-
- DEBUG ("Verification successful, completing...");
-
- g_simple_async_result_complete_in_idle (priv->verify_result);
-
- tp_clear_object (&priv->verify_result);
-}
-
-static void
-abort_verification (EmpathyTLSVerifier *self,
- TpTLSCertificateRejectReason reason)
-{
- EmpathyTLSVerifierPriv *priv = GET_PRIV (self);
-
- DEBUG ("Verification error %u, aborting...", reason);
-
- g_simple_async_result_set_error (priv->verify_result,
- G_IO_ERROR, reason, "TLS verification failed with reason %u",
- reason);
- g_simple_async_result_complete_in_idle (priv->verify_result);
-
- tp_clear_object (&priv->verify_result);
-}
-
-static void
-debug_certificate (GcrCertificate *cert)
-{
- gchar *subject = gcr_certificate_get_subject_dn (cert);
- DEBUG ("Certificate: %s", subject);
- g_free (subject);
-}
-
-static void
-debug_certificate_chain (GcrCertificateChain *chain)
-{
- GEnumClass *enum_class;
- GEnumValue *enum_value;
- gint idx, length;
- GcrCertificate *cert;
-
- enum_class = G_ENUM_CLASS
- (g_type_class_peek (GCR_TYPE_CERTIFICATE_CHAIN_STATUS));
- enum_value = g_enum_get_value (enum_class,
- gcr_certificate_chain_get_status (chain));
- length = gcr_certificate_chain_get_length (chain);
- DEBUG ("Certificate chain: length %u status %s",
- length, enum_value ? enum_value->value_nick : "XXX");
-
- for (idx = 0; idx < length; ++idx)
- {
- cert = gcr_certificate_chain_get_certificate (chain, idx);
- debug_certificate (cert);
- }
-}
-
-static void
-perform_verification (EmpathyTLSVerifier *self,
- GcrCertificateChain *chain)
-{
- gboolean ret = FALSE;
- TpTLSCertificateRejectReason reason =
- TP_TLS_CERTIFICATE_REJECT_REASON_UNKNOWN;
- gnutls_x509_crt_t *list, *anchors;
- guint n_list, n_anchors;
- guint verify_output;
- gint res;
- gint i;
- gboolean matched = FALSE;
- EmpathyTLSVerifierPriv *priv = GET_PRIV (self);
-
- DEBUG ("Performing verification");
- debug_certificate_chain (chain);
-
- list = anchors = NULL;
- n_list = n_anchors = 0;
-
- /*
- * If the first certificate is an pinned certificate then we completely
- * ignore the rest of the verification process.
- */
- if (gcr_certificate_chain_get_status (chain) == GCR_CERTIFICATE_CHAIN_PINNED)
- {
- DEBUG ("Found pinned certificate for %s", priv->hostname);
- complete_verification (self);
- goto out;
- }
-
- build_certificate_list_for_gnutls (chain, &list, &n_list,
- &anchors, &n_anchors);
- if (list == NULL || n_list == 0) {
- g_warn_if_reached ();
- abort_verification (self, TP_TLS_CERTIFICATE_REJECT_REASON_UNKNOWN);
- goto out;
- }
-
- verify_output = 0;
- res = gnutls_x509_crt_list_verify (list, n_list, anchors, n_anchors,
- NULL, 0, 0, &verify_output);
- ret = verification_output_to_reason (res, verify_output, &reason);
-
- DEBUG ("Certificate verification gave result %d with reason %u", ret,
- reason);
-
- if (!ret) {
- abort_verification (self, reason);
- goto out;
- }
-
- /* now check if the certificate matches one of the reference identities. */
- if (priv->reference_identities != NULL)
- {
- for (i = 0, matched = FALSE; priv->reference_identities[i] != NULL; ++i)
- {
- if (gnutls_x509_crt_check_hostname (list[0],
- priv->reference_identities[i]) == 1)
- {
- matched = TRUE;
- break;
- }
- }
- }
-
- if (!matched)
- {
- gchar *certified_hostname;
-
- certified_hostname = empathy_get_x509_certificate_hostname (list[0]);
- tp_asv_set_string (priv->details,
- "expected-hostname", priv->hostname);
- tp_asv_set_string (priv->details,
- "certificate-hostname", certified_hostname);
-
- DEBUG ("Hostname mismatch: got %s but expected %s",
- certified_hostname, priv->hostname);
-
- g_free (certified_hostname);
- abort_verification (self,
- TP_TLS_CERTIFICATE_REJECT_REASON_HOSTNAME_MISMATCH);
- goto out;
- }
-
- DEBUG ("Hostname matched");
- complete_verification (self);
-
- out:
- free_certificate_list_for_gnutls (list, n_list);
- free_certificate_list_for_gnutls (anchors, n_anchors);
-}
-
-static void
-perform_verification_cb (GObject *object,
- GAsyncResult *res,
- gpointer user_data)
-{
- GError *error = NULL;
-
- GcrCertificateChain *chain = GCR_CERTIFICATE_CHAIN (object);
- EmpathyTLSVerifier *self = EMPATHY_TLS_VERIFIER (user_data);
-
- /* Even if building the chain fails, try verifying what we have */
- if (!gcr_certificate_chain_build_finish (chain, res, &error))
- {
- DEBUG ("Building of certificate chain failed: %s", error->message);
- g_clear_error (&error);
- }
-
- perform_verification (self, chain);
-
- /* Matches ref when staring chain build */
- g_object_unref (self);
-}
-
-static void
-empathy_tls_verifier_get_property (GObject *object,
- guint property_id,
- GValue *value,
- GParamSpec *pspec)
-{
- EmpathyTLSVerifierPriv *priv = GET_PRIV (object);
-
- switch (property_id)
- {
- case PROP_TLS_CERTIFICATE:
- g_value_set_object (value, priv->certificate);
- break;
- case PROP_HOSTNAME:
- g_value_set_string (value, priv->hostname);
- break;
- case PROP_REFERENCE_IDENTITIES:
- g_value_set_boxed (value, priv->reference_identities);
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
- break;
- }
-}
-
-static void
-empathy_tls_verifier_set_property (GObject *object,
- guint property_id,
- const GValue *value,
- GParamSpec *pspec)
-{
- EmpathyTLSVerifierPriv *priv = GET_PRIV (object);
-
- switch (property_id)
- {
- case PROP_TLS_CERTIFICATE:
- priv->certificate = g_value_dup_object (value);
- break;
- case PROP_HOSTNAME:
- priv->hostname = g_value_dup_string (value);
- break;
- case PROP_REFERENCE_IDENTITIES:
- priv->reference_identities = g_value_dup_boxed (value);
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
- break;
- }
-}
-
-static void
-empathy_tls_verifier_dispose (GObject *object)
-{
- EmpathyTLSVerifierPriv *priv = GET_PRIV (object);
-
- if (priv->dispose_run)
- return;
-
- priv->dispose_run = TRUE;
-
- tp_clear_object (&priv->certificate);
-
- G_OBJECT_CLASS (empathy_tls_verifier_parent_class)->dispose (object);
-}
-
-static void
-empathy_tls_verifier_finalize (GObject *object)
-{
- EmpathyTLSVerifierPriv *priv = GET_PRIV (object);
-
- DEBUG ("%p", object);
-
- tp_clear_boxed (G_TYPE_HASH_TABLE, &priv->details);
- g_free (priv->hostname);
- g_strfreev (priv->reference_identities);
-
- G_OBJECT_CLASS (empathy_tls_verifier_parent_class)->finalize (object);
-}
-
-static void
-empathy_tls_verifier_init (EmpathyTLSVerifier *self)
-{
- EmpathyTLSVerifierPriv *priv;
-
- priv = self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self,
- EMPATHY_TYPE_TLS_VERIFIER, EmpathyTLSVerifierPriv);
- priv->details = tp_asv_new (NULL, NULL);
-}
-
-static void
-empathy_tls_verifier_class_init (EmpathyTLSVerifierClass *klass)
-{
- GParamSpec *pspec;
- GObjectClass *oclass = G_OBJECT_CLASS (klass);
-
- g_type_class_add_private (klass, sizeof (EmpathyTLSVerifierPriv));
-
- oclass->set_property = empathy_tls_verifier_set_property;
- oclass->get_property = empathy_tls_verifier_get_property;
- oclass->finalize = empathy_tls_verifier_finalize;
- oclass->dispose = empathy_tls_verifier_dispose;
-
- pspec = g_param_spec_object ("certificate", "The TpTLSCertificate",
- "The TpTLSCertificate to be verified.",
- TP_TYPE_TLS_CERTIFICATE,
- G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
- g_object_class_install_property (oclass, PROP_TLS_CERTIFICATE, pspec);
-
- pspec = g_param_spec_string ("hostname", "The hostname",
- "The hostname which is certified by the certificate.",
- NULL,
- G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
- g_object_class_install_property (oclass, PROP_HOSTNAME, pspec);
-
- pspec = g_param_spec_boxed ("reference-identities",
- "The reference identities",
- "The certificate should certify one of these identities.",
- G_TYPE_STRV,
- G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
- g_object_class_install_property (oclass, PROP_REFERENCE_IDENTITIES, pspec);
-}
-
-EmpathyTLSVerifier *
-empathy_tls_verifier_new (TpTLSCertificate *certificate,
- const gchar *hostname,
- const gchar **reference_identities)
-{
- g_assert (TP_IS_TLS_CERTIFICATE (certificate));
- g_assert (hostname != NULL);
- g_assert (reference_identities != NULL);
-
- return g_object_new (EMPATHY_TYPE_TLS_VERIFIER,
- "certificate", certificate,
- "hostname", hostname,
- "reference-identities", reference_identities,
- NULL);
-}
-
-void
-empathy_tls_verifier_verify_async (EmpathyTLSVerifier *self,
- GAsyncReadyCallback callback,
- gpointer user_data)
-{
- GcrCertificateChain *chain;
- GcrCertificate *cert;
- GPtrArray *cert_data;
- GArray *data;
- guint idx;
- EmpathyTLSVerifierPriv *priv = GET_PRIV (self);
-
- DEBUG ("Starting verification");
-
- g_return_if_fail (priv->verify_result == NULL);
-
- cert_data = tp_tls_certificate_get_cert_data (priv->certificate);
- g_return_if_fail (cert_data);
-
- priv->verify_result = g_simple_async_result_new (G_OBJECT (self),
- callback, user_data, NULL);
-
- /* Create a certificate chain */
- chain = gcr_certificate_chain_new ();
- for (idx = 0; idx < cert_data->len; ++idx) {
- data = g_ptr_array_index (cert_data, idx);
- cert = gcr_simple_certificate_new ((guchar *) data->data, data->len);
- gcr_certificate_chain_add (chain, cert);
- g_object_unref (cert);
- }
-
- gcr_certificate_chain_build_async (chain, GCR_PURPOSE_SERVER_AUTH, priv->hostname, 0,
- NULL, perform_verification_cb, g_object_ref (self));
-
- g_object_unref (chain);
-}
-
-gboolean
-empathy_tls_verifier_verify_finish (EmpathyTLSVerifier *self,
- GAsyncResult *res,
- TpTLSCertificateRejectReason *reason,
- GHashTable **details,
- GError **error)
-{
- EmpathyTLSVerifierPriv *priv = GET_PRIV (self);
-
- if (g_simple_async_result_propagate_error (G_SIMPLE_ASYNC_RESULT (res),
- error))
- {
- if (reason != NULL)
- *reason = (*error)->code;
-
- if (details != NULL)
- {
- *details = tp_asv_new (NULL, NULL);
- tp_g_hash_table_update (*details, priv->details,
- (GBoxedCopyFunc) g_strdup,
- (GBoxedCopyFunc) tp_g_value_slice_dup);
- }
-
- return FALSE;
- }
-
- if (reason != NULL)
- *reason = TP_TLS_CERTIFICATE_REJECT_REASON_UNKNOWN;
-
- return TRUE;
-}
-
-void
-empathy_tls_verifier_store_exception (EmpathyTLSVerifier *self)
-{
- GArray *data;
- GcrCertificate *cert;
- GPtrArray *cert_data;
- GError *error = NULL;
- EmpathyTLSVerifierPriv *priv = GET_PRIV (self);
-
- cert_data = tp_tls_certificate_get_cert_data (priv->certificate);
- g_return_if_fail (cert_data);
-
- if (!cert_data->len)
- {
- DEBUG ("No certificate to pin.");
- return;
- }
-
- /* The first certificate in the chain is for the host */
- data = g_ptr_array_index (cert_data, 0);
- cert = gcr_simple_certificate_new ((gpointer)data->data, data->len);
-
- DEBUG ("Storing pinned certificate:");
- debug_certificate (cert);
-
- if (!gcr_trust_add_pinned_certificate (cert, GCR_PURPOSE_SERVER_AUTH,
- priv->hostname, NULL, &error))
- DEBUG ("Can't store the pinned certificate: %s", error->message);
-
- g_object_unref (cert);
-}
diff --git a/libempathy/empathy-tls-verifier.h b/libempathy/empathy-tls-verifier.h
deleted file mode 100644
index c25d9756..00000000
--- a/libempathy/empathy-tls-verifier.h
+++ /dev/null
@@ -1,79 +0,0 @@
-/*
- * empathy-tls-verifier.h - Header for EmpathyTLSVerifier
- * Copyright (C) 2010 Collabora Ltd.
- * @author Cosimo Cecchi <cosimo.cecchi@collabora.co.uk>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-#ifndef __EMPATHY_TLS_VERIFIER_H__
-#define __EMPATHY_TLS_VERIFIER_H__
-
-#include <glib-object.h>
-#include <gio/gio.h>
-#include <telepathy-glib/telepathy-glib.h>
-
-G_BEGIN_DECLS
-
-typedef struct _EmpathyTLSVerifier EmpathyTLSVerifier;
-typedef struct _EmpathyTLSVerifierClass EmpathyTLSVerifierClass;
-
-struct _EmpathyTLSVerifierClass {
- GObjectClass parent_class;
-};
-
-struct _EmpathyTLSVerifier {
- GObject parent;
- gpointer priv;
-};
-
-GType empathy_tls_verifier_get_type (void);
-
-#define EMPATHY_TYPE_TLS_VERIFIER \
- (empathy_tls_verifier_get_type ())
-#define EMPATHY_TLS_VERIFIER(obj) \
- (G_TYPE_CHECK_INSTANCE_CAST((obj), EMPATHY_TYPE_TLS_VERIFIER, \
- EmpathyTLSVerifier))
-#define EMPATHY_TLS_VERIFIER_CLASS(klass) \
- (G_TYPE_CHECK_CLASS_CAST((klass), EMPATHY_TYPE_TLS_VERIFIER, \
- EmpathyTLSVerifierClass))
-#define EMPATHY_IS_TLS_VERIFIER(obj) \
- (G_TYPE_CHECK_INSTANCE_TYPE((obj), EMPATHY_TYPE_TLS_VERIFIER))
-#define EMPATHY_IS_TLS_VERIFIER_CLASS(klass) \
- (G_TYPE_CHECK_CLASS_TYPE((klass), EMPATHY_TYPE_TLS_VERIFIER))
-#define EMPATHY_TLS_VERIFIER_GET_CLASS(obj) \
- (G_TYPE_INSTANCE_GET_CLASS ((obj), EMPATHY_TYPE_TLS_VERIFIER, \
- EmpathyTLSVerifierClass))
-
-EmpathyTLSVerifier * empathy_tls_verifier_new (
- TpTLSCertificate *certificate,
- const gchar *hostname,
- const gchar **reference_identities);
-
-void empathy_tls_verifier_verify_async (EmpathyTLSVerifier *self,
- GAsyncReadyCallback callback,
- gpointer user_data);
-
-gboolean empathy_tls_verifier_verify_finish (EmpathyTLSVerifier *self,
- GAsyncResult *res,
- TpTLSCertificateRejectReason *reason,
- GHashTable **details,
- GError **error);
-
-void empathy_tls_verifier_store_exception (EmpathyTLSVerifier *self);
-
-G_END_DECLS
-
-#endif /* #ifndef __EMPATHY_TLS_VERIFIER_H__*/
diff --git a/libempathy/empathy-tp-chat.c b/libempathy/empathy-tp-chat.c
deleted file mode 100644
index e0fd4c2c..00000000
--- a/libempathy/empathy-tp-chat.c
+++ /dev/null
@@ -1,1473 +0,0 @@
-/*
- * Copyright (C) 2007-2012 Collabora Ltd.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- *
- * Authors: Xavier Claessens <xclaesse@gmail.com>
- */
-
-#include "config.h"
-#include "empathy-tp-chat.h"
-
-#include <tp-account-widgets/tpaw-utils.h>
-
-#include "empathy-request-util.h"
-#include "empathy-utils.h"
-
-#define DEBUG_FLAG EMPATHY_DEBUG_TP | EMPATHY_DEBUG_CHAT
-#include "empathy-debug.h"
-
-struct _EmpathyTpChatPrivate
-{
- TpAccount *account;
- EmpathyContact *user;
- EmpathyContact *remote_contact;
- GList *members;
- /* Queue of messages signalled but not acked yet */
- GQueue *pending_messages_queue;
-
- /* Subject */
- gboolean supports_subject;
- gboolean can_set_subject;
- gchar *subject;
- gchar *subject_actor;
-
- /* Room config (for now, we only track the title and don't support
- * setting it) */
- gchar *title;
-
- gboolean can_upgrade_to_muc;
-
- GHashTable *messages_being_sent;
-
- /* GSimpleAsyncResult used when preparing EMPATHY_TP_CHAT_FEATURE_CORE */
- GSimpleAsyncResult *ready_result;
- gboolean preparing_password;
-};
-
-enum
-{
- PROP_0,
- PROP_ACCOUNT,
- PROP_SELF_CONTACT,
- PROP_REMOTE_CONTACT,
- PROP_N_MESSAGES_SENDING,
- PROP_TITLE,
- PROP_SUBJECT,
-};
-
-enum
-{
- MESSAGE_RECEIVED,
- SEND_ERROR,
- MESSAGE_ACKNOWLEDGED,
- SIG_MEMBER_RENAMED,
- SIG_MEMBERS_CHANGED,
- LAST_SIGNAL
-};
-
-static guint signals[LAST_SIGNAL];
-
-G_DEFINE_TYPE (EmpathyTpChat, empathy_tp_chat, TP_TYPE_TEXT_CHANNEL)
-
-static void
-tp_chat_set_delivery_status (EmpathyTpChat *self,
- const gchar *token,
- EmpathyDeliveryStatus delivery_status)
-{
- TpDeliveryReportingSupportFlags flags =
- tp_text_channel_get_delivery_reporting_support (
- TP_TEXT_CHANNEL (self));
-
- /* channel must support receiving failures and successes */
- if (!tp_str_empty (token) &&
- flags & TP_DELIVERY_REPORTING_SUPPORT_FLAG_RECEIVE_FAILURES &&
- flags & TP_DELIVERY_REPORTING_SUPPORT_FLAG_RECEIVE_SUCCESSES)
- {
- DEBUG ("Delivery status (%s) = %u", token, delivery_status);
-
- switch (delivery_status)
- {
- case EMPATHY_DELIVERY_STATUS_NONE:
- g_hash_table_remove (self->priv->messages_being_sent,
- token);
- break;
-
- default:
- g_hash_table_insert (self->priv->messages_being_sent,
- g_strdup (token),
- GUINT_TO_POINTER (delivery_status));
- break;
- }
-
- g_object_notify (G_OBJECT (self), "n-messages-sending");
- }
-}
-
-static void tp_chat_prepare_ready_async (TpProxy *proxy,
- const TpProxyFeature *feature,
- GAsyncReadyCallback callback,
- gpointer user_data);
-
-static void
-tp_chat_async_cb (TpChannel *proxy,
- const GError *error,
- gpointer user_data,
- GObject *weak_object)
-{
- if (error != NULL)
- DEBUG ("Error %s: %s", (gchar *) user_data, error->message);
-}
-
-static void
-update_config_cb (TpChannel *proxy,
- const GError *error,
- gpointer user_data,
- GObject *weak_object)
-{
- if (error != NULL)
- DEBUG ("Failed to change config of the room: %s", error->message);
-}
-
-static void
-create_conference_cb (GObject *source,
- GAsyncResult *result,
- gpointer user_data)
-{
- TpChannel *channel;
- GError *error = NULL;
- GHashTable *props;
-
- channel = tp_account_channel_request_create_and_observe_channel_finish (
- TP_ACCOUNT_CHANNEL_REQUEST (source), result, &error);
- if (channel == NULL)
- {
- DEBUG ("Failed to create conference channel: %s", error->message);
- g_error_free (error);
- return;
- }
-
- /* Make the channel more confidential as only people invited are supposed to
- * join it. */
- props = tp_asv_new (
- "Private", G_TYPE_BOOLEAN, TRUE,
- "InviteOnly", G_TYPE_BOOLEAN, TRUE,
- NULL);
-
- tp_cli_channel_interface_room_config_call_update_configuration (channel, -1,
- props, update_config_cb, NULL, NULL, NULL);
-
- g_object_unref (channel);
- g_hash_table_unref (props);
-}
-
-void
-empathy_tp_chat_add (EmpathyTpChat *self,
- EmpathyContact *contact,
- const gchar *message)
-{
- TpChannel *channel = (TpChannel *) self;
-
- if (tp_proxy_has_interface_by_id (self,
- TP_IFACE_QUARK_CHANNEL_INTERFACE_GROUP))
- {
- TpHandle handle;
- GArray handles = {(gchar *) &handle, 1};
-
- g_return_if_fail (EMPATHY_IS_CONTACT (contact));
-
- handle = empathy_contact_get_handle (contact);
- tp_cli_channel_interface_group_call_add_members (channel,
- -1, &handles, NULL, NULL, NULL, NULL, NULL);
- }
- else if (self->priv->can_upgrade_to_muc)
- {
- TpAccountChannelRequest *req;
- GHashTable *props;
- const char *object_path;
- GPtrArray channels = { (gpointer *) &object_path, 1 };
- const char *invitees[2] = { NULL, };
- TpAccount *account;
-
- invitees[0] = empathy_contact_get_id (contact);
- object_path = tp_proxy_get_object_path (self);
-
- props = tp_asv_new (
- TP_PROP_CHANNEL_CHANNEL_TYPE, G_TYPE_STRING,
- TP_IFACE_CHANNEL_TYPE_TEXT,
- TP_PROP_CHANNEL_TARGET_HANDLE_TYPE, G_TYPE_UINT,
- TP_HANDLE_TYPE_NONE,
- TP_PROP_CHANNEL_INTERFACE_CONFERENCE_INITIAL_CHANNELS,
- TP_ARRAY_TYPE_OBJECT_PATH_LIST, &channels,
- TP_PROP_CHANNEL_INTERFACE_CONFERENCE_INITIAL_INVITEE_IDS,
- G_TYPE_STRV, invitees,
- /* FIXME: InvitationMessage ? */
- NULL);
-
- account = empathy_tp_chat_get_account (self);
-
- req = tp_account_channel_request_new (account, props,
- TP_USER_ACTION_TIME_NOT_USER_ACTION);
-
- /* Although this is a MUC, it's anonymous, so CreateChannel is
- * valid. */
- tp_account_channel_request_create_and_observe_channel_async (req,
- EMPATHY_CHAT_BUS_NAME, NULL, create_conference_cb, NULL);
-
- g_object_unref (req);
- g_hash_table_unref (props);
- }
- else
- {
- g_warning ("Cannot add to this channel");
- }
-}
-
-GList *
-empathy_tp_chat_get_members (EmpathyTpChat *self)
-{
- GList *members = NULL;
-
- if (self->priv->members)
- {
- members = g_list_copy (self->priv->members);
- g_list_foreach (members, (GFunc) g_object_ref, NULL);
- }
- else
- {
- members = g_list_prepend (members, g_object_ref (self->priv->user));
-
- if (self->priv->remote_contact != NULL)
- members = g_list_prepend (members,
- g_object_ref (self->priv->remote_contact));
- }
-
- return members;
-}
-
-static void
-check_ready (EmpathyTpChat *self)
-{
- if (self->priv->ready_result == NULL)
- return;
-
- DEBUG ("Ready");
-
- g_simple_async_result_complete_in_idle (self->priv->ready_result);
- tp_clear_object (&self->priv->ready_result);
-}
-
-static void
-tp_chat_build_message (EmpathyTpChat *self,
- TpMessage *msg,
- gboolean incoming)
-{
- EmpathyMessage *message;
- TpContact *sender;
-
- message = empathy_message_new_from_tp_message (msg, incoming);
- /* FIXME: this is actually a lie for incoming messages. */
- empathy_message_set_receiver (message, self->priv->user);
-
- sender = tp_signalled_message_get_sender (msg);
- g_assert (sender != NULL);
-
- if (tp_contact_get_handle (sender) == 0)
- {
- empathy_message_set_sender (message, self->priv->user);
- }
- else
- {
- EmpathyContact *contact;
-
- contact = empathy_contact_dup_from_tp_contact (sender);
-
- empathy_message_set_sender (message, contact);
-
- g_object_unref (contact);
- }
-
- g_queue_push_tail (self->priv->pending_messages_queue, message);
- g_signal_emit (self, signals[MESSAGE_RECEIVED], 0, message);
-}
-
-static void
-handle_delivery_report (EmpathyTpChat *self,
- TpMessage *message)
-{
- TpDeliveryStatus delivery_status;
- const GHashTable *header;
- TpChannelTextSendError delivery_error;
- gboolean valid;
- GPtrArray *echo;
- const gchar *message_body = NULL;
- const gchar *delivery_dbus_error;
- const gchar *delivery_token = NULL;
-
- header = tp_message_peek (message, 0);
- if (header == NULL)
- goto out;
-
- delivery_token = tp_asv_get_string (header, "delivery-token");
- delivery_status = tp_asv_get_uint32 (header, "delivery-status", &valid);
-
- if (!valid)
- {
- goto out;
- }
- else if (delivery_status == TP_DELIVERY_STATUS_ACCEPTED)
- {
- DEBUG ("Accepted %s", delivery_token);
- tp_chat_set_delivery_status (self, delivery_token,
- EMPATHY_DELIVERY_STATUS_ACCEPTED);
- goto out;
- }
- else if (delivery_status == TP_DELIVERY_STATUS_DELIVERED)
- {
- DEBUG ("Delivered %s", delivery_token);
- tp_chat_set_delivery_status (self, delivery_token,
- EMPATHY_DELIVERY_STATUS_NONE);
- goto out;
- }
- else if (delivery_status != TP_DELIVERY_STATUS_PERMANENTLY_FAILED &&
- delivery_status != TP_DELIVERY_STATUS_TEMPORARILY_FAILED)
- {
- goto out;
- }
-
- delivery_error = tp_asv_get_uint32 (header, "delivery-error", &valid);
- if (!valid)
- delivery_error = TP_CHANNEL_TEXT_SEND_ERROR_UNKNOWN;
-
- delivery_dbus_error = tp_asv_get_string (header, "delivery-dbus-error");
-
- /* TODO: ideally we should use tp-glib API giving us the echoed message as a
- * TpMessage. (fdo #35884) */
- echo = tp_asv_get_boxed (header, "delivery-echo",
- TP_ARRAY_TYPE_MESSAGE_PART_LIST);
- if (echo != NULL && echo->len >= 2)
- {
- const GHashTable *echo_body;
-
- echo_body = g_ptr_array_index (echo, 1);
- if (echo_body != NULL)
- message_body = tp_asv_get_string (echo_body, "content");
- }
-
- tp_chat_set_delivery_status (self, delivery_token,
- EMPATHY_DELIVERY_STATUS_NONE);
- g_signal_emit (self, signals[SEND_ERROR], 0, message_body,
- delivery_error, delivery_dbus_error);
-
-out:
- tp_text_channel_ack_message_async (TP_TEXT_CHANNEL (self),
- message, NULL, NULL);
-}
-
-static void
-handle_incoming_message (EmpathyTpChat *self,
- TpMessage *message,
- gboolean pending)
-{
- gchar *message_body;
-
- if (tp_message_is_delivery_report (message))
- {
- handle_delivery_report (self, message);
- return;
- }
-
- message_body = tp_message_to_text (message, NULL);
-
- DEBUG ("Message %s (channel %s): %s",
- pending ? "pending" : "received",
- tp_proxy_get_object_path (self), message_body);
-
- if (message_body == NULL)
- {
- DEBUG ("Empty message with NonTextContent, ignoring and acking.");
-
- tp_text_channel_ack_message_async (TP_TEXT_CHANNEL (self),
- message, NULL, NULL);
- return;
- }
-
- tp_chat_build_message (self, message, TRUE);
-
- g_free (message_body);
-}
-
-static void
-message_received_cb (TpTextChannel *channel,
- TpMessage *message,
- EmpathyTpChat *self)
-{
- handle_incoming_message (self, message, FALSE);
-}
-
-static gboolean
-find_pending_message_func (gconstpointer a,
- gconstpointer b)
-{
- EmpathyMessage *msg = (EmpathyMessage *) a;
- TpMessage *message = (TpMessage *) b;
-
- if (empathy_message_get_tp_message (msg) == message)
- return 0;
-
- return -1;
-}
-
-static void
-pending_message_removed_cb (TpTextChannel *channel,
- TpMessage *message,
- EmpathyTpChat *self)
-{
- GList *m;
-
- m = g_queue_find_custom (self->priv->pending_messages_queue, message,
- find_pending_message_func);
-
- if (m == NULL)
- return;
-
- g_signal_emit (self, signals[MESSAGE_ACKNOWLEDGED], 0, m->data);
-
- g_object_unref (m->data);
- g_queue_delete_link (self->priv->pending_messages_queue, m);
-}
-
-static void
-message_sent_cb (TpTextChannel *channel,
- TpMessage *message,
- TpMessageSendingFlags flags,
- gchar *token,
- EmpathyTpChat *self)
-{
- gchar *message_body;
-
- message_body = tp_message_to_text (message, NULL);
-
- DEBUG ("Message sent: %s", message_body);
-
- tp_chat_build_message (self, message, FALSE);
-
- g_free (message_body);
-}
-
-static TpChannelTextSendError
-error_to_text_send_error (GError *error)
-{
- if (error->domain != TP_ERROR)
- return TP_CHANNEL_TEXT_SEND_ERROR_UNKNOWN;
-
- switch (error->code)
- {
- case TP_ERROR_OFFLINE:
- return TP_CHANNEL_TEXT_SEND_ERROR_OFFLINE;
- case TP_ERROR_INVALID_HANDLE:
- return TP_CHANNEL_TEXT_SEND_ERROR_INVALID_CONTACT;
- case TP_ERROR_PERMISSION_DENIED:
- return TP_CHANNEL_TEXT_SEND_ERROR_PERMISSION_DENIED;
- case TP_ERROR_NOT_IMPLEMENTED:
- return TP_CHANNEL_TEXT_SEND_ERROR_NOT_IMPLEMENTED;
- }
-
- return TP_CHANNEL_TEXT_SEND_ERROR_UNKNOWN;
-}
-
-static void
-message_send_cb (GObject *source,
- GAsyncResult *result,
- gpointer user_data)
-{
- EmpathyTpChat *self = user_data;
- TpTextChannel *channel = (TpTextChannel *) source;
- gchar *token = NULL;
- GError *error = NULL;
-
- if (!tp_text_channel_send_message_finish (channel, result, &token, &error))
- {
- DEBUG ("Error: %s", error->message);
-
- /* FIXME: we should use the body of the message as first argument of the
- * signal but can't easily get it as we just get a user_data pointer. Once
- * we'll have rebased EmpathyTpChat on top of TpTextChannel we'll be able
- * to use the user_data pointer to pass the message and fix this. */
- g_signal_emit (self, signals[SEND_ERROR], 0,
- NULL, error_to_text_send_error (error), NULL);
-
- g_error_free (error);
- }
-
- tp_chat_set_delivery_status (self, token,
- EMPATHY_DELIVERY_STATUS_SENDING);
- g_free (token);
-}
-
-static void
-list_pending_messages (EmpathyTpChat *self)
-{
- GList *messages, *l;
-
- messages = tp_text_channel_dup_pending_messages (TP_TEXT_CHANNEL (self));
-
- for (l = messages; l != NULL; l = g_list_next (l))
- {
- TpMessage *message = l->data;
-
- handle_incoming_message (self, message, FALSE);
- }
-
- g_list_free_full (messages, g_object_unref);
-}
-
-static void
-update_subject (EmpathyTpChat *self,
- GHashTable *properties)
-{
- gboolean can_set, valid;
- const gchar *subject;
-
- can_set = tp_asv_get_boolean (properties, "CanSet", &valid);
- if (valid)
- self->priv->can_set_subject = can_set;
-
- subject = tp_asv_get_string (properties, "Subject");
- if (subject != NULL)
- {
- const gchar *actor;
-
- g_free (self->priv->subject);
- self->priv->subject = g_strdup (subject);
-
- /* If the actor is included with this update, use it;
- * otherwise, clear it to avoid showing stale information.
- * Why might it not be included? When you join an IRC channel,
- * you get a pair of messages: first, the current topic; next,
- * who set it, and when. Idle reports these in two separate
- * signals.
- */
- actor = tp_asv_get_string (properties, "Actor");
- g_free (self->priv->subject_actor);
- self->priv->subject_actor = g_strdup (actor);
-
- g_object_notify (G_OBJECT (self), "subject");
- }
-
- /* TODO: track Timestamp. */
-}
-
-static void
-tp_chat_get_all_subject_cb (TpProxy *proxy,
- GHashTable *properties,
- const GError *error,
- gpointer user_data G_GNUC_UNUSED,
- GObject *chat)
-{
- EmpathyTpChat *self = EMPATHY_TP_CHAT (chat);
-
- if (error != NULL)
- {
- DEBUG ("Error fetching subject: %s", error->message);
- return;
- }
-
- self->priv->supports_subject = TRUE;
- update_subject (self, properties);
-}
-
-static void
-update_title (EmpathyTpChat *self,
- GHashTable *properties)
-{
- const gchar *title = tp_asv_get_string (properties, "Title");
-
- if (title != NULL)
- {
- if (tp_str_empty (title))
- title = NULL;
-
- g_free (self->priv->title);
- self->priv->title = g_strdup (title);
- g_object_notify (G_OBJECT (self), "title");
- }
-}
-
-static void
-tp_chat_get_all_room_config_cb (TpProxy *proxy,
- GHashTable *properties,
- const GError *error,
- gpointer user_data G_GNUC_UNUSED,
- GObject *chat)
-{
- EmpathyTpChat *self = EMPATHY_TP_CHAT (chat);
-
- if (error)
- {
- DEBUG ("Error fetching room config: %s", error->message);
- return;
- }
-
- update_title (self, properties);
-}
-
-static void
-tp_chat_dbus_properties_changed_cb (TpProxy *proxy,
- const gchar *interface_name,
- GHashTable *changed,
- const gchar **invalidated,
- gpointer user_data,
- GObject *chat)
-{
- EmpathyTpChat *self = EMPATHY_TP_CHAT (chat);
-
- if (!tp_strdiff (interface_name, TP_IFACE_CHANNEL_INTERFACE_SUBJECT))
- update_subject (self, changed);
-
- if (!tp_strdiff (interface_name, TP_IFACE_CHANNEL_INTERFACE_ROOM_CONFIG))
- update_title (self, changed);
-}
-
-void
-empathy_tp_chat_set_subject (EmpathyTpChat *self,
- const gchar *subject)
-{
- tp_cli_channel_interface_subject_call_set_subject (TP_CHANNEL (self), -1,
- subject, tp_chat_async_cb, "while setting subject", NULL,
- G_OBJECT (self));
-}
-
-const gchar *
-empathy_tp_chat_get_title (EmpathyTpChat *self)
-{
- return self->priv->title;
-}
-
-gboolean
-empathy_tp_chat_supports_subject (EmpathyTpChat *self)
-{
- return self->priv->supports_subject;
-}
-
-gboolean
-empathy_tp_chat_can_set_subject (EmpathyTpChat *self)
-{
- return self->priv->can_set_subject;
-}
-
-const gchar *
-empathy_tp_chat_get_subject (EmpathyTpChat *self)
-{
- return self->priv->subject;
-}
-
-const gchar *
-empathy_tp_chat_get_subject_actor (EmpathyTpChat *self)
-{
- return self->priv->subject_actor;
-}
-
-static void
-tp_chat_dispose (GObject *object)
-{
- EmpathyTpChat *self = EMPATHY_TP_CHAT (object);
-
- tp_clear_object (&self->priv->remote_contact);
- tp_clear_object (&self->priv->user);
-
- g_queue_foreach (self->priv->pending_messages_queue,
- (GFunc) g_object_unref, NULL);
- g_queue_clear (self->priv->pending_messages_queue);
-
- tp_clear_object (&self->priv->ready_result);
-
- if (G_OBJECT_CLASS (empathy_tp_chat_parent_class)->dispose)
- G_OBJECT_CLASS (empathy_tp_chat_parent_class)->dispose (object);
-}
-
-static void
-tp_chat_finalize (GObject *object)
-{
- EmpathyTpChat *self = (EmpathyTpChat *) object;
-
- DEBUG ("Finalize: %p", object);
-
- g_queue_free (self->priv->pending_messages_queue);
- g_hash_table_unref (self->priv->messages_being_sent);
-
- g_free (self->priv->title);
- g_free (self->priv->subject);
- g_free (self->priv->subject_actor);
-
- G_OBJECT_CLASS (empathy_tp_chat_parent_class)->finalize (object);
-}
-
-static void
-check_almost_ready (EmpathyTpChat *self)
-{
- TpChannel *channel = (TpChannel *) self;
-
- if (self->priv->ready_result == NULL)
- return;
-
- if (self->priv->user == NULL)
- return;
-
- if (self->priv->preparing_password)
- return;
-
- /* We need either the members (room) or the remote contact (private chat).
- * If the chat is protected by a password we can't get these information so
- * consider the chat as ready so it can be presented to the user. */
- if (!tp_channel_password_needed (channel) && self->priv->members == NULL &&
- self->priv->remote_contact == NULL)
- return;
-
- g_assert (tp_proxy_is_prepared (self,
- TP_TEXT_CHANNEL_FEATURE_INCOMING_MESSAGES));
-
- tp_g_signal_connect_object (self, "message-received",
- G_CALLBACK (message_received_cb), self, 0);
- tp_g_signal_connect_object (self, "pending-message-removed",
- G_CALLBACK (pending_message_removed_cb), self, 0);
-
- list_pending_messages (self);
-
- tp_g_signal_connect_object (self, "message-sent",
- G_CALLBACK (message_sent_cb), self, 0);
-
- check_ready (self);
-}
-
-static void
-add_members_contact (EmpathyTpChat *self,
- GPtrArray *contacts)
-{
- guint i;
-
- for (i = 0; i < contacts->len; i++)
- {
- EmpathyContact *contact;
-
- contact = empathy_contact_dup_from_tp_contact (g_ptr_array_index (
- contacts, i));
-
- self->priv->members = g_list_prepend (self->priv->members, contact);
-
- g_signal_emit (self, signals[SIG_MEMBERS_CHANGED], 0,
- contact, NULL, 0, NULL, TRUE);
- }
-
- check_almost_ready (self);
-}
-
-static void
-remove_member (EmpathyTpChat *self,
- EmpathyContact *contact)
-{
- GList *l;
-
- for (l = self->priv->members; l; l = l->next)
- {
- EmpathyContact *c = l->data;
-
- if (contact == c)
- {
- self->priv->members = g_list_delete_link (self->priv->members, l);
- g_object_unref (c);
- break;
- }
- }
-}
-
-static void
-contact_renamed (EmpathyTpChat *self,
- TpContact *old_contact,
- TpContact *new_contact,
- TpChannelGroupChangeReason reason,
- const gchar *message)
-{
- EmpathyContact *old = NULL, *new = NULL;
-
- old = empathy_contact_dup_from_tp_contact (old_contact);
- new = empathy_contact_dup_from_tp_contact (new_contact);
-
- self->priv->members = g_list_prepend (self->priv->members, new);
-
- if (old != NULL)
- {
- remove_member (self, old);
-
- g_signal_emit (self, signals[SIG_MEMBER_RENAMED], 0, old, new,
- reason, message);
- g_object_unref (old);
- }
-
- if (self->priv->user == old)
- {
- /* We change our nick */
- tp_clear_object (&self->priv->user);
- self->priv->user = g_object_ref (new);
- g_object_notify (G_OBJECT (self), "self-contact");
- }
-
- check_almost_ready (self);
-}
-
-static void
-tp_chat_group_contacts_changed_cb (TpChannel *channel,
- GPtrArray *added,
- GPtrArray *removed,
- GPtrArray *local_pending,
- GPtrArray *remote_pending,
- TpContact *actor,
- GHashTable *details,
- EmpathyTpChat *self)
-{
- EmpathyContact *actor_contact = NULL;
- guint i;
- TpChannelGroupChangeReason reason;
- const gchar *message;
-
- reason = tp_asv_get_uint32 (details, "change-reason", NULL);
- message = tp_asv_get_string (details, "message");
-
- /* Contact renamed */
- if (reason == TP_CHANNEL_GROUP_CHANGE_REASON_RENAMED)
- {
- /* there can only be a single 'added' and a single 'removed' handle */
- if (removed->len != 1 || added->len != 1)
- {
- g_warning ("RENAMED with %u added, %u removed (expected 1, 1)",
- added->len, removed->len);
- return;
- }
-
- contact_renamed (self, g_ptr_array_index (removed, 0),
- g_ptr_array_index (added, 0), reason, message);
- return;
- }
-
- if (actor != NULL)
- {
- actor_contact = empathy_contact_dup_from_tp_contact (actor);
-
- if (actor_contact == NULL)
- {
- /* FIXME: handle this a tad more gracefully: perhaps
- * the actor was a server op. We could use the
- * contact-ids detail of MembersChangedDetailed.
- */
- DEBUG ("actor %s not a channel member",
- tp_contact_get_identifier (actor));
- }
- }
-
- /* Remove contacts that are not members anymore */
- for (i = 0; i < removed->len; i++)
- {
- TpContact *tp_contact = g_ptr_array_index (removed, i);
- EmpathyContact *contact;
-
- contact = empathy_contact_dup_from_tp_contact (tp_contact);
-
- if (contact != NULL)
- {
- remove_member (self, contact);
-
- g_signal_emit (self, signals[SIG_MEMBERS_CHANGED], 0,
- contact, actor_contact, reason, message, FALSE);
- g_object_unref (contact);
- }
- }
-
- if (added->len > 0)
- {
- add_members_contact (self, added);
- }
-
- if (actor_contact != NULL)
- g_object_unref (actor_contact);
-}
-
-static void
-create_remote_contact (EmpathyTpChat *self,
- TpContact *contact)
-{
- self->priv->remote_contact = empathy_contact_dup_from_tp_contact (contact);
- g_object_notify (G_OBJECT (self), "remote-contact");
-
- check_almost_ready (self);
-}
-
-static void
-create_self_contact (EmpathyTpChat *self,
- TpContact *contact)
-{
- self->priv->user = empathy_contact_dup_from_tp_contact (contact);
- empathy_contact_set_is_user (self->priv->user, TRUE);
- g_object_notify (G_OBJECT (self), "self-contact");
- check_almost_ready (self);
-}
-
-static void
-tp_chat_get_property (GObject *object,
- guint param_id,
- GValue *value,
- GParamSpec *pspec)
-{
- EmpathyTpChat *self = EMPATHY_TP_CHAT (object);
-
- switch (param_id)
- {
- case PROP_SELF_CONTACT:
- g_value_set_object (value, self->priv->user);
- break;
- case PROP_REMOTE_CONTACT:
- g_value_set_object (value, self->priv->remote_contact);
- break;
- case PROP_N_MESSAGES_SENDING:
- g_value_set_uint (value,
- g_hash_table_size (self->priv->messages_being_sent));
- break;
- case PROP_TITLE:
- g_value_set_string (value,
- empathy_tp_chat_get_title (self));
- break;
- case PROP_SUBJECT:
- g_value_set_string (value,
- empathy_tp_chat_get_subject (self));
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, pspec);
- break;
- };
-}
-
-enum {
- FEAT_READY,
- N_FEAT
-};
-
-static const TpProxyFeature *
-tp_chat_list_features (TpProxyClass *cls G_GNUC_UNUSED)
-{
- static TpProxyFeature features[N_FEAT + 1] = { { 0 } };
- static GQuark need[2] = {0, 0};
-
- if (G_LIKELY (features[0].name != 0))
- return features;
-
- features[FEAT_READY].name = EMPATHY_TP_CHAT_FEATURE_READY;
- need[0] = TP_TEXT_CHANNEL_FEATURE_INCOMING_MESSAGES;
- features[FEAT_READY].depends_on = need;
- features[FEAT_READY].prepare_async =
- tp_chat_prepare_ready_async;
-
- /* assert that the terminator at the end is there */
- g_assert (features[N_FEAT].name == 0);
-
- return features;
-}
-
-static void
-empathy_tp_chat_class_init (EmpathyTpChatClass *klass)
-{
- GObjectClass *object_class = G_OBJECT_CLASS (klass);
- TpProxyClass *proxy_class = TP_PROXY_CLASS (klass);
-
- object_class->dispose = tp_chat_dispose;
- object_class->finalize = tp_chat_finalize;
- object_class->get_property = tp_chat_get_property;
-
- proxy_class->list_features = tp_chat_list_features;
-
- /**
- * EmpathyTpChat:self-contact:
- *
- * Not to be confused with TpChannel:group-self-contact.
- */
- g_object_class_install_property (object_class, PROP_SELF_CONTACT,
- g_param_spec_object ("self-contact", "The local contact",
- "The EmpathyContact for the local user on this channel",
- EMPATHY_TYPE_CONTACT,
- G_PARAM_READABLE));
-
- g_object_class_install_property (object_class, PROP_REMOTE_CONTACT,
- g_param_spec_object ("remote-contact", "The remote contact",
- "The remote contact if there is no group iface on the channel",
- EMPATHY_TYPE_CONTACT,
- G_PARAM_READABLE));
-
- g_object_class_install_property (object_class, PROP_N_MESSAGES_SENDING,
- g_param_spec_uint ("n-messages-sending", "Num Messages Sending",
- "The number of messages being sent",
- 0, G_MAXUINT, 0,
- G_PARAM_READABLE));
-
- g_object_class_install_property (object_class, PROP_TITLE,
- g_param_spec_string ("title", "Title",
- "A human-readable name for the room, if any",
- NULL,
- G_PARAM_READABLE |
- G_PARAM_STATIC_STRINGS));
-
- g_object_class_install_property (object_class, PROP_SUBJECT,
- g_param_spec_string ("subject", "Subject",
- "The room's current subject, if any",
- NULL,
- G_PARAM_READABLE |
- G_PARAM_STATIC_STRINGS));
-
- /* Signals */
- signals[MESSAGE_RECEIVED] = g_signal_new ("message-received-empathy",
- G_TYPE_FROM_CLASS (klass),
- G_SIGNAL_RUN_LAST,
- 0,
- NULL, NULL,
- g_cclosure_marshal_generic,
- G_TYPE_NONE,
- 1, EMPATHY_TYPE_MESSAGE);
-
- signals[SEND_ERROR] = g_signal_new ("send-error",
- G_TYPE_FROM_CLASS (klass),
- G_SIGNAL_RUN_LAST,
- 0,
- NULL, NULL,
- g_cclosure_marshal_generic,
- G_TYPE_NONE,
- 3, G_TYPE_STRING, G_TYPE_UINT, G_TYPE_STRING);
-
- signals[MESSAGE_ACKNOWLEDGED] = g_signal_new ("message-acknowledged",
- G_TYPE_FROM_CLASS (klass),
- G_SIGNAL_RUN_LAST,
- 0,
- NULL, NULL,
- g_cclosure_marshal_generic,
- G_TYPE_NONE,
- 1, EMPATHY_TYPE_MESSAGE);
-
- signals[SIG_MEMBER_RENAMED] = g_signal_new ("member-renamed",
- G_OBJECT_CLASS_TYPE (klass),
- G_SIGNAL_RUN_LAST,
- 0, NULL, NULL, NULL,
- G_TYPE_NONE,
- 4, EMPATHY_TYPE_CONTACT, EMPATHY_TYPE_CONTACT,
- G_TYPE_UINT, G_TYPE_STRING);
-
- signals[SIG_MEMBERS_CHANGED] = g_signal_new ("members-changed",
- G_OBJECT_CLASS_TYPE (klass),
- G_SIGNAL_RUN_LAST,
- 0, NULL, NULL, NULL,
- G_TYPE_NONE,
- 5, EMPATHY_TYPE_CONTACT, EMPATHY_TYPE_CONTACT,
- G_TYPE_UINT, G_TYPE_STRING, G_TYPE_BOOLEAN);
-
- g_type_class_add_private (object_class, sizeof (EmpathyTpChatPrivate));
-}
-
-static void
-empathy_tp_chat_init (EmpathyTpChat *self)
-{
- self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, EMPATHY_TYPE_TP_CHAT,
- EmpathyTpChatPrivate);
-
- self->priv->pending_messages_queue = g_queue_new ();
- self->priv->messages_being_sent = g_hash_table_new_full (
- g_str_hash, g_str_equal, g_free, NULL);
-}
-
-EmpathyTpChat *
-empathy_tp_chat_new (TpSimpleClientFactory *factory,
- TpConnection *conn,
- const gchar *object_path,
- const GHashTable *immutable_properties)
-{
- g_return_val_if_fail (TP_IS_CONNECTION (conn), NULL);
- g_return_val_if_fail (immutable_properties != NULL, NULL);
-
- return g_object_new (EMPATHY_TYPE_TP_CHAT,
- "factory", factory,
- "connection", conn,
- "dbus-daemon", tp_proxy_get_dbus_daemon (conn),
- "bus-name", tp_proxy_get_bus_name (conn),
- "object-path", object_path,
- "channel-properties", immutable_properties,
- NULL);
-}
-
-const gchar *
-empathy_tp_chat_get_id (EmpathyTpChat *self)
-{
- const gchar *id;
-
- g_return_val_if_fail (EMPATHY_IS_TP_CHAT (self), NULL);
-
- id = tp_channel_get_identifier ((TpChannel *) self);
- if (!TPAW_STR_EMPTY (id))
- return id;
- else if (self->priv->remote_contact)
- return empathy_contact_get_id (self->priv->remote_contact);
- else
- return NULL;
-
-}
-
-EmpathyContact *
-empathy_tp_chat_get_remote_contact (EmpathyTpChat *self)
-{
- g_return_val_if_fail (EMPATHY_IS_TP_CHAT (self), NULL);
-
- return self->priv->remote_contact;
-}
-
-TpAccount *
-empathy_tp_chat_get_account (EmpathyTpChat *self)
-{
- TpConnection *connection;
-
- g_return_val_if_fail (EMPATHY_IS_TP_CHAT (self), NULL);
-
- connection = tp_channel_get_connection (TP_CHANNEL (self));
-
- return tp_connection_get_account (connection);
-}
-
-void
-empathy_tp_chat_send (EmpathyTpChat *self,
- TpMessage *message)
-{
- gchar *message_body;
-
- g_return_if_fail (EMPATHY_IS_TP_CHAT (self));
- g_return_if_fail (TP_IS_CLIENT_MESSAGE (message));
-
- message_body = tp_message_to_text (message, NULL);
-
- DEBUG ("Sending message: %s", message_body);
-
- tp_text_channel_send_message_async (TP_TEXT_CHANNEL (self),
- message, TP_MESSAGE_SENDING_FLAG_REPORT_DELIVERY,
- message_send_cb, self);
-
- g_free (message_body);
-}
-
-const GList *
-empathy_tp_chat_get_pending_messages (EmpathyTpChat *self)
-{
- g_return_val_if_fail (EMPATHY_IS_TP_CHAT (self), NULL);
-
- return self->priv->pending_messages_queue->head;
-}
-
-void
-empathy_tp_chat_acknowledge_message (EmpathyTpChat *self,
- EmpathyMessage *message)
-{
- TpMessage *tp_msg;
-
- g_return_if_fail (EMPATHY_IS_TP_CHAT (self));
-
- if (!empathy_message_is_incoming (message))
- return;
-
- tp_msg = empathy_message_get_tp_message (message);
- tp_text_channel_ack_message_async (TP_TEXT_CHANNEL (self),
- tp_msg, NULL, NULL);
-}
-
-/**
- * empathy_tp_chat_can_add_contact:
- *
- * Returns: %TRUE if empathy_contact_list_add() will work for this channel.
- * That is if this chat is a 1-to-1 channel that can be upgraded to
- * a MUC using the Conference interface or if the channel is a MUC.
- */
-gboolean
-empathy_tp_chat_can_add_contact (EmpathyTpChat *self)
-{
- g_return_val_if_fail (EMPATHY_IS_TP_CHAT (self), FALSE);
-
- return self->priv->can_upgrade_to_muc ||
- tp_proxy_has_interface_by_id (self,
- TP_IFACE_QUARK_CHANNEL_INTERFACE_GROUP);;
-}
-
-static void
-tp_channel_leave_async_cb (GObject *source_object,
- GAsyncResult *res,
- gpointer user_data)
-{
- GError *error = NULL;
-
- if (!tp_channel_leave_finish (TP_CHANNEL (source_object), res, &error))
- {
- DEBUG ("Could not leave channel properly: (%s); closing the channel",
- error->message);
- g_error_free (error);
- }
-}
-
-void
-empathy_tp_chat_leave (EmpathyTpChat *self,
- const gchar *message)
-{
- TpChannel *channel = (TpChannel *) self;
-
- DEBUG ("Leaving channel %s with message \"%s\"",
- tp_channel_get_identifier (channel), message);
-
- tp_channel_leave_async (channel, TP_CHANNEL_GROUP_CHANGE_REASON_NONE,
- message, tp_channel_leave_async_cb, self);
-}
-
-gboolean
-empathy_tp_chat_is_invited (EmpathyTpChat *self,
- TpContact **inviter)
-{
- TpContact *self_contact;
- TpChannel *channel = TP_CHANNEL (self);
-
- if (!tp_proxy_has_interface (self, TP_IFACE_CHANNEL_INTERFACE_GROUP))
- return FALSE;
-
- self_contact = tp_channel_group_get_self_contact (channel);
- if (self_contact == NULL)
- return FALSE;
-
- return tp_channel_group_get_local_pending_contact_info (channel,
- self_contact, inviter, NULL, NULL);
-}
-
-TpChannelChatState
-empathy_tp_chat_get_chat_state (EmpathyTpChat *self,
- EmpathyContact *contact)
-{
- return tp_text_channel_get_chat_state ((TpTextChannel *) self,
- empathy_contact_get_tp_contact (contact));
-}
-
-EmpathyContact *
-empathy_tp_chat_get_self_contact (EmpathyTpChat *self)
-{
- g_return_val_if_fail (EMPATHY_IS_TP_CHAT (self), NULL);
-
- return self->priv->user;
-}
-
-GQuark
-empathy_tp_chat_get_feature_ready (void)
-{
- return g_quark_from_static_string ("empathy-tp-chat-feature-ready");
-}
-
-static void
-password_feature_prepare_cb (GObject *source,
- GAsyncResult *result,
- gpointer user_data)
-{
- EmpathyTpChat *self = user_data;
- GError *error = NULL;
-
- if (!tp_proxy_prepare_finish (source, result, &error))
- {
- DEBUG ("Failed to prepare Password: %s", error->message);
- g_error_free (error);
- }
-
- self->priv->preparing_password = FALSE;
-
- check_almost_ready (self);
-}
-
-static void
-continue_preparing (EmpathyTpChat *self)
-{
- TpChannel *channel = (TpChannel *) self;
- TpConnection *connection;
- gboolean listen_for_dbus_properties_changed = FALSE;
-
- connection = tp_channel_get_connection (channel);
-
- if (tp_proxy_has_interface_by_id (self,
- TP_IFACE_QUARK_CHANNEL_INTERFACE_PASSWORD))
- {
- /* The password feature can't be a hard dep on our own feature has we
- * depend on it only if the channel implements the
- * Password interface.
- */
- GQuark features[] = { TP_CHANNEL_FEATURE_PASSWORD , 0 };
-
- self->priv->preparing_password = TRUE;
-
- tp_proxy_prepare_async (self, features, password_feature_prepare_cb,
- self);
- }
-
- if (tp_proxy_has_interface_by_id (self,
- TP_IFACE_QUARK_CHANNEL_INTERFACE_GROUP))
- {
- GPtrArray *contacts;
- TpContact *contact;
-
- /* Get self contact from the group's self handle */
- contact = tp_channel_group_get_self_contact (channel);
- create_self_contact (self, contact);
-
- /* Get initial member contacts */
- contacts = tp_channel_group_dup_members_contacts (channel);
- add_members_contact (self, contacts);
- g_ptr_array_unref (contacts);
-
- self->priv->can_upgrade_to_muc = FALSE;
-
- tp_g_signal_connect_object (self, "group-contacts-changed",
- G_CALLBACK (tp_chat_group_contacts_changed_cb), self, 0);
- }
- else
- {
- TpCapabilities *caps;
- GVariant *classes, *class;
- GVariantIter iter;
- TpContact *contact;
-
- /* Get the self contact from the connection's self handle */
- contact = tp_connection_get_self_contact (connection);
- create_self_contact (self, contact);
-
- /* Get the remote contact */
- contact = tp_channel_get_target_contact (channel);
- create_remote_contact (self, contact);
-
- caps = tp_connection_get_capabilities (connection);
- g_assert (caps != NULL);
-
- classes = tp_capabilities_dup_channel_classes_variant (caps);
-
- g_variant_iter_init (&iter, classes);
- while ((class = g_variant_iter_next_value (&iter)))
- {
- GVariant *fixed, *allowed;
- const gchar *chan_type = NULL;
-
- fixed = g_variant_get_child_value (class, 0);
- allowed = g_variant_get_child_value (class, 1);
-
- g_variant_lookup (fixed, TP_PROP_CHANNEL_CHANNEL_TYPE, "&s",
- &chan_type);
- if (!tp_strdiff (chan_type, TP_IFACE_CHANNEL_TYPE_TEXT))
- {
- const gchar **oprops;
-
- oprops = g_variant_get_strv (allowed, NULL);
-
- if (tp_strv_contains (oprops,
- TP_PROP_CHANNEL_INTERFACE_CONFERENCE_INITIAL_CHANNELS))
- {
- self->priv->can_upgrade_to_muc = TRUE;
- }
-
- g_free (oprops);
- }
-
- g_variant_unref (class);
- g_variant_unref (fixed);
- g_variant_unref (allowed);
-
- if (self->priv->can_upgrade_to_muc)
- break;
- }
-
- g_variant_unref (classes);
- }
-
- if (tp_proxy_has_interface_by_id (self,
- TP_IFACE_QUARK_CHANNEL_INTERFACE_SUBJECT))
- {
- tp_cli_dbus_properties_call_get_all (channel, -1,
- TP_IFACE_CHANNEL_INTERFACE_SUBJECT,
- tp_chat_get_all_subject_cb,
- NULL, NULL,
- G_OBJECT (self));
- listen_for_dbus_properties_changed = TRUE;
- }
-
- if (tp_proxy_has_interface_by_id (self,
- TP_IFACE_QUARK_CHANNEL_INTERFACE_ROOM_CONFIG))
- {
- tp_cli_dbus_properties_call_get_all (channel, -1,
- TP_IFACE_CHANNEL_INTERFACE_ROOM_CONFIG,
- tp_chat_get_all_room_config_cb,
- NULL, NULL,
- G_OBJECT (self));
- listen_for_dbus_properties_changed = TRUE;
- }
-
- if (listen_for_dbus_properties_changed)
- {
- tp_cli_dbus_properties_connect_to_properties_changed (channel,
- tp_chat_dbus_properties_changed_cb,
- NULL, NULL,
- G_OBJECT (self), NULL);
- }
-}
-
-static void
-conn_connected_cb (GObject *source,
- GAsyncResult *result,
- gpointer user_data)
-{
- EmpathyTpChat *self = user_data;
- GError *error = NULL;
-
- if (!tp_proxy_prepare_finish (source, result, &error))
- {
- DEBUG ("Failed to prepare Connected: %s", error->message);
- g_simple_async_result_take_error (self->priv->ready_result, error);
- g_simple_async_result_complete (self->priv->ready_result);
- tp_clear_object (&self->priv->ready_result);
- return;
- }
-
- continue_preparing (self);
-}
-
-static void
-tp_chat_prepare_ready_async (TpProxy *proxy,
- const TpProxyFeature *feature,
- GAsyncReadyCallback callback,
- gpointer user_data)
-{
- EmpathyTpChat *self = (EmpathyTpChat *) proxy;
- TpChannel *channel = (TpChannel *) proxy;
- TpConnection *connection;
- GQuark features[] = { TP_CONNECTION_FEATURE_CONNECTED, 0 };
-
- g_assert (self->priv->ready_result == NULL);
-
- self->priv->ready_result = g_simple_async_result_new (G_OBJECT (self),
- callback, user_data, tp_chat_prepare_ready_async);
-
- connection = tp_channel_get_connection (channel);
-
- /* First we have to make sure that TP_CONNECTION_FEATURE_CONNECTED is
- * prepared as we rely on TpConnection::self-contact
- * in continue_preparing().
- *
- * It would be nice if tp-glib could do this for us: fdo#59126 */
- tp_proxy_prepare_async (connection, features, conn_connected_cb, proxy);
-}
diff --git a/libempathy/empathy-tp-chat.h b/libempathy/empathy-tp-chat.h
deleted file mode 100644
index 20fb4e1e..00000000
--- a/libempathy/empathy-tp-chat.h
+++ /dev/null
@@ -1,110 +0,0 @@
-/*
- * Copyright (C) 2007-2012 Collabora Ltd.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * 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/telepathy-glib.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;
-typedef struct _EmpathyTpChatPrivate EmpathyTpChatPrivate;
-
-struct _EmpathyTpChat
-{
- TpTextChannel parent;
- EmpathyTpChatPrivate *priv;
-};
-
-struct _EmpathyTpChatClass
-{
- TpTextChannelClass parent_class;
-};
-
-typedef enum {
- EMPATHY_DELIVERY_STATUS_NONE,
- EMPATHY_DELIVERY_STATUS_SENDING,
- EMPATHY_DELIVERY_STATUS_ACCEPTED
-} EmpathyDeliveryStatus;
-
-#define EMPATHY_TP_CHAT_FEATURE_READY empathy_tp_chat_get_feature_ready ()
-GQuark empathy_tp_chat_get_feature_ready (void) G_GNUC_CONST;
-
-GType empathy_tp_chat_get_type (void) G_GNUC_CONST;
-
-EmpathyTpChat * empathy_tp_chat_new (TpSimpleClientFactory *factory,
- TpConnection *connection,
- const gchar *object_path,
- const GHashTable *immutable_properties);
-
-const gchar * empathy_tp_chat_get_id (EmpathyTpChat *chat);
-EmpathyContact * empathy_tp_chat_get_remote_contact (EmpathyTpChat *chat);
-TpAccount * empathy_tp_chat_get_account (EmpathyTpChat *chat);
-void empathy_tp_chat_send (EmpathyTpChat *chat,
- TpMessage *message);
-
-const gchar * empathy_tp_chat_get_title (EmpathyTpChat *self);
-
-gboolean empathy_tp_chat_supports_subject (EmpathyTpChat *self);
-const gchar * empathy_tp_chat_get_subject (EmpathyTpChat *self);
-const gchar * empathy_tp_chat_get_subject_actor (EmpathyTpChat *self);
-gboolean empathy_tp_chat_can_set_subject (EmpathyTpChat *self);
-void empathy_tp_chat_set_subject (EmpathyTpChat *self,
- const gchar *subject);
-
-/* Returns a read-only list of pending messages (should be a copy maybe ?) */
-const GList * empathy_tp_chat_get_pending_messages (EmpathyTpChat *chat);
-void empathy_tp_chat_acknowledge_message (EmpathyTpChat *chat,
- EmpathyMessage *message);
-
-gboolean empathy_tp_chat_can_add_contact (EmpathyTpChat *self);
-
-void empathy_tp_chat_leave (EmpathyTpChat *chat,
- const gchar *message);
-
-gboolean empathy_tp_chat_is_invited (EmpathyTpChat *chat,
- TpContact **inviter);
-TpChannelChatState empathy_tp_chat_get_chat_state (EmpathyTpChat *chat,
- EmpathyContact *contact);
-
-EmpathyContact * empathy_tp_chat_get_self_contact (EmpathyTpChat *self);
-
-void empathy_tp_chat_add (EmpathyTpChat *self,
- EmpathyContact *contact,
- const gchar *message);
-
-GList * empathy_tp_chat_get_members (EmpathyTpChat *self);
-
-G_END_DECLS
-
-#endif /* __EMPATHY_TP_CHAT_H__ */
diff --git a/libempathy/empathy-types.h b/libempathy/empathy-types.h
deleted file mode 100644
index 5eea3b1e..00000000
--- a/libempathy/empathy-types.h
+++ /dev/null
@@ -1,27 +0,0 @@
-/* -*- Mode: C; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2; -*- */
-/*
- * 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: Cosimo Cecchi <cosimo.cecchi@collabora.co.uk>
- */
-
-#ifndef __EMPATHY_TYPES_H__
-#define __EMPATHY_TYPES_H__
-
-typedef struct _EmpathyContactList EmpathyContactList;
-
-#endif /* __EMPATHY_TYPES_H__ */
diff --git a/libempathy/empathy-uoa-auth-handler.c b/libempathy/empathy-uoa-auth-handler.c
deleted file mode 100644
index d5a6577c..00000000
--- a/libempathy/empathy-uoa-auth-handler.c
+++ /dev/null
@@ -1,398 +0,0 @@
-/*
- * empathy-auth-uoa.c - Source for Uoa SASL authentication
- * Copyright (C) 2012 Collabora Ltd.
- * @author Xavier Claessens <xavier.claessens@collabora.co.uk>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-#include "config.h"
-#include "empathy-uoa-auth-handler.h"
-
-#include <libaccounts-glib/ag-account.h>
-#include <libaccounts-glib/ag-account-service.h>
-#include <libaccounts-glib/ag-auth-data.h>
-#include <libaccounts-glib/ag-manager.h>
-#include <libaccounts-glib/ag-service.h>
-
-#include <libsignon-glib/signon-identity.h>
-#include <libsignon-glib/signon-auth-session.h>
-
-#include <tp-account-widgets/tpaw-keyring.h>
-#include <tp-account-widgets/tpaw-uoa-utils.h>
-
-#include "empathy-utils.h"
-#include "empathy-sasl-mechanisms.h"
-
-#define DEBUG_FLAG EMPATHY_DEBUG_SASL
-#include "empathy-debug.h"
-
-struct _EmpathyUoaAuthHandlerPriv
-{
- AgManager *manager;
-};
-
-G_DEFINE_TYPE (EmpathyUoaAuthHandler, empathy_uoa_auth_handler, G_TYPE_OBJECT);
-
-static void
-empathy_uoa_auth_handler_init (EmpathyUoaAuthHandler *self)
-{
- self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self,
- EMPATHY_TYPE_UOA_AUTH_HANDLER, EmpathyUoaAuthHandlerPriv);
-
- self->priv->manager = empathy_uoa_manager_dup ();
-}
-
-static void
-empathy_uoa_auth_handler_dispose (GObject *object)
-{
- EmpathyUoaAuthHandler *self = (EmpathyUoaAuthHandler *) object;
-
- tp_clear_object (&self->priv->manager);
-
- G_OBJECT_CLASS (empathy_uoa_auth_handler_parent_class)->dispose (object);
-}
-
-static void
-empathy_uoa_auth_handler_class_init (EmpathyUoaAuthHandlerClass *klass)
-{
- GObjectClass *oclass = G_OBJECT_CLASS (klass);
-
- oclass->dispose = empathy_uoa_auth_handler_dispose;
-
- g_type_class_add_private (klass, sizeof (EmpathyUoaAuthHandlerPriv));
-}
-
-EmpathyUoaAuthHandler *
-empathy_uoa_auth_handler_new (void)
-{
- return g_object_new (EMPATHY_TYPE_UOA_AUTH_HANDLER, NULL);
-}
-
-typedef struct
-{
- TpChannel *channel;
- AgAccountService *service;
- AgAuthData *auth_data;
- SignonIdentity *identity;
- SignonAuthSession *session;
-
- gchar *username;
-} AuthContext;
-
-static AuthContext *
-auth_context_new (TpChannel *channel,
- AgAccountService *service)
-{
- AuthContext *ctx;
- guint cred_id;
-
- ctx = g_slice_new0 (AuthContext);
- ctx->channel = g_object_ref (channel);
- ctx->service = g_object_ref (service);
-
- ctx->auth_data = ag_account_service_get_auth_data (service);
- if (ctx->auth_data == NULL)
- goto out;
-
- cred_id = ag_auth_data_get_credentials_id (ctx->auth_data);
- if (cred_id == 0)
- goto out;
-
- ctx->identity = signon_identity_new_from_db (cred_id);
- if (ctx->identity == NULL)
- goto out;
-
- ctx->session = signon_identity_create_session (ctx->identity,
- ag_auth_data_get_method (ctx->auth_data), NULL);
- if (ctx->session == NULL)
- goto out;
-
-out:
- return ctx;
-}
-
-static void
-auth_context_free (AuthContext *ctx)
-{
- g_clear_object (&ctx->channel);
- g_clear_object (&ctx->service);
- tp_clear_pointer (&ctx->auth_data, ag_auth_data_unref);
- g_clear_object (&ctx->session);
- g_clear_object (&ctx->identity);
- g_free (ctx->username);
-
- g_slice_free (AuthContext, ctx);
-}
-
-static void
-auth_context_done (AuthContext *ctx)
-{
- tp_channel_close_async (ctx->channel, NULL, NULL);
- auth_context_free (ctx);
-}
-
-static void
-request_password_session_process_cb (SignonAuthSession *session,
- GHashTable *session_data,
- const GError *error,
- gpointer user_data)
-{
- AuthContext *ctx = user_data;
-
- if (error != NULL)
- {
- DEBUG ("Error processing the session to request user's attention: %s",
- error->message);
- }
-
- auth_context_done (ctx);
-}
-
-static void
-request_password (AuthContext *ctx)
-{
- GHashTable *extra_params;
-
- DEBUG ("Invalid credentials, request user action");
-
- /* Inform SSO that the access token (or password) didn't work and it should
- * ask user to re-grant access (or retype password). */
- extra_params = tp_asv_new (
- SIGNON_SESSION_DATA_UI_POLICY, G_TYPE_INT,
- SIGNON_POLICY_REQUEST_PASSWORD,
- NULL);
-
- ag_auth_data_insert_parameters (ctx->auth_data, extra_params);
-
- signon_auth_session_process (ctx->session,
- ag_auth_data_get_parameters (ctx->auth_data),
- ag_auth_data_get_mechanism (ctx->auth_data),
- request_password_session_process_cb, ctx);
-
- g_hash_table_unref (extra_params);
-}
-
-static void
-auth_cb (GObject *source,
- GAsyncResult *result,
- gpointer user_data)
-{
- TpChannel *channel = (TpChannel *) source;
- AuthContext *ctx = user_data;
- GError *error = NULL;
-
- if (!empathy_sasl_auth_finish (channel, result, &error))
- {
- DEBUG ("SASL Mechanism error: %s", error->message);
- g_clear_error (&error);
-
- request_password (ctx);
- }
- else
- {
- DEBUG ("Auth on %s suceeded", tp_proxy_get_object_path (channel));
- auth_context_done (ctx);
- }
-}
-
-static void
-session_process_cb (SignonAuthSession *session,
- GHashTable *session_data,
- const GError *error,
- gpointer user_data)
-{
- AuthContext *ctx = user_data;
- const gchar *access_token;
- const gchar *client_id;
-
- if (error != NULL)
- {
- DEBUG ("Error processing the session: %s", error->message);
- auth_context_done (ctx);
- return;
- }
-
- access_token = tp_asv_get_string (session_data, "AccessToken");
- client_id = tp_asv_get_string (ag_auth_data_get_parameters (ctx->auth_data),
- "ClientId");
-
- switch (empathy_sasl_channel_select_mechanism (ctx->channel))
- {
- case EMPATHY_SASL_MECHANISM_FACEBOOK:
- empathy_sasl_auth_facebook_async (ctx->channel,
- client_id, access_token,
- auth_cb, ctx);
- break;
-
- case EMPATHY_SASL_MECHANISM_WLM:
- empathy_sasl_auth_wlm_async (ctx->channel,
- access_token,
- auth_cb, ctx);
- break;
-
- case EMPATHY_SASL_MECHANISM_GOOGLE:
- empathy_sasl_auth_google_async (ctx->channel,
- ctx->username, access_token,
- auth_cb, ctx);
- break;
-
- case EMPATHY_SASL_MECHANISM_PASSWORD:
- empathy_sasl_auth_password_async (ctx->channel,
- tp_asv_get_string (session_data, "Secret"),
- auth_cb, ctx);
- break;
-
- default:
- g_assert_not_reached ();
- }
-}
-
-static void
-identity_query_info_cb (SignonIdentity *identity,
- const SignonIdentityInfo *info,
- const GError *error,
- gpointer user_data)
-{
- AuthContext *ctx = user_data;
-
- if (error != NULL)
- {
- DEBUG ("Error querying info from identity: %s", error->message);
- auth_context_done (ctx);
- return;
- }
-
- ctx->username = g_strdup (signon_identity_info_get_username (info));
-
- signon_auth_session_process (ctx->session,
- ag_auth_data_get_parameters (ctx->auth_data),
- ag_auth_data_get_mechanism (ctx->auth_data),
- session_process_cb,
- ctx);
-}
-
-static void
-set_account_password_cb (GObject *source,
- GAsyncResult *result,
- gpointer user_data)
-{
- TpAccount *tp_account = (TpAccount *) source;
- AuthContext *ctx = user_data;
- AuthContext *new_ctx;
- GError *error = NULL;
-
- if (!tpaw_keyring_set_account_password_finish (tp_account, result, &error))
- {
- DEBUG ("Failed to set empty password on UOA account: %s", error->message);
- auth_context_done (ctx);
- return;
- }
-
- new_ctx = auth_context_new (ctx->channel, ctx->service);
- auth_context_free (ctx);
-
- if (new_ctx->session != NULL)
- {
- /* The trick worked! */
- request_password (new_ctx);
- return;
- }
-
- DEBUG ("Still can't get a signon session, even after setting empty pwd");
- auth_context_done (new_ctx);
-}
-
-void
-empathy_uoa_auth_handler_start (EmpathyUoaAuthHandler *self,
- TpChannel *channel,
- TpAccount *tp_account)
-{
- const GValue *id_value;
- AgAccountId id;
- AgAccount *account;
- GList *l = NULL;
- AgAccountService *service;
- AuthContext *ctx;
-
- g_return_if_fail (TP_IS_CHANNEL (channel));
- g_return_if_fail (TP_IS_ACCOUNT (tp_account));
- g_return_if_fail (empathy_uoa_auth_handler_supports (self, channel,
- tp_account));
-
- DEBUG ("Start UOA auth for account: %s",
- tp_proxy_get_object_path (tp_account));
-
- id_value = tp_account_get_storage_identifier (tp_account);
- id = g_value_get_uint (id_value);
-
- account = ag_manager_get_account (self->priv->manager, id);
- if (account != NULL)
- l = ag_account_list_services_by_type (account, EMPATHY_UOA_SERVICE_TYPE);
- if (l == NULL)
- {
- DEBUG ("Couldn't find IM service for AgAccountId %u", id);
- g_object_unref (account);
- tp_channel_close_async (channel, NULL, NULL);
- return;
- }
-
- /* Assume there is only one IM service */
- service = ag_account_service_new (account, l->data);
- ag_service_list_free (l);
- g_object_unref (account);
-
- ctx = auth_context_new (channel, service);
- if (ctx->session == NULL)
- {
- /* This (usually?) means we never stored credentials for this account.
- * To ask user to type his password SSO needs a SignonIdentity bound to
- * our account. Let's store an empty password. */
- DEBUG ("Couldn't create a signon session");
- tpaw_keyring_set_account_password_async (tp_account, "", FALSE,
- set_account_password_cb, ctx);
- }
- else
- {
- /* All is fine! Query UOA for more info */
- signon_identity_query_info (ctx->identity,
- identity_query_info_cb, ctx);
- }
-
- g_object_unref (service);
-}
-
-gboolean
-empathy_uoa_auth_handler_supports (EmpathyUoaAuthHandler *self,
- TpChannel *channel,
- TpAccount *account)
-{
- const gchar *provider;
- EmpathySaslMechanism mech;
-
- g_return_val_if_fail (TP_IS_CHANNEL (channel), FALSE);
- g_return_val_if_fail (TP_IS_ACCOUNT (account), FALSE);
-
- provider = tp_account_get_storage_provider (account);
-
- if (tp_strdiff (provider, EMPATHY_UOA_PROVIDER))
- return FALSE;
-
- mech = empathy_sasl_channel_select_mechanism (channel);
- return mech == EMPATHY_SASL_MECHANISM_FACEBOOK ||
- mech == EMPATHY_SASL_MECHANISM_WLM ||
- mech == EMPATHY_SASL_MECHANISM_GOOGLE ||
- mech == EMPATHY_SASL_MECHANISM_PASSWORD;
-}
diff --git a/libempathy/empathy-uoa-auth-handler.h b/libempathy/empathy-uoa-auth-handler.h
deleted file mode 100644
index 2c61a760..00000000
--- a/libempathy/empathy-uoa-auth-handler.h
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
- * empathy-auth-uoa.h - Header for Uoa SASL authentication
- * Copyright (C) 2012 Collabora Ltd.
- * @author Xavier Claessens <xavier.claessens@collabora.co.uk>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-#ifndef __EMPATHY_UOA_AUTH_HANDLER_H__
-#define __EMPATHY_UOA_AUTH_HANDLER_H__
-
-#include <telepathy-glib/telepathy-glib.h>
-
-G_BEGIN_DECLS
-
-typedef struct _EmpathyUoaAuthHandler EmpathyUoaAuthHandler;
-typedef struct _EmpathyUoaAuthHandlerClass EmpathyUoaAuthHandlerClass;
-typedef struct _EmpathyUoaAuthHandlerPriv EmpathyUoaAuthHandlerPriv;
-
-struct _EmpathyUoaAuthHandlerClass {
- GObjectClass parent_class;
-};
-
-struct _EmpathyUoaAuthHandler {
- GObject parent;
- EmpathyUoaAuthHandlerPriv *priv;
-};
-
-GType empathy_uoa_auth_handler_get_type (void);
-
-/* TYPE MACROS */
-#define EMPATHY_TYPE_UOA_AUTH_HANDLER \
- (empathy_uoa_auth_handler_get_type ())
-#define EMPATHY_UOA_AUTH_HANDLER(obj) \
- (G_TYPE_CHECK_INSTANCE_CAST((obj), EMPATHY_TYPE_UOA_AUTH_HANDLER, \
- EmpathyUoaAuthHandler))
-#define EMPATHY_UOA_AUTH_HANDLER_CLASS(klass) \
- (G_TYPE_CHECK_CLASS_CAST((klass), EMPATHY_TYPE_UOA_AUTH_HANDLER, \
- EmpathyUoaAuthHandlerClass))
-#define EMPATHY_IS_UOA_AUTH_HANDLER(obj) \
- (G_TYPE_CHECK_INSTANCE_TYPE((obj), EMPATHY_TYPE_UOA_AUTH_HANDLER))
-#define EMPATHY_IS_UOA_AUTH_HANDLER_CLASS(klass) \
- (G_TYPE_CHECK_CLASS_TYPE((klass), EMPATHY_TYPE_UOA_AUTH_HANDLER))
-#define EMPATHY_UOA_AUTH_HANDLER_GET_CLASS(obj) \
- (G_TYPE_INSTANCE_GET_CLASS ((obj), EMPATHY_TYPE_UOA_AUTH_HANDLER, \
- EmpathyUoaAuthHandlerClass))
-
-EmpathyUoaAuthHandler *empathy_uoa_auth_handler_new (void);
-
-void empathy_uoa_auth_handler_start (EmpathyUoaAuthHandler *self,
- TpChannel *channel,
- TpAccount *account);
-
-gboolean empathy_uoa_auth_handler_supports (EmpathyUoaAuthHandler *self,
- TpChannel *channel,
- TpAccount *account);
-
-G_END_DECLS
-
-#endif /* #ifndef __EMPATHY_UOA_AUTH_HANDLER_H__*/
diff --git a/libempathy/empathy-utils.c b/libempathy/empathy-utils.c
deleted file mode 100644
index ba39f49b..00000000
--- a/libempathy/empathy-utils.c
+++ /dev/null
@@ -1,1062 +0,0 @@
-/*
- * Copyright (C) 2003-2007 Imendio AB
- * Copyright (C) 2007-2011 Collabora Ltd.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301 USA
- *
- * Authors: Richard Hult <richard@imendio.com>
- * Martyn Russell <martyn@imendio.com>
- * Xavier Claessens <xclaesse@gmail.com>
- *
- * Some snippets are taken from GnuTLS 2.8.6, which is distributed under the
- * same GNU Lesser General Public License 2.1 (or later) version. See
- * empathy_get_x509_certified_hostname ().
- */
-
-#include "config.h"
-#include "empathy-utils.h"
-
-#include <glib/gi18n-lib.h>
-#include <dbus/dbus-protocol.h>
-#include <math.h>
-
-#include "empathy-client-factory.h"
-#include "extensions.h"
-
-#include <math.h>
-
-#define DEBUG_FLAG EMPATHY_DEBUG_OTHER
-#include "empathy-debug.h"
-
-/* Translation between presence types and string */
-static struct {
- const gchar *name;
- TpConnectionPresenceType type;
-} presence_types[] = {
- { "available", TP_CONNECTION_PRESENCE_TYPE_AVAILABLE },
- { "busy", TP_CONNECTION_PRESENCE_TYPE_BUSY },
- { "away", TP_CONNECTION_PRESENCE_TYPE_AWAY },
- { "ext_away", TP_CONNECTION_PRESENCE_TYPE_EXTENDED_AWAY },
- { "hidden", TP_CONNECTION_PRESENCE_TYPE_HIDDEN },
- { "offline", TP_CONNECTION_PRESENCE_TYPE_OFFLINE },
- { "unset", TP_CONNECTION_PRESENCE_TYPE_UNSET },
- { "unknown", TP_CONNECTION_PRESENCE_TYPE_UNKNOWN },
- { "error", TP_CONNECTION_PRESENCE_TYPE_ERROR },
- /* alternative names */
- { "dnd", TP_CONNECTION_PRESENCE_TYPE_BUSY },
- { "brb", TP_CONNECTION_PRESENCE_TYPE_AWAY },
- { "xa", TP_CONNECTION_PRESENCE_TYPE_EXTENDED_AWAY },
- { NULL, },
-};
-
-static gboolean
-properties_contains (gchar **list,
- gint length,
- const gchar *property);
-
-static gboolean
-check_writeable_property (TpConnection *connection,
- FolksIndividual *individual,
- gchar *property);
-
-void
-empathy_init (void)
-{
- static gboolean initialized = FALSE;
- TpAccountManager *am;
- EmpathyClientFactory *factory;
-
- if (initialized)
- return;
-
- g_type_init ();
-
- /* Setup gettext */
- bindtextdomain (GETTEXT_PACKAGE, LOCALEDIR);
- bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8");
-
- /* Setup debug output for empathy and telepathy-glib */
- 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"));
-
- emp_cli_init ();
-
- initialized = TRUE;
-
- factory = empathy_client_factory_dup ();
- am = tp_account_manager_new_with_factory (TP_SIMPLE_CLIENT_FACTORY (factory));
- tp_account_manager_set_default (am);
-
- g_object_unref (factory);
- g_object_unref (am);
-}
-
-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 ((const gchar *) 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 != NULL)
- 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, (const xmlChar *) prop_name))
- continue;
-
- prop = xmlGetProp (l, (const xmlChar *) prop_name);
- if (prop && strcmp ((const gchar *) prop, prop_value) == 0)
- found = l;
-
- xmlFree (prop);
- }
-
- return found;
-}
-
-const gchar *
-empathy_presence_get_default_message (TpConnectionPresenceType presence)
-{
- switch (presence)
- {
- case TP_CONNECTION_PRESENCE_TYPE_AVAILABLE:
- return _("Available");
- case TP_CONNECTION_PRESENCE_TYPE_BUSY:
- return _("Busy");
- case TP_CONNECTION_PRESENCE_TYPE_AWAY:
- case TP_CONNECTION_PRESENCE_TYPE_EXTENDED_AWAY:
- return _("Away");
- case TP_CONNECTION_PRESENCE_TYPE_HIDDEN:
- return _("Invisible");
- case TP_CONNECTION_PRESENCE_TYPE_OFFLINE:
- return _("Offline");
- case TP_CONNECTION_PRESENCE_TYPE_UNKNOWN:
- /* translators: presence type is unknown */
- return C_("presence", "Unknown");
- case TP_CONNECTION_PRESENCE_TYPE_UNSET:
- case TP_CONNECTION_PRESENCE_TYPE_ERROR:
- default:
- return NULL;
- }
-
- return NULL;
-}
-
-const gchar *
-empathy_presence_to_str (TpConnectionPresenceType presence)
-{
- int i;
-
- for (i = 0 ; presence_types[i].name != NULL; i++)
- if (presence == presence_types[i].type)
- return presence_types[i].name;
-
- return NULL;
-}
-
-TpConnectionPresenceType
-empathy_presence_from_str (const gchar *str)
-{
- int i;
-
- for (i = 0 ; presence_types[i].name != NULL; i++)
- if (!tp_strdiff (str, presence_types[i].name))
- return presence_types[i].type;
-
- return TP_CONNECTION_PRESENCE_TYPE_UNSET;
-}
-
-static const gchar *
-empathy_status_reason_get_default_message (TpConnectionStatusReason reason)
-{
- switch (reason)
- {
- case TP_CONNECTION_STATUS_REASON_NONE_SPECIFIED:
- return _("No reason specified");
- case TP_CONNECTION_STATUS_REASON_REQUESTED:
- return _("Status is set to offline");
- case TP_CONNECTION_STATUS_REASON_NETWORK_ERROR:
- return _("Network error");
- case TP_CONNECTION_STATUS_REASON_AUTHENTICATION_FAILED:
- return _("Authentication failed");
- case TP_CONNECTION_STATUS_REASON_ENCRYPTION_ERROR:
- return _("Encryption error");
- case TP_CONNECTION_STATUS_REASON_NAME_IN_USE:
- return _("Name in use");
- case TP_CONNECTION_STATUS_REASON_CERT_NOT_PROVIDED:
- return _("Certificate not provided");
- case TP_CONNECTION_STATUS_REASON_CERT_UNTRUSTED:
- return _("Certificate untrusted");
- case TP_CONNECTION_STATUS_REASON_CERT_EXPIRED:
- return _("Certificate expired");
- case TP_CONNECTION_STATUS_REASON_CERT_NOT_ACTIVATED:
- return _("Certificate not activated");
- case TP_CONNECTION_STATUS_REASON_CERT_HOSTNAME_MISMATCH:
- return _("Certificate hostname mismatch");
- case TP_CONNECTION_STATUS_REASON_CERT_FINGERPRINT_MISMATCH:
- return _("Certificate fingerprint mismatch");
- case TP_CONNECTION_STATUS_REASON_CERT_SELF_SIGNED:
- return _("Certificate self-signed");
- case TP_CONNECTION_STATUS_REASON_CERT_OTHER_ERROR:
- return _("Certificate error");
- default:
- return _("Unknown reason");
- }
-}
-
-static GHashTable *
-create_errors_to_message_hash (void)
-{
- GHashTable *errors;
-
- errors = g_hash_table_new (g_str_hash, g_str_equal);
- g_hash_table_insert (errors, TP_ERROR_STR_NETWORK_ERROR, _("Network error"));
- g_hash_table_insert (errors, TP_ERROR_STR_AUTHENTICATION_FAILED,
- _("Authentication failed"));
- g_hash_table_insert (errors, TP_ERROR_STR_ENCRYPTION_ERROR,
- _("Encryption error"));
- g_hash_table_insert (errors, TP_ERROR_STR_CERT_NOT_PROVIDED,
- _("Certificate not provided"));
- g_hash_table_insert (errors, TP_ERROR_STR_CERT_UNTRUSTED,
- _("Certificate untrusted"));
- g_hash_table_insert (errors, TP_ERROR_STR_CERT_EXPIRED,
- _("Certificate expired"));
- g_hash_table_insert (errors, TP_ERROR_STR_CERT_NOT_ACTIVATED,
- _("Certificate not activated"));
- g_hash_table_insert (errors, TP_ERROR_STR_CERT_HOSTNAME_MISMATCH,
- _("Certificate hostname mismatch"));
- g_hash_table_insert (errors, TP_ERROR_STR_CERT_FINGERPRINT_MISMATCH,
- _("Certificate fingerprint mismatch"));
- g_hash_table_insert (errors, TP_ERROR_STR_CERT_SELF_SIGNED,
- _("Certificate self-signed"));
- g_hash_table_insert (errors, TP_ERROR_STR_CANCELLED,
- _("Status is set to offline"));
- g_hash_table_insert (errors, TP_ERROR_STR_ENCRYPTION_NOT_AVAILABLE,
- _("Encryption is not available"));
- g_hash_table_insert (errors, TP_ERROR_STR_CERT_INVALID,
- _("Certificate is invalid"));
- g_hash_table_insert (errors, TP_ERROR_STR_CONNECTION_REFUSED,
- _("Connection has been refused"));
- g_hash_table_insert (errors, TP_ERROR_STR_CONNECTION_FAILED,
- _("Connection can't be established"));
- g_hash_table_insert (errors, TP_ERROR_STR_CONNECTION_LOST,
- _("Connection has been lost"));
- g_hash_table_insert (errors, TP_ERROR_STR_ALREADY_CONNECTED,
- _("This account is already connected to the server"));
- g_hash_table_insert (errors, TP_ERROR_STR_CONNECTION_REPLACED,
- _("Connection has been replaced by a new connection using the "
- "same resource"));
- g_hash_table_insert (errors, TP_ERROR_STR_REGISTRATION_EXISTS,
- _("The account already exists on the server"));
- g_hash_table_insert (errors, TP_ERROR_STR_SERVICE_BUSY,
- _("Server is currently too busy to handle the connection"));
- g_hash_table_insert (errors, TP_ERROR_STR_CERT_REVOKED,
- _("Certificate has been revoked"));
- g_hash_table_insert (errors, TP_ERROR_STR_CERT_INSECURE,
- _("Certificate uses an insecure cipher algorithm or is "
- "cryptographically weak"));
- g_hash_table_insert (errors, TP_ERROR_STR_CERT_LIMIT_EXCEEDED,
- _("The length of the server certificate, or the depth of the "
- "server certificate chain, exceed the limits imposed by the "
- "cryptography library"));
- g_hash_table_insert (errors, TP_ERROR_STR_SOFTWARE_UPGRADE_REQUIRED,
- _("Your software is too old"));
- g_hash_table_insert (errors, DBUS_ERROR_NO_REPLY,
- _("Internal error"));
-
- return errors;
-}
-
-static const gchar *
-empathy_dbus_error_name_get_default_message (const gchar *error)
-{
- static GHashTable *errors_to_message = NULL;
-
- if (error == NULL)
- return NULL;
-
- if (G_UNLIKELY (errors_to_message == NULL))
- errors_to_message = create_errors_to_message_hash ();
-
- return g_hash_table_lookup (errors_to_message, error);
-}
-
-const gchar *
-empathy_account_get_error_message (TpAccount *account,
- gboolean *user_requested)
-{
- const gchar *dbus_error;
- const gchar *message;
- const GHashTable *details = NULL;
- TpConnectionStatusReason reason;
-
- dbus_error = tp_account_get_detailed_error (account, &details);
-
- if (user_requested != NULL)
- {
- if (tp_asv_get_boolean (details, "user-requested", NULL))
- *user_requested = TRUE;
- else
- *user_requested = FALSE;
- }
-
- message = empathy_dbus_error_name_get_default_message (dbus_error);
- if (message != NULL)
- return message;
-
- tp_account_get_connection_status (account, &reason);
-
- DEBUG ("Don't understand error '%s'; fallback to the status reason (%u)",
- dbus_error, reason);
-
- return empathy_status_reason_get_default_message (reason);
-}
-
-gchar *
-empathy_file_lookup (const gchar *filename, const gchar *subdir)
-{
- gchar *path;
-
- if (subdir == NULL)
- 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;
-}
-
-gint
-empathy_uint_compare (gconstpointer a,
- gconstpointer b)
-{
- return *(guint *) a - *(guint *) b;
-}
-
-GType
-empathy_type_dbus_ao (void)
-{
- static GType t = 0;
-
- if (G_UNLIKELY (t == 0))
- t = dbus_g_type_get_collection ("GPtrArray", DBUS_TYPE_G_OBJECT_PATH);
-
- return t;
-}
-
-gboolean
-empathy_account_manager_get_accounts_connected (gboolean *connecting)
-{
- TpAccountManager *manager;
- GList *accounts, *l;
- gboolean out_connecting = FALSE;
- gboolean out_connected = FALSE;
-
- manager = tp_account_manager_dup ();
-
- if (G_UNLIKELY (!tp_account_manager_is_prepared (manager,
- TP_ACCOUNT_MANAGER_FEATURE_CORE)))
- g_critical (G_STRLOC ": %s called before AccountManager ready", G_STRFUNC);
-
- accounts = tp_account_manager_dup_valid_accounts (manager);
-
- for (l = accounts; l != NULL; l = l->next)
- {
- TpConnectionStatus s = tp_account_get_connection_status (
- TP_ACCOUNT (l->data), NULL);
-
- if (s == TP_CONNECTION_STATUS_CONNECTING)
- out_connecting = TRUE;
- else if (s == TP_CONNECTION_STATUS_CONNECTED)
- out_connected = TRUE;
-
- if (out_connecting && out_connected)
- break;
- }
-
- g_list_free_full (accounts, g_object_unref);
- g_object_unref (manager);
-
- if (connecting != NULL)
- *connecting = out_connecting;
-
- return out_connected;
-}
-
-/* Translate Folks' general presence type to the Tp presence type */
-TpConnectionPresenceType
-empathy_folks_presence_type_to_tp (FolksPresenceType type)
-{
- return (TpConnectionPresenceType) type;
-}
-
-/* Returns TRUE if the given Individual contains a TpContact */
-gboolean
-empathy_folks_individual_contains_contact (FolksIndividual *individual)
-{
- GeeSet *personas;
- GeeIterator *iter;
- gboolean retval = FALSE;
-
- g_return_val_if_fail (FOLKS_IS_INDIVIDUAL (individual), FALSE);
-
- personas = folks_individual_get_personas (individual);
- iter = gee_iterable_iterator (GEE_ITERABLE (personas));
- while (!retval && gee_iterator_next (iter))
- {
- FolksPersona *persona = gee_iterator_get (iter);
- TpContact *contact = NULL;
-
- if (empathy_folks_persona_is_interesting (persona))
- contact = tpf_persona_get_contact (TPF_PERSONA (persona));
-
- g_clear_object (&persona);
-
- if (contact != NULL)
- retval = TRUE;
- }
- g_clear_object (&iter);
-
- return retval;
-}
-
-/* TODO: this needs to be eliminated (and replaced in some cases with user
- * prompts) when we break the assumption that FolksIndividuals are 1:1 with
- * TpContacts */
-
-/* Retrieve the EmpathyContact corresponding to the first TpContact contained
- * within the given Individual. Note that this is a temporary convenience. See
- * the TODO above. */
-EmpathyContact *
-empathy_contact_dup_from_folks_individual (FolksIndividual *individual)
-{
- GeeSet *personas;
- GeeIterator *iter;
- EmpathyContact *contact = NULL;
-
- g_return_val_if_fail (FOLKS_IS_INDIVIDUAL (individual), NULL);
-
- personas = folks_individual_get_personas (individual);
- iter = gee_iterable_iterator (GEE_ITERABLE (personas));
- while (gee_iterator_next (iter) && (contact == NULL))
- {
- TpfPersona *persona = gee_iterator_get (iter);
-
- if (empathy_folks_persona_is_interesting (FOLKS_PERSONA (persona)))
- {
- TpContact *tp_contact;
-
- tp_contact = tpf_persona_get_contact (persona);
- if (tp_contact != NULL)
- {
- contact = empathy_contact_dup_from_tp_contact (tp_contact);
- empathy_contact_set_persona (contact, FOLKS_PERSONA (persona));
- }
- }
- g_clear_object (&persona);
- }
- g_clear_object (&iter);
-
- if (contact == NULL)
- {
- DEBUG ("Can't create an EmpathyContact for Individual %s",
- folks_individual_get_id (individual));
- }
-
- return contact;
-}
-
-TpChannelGroupChangeReason
-tp_channel_group_change_reason_from_folks_groups_change_reason (
- FolksGroupDetailsChangeReason reason)
-{
- return (TpChannelGroupChangeReason) reason;
-}
-
-TpfPersonaStore *
-empathy_dup_persona_store_for_connection (TpConnection *connection)
-{
- FolksBackendStore *backend_store;
- FolksBackend *backend;
- TpfPersonaStore *result = NULL;
-
- backend_store = folks_backend_store_dup ();
- backend = folks_backend_store_dup_backend_by_name (backend_store,
- "telepathy");
- if (backend != NULL)
- {
- GeeMap *stores_map;
- GeeMapIterator *iter;
-
- stores_map = folks_backend_get_persona_stores (backend);
- iter = gee_map_map_iterator (stores_map);
- while (gee_map_iterator_next (iter))
- {
- TpfPersonaStore *persona_store = gee_map_iterator_get_value (iter);
- TpAccount *account;
- TpConnection *conn_cur;
-
- account = tpf_persona_store_get_account (persona_store);
- conn_cur = tp_account_get_connection (account);
- if (conn_cur == connection)
- result = persona_store;
- }
- g_clear_object (&iter);
- }
-
- g_object_unref (backend);
- g_object_unref (backend_store);
-
- return result;
-}
-
-gboolean
-empathy_connection_can_add_personas (TpConnection *connection)
-{
- gboolean retval;
- FolksPersonaStore *persona_store;
-
- g_return_val_if_fail (TP_IS_CONNECTION (connection), FALSE);
-
- if (tp_connection_get_status (connection, NULL) !=
- TP_CONNECTION_STATUS_CONNECTED)
- return FALSE;
-
- persona_store = FOLKS_PERSONA_STORE (
- empathy_dup_persona_store_for_connection (connection));
-
- retval = (folks_persona_store_get_can_add_personas (persona_store) ==
- FOLKS_MAYBE_BOOL_TRUE);
-
- g_clear_object (&persona_store);
-
- return retval;
-}
-
-gboolean
-empathy_connection_can_alias_personas (TpConnection *connection,
- FolksIndividual *individual)
-{
- gboolean retval;
-
- g_return_val_if_fail (TP_IS_CONNECTION (connection), FALSE);
-
- if (tp_connection_get_status (connection, NULL) !=
- TP_CONNECTION_STATUS_CONNECTED)
- return FALSE;
-
- retval = check_writeable_property (connection, individual, "alias");
-
- return retval;
-}
-
-gboolean
-empathy_connection_can_group_personas (TpConnection *connection,
- FolksIndividual *individual)
-{
- gboolean retval;
-
- g_return_val_if_fail (TP_IS_CONNECTION (connection), FALSE);
-
- if (tp_connection_get_status (connection, NULL) !=
- TP_CONNECTION_STATUS_CONNECTED)
- return FALSE;
-
- retval = check_writeable_property (connection, individual, "groups");
-
- return retval;
-}
-
-gboolean
-empathy_folks_persona_is_interesting (FolksPersona *persona)
-{
- /* We're not interested in non-Telepathy personas */
- if (!TPF_IS_PERSONA (persona))
- return FALSE;
-
- /* We're not interested in user personas which haven't been added to the
- * contact list (see bgo#637151). */
- if (folks_persona_get_is_user (persona) &&
- !tpf_persona_get_is_in_contact_list (TPF_PERSONA (persona)))
- {
- return FALSE;
- }
-
- return TRUE;
-}
-
-gchar *
-empathy_get_x509_certificate_hostname (gnutls_x509_crt_t cert)
-{
- gchar dns_name[256];
- gsize dns_name_size;
- gint idx;
- gint res = 0;
-
- /* this snippet is taken from GnuTLS.
- * see gnutls/lib/x509/rfc2818_hostname.c
- */
- for (idx = 0; res >= 0; idx++)
- {
- dns_name_size = sizeof (dns_name);
- res = gnutls_x509_crt_get_subject_alt_name (cert, idx,
- dns_name, &dns_name_size, NULL);
-
- if (res == GNUTLS_SAN_DNSNAME || res == GNUTLS_SAN_IPADDRESS)
- return g_strndup (dns_name, dns_name_size);
- }
-
- dns_name_size = sizeof (dns_name);
- res = gnutls_x509_crt_get_dn_by_oid (cert, GNUTLS_OID_X520_COMMON_NAME,
- 0, 0, dns_name, &dns_name_size);
-
- if (res >= 0)
- return g_strndup (dns_name, dns_name_size);
-
- return NULL;
-}
-
-gchar *
-empathy_format_currency (gint amount,
- guint scale,
- const gchar *currency)
-{
-#define MINUS "\342\210\222"
-#define EURO "\342\202\254"
-#define YEN "\302\245"
-#define POUND "\302\243"
-
- /* localised representations of currency */
- /* FIXME: check these, especially negatives and decimals */
- static const struct {
- const char *currency;
- const char *positive;
- const char *negative;
- const char *decimal;
- } currencies[] = {
- /* sym positive negative decimal */
- { "EUR", EURO "%s", MINUS EURO "%s", "." },
- { "USD", "$%s", MINUS "$%s", "." },
- { "JPY", YEN "%s" MINUS YEN "%s", "." },
- { "GBP", POUND "%s", MINUS POUND "%s", "." },
- { "PLN", "%s zl", MINUS "%s zl", "." },
- { "BRL", "R$%s", MINUS "R$%s", "." },
- { "SEK", "%s kr", MINUS "%s kr", "." },
- { "DKK", "kr %s", "kr " MINUS "%s", "." },
- { "HKD", "$%s", MINUS "$%s", "." },
- { "CHF", "%s Fr.", MINUS "%s Fr.", "." },
- { "NOK", "kr %s", "kr" MINUS "%s", "," },
- { "CAD", "$%s", MINUS "$%s", "." },
- { "TWD", "$%s", MINUS "$%s", "." },
- { "AUD", "$%s", MINUS "$%s", "." },
- };
-
- const char *positive = "%s";
- const char *negative = MINUS "%s";
- const char *decimal = ".";
- char *fmt_amount, *money;
- guint i;
-
- /* get the localised currency format */
- for (i = 0; i < G_N_ELEMENTS (currencies); i++)
- {
- if (!tp_strdiff (currency, currencies[i].currency))
- {
- positive = currencies[i].positive;
- negative = currencies[i].negative;
- decimal = currencies[i].decimal;
- break;
- }
- }
-
- /* format the amount using the scale */
- if (scale == 0)
- {
- /* no decimal point required */
- fmt_amount = g_strdup_printf ("%d", amount);
- }
- else
- {
- /* don't use floating point arithmatic, it's noisy;
- * we take the absolute values, because we want the minus
- * sign to appear before the $ */
- int divisor = pow (10, scale);
- int dollars = abs (amount / divisor);
- int cents = abs (amount % divisor);
-
- fmt_amount = g_strdup_printf ("%d%s%0*d",
- dollars, decimal, scale, cents);
- }
-
- money = g_strdup_printf (amount < 0 ? negative : positive, fmt_amount);
- g_free (fmt_amount);
-
- return money;
-}
-
-/* Return the TpContact on @conn associated with @individual, if any */
-TpContact *
-empathy_get_tp_contact_for_individual (FolksIndividual *individual,
- TpConnection *conn)
-{
- TpContact *contact = NULL;
- GeeSet *personas;
- GeeIterator *iter;
-
- personas = folks_individual_get_personas (individual);
- iter = gee_iterable_iterator (GEE_ITERABLE (personas));
- while (contact == NULL && gee_iterator_next (iter))
- {
- TpfPersona *persona = gee_iterator_get (iter);
- TpConnection *contact_conn;
- TpContact *contact_cur = NULL;
-
- if (TPF_IS_PERSONA (persona))
- {
- contact_cur = tpf_persona_get_contact (persona);
- if (contact_cur != NULL)
- {
- contact_conn = tp_contact_get_connection (contact_cur);
-
- if (!tp_strdiff (tp_proxy_get_object_path (contact_conn),
- tp_proxy_get_object_path (conn)))
- contact = contact_cur;
- }
- }
-
- g_clear_object (&persona);
- }
- g_clear_object (&iter);
-
- return contact;
-}
-
-static gboolean
-properties_contains (gchar **list,
- gint length,
- const gchar *property)
-{
- gint i;
-
- for (i = 0; i < length; i++)
- {
- if (!tp_strdiff (list[i], property))
- return TRUE;
- }
-
- return FALSE;
-}
-
-static gboolean
-check_writeable_property (TpConnection *connection,
- FolksIndividual *individual,
- gchar *property)
-{
- gchar **properties;
- gint prop_len;
- gboolean retval = FALSE;
- GeeSet *personas;
- GeeIterator *iter;
- FolksPersonaStore *persona_store;
-
- persona_store = FOLKS_PERSONA_STORE (
- empathy_dup_persona_store_for_connection (connection));
-
- properties =
- folks_persona_store_get_always_writeable_properties (persona_store,
- &prop_len);
- retval = properties_contains (properties, prop_len, property);
- if (retval == TRUE)
- goto out;
-
- /* Lets see if the Individual contains a Persona with the given property */
- personas = folks_individual_get_personas (individual);
- iter = gee_iterable_iterator (GEE_ITERABLE (personas));
- while (!retval && gee_iterator_next (iter))
- {
- FolksPersona *persona = gee_iterator_get (iter);
-
- properties =
- folks_persona_get_writeable_properties (persona, &prop_len);
- retval = properties_contains (properties, prop_len, property);
-
- g_clear_object (&persona);
-
- if (retval == TRUE)
- break;
- }
- g_clear_object (&iter);
-
-out:
- g_clear_object (&persona_store);
- return retval;
-}
-
-/* Calculate whether the Individual can do audio or video calls.
- * FIXME: We can remove this once libfolks has grown capabilities support
- * again: bgo#626179. */
-void
-empathy_individual_can_audio_video_call (FolksIndividual *individual,
- gboolean *can_audio_call,
- gboolean *can_video_call,
- EmpathyContact **out_contact)
-{
- GeeSet *personas;
- GeeIterator *iter;
- gboolean can_audio = FALSE, can_video = FALSE;
-
- personas = folks_individual_get_personas (individual);
- iter = gee_iterable_iterator (GEE_ITERABLE (personas));
- while (gee_iterator_next (iter))
- {
- FolksPersona *persona = gee_iterator_get (iter);
- TpContact *tp_contact;
-
- if (!empathy_folks_persona_is_interesting (persona))
- goto while_finish;
-
- tp_contact = tpf_persona_get_contact (TPF_PERSONA (persona));
- if (tp_contact != NULL)
- {
- EmpathyContact *contact;
-
- contact = empathy_contact_dup_from_tp_contact (tp_contact);
- empathy_contact_set_persona (contact, persona);
-
- can_audio = can_audio || empathy_contact_get_capabilities (contact) &
- EMPATHY_CAPABILITIES_AUDIO;
- can_video = can_video || empathy_contact_get_capabilities (contact) &
- EMPATHY_CAPABILITIES_VIDEO;
-
- if (out_contact != NULL)
- *out_contact = g_object_ref (contact);
-
- g_object_unref (contact);
- }
-
-while_finish:
- g_clear_object (&persona);
-
- if (can_audio && can_video)
- break;
- }
-
- g_clear_object (&iter);
-
- if (can_audio_call != NULL)
- *can_audio_call = can_audio;
-
- if (can_video_call != NULL)
- *can_video_call = can_video;
-}
-
-gboolean
-empathy_client_types_contains_mobile_device (const GStrv types) {
- int i;
-
- if (types == NULL)
- return FALSE;
-
- for (i = 0; types[i] != NULL; i++)
- if (!tp_strdiff (types[i], "phone") || !tp_strdiff (types[i], "handheld"))
- return TRUE;
-
- return FALSE;
-}
-
-static FolksIndividual *
-create_individual_from_persona (FolksPersona *persona)
-{
- GeeSet *personas;
- FolksIndividual *individual;
-
- personas = GEE_SET (
- gee_hash_set_new (FOLKS_TYPE_PERSONA, g_object_ref, g_object_unref,
- NULL, NULL, NULL, NULL, NULL, NULL));
-
- gee_collection_add (GEE_COLLECTION (personas), persona);
-
- individual = folks_individual_new (personas);
-
- g_clear_object (&personas);
-
- return individual;
-}
-
-FolksIndividual *
-empathy_create_individual_from_tp_contact (TpContact *contact)
-{
- TpfPersona *persona;
- FolksIndividual *individual;
-
- persona = tpf_persona_dup_for_contact (contact);
- if (persona == NULL)
- {
- DEBUG ("Failed to get a persona for %s",
- tp_contact_get_identifier (contact));
- return NULL;
- }
-
- individual = create_individual_from_persona (FOLKS_PERSONA (persona));
-
- g_object_unref (persona);
- return individual;
-}
-
-/* Look for a FolksIndividual containing @contact as one of his persona
- * and create one if needed */
-FolksIndividual *
-empathy_ensure_individual_from_tp_contact (TpContact *contact)
-{
- TpfPersona *persona;
- FolksIndividual *individual;
-
- persona = tpf_persona_dup_for_contact (contact);
- if (persona == NULL)
- {
- DEBUG ("Failed to get a persona for %s",
- tp_contact_get_identifier (contact));
- return NULL;
- }
-
- individual = folks_persona_get_individual (FOLKS_PERSONA (persona));
-
- if (individual != NULL)
- g_object_ref (individual);
- else
- individual = create_individual_from_persona (FOLKS_PERSONA (persona));
-
- g_object_unref (persona);
- return individual;
-}
-
-const gchar * const *
-empathy_individual_get_client_types (FolksIndividual *individual)
-{
- GeeSet *personas;
- GeeIterator *iter;
- const gchar * const *types = NULL;
- FolksPresenceType presence_type = FOLKS_PRESENCE_TYPE_UNSET;
-
- personas = folks_individual_get_personas (individual);
- iter = gee_iterable_iterator (GEE_ITERABLE (personas));
- while (gee_iterator_next (iter))
- {
- FolksPresenceDetails *presence;
- FolksPersona *persona = gee_iterator_get (iter);
-
- /* We only want personas which have presence and a TpContact */
- if (!empathy_folks_persona_is_interesting (persona))
- goto while_finish;
-
- presence = FOLKS_PRESENCE_DETAILS (persona);
-
- if (folks_presence_details_typecmp (
- folks_presence_details_get_presence_type (presence),
- presence_type) > 0)
- {
- TpContact *tp_contact;
-
- presence_type = folks_presence_details_get_presence_type (presence);
-
- tp_contact = tpf_persona_get_contact (TPF_PERSONA (persona));
- if (tp_contact != NULL)
- types = tp_contact_get_client_types (tp_contact);
- }
-
-while_finish:
- g_clear_object (&persona);
- }
- g_clear_object (&iter);
-
- return types;
-}
-
-GVariant *
-empathy_asv_to_vardict (const GHashTable *asv)
-{
- return empathy_boxed_to_variant (TP_HASH_TYPE_STRING_VARIANT_MAP, "a{sv}",
- (gpointer) asv);
-}
-
-GVariant *
-empathy_boxed_to_variant (GType gtype,
- const gchar *variant_type,
- gpointer boxed)
-{
- GValue v = G_VALUE_INIT;
- GVariant *ret;
-
- g_return_val_if_fail (boxed != NULL, NULL);
-
- g_value_init (&v, gtype);
- g_value_set_boxed (&v, boxed);
-
- ret = dbus_g_value_build_g_variant (&v);
- g_return_val_if_fail (!tp_strdiff (g_variant_get_type_string (ret),
- variant_type), NULL);
-
- g_value_unset (&v);
-
- return g_variant_ref_sink (ret);
-}
diff --git a/libempathy/empathy-utils.h b/libempathy/empathy-utils.h
deleted file mode 100644
index 40291b97..00000000
--- a/libempathy/empathy-utils.h
+++ /dev/null
@@ -1,122 +0,0 @@
-/*
- * Copyright (C) 2003-2007 Imendio AB
- * Copyright (C) 2007-2011 Collabora Ltd.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301 USA
- *
- * Authors: 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 <gnutls/x509.h>
-#include <libxml/tree.h>
-#include <folks/folks.h>
-#include <folks/folks-telepathy.h>
-#include <telepathy-glib/telepathy-glib.h>
-
-#include "empathy-contact.h"
-
-#define EMPATHY_GET_PRIV(obj,type) ((type##Priv *) ((type *) obj)->priv)
-
-G_BEGIN_DECLS
-
-void empathy_init (void);
-
-/* XML */
-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 */
-const gchar * empathy_presence_get_default_message (
- TpConnectionPresenceType presence);
-const gchar * empathy_presence_to_str (TpConnectionPresenceType presence);
-TpConnectionPresenceType empathy_presence_from_str (const gchar *str);
-gchar * empathy_file_lookup (const gchar *filename,
- const gchar *subdir);
-gint empathy_uint_compare (gconstpointer a,
- gconstpointer b);
-
-const gchar * empathy_account_get_error_message (TpAccount *account,
- gboolean *user_requested);
-
-#define EMPATHY_ARRAY_TYPE_OBJECT (empathy_type_dbus_ao ())
-GType empathy_type_dbus_ao (void);
-
-gboolean empathy_account_manager_get_accounts_connected (gboolean *connecting);
-
-TpConnectionPresenceType empathy_folks_presence_type_to_tp (
- FolksPresenceType type);
-gboolean empathy_folks_individual_contains_contact (
- FolksIndividual *individual);
-EmpathyContact * empathy_contact_dup_from_folks_individual (
- FolksIndividual *individual);
-TpChannelGroupChangeReason tp_channel_group_change_reason_from_folks_groups_change_reason (
- FolksGroupDetailsChangeReason reason);
-TpfPersonaStore * empathy_dup_persona_store_for_connection (
- TpConnection *connection);
-gboolean empathy_connection_can_add_personas (TpConnection *connection);
-gboolean empathy_connection_can_alias_personas (TpConnection *connection,
- FolksIndividual *individual);
-gboolean empathy_connection_can_group_personas (TpConnection *connection,
- FolksIndividual *individual);
-gboolean empathy_folks_persona_is_interesting (FolksPersona *persona);
-
-gchar * empathy_get_x509_certificate_hostname (gnutls_x509_crt_t cert);
-
-gchar *empathy_format_currency (gint amount,
- guint scale,
- const gchar *currency);
-
-TpContact * empathy_get_tp_contact_for_individual (FolksIndividual *individual,
- TpConnection *conn);
-
-void empathy_individual_can_audio_video_call (FolksIndividual *individual,
- gboolean *can_audio_call,
- gboolean *can_video_call,
- EmpathyContact **out_contact);
-
-gboolean empathy_client_types_contains_mobile_device (
- const GStrv types);
-
-FolksIndividual * empathy_create_individual_from_tp_contact (
- TpContact *contact);
-
-FolksIndividual * empathy_ensure_individual_from_tp_contact (
- TpContact *contact);
-
-const gchar * const * empathy_individual_get_client_types (
- FolksIndividual *individual);
-
-GVariant * empathy_asv_to_vardict (const GHashTable *asv);
-
-GVariant * empathy_boxed_to_variant (GType gtype,
- const gchar *variant_type,
- gpointer boxed);
-
-G_END_DECLS
-
-#endif /* __EMPATHY_UTILS_H__ */
diff --git a/nautilus-sendto-plugin/Makefile.am b/nautilus-sendto-plugin/Makefile.am
deleted file mode 100644
index a28415cc..00000000
--- a/nautilus-sendto-plugin/Makefile.am
+++ /dev/null
@@ -1,21 +0,0 @@
-plugindir = $(libdir)/nautilus-sendto/plugins
-
-INCLUDES = \
- -I$(top_builddir) \
- -I$(top_srcdir)/libempathy \
- -I$(top_srcdir)/libempathy-gtk \
- -DLOCALEDIR=\""$(datadir)/locale"\" \
- $(NST_CFLAGS) \
- $(WARN_CFLAGS) \
- $(ERROR_CFLAGS) \
- $(DISABLE_DEPRECATED) \
- $(EMPATHY_CFLAGS)
-
-plugin_LTLIBRARIES = libnstempathy.la
-
-libnstempathy_la_SOURCES = empathy-nautilus-sendto.c
-libnstempathy_la_LDFLAGS = -module -avoid-version
-libnstempathy_la_LIBADD = \
- $(NST_LIBS) \
- $(top_builddir)/libempathy/libempathy.la \
- $(top_builddir)/libempathy-gtk/libempathy-gtk.la
diff --git a/nautilus-sendto-plugin/empathy-nautilus-sendto.c b/nautilus-sendto-plugin/empathy-nautilus-sendto.c
deleted file mode 100644
index de792385..00000000
--- a/nautilus-sendto-plugin/empathy-nautilus-sendto.c
+++ /dev/null
@@ -1,307 +0,0 @@
-/*
- * Copyright (C) 2008, 2009 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 av.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301 USA.
- *
- * Authors: Jonny Lamb <jonny.lamb@collabora.co.uk>
- * Cosimo Cecchi <cosimo.cecchi@collabora.co.uk>
- */
-
-#include "config.h"
-
-#include <glib/gi18n-lib.h>
-
-
-#include "empathy-debug.h"
-#include "empathy-ft-factory.h"
-
-#include "empathy-roster-model-manager.h"
-#include "empathy-ui-utils.h"
-#include "empathy-roster-view.h"
-#include "empathy-roster-contact.h"
-
-
-#include "nautilus-sendto-plugin.h"
-
-static EmpathyFTFactory *factory = NULL;
-static guint transfers = 0;
-
-#define BOX_DATA_KEY "roster_view"
-
-static gboolean destroy (NstPlugin *plugin);
-
-static gboolean
-init (NstPlugin *plugin)
-{
- g_print ("Init %s plugin\n", plugin->info->id);
-
- empathy_gtk_init ();
-
- return TRUE;
-}
-
-static EmpathyContact *
-dup_contact_from_individual (FolksIndividual *individual)
-{
- EmpathyContact *contact;
- gboolean can_do_action;
-
- if (individual == NULL)
- return NULL;
-
- contact = empathy_contact_dup_best_for_action (individual,
- EMPATHY_ACTION_SEND_FILE);
- if (contact == NULL)
- return NULL;
-
- can_do_action = empathy_contact_can_do_action (contact,
- EMPATHY_ACTION_SEND_FILE);
-
- if (!can_do_action)
- {
- /* If contact can't do FT we don't care about him */
- g_object_unref (contact);
- return NULL;
- }
-
- return contact;
-}
-
-static gboolean
-filter_individual (GtkWidget *child,
- gpointer user_data)
-{
- FolksIndividual *individual;
- EmpathyContact *contact;
-
- if (!EMPATHY_IS_ROSTER_CONTACT (child))
- return FALSE;
-
- individual = empathy_roster_contact_get_individual (EMPATHY_ROSTER_CONTACT (child));
-
- contact = dup_contact_from_individual (individual);
- if (contact == NULL)
- return FALSE;
-
- g_object_unref (contact);
- return TRUE;
-}
-
-static GtkWidget *
-get_contacts_widget (NstPlugin *plugin)
-{
- GtkWidget *roster_view, *box, *scrolled;
- EmpathyIndividualManager *mgr;
- EmpathyRosterModel *model;
-
- box = gtk_box_new (GTK_ORIENTATION_VERTICAL, 8);
-
- mgr = empathy_individual_manager_dup_singleton ();
- model = EMPATHY_ROSTER_MODEL (empathy_roster_model_manager_new (mgr));
- roster_view = empathy_roster_view_new (model);
-
- g_object_unref (model);
-
- scrolled = gtk_scrolled_window_new (NULL, NULL);
-
- g_object_unref (mgr);
-
- gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled),
- GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC);
- egg_list_box_set_filter_func (EGG_LIST_BOX (roster_view), filter_individual,
- roster_view, NULL);
- egg_list_box_add_to_scrolled (EGG_LIST_BOX (roster_view),
- GTK_SCROLLED_WINDOW (scrolled));
-
- gtk_box_pack_start (GTK_BOX (box), scrolled, TRUE, TRUE, 0);
-
- gtk_widget_set_size_request (box, -1, 300);
- gtk_widget_show (roster_view);
- gtk_widget_show (scrolled);
- gtk_widget_show (box);
-
- g_object_set_data (G_OBJECT (box), BOX_DATA_KEY, roster_view);
-
- return box;
-}
-
-static EmpathyContact *
-get_selected_contact (GtkWidget *widget)
-{
- EmpathyRosterView *roster_view;
- FolksIndividual *individual;
- EmpathyContact *contact;
-
- roster_view = g_object_get_data (G_OBJECT (widget), BOX_DATA_KEY);
- individual = empathy_roster_view_get_selected_individual (roster_view);
-
- if (individual == NULL)
- return NULL;
-
- contact = dup_contact_from_individual (individual);
-
- g_object_unref (individual);
- return contact;
-}
-
-static gboolean
-validate_destination (NstPlugin *plugin,
- GtkWidget *contact_widget,
- gchar **error)
-{
- EmpathyContact *contact = NULL;
-
- contact = get_selected_contact (contact_widget);
-
- if (contact == NULL)
- return FALSE;
-
- g_object_unref (contact);
-
- return TRUE;
-}
-
-static void
-quit (void)
-{
- if (--transfers > 0)
- return;
-
- destroy (NULL);
- gtk_main_quit ();
-}
-
-static void
-transfer_done_cb (EmpathyFTHandler *handler,
- TpFileTransferChannel *channel,
- NstPlugin *plugin)
-{
- quit ();
-}
-
-static void
-transfer_error_cb (EmpathyFTHandler *handler,
- GError *error,
- NstPlugin *plugin)
-{
- quit ();
-}
-
-static void
-error_dialog_cb (GtkDialog *dialog,
- gint arg,
- gpointer user_data)
-{
- gtk_widget_destroy (GTK_WIDGET (dialog));
- quit ();
-}
-
-static void
-handler_ready_cb (EmpathyFTFactory *fact,
- EmpathyFTHandler *handler,
- GError *error,
- NstPlugin *plugin)
-{
- if (error != NULL)
- {
- GtkWidget *dialog;
- dialog = gtk_message_dialog_new (NULL, 0, GTK_MESSAGE_ERROR,
- GTK_BUTTONS_CLOSE, "%s",
- error->message ? error->message : _("No error message"));
-
- g_signal_connect (dialog, "response", G_CALLBACK (error_dialog_cb), NULL);
- gtk_widget_show (dialog);
- }
- else
- {
- g_signal_connect (handler, "transfer-done",
- G_CALLBACK (transfer_done_cb), plugin);
- g_signal_connect (handler, "transfer-error",
- G_CALLBACK (transfer_error_cb), plugin);
-
- empathy_ft_handler_start_transfer (handler);
- }
-}
-
-static gboolean
-send_files (NstPlugin *plugin,
- GtkWidget *contact_widget,
- GList *file_list)
-{
- EmpathyContact *contact;
- GList *l;
-
- contact = get_selected_contact (contact_widget);
-
- if (contact == NULL)
- return FALSE;
-
- factory = empathy_ft_factory_dup_singleton ();
-
- g_signal_connect (factory, "new-ft-handler",
- G_CALLBACK (handler_ready_cb), plugin);
-
- for (l = file_list; l; l = l->next)
- {
- gchar *path = l->data;
- GFile *file;
-
- file = g_file_new_for_uri (path);
-
- ++transfers;
-
- empathy_ft_factory_new_transfer_outgoing (factory,
- contact, file, empathy_get_current_action_time ());
-
- g_object_unref (file);
- }
-
- g_object_unref (contact);
-
- if (transfers == 0)
- {
- destroy (NULL);
- return TRUE;
- }
-
- return FALSE;
-}
-
-static gboolean
-destroy (NstPlugin *plugin)
-{
- if (factory)
- g_object_unref (factory);
-
- return TRUE;
-}
-
-static
-NstPluginInfo plugin_info = {
- "empathy",
- "empathy",
- N_("Instant Message (Empathy)"),
- GETTEXT_PACKAGE,
- NAUTILUS_CAPS_NONE,
- init,
- get_contacts_widget,
- validate_destination,
- send_files,
- destroy
-};
-
-NST_INIT_PLUGIN (plugin_info)
-
diff --git a/src/.gitignore b/src/.gitignore
deleted file mode 100644
index 52be330e..00000000
--- a/src/.gitignore
+++ /dev/null
@@ -1,10 +0,0 @@
-empathy
-empathy-accounts
-empathy-debugger
-empathy-av
-empathy-auth-client
-empathy-call
-empathy-chat
-empathy-chat-resources.c
-empathy-chat-resources.h
-src-marshal.*
diff --git a/src/Makefile.am b/src/Makefile.am
deleted file mode 100644
index fdc95844..00000000
--- a/src/Makefile.am
+++ /dev/null
@@ -1,218 +0,0 @@
-include $(top_srcdir)/tools/flymake.mk
-
-CPPFLAGS_COMMON = \
- $(EMPATHY_CFLAGS) \
- $(ERROR_CFLAGS) \
- -I$(top_srcdir)/tp-account-widgets \
- -I$(top_srcdir)/libempathy-gtk \
- -I$(top_srcdir)/libempathy \
- -I$(top_srcdir)/extensions \
- -I$(top_builddir)/libempathy-gtk \
- -I$(top_builddir)/libempathy \
- -DG_LOG_DOMAIN=\"empathy\" \
- -DBIN_DIR=\"$(bindir)\" \
- $(DISABLE_DEPRECATED) \
- $(WARN_CFLAGS) \
- $(NULL)
-
-AM_LDFLAGS = $(LIBM)
-AM_CPPFLAGS = \
- $(CPPFLAGS_COMMON) \
- $(LIBCHAMPLAIN_CFLAGS) \
- $(UOA_CFLAGS) \
- $(NULL)
-
-LDADD = \
- $(top_builddir)/tp-account-widgets/libtp-account-widgets.la \
- $(top_builddir)/libempathy-gtk/libempathy-gtk.la \
- $(top_builddir)/libempathy/libempathy.la \
- $(top_builddir)/extensions/libemp-extensions.la \
- $(GCR_LIBS) \
- $(EMPATHY_LIBS) \
- $(LIBCHAMPLAIN_LIBS) \
- $(UOA_LIBS) \
- $(NULL)
-
-noinst_LTLIBRARIES = libempathy-accounts-common.la
-
-libempathy_accounts_common_la_SOURCES = \
- empathy-accounts-common.c empathy-accounts-common.h \
- empathy-accounts-dialog.c empathy-accounts-dialog.h \
- empathy-import-dialog.c empathy-import-dialog.h \
- empathy-import-pidgin.c empathy-import-pidgin.h \
- empathy-import-widget.c empathy-import-widget.h \
- empathy-import-utils.c empathy-import-utils.h \
- $(NULL)
-
-libempathy_accounts_common_la_LIBADD = \
- $(top_builddir)/libempathy-gtk/libempathy-gtk.la \
- $(EMPATHY_LIBS) \
- $(LIBCHAMPLAIN_LIBS) \
- $(NULL)
-
-bin_PROGRAMS = \
- empathy \
- empathy-accounts \
- empathy-debugger \
- $(NULL)
-
-libexec_PROGRAMS = \
- empathy-auth-client \
- empathy-call \
- empathy-chat
-
-empathy_accounts_SOURCES = \
- empathy-accounts.c empathy-accounts.h \
- $(NULL)
-
-empathy_accounts_CPPFLAGS = \
- $(AM_CPPFLAGS) \
- $(CHEESE_CFLAGS) \
- $(NULL)
-
-empathy_accounts_LDADD = \
- $(LDADD) \
- libempathy-accounts-common.la \
- $(NULL)
-
-empathy_debugger_SOURCES = \
- empathy-debug-window.c empathy-debug-window.h \
- empathy-debugger.c \
- $(NULL)
-
-empathy_auth_client_SOURCES = \
- empathy-sanity-cleaning.c empathy-sanity-cleaning.h \
- empathy-auth-client.c \
- $(NULL)
-
-empathy_chat_SOURCES = \
- empathy-about-dialog.c empathy-about-dialog.h \
- empathy-chat-manager.c empathy-chat-manager.h \
- empathy-chat-window.c empathy-chat-window.h \
- empathy-invite-participant-dialog.c empathy-invite-participant-dialog.h \
- empathy-chat.c \
- $(NULL)
-
-nodist_empathy_chat_SOURCES = \
- empathy-chat-resources.c \
- empathy-chat-resources.h \
- $(NULL)
-
-empathy_call_SOURCES = \
- empathy-call.c \
- empathy-call-factory.c \
- empathy-call-factory.h \
- empathy-call-handler.c \
- empathy-call-handler.h \
- empathy-call-window.c \
- empathy-call-window.h \
- empathy-call-window-fullscreen.c \
- empathy-call-window-fullscreen.h \
- empathy-about-dialog.c \
- empathy-about-dialog.h \
- empathy-audio-sink.c \
- empathy-audio-sink.h \
- empathy-audio-src.c \
- empathy-audio-src.h \
- empathy-audio-utils.c \
- empathy-audio-utils.h \
- empathy-video-src.c \
- empathy-video-src.h \
- empathy-preferences.c \
- empathy-preferences.h \
- empathy-camera-menu.c \
- empathy-camera-menu.h \
- empathy-mic-menu.c \
- empathy-mic-menu.h \
- empathy-rounded-actor.c \
- empathy-rounded-actor.h \
- empathy-rounded-rectangle.c \
- empathy-rounded-rectangle.h \
- empathy-rounded-texture.c \
- empathy-rounded-texture.h \
- empathy-mic-monitor.c \
- empathy-mic-monitor.h
-
-empathy_call_CFLAGS = $(EMPATHY_CALL_CFLAGS) -DGST_USE_UNSTABLE_API
-empathy_call_LDFLAGS = $(EMPATHY_CALL_LIBS)
-
-empathy_handwritten_source = \
- empathy-about-dialog.c empathy-about-dialog.h \
- empathy-chat-window.c empathy-chat-window.h \
- empathy-chatrooms-window.c empathy-chatrooms-window.h \
- empathy-event-manager.c empathy-event-manager.h \
- empathy-ft-manager.c empathy-ft-manager.h \
- empathy-invite-participant-dialog.c empathy-invite-participant-dialog.h \
- empathy-roster-window.c empathy-roster-window.h \
- empathy-new-chatroom-dialog.c empathy-new-chatroom-dialog.h \
- empathy-notifications-approver.c empathy-notifications-approver.h \
- empathy-call-observer.c empathy-call-observer.h \
- empathy-preferences.c empathy-preferences.h \
- empathy-status-icon.c empathy-status-icon.h \
- empathy-chat-manager.c empathy-chat-manager.h \
- empathy.c
-
-empathy_SOURCES = \
- $(empathy_handwritten_source) \
- $(NULL)
-
-empathy_LDADD = \
- libempathy-accounts-common.la \
- $(top_builddir)/libempathy-gtk/libempathy-gtk.la \
- $(top_builddir)/libempathy/libempathy.la \
- $(top_builddir)/extensions/libemp-extensions.la \
- $(EMPATHY_LIBS) \
- $(LIBCHAMPLAIN_LIBS) \
- $(NULL)
-
-check_c_sources = \
- $(empathy_handwritten_source) \
- $(empathy_logs_SOURCES) \
- $(libempathy_accounts_common_la_SOURCES) \
- $(empathy_accounts_SOURCES) \
- $(empathy_debugger_SOURCES) \
- $(empathy_auth_client_SOURCES) \
- $(empathy_chat_SOURCES) \
- $(empathy_call_SOURCES)
-
-include $(top_srcdir)/tools/check-coding-style.mk
-check-local: check-coding-style
-
-uidir = $(datadir)/empathy
-ui_DATA = \
- empathy-accounts-dialog.ui \
- empathy-call-window-fullscreen.ui \
- empathy-call-window.ui \
- empathy-chat-window.ui \
- empathy-chatrooms-window.ui \
- empathy-ft-manager.ui \
- empathy-import-dialog.ui \
- empathy-roster-window.ui \
- empathy-roster-window-menubar.ui \
- empathy-new-chatroom-dialog.ui \
- empathy-preferences.ui \
- empathy-status-icon.ui
-
-EXTRA_DIST = \
- $(autostart_DATA) \
- $(ui_DATA) \
- empathy-chat.js \
- empathy-chat.gresource.xml
-
-dist_man_MANS = \
- empathy.1 \
- empathy-accounts.1
-
-BUILT_SOURCES = \
- $(nodist_empathy_chat_SOURCES) \
- $(NULL)
-
-CLEANFILES = $(BUILT_SOURCES)
-
-chat_resource_files: $(shell $(GLIB_COMPILE_RESOURCES) --generate-dependencies --sourcedir=$(srcdir) $(srcdir)/empathy-chat.gresource.xml)
-
-empathy-chat-resources.c: empathy-chat.gresource.xml $(chat_resource_files)
- $(AM_V_GEN)$(GLIB_COMPILE_RESOURCES) --target=$@ --sourcedir=$(srcdir) --generate-source $<
-
-empathy-chat-resources.h: empathy-chat.gresource.xml $(chat_resource_files)
- $(AM_V_GEN)$(GLIB_COMPILE_RESOURCES) --target=$@ --sourcedir=$(srcdir) --generate-header $<
diff --git a/src/empathy-about-dialog.c b/src/empathy-about-dialog.c
deleted file mode 100644
index bd6b2f86..00000000
--- a/src/empathy-about-dialog.c
+++ /dev/null
@@ -1,119 +0,0 @@
-/* -*- 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., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301 USA
- *
- * Authors: Martyn Russell <martyn@imendio.com>
- * Xavier Claessens <xclaesse@gmail.com>
- */
-
-#include "config.h"
-#include "empathy-about-dialog.h"
-
-#include <glib/gi18n.h>
-
-#define WEB_SITE "http://live.gnome.org/Empathy"
-
-static const char *authors[] = {
- "Alban Crequy",
- "Andreas Lööw",
- "Aurelien Naldi",
- "Bastien Nocera",
- "Christoffer Olsen",
- "Cosimo Cecchi",
- "Danielle Madeley",
- "Elliot Fairweather",
- "Frederic Crozat",
- "Frederic Peters",
- "Geert-Jan Van den Bogaerde",
- "Guillaume Desmottes <guillaume.desmottes@collabora.co.uk>",
- "Johan Hammar",
- "Jonatan Magnusson",
- "Jonny Lamb",
- "Jordi Mallach",
- "Kim Andersen",
- "Marco Barisione",
- "Martyn Russell <martyn@gnome.org>",
- "Mikael Hallendal <micke@imendio.com>",
- "Mike Gratton",
- "Richard Hult <richard@imendio.com>",
- "Ross Burton",
- "Sjoerd Simons",
- "Thomas Reynolds",
- "Vincent Untz",
- "Xavier Claessens <xclaesse@gmail.com>",
- NULL
-};
-
-static const char *documenters[] = {
- "Milo Casagrande",
- "Seth Dudenhofer",
- NULL
-};
-
-static const char *artists[] = {
- "Andreas Nilsson <nisses.mail@home.se>",
- "Vinicius Depizzol <vdepizzol@gmail.com>",
- "K.Vishnoo Charan Reddy <drkvi-a@yahoo.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"),
- NULL
-};
-
-void
-empathy_about_dialog_new (GtkWindow *parent)
-{
- GString *license_trans = g_string_new (NULL);
- int i;
-
- for (i = 0; license[i] != NULL; i++) {
- g_string_append (license_trans, _(license[i]));
- g_string_append (license_trans, "\n\n");
-
- }
- gtk_show_about_dialog (parent,
- "artists", artists,
- "authors", authors,
- "comments", _("An Instant Messaging client for GNOME"),
- "license", license_trans->str,
- "wrap-license", TRUE,
- "copyright", "Imendio AB 2002-2007\nCollabora Ltd 2007-2011",
- "documenters", documenters,
- "logo-icon-name", "empathy",
- "translator-credits", _("translator-credits"),
- "version", PACKAGE_VERSION,
- "website", WEB_SITE,
- NULL);
-
- g_string_free (license_trans, TRUE);
-}
-
-
diff --git a/src/empathy-about-dialog.h b/src/empathy-about-dialog.h
deleted file mode 100644
index a290b324..00000000
--- a/src/empathy-about-dialog.h
+++ /dev/null
@@ -1,36 +0,0 @@
-/* -*- 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., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301 USA
- *
- * Authors: Martyn Russell <martyn@imendio.com>
- * Xavier Claessens <xclaesse@gmail.com>
- */
-
-#ifndef __EMPATHY_ABOUT_DIALOG_H__
-#define __EMPATHY_ABOUT_DIALOG_H__
-
-#include <gtk/gtk.h>
-
-G_BEGIN_DECLS
-
-void empathy_about_dialog_new (GtkWindow *parent);
-
-G_END_DECLS
-
-#endif /* __EMPATHY_ABOUT_DIALOG_H__ */
diff --git a/src/empathy-accounts-common.c b/src/empathy-accounts-common.c
deleted file mode 100644
index 772e6868..00000000
--- a/src/empathy-accounts-common.c
+++ /dev/null
@@ -1,89 +0,0 @@
-/*
- * Copyright (C) 2005-2007 Imendio AB
- * Copyright (C) 2007-2010 Collabora Ltd.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301 USA
- *
- * Authors: Martyn Russell <martyn@imendio.com>
- * Xavier Claessens <xclaesse@gmail.com>
- * Cosimo Cecchi <cosimo.cecchi@collabora.co.uk>
- * Jonathan Tellier <jonathan.tellier@gmail.com>
- * Travis Reitter <travis.reitter@collabora.co.uk>
- */
-
-#include "config.h"
-#include "empathy-accounts-common.h"
-
-#include "empathy-accounts-dialog.h"
-
-#define DEBUG_FLAG EMPATHY_DEBUG_ACCOUNT
-#include "empathy-debug.h"
-
-gboolean
-empathy_accounts_has_non_salut_accounts (TpAccountManager *manager)
-{
- gboolean ret = FALSE;
- GList *accounts, *l;
-
- accounts = tp_account_manager_dup_valid_accounts (manager);
-
- for (l = accounts ; l != NULL; l = g_list_next (l))
- {
- if (tp_strdiff (tp_account_get_protocol_name (l->data), "local-xmpp"))
- {
- ret = TRUE;
- break;
- }
- }
-
- g_list_free_full (accounts, g_object_unref);
-
- return ret;
-}
-
-gboolean
-empathy_accounts_has_accounts (TpAccountManager *manager)
-{
- GList *accounts;
- gboolean has_accounts;
-
- accounts = tp_account_manager_dup_valid_accounts (manager);
- has_accounts = (accounts != NULL);
- g_list_free_full (accounts, g_object_unref);
-
- return has_accounts;
-}
-
-void
-empathy_accounts_show_accounts_ui (TpAccountManager *manager,
- TpAccount *account,
- GApplication *app)
-{
- static GtkWidget *accounts_window = NULL;
-
- g_return_if_fail (TP_IS_ACCOUNT_MANAGER (manager));
- g_return_if_fail (!account || TP_IS_ACCOUNT (account));
-
- if (accounts_window == NULL)
- {
- accounts_window = empathy_accounts_dialog_show (NULL, account);
-
- gtk_application_add_window (GTK_APPLICATION (app),
- GTK_WINDOW (accounts_window));
- }
-
- gtk_window_present (GTK_WINDOW (accounts_window));
-}
diff --git a/src/empathy-accounts-common.h b/src/empathy-accounts-common.h
deleted file mode 100644
index 1cb24d7d..00000000
--- a/src/empathy-accounts-common.h
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Copyright (C) 2010 Collabora Ltd.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301 USA
- *
- * Authors: Travis Reitter <travis.reitter@collabora.co.uk>
- */
-
-#ifndef __EMPATHY_ACCOUNTS_COMMON_H__
-#define __EMPATHY_ACCOUNTS_COMMON_H__
-
-#include <telepathy-glib/telepathy-glib.h>
-
-G_BEGIN_DECLS
-
-gboolean empathy_accounts_has_non_salut_accounts (TpAccountManager *manager);
-
-gboolean empathy_accounts_has_accounts (TpAccountManager *manager);
-
-void empathy_accounts_show_accounts_ui (TpAccountManager *manager,
- TpAccount *account,
- GApplication *app);
-
-G_END_DECLS
-
-#endif /* __EMPATHY_ACCOUNTS_COMMON_H__ */
diff --git a/src/empathy-accounts-dialog.c b/src/empathy-accounts-dialog.c
deleted file mode 100644
index 16338337..00000000
--- a/src/empathy-accounts-dialog.c
+++ /dev/null
@@ -1,2746 +0,0 @@
-/*
- * Copyright (C) 2005-2007 Imendio AB
- * Copyright (C) 2007-2009 Collabora Ltd.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301 USA
- *
- * Authors: Martyn Russell <martyn@imendio.com>
- * Xavier Claessens <xclaesse@gmail.com>
- * Cosimo Cecchi <cosimo.cecchi@collabora.co.uk>
- * Jonathan Tellier <jonathan.tellier@gmail.com>
- * Danielle Madeley <danielle.madeley@collabora.co.uk>
- */
-
-#include "config.h"
-#include "empathy-accounts-dialog.h"
-
-#include <glib/gi18n-lib.h>
-#include <tp-account-widgets/tpaw-account-widget.h>
-#include <tp-account-widgets/tpaw-builder.h>
-#include <tp-account-widgets/tpaw-user-info.h>
-#include <tp-account-widgets/tpaw-pixbuf-utils.h>
-#include <tp-account-widgets/tpaw-utils.h>
-
-#include "empathy-accounts-common.h"
-#include "empathy-import-dialog.h"
-#include "empathy-import-utils.h"
-#include "empathy-local-xmpp-assistant-widget.h"
-#include "empathy-new-account-dialog.h"
-#include "empathy-pkg-kit.h"
-#include "empathy-ui-utils.h"
-#include "empathy-utils.h"
-
-#define DEBUG_FLAG EMPATHY_DEBUG_ACCOUNT
-#include "empathy-debug.h"
-
-/* Flashing delay for icons (milliseconds). */
-#define FLASH_TIMEOUT 500
-
-/* The primary text of the dialog shown to the user when he is about to lose
- * unsaved changes */
-#define PENDING_CHANGES_QUESTION_PRIMARY_TEXT \
- _("There are unsaved modifications to your %.50s account.")
-/* The primary text of the dialog shown to the user when he is about to lose
- * an unsaved new account */
-#define UNSAVED_NEW_ACCOUNT_QUESTION_PRIMARY_TEXT \
- _("Your new account has not been saved yet.")
-
-#define GET_PRIV(obj) EMPATHY_GET_PRIV (obj, EmpathyAccountsDialog)
-G_DEFINE_TYPE (EmpathyAccountsDialog, empathy_accounts_dialog, GTK_TYPE_DIALOG);
-
-enum
-{
- NOTEBOOK_PAGE_ACCOUNT = 0,
- NOTEBOOK_PAGE_LOADING,
- NOTEBOOK_PAGE_NO_PROTOCOL
-};
-
-typedef struct {
- GtkWidget *alignment_settings;
- GtkWidget *alignment_infobar;
-
- GtkWidget *vbox_details;
- GtkWidget *infobar;
- GtkWidget *label_status;
- GtkWidget *image_status;
- GtkWidget *throbber;
- GtkWidget *enabled_switch;
-
- GtkWidget *treeview;
- GtkCellRenderer *name_renderer;
-
- GtkWidget *button_add;
- GtkWidget *button_remove;
- GtkWidget *button_import;
-
- GtkWidget *image_type;
- GtkWidget *label_name;
- GtkWidget *label_type;
- GtkWidget *dialog_content;
- GtkWidget *user_info;
-
- GtkWidget *notebook_account;
- GtkWidget *spinner;
- gboolean loading;
-
- /* We have to keep a weak reference on the actual TpawAccountWidget, not
- * just its GtkWidget. It is the only reliable source we can query to know if
- * there are any unsaved changes to the currently selected account. We can't
- * look at the account settings because it does not contain everything that
- * can be changed using the TpawAccountWidget. For instance, it does not
- * contain the state of the "Enabled" checkbox.
- *
- * Even if we create it ourself, we just get a weak ref and not a strong one
- * as TpawAccountWidget unrefs itself when the GtkWidget is destroyed.
- * That's kinda ugly; cf bgo #640417.
- *
- * */
- TpawAccountWidget *setting_widget;
-
- gboolean connecting_show;
- guint connecting_id;
-
- gulong settings_ready_id;
- TpawAccountSettings *settings_ready;
-
- TpAccountManager *account_manager;
- TpawConnectionManagers *cms;
- GNetworkMonitor *connectivity;
-
- GtkWindow *parent_window;
- TpAccount *initial_selection;
-
- /* Those are needed when changing the selected row. When a user selects
- * another account and there are unsaved changes on the currently selected
- * one, a confirmation message box is presented to him. Since his answer
- * is retrieved asynchronously, we keep some information as member of the
- * EmpathyAccountsDialog object. */
- gboolean force_change_row;
- GtkTreeRowReference *destination_row;
-
- GHashTable *icons_cache;
-} EmpathyAccountsDialogPriv;
-
-enum {
- COL_NAME,
- COL_STATUS,
- COL_ACCOUNT,
- COL_ACCOUNT_SETTINGS,
- COL_COUNT
-};
-
-enum {
- PROP_PARENT = 1
-};
-
-static TpawAccountSettings * accounts_dialog_model_get_selected_settings (
- EmpathyAccountsDialog *dialog);
-
-static void accounts_dialog_model_select_first (EmpathyAccountsDialog *dialog);
-
-static void accounts_dialog_update_settings (EmpathyAccountsDialog *dialog,
- TpawAccountSettings *settings);
-
-static void accounts_dialog_model_set_selected (EmpathyAccountsDialog *dialog,
- TpAccount *account);
-
-static void accounts_dialog_connection_changed_cb (TpAccount *account,
- guint old_status,
- guint current,
- guint reason,
- gchar *dbus_error_name,
- GHashTable *details,
- EmpathyAccountsDialog *dialog);
-
-static void accounts_dialog_presence_changed_cb (TpAccount *account,
- guint presence,
- gchar *status,
- gchar *status_message,
- EmpathyAccountsDialog *dialog);
-
-static void accounts_dialog_model_selection_changed (
- GtkTreeSelection *selection,
- EmpathyAccountsDialog *dialog);
-
-static gboolean accounts_dialog_has_pending_change (
- EmpathyAccountsDialog *dialog, TpAccount **account);
-
-static void
-accounts_dialog_status_infobar_set_message (EmpathyAccountsDialog *dialog,
- const gchar *message)
-{
- EmpathyAccountsDialogPriv *priv = GET_PRIV (dialog);
- gchar *message_markup;
-
- message_markup = g_markup_printf_escaped ("<i>%s</i>", message);
- gtk_label_set_markup (GTK_LABEL (priv->label_status), message_markup);
-
- gtk_widget_set_tooltip_text (priv->label_status, message);
-
- g_free (message_markup);
-}
-
-static void
-accounts_dialog_enable_account_cb (GObject *object,
- GAsyncResult *result,
- gpointer user_data)
-{
- TpAccount *account = TP_ACCOUNT (object);
- gboolean enable = GPOINTER_TO_UINT (user_data);
- GError *error = NULL;
- TpAccountManager *am;
-
- if (!tp_account_set_enabled_finish (account, result, &error))
- {
- DEBUG ("Could not enable the account: %s", error->message);
- g_error_free (error);
- return;
- }
-
- /* tp_account_is_enabled() is not updated yet at this point */
- if (enable)
- {
- am = tp_account_manager_dup ();
-
- tpaw_connect_new_account (account, am);
- g_object_unref (am);
- }
-}
-
-static void
-enable_and_connect_account (TpAccount *account,
- gboolean enable)
-{
- tp_account_set_enabled_async (account, enable,
- accounts_dialog_enable_account_cb, GUINT_TO_POINTER (enable));
-}
-
-static void
-accounts_dialog_enable_switch_active_cb (GtkSwitch *sw,
- GParamSpec *spec,
- EmpathyAccountsDialog *dialog)
-{
- TpawAccountSettings *settings;
- TpAccount *account;
- gboolean enable;
-
- settings = accounts_dialog_model_get_selected_settings (dialog);
- if (settings == NULL)
- return;
-
- account = tpaw_account_settings_get_account (settings);
- if (account == NULL)
- return;
-
- enable = gtk_switch_get_active (sw);
-
- enable_and_connect_account (account, enable);
-}
-
-static void
-install_haze_cb (GObject *source,
- GAsyncResult *result,
- gpointer user_data)
-{
- GError *error = NULL;
-
- if (!empathy_pkg_kit_install_packages_finish (result, &error))
- {
- DEBUG ("Failed to install telepathy-haze: %s", error->message);
-
- g_error_free (error);
- }
-}
-
-static gboolean
-account_is_selected (EmpathyAccountsDialog *dialog,
- TpAccount *account)
-{
- EmpathyAccountsDialogPriv *priv = GET_PRIV (dialog);
- GtkTreeSelection *selection;
- GtkTreeModel *model;
- GtkTreeIter iter;
- TpAccount *selected_account;
-
- if (account == NULL)
- return FALSE;
-
- selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (priv->treeview));
-
- if (!gtk_tree_selection_get_selected (selection, &model, &iter))
- return FALSE;
-
- gtk_tree_model_get (model, &iter, COL_ACCOUNT, &selected_account, -1);
-
- if (selected_account != NULL)
- g_object_unref (selected_account);
-
- return account == selected_account;
-}
-
-static gboolean
-account_can_be_enabled (TpAccount *account)
-{
- TpStorageRestrictionFlags storage_restrictions;
-
- storage_restrictions = tp_account_get_storage_restrictions (account);
- if (storage_restrictions & TP_STORAGE_RESTRICTION_FLAG_CANNOT_SET_ENABLED)
- return FALSE;
-
- /* Butterfly accounts shouldn't be used any more */
- if (!tp_strdiff (tp_account_get_cm_name (account),
- "butterfly"))
- return FALSE;
-
- return TRUE;
-}
-
-static void
-accounts_dialog_update_status_infobar (EmpathyAccountsDialog *dialog,
- TpAccount *account)
-{
- EmpathyAccountsDialogPriv *priv = GET_PRIV (dialog);
- gchar *status_message = NULL;
- guint status;
- guint reason;
- guint presence;
- gboolean account_enabled;
- gboolean creating_account;
- gboolean display_switch = TRUE;
-
- /* do not update the infobar when the account is not selected */
- if (!account_is_selected (dialog, account))
- return;
-
- if (account != NULL)
- {
- gchar *text;
-
- status = tp_account_get_connection_status (account, &reason);
- presence = tp_account_get_current_presence (account, NULL, &status_message);
- account_enabled = tp_account_is_enabled (account);
- creating_account = FALSE;
-
- if (status == TP_CONNECTION_STATUS_CONNECTED &&
- (presence == TP_CONNECTION_PRESENCE_TYPE_OFFLINE ||
- presence == TP_CONNECTION_PRESENCE_TYPE_UNSET))
- /* If presence is Unset (CM doesn't implement SimplePresence) but we
- * are connected, consider ourself as Available.
- * We also check Offline because of this MC5 bug: fd.o #26060 */
- presence = TP_CONNECTION_PRESENCE_TYPE_AVAILABLE;
-
- /* set presence to offline if account is disabled
- * (else no icon is shown in infobar)*/
- if (!account_enabled)
- presence = TP_CONNECTION_PRESENCE_TYPE_OFFLINE;
-
- display_switch = account_can_be_enabled (account);
-
- text = g_markup_printf_escaped ("<b>%.50s</b>",
- tp_account_get_display_name (account));
- gtk_label_set_markup (GTK_LABEL (priv->label_name), text);
- g_free (text);
- }
- else
- {
- status = TP_CONNECTION_STATUS_DISCONNECTED;
- presence = TP_CONNECTION_PRESENCE_TYPE_OFFLINE;
- account_enabled = FALSE;
- creating_account = TRUE;
- }
-
- gtk_image_set_from_icon_name (GTK_IMAGE (priv->image_status),
- empathy_icon_name_for_presence (presence), GTK_ICON_SIZE_SMALL_TOOLBAR);
-
- /* update the enabled switch */
- g_signal_handlers_block_by_func (priv->enabled_switch,
- accounts_dialog_enable_switch_active_cb, dialog);
- gtk_switch_set_active (GTK_SWITCH (priv->enabled_switch),
- account_enabled);
- g_signal_handlers_unblock_by_func (priv->enabled_switch,
- accounts_dialog_enable_switch_active_cb, dialog);
-
- /* Display the Enable switch if account supports it */
- gtk_widget_set_visible (priv->enabled_switch, display_switch);
-
- if (account_enabled)
- {
- switch (status)
- {
- case TP_CONNECTION_STATUS_CONNECTING:
- accounts_dialog_status_infobar_set_message (dialog,
- _("Connecting…"));
- gtk_info_bar_set_message_type (GTK_INFO_BAR (priv->infobar),
- GTK_MESSAGE_INFO);
-
- gtk_spinner_start (GTK_SPINNER (priv->throbber));
- gtk_widget_show (priv->throbber);
- gtk_widget_hide (priv->image_status);
- break;
- case TP_CONNECTION_STATUS_CONNECTED:
- if (g_strcmp0 (status_message, "") == 0)
- {
- gchar *message;
-
- message = g_strdup_printf ("%s",
- empathy_presence_get_default_message (presence));
-
- accounts_dialog_status_infobar_set_message (dialog, message);
- g_free (message);
- }
- else
- {
- gchar *message;
-
- message = g_strdup_printf ("%s — %s",
- empathy_presence_get_default_message (presence),
- status_message);
-
- accounts_dialog_status_infobar_set_message (dialog, message);
- g_free (message);
- }
- gtk_info_bar_set_message_type (GTK_INFO_BAR (priv->infobar),
- GTK_MESSAGE_INFO);
-
- gtk_widget_show (priv->image_status);
- gtk_widget_hide (priv->throbber);
- break;
- case TP_CONNECTION_STATUS_DISCONNECTED:
- if (reason == TP_CONNECTION_STATUS_REASON_REQUESTED)
- {
- gchar *message;
-
- message = g_strdup_printf (_("Offline — %s"),
- empathy_account_get_error_message (account, NULL));
- gtk_info_bar_set_message_type (GTK_INFO_BAR (priv->infobar),
- GTK_MESSAGE_WARNING);
-
- accounts_dialog_status_infobar_set_message (dialog, message);
- g_free (message);
- }
- else
- {
- gchar *message;
-
- message = g_strdup_printf (_("Disconnected — %s"),
- empathy_account_get_error_message (account, NULL));
- gtk_info_bar_set_message_type (GTK_INFO_BAR (priv->infobar),
- GTK_MESSAGE_ERROR);
-
- accounts_dialog_status_infobar_set_message (dialog, message);
- g_free (message);
- }
-
- if (!g_network_monitor_get_network_available (priv->connectivity))
- accounts_dialog_status_infobar_set_message (dialog,
- _("Offline — No Network Connection"));
-
- gtk_spinner_stop (GTK_SPINNER (priv->throbber));
- gtk_widget_show (priv->image_status);
- gtk_widget_hide (priv->throbber);
- break;
- default:
- accounts_dialog_status_infobar_set_message (dialog, _("Unknown Status"));
- gtk_info_bar_set_message_type (GTK_INFO_BAR (priv->infobar),
- GTK_MESSAGE_WARNING);
-
- gtk_spinner_stop (GTK_SPINNER (priv->throbber));
- gtk_widget_hide (priv->image_status);
- gtk_widget_hide (priv->throbber);
- }
- }
- else
- {
- if (!tp_strdiff (tp_account_get_cm_name (account),
- "butterfly"))
- {
- const gchar *packages[] = { "telepathy-haze", NULL };
-
- accounts_dialog_status_infobar_set_message (dialog,
- _("This account has been disabled because it relies on an old, "
- "unsupported backend. Please install telepathy-haze and "
- "restart your session to migrate the account."));
-
- empathy_pkg_kit_install_packages_async (0, packages, NULL, NULL,
- install_haze_cb, NULL);
- }
- else
- {
- accounts_dialog_status_infobar_set_message (dialog,
- _("Offline — Account Disabled"));
- }
-
- gtk_info_bar_set_message_type (GTK_INFO_BAR (priv->infobar),
- GTK_MESSAGE_WARNING);
- gtk_spinner_stop (GTK_SPINNER (priv->throbber));
- gtk_widget_show (priv->image_status);
- gtk_widget_hide (priv->throbber);
- }
-
- gtk_widget_show (priv->label_status);
-
- if (!creating_account)
- gtk_widget_show (priv->infobar);
- else
- gtk_widget_hide (priv->infobar);
-
- g_free (status_message);
-}
-
-void
-empathy_account_dialog_cancel (EmpathyAccountsDialog *dialog)
-{
- GtkTreeView *view;
- GtkTreeModel *model;
- GtkTreeSelection *selection;
- GtkTreeIter iter;
- TpawAccountSettings *settings;
- TpAccount *account;
- EmpathyAccountsDialogPriv *priv = GET_PRIV (dialog);
-
- view = GTK_TREE_VIEW (priv->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_ACCOUNT_SETTINGS, &settings,
- COL_ACCOUNT, &account, -1);
-
- tpaw_account_widget_discard_pending_changes (priv->setting_widget);
-
- if (account == NULL)
- {
- /* We were creating an account. We remove the selected row */
- gtk_list_store_remove (GTK_LIST_STORE (model), &iter);
- }
- else
- {
- /* We were modifying an account. We discard the changes by reloading the
- * settings and the UI. */
- accounts_dialog_update_settings (dialog, settings);
- g_object_unref (account);
- }
-
- gtk_widget_set_sensitive (priv->treeview, TRUE);
- gtk_widget_set_sensitive (priv->button_add, TRUE);
- gtk_widget_set_sensitive (priv->button_remove, TRUE);
- gtk_widget_set_sensitive (priv->button_import, TRUE);
-
- if (settings != NULL)
- g_object_unref (settings);
-}
-
-static void
-empathy_account_dialog_widget_cancelled_cb (
- TpawAccountWidget *widget_object,
- EmpathyAccountsDialog *dialog)
-{
- empathy_account_dialog_cancel (dialog);
-}
-
-static gboolean
-accounts_dialog_has_valid_accounts (EmpathyAccountsDialog *dialog)
-{
- EmpathyAccountsDialogPriv *priv = GET_PRIV (dialog);
- GtkTreeModel *model;
- GtkTreeIter iter;
- gboolean creating;
-
- g_object_get (priv->setting_widget,
- "creating-account", &creating, NULL);
-
- if (!creating)
- return TRUE;
-
- model = gtk_tree_view_get_model (GTK_TREE_VIEW (priv->treeview));
-
- if (gtk_tree_model_get_iter_first (model, &iter))
- return gtk_tree_model_iter_next (model, &iter);
-
- return FALSE;
-}
-
-static void
-account_dialog_create_edit_params_dialog (EmpathyAccountsDialog *dialog)
-{
- EmpathyAccountsDialogPriv *priv = GET_PRIV (dialog);
- TpawAccountSettings *settings;
- GtkWidget *subdialog, *content_area, *align;
-
- settings = accounts_dialog_model_get_selected_settings (dialog);
- if (settings == NULL)
- return;
-
- subdialog = gtk_dialog_new_with_buttons (_("Edit Connection Parameters"),
- GTK_WINDOW (dialog),
- GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT,
- NULL, NULL);
-
- gtk_window_set_resizable (GTK_WINDOW (subdialog), FALSE);
-
- priv->setting_widget = (TpawAccountWidget *)
- tpaw_account_widget_new_for_protocol (settings, NULL, FALSE);
-
- g_object_add_weak_pointer (G_OBJECT (priv->setting_widget),
- (gpointer *) &priv->setting_widget);
-
- if (accounts_dialog_has_valid_accounts (dialog))
- tpaw_account_widget_set_other_accounts_exist (
- priv->setting_widget, TRUE);
-
- g_signal_connect (priv->setting_widget, "cancelled",
- G_CALLBACK (empathy_account_dialog_widget_cancelled_cb), dialog);
-
- g_signal_connect_swapped (priv->setting_widget, "close",
- G_CALLBACK (gtk_widget_destroy), subdialog);
-
- content_area = gtk_dialog_get_content_area (GTK_DIALOG (subdialog));
-
- align = gtk_alignment_new (0.5, 0.5, 1, 1);
- gtk_alignment_set_padding (GTK_ALIGNMENT (align), 6, 0, 6, 6);
-
- gtk_container_add (GTK_CONTAINER (align), GTK_WIDGET (priv->setting_widget));
- gtk_box_pack_start (GTK_BOX (content_area), align, TRUE, TRUE, 0);
-
- gtk_widget_show (GTK_WIDGET (priv->setting_widget));
- gtk_widget_show (align);
- gtk_widget_show (subdialog);
-}
-
-static void
-use_external_storage_provider (EmpathyAccountsDialog *self,
- TpAccount *account)
-{
- const gchar *provider;
-
- provider = tp_account_get_storage_provider (account);
- if (!tp_strdiff (provider, "com.meego.libsocialweb"))
- {
- empathy_launch_external_app ("gnome-control-center.desktop",
- "bisho.desktop", NULL);
- return;
- }
- else if (!tp_strdiff (provider, EMPATHY_GOA_PROVIDER))
- {
- empathy_launch_external_app ("gnome-online-accounts-panel.desktop",
- NULL, NULL);
- return;
- }
- else if (!tp_strdiff (provider, EMPATHY_UOA_PROVIDER))
- {
- empathy_launch_external_app ("gnome-credentials-panel.desktop",
- NULL, NULL);
- return;
- }
- else
- {
- DEBUG ("Don't know how to handle %s", provider);
- return;
- }
-}
-
-static void
-account_dialow_show_edit_params_dialog (EmpathyAccountsDialog *dialog,
- GtkButton *button)
-{
- TpawAccountSettings *settings;
- TpAccount *account;
- TpStorageRestrictionFlags storage_restrictions;
-
- settings = accounts_dialog_model_get_selected_settings (dialog);
- if (settings == NULL)
- return;
-
- account = tpaw_account_settings_get_account (settings);
- g_return_if_fail (account != NULL);
-
- storage_restrictions = tp_account_get_storage_restrictions (account);
-
- /* Empathy can only edit accounts without the Cannot_Set_Parameters flag */
- if (storage_restrictions & TP_STORAGE_RESTRICTION_FLAG_CANNOT_SET_PARAMETERS)
- {
- DEBUG ("Account is provided by an external storage provider");
-
- use_external_storage_provider (dialog, account);
- }
- else
- {
- account_dialog_create_edit_params_dialog (dialog);
- }
-}
-
-static void
-account_dialog_create_dialog_content (EmpathyAccountsDialog *dialog,
- TpawAccountSettings *settings)
-{
- EmpathyAccountsDialogPriv *priv = GET_PRIV (dialog);
- const gchar *icon_name;
- TpAccount *account;
- GtkWidget *bbox, *button;
- GtkWidget *alig;
-
- account = tpaw_account_settings_get_account (settings);
-
- priv->dialog_content = gtk_box_new (GTK_ORIENTATION_VERTICAL, 6);
- gtk_container_add (GTK_CONTAINER (priv->alignment_settings),
- priv->dialog_content);
- gtk_widget_show (priv->dialog_content);
-
- alig = gtk_alignment_new (0.5, 0, 1, 1);
- priv->user_info = tpaw_user_info_new (account);
- gtk_container_add (GTK_CONTAINER (alig), priv->user_info);
- gtk_box_pack_start (GTK_BOX (priv->dialog_content), alig, TRUE, TRUE, 0);
- gtk_widget_show (alig);
- gtk_widget_show (priv->user_info);
-
- bbox = gtk_button_box_new (GTK_ORIENTATION_HORIZONTAL);
- gtk_button_box_set_layout (GTK_BUTTON_BOX (bbox), GTK_BUTTONBOX_END);
- gtk_box_pack_end (GTK_BOX (priv->dialog_content), bbox, FALSE, TRUE, 0);
- gtk_widget_show (bbox);
-
- button = gtk_button_new_with_mnemonic (_("_Edit Connection Parameters..."));
- gtk_box_pack_start (GTK_BOX (bbox), button, FALSE, TRUE, 0);
- gtk_widget_show (button);
- g_signal_connect_swapped (button, "clicked",
- G_CALLBACK (account_dialow_show_edit_params_dialog), dialog);
-
- icon_name = tpaw_account_settings_get_icon_name (settings);
-
- if (!gtk_icon_theme_has_icon (gtk_icon_theme_get_default (),
- icon_name))
- /* show the default icon; keep this in sync with the default
- * one in empathy-accounts-dialog.ui.
- */
- icon_name = GTK_STOCK_CUT;
-
- gtk_image_set_from_icon_name (GTK_IMAGE (priv->image_type),
- icon_name, GTK_ICON_SIZE_DIALOG);
- gtk_widget_set_tooltip_text (priv->image_type,
- tpaw_protocol_name_to_display_name
- (tpaw_account_settings_get_protocol (settings)));
- gtk_widget_show (priv->image_type);
-
- accounts_dialog_update_status_infobar (dialog, account);
-}
-
-static void
-account_dialog_settings_ready_cb (TpawAccountSettings *settings,
- GParamSpec *spec,
- EmpathyAccountsDialog *dialog)
-{
- if (tpaw_account_settings_is_ready (settings))
- account_dialog_create_dialog_content (dialog, settings);
-}
-
-static void
-accounts_dialog_model_select_first (EmpathyAccountsDialog *dialog)
-{
- GtkTreeView *view;
- GtkTreeModel *model;
- GtkTreeSelection *selection;
- GtkTreeIter iter;
- EmpathyAccountsDialogPriv *priv = GET_PRIV (dialog);
-
- /* select first */
- view = GTK_TREE_VIEW (priv->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_settings (dialog, NULL);
- }
-}
-
-static gboolean
-accounts_dialog_has_pending_change (EmpathyAccountsDialog *dialog,
- TpAccount **account)
-{
- GtkTreeIter iter;
- GtkTreeModel *model;
- GtkTreeSelection *selection;
- EmpathyAccountsDialogPriv *priv = GET_PRIV (dialog);
-
- selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (priv->treeview));
-
- if (gtk_tree_selection_get_selected (selection, &model, &iter))
- gtk_tree_model_get (model, &iter, COL_ACCOUNT, account, -1);
-
- return priv->setting_widget != NULL
- && tpaw_account_widget_contains_pending_changes (
- priv->setting_widget);
-}
-
-static void
-accounts_dialog_show_question_dialog (EmpathyAccountsDialog *dialog,
- const gchar *primary_text,
- const gchar *secondary_text,
- GCallback response_callback,
- gpointer user_data,
- const gchar *first_button_text,
- ...)
-{
- va_list button_args;
- GtkWidget *message_dialog;
- const gchar *button_text;
-
- message_dialog = gtk_message_dialog_new (GTK_WINDOW (dialog),
- GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT,
- GTK_MESSAGE_QUESTION,
- GTK_BUTTONS_NONE,
- "%s", primary_text);
-
- gtk_message_dialog_format_secondary_text (
- GTK_MESSAGE_DIALOG (message_dialog), "%s", secondary_text);
-
- va_start (button_args, first_button_text);
- for (button_text = first_button_text;
- button_text;
- button_text = va_arg (button_args, const gchar *))
- {
- gint response_id;
- response_id = va_arg (button_args, gint);
-
- gtk_dialog_add_button (GTK_DIALOG (message_dialog), button_text,
- response_id);
- }
- va_end (button_args);
-
- g_signal_connect (message_dialog, "response", response_callback, user_data);
-
- gtk_widget_show (message_dialog);
-}
-
-static gchar *
-get_dialog_primary_text (TpAccount *account)
-{
- if (account != NULL)
- {
- /* Existing account */
- return g_strdup_printf (PENDING_CHANGES_QUESTION_PRIMARY_TEXT,
- tp_account_get_display_name (account));
- }
- else
- {
- /* Newly created account */
- return g_strdup (UNSAVED_NEW_ACCOUNT_QUESTION_PRIMARY_TEXT);
- }
-}
-
-static void
-accounts_dialog_button_add_clicked_cb (GtkWidget *button,
- EmpathyAccountsDialog *self)
-{
- GtkWidget *dialog;
- gint response;
-
- dialog = empathy_new_account_dialog_new (GTK_WINDOW (self));
- gtk_window_set_modal (GTK_WINDOW (dialog), TRUE);
-
- response = gtk_dialog_run (GTK_DIALOG (dialog));
-
- if (response == GTK_RESPONSE_APPLY)
- {
- TpawAccountSettings *settings;
- TpAccount *account;
-
- settings = empathy_new_account_dialog_get_settings (
- EMPATHY_NEW_ACCOUNT_DIALOG (dialog));
-
- /* The newly created account has already been added by
- * accounts_dialog_account_validity_changed_cb so we just
- * have to select it. */
- account = tpaw_account_settings_get_account (settings);
- accounts_dialog_model_set_selected (self, account);
- }
-
- gtk_widget_destroy (dialog);
-}
-
-static void
-accounts_dialog_update_settings (EmpathyAccountsDialog *dialog,
- TpawAccountSettings *settings)
-{
- EmpathyAccountsDialogPriv *priv = GET_PRIV (dialog);
-
- if (priv->settings_ready != NULL)
- {
- g_signal_handler_disconnect (priv->settings_ready,
- priv->settings_ready_id);
- priv->settings_ready = NULL;
- priv->settings_ready_id = 0;
- }
-
- if (!settings)
- {
- GtkTreeView *view;
- GtkTreeModel *model;
- GtkTreeSelection *selection;
-
- view = GTK_TREE_VIEW (priv->treeview);
- model = gtk_tree_view_get_model (view);
- selection = gtk_tree_view_get_selection (view);
-
- if (gtk_tree_model_iter_n_children (model, NULL) > 0)
- {
- /* We have configured accounts, select the first one if there
- * is no other account selected already. */
- if (!gtk_tree_selection_get_selected (selection, NULL, NULL))
- accounts_dialog_model_select_first (dialog);
-
- return;
- }
-
- /* No account selected */
- gtk_widget_hide (priv->vbox_details);
- gtk_widget_set_sensitive (priv->button_add, TRUE);
- gtk_widget_set_sensitive (priv->button_remove, FALSE);
-
- gtk_notebook_set_current_page (GTK_NOTEBOOK (priv->notebook_account),
- NOTEBOOK_PAGE_NO_PROTOCOL);
- return;
- }
-
- /* We have an account selected, destroy old settings and create a new
- * one for the account selected */
- gtk_widget_show (priv->vbox_details);
-
- if (priv->user_info != NULL)
- {
- tpaw_user_info_apply_async ((TpawUserInfo *) priv->user_info,
- NULL, NULL);
- priv->user_info = NULL;
- }
- if (priv->dialog_content)
- {
- gtk_widget_destroy (priv->dialog_content);
- priv->dialog_content = NULL;
- }
-
- if (tpaw_account_settings_is_ready (settings))
- {
- account_dialog_create_dialog_content (dialog, settings);
- }
- else
- {
- priv->settings_ready = settings;
- priv->settings_ready_id =
- g_signal_connect (settings, "notify::ready",
- G_CALLBACK (account_dialog_settings_ready_cb), dialog);
- }
-
-}
-
-static void
-accounts_dialog_name_editing_started_cb (GtkCellRenderer *renderer,
- GtkCellEditable *editable,
- gchar *path,
- EmpathyAccountsDialog *dialog)
-{
- EmpathyAccountsDialogPriv *priv = GET_PRIV (dialog);
-
- if (priv->connecting_id)
- g_source_remove (priv->connecting_id);
-
- DEBUG ("Editing account name started; stopping flashing");
-}
-
-static const gchar *
-get_status_icon_for_account (EmpathyAccountsDialog *self,
- TpAccount *account)
-{
- EmpathyAccountsDialogPriv *priv = GET_PRIV (self);
- TpConnectionStatus status;
- TpConnectionStatusReason reason;
- TpConnectionPresenceType presence;
-
- if (account == NULL)
- return empathy_icon_name_for_presence (TP_CONNECTION_PRESENCE_TYPE_OFFLINE);
-
- if (!tp_account_is_enabled (account))
- return empathy_icon_name_for_presence (TP_CONNECTION_PRESENCE_TYPE_OFFLINE);
-
- status = tp_account_get_connection_status (account, &reason);
-
- if (status == TP_CONNECTION_STATUS_DISCONNECTED)
- {
- if (reason != TP_CONNECTION_STATUS_REASON_REQUESTED)
- /* An error occured */
- return GTK_STOCK_DIALOG_ERROR;
-
- presence = TP_CONNECTION_PRESENCE_TYPE_OFFLINE;
- }
- else if (status == TP_CONNECTION_STATUS_CONNECTING)
- {
- /* Account is connecting. Display a blinking account alternating between
- * the offline icon and the requested presence. */
- if (priv->connecting_show)
- presence = tp_account_get_requested_presence (account, NULL, NULL);
- else
- presence = TP_CONNECTION_PRESENCE_TYPE_OFFLINE;
- }
- else
- {
- /* status == TP_CONNECTION_STATUS_CONNECTED */
- presence = tp_account_get_current_presence (account, NULL, NULL);
-
- /* If presence is Unset (CM doesn't implement SimplePresence),
- * display the 'available' icon.
- * We also check Offline because of this MC5 bug: fd.o #26060 */
- if (presence == TP_CONNECTION_PRESENCE_TYPE_OFFLINE ||
- presence == TP_CONNECTION_PRESENCE_TYPE_UNSET)
- presence = TP_CONNECTION_PRESENCE_TYPE_AVAILABLE;
- }
-
- return empathy_icon_name_for_presence (presence);
-}
-
-static GdkPixbuf *
-ensure_icon (EmpathyAccountsDialog *self,
- const gchar *icon_name)
-{
- EmpathyAccountsDialogPriv *priv = GET_PRIV (self);
- GdkPixbuf *pixbuf;
-
- pixbuf = g_hash_table_lookup (priv->icons_cache, icon_name);
- if (pixbuf == NULL)
- {
- pixbuf = tpaw_pixbuf_from_icon_name (icon_name, GTK_ICON_SIZE_BUTTON);
-
- if (pixbuf == NULL)
- return NULL;
-
- g_hash_table_insert (priv->icons_cache, g_strdup (icon_name),
- pixbuf);
- }
-
- return g_object_ref (pixbuf);
-}
-
-static void
-accounts_dialog_model_status_pixbuf_data_func (GtkTreeViewColumn *tree_column,
- GtkCellRenderer *cell,
- GtkTreeModel *model,
- GtkTreeIter *iter,
- EmpathyAccountsDialog *dialog)
-{
- TpAccount *account;
- const gchar *icon_name;
- GdkPixbuf *pixbuf;
-
- gtk_tree_model_get (model, iter, COL_ACCOUNT, &account, -1);
-
- icon_name = get_status_icon_for_account (dialog, account);
- pixbuf = ensure_icon (dialog, icon_name);
-
- g_object_set (cell,
- "pixbuf", pixbuf,
- NULL);
-
- if (account != NULL)
- g_object_unref (account);
-
- if (pixbuf != NULL)
- g_object_unref (pixbuf);
-}
-
-static void
-accounts_dialog_model_protocol_pixbuf_data_func (GtkTreeViewColumn *tree_column,
- GtkCellRenderer *cell,
- GtkTreeModel *model,
- GtkTreeIter *iter,
- EmpathyAccountsDialog *dialog)
-{
- TpawAccountSettings *settings;
- gchar *icon_name;
- GdkPixbuf *pixbuf;
- TpConnectionStatus status;
-
- gtk_tree_model_get (model, iter,
- COL_STATUS, &status,
- COL_ACCOUNT_SETTINGS, &settings,
- -1);
-
- icon_name = tpaw_account_settings_get_icon_name (settings);
- pixbuf = ensure_icon (dialog, icon_name);
-
- g_object_set (cell,
- "visible", TRUE,
- "pixbuf", pixbuf,
- NULL);
-
- g_object_unref (settings);
-
- if (pixbuf)
- g_object_unref (pixbuf);
-}
-
-static gboolean
-accounts_dialog_row_changed_foreach (GtkTreeModel *model,
- GtkTreePath *path,
- GtkTreeIter *iter,
- gpointer user_data)
-{
- TpAccount *account;
-
- gtk_tree_model_get (model, iter, COL_ACCOUNT, &account, -1);
-
- if (account == NULL)
- return FALSE;
-
- if (tp_account_get_connection_status (account, NULL) ==
- TP_CONNECTION_STATUS_CONNECTING)
- {
- /* Only update the row where we have a connecting account as that's the
- * ones having a blinking icon. */
- gtk_tree_model_row_changed (model, path, iter);
- }
-
- g_object_unref (account);
- return FALSE;
-}
-
-static gboolean
-accounts_dialog_flash_connecting_cb (EmpathyAccountsDialog *dialog)
-{
- GtkTreeView *view;
- GtkTreeModel *model;
- EmpathyAccountsDialogPriv *priv = GET_PRIV (dialog);
-
- priv->connecting_show = !priv->connecting_show;
-
- view = GTK_TREE_VIEW (priv->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_name_edited_cb (GtkCellRendererText *renderer,
- gchar *path,
- gchar *new_text,
- EmpathyAccountsDialog *dialog)
-{
- TpawAccountSettings *settings;
- GtkTreeModel *model;
- GtkTreePath *treepath;
- GtkTreeIter iter;
- EmpathyAccountsDialogPriv *priv = GET_PRIV (dialog);
- gboolean connecting;
-
- empathy_account_manager_get_accounts_connected (&connecting);
-
- if (connecting)
- {
- priv->connecting_id = g_timeout_add (FLASH_TIMEOUT,
- (GSourceFunc) accounts_dialog_flash_connecting_cb,
- dialog);
- }
-
- model = gtk_tree_view_get_model (GTK_TREE_VIEW (priv->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_SETTINGS, &settings,
- -1);
- gtk_list_store_set (GTK_LIST_STORE (model), &iter,
- COL_NAME, new_text,
- -1);
- gtk_tree_path_free (treepath);
-
- tpaw_account_settings_set_display_name_async (settings, new_text,
- NULL, NULL);
- g_object_set (settings, "display-name-overridden", TRUE, NULL);
- g_object_unref (settings);
-}
-
-static void
-accounts_dialog_delete_account_response_cb (GtkDialog *message_dialog,
- gint response_id,
- gpointer user_data)
-{
- TpAccount *account;
- GtkTreeModel *model;
- GtkTreeIter iter;
- GtkTreeSelection *selection;
- EmpathyAccountsDialog *account_dialog = EMPATHY_ACCOUNTS_DIALOG (user_data);
- EmpathyAccountsDialogPriv *priv = GET_PRIV (account_dialog);
-
- if (response_id == GTK_RESPONSE_YES)
- {
- selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (priv->treeview));
-
- if (!gtk_tree_selection_get_selected (selection, &model, &iter))
- return;
-
- gtk_tree_model_get (model, &iter, COL_ACCOUNT, &account, -1);
-
- if (account != NULL)
- {
- tp_account_remove_async (account, NULL, NULL);
- g_object_unref (account);
- account = NULL;
- }
-
- /* No need to call accounts_dialog_model_selection_changed while
- * removing as we are going to call accounts_dialog_model_select_first
- * right after which will update the selection. */
- g_signal_handlers_block_by_func (selection,
- accounts_dialog_model_selection_changed, account_dialog);
-
- gtk_list_store_remove (GTK_LIST_STORE (model), &iter);
-
- g_signal_handlers_unblock_by_func (selection,
- accounts_dialog_model_selection_changed, account_dialog);
-
- accounts_dialog_model_select_first (account_dialog);
- }
-
- gtk_widget_destroy (GTK_WIDGET (message_dialog));
-}
-
-static void
-accounts_dialog_remove_account_iter (EmpathyAccountsDialog *dialog,
- GtkTreeIter *iter)
-{
- EmpathyAccountsDialogPriv *priv = GET_PRIV (dialog);
- TpAccount *account;
- GtkTreeModel *model;
- gchar *question_dialog_primary_text;
-
- model = gtk_tree_view_get_model (GTK_TREE_VIEW (priv->treeview));
-
- gtk_tree_model_get (model, iter, COL_ACCOUNT, &account, -1);
-
- if (account == NULL || !tp_account_is_valid (account))
- {
- if (account != NULL)
- g_object_unref (account);
- gtk_list_store_remove (GTK_LIST_STORE (model), iter);
- accounts_dialog_model_select_first (dialog);
- return;
- }
-
- question_dialog_primary_text = g_strdup_printf (
- _("Do you want to remove %.50s from your computer?"),
- tp_account_get_display_name (account));
-
- accounts_dialog_show_question_dialog (dialog, question_dialog_primary_text,
- _("This will not remove your account on the server."),
- G_CALLBACK (accounts_dialog_delete_account_response_cb),
- dialog,
- GTK_STOCK_CANCEL, GTK_RESPONSE_NO,
- GTK_STOCK_REMOVE, GTK_RESPONSE_YES, NULL);
-
- g_free (question_dialog_primary_text);
- g_object_unref (account);
-}
-
-static void
-accounts_dialog_button_remove_clicked_cb (GtkWidget *button,
- EmpathyAccountsDialog *dialog)
-{
- EmpathyAccountsDialogPriv *priv = GET_PRIV (dialog);
- GtkTreeView *view;
- GtkTreeSelection *selection;
- GtkTreeIter iter;
-
- view = GTK_TREE_VIEW (priv->treeview);
- selection = gtk_tree_view_get_selection (view);
- if (!gtk_tree_selection_get_selected (selection, NULL, &iter))
- return;
-
- accounts_dialog_remove_account_iter (dialog, &iter);
-}
-
-static void
-accounts_dialog_model_add_columns (EmpathyAccountsDialog *dialog)
-{
- GtkTreeView *view;
- GtkTreeViewColumn *column;
- GtkCellRenderer *cell;
- EmpathyAccountsDialogPriv *priv = GET_PRIV (dialog);
-
- view = GTK_TREE_VIEW (priv->treeview);
- gtk_tree_view_set_headers_visible (view, FALSE);
-
- /* Account column */
- column = gtk_tree_view_column_new ();
- gtk_tree_view_column_set_expand (column, TRUE);
- gtk_tree_view_append_column (view, column);
-
- /* Status 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_status_pixbuf_data_func,
- dialog,
- NULL);
-
- /* Protocol 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_protocol_pixbuf_data_func,
- dialog,
- NULL);
-
- /* Name renderer */
- priv->name_renderer = gtk_cell_renderer_text_new ();
- g_object_set (priv->name_renderer,
- "ellipsize", PANGO_ELLIPSIZE_END,
- "width-chars", 25,
- "editable", TRUE,
- NULL);
- gtk_tree_view_column_pack_start (column, priv->name_renderer, TRUE);
- gtk_tree_view_column_add_attribute (column, priv->name_renderer,
- "text", COL_NAME);
- g_signal_connect (priv->name_renderer, "edited",
- G_CALLBACK (accounts_dialog_name_edited_cb),
- dialog);
- g_signal_connect (priv->name_renderer, "editing-started",
- G_CALLBACK (accounts_dialog_name_editing_started_cb),
- dialog);
- g_object_set (priv->name_renderer, "ypad", 4, NULL);
-}
-
-static TpawAccountSettings *
-accounts_dialog_model_get_selected_settings (EmpathyAccountsDialog *dialog)
-{
- GtkTreeView *view;
- GtkTreeModel *model;
- GtkTreeSelection *selection;
- GtkTreeIter iter;
- TpawAccountSettings *settings;
- EmpathyAccountsDialogPriv *priv = GET_PRIV (dialog);
-
- view = GTK_TREE_VIEW (priv->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_SETTINGS, &settings, -1);
-
- return settings;
-}
-
-static void
-accounts_dialog_model_selection_changed (GtkTreeSelection *selection,
- EmpathyAccountsDialog *dialog)
-{
- EmpathyAccountsDialogPriv *priv = GET_PRIV (dialog);
- TpawAccountSettings *settings;
- GtkTreeModel *model;
- GtkTreeIter iter;
- gboolean is_selection;
- gboolean creating = FALSE;
-
- is_selection = gtk_tree_selection_get_selected (selection, &model, &iter);
-
- settings = accounts_dialog_model_get_selected_settings (dialog);
- accounts_dialog_update_settings (dialog, settings);
-
- if (settings != NULL)
- g_object_unref (settings);
-
- if (priv->setting_widget != NULL)
- {
- g_object_get (priv->setting_widget,
- "creating-account", &creating, NULL);
- }
-
- /* Update remove button sensitivity */
- gtk_widget_set_sensitive (priv->button_remove, is_selection && !creating &&
- !priv->loading);
-}
-
-static void
-accounts_dialog_selection_change_response_cb (GtkDialog *message_dialog,
- gint response_id,
- gpointer *user_data)
-{
- EmpathyAccountsDialog *dialog = EMPATHY_ACCOUNTS_DIALOG (user_data);
- EmpathyAccountsDialogPriv *priv = GET_PRIV (dialog);
-
- gtk_widget_destroy (GTK_WIDGET (message_dialog));
-
- if (response_id == GTK_RESPONSE_YES && priv->destination_row != NULL)
- {
- /* The user wants to lose unsaved changes to the currently selected
- * account and select another account. We discard the changes and
- * select the other account. */
- GtkTreePath *path;
- GtkTreeSelection *selection;
-
- priv->force_change_row = TRUE;
- tpaw_account_widget_discard_pending_changes (
- priv->setting_widget);
-
- path = gtk_tree_row_reference_get_path (priv->destination_row);
- selection = gtk_tree_view_get_selection (
- GTK_TREE_VIEW (priv->treeview));
-
- if (path != NULL)
- {
- /* This will trigger a call to
- * accounts_dialog_account_selection_change() */
- gtk_tree_selection_select_path (selection, path);
- gtk_tree_path_free (path);
- }
-
- gtk_tree_row_reference_free (priv->destination_row);
- }
- else
- {
- priv->force_change_row = FALSE;
- }
-}
-
-static gboolean
-accounts_dialog_account_selection_change (GtkTreeSelection *selection,
- GtkTreeModel *model,
- GtkTreePath *path,
- gboolean path_currently_selected,
- gpointer data)
-{
- TpAccount *account = NULL;
- EmpathyAccountsDialog *dialog = EMPATHY_ACCOUNTS_DIALOG (data);
- EmpathyAccountsDialogPriv *priv = GET_PRIV (dialog);
- gboolean ret;
-
- if (priv->force_change_row)
- {
- /* We came back here because the user wants to discard changes to his
- * modified account. The changes have already been discarded so we
- * just change the selected row. */
- priv->force_change_row = FALSE;
- return TRUE;
- }
-
- if (accounts_dialog_has_pending_change (dialog, &account))
- {
- /* The currently selected account has some unsaved changes. We ask
- * the user if he really wants to lose his changes and select another
- * account */
- gchar *question_dialog_primary_text = get_dialog_primary_text (account);
- priv->destination_row = gtk_tree_row_reference_new (model, path);
-
- accounts_dialog_show_question_dialog (dialog,
- question_dialog_primary_text,
- _("You are about to select another account, which will discard\n"
- "your changes. Are you sure you want to proceed?"),
- G_CALLBACK (accounts_dialog_selection_change_response_cb),
- dialog,
- GTK_STOCK_CANCEL, GTK_RESPONSE_NO,
- GTK_STOCK_DISCARD, GTK_RESPONSE_YES, NULL);
-
- g_free (question_dialog_primary_text);
- ret = FALSE;
- }
- else
- {
- ret = TRUE;
- }
-
- if (account != NULL)
- g_object_unref (account);
-
- return ret;
-}
-
-static void
-accounts_dialog_model_setup (EmpathyAccountsDialog *dialog)
-{
- GtkListStore *store;
- GtkTreeSelection *selection;
- EmpathyAccountsDialogPriv *priv = GET_PRIV (dialog);
-
- store = gtk_list_store_new (COL_COUNT,
- G_TYPE_STRING, /* name */
- G_TYPE_UINT, /* status */
- TP_TYPE_ACCOUNT, /* account */
- TPAW_TYPE_ACCOUNT_SETTINGS); /* settings */
-
- gtk_tree_view_set_model (GTK_TREE_VIEW (priv->treeview),
- GTK_TREE_MODEL (store));
-
- selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (priv->treeview));
- gtk_tree_selection_set_mode (selection, GTK_SELECTION_SINGLE);
- gtk_tree_selection_set_select_function (selection,
- accounts_dialog_account_selection_change, dialog, NULL);
-
- 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 gboolean
-accounts_dialog_get_account_iter (EmpathyAccountsDialog *dialog,
- TpAccount *account,
- GtkTreeIter *iter)
-{
- GtkTreeView *view;
- GtkTreeModel *model;
- gboolean ok;
- EmpathyAccountsDialogPriv *priv = GET_PRIV (dialog);
-
- /* Update the status in the model */
- view = GTK_TREE_VIEW (priv->treeview);
- 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))
- {
- TpAccount *this_account;
- gboolean equal;
-
- gtk_tree_model_get (model, iter,
- COL_ACCOUNT, &this_account,
- -1);
-
- equal = (this_account == account);
- g_object_unref (this_account);
-
- if (equal)
- return TRUE;
- }
-
- return FALSE;
-}
-
-static void
-select_and_scroll_to_iter (EmpathyAccountsDialog *dialog,
- GtkTreeIter *iter)
-{
- EmpathyAccountsDialogPriv *priv = GET_PRIV (dialog);
- GtkTreeSelection *selection;
- GtkTreePath *path;
- GtkTreeModel *model;
-
- selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (priv->treeview));
-
- gtk_tree_selection_select_iter (selection, iter);
-
- model = gtk_tree_view_get_model (GTK_TREE_VIEW (priv->treeview));
- path = gtk_tree_model_get_path (model, iter);
-
- gtk_tree_view_scroll_to_cell (GTK_TREE_VIEW (priv->treeview), path, NULL,
- TRUE, 0, 0.5);
-
- gtk_tree_path_free (path);
-}
-
-static void
-accounts_dialog_model_set_selected (EmpathyAccountsDialog *dialog,
- TpAccount *account)
-{
- GtkTreeIter iter;
-
- if (accounts_dialog_get_account_iter (dialog, account, &iter))
- select_and_scroll_to_iter (dialog, &iter);
-}
-
-static void
-accounts_dialog_treeview_enabled_cb (GtkMenuItem *item,
- TpAccount *account)
-{
- gboolean enabled;
-
- enabled = tp_account_is_enabled (account);
-
- enable_and_connect_account (account, !enabled);
-}
-
-static void
-accounts_dialog_treeview_rename_cb (GtkMenuItem *item,
- EmpathyAccountsDialog *self)
-{
- EmpathyAccountsDialogPriv *priv = GET_PRIV (self);
- GtkTreePath *path;
- GtkTreeIter iter;
- GtkTreeSelection *selection;
- GtkTreeModel *model;
-
- selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (priv->treeview));
- if (!gtk_tree_selection_get_selected (selection, &model, &iter))
- return;
- path = gtk_tree_model_get_path (model, &iter);
-
- g_object_set (G_OBJECT (priv->name_renderer), "editable", TRUE, NULL);
-
- gtk_widget_grab_focus (GTK_WIDGET (priv->treeview));
- gtk_tree_view_set_cursor (GTK_TREE_VIEW (priv->treeview), path,
- gtk_tree_view_get_column (GTK_TREE_VIEW (priv->treeview), 0), TRUE);
-
- gtk_tree_path_free (path);
-}
-
-static gboolean
-accounts_dialog_treeview_button_press_event_cb (GtkTreeView *view,
- GdkEventButton *event,
- EmpathyAccountsDialog *dialog)
-{
- EmpathyAccountsDialogPriv *priv = GET_PRIV (dialog);
- TpAccount *account = NULL;
- GtkTreeModel *model = NULL;
- GtkTreePath *path = NULL;
- GtkTreeIter iter;
- GtkWidget *menu;
- GtkWidget *item;
-
- /* ignore multiple clicks */
- if (event->type != GDK_BUTTON_PRESS)
- return TRUE;
-
- if (event->button != 3)
- goto finally;
-
- /* Selection is not yet set, so we have to get account from event position */
- model = gtk_tree_view_get_model (GTK_TREE_VIEW (priv->treeview));
- if (!gtk_tree_view_get_path_at_pos (GTK_TREE_VIEW (priv->treeview),
- event->x, event->y, &path, NULL, NULL, NULL))
- goto finally;
-
- if (!gtk_tree_model_get_iter (model, &iter, path))
- goto finally;
-
- gtk_tree_model_get (model, &iter, COL_ACCOUNT, &account, -1);
-
- /* Create the menu */
- menu = empathy_context_menu_new (GTK_WIDGET (view));
-
- /* Menu item: to enabled/disable the account */
- item = gtk_check_menu_item_new_with_mnemonic (_("_Enabled"));
-
- gtk_menu_shell_append (GTK_MENU_SHELL (menu), item);
-
- if (account_can_be_enabled (account))
- {
- gboolean active;
-
- active = tp_account_is_enabled (account);
- gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (item),
- active);
-
- tp_g_signal_connect_object (item, "activate",
- G_CALLBACK (accounts_dialog_treeview_enabled_cb), account, 0);
- }
- else
- {
- gtk_widget_set_sensitive (item, FALSE);
- }
-
- gtk_widget_show (item);
-
- /* Menu item: Rename */
- item = gtk_menu_item_new_with_mnemonic (_("Rename"));
- gtk_menu_shell_append (GTK_MENU_SHELL (menu), item);
-
- tp_g_signal_connect_object (item, "activate",
- G_CALLBACK (accounts_dialog_treeview_rename_cb), dialog, 0);
-
- gtk_widget_show (item);
-
- /* FIXME: Add here presence items, to be able to set per-account presence */
-
- /* Popup menu */
- gtk_menu_popup (GTK_MENU (menu), NULL, NULL, NULL, NULL,
- event->button, event->time);
-
-finally:
- tp_clear_object (&account);
- gtk_tree_path_free (path);
-
- return FALSE;
-}
-
-static void
-reload_account_widget (EmpathyAccountsDialog *self)
-{
- TpawAccountSettings *settings;
-
- settings = accounts_dialog_model_get_selected_settings (self);
- accounts_dialog_update_settings (self, settings);
-}
-
-static void
-accounts_dialog_connection_changed_cb (TpAccount *account,
- guint old_status,
- guint current,
- guint reason,
- gchar *dbus_error_name,
- GHashTable *details,
- EmpathyAccountsDialog *dialog)
-{
- GtkTreeModel *model;
- GtkTreeIter iter;
- gboolean found;
- EmpathyAccountsDialogPriv *priv = GET_PRIV (dialog);
-
- /* Update the status-infobar in the details view */
- accounts_dialog_update_status_infobar (dialog, account);
-
- /* Update the status in the model */
- model = gtk_tree_view_get_model (GTK_TREE_VIEW (priv->treeview));
-
- if (accounts_dialog_get_account_iter (dialog, account, &iter))
- {
- GtkTreePath *path;
-
- gtk_list_store_set (GTK_LIST_STORE (model), &iter,
- COL_STATUS, current,
- -1);
-
- path = gtk_tree_model_get_path (model, &iter);
- gtk_tree_model_row_changed (model, path, &iter);
- gtk_tree_path_free (path);
- }
-
- empathy_account_manager_get_accounts_connected (&found);
-
- if (!found && priv->connecting_id)
- {
- g_source_remove (priv->connecting_id);
- priv->connecting_id = 0;
- }
-
- if (found && !priv->connecting_id)
- priv->connecting_id = g_timeout_add (FLASH_TIMEOUT,
- (GSourceFunc) accounts_dialog_flash_connecting_cb,
- dialog);
-}
-
-static void
-update_account_in_treeview (EmpathyAccountsDialog *self,
- TpAccount *account)
-{
- EmpathyAccountsDialogPriv *priv = GET_PRIV (self);
- GtkTreeIter iter;
- GtkTreeModel *model;
-
- model = gtk_tree_view_get_model (GTK_TREE_VIEW (priv->treeview));
- if (accounts_dialog_get_account_iter (self, account, &iter))
- {
- GtkTreePath *path;
-
- path = gtk_tree_model_get_path (model, &iter);
- gtk_tree_model_row_changed (model, path, &iter);
- gtk_tree_path_free (path);
- }
-}
-
-static void
-accounts_dialog_presence_changed_cb (TpAccount *account,
- guint presence,
- gchar *status,
- gchar *status_message,
- EmpathyAccountsDialog *dialog)
-{
- /* Update the status-infobar in the details view */
- accounts_dialog_update_status_infobar (dialog, account);
-
- update_account_in_treeview (dialog, account);
-}
-
-static void
-accounts_dialog_account_display_name_changed_cb (TpAccount *account,
- GParamSpec *pspec,
- EmpathyAccountsDialog *dialog)
-{
- EmpathyAccountsDialogPriv *priv = GET_PRIV (dialog);
- GtkTreeModel *model;
- GtkTreeIter iter;
-
- model = gtk_tree_view_get_model (GTK_TREE_VIEW (priv->treeview));
- if (accounts_dialog_get_account_iter (dialog, account, &iter))
- {
- gtk_list_store_set (GTK_LIST_STORE (model), &iter,
- COL_NAME, tp_account_get_display_name (account),
- -1);
- }
-
- accounts_dialog_update_status_infobar (dialog, account);
-}
-
-static void
-conn_prepare_cb (GObject *source,
- GAsyncResult *result,
- gpointer user_data)
-{
- EmpathyAccountsDialog *self = user_data;
-
- reload_account_widget (self);
-}
-
-static void
-accounts_dialog_notify_connection_cb (TpAccount *account,
- GParamSpec *spec,
- EmpathyAccountsDialog *self)
-{
- TpConnection *conn;
- if (!account_is_selected (self, account))
- return;
-
- conn = tp_account_get_connection (account);
- if (conn == NULL)
- {
- reload_account_widget (self);
- }
- else
- {
- /* Wait for this feature so TpConnection will have fetch the
- * self handle */
- GQuark features[] = { TP_CONNECTION_FEATURE_CONNECTED, 0 };
-
- tp_proxy_prepare_async (conn, features, conn_prepare_cb, self);
- }
-}
-
-static void
-accounts_dialog_add_account (EmpathyAccountsDialog *dialog,
- TpAccount *account)
-{
- TpawAccountSettings *settings;
- GtkTreeModel *model;
- GtkTreeIter iter;
- TpConnectionStatus status;
- const gchar *name;
- EmpathyAccountsDialogPriv *priv = GET_PRIV (dialog);
- gboolean selected = FALSE;
- GtkTreeSelection *selection;
-
- model = gtk_tree_view_get_model (GTK_TREE_VIEW (priv->treeview));
- status = tp_account_get_connection_status (account, NULL);
- name = tp_account_get_display_name (account);
-
- settings = tpaw_account_settings_new_for_account (account);
-
- selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (priv->treeview));
-
- if (!accounts_dialog_get_account_iter (dialog, account, &iter))
- {
- /* Select the account if it's the first added */
- if (gtk_tree_selection_count_selected_rows (selection) == 0)
- selected = TRUE;
-
- gtk_list_store_insert_with_values (GTK_LIST_STORE (model), &iter, -1,
- COL_NAME, name,
- COL_STATUS, status,
- COL_ACCOUNT, account,
- COL_ACCOUNT_SETTINGS, settings,
- -1);
- }
- else
- {
- selected = gtk_tree_selection_iter_is_selected (selection, &iter);
-
- gtk_list_store_set (GTK_LIST_STORE (model), &iter,
- COL_NAME, name,
- COL_STATUS, status,
- COL_ACCOUNT, account,
- COL_ACCOUNT_SETTINGS, settings,
- -1);
- }
-
- if (selected)
- {
- /* We just modified the selected account. Its display name may have been
- * changed and so it's place in the treeview. Scroll to it so it stays
- * visible. */
- select_and_scroll_to_iter (dialog, &iter);
- }
-
- accounts_dialog_connection_changed_cb (account,
- 0,
- status,
- TP_CONNECTION_STATUS_REASON_NONE_SPECIFIED,
- NULL,
- NULL,
- dialog);
-
- tp_g_signal_connect_object (account, "notify::display-name",
- G_CALLBACK (accounts_dialog_account_display_name_changed_cb),
- dialog, 0);
-
- tp_g_signal_connect_object (account, "status-changed",
- G_CALLBACK (accounts_dialog_connection_changed_cb), dialog, 0);
- tp_g_signal_connect_object (account, "presence-changed",
- G_CALLBACK (accounts_dialog_presence_changed_cb), dialog, 0);
- tp_g_signal_connect_object (account, "notify::connection",
- G_CALLBACK (accounts_dialog_notify_connection_cb), dialog, 0);
-
- g_object_unref (settings);
-}
-
-static void
-accounts_dialog_account_validity_changed_cb (TpAccountManager *manager,
- TpAccount *account,
- gboolean valid,
- EmpathyAccountsDialog *dialog)
-{
- accounts_dialog_add_account (dialog, account);
-}
-
-static void
-accounts_dialog_accounts_model_row_inserted_cb (GtkTreeModel *model,
- GtkTreePath *path,
- GtkTreeIter *iter,
- EmpathyAccountsDialog *dialog)
-{
- EmpathyAccountsDialogPriv *priv = GET_PRIV (dialog);
-
- if (priv->setting_widget != NULL &&
- accounts_dialog_has_valid_accounts (dialog))
- {
- tpaw_account_widget_set_other_accounts_exist (
- priv->setting_widget, TRUE);
- }
-}
-
-static void
-accounts_dialog_accounts_model_row_deleted_cb (GtkTreeModel *model,
- GtkTreePath *path,
- EmpathyAccountsDialog *dialog)
-{
- EmpathyAccountsDialogPriv *priv = GET_PRIV (dialog);
-
- if (priv->setting_widget != NULL &&
- !accounts_dialog_has_valid_accounts (dialog))
- {
- tpaw_account_widget_set_other_accounts_exist (
- priv->setting_widget, FALSE);
- }
-}
-
-static void
-accounts_dialog_account_removed_cb (TpAccountManager *manager,
- TpAccount *account,
- EmpathyAccountsDialog *dialog)
-{
- GtkTreeIter iter;
- EmpathyAccountsDialogPriv *priv = GET_PRIV (dialog);
-
- if (accounts_dialog_get_account_iter (dialog, account, &iter))
- {
- gtk_list_store_remove (GTK_LIST_STORE (
- gtk_tree_view_get_model (GTK_TREE_VIEW (priv->treeview))), &iter);
- }
-}
-
-static void
-enable_or_disable_account (EmpathyAccountsDialog *dialog,
- TpAccount *account,
- gboolean enabled)
-{
- /* Update the status-infobar in the details view */
- accounts_dialog_update_status_infobar (dialog, account);
-
- DEBUG ("Account %s is now %s",
- tp_account_get_display_name (account),
- enabled ? "enabled" : "disabled");
-}
-
-static void
-accounts_dialog_account_disabled_cb (TpAccountManager *manager,
- TpAccount *account,
- EmpathyAccountsDialog *dialog)
-{
- enable_or_disable_account (dialog, account, FALSE);
- update_account_in_treeview (dialog, account);
-}
-
-static void
-accounts_dialog_account_enabled_cb (TpAccountManager *manager,
- TpAccount *account,
- EmpathyAccountsDialog *dialog)
-{
- enable_or_disable_account (dialog, account, TRUE);
-}
-
-static GtkWidget *
-display_import_dialog (EmpathyAccountsDialog *dialog)
-{
- EmpathyAccountsDialogPriv *priv = GET_PRIV (dialog);
- GtkWidget *import_dialog;
-
- import_dialog = empathy_import_dialog_new (GTK_WINDOW (dialog),
- FALSE, priv->cms);
- gtk_widget_show (import_dialog);
-
- return import_dialog;
-}
-
-static void
-accounts_dialog_button_import_clicked_cb (GtkWidget *button,
- EmpathyAccountsDialog *dialog)
-{
- display_import_dialog (dialog);
-}
-
-static void
-accounts_dialog_close_response_cb (GtkDialog *message_dialog,
- gint response_id,
- gpointer user_data)
-{
- GtkWidget *account_dialog = GTK_WIDGET (user_data);
-
- gtk_widget_destroy (GTK_WIDGET (message_dialog));
-
- if (response_id == GTK_RESPONSE_YES)
- gtk_widget_destroy (account_dialog);
-}
-
-static gboolean
-accounts_dialog_delete_event_cb (GtkWidget *widget,
- GdkEvent *event,
- EmpathyAccountsDialog *dialog)
-{
- /* we maunally handle responses to delete events */
- return TRUE;
-}
-
-static void
-accounts_dialog_set_selected_account (EmpathyAccountsDialog *dialog,
- TpAccount *account)
-{
- GtkTreeIter iter;
-
- if (accounts_dialog_get_account_iter (dialog, account, &iter))
- select_and_scroll_to_iter (dialog, &iter);
-}
-
-static void
-salut_valid_cb (GtkWidget *widget,
- gboolean valid,
- GtkWidget *button)
-{
- gtk_widget_set_sensitive (button, valid);
-}
-
-static void
-maybe_show_salut_dialog (EmpathyAccountsDialog *self)
-{
- EmpathyAccountsDialogPriv *priv = GET_PRIV (self);
- GtkWidget *dialog, *widget, *content, *button;
- gint response;
-
- if (!empathy_local_xmpp_assistant_widget_should_create_account (
- priv->account_manager))
- return;
-
- widget = empathy_local_xmpp_assistant_widget_new ();
- gtk_widget_show (widget);
-
- dialog = gtk_dialog_new ();
-
- gtk_window_set_modal (GTK_WINDOW (dialog), TRUE);
-
- gtk_dialog_add_button (GTK_DIALOG (dialog), _("_Skip"),
- GTK_RESPONSE_NO);
-
- button = gtk_dialog_add_button (GTK_DIALOG (dialog),
- _("_Connect"), GTK_RESPONSE_YES);
- gtk_widget_set_sensitive (button,
- empathy_local_xmpp_assistant_widget_is_valid (
- EMPATHY_LOCAL_XMPP_ASSISTANT_WIDGET (widget)));
-
- g_signal_connect (widget, "valid", G_CALLBACK (salut_valid_cb),
- button);
-
- content = gtk_dialog_get_content_area (GTK_DIALOG (dialog));
- gtk_box_pack_start (GTK_BOX (content), widget, TRUE, TRUE, 0);
-
- response = gtk_dialog_run (GTK_DIALOG (dialog));
-
- if (response == GTK_RESPONSE_YES)
- {
- empathy_local_xmpp_assistant_widget_create_account (
- EMPATHY_LOCAL_XMPP_ASSISTANT_WIDGET (widget));
- }
-
- gtk_widget_destroy (dialog);
-}
-
-static void
-import_dialog_response_cb (GtkDialog *dialog,
- gint response_id,
- EmpathyAccountsDialog *self)
-{
- maybe_show_salut_dialog (self);
-}
-
-static void
-maybe_show_import_dialog (EmpathyAccountsDialog *self)
-{
- EmpathyAccountsDialogPriv *priv = GET_PRIV (self);
- GtkWidget *dialog;
-
- if (empathy_accounts_has_non_salut_accounts (priv->account_manager))
- return;
-
- if (!empathy_import_accounts_to_import ())
- {
- maybe_show_salut_dialog (self);
- return;
- }
-
- dialog = display_import_dialog (self);
-
- tp_g_signal_connect_object (dialog, "response",
- G_CALLBACK (import_dialog_response_cb), self, 0);
-}
-
-static void
-finished_loading (EmpathyAccountsDialog *self)
-{
- EmpathyAccountsDialogPriv *priv = GET_PRIV (self);
- GtkTreeSelection *selection;
- gboolean has_selected;
-
- priv->loading = FALSE;
-
- gtk_widget_set_sensitive (priv->button_add, TRUE);
- gtk_widget_set_sensitive (priv->button_import, TRUE);
- gtk_widget_set_sensitive (priv->treeview, TRUE);
-
- /* Sensitive the remove button if there is an account selected */
- selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (priv->treeview));
- has_selected = gtk_tree_selection_get_selected (selection, NULL, NULL);
- gtk_widget_set_sensitive (priv->button_remove, has_selected);
-
- gtk_spinner_stop (GTK_SPINNER (priv->spinner));
- gtk_notebook_set_current_page (GTK_NOTEBOOK (priv->notebook_account),
- NOTEBOOK_PAGE_ACCOUNT);
-
- maybe_show_import_dialog (self);
-}
-
-static void
-accounts_dialog_cms_prepare_cb (GObject *source,
- GAsyncResult *result,
- gpointer user_data)
-{
- TpawConnectionManagers *cms = TPAW_CONNECTION_MANAGERS (source);
- EmpathyAccountsDialog *dialog = user_data;
- EmpathyAccountsDialogPriv *priv = GET_PRIV (dialog);
-
- if (!tpaw_connection_managers_prepare_finish (cms, result, NULL))
- goto out;
-
- /* No need to update the settings if we are already preparing one */
- if (priv->settings_ready == NULL)
- accounts_dialog_update_settings (dialog, NULL);
-
- if (priv->initial_selection != NULL)
- {
- accounts_dialog_set_selected_account (dialog, priv->initial_selection);
- g_object_unref (priv->initial_selection);
- priv->initial_selection = NULL;
- }
-
-out:
- finished_loading (dialog);
-}
-
-static void
-accounts_dialog_accounts_setup (EmpathyAccountsDialog *dialog)
-{
- EmpathyAccountsDialogPriv *priv = GET_PRIV (dialog);
- GList *accounts, *l;
-
- g_signal_connect (priv->account_manager, "account-validity-changed",
- G_CALLBACK (accounts_dialog_account_validity_changed_cb),
- dialog);
- g_signal_connect (priv->account_manager, "account-removed",
- G_CALLBACK (accounts_dialog_account_removed_cb),
- dialog);
- g_signal_connect (priv->account_manager, "account-enabled",
- G_CALLBACK (accounts_dialog_account_enabled_cb),
- dialog);
- g_signal_connect (priv->account_manager, "account-disabled",
- G_CALLBACK (accounts_dialog_account_disabled_cb),
- dialog);
-
- /* Add existing accounts */
- accounts = tp_account_manager_dup_valid_accounts (priv->account_manager);
- for (l = accounts; l; l = l->next)
- {
- accounts_dialog_add_account (dialog, l->data);
- }
- g_list_free_full (accounts, g_object_unref);
-
- priv->cms = tpaw_connection_managers_dup_singleton ();
-
- tpaw_connection_managers_prepare_async (priv->cms,
- accounts_dialog_cms_prepare_cb, dialog);
-
- accounts_dialog_model_select_first (dialog);
-}
-
-static void
-accounts_dialog_manager_ready_cb (GObject *source_object,
- GAsyncResult *result,
- gpointer user_data)
-{
- TpAccountManager *manager = TP_ACCOUNT_MANAGER (source_object);
- GError *error = NULL;
-
- if (!tp_proxy_prepare_finish (manager, result, &error))
- {
- DEBUG ("Failed to prepare account manager: %s", error->message);
- g_error_free (error);
- return;
- }
-
- accounts_dialog_accounts_setup (user_data);
-}
-
-static void
-dialog_response_cb (GtkWidget *widget,
- gint response_id,
- gpointer user_data)
-{
- EmpathyAccountsDialog *dialog = EMPATHY_ACCOUNTS_DIALOG (widget);
-
- if (response_id == GTK_RESPONSE_HELP)
- {
- empathy_url_show (widget, "help:empathy/accounts-window");
- }
- else if (response_id == GTK_RESPONSE_CLOSE ||
- response_id == GTK_RESPONSE_DELETE_EVENT)
- {
- TpAccount *account = NULL;
-
- if (accounts_dialog_has_pending_change (dialog, &account))
- {
- gchar *question_dialog_primary_text = get_dialog_primary_text (
- account);
-
- accounts_dialog_show_question_dialog (dialog,
- question_dialog_primary_text,
- _("You are about to close the window, which will discard\n"
- "your changes. Are you sure you want to proceed?"),
- G_CALLBACK (accounts_dialog_close_response_cb),
- widget,
- GTK_STOCK_CANCEL, GTK_RESPONSE_NO,
- GTK_STOCK_DISCARD, GTK_RESPONSE_YES, NULL);
-
- g_free (question_dialog_primary_text);
- }
- else
- {
- gtk_widget_destroy (widget);
- }
-
- if (account != NULL)
- g_object_unref (account);
- }
-}
-
-static void
-accounts_dialog_build_ui (EmpathyAccountsDialog *dialog)
-{
- GtkWidget *top_hbox;
- GtkBuilder *gui;
- gchar *filename;
- EmpathyAccountsDialogPriv *priv = GET_PRIV (dialog);
- GtkWidget *content_area, *action_area;
- GtkWidget *grid, *hbox;
- GtkWidget *alig;
- GtkWidget *sw, *toolbar;
- GtkStyleContext *context;
-
- filename = empathy_file_lookup ("empathy-accounts-dialog.ui", "src");
-
- gui = tpaw_builder_get_file (filename,
- "accounts_dialog_hbox", &top_hbox,
- "vbox_details", &priv->vbox_details,
- "alignment_settings", &priv->alignment_settings,
- "alignment_infobar", &priv->alignment_infobar,
- "treeview", &priv->treeview,
- "button_add", &priv->button_add,
- "button_remove", &priv->button_remove,
- "button_import", &priv->button_import,
- "notebook_account", &priv->notebook_account,
- "alignment_loading", &alig,
- "accounts_sw", &sw,
- "add_remove_toolbar", &toolbar,
- NULL);
- g_free (filename);
-
- tpaw_builder_connect (gui, dialog,
- "button_add", "clicked", accounts_dialog_button_add_clicked_cb,
- "button_remove", "clicked", accounts_dialog_button_remove_clicked_cb,
- "button_import", "clicked", accounts_dialog_button_import_clicked_cb,
- "treeview", "button-press-event",
- accounts_dialog_treeview_button_press_event_cb,
- NULL);
-
- content_area = gtk_dialog_get_content_area (GTK_DIALOG (dialog));
-
- gtk_box_pack_start (GTK_BOX (content_area), top_hbox, TRUE, TRUE, 0);
-
- g_object_unref (gui);
-
- action_area = gtk_dialog_get_action_area (GTK_DIALOG (dialog));
-
- /* Display loading page */
- priv->loading = TRUE;
-
- priv->spinner = gtk_spinner_new ();
-
- gtk_spinner_start (GTK_SPINNER (priv->spinner));
- gtk_widget_show (priv->spinner);
-
- gtk_container_add (GTK_CONTAINER (alig), priv->spinner);
-
- gtk_notebook_set_current_page (GTK_NOTEBOOK (priv->notebook_account),
- NOTEBOOK_PAGE_LOADING);
-
- /* Remove button is insensitive until we have a selected account */
- gtk_widget_set_sensitive (priv->button_remove, FALSE);
-
- /* Add and Import buttons and treeview are insensitive while the dialog
- * is loading */
- gtk_widget_set_sensitive (priv->button_add, FALSE);
- gtk_widget_set_sensitive (priv->button_import, FALSE);
- gtk_widget_set_sensitive (priv->treeview, FALSE);
-
- if (priv->parent_window)
- gtk_window_set_transient_for (GTK_WINDOW (dialog),
- priv->parent_window);
-
- priv->infobar = gtk_info_bar_new ();
- gtk_container_add (GTK_CONTAINER (priv->alignment_infobar),
- priv->infobar);
- gtk_widget_show (priv->infobar);
-
- grid = gtk_grid_new ();
- gtk_grid_set_column_spacing (GTK_GRID (grid), 6);
- gtk_container_add (
- GTK_CONTAINER (gtk_info_bar_get_content_area (
- GTK_INFO_BAR (priv->infobar))),
- grid);
-
- priv->image_type = gtk_image_new_from_stock (GTK_STOCK_CUT,
- GTK_ICON_SIZE_DIALOG);
- gtk_misc_set_alignment (GTK_MISC (priv->image_type), 0.0, 0.5);
- gtk_grid_attach (GTK_GRID (grid), priv->image_type, 0, 0, 1, 2);
-
- /* first row */
- priv->label_name = gtk_label_new (NULL);
- gtk_label_set_ellipsize (GTK_LABEL (priv->label_name), PANGO_ELLIPSIZE_END);
- gtk_grid_attach (GTK_GRID (grid), priv->label_name, 1, 0, 1, 1);
-
- /* second row */
- hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 2);
- gtk_widget_set_hexpand (hbox, TRUE);
- gtk_widget_set_halign (hbox, GTK_ALIGN_CENTER);
- gtk_grid_attach (GTK_GRID (grid), hbox, 1, 1, 1, 1);
-
- /* set up spinner */
- priv->throbber = gtk_spinner_new ();
-
- priv->image_status = gtk_image_new_from_icon_name (
- empathy_icon_name_for_presence (
- TP_CONNECTION_PRESENCE_TYPE_OFFLINE), GTK_ICON_SIZE_SMALL_TOOLBAR);
-
- priv->label_status = gtk_label_new (NULL);
- gtk_label_set_ellipsize (GTK_LABEL (priv->label_status), PANGO_ELLIPSIZE_END);
-
- gtk_box_pack_start (GTK_BOX (hbox), priv->throbber, FALSE, FALSE, 0);
- gtk_box_pack_start (GTK_BOX (hbox), priv->image_status, FALSE, FALSE, 0);
- gtk_box_pack_start (GTK_BOX (hbox), priv->label_status, FALSE, FALSE, 0);
-
- /* enabled switch */
- priv->enabled_switch = gtk_switch_new ();
- gtk_widget_set_valign (priv->enabled_switch, GTK_ALIGN_CENTER);
- g_signal_connect (priv->enabled_switch, "notify::active",
- G_CALLBACK (accounts_dialog_enable_switch_active_cb), dialog);
- gtk_grid_attach (GTK_GRID (grid), priv->enabled_switch, 2, 0, 1, 2);
-
- gtk_widget_show_all (grid);
-
- /* Tweak the dialog */
- gtk_window_set_title (GTK_WINDOW (dialog), _("Messaging and VoIP Accounts"));
- gtk_window_set_role (GTK_WINDOW (dialog), "accounts");
-
- gtk_window_set_default_size (GTK_WINDOW (dialog), 640, 450);
-
- gtk_window_set_type_hint (GTK_WINDOW (dialog), GDK_WINDOW_TYPE_HINT_DIALOG);
-
- /* join the add/remove toolbar to the treeview */
- context = gtk_widget_get_style_context (sw);
- gtk_style_context_set_junction_sides (context, GTK_JUNCTION_BOTTOM);
-
- context = gtk_widget_get_style_context (toolbar);
- gtk_style_context_set_junction_sides (context, GTK_JUNCTION_TOP);
-
- /* add dialog buttons */
- gtk_button_box_set_layout (GTK_BUTTON_BOX (action_area), GTK_BUTTONBOX_END);
-
- gtk_dialog_add_buttons (GTK_DIALOG (dialog),
- GTK_STOCK_HELP, GTK_RESPONSE_HELP,
- GTK_STOCK_CLOSE, GTK_RESPONSE_CLOSE,
- NULL);
-
- g_signal_connect (dialog, "response",
- G_CALLBACK (dialog_response_cb), dialog);
-
- g_signal_connect (dialog, "delete-event",
- G_CALLBACK (accounts_dialog_delete_event_cb), dialog);
-}
-
-static void
-do_dispose (GObject *obj)
-{
- EmpathyAccountsDialog *dialog = EMPATHY_ACCOUNTS_DIALOG (obj);
- EmpathyAccountsDialogPriv *priv = GET_PRIV (dialog);
-
- if (priv->user_info != NULL)
- {
- tpaw_user_info_apply_async ((TpawUserInfo *) priv->user_info,
- NULL, NULL);
- priv->user_info = NULL;
- }
-
- if (priv->connecting_id != 0)
- {
- g_source_remove (priv->connecting_id);
- priv->connecting_id = 0;
- }
-
- if (priv->connectivity)
- {
- g_object_unref (priv->connectivity);
- priv->connectivity = NULL;
- }
-
- if (priv->account_manager != NULL)
- {
- g_object_unref (priv->account_manager);
- priv->account_manager = NULL;
- }
-
- if (priv->cms != NULL)
- {
- g_object_unref (priv->cms);
- priv->cms = NULL;
- }
-
- if (priv->initial_selection != NULL)
- {
- g_object_unref (priv->initial_selection);
- priv->initial_selection = NULL;
- }
-
- tp_clear_pointer (&priv->icons_cache, g_hash_table_unref);
-
- G_OBJECT_CLASS (empathy_accounts_dialog_parent_class)->dispose (obj);
-}
-
-static void
-do_get_property (GObject *object,
- guint property_id,
- GValue *value,
- GParamSpec *pspec)
-{
- EmpathyAccountsDialogPriv *priv = GET_PRIV (object);
-
- switch (property_id)
- {
- case PROP_PARENT:
- g_value_set_object (value, priv->parent_window);
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
- }
-}
-
-static void
-do_set_property (GObject *object,
- guint property_id,
- const GValue *value,
- GParamSpec *pspec)
-{
- EmpathyAccountsDialogPriv *priv = GET_PRIV (object);
-
- switch (property_id)
- {
- case PROP_PARENT:
- priv->parent_window = g_value_get_object (value);
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
- }
-}
-
-static void
-do_constructed (GObject *object)
-{
- EmpathyAccountsDialog *dialog = EMPATHY_ACCOUNTS_DIALOG (object);
- EmpathyAccountsDialogPriv *priv = GET_PRIV (dialog);
- GtkTreeModel *model;
-
- accounts_dialog_build_ui (dialog);
- accounts_dialog_model_setup (dialog);
-
- model = gtk_tree_view_get_model (GTK_TREE_VIEW (priv->treeview));
- g_signal_connect (model, "row-inserted",
- (GCallback) accounts_dialog_accounts_model_row_inserted_cb, dialog);
- g_signal_connect (model, "row-deleted",
- (GCallback) accounts_dialog_accounts_model_row_deleted_cb, dialog);
-
- /* Set up signalling */
- priv->account_manager = tp_account_manager_dup ();
-
- tp_proxy_prepare_async (priv->account_manager, NULL,
- accounts_dialog_manager_ready_cb, dialog);
-
- priv->connectivity = g_network_monitor_get_default ();
- g_object_ref (priv->connectivity);
-}
-
-static void
-empathy_accounts_dialog_class_init (EmpathyAccountsDialogClass *klass)
-{
- GObjectClass *oclass = G_OBJECT_CLASS (klass);
- GParamSpec *param_spec;
-
- oclass->dispose = do_dispose;
- oclass->constructed = do_constructed;
- oclass->set_property = do_set_property;
- oclass->get_property = do_get_property;
-
- param_spec = g_param_spec_object ("parent",
- "parent", "The parent window",
- GTK_TYPE_WINDOW,
- G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | G_PARAM_CONSTRUCT_ONLY);
- g_object_class_install_property (oclass, PROP_PARENT, param_spec);
-
- g_type_class_add_private (klass, sizeof (EmpathyAccountsDialogPriv));
-}
-
-static void
-empathy_accounts_dialog_init (EmpathyAccountsDialog *dialog)
-{
- EmpathyAccountsDialogPriv *priv;
-
- priv = G_TYPE_INSTANCE_GET_PRIVATE ((dialog),
- EMPATHY_TYPE_ACCOUNTS_DIALOG,
- EmpathyAccountsDialogPriv);
- dialog->priv = priv;
-
- priv->icons_cache = g_hash_table_new_full (g_str_hash, g_str_equal,
- g_free, g_object_unref);
-}
-
-/* public methods */
-
-GtkWidget *
-empathy_accounts_dialog_show (GtkWindow *parent,
- TpAccount *selected_account)
-{
- EmpathyAccountsDialog *dialog;
- EmpathyAccountsDialogPriv *priv;
-
- dialog = g_object_new (EMPATHY_TYPE_ACCOUNTS_DIALOG,
- "parent", parent, NULL);
-
- priv = GET_PRIV (dialog);
-
- if (selected_account)
- {
- if (priv->cms != NULL && tpaw_connection_managers_is_ready (priv->cms))
- accounts_dialog_set_selected_account (dialog, selected_account);
- else
- /* save the selection to set it later when the cms
- * becomes ready.
- */
- priv->initial_selection = g_object_ref (selected_account);
- }
-
- gtk_window_present (GTK_WINDOW (dialog));
-
- return GTK_WIDGET (dialog);
-}
-
-#ifdef HAVE_UOA
-typedef struct
-{
- TpAccount *account;
- gboolean if_needed;
-} LaunchUOACtx;
-
-static LaunchUOACtx *
-launch_uoa_ctx_new (TpAccount *account,
- gboolean if_needed)
-{
- LaunchUOACtx *ctx;
-
- ctx = g_slice_new0 (LaunchUOACtx);
- if (account != NULL)
- ctx->account = g_object_ref (account);
- ctx->if_needed = if_needed;
-
- return ctx;
-}
-
-static void
-launch_uoa_ctx_free (LaunchUOACtx *ctx)
-{
- g_clear_object (&ctx->account);
- g_slice_free (LaunchUOACtx, ctx);
-}
-
-static void
-am_prepare_cb (GObject *source,
- GAsyncResult *result,
- gpointer user_data)
-{
- TpAccountManager *manager = TP_ACCOUNT_MANAGER (source);
- GError *error = NULL;
- LaunchUOACtx *ctx = user_data;
- gchar *args = NULL;
-
- if (!tp_proxy_prepare_finish (manager, result, &error))
- {
- DEBUG ("Failed to prepare account manager: %s", error->message);
- g_error_free (error);
- goto out;
- }
-
- if (ctx->if_needed && empathy_accounts_has_non_salut_accounts (manager))
- goto out;
-
- if (ctx->account != NULL)
- {
- const GValue *value;
-
- value = tp_account_get_storage_identifier (ctx->account);
-
- if (G_VALUE_HOLDS_UINT (value))
- args = g_strdup_printf ("account-details=%u", g_value_get_uint (value));
- }
-
- empathy_launch_external_app ("gnome-credentials-panel.desktop", args, NULL);
-
- g_free (args);
-out:
- launch_uoa_ctx_free (ctx);
-}
-
-static void
-launch_uoa_panel (TpAccount *selected_account,
- gboolean if_needed,
- gboolean hidden)
-{
- TpAccountManager *manager;
-
- if (hidden)
- /* Nothing to do */
- return;
-
- manager = tp_account_manager_dup ();
-
- tp_proxy_prepare_async (manager, NULL, am_prepare_cb,
- launch_uoa_ctx_new (selected_account, if_needed));
-
- g_object_unref (manager);
-}
-
-#else /* HAVE_UOA */
-
-static void
-launch_empathy_accounts (TpAccount *selected_account,
- gboolean if_needed,
- gboolean hidden)
-{
- GString *args;
-
- g_return_if_fail (!selected_account || TP_IS_ACCOUNT (selected_account));
-
- args = g_string_new (NULL);
-
- if (selected_account != NULL)
- g_string_append_printf (args, " --select-account=%s",
- tp_account_get_path_suffix (selected_account));
-
- if (if_needed)
- g_string_append_printf (args, " --if-needed");
-
- if (hidden)
- g_string_append_printf (args, " --hidden");
-
- DEBUG ("Launching empathy-accounts (if_needed: %d, hidden: %d, account: %s)",
- if_needed, hidden,
- selected_account == NULL ? "<none selected>" :
- tp_proxy_get_object_path (TP_PROXY (selected_account)));
-
- empathy_launch_program (BIN_DIR, "empathy-accounts", args->str);
-
- g_string_free (args, TRUE);
-}
-#endif /* HAVE_UOA */
-
-void
-empathy_accounts_dialog_show_application (GdkScreen *screen,
- TpAccount *selected_account,
- gboolean if_needed,
- gboolean hidden)
-{
-#ifdef HAVE_UOA
- launch_uoa_panel (selected_account, if_needed, hidden);
-#else
- launch_empathy_accounts (selected_account, if_needed, hidden);
-#endif
-}
-
-gboolean
-empathy_accounts_dialog_is_creating (EmpathyAccountsDialog *dialog)
-{
- EmpathyAccountsDialogPriv *priv = GET_PRIV (dialog);
- gboolean result = FALSE;
-
- if (priv->setting_widget == NULL)
- goto out;
-
- g_object_get (priv->setting_widget,
- "creating-account", &result, NULL);
-
-out:
- return result;
-}
diff --git a/src/empathy-accounts-dialog.h b/src/empathy-accounts-dialog.h
deleted file mode 100644
index 070cd02e..00000000
--- a/src/empathy-accounts-dialog.h
+++ /dev/null
@@ -1,69 +0,0 @@
-/*
- * 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., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301 USA
- *
- * Authors: Martyn Russell <martyn@imendio.com>
- * Xavier Claessens <xclaesse@gmail.com>
- */
-
-#ifndef __EMPATHY_ACCOUNTS_DIALOG_H__
-#define __EMPATHY_ACCOUNTS_DIALOG_H__
-
-#include <gtk/gtk.h>
-#include <telepathy-glib/telepathy-glib.h>
-
-G_BEGIN_DECLS
-
-#define EMPATHY_TYPE_ACCOUNTS_DIALOG empathy_accounts_dialog_get_type()
-#define EMPATHY_ACCOUNTS_DIALOG(obj) \
- (G_TYPE_CHECK_INSTANCE_CAST ((obj), EMPATHY_TYPE_ACCOUNTS_DIALOG, EmpathyAccountsDialog))
-#define EMPATHY_ACCOUNTS_DIALOG_CLASS(klass) \
- (G_TYPE_CHECK_CLASS_CAST ((klass), EMPATHY_TYPE_ACCOUNTS_DIALOG, EmpathyAccountsDialogClass))
-#define EMPATHY_IS_ACCOUNTS_DIALOG(obj) \
- (G_TYPE_CHECK_INSTANCE_TYPE ((obj), EMPATHY_TYPE_ACCOUNTS_DIALOG))
-#define EMPATHY_IS_ACCOUNTS_DIALOG_CLASS(klass) \
- (G_TYPE_CHECK_CLASS_TYPE ((klass), EMPATHY_TYPE_ACCOUNTS_DIALOG))
-#define EMPATHY_ACCOUNTS_DIALOG_GET_CLASS(obj) \
- (G_TYPE_INSTANCE_GET_CLASS ((obj), EMPATHY_TYPE_ACCOUNTS_DIALOG, EmpathyAccountsDialogClass))
-
-typedef struct {
- GtkDialog parent;
-
- /* private */
- gpointer priv;
-} EmpathyAccountsDialog;
-
-typedef struct {
- GtkDialogClass parent_class;
-} EmpathyAccountsDialogClass;
-
-GType empathy_accounts_dialog_get_type (void);
-GtkWidget *empathy_accounts_dialog_show (GtkWindow *parent,
- TpAccount *selected_account);
-
-void empathy_account_dialog_cancel (EmpathyAccountsDialog *dialog);
-gboolean empathy_accounts_dialog_is_creating (EmpathyAccountsDialog *dialog);
-
-void empathy_accounts_dialog_show_application (GdkScreen *screen,
- TpAccount *selected_account,
- gboolean if_needed,
- gboolean hidden);
-
-G_END_DECLS
-
-#endif /* __EMPATHY_ACCOUNTS_DIALOG_H__ */
diff --git a/src/empathy-accounts-dialog.ui b/src/empathy-accounts-dialog.ui
deleted file mode 100644
index 777187bf..00000000
--- a/src/empathy-accounts-dialog.ui
+++ /dev/null
@@ -1,246 +0,0 @@
-<?xml version="1.0"?>
-<interface>
- <requires lib="gtk+" version="2.16"/>
- <!-- interface-naming-policy toplevel-contextual -->
- <object class="GtkHBox" id="accounts_dialog_hbox">
- <property name="visible">True</property>
- <property name="border_width">6</property>
- <property name="spacing">18</property>
- <child>
- <object class="GtkVBox" id="vbox195">
- <property name="visible">True</property>
- <property name="spacing">6</property>
- <child>
- <object class="GtkVBox" id="vbox1">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <child>
- <object class="GtkScrolledWindow" id="accounts_sw">
- <property name="height_request">200</property>
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="hscrollbar_policy">never</property>
- <property name="vscrollbar_policy">automatic</property>
- <property name="shadow_type">in</property>
- <child>
- <object class="GtkTreeView" id="treeview">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="enable_search">False</property>
- </object>
- </child>
- </object>
- <packing>
- <property name="expand">True</property>
- <property name="fill">True</property>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkToolbar" id="add_remove_toolbar">
- <property name="visible">True</property>
- <property name="icon_size">1</property>
- <style>
- <class name="inline-toolbar"/>
- </style>
- <child>
- <object class="GtkToolButton" id="button_add">
- <property name="tooltip-text" translatable="yes">Add…</property>
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="receives_default">True</property>
- <property name="icon_name">list-add-symbolic</property>
- <property name="use_underline">True</property>
- </object>
- <packing>
- </packing>
- </child>
- <child>
- <object class="GtkToolButton" id="button_remove">
- <property name="tooltip-text" translatable="yes">Remove</property>
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="receives_default">True</property>
- <property name="icon_name">list-remove-symbolic</property>
- <property name="use_underline">True</property>
- </object>
- <packing>
- </packing>
- </child>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">1</property>
- </packing>
- </child>
- </object>
- <packing>
- <property name="expand">True</property>
- <property name="fill">True</property>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkButton" id="button_import">
- <property name="label" translatable="yes">_Import…</property>
- <property name="can_focus">True</property>
- <property name="receives_default">True</property>
- <property name="use_action_appearance">False</property>
- <property name="use_underline">True</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="position">1</property>
- </packing>
- </child>
- </object>
- <packing>
- <property name="expand">True</property>
- <property name="fill">True</property>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkNotebook" id="notebook_account">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="show_tabs">False</property>
- <child>
- <object class="GtkVBox" id="vbox214">
- <property name="visible">True</property>
- <property name="spacing">18</property>
- <child>
- <object class="GtkVBox" id="vbox_details">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="spacing">6</property>
- <child>
- <placeholder/>
- </child>
- <child>
- <object class="GtkAlignment" id="alignment_infobar">
- <property name="visible">True</property>
- <child>
- <placeholder/>
- </child>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="position">1</property>
- </packing>
- </child>
- <child>
- <object class="GtkAlignment" id="alignment_settings">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="left_padding">6</property>
- <property name="right_padding">6</property>
- <child>
- <placeholder/>
- </child>
- </object>
- <packing>
- <property name="position">2</property>
- </packing>
- </child>
- </object>
- <packing>
- <property name="position">1</property>
- </packing>
- </child>
- </object>
- </child>
- <child type="tab">
- <object class="GtkLabel" id="label1">
- <property name="visible">True</property>
- <property name="label">page 1</property>
- </object>
- <packing>
- <property name="tab_fill">False</property>
- </packing>
- </child>
- <child>
- <object class="GtkHBox" id="hbox_loading">
- <property name="visible">True</property>
- <child>
- <object class="GtkAlignment" id="alignment_loading">
- <property name="visible">True</property>
- <property name="left_padding">12</property>
- <child>
- <placeholder/>
- </child>
- </object>
- <packing>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkLabel" id="label5">
- <property name="visible">True</property>
- <property name="label" translatable="yes">Loading account information</property>
- <attributes>
- <attribute name="weight" value="bold"/>
- <attribute name="scale" value="1.728"/> <!-- PANGO_SCALE_XX_LARGE -->
- </attributes>
- </object>
- <packing>
- <property name="position">1</property>
- </packing>
- </child>
- </object>
- <packing>
- <property name="position">1</property>
- </packing>
- </child>
- <child>
- <object class="GtkVBox" id="vbox_no_protocol">
- <property name="visible">True</property>
- <property name="spacing">18</property>
- <child>
- <object class="GtkFrame" id="frame_no_protocol">
- <property name="label_xalign">0</property>
- <property name="shadow_type">none</property>
- <child>
- <object class="GtkAlignment" id="alignment21">
- <property name="visible">True</property>
- <property name="top_padding">6</property>
- <property name="left_padding">12</property>
- <child>
- <object class="GtkLabel" id="label4">
- <property name="visible">True</property>
- <property name="label" translatable="yes">To add a new account, you first have to install a backend for each protocol you want to use.</property>
- <property name="wrap">True</property>
- </object>
- </child>
- </object>
- </child>
- <child type="label">
- <object class="GtkLabel" id="label_no_protocol">
- <property name="visible">True</property>
- <property name="label" translatable="yes">No protocol backends installed</property>
- <attributes>
- <attribute name="weight" value="bold"/>
- </attributes>
- </object>
- </child>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">2</property>
- </packing>
- </child>
- <child>
- <placeholder/>
- </child>
- </object>
- </child>
- </object>
- <packing>
- <property name="position">1</property>
- </packing>
- </child>
- </object>
-</interface>
diff --git a/src/empathy-accounts.1 b/src/empathy-accounts.1
deleted file mode 100644
index 1d4b2428..00000000
--- a/src/empathy-accounts.1
+++ /dev/null
@@ -1,36 +0,0 @@
-.TH EMPATHY-ACCOUNTS "1" "February 2010" "Telepathy project" "User Commands"
-.SH NAME
-empathy-accounts \- Accounts configuration dialog for Empathy instant messaging client
-.SH SYNOPSIS
-empathy-accounts
-.RI [ options ]
-.SH DESCRIPTION
-Accounts configuration dialog for Empathy instant messaging client
-.PP
-This utility allows you to configure your instant messaging accounts for Empathy.
-.SH OPTIONS
-.TP
-.BR \-h ,\ \-\-hidden
-Don't display any dialogs; do any work (eg, importing) and exit
-.TP
-.BR \-n ,\ \-\-if\-needed
-Don't display any dialogs if there are any non-salut accounts
-.TP
-.BI \-s\ account\-id
-.TQ
-.BI \-\-select\-account= account\-id
-Initially select given account (eg, gabble/jabber/foo_40example_2eorg0)
-.SH AUTHOR
-This manual page was written by
-.MT bigon@debian.org
-Laurent Bigonville
-.ME ,
-for the Debian GNU/Linux system (but may be used by others).
-.SH SEE ALSO
-.BR empathy (1),
-.UR http://telepathy.freedesktop.org/
-The Telepathy project
-.UE ,
-.UR http://live.gnome.org/Empathy
-The Empathy project
-.UE .
diff --git a/src/empathy-accounts.c b/src/empathy-accounts.c
deleted file mode 100644
index 88923681..00000000
--- a/src/empathy-accounts.c
+++ /dev/null
@@ -1,255 +0,0 @@
-/*
- * Copyright (C) 2005-2007 Imendio AB
- * Copyright (C) 2007-2010 Collabora Ltd.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301 USA
- *
- * Authors: Martyn Russell <martyn@imendio.com>
- * Xavier Claessens <xclaesse@gmail.com>
- * Cosimo Cecchi <cosimo.cecchi@collabora.co.uk>
- * Jonathan Tellier <jonathan.tellier@gmail.com>
- * Travis Reitter <travis.reitter@collabora.co.uk>
- */
-
-#include "config.h"
-#include "empathy-accounts.h"
-
-#include <glib/gi18n.h>
-
-#ifdef HAVE_CHEESE
-#include <cheese-gtk.h>
-#endif
-
-#include "empathy-accounts-common.h"
-#include "empathy-ui-utils.h"
-#include "empathy-utils.h"
-
-#define DEBUG_FLAG EMPATHY_DEBUG_ACCOUNT
-#include "empathy-debug.h"
-
-#define EMPATHY_ACCOUNTS_DBUS_NAME "org.gnome.EmpathyAccounts"
-
-static gboolean only_if_needed = FALSE;
-static gboolean hidden = FALSE;
-static gchar *selected_account_name = NULL;
-
-static void
-maybe_show_accounts_ui (TpAccountManager *manager,
- GApplication *app)
-{
- if (hidden)
- return;
-
- if (only_if_needed && empathy_accounts_has_non_salut_accounts (manager))
- return;
-
- empathy_accounts_show_accounts_ui (manager, NULL, app);
-}
-
-static TpAccount *
-find_account (TpAccountManager *mgr,
- const gchar *path)
-{
- GList *accounts, *l;
- TpAccount *found = NULL;
-
- accounts = tp_account_manager_dup_valid_accounts (mgr);
- for (l = accounts; l != NULL; l = g_list_next (l))
- {
- if (!tp_strdiff (tp_proxy_get_object_path (l->data), path))
- {
- found = l->data;
- break;
- }
- }
-
- g_list_free_full (accounts, g_object_unref);
- return found;
-}
-
-static void
-account_manager_ready_for_accounts_cb (GObject *source_object,
- GAsyncResult *result,
- gpointer user_data)
-{
- TpAccountManager *manager = TP_ACCOUNT_MANAGER (source_object);
- GError *error = NULL;
- GApplication *app = G_APPLICATION (user_data);
-
- if (!tp_proxy_prepare_finish (manager, result, &error))
- {
- DEBUG ("Failed to prepare account manager: %s", error->message);
- g_clear_error (&error);
- goto out;
- }
-
- if (selected_account_name != NULL)
- {
- gchar *account_path;
- TpAccount *account;
-
- /* create and prep the corresponding TpAccount so it's fully ready by the
- * time we try to select it in the accounts dialog */
- if (g_str_has_prefix (selected_account_name, TP_ACCOUNT_OBJECT_PATH_BASE))
- account_path = g_strdup (selected_account_name);
- else
- account_path = g_strdup_printf ("%s%s", TP_ACCOUNT_OBJECT_PATH_BASE,
- selected_account_name);
-
- account = find_account (manager, account_path);
-
- if (account != NULL)
- {
- empathy_accounts_show_accounts_ui (manager, account, app);
- goto out;
- }
- else
- {
- DEBUG ("Failed to find account with path %s", account_path);
-
- g_clear_error (&error);
-
- maybe_show_accounts_ui (manager, app);
- }
-
- g_free (account_path);
- }
- else
- {
- maybe_show_accounts_ui (manager, app);
- }
-
-out:
- g_application_release (app);
-}
-
-static void
-app_activate (GApplication *app)
-{
- TpAccountManager *account_manager;
-
- empathy_gtk_init ();
- account_manager = tp_account_manager_dup ();
-
- /* Hold the application while preparing the AM */
- g_application_hold (app);
-
- tp_proxy_prepare_async (account_manager, NULL,
- account_manager_ready_for_accounts_cb, app);
-
- g_object_unref (account_manager);
-}
-
-static gboolean
-local_cmdline (GApplication *app,
- gchar ***arguments,
- gint *exit_status)
-{
- gint i;
- gchar **argv;
- gint argc = 0;
- gboolean retval = TRUE;
- GError *error = NULL;
-
- GOptionContext *optcontext;
- GOptionEntry options[] = {
- { "hidden", 'h',
- 0, G_OPTION_ARG_NONE, &hidden,
- N_("Don't display any dialogs; do any work (eg, importing) and exit"),
- NULL },
- { "if-needed", 'n',
- 0, G_OPTION_ARG_NONE, &only_if_needed,
- N_("Don't display any dialogs unless there are only \"People Nearby\" accounts"),
- NULL },
- { "select-account", 's',
- G_OPTION_FLAG_IN_MAIN, G_OPTION_ARG_STRING, &selected_account_name,
- N_("Initially select given account (eg, "
- "gabble/jabber/foo_40example_2eorg0)"),
- N_("<account-id>") },
-
- { NULL }
- };
-
- optcontext = g_option_context_new (N_("- Empathy Accounts"));
- g_option_context_add_group (optcontext, gtk_get_option_group (FALSE));
- g_option_context_add_main_entries (optcontext, options, GETTEXT_PACKAGE);
- g_option_context_set_translation_domain (optcontext, GETTEXT_PACKAGE);
-
- argv = *arguments;
- for (i = 0; argv[i] != NULL; i++)
- argc++;
-
- if (!g_option_context_parse (optcontext, &argc, &argv, &error))
- {
- g_print ("%s\nRun '%s --help' to see a full list of available command line options.\n",
- error->message, argv[0]);
- g_warning ("Error in empathy init: %s", error->message);
- g_clear_error (&error);
-
- *exit_status = EXIT_FAILURE;
- }
- else
- {
- if (g_application_register (app, NULL, &error))
- {
- g_application_activate (app);
- }
- else
- {
- g_warning("Impossible to register empathy-application: %s", error->message);
- g_clear_error (&error);
- *exit_status = EXIT_FAILURE;
- }
- }
-
- g_option_context_free (optcontext);
-
- return retval;
-}
-
-int
-main (int argc, char *argv[])
-{
- GtkApplication *app;
- GObjectClass *app_class;
- gint retval;
-
- g_type_init ();
-
-#ifdef HAVE_CHEESE
- /* Used by the avatar chooser */
- g_return_val_if_fail (cheese_gtk_init (&argc, &argv), 1);
-#endif
-
- empathy_init ();
-
- g_set_application_name (_("Empathy Accounts"));
-
- /* Make empathy and empathy-accounts appear as the same app in gnome-shell */
- gdk_set_program_class ("Empathy");
- gtk_window_set_default_icon_name ("empathy");
-
- app = gtk_application_new (EMPATHY_ACCOUNTS_DBUS_NAME, G_APPLICATION_FLAGS_NONE);
- app_class = G_OBJECT_GET_CLASS (app);
- G_APPLICATION_CLASS (app_class)->local_command_line = local_cmdline;
- G_APPLICATION_CLASS (app_class)->activate = app_activate;
-
- retval = g_application_run (G_APPLICATION (app), argc, argv);
-
- g_object_unref (app);
-
- return retval;
-}
diff --git a/src/empathy-accounts.h b/src/empathy-accounts.h
deleted file mode 100644
index 8c50cd62..00000000
--- a/src/empathy-accounts.h
+++ /dev/null
@@ -1,25 +0,0 @@
-/*
- * Copyright (C) 2010 Collabora Ltd.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301 USA
- *
- * Authors: Travis Reitter <travis.reitter@collabora.co.uk>
- */
-
-#ifndef __EMPATHY_ACCOUNTS_H__
-#define __EMPATHY_ACCOUNTS_H__
-
-#endif /* __EMPATHY_ACCOUNTS_H__ */
diff --git a/src/empathy-audio-sink.c b/src/empathy-audio-sink.c
deleted file mode 100644
index 985a1fa3..00000000
--- a/src/empathy-audio-sink.c
+++ /dev/null
@@ -1,423 +0,0 @@
-/*
- * empathy-gst-audio-sink.c - Source for EmpathyGstAudioSink
- * Copyright (C) 2008 Collabora Ltd.
- * @author Sjoerd Simons <sjoerd.simons@collabora.co.uk>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-#include "config.h"
-#include "empathy-audio-sink.h"
-
-#ifdef HAVE_GST1
-#include <gst/audio/streamvolume.h>
-#else
-#include <gst/interfaces/streamvolume.h>
-#endif
-
-#include "empathy-audio-utils.h"
-
-#define DEBUG_FLAG EMPATHY_DEBUG_VOIP
-#include "empathy-debug.h"
-
-G_DEFINE_TYPE(EmpathyGstAudioSink, empathy_audio_sink, GST_TYPE_BIN)
-
-/* signal enum */
-#if 0
-enum
-{
- LAST_SIGNAL
-};
-
-static guint signals[LAST_SIGNAL] = {0};
-#endif
-
-static GstStaticPadTemplate sink_template = GST_STATIC_PAD_TEMPLATE(
- "sink%d",
- GST_PAD_SINK,
- GST_PAD_REQUEST,
-#ifdef HAVE_GST1
- GST_STATIC_CAPS ( "audio/x-raw" )
-#else
- GST_STATIC_CAPS ( GST_AUDIO_INT_PAD_TEMPLATE_CAPS " ; "
- GST_AUDIO_FLOAT_PAD_TEMPLATE_CAPS)
-#endif
-);
-
-enum {
- PROP_VOLUME = 1,
-};
-
-struct _EmpathyGstAudioSinkPrivate
-{
- GstElement *sink;
- gboolean echo_cancel;
- gdouble volume;
- gint volume_idle_id;
- GMutex volume_mutex;
-};
-
-#define EMPATHY_GST_AUDIO_SINK_GET_PRIVATE(o) \
- (G_TYPE_INSTANCE_GET_PRIVATE ((o), EMPATHY_TYPE_GST_AUDIO_SINK, \
- EmpathyGstAudioSinkPrivate))
-
-static void
-empathy_audio_sink_init (EmpathyGstAudioSink *self)
-{
- self->priv = EMPATHY_GST_AUDIO_SINK_GET_PRIVATE (self);
- self->priv->echo_cancel = TRUE;
- g_mutex_init (&self->priv->volume_mutex);
-}
-
-#ifdef HAVE_GST1
-static GstPad * empathy_audio_sink_request_new_pad (GstElement *self,
- GstPadTemplate *templ,
- const gchar* name,
- const GstCaps *caps);
-#else
-static GstPad * empathy_audio_sink_request_new_pad (GstElement *self,
- GstPadTemplate *templ,
- const gchar* name);
-#endif
-
-static void empathy_audio_sink_release_pad (GstElement *self,
- GstPad *pad);
-
-static void
-empathy_audio_sink_set_property (GObject *object,
- guint property_id, const GValue *value, GParamSpec *pspec)
-{
- EmpathyGstAudioSink *self = EMPATHY_GST_AUDIO_SINK (object);
- switch (property_id)
- {
- case PROP_VOLUME:
- g_mutex_lock (&self->priv->volume_mutex);
- self->priv->volume = g_value_get_double (value);
- g_mutex_unlock (&self->priv->volume_mutex);
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
- }
-}
-
-static void
-empathy_audio_sink_get_property (GObject *object,
- guint property_id, GValue *value, GParamSpec *pspec)
-{
- EmpathyGstAudioSink *self = EMPATHY_GST_AUDIO_SINK (object);
- switch (property_id)
- {
- case PROP_VOLUME:
- g_value_set_double (value, self->priv->volume);
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
- }
-}
-
-static void
-empathy_audio_sink_dispose (GObject *object)
-{
- EmpathyGstAudioSink *self = EMPATHY_GST_AUDIO_SINK (object);
- EmpathyGstAudioSinkPrivate *priv = self->priv;
-
- if (priv->volume_idle_id != 0)
- g_source_remove (priv->volume_idle_id);
- priv->volume_idle_id = 0;
-
- g_mutex_clear (&self->priv->volume_mutex);
-
- /* release any references held by the object here */
- if (G_OBJECT_CLASS (empathy_audio_sink_parent_class)->dispose)
- G_OBJECT_CLASS (empathy_audio_sink_parent_class)->dispose (object);
-}
-
-static void
-empathy_audio_sink_class_init (EmpathyGstAudioSinkClass
- *empathy_audio_sink_class)
-{
- GObjectClass *object_class = G_OBJECT_CLASS (empathy_audio_sink_class);
- GstElementClass *element_class =
- GST_ELEMENT_CLASS (empathy_audio_sink_class);
- GParamSpec *param_spec;
-
- gst_element_class_add_pad_template (element_class,
- gst_static_pad_template_get (&sink_template));
-
- g_type_class_add_private (empathy_audio_sink_class,
- sizeof (EmpathyGstAudioSinkPrivate));
-
- object_class->set_property = empathy_audio_sink_set_property;
- object_class->get_property = empathy_audio_sink_get_property;
- object_class->dispose = empathy_audio_sink_dispose;
-
- element_class->request_new_pad = empathy_audio_sink_request_new_pad;
- element_class->release_pad = empathy_audio_sink_release_pad;
-
- param_spec = g_param_spec_double ("volume", "Volume", "volume control",
- 0.0, 5.0, 1.0,
- G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
- g_object_class_install_property (object_class, PROP_VOLUME, param_spec);
-}
-
-GstElement *
-empathy_audio_sink_new (void)
-{
- static gboolean registered = FALSE;
-
- if (!registered) {
- if (!gst_element_register (NULL, "empathyaudiosink",
- GST_RANK_NONE, EMPATHY_TYPE_GST_AUDIO_SINK))
- return NULL;
- registered = TRUE;
- }
- return gst_element_factory_make ("empathyaudiosink", NULL);
-}
-
-void
-empathy_audio_sink_set_volume (EmpathyGstAudioSink *sink, gdouble volume)
-{
- g_object_set (sink, "volume", volume, NULL);
-}
-
-gdouble
-empathy_audio_sink_get_volume (EmpathyGstAudioSink *sink)
-{
- EmpathyGstAudioSinkPrivate *priv = EMPATHY_GST_AUDIO_SINK_GET_PRIVATE (sink);
-
- return priv->volume;
-}
-
-static GstElement *
-create_sink (EmpathyGstAudioSink *self)
-{
- GstElement *sink;
- const gchar *description;
-
- description = g_getenv ("EMPATHY_AUDIO_SINK");
-
- if (description != NULL)
- {
- GError *error = NULL;
-
- sink = gst_parse_bin_from_description (description, TRUE, &error);
- if (sink == NULL)
- {
- DEBUG ("Failed to create bin %s: %s", description, error->message);
- g_error_free (error);
- }
-
- return sink;
- }
-
- /* Use pulsesink as default */
- sink = gst_element_factory_make ("pulsesink", NULL);
- if (sink == NULL)
- return NULL;
-
- empathy_audio_set_stream_properties (sink, self->priv->echo_cancel);
-
- /* Set latency (buffering on the PulseAudio side) of 40ms and transfer data
- * in 10ms chunks */
- g_object_set (sink,
- "buffer-time", (gint64) 40000,
- "latency-time", (gint64) 10000,
- NULL);
-
- return sink;
-}
-
-static gboolean
-empathy_audio_sink_volume_idle_updated (gpointer user_data)
-{
- EmpathyGstAudioSink *self = EMPATHY_GST_AUDIO_SINK (user_data);
-
- g_mutex_lock (&self->priv->volume_mutex);
- self->priv->volume_idle_id = 0;
- g_mutex_unlock (&self->priv->volume_mutex);
-
- g_object_notify (G_OBJECT (self), "volume");
-
- return FALSE;
-}
-
-static void
-empathy_audio_sink_volume_updated (GObject *object,
- GParamSpec *pspec,
- gpointer user_data)
-{
- EmpathyGstAudioSink *self = EMPATHY_GST_AUDIO_SINK (user_data);
- gdouble volume;
-
- g_mutex_lock (&self->priv->volume_mutex);
-
- g_object_get (object, "volume", &volume, NULL);
- if (self->priv->volume == volume)
- goto out;
-
- self->priv->volume = volume;
- if (self->priv->volume_idle_id == 0)
- self->priv->volume_idle_id = g_idle_add (
- empathy_audio_sink_volume_idle_updated, self);
-
-out:
- g_mutex_unlock (&self->priv->volume_mutex);
-}
-
-static gboolean
-empathy_audio_sink_volume_idle_setup (gpointer user_data)
-{
- EmpathyGstAudioSink *self = EMPATHY_GST_AUDIO_SINK (user_data);
- gdouble volume;
-
- g_mutex_lock (&self->priv->volume_mutex);
- self->priv->volume_idle_id = 0;
- g_mutex_unlock (&self->priv->volume_mutex);
-
- /* We can't do a bidirection bind as the ::notify comes from another
- * thread, for other bits of empathy it's most simpler if it comes from
- * the main thread */
- g_object_bind_property (self, "volume", self->priv->sink, "volume",
- G_BINDING_DEFAULT);
-
- /* sync and callback for bouncing */
- g_object_get (self->priv->sink, "volume", &volume, NULL);
- g_object_set (self, "volume", volume, NULL);
- g_signal_connect (self->priv->sink, "notify::volume",
- G_CALLBACK (empathy_audio_sink_volume_updated), self);
-
- return FALSE;
-}
-
-#ifdef HAVE_GST1
-static GstPad *
-empathy_audio_sink_request_new_pad (GstElement *element,
- GstPadTemplate *templ,
- const gchar* name,
- const GstCaps *caps)
-#else
-static GstPad *
-empathy_audio_sink_request_new_pad (GstElement *element,
- GstPadTemplate *templ,
- const gchar* name)
-#endif
-{
- EmpathyGstAudioSink *self = EMPATHY_GST_AUDIO_SINK (element);
- GstElement *bin, *resample, *audioconvert0, *audioconvert1;
- GstPad *pad = NULL;
- GstPad *subpad, *filterpad;
-
- bin = gst_bin_new (NULL);
-
- audioconvert0 = gst_element_factory_make ("audioconvert", NULL);
- if (audioconvert0 == NULL)
- goto error;
-
- gst_bin_add (GST_BIN (bin), audioconvert0);
-
- resample = gst_element_factory_make ("audioresample", NULL);
- if (resample == NULL)
- goto error;
-
- gst_bin_add (GST_BIN (bin), resample);
-
- audioconvert1 = gst_element_factory_make ("audioconvert", NULL);
- if (audioconvert1 == NULL)
- goto error;
-
- gst_bin_add (GST_BIN (bin), audioconvert1);
-
- self->priv->sink = create_sink (self);
- if (self->priv->sink == NULL)
- goto error;
-
- if (GST_IS_STREAM_VOLUME (self->priv->sink))
- {
- g_mutex_lock (&self->priv->volume_mutex);
- if (self->priv->volume_idle_id == 0)
- self->priv->volume_idle_id = g_idle_add (
- empathy_audio_sink_volume_idle_setup, self);
- g_mutex_unlock (&self->priv->volume_mutex);
- }
- else
- {
- gchar *n = gst_element_get_name (self->priv->sink);
-
- DEBUG ("Element %s doesn't support volume", n);
- g_free (n);
- }
-
- gst_bin_add (GST_BIN (bin), self->priv->sink);
-
- if (!gst_element_link_many (audioconvert0, resample, audioconvert1,
- self->priv->sink, NULL))
- goto error;
-
- filterpad = gst_element_get_static_pad (audioconvert0, "sink");
-
- if (filterpad == NULL)
- goto error;
-
- subpad = gst_ghost_pad_new ("sink", filterpad);
- gst_object_unref (filterpad);
-
- if (!gst_element_add_pad (GST_ELEMENT (bin), subpad))
- goto error;
-
- gst_bin_add (GST_BIN (self), bin);
-
- pad = gst_ghost_pad_new (name, subpad);
- g_assert (pad != NULL);
-
- if (!gst_element_sync_state_with_parent (bin))
- goto error;
-
- if (!gst_pad_set_active (pad, TRUE))
- goto error;
-
- if (!gst_element_add_pad (GST_ELEMENT (self), pad))
- goto error;
-
- return pad;
-
-error:
- if (pad != NULL)
- {
- gst_object_unref (pad);
- }
-
- gst_object_unref (bin);
- g_warning ("Failed to create output subpipeline");
- return NULL;
-}
-
-static void
-empathy_audio_sink_release_pad (GstElement *element,
- GstPad *pad)
-{
- gst_pad_set_active (pad, FALSE);
- gst_element_remove_pad (element, pad);
-}
-
-void
-empathy_audio_sink_set_echo_cancel (EmpathyGstAudioSink *sink,
- gboolean echo_cancel)
-{
- DEBUG ("Sink echo cancellation setting: %s", echo_cancel ? "on" : "off");
- sink->priv->echo_cancel = echo_cancel;
- if (sink->priv->sink != NULL)
- empathy_audio_set_stream_properties (sink->priv->sink,
- sink->priv->echo_cancel);
-}
diff --git a/src/empathy-audio-sink.h b/src/empathy-audio-sink.h
deleted file mode 100644
index 85b576c4..00000000
--- a/src/empathy-audio-sink.h
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
- * empathy-gst-video-sink.h - Header for EmpathyGstAudioSink
- * Copyright (C) 2008 Collabora Ltd.
- * @author Sjoerd Simons <sjoerd.simons@collabora.co.uk>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-#ifndef __EMPATHY_GST_AUDIO_SINK_H__
-#define __EMPATHY_GST_AUDIO_SINK_H__
-
-#include <gst/gst.h>
-
-G_BEGIN_DECLS
-
-typedef struct _EmpathyGstAudioSink EmpathyGstAudioSink;
-typedef struct _EmpathyGstAudioSinkClass EmpathyGstAudioSinkClass;
-typedef struct _EmpathyGstAudioSinkPrivate EmpathyGstAudioSinkPrivate;
-
-struct _EmpathyGstAudioSinkClass {
- GstBinClass parent_class;
-};
-
-struct _EmpathyGstAudioSink {
- GstBin parent;
- EmpathyGstAudioSinkPrivate *priv;
-};
-
-GType empathy_audio_sink_get_type (void);
-
-/* TYPE MACROS */
-#define EMPATHY_TYPE_GST_AUDIO_SINK \
- (empathy_audio_sink_get_type ())
-#define EMPATHY_GST_AUDIO_SINK(obj) \
- (G_TYPE_CHECK_INSTANCE_CAST((obj), EMPATHY_TYPE_GST_AUDIO_SINK, \
- EmpathyGstAudioSink))
-#define EMPATHY_GST_AUDIO_SINK_CLASS(klass) \
- (G_TYPE_CHECK_CLASS_CAST((klass), EMPATHY_TYPE_GST_AUDIO_SINK, \
- EmpathyGstAudioSinkClass))
-#define EMPATHY_IS_GST_AUDIO_SINK(obj) \
- (G_TYPE_CHECK_INSTANCE_TYPE((obj), EMPATHY_TYPE_GST_AUDIO_SINK))
-#define EMPATHY_IS_GST_AUDIO_SINK_CLASS(klass) \
- (G_TYPE_CHECK_CLASS_TYPE((klass), EMPATHY_TYPE_GST_AUDIO_SINK))
-#define EMPATHY_GST_AUDIO_SINK_GET_CLASS(obj) \
- (G_TYPE_INSTANCE_GET_CLASS ((obj), EMPATHY_TYPE_GST_AUDIO_SINK, \
- EmpathyGstAudioSinkClass))
-
-GstElement *empathy_audio_sink_new (void);
-
-void empathy_audio_sink_set_volume (EmpathyGstAudioSink *sink, gdouble volume);
-
-gdouble empathy_audio_sink_get_volume (EmpathyGstAudioSink *sink);
-void empathy_audio_sink_set_echo_cancel (EmpathyGstAudioSink *sink,
- gboolean echo_cancel);
-
-G_END_DECLS
-
-#endif /* #ifndef __EMPATHY_GST_AUDIO_SINK_H__*/
diff --git a/src/empathy-audio-src.c b/src/empathy-audio-src.c
deleted file mode 100644
index fcca6621..00000000
--- a/src/empathy-audio-src.c
+++ /dev/null
@@ -1,639 +0,0 @@
-/*
- * empathy-gst-audio-src.c - Source for EmpathyGstAudioSrc
- * Copyright (C) 2008 Collabora Ltd.
- * @author Sjoerd Simons <sjoerd.simons@collabora.co.uk>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-#include "config.h"
-#include "empathy-audio-src.h"
-
-#include <tp-account-widgets/tpaw-utils.h>
-
-#ifdef HAVE_GST1
-#include <gst/audio/streamvolume.h>
-#else
-#include <gst/interfaces/streamvolume.h>
-#endif
-
-#include "empathy-audio-utils.h"
-#include "empathy-mic-monitor.h"
-#include "empathy-utils.h"
-
-#define DEBUG_FLAG EMPATHY_DEBUG_VOIP
-#include "empathy-debug.h"
-
-G_DEFINE_TYPE(EmpathyGstAudioSrc, empathy_audio_src, GST_TYPE_BIN)
-
-enum {
- PROP_VOLUME = 1,
- PROP_MUTE,
- PROP_MICROPHONE,
-};
-
-/* private structure */
-struct _EmpathyGstAudioSrcPrivate
-{
- gboolean dispose_has_run;
- GstElement *src;
- GstElement *volume_element;
-
- EmpathyMicMonitor *mic_monitor;
-
- /* 0 if not known yet */
- guint source_output_idx;
- /* G_MAXUINT if not known yet */
- guint source_idx;
-
- gdouble volume;
- gboolean mute;
- gboolean have_stream_volume;
-
- GMutex lock;
- guint volume_idle_id;
-};
-
-#define EMPATHY_GST_AUDIO_SRC_GET_PRIVATE(o) \
- (G_TYPE_INSTANCE_GET_PRIVATE ((o), EMPATHY_TYPE_GST_AUDIO_SRC, \
- EmpathyGstAudioSrcPrivate))
-
-
-static gboolean
-empathy_audio_src_volume_changed (GObject *object,
- GParamSpec *pspec,
- gpointer user_data);
-
-static void
-empathy_audio_set_hw_mute (EmpathyGstAudioSrc *self, gboolean mute)
-{
- if (mute == self->priv->mute)
- return;
-
- if (self->priv->have_stream_volume)
- g_object_set (self->priv->src, "mute", mute, NULL);
-
- /* Belt and braces: If for some reason the underlying src doesn't mute
- * correctly or doesn't update us when it unmutes correctly enforce it using
- * our own volume element. Our UI can in no circumstances be made to think
- * the input is muted while it's not */
- g_object_set (self->priv->volume_element, "mute", mute, NULL);
-
- self->priv->mute = mute;
-}
-
-static gboolean
-empathy_audio_src_get_hw_mute (EmpathyGstAudioSrc *self)
-{
- gboolean result;
- g_object_get (self->priv->src, "mute", &result, NULL);
-
- return result;
-}
-
-static void
-empathy_audio_src_set_hw_volume (EmpathyGstAudioSrc *self,
- gdouble volume)
-{
- if (volume == self->priv->volume)
- return;
-
- if (self->priv->have_stream_volume)
- g_object_set (self->priv->src, "volume", volume, NULL);
- self->priv->volume = volume;
-}
-
-static gdouble
-empathy_audio_src_get_hw_volume (EmpathyGstAudioSrc *self)
-{
- gdouble result;
- g_object_get (self->priv->src, "volume", &result, NULL);
-
- return result;
-}
-
-
-gboolean
-empathy_audio_src_supports_changing_mic (EmpathyGstAudioSrc *self)
-{
- EmpathyGstAudioSrcPrivate *priv = EMPATHY_GST_AUDIO_SRC_GET_PRIVATE (self);
- GObjectClass *object_class;
-
- object_class = G_OBJECT_GET_CLASS (priv->src);
-
- return (g_object_class_find_property (object_class,
- "source-output-index") != NULL);
-}
-
-static guint
-empathy_audio_src_get_mic_index (EmpathyGstAudioSrc *self)
-{
- EmpathyGstAudioSrcPrivate *priv = EMPATHY_GST_AUDIO_SRC_GET_PRIVATE (self);
- guint audio_src_idx = PA_INVALID_INDEX;
-
- if (empathy_audio_src_supports_changing_mic (self))
- g_object_get (priv->src,
- "source-output-index", &audio_src_idx,
- NULL);
-
- return audio_src_idx;
-}
-
-static void
-empathy_audio_src_microphone_changed_cb (EmpathyMicMonitor *monitor,
- guint source_output_idx,
- guint source_idx,
- gpointer user_data)
-{
- EmpathyGstAudioSrc *self = user_data;
- EmpathyGstAudioSrcPrivate *priv = EMPATHY_GST_AUDIO_SRC_GET_PRIVATE (self);
- guint audio_src_idx;
-
- audio_src_idx = empathy_audio_src_get_mic_index (self);
-
- if (source_output_idx == PA_INVALID_INDEX
- || source_output_idx != audio_src_idx)
- return;
-
- if (priv->source_idx == source_idx)
- return;
-
- priv->source_idx = source_idx;
- g_object_notify (G_OBJECT (self), "microphone");
-}
-
-static void
-empathy_audio_src_get_current_mic_cb (GObject *source_object,
- GAsyncResult *result,
- gpointer user_data)
-{
- EmpathyMicMonitor *monitor = EMPATHY_MIC_MONITOR (source_object);
- EmpathyGstAudioSrc *self = user_data;
- EmpathyGstAudioSrcPrivate *priv = EMPATHY_GST_AUDIO_SRC_GET_PRIVATE (self);
- guint source_idx;
- GError *error = NULL;
-
- source_idx = empathy_mic_monitor_get_current_mic_finish (monitor, result, &error);
-
- if (error != NULL)
- {
- DEBUG ("Failed to get current mic: %s", error->message);
- g_clear_error (&error);
- return;
- }
-
- if (priv->source_idx == source_idx)
- return;
-
- priv->source_idx = source_idx;
- g_object_notify (G_OBJECT (self), "microphone");
-}
-
-static void
-empathy_audio_src_source_output_index_notify (GObject *object,
- GParamSpec *pspec,
- EmpathyGstAudioSrc *self)
-{
- EmpathyGstAudioSrcPrivate *priv = EMPATHY_GST_AUDIO_SRC_GET_PRIVATE (self);
- guint source_output_idx;
-
- source_output_idx = empathy_audio_src_get_mic_index (self);
-
- if (source_output_idx == PA_INVALID_INDEX)
- return;
-
- if (priv->source_output_idx == source_output_idx)
- return;
-
- /* It's actually changed. */
- priv->source_output_idx = source_output_idx;
-
- empathy_mic_monitor_get_current_mic_async (priv->mic_monitor,
- source_output_idx, empathy_audio_src_get_current_mic_cb, self);
-}
-
-static GstElement *
-create_src (void)
-{
- GstElement *src;
- const gchar *description;
-
- description = g_getenv ("EMPATHY_AUDIO_SRC");
-
- if (description != NULL)
- {
- GError *error = NULL;
-
- src = gst_parse_bin_from_description (description, TRUE, &error);
- if (src == NULL)
- {
- DEBUG ("Failed to create bin %s: %s", description, error->message);
- g_error_free (error);
- }
-
- return src;
- }
-
- /* Use pulsesrc as default */
- src = gst_element_factory_make ("pulsesrc", NULL);
- if (src == NULL)
- {
- g_warning ("Missing 'pulsesrc' element");
- return NULL;
- }
-
- empathy_audio_set_stream_properties (src, TRUE);
-
- /* Set latency (buffering on the PulseAudio side) of 20ms */
- g_object_set (src, "buffer-time", (gint64) 20000, NULL);
-
- return src;
-}
-
-static void
-empathy_audio_src_init (EmpathyGstAudioSrc *obj)
-{
- EmpathyGstAudioSrcPrivate *priv = EMPATHY_GST_AUDIO_SRC_GET_PRIVATE (obj);
- GstPad *ghost, *src;
-
- obj->priv = priv;
- g_mutex_init (&priv->lock);
-
- priv->volume = 1.0;
-
- priv->src = create_src ();
- if (priv->src == NULL)
- return;
-
- if (GST_IS_STREAM_VOLUME (priv->src))
- {
- gdouble volume;
- gboolean mute;
-
- priv->have_stream_volume = TRUE;
- /* We can't do a bidirection bind as the ::notify comes from another
- * thread, for other bits of empathy it's most simpler if it comes from
- * the main thread */
- g_object_bind_property (obj, "volume", priv->src, "volume",
- G_BINDING_DEFAULT);
- g_object_bind_property (obj, "mute", priv->src, "mute",
- G_BINDING_DEFAULT);
-
- /* sync and callback for bouncing */
- g_object_get (priv->src, "volume", &volume, NULL);
- g_object_set (obj, "volume", volume, NULL);
-
- g_object_get (priv->src, "mute", &mute, NULL);
- g_object_set (obj, "mute", mute, NULL);
-
- g_signal_connect (priv->src, "notify::volume",
- G_CALLBACK (empathy_audio_src_volume_changed), obj);
- g_signal_connect (priv->src, "notify::mute",
- G_CALLBACK (empathy_audio_src_volume_changed), obj);
- }
- else
- {
- g_message ("No stream volume available :(, mute will work though");
- priv->have_stream_volume = FALSE;
- }
-
- gst_bin_add (GST_BIN (obj), priv->src);
-
- priv->volume_element = gst_element_factory_make ("volume", NULL);
- gst_bin_add (GST_BIN (obj), priv->volume_element);
-
-#ifndef HAVE_GST1
- {
- GstElement *capsfilter;
- GstCaps *caps;
-
- /* Explicitly state what format we want from pulsesrc. This pushes resampling
- * and format conversion as early as possible, lowering the amount of data
- * transferred and thus improving performance. When moving to GStreamer
- * 0.11/1.0, this should change so that we actually request what the encoder
- * wants downstream. */
- caps = gst_caps_new_simple ("audio/x-raw-int",
- "channels", G_TYPE_INT, 1,
- "width", G_TYPE_INT, 16,
- "depth", G_TYPE_INT, 16,
- "rate", G_TYPE_INT, 32000,
- NULL);
- capsfilter = gst_element_factory_make ("capsfilter", NULL);
- g_object_set (G_OBJECT (capsfilter), "caps", caps, NULL);
- gst_bin_add (GST_BIN (obj), capsfilter);
- gst_element_link (priv->src, capsfilter);
- gst_element_link (capsfilter, priv->volume_element);
- }
-#else
- gst_element_link (priv->src, priv->volume_element);
-#endif
-
- src = gst_element_get_static_pad (priv->volume_element, "src");
-
- ghost = gst_ghost_pad_new ("src", src);
- gst_element_add_pad (GST_ELEMENT (obj), ghost);
-
- gst_object_unref (G_OBJECT (src));
-
- /* Listen to changes to GstPulseSrc:source-output-index so we know when
- * it's no longer PA_INVALID_INDEX (starting for the first time) or if it
- * changes (READY->NULL->READY...) */
- g_signal_connect (priv->src, "notify::source-output-index",
- G_CALLBACK (empathy_audio_src_source_output_index_notify),
- obj);
-
- priv->mic_monitor = empathy_mic_monitor_new ();
- g_signal_connect (priv->mic_monitor, "microphone-changed",
- G_CALLBACK (empathy_audio_src_microphone_changed_cb), obj);
-
- priv->source_idx = PA_INVALID_INDEX;
-}
-
-static void empathy_audio_src_dispose (GObject *object);
-static void empathy_audio_src_finalize (GObject *object);
-
-static void
-empathy_audio_src_set_property (GObject *object,
- guint property_id, const GValue *value, GParamSpec *pspec)
-{
- switch (property_id)
- {
- case PROP_VOLUME:
- empathy_audio_src_set_hw_volume (EMPATHY_GST_AUDIO_SRC (object),
- g_value_get_double (value));
- break;
- case PROP_MUTE:
- empathy_audio_set_hw_mute (EMPATHY_GST_AUDIO_SRC (object),
- g_value_get_boolean (value));
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
- }
-}
-
-static void
-empathy_audio_src_get_property (GObject *object,
- guint property_id, GValue *value, GParamSpec *pspec)
-{
- EmpathyGstAudioSrc *self = EMPATHY_GST_AUDIO_SRC (object);
- EmpathyGstAudioSrcPrivate *priv = EMPATHY_GST_AUDIO_SRC_GET_PRIVATE (self);
-
- switch (property_id)
- {
- case PROP_VOLUME:
- g_value_set_double (value, priv->volume);
- break;
- case PROP_MUTE:
- g_value_set_boolean (value, priv->mute);
- break;
- case PROP_MICROPHONE:
- g_value_set_uint (value, priv->source_idx);
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
- }
-}
-
-static void
-empathy_audio_src_class_init (EmpathyGstAudioSrcClass
- *empathy_audio_src_class)
-{
- GObjectClass *object_class = G_OBJECT_CLASS (empathy_audio_src_class);
- GParamSpec *param_spec;
-
- g_type_class_add_private (empathy_audio_src_class,
- sizeof (EmpathyGstAudioSrcPrivate));
-
- object_class->dispose = empathy_audio_src_dispose;
- object_class->finalize = empathy_audio_src_finalize;
-
- object_class->set_property = empathy_audio_src_set_property;
- object_class->get_property = empathy_audio_src_get_property;
-
- param_spec = g_param_spec_double ("volume", "Volume", "volume contol",
- 0.0, 5.0, 1.0,
- G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
- g_object_class_install_property (object_class, PROP_VOLUME, param_spec);
-
- param_spec = g_param_spec_boolean ("mute", "Mute", "mute contol",
- FALSE,
- G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
- g_object_class_install_property (object_class, PROP_MUTE, param_spec);
-
- param_spec = g_param_spec_uint ("microphone", "microphone", "microphone",
- 0, G_MAXUINT, G_MAXUINT,
- G_PARAM_READABLE | G_PARAM_STATIC_STRINGS);
- g_object_class_install_property (object_class, PROP_MICROPHONE, param_spec);
-}
-
-void
-empathy_audio_src_dispose (GObject *object)
-{
- EmpathyGstAudioSrc *self = EMPATHY_GST_AUDIO_SRC (object);
- EmpathyGstAudioSrcPrivate *priv = EMPATHY_GST_AUDIO_SRC_GET_PRIVATE (self);
-
- if (priv->dispose_has_run)
- return;
-
- priv->dispose_has_run = TRUE;
-
- if (priv->volume_idle_id != 0)
- g_source_remove (priv->volume_idle_id);
- priv->volume_idle_id = 0;
-
- tp_clear_object (&priv->mic_monitor);
-
- /* release any references held by the object here */
-
- if (G_OBJECT_CLASS (empathy_audio_src_parent_class)->dispose)
- G_OBJECT_CLASS (empathy_audio_src_parent_class)->dispose (object);
-}
-
-void
-empathy_audio_src_finalize (GObject *object)
-{
- EmpathyGstAudioSrc *self = EMPATHY_GST_AUDIO_SRC (object);
- EmpathyGstAudioSrcPrivate *priv = EMPATHY_GST_AUDIO_SRC_GET_PRIVATE (self);
-
- /* free any data held directly by the object here */
- g_mutex_clear (&priv->lock);
-
- G_OBJECT_CLASS (empathy_audio_src_parent_class)->finalize (object);
-}
-
-static gboolean
-empathy_audio_src_volume_changed_idle (gpointer user_data)
-{
- EmpathyGstAudioSrc *self = EMPATHY_GST_AUDIO_SRC (user_data);
- EmpathyGstAudioSrcPrivate *priv = EMPATHY_GST_AUDIO_SRC_GET_PRIVATE (self);
- gdouble volume;
- gboolean mute;
-
- g_mutex_lock (&priv->lock);
- priv->volume_idle_id = 0;
- g_mutex_unlock (&priv->lock);
-
- volume = empathy_audio_src_get_hw_volume (self);
-
- if (volume != priv->volume)
- {
- priv->volume = volume;
- g_object_notify (G_OBJECT (self), "volume");
- }
-
- mute = empathy_audio_src_get_hw_mute (self);
- if (mute != priv->mute)
- {
- priv->mute = mute;
- /* hw mute changed, follow with own volume */
- g_object_set (self->priv->volume_element, "mute", mute, NULL);
- g_object_notify (G_OBJECT (self), "mute");
- }
-
- return FALSE;
-}
-
-static gboolean
-empathy_audio_src_volume_changed (GObject *object,
- GParamSpec *pspec,
- gpointer user_data)
-{
- EmpathyGstAudioSrc *self = EMPATHY_GST_AUDIO_SRC (user_data);
-
- g_mutex_lock (&self->priv->lock);
- if (self->priv->volume_idle_id == 0)
- self->priv->volume_idle_id = g_idle_add (
- empathy_audio_src_volume_changed_idle, self);
- g_mutex_unlock (&self->priv->lock);
-
- return FALSE;
-}
-
-GstElement *
-empathy_audio_src_new (void)
-{
- static gboolean registered = FALSE;
-
- if (!registered) {
- if (!gst_element_register (NULL, "empathyaudiosrc",
- GST_RANK_NONE, EMPATHY_TYPE_GST_AUDIO_SRC))
- return NULL;
- registered = TRUE;
- }
- return gst_element_factory_make ("empathyaudiosrc", NULL);
-}
-
-void
-empathy_audio_src_set_echo_cancel (EmpathyGstAudioSrc *src,
- gboolean enable)
-{
- DEBUG ("Src echo cancellation setting: %s", enable ? "on" : "off");
- empathy_audio_set_stream_properties (src->priv->src, enable);
-}
-
-void
-empathy_audio_src_set_volume (EmpathyGstAudioSrc *src, gdouble volume)
-{
- g_object_set (src, "volume", volume, NULL);
-}
-
-gdouble
-empathy_audio_src_get_volume (EmpathyGstAudioSrc *src)
-{
- return src->priv->volume;
-}
-
-guint
-empathy_audio_src_get_microphone (EmpathyGstAudioSrc *src)
-{
- EmpathyGstAudioSrcPrivate *priv = EMPATHY_GST_AUDIO_SRC_GET_PRIVATE (src);
-
- return priv->source_idx;
-}
-
-static void
-empathy_audio_src_change_microphone_cb (GObject *source_object,
- GAsyncResult *result,
- gpointer user_data)
-{
- EmpathyMicMonitor *monitor = EMPATHY_MIC_MONITOR (source_object);
- GSimpleAsyncResult *simple = user_data;
- GError *error = NULL;
-
- if (!empathy_mic_monitor_change_microphone_finish (monitor,
- result, &error))
- {
- g_simple_async_result_take_error (simple, error);
- }
-
- g_simple_async_result_complete (simple);
- g_object_unref (simple);
-}
-
-void
-empathy_audio_src_change_microphone_async (EmpathyGstAudioSrc *src,
- guint microphone,
- GAsyncReadyCallback callback,
- gpointer user_data)
-{
- EmpathyGstAudioSrcPrivate *priv = EMPATHY_GST_AUDIO_SRC_GET_PRIVATE (src);
- guint source_output_idx;
- GSimpleAsyncResult *simple;
-
- simple = g_simple_async_result_new (G_OBJECT (src), callback, user_data,
- empathy_audio_src_change_microphone_async);
-
- if (!empathy_audio_src_supports_changing_mic (src))
- {
- g_simple_async_result_set_error (simple, G_IO_ERROR, G_IO_ERROR_FAILED,
- "pulsesrc is not new enough to support changing microphone");
- g_simple_async_result_complete_in_idle (simple);
- g_object_unref (simple);
- return;
- }
-
- source_output_idx = empathy_audio_src_get_mic_index (src);
-
- if (source_output_idx == PA_INVALID_INDEX)
- {
- g_simple_async_result_set_error (simple, G_IO_ERROR, G_IO_ERROR_FAILED,
- "pulsesrc is not yet PLAYING");
- g_simple_async_result_complete_in_idle (simple);
- g_object_unref (simple);
- return;
- }
-
- empathy_mic_monitor_change_microphone_async (priv->mic_monitor,
- source_output_idx, microphone, empathy_audio_src_change_microphone_cb,
- simple);
-}
-
-gboolean
-empathy_audio_src_change_microphone_finish (EmpathyGstAudioSrc *src,
- GAsyncResult *result,
- GError **error)
-{
- tpaw_implement_finish_void (src,
- empathy_audio_src_change_microphone_async);
-}
-
-void
-empathy_audio_src_set_mute (EmpathyGstAudioSrc *self,
- gboolean mute)
-{
- empathy_audio_set_hw_mute (self, mute);
-
- g_object_notify (G_OBJECT (self), "mute");
-}
diff --git a/src/empathy-audio-src.h b/src/empathy-audio-src.h
deleted file mode 100644
index 2d1a6960..00000000
--- a/src/empathy-audio-src.h
+++ /dev/null
@@ -1,84 +0,0 @@
-/*
- * empathy-gst-video-src.h - Header for EmpathyGstAudioSrc
- * Copyright (C) 2008 Collabora Ltd.
- * @author Sjoerd Simons <sjoerd.simons@collabora.co.uk>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-#ifndef __EMPATHY_GST_AUDIO_SRC_H__
-#define __EMPATHY_GST_AUDIO_SRC_H__
-
-#include <gst/gst.h>
-#include <gio/gio.h>
-
-G_BEGIN_DECLS
-
-typedef struct _EmpathyGstAudioSrc EmpathyGstAudioSrc;
-typedef struct _EmpathyGstAudioSrcClass EmpathyGstAudioSrcClass;
-typedef struct _EmpathyGstAudioSrcPrivate EmpathyGstAudioSrcPrivate;
-
-
-struct _EmpathyGstAudioSrcClass {
- GstBinClass parent_class;
-};
-
-struct _EmpathyGstAudioSrc {
- GstBin parent;
- EmpathyGstAudioSrcPrivate *priv;
-};
-
-GType empathy_audio_src_get_type (void);
-
-/* TYPE MACROS */
-#define EMPATHY_TYPE_GST_AUDIO_SRC \
- (empathy_audio_src_get_type ())
-#define EMPATHY_GST_AUDIO_SRC(obj) \
- (G_TYPE_CHECK_INSTANCE_CAST((obj), EMPATHY_TYPE_GST_AUDIO_SRC, \
- EmpathyGstAudioSrc))
-#define EMPATHY_GST_AUDIO_SRC_CLASS(klass) \
- (G_TYPE_CHECK_CLASS_CAST((klass), EMPATHY_TYPE_GST_AUDIO_SRC, \
- EmpathyGstAudioSrcClass))
-#define EMPATHY_IS_GST_AUDIO_SRC(obj) \
- (G_TYPE_CHECK_INSTANCE_TYPE((obj), EMPATHY_TYPE_GST_AUDIO_SRC))
-#define EMPATHY_IS_GST_AUDIO_SRC_CLASS(klass) \
- (G_TYPE_CHECK_CLASS_TYPE((klass), EMPATHY_TYPE_GST_AUDIO_SRC))
-#define EMPATHY_GST_AUDIO_SRC_GET_CLASS(obj) \
- (G_TYPE_INSTANCE_GET_CLASS ((obj), EMPATHY_TYPE_GST_AUDIO_SRC, \
- EmpathyGstAudioSrcClass))
-
-GstElement *empathy_audio_src_new (void);
-
-void empathy_audio_src_set_echo_cancel (EmpathyGstAudioSrc *src, gboolean
- enable);
-
-void empathy_audio_src_set_volume (EmpathyGstAudioSrc *src, gdouble volume);
-gdouble empathy_audio_src_get_volume (EmpathyGstAudioSrc *src);
-
-guint empathy_audio_src_get_microphone (EmpathyGstAudioSrc *src);
-
-gboolean empathy_audio_src_supports_changing_mic (EmpathyGstAudioSrc *self);
-
-void empathy_audio_src_change_microphone_async (EmpathyGstAudioSrc *src,
- guint microphone, GAsyncReadyCallback callback, gpointer user_data);
-gboolean empathy_audio_src_change_microphone_finish (EmpathyGstAudioSrc *src,
- GAsyncResult *result, GError **error);
-
-void empathy_audio_src_set_mute (EmpathyGstAudioSrc *self,
- gboolean mute);
-
-G_END_DECLS
-
-#endif /* #ifndef __EMPATHY_GST_AUDIO_SRC_H__*/
diff --git a/src/empathy-audio-utils.c b/src/empathy-audio-utils.c
deleted file mode 100644
index f7a00378..00000000
--- a/src/empathy-audio-utils.c
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- * Copyright (C) 2011 Collabora Ltd.
- *
- * The code contained in this file is free software; you can redistribute
- * it and/or modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either version
- * 2.1 of the License, or (at your option) any later version.
- *
- * This file is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this code; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- *
- * Authors: Emilio Pozuelo Monfort <emilio.pozuelo@collabora.co.uk>
- */
-
-#include "config.h"
-#include "empathy-audio-utils.h"
-
-#include <pulse/pulseaudio.h>
-
-#include "empathy-gsettings.h"
-
-#define DEBUG_FLAG EMPATHY_DEBUG_OTHER
-#include "empathy-debug.h"
-
-void
-empathy_audio_set_stream_properties (GstElement *element,
- gboolean echo_cancellation)
-{
- GstStructure *props;
- GSettings *gsettings_call;
- gboolean echo_cancellation_setting;
-
- gsettings_call = g_settings_new (EMPATHY_PREFS_CALL_SCHEMA);
-
- echo_cancellation_setting = g_settings_get_boolean (gsettings_call,
- EMPATHY_PREFS_CALL_ECHO_CANCELLATION);
-
- DEBUG ("Echo cancellation: element allowed: %s, user enabled: %s",
- echo_cancellation ? " yes" : "no",
- echo_cancellation_setting ? " yes" : "no");
-
-
- props = gst_structure_new ("props",
- PA_PROP_MEDIA_ROLE, G_TYPE_STRING, "phone",
- NULL);
-
- if (echo_cancellation && echo_cancellation_setting)
- {
- gst_structure_set (props,
- "filter.want", G_TYPE_STRING, "echo-cancel",
- NULL);
- }
-
- g_object_set (element, "stream-properties", props, NULL);
- gst_structure_free (props);
-
- g_object_unref (gsettings_call);
-}
diff --git a/src/empathy-audio-utils.h b/src/empathy-audio-utils.h
deleted file mode 100644
index f9f7cb89..00000000
--- a/src/empathy-audio-utils.h
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * Copyright (C) 2011 Collabora Ltd.
- *
- * The code contained in this file is free software; you can redistribute
- * it and/or modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either version
- * 2.1 of the License, or (at your option) any later version.
- *
- * This file is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this code; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- *
- * Authors: Emilio Pozuelo Monfort <emilio.pozuelo@collabora.co.uk>
- */
-
-#ifndef __EMPATHY_AUDIO_UTILS_H__
-#define __EMPATHY_AUDIO_UTILS_H__
-
-#include <gst/gst.h>
-
-G_BEGIN_DECLS
-
-void empathy_audio_set_stream_properties (GstElement *element,
- gboolean echo_cancellation);
-
-G_END_DECLS
-
-#endif
diff --git a/src/empathy-auth-client.c b/src/empathy-auth-client.c
deleted file mode 100644
index be5b13a0..00000000
--- a/src/empathy-auth-client.c
+++ /dev/null
@@ -1,364 +0,0 @@
-/*
- * Copyright (C) 2010 Collabora Ltd.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301 USA
- *
- * Authors: Cosimo Cecchi <cosimo.cecchi@collabora.co.uk>
- */
-
-#include "config.h"
-
-#include <glib/gi18n.h>
-#include <gnutls/gnutls.h>
-
-#include "empathy-auth-factory.h"
-#include "empathy-bad-password-dialog.h"
-#include "empathy-password-dialog.h"
-#include "empathy-sanity-cleaning.h"
-#include "empathy-server-tls-handler.h"
-#include "empathy-tls-dialog.h"
-#include "empathy-tls-verifier.h"
-#include "empathy-ui-utils.h"
-
-#define DEBUG_FLAG EMPATHY_DEBUG_TLS
-#include "empathy-debug.h"
-
-#define TIMEOUT 60
-
-static gboolean use_timer = TRUE;
-static guint timeout_id = 0;
-static guint num_windows = 0;
-
-static gboolean
-timeout_cb (gpointer p)
-{
- DEBUG ("Timeout reached; exiting...");
-
- gtk_main_quit ();
- return FALSE;
-}
-
-static void
-start_timer (void)
-{
- if (!use_timer)
- return;
-
- if (timeout_id != 0)
- return;
-
- DEBUG ("Start timer");
-
- timeout_id = g_timeout_add_seconds (TIMEOUT, timeout_cb, NULL);
-}
-
-static void
-stop_timer (void)
-{
- if (timeout_id == 0)
- return;
-
- DEBUG ("Stop timer");
-
- g_source_remove (timeout_id);
- timeout_id = 0;
-}
-
-static void
-tls_dialog_response_cb (GtkDialog *dialog,
- gint response_id,
- gpointer user_data)
-{
- TpTLSCertificate *certificate = NULL;
- TpTLSCertificateRejectReason reason = 0;
- GHashTable *details = NULL;
- EmpathyTLSDialog *tls_dialog = EMPATHY_TLS_DIALOG (dialog);
- gboolean remember = FALSE;
- EmpathyTLSVerifier *verifier = EMPATHY_TLS_VERIFIER (user_data);
-
- g_object_get (tls_dialog,
- "certificate", &certificate,
- "reason", &reason,
- "remember", &remember,
- "details", &details,
- NULL);
-
- DEBUG ("Response %d (remember: %d)", response_id, remember);
-
- gtk_widget_destroy (GTK_WIDGET (dialog));
-
- if (response_id == GTK_RESPONSE_YES)
- {
- tp_tls_certificate_accept_async (certificate, NULL, NULL);
- }
- else
- {
- tp_asv_set_boolean (details, "user-requested", TRUE);
- tp_tls_certificate_add_rejection (certificate, reason, NULL,
- g_variant_new_parsed ("{ 'user-requested': <%b> }", TRUE));
-
- tp_tls_certificate_reject_async (certificate, NULL, NULL);
- }
-
- if (remember)
- empathy_tls_verifier_store_exception (verifier);
-
- g_object_unref (certificate);
- g_hash_table_unref (details);
-
- /* restart the timeout */
- num_windows--;
-
- if (num_windows > 0)
- return;
-
- start_timer ();
-}
-
-static void
-display_interactive_dialog (TpTLSCertificate *certificate,
- EmpathyTLSVerifier *verifier,
- TpTLSCertificateRejectReason reason,
- GHashTable *details)
-{
- GtkWidget *tls_dialog;
-
- /* stop the timeout */
- num_windows++;
- stop_timer ();
-
- tls_dialog = empathy_tls_dialog_new (certificate, reason, details);
- g_signal_connect_data (tls_dialog, "response",
- G_CALLBACK (tls_dialog_response_cb), g_object_ref (verifier),
- (GClosureNotify)g_object_unref, 0);
-
- gtk_widget_show (tls_dialog);
-}
-
-static void
-verifier_verify_cb (GObject *source,
- GAsyncResult *result,
- gpointer user_data)
-{
- TpTLSCertificateRejectReason reason;
- GError *error = NULL;
- TpTLSCertificate *certificate = NULL;
- GHashTable *details = NULL;
- gchar *hostname = NULL;
-
- g_object_get (source,
- "certificate", &certificate,
- NULL);
-
- empathy_tls_verifier_verify_finish (EMPATHY_TLS_VERIFIER (source),
- result, &reason, &details, &error);
-
- if (error != NULL)
- {
- DEBUG ("Error: %s", error->message);
- display_interactive_dialog (certificate, EMPATHY_TLS_VERIFIER (source),
- reason, details);
-
- g_error_free (error);
- }
- else
- {
- tp_tls_certificate_accept_async (certificate, NULL, NULL);
- }
-
- g_free (hostname);
- g_object_unref (certificate);
-}
-
-static void
-auth_factory_new_tls_handler_cb (EmpathyAuthFactory *factory,
- EmpathyServerTLSHandler *handler,
- gpointer user_data)
-{
- TpTLSCertificate *certificate = NULL;
- gchar *hostname = NULL;
- gchar **reference_identities = NULL;
- EmpathyTLSVerifier *verifier;
-
- DEBUG ("New TLS server handler received from the factory");
-
- g_object_get (handler,
- "certificate", &certificate,
- "hostname", &hostname,
- "reference-identities", &reference_identities,
- NULL);
-
- verifier = empathy_tls_verifier_new (certificate, hostname,
- (const gchar **) reference_identities);
- empathy_tls_verifier_verify_async (verifier,
- verifier_verify_cb, NULL);
-
- g_object_unref (verifier);
- g_object_unref (certificate);
- g_free (hostname);
- g_strfreev (reference_identities);
-}
-
-static void
-auth_factory_new_sasl_handler_cb (EmpathyAuthFactory *factory,
- EmpathyServerSASLHandler *handler,
- gpointer user_data)
-{
- GtkWidget *dialog;
-
- DEBUG ("New SASL server handler received from the factory");
-
- /* If the handler has the password it will deal with it itself. */
- if (!empathy_server_sasl_handler_has_password (handler))
- {
- DEBUG ("SASL handler doesn't have a password, prompt for one");
-
- dialog = empathy_password_dialog_new (handler);
- gtk_widget_show (dialog);
- }
-}
-
-static void
-retry_account_cb (GtkWidget *dialog,
- TpAccount *account,
- const gchar *password,
- EmpathyAuthFactory *factory)
-{
- DEBUG ("Try reconnecting to %s", tp_account_get_path_suffix (account));
-
- empathy_auth_factory_save_retry_password (factory, account, password);
-
- tp_account_reconnect_async (account, NULL, NULL);
-}
-
-static void
-auth_factory_auth_passsword_failed (EmpathyAuthFactory *factory,
- TpAccount *account,
- const gchar *password,
- gpointer user_data)
-{
- GtkWidget *dialog;
-
- DEBUG ("Authentication on %s failed, popup password dialog",
- tp_account_get_path_suffix (account));
-
- dialog = empathy_bad_password_dialog_new (account, password);
-
- tp_g_signal_connect_object (dialog, "retry",
- G_CALLBACK (retry_account_cb), factory, 0);
-
- gtk_widget_show (dialog);
-}
-
-static void
-sanity_cb (GObject *source,
- GAsyncResult *result,
- gpointer user_data)
-{
- start_timer ();
-}
-
-int
-main (int argc,
- char **argv)
-{
- GOptionContext *context;
- GError *error = NULL;
- EmpathyAuthFactory *factory;
- TpDebugSender *debug_sender;
- TpSimpleClientFactory *tp_factory;
- TpDBusDaemon *dbus;
-
- context = g_option_context_new (N_(" - Empathy authentication client"));
- g_option_context_add_group (context, gtk_get_option_group (TRUE));
- g_option_context_set_translation_domain (context, GETTEXT_PACKAGE);
-
- if (!g_option_context_parse (context, &argc, &argv, &error))
- {
- g_print ("%s\nRun '%s --help' to see a full list of available command "
- "line options.\n", error->message, argv[0]);
- g_warning ("Error in empathy-auth-client init: %s", error->message);
- return EXIT_FAILURE;
- }
-
- g_option_context_free (context);
-
- empathy_gtk_init ();
- gnutls_global_init ();
- g_set_application_name (_("Empathy authentication client"));
-
- /* Make empathy and empathy-auth-client appear as the same app in
- * gnome-shell */
- gdk_set_program_class ("Empathy");
- gtk_window_set_default_icon_name ("empathy");
- textdomain (GETTEXT_PACKAGE);
-
- /* There is no 'main' UI window so just use the default GdkScreen */
- empathy_set_css_provider (NULL);
-
-#ifdef ENABLE_DEBUG
- /* Set up debug sender */
- debug_sender = tp_debug_sender_dup ();
- g_log_set_default_handler (tp_debug_sender_log_handler, G_LOG_DOMAIN);
-#endif
-
- dbus = tp_dbus_daemon_dup (NULL);
- tp_factory = tp_simple_client_factory_new (dbus);
- tp_simple_client_factory_add_account_features_varargs (tp_factory,
- TP_ACCOUNT_FEATURE_STORAGE,
- 0);
-
- factory = empathy_auth_factory_new (tp_factory);
- g_object_unref (tp_factory);
- g_object_unref (dbus);
-
- g_signal_connect (factory, "new-server-tls-handler",
- G_CALLBACK (auth_factory_new_tls_handler_cb), NULL);
-
- g_signal_connect (factory, "new-server-sasl-handler",
- G_CALLBACK (auth_factory_new_sasl_handler_cb), NULL);
-
- g_signal_connect (factory, "auth-password-failed",
- G_CALLBACK (auth_factory_auth_passsword_failed), NULL);
-
- if (!empathy_auth_factory_register (factory, &error))
- {
- g_critical ("Failed to register the auth factory: %s\n", error->message);
- g_error_free (error);
- g_object_unref (factory);
-
- return EXIT_FAILURE;
- }
-
- DEBUG ("Empathy auth client started.");
-
- if (g_getenv ("EMPATHY_PERSIST") != NULL)
- {
- DEBUG ("Timed-exit disabled");
-
- use_timer = FALSE;
- }
-
- /* Wait for the migration code to be done before starting the timer */
- empathy_sanity_checking_run_async (sanity_cb, NULL);
-
- gtk_main ();
-
- g_object_unref (factory);
- g_object_unref (debug_sender);
-
- return EXIT_SUCCESS;
-}
diff --git a/src/empathy-call-factory.c b/src/empathy-call-factory.c
deleted file mode 100644
index 71ec4d63..00000000
--- a/src/empathy-call-factory.c
+++ /dev/null
@@ -1,303 +0,0 @@
-/*
- * empathy-call-factory.c - Source for EmpathyCallFactory
- * Copyright (C) 2008 Collabora Ltd.
- * @author Sjoerd Simons <sjoerd.simons@collabora.co.uk>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-#include "config.h"
-#include "empathy-client-factory.h"
-
-#include "empathy-call-factory.h"
-#include "empathy-call-handler.h"
-#include "empathy-request-util.h"
-
-#define DEBUG_FLAG EMPATHY_DEBUG_VOIP
-#include "empathy-debug.h"
-
-G_DEFINE_TYPE(EmpathyCallFactory, empathy_call_factory, TP_TYPE_BASE_CLIENT)
-
-static void handle_channels (TpBaseClient *client,
- TpAccount *account,
- TpConnection *connection,
- GList *channels,
- GList *requests_satisfied,
- gint64 user_action_time,
- TpHandleChannelsContext *context);
-
-static void approve_channels (TpBaseClient *client,
- TpAccount *account,
- TpConnection *connection,
- GList *channels,
- TpChannelDispatchOperation *dispatch_operation,
- TpAddDispatchOperationContext *context);
-
-/* signal enum */
-enum
-{
- NEW_CALL_HANDLER,
- INCOMING_CALL,
- LAST_SIGNAL
-};
-
-static guint signals[LAST_SIGNAL] = {0};
-
-static GObject *call_factory = NULL;
-
-static void
-empathy_call_factory_init (EmpathyCallFactory *obj)
-{
- TpBaseClient *client = (TpBaseClient *) obj;
-
- tp_base_client_take_approver_filter (client, tp_asv_new (
- TP_PROP_CHANNEL_CHANNEL_TYPE, G_TYPE_STRING,
- TP_IFACE_CHANNEL_TYPE_CALL,
- TP_PROP_CHANNEL_TARGET_HANDLE_TYPE,
- G_TYPE_UINT, TP_HANDLE_TYPE_CONTACT,
- NULL));
-
- tp_base_client_take_handler_filter (client, tp_asv_new (
- TP_PROP_CHANNEL_CHANNEL_TYPE, G_TYPE_STRING,
- TP_IFACE_CHANNEL_TYPE_CALL,
- TP_PROP_CHANNEL_TARGET_HANDLE_TYPE,
- G_TYPE_UINT, TP_HANDLE_TYPE_CONTACT,
- NULL));
-
- tp_base_client_take_handler_filter (client, tp_asv_new (
- TP_PROP_CHANNEL_CHANNEL_TYPE, G_TYPE_STRING,
- TP_IFACE_CHANNEL_TYPE_CALL,
- TP_PROP_CHANNEL_TARGET_HANDLE_TYPE,
- G_TYPE_UINT, TP_HANDLE_TYPE_CONTACT,
- TP_PROP_CHANNEL_TYPE_CALL_INITIAL_AUDIO, G_TYPE_BOOLEAN, TRUE,
- NULL));
-
- tp_base_client_take_handler_filter (client, tp_asv_new (
- TP_PROP_CHANNEL_CHANNEL_TYPE, G_TYPE_STRING,
- TP_IFACE_CHANNEL_TYPE_CALL,
- TP_PROP_CHANNEL_TARGET_HANDLE_TYPE,
- G_TYPE_UINT, TP_HANDLE_TYPE_CONTACT,
- TP_PROP_CHANNEL_TYPE_CALL_INITIAL_VIDEO, G_TYPE_BOOLEAN, TRUE,
- NULL));
-
- tp_base_client_add_handler_capabilities_varargs (client,
- "org.freedesktop.Telepathy.Channel.Type.Call1/audio",
- "org.freedesktop.Telepathy.Channel.Type.Call1/video",
- "org.freedesktop.Telepathy.Channel.Type.Call1/ice",
- "org.freedesktop.Telepathy.Channel.Type.Call1/gtalk-p2p",
- "org.freedesktop.Telepathy.Channel.Type.Call1/video/h264",
- NULL);
-}
-
-static GObject *
-empathy_call_factory_constructor (GType type, guint n_construct_params,
- GObjectConstructParam *construct_params)
-{
- g_return_val_if_fail (call_factory == NULL, NULL);
-
- call_factory = G_OBJECT_CLASS (empathy_call_factory_parent_class)->constructor
- (type, n_construct_params, construct_params);
- g_object_add_weak_pointer (call_factory, (gpointer)&call_factory);
-
- return call_factory;
-}
-
-static void
-empathy_call_factory_class_init (EmpathyCallFactoryClass *klass)
-{
- GObjectClass *object_class = G_OBJECT_CLASS (klass);
- TpBaseClientClass *base_clt_cls = TP_BASE_CLIENT_CLASS (klass);
-
- object_class->constructor = empathy_call_factory_constructor;
-
- base_clt_cls->handle_channels = handle_channels;
- base_clt_cls->add_dispatch_operation = approve_channels;
-
- signals[NEW_CALL_HANDLER] =
- g_signal_new ("new-call-handler",
- G_TYPE_FROM_CLASS (klass),
- G_SIGNAL_RUN_LAST, 0,
- NULL, NULL,
- g_cclosure_marshal_generic,
- G_TYPE_NONE,
- 2, EMPATHY_TYPE_CALL_HANDLER, G_TYPE_UINT64);
-
- signals[INCOMING_CALL] =
- g_signal_new ("incoming-call",
- G_TYPE_FROM_CLASS (klass),
- G_SIGNAL_RUN_LAST, 0,
- NULL, NULL,
- g_cclosure_marshal_generic,
- G_TYPE_BOOLEAN,
- 4, G_TYPE_UINT, TP_TYPE_CALL_CHANNEL,
- TP_TYPE_CHANNEL_DISPATCH_OPERATION,
- TP_TYPE_ADD_DISPATCH_OPERATION_CONTEXT);
-}
-
-EmpathyCallFactory *
-empathy_call_factory_initialise (void)
-{
- EmpathyCallFactory *self;
- EmpathyClientFactory *factory;
- TpAccountManager *am;
-
- g_return_val_if_fail (call_factory == NULL, NULL);
-
- am = tp_account_manager_dup ();
- factory = empathy_client_factory_dup ();
-
- self = EMPATHY_CALL_FACTORY (g_object_new (EMPATHY_TYPE_CALL_FACTORY,
- "account-manager", am,
- "factory", factory,
- "name", EMPATHY_CALL_BUS_NAME_SUFFIX,
- NULL));
-
- g_object_unref (am);
- g_object_unref (factory);
-
- return self;
-}
-
-EmpathyCallFactory *
-empathy_call_factory_get (void)
-{
- g_return_val_if_fail (call_factory != NULL, NULL);
-
- return EMPATHY_CALL_FACTORY (call_factory);
-}
-
-static void
-handle_channels (TpBaseClient *client,
- TpAccount *account,
- TpConnection *connection,
- GList *channels,
- GList *requests_satisfied,
- gint64 user_action_time,
- TpHandleChannelsContext *context)
-{
- EmpathyCallFactory *self = EMPATHY_CALL_FACTORY (client);
- GList *l;
-
- for (l = channels; l != NULL; l = g_list_next (l))
- {
- TpChannel *channel = l->data;
- TpCallChannel *call;
- TpContact *tp_contact;
- EmpathyContact *contact;
- EmpathyCallHandler *handler;
-
- if (tp_proxy_get_invalidated (channel) != NULL)
- continue;
-
- if (tp_channel_get_channel_type_id (channel) !=
- TP_IFACE_QUARK_CHANNEL_TYPE_CALL)
- continue;
-
- if (!TP_IS_CALL_CHANNEL (channel))
- continue;
-
- call = TP_CALL_CHANNEL (channel);
-
- tp_contact = tp_channel_get_target_contact (channel);
- contact = empathy_contact_dup_from_tp_contact (tp_contact);
- handler = empathy_call_handler_new_for_channel (call, contact);
-
- g_signal_emit (self, signals[NEW_CALL_HANDLER], 0,
- handler, user_action_time);
-
- g_object_unref (handler);
- g_object_unref (contact);
- }
-
- tp_handle_channels_context_accept (context);
-}
-
-static TpCallChannel *
-find_call_channel (GList *channels)
-{
- GList *l;
-
- for (l = channels; l != NULL; l = g_list_next (l))
- {
- TpChannel *channel = l->data;
- GQuark channel_type;
-
- if (tp_proxy_get_invalidated (channel) != NULL)
- continue;
-
- channel_type = tp_channel_get_channel_type_id (channel);
-
- if (channel_type == TP_IFACE_QUARK_CHANNEL_TYPE_CALL)
- return TP_CALL_CHANNEL (channel);
- }
-
- return NULL;
-}
-
-static void
-approve_channels (TpBaseClient *client,
- TpAccount *account,
- TpConnection *connection,
- GList *channels,
- TpChannelDispatchOperation *dispatch_operation,
- TpAddDispatchOperationContext *context)
-{
- EmpathyCallFactory *self = EMPATHY_CALL_FACTORY (client);
- TpCallChannel *channel;
- guint handle;
- GError error = { TP_ERROR, TP_ERROR_INVALID_ARGUMENT, "" };
- gboolean handled = FALSE;
-
- channel = find_call_channel (channels);
-
- if (channel == NULL)
- {
- DEBUG ("Failed to find the main channel; ignoring");
- error.message = "Unknown channel";
- goto out;
- }
-
- handle = tp_channel_get_handle (TP_CHANNEL (channel), NULL);
-
- if (handle == 0)
- {
- DEBUG ("Unknown handle, ignoring");
- error.code = TP_ERROR_INVALID_HANDLE;
- error.message = "Unknown handle";
- goto out;
- }
-
- g_signal_emit (self, signals[INCOMING_CALL], 0,
- handle, channel, dispatch_operation, context,
- &handled);
-
- if (handled)
- return;
-
- /* There was no call window so the context wasn't handled. */
- DEBUG ("Call with a contact for which there's no existing "
- "call window, ignoring");
- error.message = "No call window with this contact";
-
- out:
- tp_add_dispatch_operation_context_fail (context, &error);
-}
-
-gboolean
-empathy_call_factory_register (EmpathyCallFactory *self,
- GError **error)
-{
- return tp_base_client_register (TP_BASE_CLIENT (self), error);
-}
diff --git a/src/empathy-call-factory.h b/src/empathy-call-factory.h
deleted file mode 100644
index b913d8e5..00000000
--- a/src/empathy-call-factory.h
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
- * empathy-call-factory.h - Header for EmpathyCallFactory
- * Copyright (C) 2008 Collabora Ltd.
- * @author Sjoerd Simons <sjoerd.simons@collabora.co.uk>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-#ifndef __EMPATHY_CALL_FACTORY_H__
-#define __EMPATHY_CALL_FACTORY_H__
-
-#include <telepathy-glib/telepathy-glib.h>
-
-G_BEGIN_DECLS
-
-typedef struct _EmpathyCallFactory EmpathyCallFactory;
-typedef struct _EmpathyCallFactoryClass EmpathyCallFactoryClass;
-
-struct _EmpathyCallFactoryClass {
- TpBaseClientClass parent_class;
-};
-
-struct _EmpathyCallFactory {
- TpBaseClient parent;
-};
-
-GType empathy_call_factory_get_type (void);
-
-/* TYPE MACROS */
-#define EMPATHY_TYPE_CALL_FACTORY \
- (empathy_call_factory_get_type ())
-#define EMPATHY_CALL_FACTORY(obj) \
- (G_TYPE_CHECK_INSTANCE_CAST((obj), EMPATHY_TYPE_CALL_FACTORY, \
- EmpathyCallFactory))
-#define EMPATHY_CALL_FACTORY_CLASS(klass) \
- (G_TYPE_CHECK_CLASS_CAST((klass), EMPATHY_TYPE_CALL_FACTORY, \
- EmpathyCallFactoryClass))
-#define EMPATHY_IS_CALL_FACTORY(obj) \
- (G_TYPE_CHECK_INSTANCE_TYPE((obj), EMPATHY_TYPE_CALL_FACTORY))
-#define EMPATHY_IS_CALL_FACTORY_CLASS(klass) \
- (G_TYPE_CHECK_CLASS_TYPE((klass), EMPATHY_TYPE_CALL_FACTORY))
-#define EMPATHY_CALL_FACTORY_GET_CLASS(obj) \
- (G_TYPE_INSTANCE_GET_CLASS ((obj), EMPATHY_TYPE_CALL_FACTORY, \
- EmpathyCallFactoryClass))
-
-
-EmpathyCallFactory *empathy_call_factory_initialise (void);
-
-EmpathyCallFactory *empathy_call_factory_get (void);
-
-gboolean empathy_call_factory_register (EmpathyCallFactory *self,
- GError **error);
-
-G_END_DECLS
-
-#endif /* #ifndef __EMPATHY_CALL_FACTORY_H__*/
diff --git a/src/empathy-call-handler.c b/src/empathy-call-handler.c
deleted file mode 100644
index 1c4939af..00000000
--- a/src/empathy-call-handler.c
+++ /dev/null
@@ -1,1056 +0,0 @@
-/*
- * empathy-call-handler.c - Source for EmpathyCallHandler
- * Copyright (C) 2008-2009 Collabora Ltd.
- * @author Sjoerd Simons <sjoerd.simons@collabora.co.uk>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-#include "config.h"
-#include "empathy-call-handler.h"
-
-#include <telepathy-farstream/telepathy-farstream.h>
-
-#include "empathy-call-utils.h"
-#include "empathy-utils.h"
-
-#define DEBUG_FLAG EMPATHY_DEBUG_VOIP
-#include "empathy-debug.h"
-
-G_DEFINE_TYPE(EmpathyCallHandler, empathy_call_handler, G_TYPE_OBJECT)
-
-/* signal enum */
-enum {
- CONFERENCE_ADDED,
- CONFERENCE_REMOVED,
- SRC_PAD_ADDED,
- CONTENT_ADDED,
- CONTENT_REMOVED,
- CLOSED,
- CANDIDATES_CHANGED,
- STATE_CHANGED,
- FRAMERATE_CHANGED,
- RESOLUTION_CHANGED,
- LAST_SIGNAL
-};
-
-static guint signals[LAST_SIGNAL] = {0};
-
-enum {
- PROP_CALL_CHANNEL = 1,
- PROP_GST_BUS,
- PROP_CONTACT,
- PROP_INITIAL_AUDIO,
- PROP_INITIAL_VIDEO,
- PROP_SEND_AUDIO_CODEC,
- PROP_SEND_VIDEO_CODEC,
- PROP_RECV_AUDIO_CODECS,
- PROP_RECV_VIDEO_CODECS,
- PROP_AUDIO_REMOTE_CANDIDATE,
- PROP_VIDEO_REMOTE_CANDIDATE,
- PROP_AUDIO_LOCAL_CANDIDATE,
- PROP_VIDEO_LOCAL_CANDIDATE,
-};
-
-/* private structure */
-
-struct _EmpathyCallHandlerPriv {
- TpCallChannel *call;
-
- EmpathyContact *contact;
- TfChannel *tfchannel;
- gboolean initial_audio;
- gboolean initial_video;
-
- FsCodec *send_audio_codec;
- FsCodec *send_video_codec;
- GList *recv_audio_codecs;
- GList *recv_video_codecs;
- FsCandidate *audio_remote_candidate;
- FsCandidate *video_remote_candidate;
- FsCandidate *audio_local_candidate;
- FsCandidate *video_local_candidate;
- gboolean accept_when_initialised;
-};
-
-#define GET_PRIV(obj) EMPATHY_GET_PRIV (obj, EmpathyCallHandler)
-
-static void
-empathy_call_handler_dispose (GObject *object)
-{
- EmpathyCallHandlerPriv *priv = GET_PRIV (object);
-
- tp_clear_object (&priv->tfchannel);
- tp_clear_object (&priv->call);
- tp_clear_object (&priv->contact);
-
- G_OBJECT_CLASS (empathy_call_handler_parent_class)->dispose (object);
-}
-
-static void
-empathy_call_handler_finalize (GObject *object)
-{
- EmpathyCallHandlerPriv *priv = GET_PRIV (object);
-
- fs_codec_destroy (priv->send_audio_codec);
- fs_codec_destroy (priv->send_video_codec);
- fs_codec_list_destroy (priv->recv_audio_codecs);
- fs_codec_list_destroy (priv->recv_video_codecs);
- fs_candidate_destroy (priv->audio_remote_candidate);
- fs_candidate_destroy (priv->video_remote_candidate);
- fs_candidate_destroy (priv->audio_local_candidate);
- fs_candidate_destroy (priv->video_local_candidate);
-
- G_OBJECT_CLASS (empathy_call_handler_parent_class)->finalize (object);
-}
-
-static void
-empathy_call_handler_init (EmpathyCallHandler *obj)
-{
- EmpathyCallHandlerPriv *priv = G_TYPE_INSTANCE_GET_PRIVATE (obj,
- EMPATHY_TYPE_CALL_HANDLER, EmpathyCallHandlerPriv);
-
- obj->priv = priv;
-}
-
-static void
-on_call_accepted_cb (GObject *source_object,
- GAsyncResult *res,
- gpointer user_data)
-{
- TpCallChannel *call = TP_CALL_CHANNEL (source_object);
- GError *error = NULL;
-
- if (!tp_call_channel_accept_finish (call, res, &error))
- {
- g_warning ("could not accept Call: %s", error->message);
- g_error_free (error);
- }
-}
-
-static void
-on_call_invalidated_cb (TpCallChannel *call,
- guint domain,
- gint code,
- gchar *message,
- EmpathyCallHandler *self)
-{
- EmpathyCallHandlerPriv *priv = self->priv;
-
- if (priv->call == call)
- {
- /* Invalidated unexpectedly? Fake call ending */
- g_signal_emit (self, signals[STATE_CHANGED], 0,
- TP_CALL_STATE_ENDED, NULL);
- priv->accept_when_initialised = FALSE;
- tp_clear_object (&priv->call);
- tp_clear_object (&priv->tfchannel);
- }
-}
-
-static void
-on_call_state_changed_cb (TpCallChannel *call,
- TpCallState state,
- TpCallFlags flags,
- TpCallStateReason *reason,
- GHashTable *details,
- EmpathyCallHandler *handler)
-{
- EmpathyCallHandlerPriv *priv = handler->priv;
-
- /* Clean up the TfChannel before bubbling the state-change signal
- * further up. This ensures that the conference-removed signal is
- * emitted before state-changed so that the client gets a chance
- * to remove the conference from the pipeline before resetting the
- * pipeline itself.
- */
- if (state == TP_CALL_STATE_ENDED)
- {
- tp_channel_close_async (TP_CHANNEL (call), NULL, NULL);
- priv->accept_when_initialised = FALSE;
- tp_clear_object (&priv->call);
- tp_clear_object (&priv->tfchannel);
- }
-
- g_signal_emit (handler, signals[STATE_CHANGED], 0, state,
- reason->dbus_reason);
-
- if (state == TP_CALL_STATE_INITIALISED &&
- priv->accept_when_initialised)
- {
- tp_call_channel_accept_async (priv->call, on_call_accepted_cb, NULL);
- priv->accept_when_initialised = FALSE;
- }
-}
-
-static void
-empathy_call_handler_set_property (GObject *object,
- guint property_id, const GValue *value, GParamSpec *pspec)
-{
- EmpathyCallHandlerPriv *priv = GET_PRIV (object);
-
- switch (property_id)
- {
- case PROP_CONTACT:
- priv->contact = g_value_dup_object (value);
- break;
- case PROP_CALL_CHANNEL:
- g_return_if_fail (priv->call == NULL);
-
- priv->call = g_value_dup_object (value);
-
- tp_g_signal_connect_object (priv->call, "state-changed",
- G_CALLBACK (on_call_state_changed_cb), object, 0);
- tp_g_signal_connect_object (priv->call, "invalidated",
- G_CALLBACK (on_call_invalidated_cb), object, 0);
- break;
- case PROP_INITIAL_AUDIO:
- priv->initial_audio = g_value_get_boolean (value);
- break;
- case PROP_INITIAL_VIDEO:
- priv->initial_video = g_value_get_boolean (value);
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
- }
-}
-
-static void
-empathy_call_handler_get_property (GObject *object,
- guint property_id, GValue *value, GParamSpec *pspec)
-{
- EmpathyCallHandlerPriv *priv = GET_PRIV (object);
-
- switch (property_id)
- {
- case PROP_CONTACT:
- g_value_set_object (value, priv->contact);
- break;
- case PROP_CALL_CHANNEL:
- g_value_set_object (value, priv->call);
- break;
- case PROP_INITIAL_AUDIO:
- g_value_set_boolean (value, priv->initial_audio);
- break;
- case PROP_INITIAL_VIDEO:
- g_value_set_boolean (value, priv->initial_video);
- break;
- case PROP_SEND_AUDIO_CODEC:
- g_value_set_boxed (value, priv->send_audio_codec);
- break;
- case PROP_SEND_VIDEO_CODEC:
- g_value_set_boxed (value, priv->send_video_codec);
- break;
- case PROP_RECV_AUDIO_CODECS:
- g_value_set_boxed (value, priv->recv_audio_codecs);
- break;
- case PROP_RECV_VIDEO_CODECS:
- g_value_set_boxed (value, priv->recv_video_codecs);
- break;
- case PROP_AUDIO_REMOTE_CANDIDATE:
- g_value_set_boxed (value, priv->audio_remote_candidate);
- break;
- case PROP_VIDEO_REMOTE_CANDIDATE:
- g_value_set_boxed (value, priv->video_remote_candidate);
- break;
- case PROP_AUDIO_LOCAL_CANDIDATE:
- g_value_set_boxed (value, priv->audio_local_candidate);
- break;
- case PROP_VIDEO_LOCAL_CANDIDATE:
- g_value_set_boxed (value, priv->video_local_candidate);
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
- }
-}
-
-
-static void
-empathy_call_handler_class_init (EmpathyCallHandlerClass *klass)
-{
- GObjectClass *object_class = G_OBJECT_CLASS (klass);
- GParamSpec *param_spec;
-
- g_type_class_add_private (klass, sizeof (EmpathyCallHandlerPriv));
-
- object_class->set_property = empathy_call_handler_set_property;
- object_class->get_property = empathy_call_handler_get_property;
- object_class->dispose = empathy_call_handler_dispose;
- object_class->finalize = empathy_call_handler_finalize;
-
- param_spec = g_param_spec_object ("target-contact",
- "TargetContact", "The contact",
- EMPATHY_TYPE_CONTACT,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS);
- g_object_class_install_property (object_class, PROP_CONTACT, param_spec);
-
- param_spec = g_param_spec_object ("call-channel",
- "call channel", "The call channel",
- TP_TYPE_CALL_CHANNEL,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS);
- g_object_class_install_property (object_class, PROP_CALL_CHANNEL, param_spec);
-
- param_spec = g_param_spec_boolean ("initial-audio",
- "initial-audio", "Whether the call should start with audio",
- TRUE,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS);
- g_object_class_install_property (object_class, PROP_INITIAL_AUDIO,
- param_spec);
-
- param_spec = g_param_spec_boolean ("initial-video",
- "initial-video", "Whether the call should start with video",
- FALSE,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT | G_PARAM_STATIC_STRINGS);
- g_object_class_install_property (object_class, PROP_INITIAL_VIDEO,
- param_spec);
-
- param_spec = g_param_spec_boxed ("send-audio-codec",
- "send audio codec", "Codec used to encode the outgoing video stream",
- FS_TYPE_CODEC,
- G_PARAM_READABLE | G_PARAM_STATIC_STRINGS);
- g_object_class_install_property (object_class, PROP_SEND_AUDIO_CODEC,
- param_spec);
-
- param_spec = g_param_spec_boxed ("send-video-codec",
- "send video codec", "Codec used to encode the outgoing video stream",
- FS_TYPE_CODEC,
- G_PARAM_READABLE | G_PARAM_STATIC_STRINGS);
- g_object_class_install_property (object_class, PROP_SEND_VIDEO_CODEC,
- param_spec);
-
- param_spec = g_param_spec_boxed ("recv-audio-codecs",
- "recvs audio codec", "Codecs used to decode the incoming audio stream",
- FS_TYPE_CODEC_LIST,
- G_PARAM_READABLE | G_PARAM_STATIC_STRINGS);
- g_object_class_install_property (object_class, PROP_RECV_AUDIO_CODECS,
- param_spec);
-
- param_spec = g_param_spec_boxed ("recv-video-codecs",
- "recvs video codec", "Codecs used to decode the incoming video stream",
- FS_TYPE_CODEC_LIST,
- G_PARAM_READABLE | G_PARAM_STATIC_STRINGS);
- g_object_class_install_property (object_class, PROP_RECV_VIDEO_CODECS,
- param_spec);
-
- param_spec = g_param_spec_boxed ("audio-remote-candidate",
- "audio remote candidate",
- "Remote candidate used for the audio stream",
- FS_TYPE_CANDIDATE,
- G_PARAM_READABLE | G_PARAM_STATIC_STRINGS);
- g_object_class_install_property (object_class,
- PROP_AUDIO_REMOTE_CANDIDATE, param_spec);
-
- param_spec = g_param_spec_boxed ("video-remote-candidate",
- "video remote candidate",
- "Remote candidate used for the video stream",
- FS_TYPE_CANDIDATE,
- G_PARAM_READABLE | G_PARAM_STATIC_STRINGS);
- g_object_class_install_property (object_class,
- PROP_VIDEO_REMOTE_CANDIDATE, param_spec);
-
- param_spec = g_param_spec_boxed ("audio-local-candidate",
- "audio local candidate",
- "Local candidate used for the audio stream",
- FS_TYPE_CANDIDATE,
- G_PARAM_READABLE | G_PARAM_STATIC_STRINGS);
- g_object_class_install_property (object_class,
- PROP_AUDIO_REMOTE_CANDIDATE, param_spec);
-
- param_spec = g_param_spec_boxed ("video-local-candidate",
- "video local candidate",
- "Local candidate used for the video stream",
- FS_TYPE_CANDIDATE,
- G_PARAM_READABLE | G_PARAM_STATIC_STRINGS);
- g_object_class_install_property (object_class,
- PROP_VIDEO_REMOTE_CANDIDATE, param_spec);
-
- signals[CONFERENCE_ADDED] =
- g_signal_new ("conference-added", G_TYPE_FROM_CLASS (klass),
- G_SIGNAL_RUN_LAST, 0, NULL, NULL,
- g_cclosure_marshal_generic,
- G_TYPE_NONE,
- 1, FS_TYPE_CONFERENCE);
-
- signals[CONFERENCE_REMOVED] =
- g_signal_new ("conference-removed", G_TYPE_FROM_CLASS (klass),
- G_SIGNAL_RUN_LAST, 0, NULL, NULL,
- g_cclosure_marshal_generic,
- G_TYPE_NONE,
- 1, FS_TYPE_CONFERENCE);
-
- signals[SRC_PAD_ADDED] =
- g_signal_new ("src-pad-added", G_TYPE_FROM_CLASS (klass),
- G_SIGNAL_RUN_LAST, 0, NULL, NULL,
- g_cclosure_marshal_generic,
- G_TYPE_BOOLEAN,
- 2, TF_TYPE_CONTENT, GST_TYPE_PAD);
-
- signals[CONTENT_ADDED] =
- g_signal_new ("content-added", G_TYPE_FROM_CLASS (klass),
- G_SIGNAL_RUN_LAST, 0, NULL, NULL,
- g_cclosure_marshal_generic,
- G_TYPE_BOOLEAN,
- 1, TF_TYPE_CONTENT);
-
- signals[CONTENT_REMOVED] =
- g_signal_new ("content-removed", G_TYPE_FROM_CLASS (klass),
- G_SIGNAL_RUN_LAST, 0, NULL, NULL,
- g_cclosure_marshal_generic,
- G_TYPE_BOOLEAN,
- 1, TF_TYPE_CONTENT);
-
- signals[CLOSED] =
- g_signal_new ("closed", G_TYPE_FROM_CLASS (klass),
- G_SIGNAL_RUN_LAST, 0, NULL, NULL,
- g_cclosure_marshal_generic,
- G_TYPE_NONE,
- 0);
-
- signals[CANDIDATES_CHANGED] =
- g_signal_new ("candidates-changed", G_TYPE_FROM_CLASS (klass),
- G_SIGNAL_RUN_LAST, 0, NULL, NULL,
- g_cclosure_marshal_generic,
- G_TYPE_NONE, 1, G_TYPE_UINT);
-
- signals[STATE_CHANGED] =
- g_signal_new ("state-changed", G_TYPE_FROM_CLASS (klass),
- G_SIGNAL_RUN_LAST, 0, NULL, NULL,
- g_cclosure_marshal_generic,
- G_TYPE_NONE, 2, G_TYPE_UINT, G_TYPE_STRING);
-
- signals[FRAMERATE_CHANGED] =
- g_signal_new ("framerate-changed", G_TYPE_FROM_CLASS (klass),
- G_SIGNAL_RUN_LAST, 0, NULL, NULL,
- g_cclosure_marshal_generic,
- G_TYPE_NONE, 1, G_TYPE_UINT);
-
- signals[RESOLUTION_CHANGED] =
- g_signal_new ("resolution-changed", G_TYPE_FROM_CLASS (klass),
- G_SIGNAL_RUN_LAST, 0, NULL, NULL,
- g_cclosure_marshal_generic,
- G_TYPE_NONE,
- 2, G_TYPE_UINT, G_TYPE_UINT);
-}
-
-EmpathyCallHandler *
-empathy_call_handler_new_for_channel (TpCallChannel *call,
- EmpathyContact *contact)
-{
- return EMPATHY_CALL_HANDLER (g_object_new (EMPATHY_TYPE_CALL_HANDLER,
- "call-channel", call,
- "initial-video", tp_call_channel_has_initial_video (call, NULL),
- "target-contact", contact,
- NULL));
-}
-
-static void
-update_sending_codec (EmpathyCallHandler *self,
- FsCodec *codec,
- FsSession *session)
-{
- EmpathyCallHandlerPriv *priv = GET_PRIV (self);
- FsMediaType type;
-
- if (codec == NULL || session == NULL)
- return;
-
- g_object_get (session, "media-type", &type, NULL);
-
- if (type == FS_MEDIA_TYPE_AUDIO)
- {
- priv->send_audio_codec = fs_codec_copy (codec);
- g_object_notify (G_OBJECT (self), "send-audio-codec");
- }
- else if (type == FS_MEDIA_TYPE_VIDEO)
- {
- priv->send_video_codec = fs_codec_copy (codec);
- g_object_notify (G_OBJECT (self), "send-video-codec");
- }
-}
-
-static void
-update_receiving_codec (EmpathyCallHandler *self,
- GList *codecs,
- FsStream *stream)
-{
- EmpathyCallHandlerPriv *priv = GET_PRIV (self);
- FsSession *session;
- FsMediaType type;
-
- if (codecs == NULL || stream == NULL)
- return;
-
- g_object_get (stream, "session", &session, NULL);
- if (session == NULL)
- return;
-
- g_object_get (session, "media-type", &type, NULL);
-
- if (type == FS_MEDIA_TYPE_AUDIO)
- {
- priv->recv_audio_codecs = fs_codec_list_copy (codecs);
- g_object_notify (G_OBJECT (self), "recv-audio-codecs");
- }
- else if (type == FS_MEDIA_TYPE_VIDEO)
- {
- priv->recv_video_codecs = fs_codec_list_copy (codecs);
- g_object_notify (G_OBJECT (self), "recv-video-codecs");
- }
-
- g_object_unref (session);
-}
-
-static void
-update_candidates (EmpathyCallHandler *self,
- FsCandidate *remote_candidate,
- FsCandidate *local_candidate,
- FsStream *stream)
-{
- EmpathyCallHandlerPriv *priv = GET_PRIV (self);
- FsSession *session;
- FsMediaType type;
-
- if (stream == NULL)
- return;
-
- g_object_get (stream, "session", &session, NULL);
- if (session == NULL)
- return;
-
- g_object_get (session, "media-type", &type, NULL);
-
- if (type == FS_MEDIA_TYPE_AUDIO)
- {
- if (remote_candidate != NULL)
- {
- fs_candidate_destroy (priv->audio_remote_candidate);
- priv->audio_remote_candidate = fs_candidate_copy (remote_candidate);
- g_object_notify (G_OBJECT (self), "audio-remote-candidate");
- }
-
- if (local_candidate != NULL)
- {
- fs_candidate_destroy (priv->audio_local_candidate);
- priv->audio_local_candidate = fs_candidate_copy (local_candidate);
- g_object_notify (G_OBJECT (self), "audio-local-candidate");
- }
-
- g_signal_emit (G_OBJECT (self), signals[CANDIDATES_CHANGED], 0,
- FS_MEDIA_TYPE_AUDIO);
- }
- else if (type == FS_MEDIA_TYPE_VIDEO)
- {
- if (remote_candidate != NULL)
- {
- fs_candidate_destroy (priv->video_remote_candidate);
- priv->video_remote_candidate = fs_candidate_copy (remote_candidate);
- g_object_notify (G_OBJECT (self), "video-remote-candidate");
- }
-
- if (local_candidate != NULL)
- {
- fs_candidate_destroy (priv->video_local_candidate);
- priv->video_local_candidate = fs_candidate_copy (local_candidate);
- g_object_notify (G_OBJECT (self), "video-local-candidate");
- }
-
- g_signal_emit (G_OBJECT (self), signals[CANDIDATES_CHANGED], 0,
- FS_MEDIA_TYPE_VIDEO);
- }
-
- g_object_unref (session);
-}
-
-void
-empathy_call_handler_bus_message (EmpathyCallHandler *handler,
- GstBus *bus, GstMessage *message)
-{
- EmpathyCallHandlerPriv *priv = GET_PRIV (handler);
- const GstStructure *s = gst_message_get_structure (message);
-
- if (priv->tfchannel == NULL)
- return;
-
- if (s != NULL &&
- gst_structure_has_name (s, "farsight-send-codec-changed"))
- {
- const GValue *val;
- FsCodec *codec;
- FsSession *session;
-
- DEBUG ("farsight-send-codec-changed");
-
- val = gst_structure_get_value (s, "codec");
- codec = g_value_get_boxed (val);
-
- val = gst_structure_get_value (s, "session");
- session = g_value_get_object (val);
-
- update_sending_codec (handler, codec, session);
- }
- else if (s != NULL &&
- gst_structure_has_name (s, "farsight-recv-codecs-changed"))
- {
- const GValue *val;
- GList *codecs;
- FsStream *stream;
-
- DEBUG ("farsight-recv-codecs-changed");
-
- val = gst_structure_get_value (s, "codecs");
- codecs = g_value_get_boxed (val);
-
- val = gst_structure_get_value (s, "stream");
- stream = g_value_get_object (val);
-
- update_receiving_codec (handler, codecs, stream);
- }
- else if (s != NULL &&
- gst_structure_has_name (s, "farsight-new-active-candidate-pair"))
- {
- const GValue *val;
- FsCandidate *remote_candidate, *local_candidate;
- FsStream *stream;
-
- DEBUG ("farsight-new-active-candidate-pair");
-
- val = gst_structure_get_value (s, "remote-candidate");
- remote_candidate = g_value_get_boxed (val);
-
- val = gst_structure_get_value (s, "local-candidate");
- local_candidate = g_value_get_boxed (val);
-
- val = gst_structure_get_value (s, "stream");
- stream = g_value_get_object (val);
-
- update_candidates (handler, remote_candidate, local_candidate, stream);
- }
-
- tf_channel_bus_message (priv->tfchannel, message);
-}
-
-static void
-on_tf_channel_conference_added_cb (TfChannel *tfchannel,
- GstElement *conference,
- EmpathyCallHandler *self)
-{
- g_signal_emit (G_OBJECT (self), signals[CONFERENCE_ADDED], 0,
- conference);
-}
-
-static void
-on_tf_channel_conference_removed_cb (TfChannel *tfchannel,
- FsConference *conference,
- EmpathyCallHandler *self)
-{
- g_signal_emit (G_OBJECT (self), signals[CONFERENCE_REMOVED], 0,
- GST_ELEMENT (conference));
-}
-
-static gboolean
-src_pad_added_error_idle (gpointer data)
-{
- TfContent *content = data;
-
- tf_content_error_literal (content, "Could not link sink");
- g_object_unref (content);
-
- return FALSE;
-}
-
-static void
-on_tf_content_src_pad_added_cb (TfContent *content,
- guint handle,
- FsStream *stream,
- GstPad *pad,
- FsCodec *codec,
- EmpathyCallHandler *handler)
-{
- gboolean retval;
-
- g_signal_emit (G_OBJECT (handler), signals[SRC_PAD_ADDED], 0,
- content, pad, &retval);
-
- if (!retval)
- g_idle_add (src_pad_added_error_idle, g_object_ref (content));
-}
-
-static void
-on_tf_content_framerate_changed (TfContent *content,
- GParamSpec *spec,
- EmpathyCallHandler *handler)
-{
- guint framerate;
-
- g_object_get (content, "framerate", &framerate, NULL);
-
- if (framerate != 0)
- g_signal_emit (G_OBJECT (handler), signals[FRAMERATE_CHANGED], 0,
- framerate);
-}
-
-static void
-on_tf_content_resolution_changed (TfContent *content,
- guint width,
- guint height,
- EmpathyCallHandler *handler)
-{
- if (width > 0 && height > 0)
- g_signal_emit (G_OBJECT (handler), signals[RESOLUTION_CHANGED], 0,
- width, height);
-}
-
-static void
-on_tf_channel_content_added_cb (TfChannel *tfchannel,
- TfContent *content,
- EmpathyCallHandler *handler)
-{
- FsMediaType mtype;
- FsSession *session;
-// FsStream *fs_stream;
- FsCodec *codec;
-// GList *codecs;
- gboolean retval;
-
- g_signal_connect (content, "src-pad-added",
- G_CALLBACK (on_tf_content_src_pad_added_cb), handler);
-#if 0
- g_signal_connect (content, "start-sending",
- G_CALLBACK (on_tf_content_start_sending_cb), handler);
- g_signal_connect (content, "stop-sending",
- G_CALLBACK (on_tf_content_stop_sending_cb), handler);
-#endif
-
- g_signal_emit (G_OBJECT (handler), signals[CONTENT_ADDED], 0,
- content, &retval);
-
- if (!retval)
- tf_content_error_literal (content, "Could not link source");
-
- /* Get sending codec */
- g_object_get (content, "fs-session", &session, NULL);
- g_object_get (session, "current-send-codec", &codec, NULL);
-
- update_sending_codec (handler, codec, session);
-
- tp_clear_object (&session);
- tp_clear_object (&codec);
-
- /* Get receiving codec */
-/* FIXME
- g_object_get (content, "fs-stream", &fs_stream, NULL);
- g_object_get (fs_stream, "current-recv-codecs", &codecs, NULL);
-
- update_receiving_codec (handler, codecs, fs_stream);
-
- fs_codec_list_destroy (codecs);
- tp_clear_object (&fs_stream);
-*/
-
- g_object_get (content, "media-type", &mtype, NULL);
-
- if (mtype == FS_MEDIA_TYPE_VIDEO)
- {
- guint framerate, width, height;
-
- g_signal_connect (content, "notify::framerate",
- G_CALLBACK (on_tf_content_framerate_changed),
- handler);
-
- g_signal_connect (content, "resolution-changed",
- G_CALLBACK (on_tf_content_resolution_changed),
- handler);
-
- g_object_get (content,
- "framerate", &framerate,
- "width", &width,
- "height", &height,
- NULL);
-
- if (framerate > 0)
- g_signal_emit (G_OBJECT (handler), signals[FRAMERATE_CHANGED], 0,
- framerate);
-
- if (width > 0 && height > 0)
- g_signal_emit (G_OBJECT (handler), signals[RESOLUTION_CHANGED], 0,
- width, height);
- }
-}
-
-static void
-on_tf_channel_content_removed_cb (TfChannel *tfchannel,
- TfContent *content,
- EmpathyCallHandler *handler)
-{
- gboolean retval;
-
- DEBUG ("removing content");
-
- g_signal_emit (G_OBJECT (handler), signals[CONTENT_REMOVED], 0,
- content, &retval);
-
- if (!retval)
- {
- g_warning ("Could not remove content!");
-
- tf_content_error_literal (content, "Could not link source");
- }
-}
-
-static void
-on_tf_channel_closed_cb (TfChannel *tfchannel,
- EmpathyCallHandler *handler)
-{
- g_signal_emit (G_OBJECT (handler), signals[CLOSED], 0);
-}
-
-static void
-on_tf_channel_ready (GObject *source,
- GAsyncResult *result,
- gpointer user_data)
-{
- EmpathyCallHandler *self = EMPATHY_CALL_HANDLER (user_data);
- EmpathyCallHandlerPriv *priv = GET_PRIV (self);
- GError *error = NULL;
-
- priv->tfchannel = TF_CHANNEL (g_async_initable_new_finish (
- G_ASYNC_INITABLE (source), result, NULL));
-
- if (priv->tfchannel == NULL)
- {
- g_warning ("Failed to create Farstream channel: %s", error->message);
- g_error_free (error);
- return;
- }
-
- /* Set up the telepathy farstream channel */
- g_signal_connect (priv->tfchannel, "closed",
- G_CALLBACK (on_tf_channel_closed_cb), self);
- g_signal_connect (priv->tfchannel, "fs-conference-added",
- G_CALLBACK (on_tf_channel_conference_added_cb), self);
- g_signal_connect (priv->tfchannel, "fs-conference-removed",
- G_CALLBACK (on_tf_channel_conference_removed_cb), self);
- g_signal_connect (priv->tfchannel, "content-added",
- G_CALLBACK (on_tf_channel_content_added_cb), self);
- g_signal_connect (priv->tfchannel, "content-removed",
- G_CALLBACK (on_tf_channel_content_removed_cb), self);
-}
-
-static void
-empathy_call_handler_start_tpfs (EmpathyCallHandler *self)
-{
- EmpathyCallHandlerPriv *priv = GET_PRIV (self);
-
- tf_channel_new_async (TP_CHANNEL (priv->call),
- on_tf_channel_ready, self);
-}
-
-static void
-empathy_call_handler_request_cb (GObject *source,
- GAsyncResult *result,
- gpointer user_data)
-{
- EmpathyCallHandler *self = EMPATHY_CALL_HANDLER (user_data);
- EmpathyCallHandlerPriv *priv = GET_PRIV (self);
- TpChannel *channel;
- GError *error = NULL;
- TpAccountChannelRequest *req = TP_ACCOUNT_CHANNEL_REQUEST (source);
-
- channel = tp_account_channel_request_create_and_handle_channel_finish (req,
- result, NULL, &error);
- if (channel == NULL)
- {
- DEBUG ("Failed to create the channel: %s", error->message);
- g_error_free (error);
- return;
- }
-
- if (!TP_IS_CALL_CHANNEL (channel))
- {
- DEBUG ("The channel is not a Call channel!");
- return;
- }
-
- priv->call = TP_CALL_CHANNEL (channel);
- tp_g_signal_connect_object (priv->call, "state-changed",
- G_CALLBACK (on_call_state_changed_cb), self, 0);
- tp_g_signal_connect_object (priv->call, "invalidated",
- G_CALLBACK (on_call_invalidated_cb), self, 0);
-
- g_object_notify (G_OBJECT (self), "call-channel");
-
- empathy_call_handler_start_tpfs (self);
- tp_call_channel_accept_async (priv->call, on_call_accepted_cb, NULL);
-}
-
-void
-empathy_call_handler_start_call (EmpathyCallHandler *handler,
- gint64 timestamp)
-{
- EmpathyCallHandlerPriv *priv = GET_PRIV (handler);
- TpAccountChannelRequest *req;
- TpAccount *account;
- GHashTable *request;
-
- if (priv->call != NULL)
- {
- empathy_call_handler_start_tpfs (handler);
-
- if (tp_channel_get_requested (TP_CHANNEL (priv->call)))
- {
- /* accept outgoing channels immediately */
- tp_call_channel_accept_async (priv->call,
- on_call_accepted_cb, NULL);
- }
- else
- {
- /* accepting incoming channels when they are INITIALISED */
- if (tp_call_channel_get_state (priv->call, NULL, NULL, NULL) ==
- TP_CALL_STATE_INITIALISED)
- tp_call_channel_accept_async (priv->call,
- on_call_accepted_cb, NULL);
- else
- priv->accept_when_initialised = TRUE;
- }
-
- return;
- }
-
- /* No TpCallChannel (we are redialing). Request a new call channel */
- g_assert (priv->contact != NULL);
-
- account = empathy_contact_get_account (priv->contact);
- request = empathy_call_create_call_request (
- empathy_contact_get_id (priv->contact),
- priv->initial_audio, priv->initial_video);
-
- req = tp_account_channel_request_new (account, request, timestamp);
-
- tp_account_channel_request_create_and_handle_channel_async (req, NULL,
- empathy_call_handler_request_cb, handler);
-
- g_object_unref (req);
- g_hash_table_unref (request);
-}
-
-/**
- * empathy_call_handler_stop_call:
- * @handler: an #EmpathyCallHandler
- *
- * Closes the #EmpathyCallHandler's call and frees its resources.
- */
-void
-empathy_call_handler_stop_call (EmpathyCallHandler *handler)
-{
- EmpathyCallHandlerPriv *priv = GET_PRIV (handler);
-
- if (priv->call != NULL)
- {
- tp_call_channel_hangup_async (priv->call,
- TP_CALL_STATE_CHANGE_REASON_USER_REQUESTED,
- "", "", NULL, NULL);
- }
-}
-
-/**
- * empathy_call_handler_has_initial_video:
- * @handler: an #EmpathyCallHandler
- *
- * Return %TRUE if the call managed by this #EmpathyCallHandler was
- * created with video enabled
- *
- * Return value: %TRUE if the call was created as a video conversation.
- */
-gboolean
-empathy_call_handler_has_initial_video (EmpathyCallHandler *handler)
-{
- EmpathyCallHandlerPriv *priv = GET_PRIV (handler);
-
- return priv->initial_video;
-}
-
-FsCodec *
-empathy_call_handler_get_send_audio_codec (EmpathyCallHandler *self)
-{
- EmpathyCallHandlerPriv *priv = GET_PRIV (self);
-
- return priv->send_audio_codec;
-}
-
-FsCodec *
-empathy_call_handler_get_send_video_codec (EmpathyCallHandler *self)
-{
- EmpathyCallHandlerPriv *priv = GET_PRIV (self);
-
- return priv->send_video_codec;
-}
-
-GList *
-empathy_call_handler_get_recv_audio_codecs (EmpathyCallHandler *self)
-{
- EmpathyCallHandlerPriv *priv = GET_PRIV (self);
-
- return priv->recv_audio_codecs;
-}
-
-GList *
-empathy_call_handler_get_recv_video_codecs (EmpathyCallHandler *self)
-{
- EmpathyCallHandlerPriv *priv = GET_PRIV (self);
-
- return priv->recv_video_codecs;
-}
-
-FsCandidate *
-empathy_call_handler_get_audio_remote_candidate (
- EmpathyCallHandler *self)
-{
- EmpathyCallHandlerPriv *priv = GET_PRIV (self);
-
- return priv->audio_remote_candidate;
-}
-
-FsCandidate *
-empathy_call_handler_get_audio_local_candidate (
- EmpathyCallHandler *self)
-{
- EmpathyCallHandlerPriv *priv = GET_PRIV (self);
-
- return priv->audio_local_candidate;
-}
-
-FsCandidate *
-empathy_call_handler_get_video_remote_candidate (
- EmpathyCallHandler *self)
-{
- EmpathyCallHandlerPriv *priv = GET_PRIV (self);
-
- return priv->video_remote_candidate;
-}
-
-FsCandidate *
-empathy_call_handler_get_video_local_candidate (
- EmpathyCallHandler *self)
-{
- EmpathyCallHandlerPriv *priv = GET_PRIV (self);
-
- return priv->video_local_candidate;
-}
-
-EmpathyContact *
-empathy_call_handler_get_contact (EmpathyCallHandler *self)
-{
- return self->priv->contact;
-}
diff --git a/src/empathy-call-handler.h b/src/empathy-call-handler.h
deleted file mode 100644
index 5050d801..00000000
--- a/src/empathy-call-handler.h
+++ /dev/null
@@ -1,107 +0,0 @@
-/*
- * empathy-call-handler.h - Header for EmpathyCallHandler
- * Copyright (C) 2008-2009 Collabora Ltd.
- * @author Sjoerd Simons <sjoerd.simons@collabora.co.uk>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-#ifndef __EMPATHY_CALL_HANDLER_H__
-#define __EMPATHY_CALL_HANDLER_H__
-
-#include <farstream/fs-conference.h>
-#include <telepathy-glib/telepathy-glib.h>
-
-#include "empathy-contact.h"
-
-G_BEGIN_DECLS
-
-typedef struct _EmpathyCallHandler EmpathyCallHandler;
-typedef struct _EmpathyCallHandlerClass EmpathyCallHandlerClass;
-typedef struct _EmpathyCallHandlerPriv EmpathyCallHandlerPriv;
-
-struct _EmpathyCallHandlerClass {
- GObjectClass parent_class;
-};
-
-struct _EmpathyCallHandler {
- GObject parent;
- EmpathyCallHandlerPriv *priv;
-};
-
-GType empathy_call_handler_get_type (void);
-
-/* TYPE MACROS */
-#define EMPATHY_TYPE_CALL_HANDLER \
- (empathy_call_handler_get_type ())
-#define EMPATHY_CALL_HANDLER(obj) \
- (G_TYPE_CHECK_INSTANCE_CAST((obj), EMPATHY_TYPE_CALL_HANDLER, \
- EmpathyCallHandler))
-#define EMPATHY_CALL_HANDLER_CLASS(klass) \
- (G_TYPE_CHECK_CLASS_CAST((klass), EMPATHY_TYPE_CALL_HANDLER, \
- EmpathyCallHandlerClass))
-#define EMPATHY_IS_CALL_HANDLER(obj) \
- (G_TYPE_CHECK_INSTANCE_TYPE((obj), EMPATHY_TYPE_CALL_HANDLER))
-#define EMPATHY_IS_CALL_HANDLER_CLASS(klass) \
- (G_TYPE_CHECK_CLASS_TYPE((klass), EMPATHY_TYPE_CALL_HANDLER))
-#define EMPATHY_CALL_HANDLER_GET_CLASS(obj) \
- (G_TYPE_INSTANCE_GET_CLASS ((obj), EMPATHY_TYPE_CALL_HANDLER, \
- EmpathyCallHandlerClass))
-
-EmpathyCallHandler * empathy_call_handler_new_for_contact (
- EmpathyContact *contact);
-
-EmpathyCallHandler * empathy_call_handler_new_for_channel (
- TpCallChannel *call,
- EmpathyContact *contact);
-
-void empathy_call_handler_start_call (EmpathyCallHandler *handler,
- gint64 timestamp);
-void empathy_call_handler_stop_call (EmpathyCallHandler *handler);
-
-gboolean empathy_call_handler_has_initial_video (EmpathyCallHandler *handler);
-
-void empathy_call_handler_bus_message (EmpathyCallHandler *handler,
- GstBus *bus, GstMessage *message);
-
-FsCodec * empathy_call_handler_get_send_audio_codec (
- EmpathyCallHandler *self);
-
-FsCodec * empathy_call_handler_get_send_video_codec (
- EmpathyCallHandler *self);
-
-GList * empathy_call_handler_get_recv_audio_codecs (
- EmpathyCallHandler *self);
-
-GList * empathy_call_handler_get_recv_video_codecs (
- EmpathyCallHandler *self);
-
-FsCandidate * empathy_call_handler_get_audio_remote_candidate (
- EmpathyCallHandler *self);
-
-FsCandidate * empathy_call_handler_get_audio_local_candidate (
- EmpathyCallHandler *self);
-
-FsCandidate * empathy_call_handler_get_video_remote_candidate (
- EmpathyCallHandler *self);
-
-FsCandidate * empathy_call_handler_get_video_local_candidate (
- EmpathyCallHandler *self);
-
-EmpathyContact * empathy_call_handler_get_contact (EmpathyCallHandler *self);
-
-G_END_DECLS
-
-#endif /* #ifndef __EMPATHY_CALL_HANDLER_H__*/
diff --git a/src/empathy-call-observer.c b/src/empathy-call-observer.c
deleted file mode 100644
index 733199cf..00000000
--- a/src/empathy-call-observer.c
+++ /dev/null
@@ -1,357 +0,0 @@
-/*
- * Copyright (C) 2011 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: Emilio Pozuelo Monfort <emilio.pozuelo@collabora.co.uk>
- */
-
-#include "config.h"
-#include "empathy-call-observer.h"
-
-#include <glib/gi18n-lib.h>
-#include <tp-account-widgets/tpaw-images.h>
-
-#include "empathy-notify-manager.h"
-
-#define DEBUG_FLAG EMPATHY_DEBUG_VOIP
-#include "empathy-debug.h"
-
-struct _EmpathyCallObserverPriv {
- EmpathyNotifyManager *notify_mgr;
-
- TpBaseClient *observer;
-
- /* Ongoing calls, as reffed TpChannels */
- GList *channels;
-};
-
-/* The Call Observer looks at incoming and outgoing calls, and
- * autorejects incoming ones if there are ongoing ones, since
- * we don't cope with simultaneous calls quite well yet.
- * At some point, we should ask the user if he wants to put the
- * current call on hold and answer the incoming one instead,
- * see https://bugzilla.gnome.org/show_bug.cgi?id=623348
- */
-G_DEFINE_TYPE (EmpathyCallObserver, empathy_call_observer, G_TYPE_OBJECT);
-
-static EmpathyCallObserver * observer_singleton = NULL;
-
-static void
-on_channel_closed (TpProxy *proxy,
- guint domain,
- gint code,
- gchar *message,
- EmpathyCallObserver *self)
-{
- DEBUG ("channel %s has been invalidated; stop observing it",
- tp_proxy_get_object_path (proxy));
-
- self->priv->channels = g_list_remove (self->priv->channels, proxy);
- g_object_unref (proxy);
-}
-
-typedef struct
-{
- EmpathyCallObserver *self;
- TpObserveChannelsContext *context;
- TpChannel *main_channel;
-} AutoRejectCtx;
-
-static AutoRejectCtx *
-auto_reject_ctx_new (EmpathyCallObserver *self,
- TpObserveChannelsContext *context,
- TpChannel *main_channel)
-{
- AutoRejectCtx *ctx = g_slice_new (AutoRejectCtx);
-
- ctx->self = g_object_ref (self);
- ctx->context = g_object_ref (context);
- ctx->main_channel = g_object_ref (main_channel);
- return ctx;
-}
-
-static void
-auto_reject_ctx_free (AutoRejectCtx *ctx)
-{
- g_object_unref (ctx->self);
- g_object_unref (ctx->context);
- g_object_unref (ctx->main_channel);
- g_slice_free (AutoRejectCtx, ctx);
-}
-
-static void
-display_reject_notification (EmpathyCallObserver *self,
- TpChannel *channel)
-{
- TpContact *contact;
- NotifyNotification *notification;
- gchar *summary, *body;
- EmpathyContact *emp_contact;
- GdkPixbuf *pixbuf;
-
- contact = tp_channel_get_target_contact (channel);
-
- summary = g_strdup_printf (_("Missed call from %s"),
- tp_contact_get_alias (contact));
- body = g_strdup_printf (
- _("%s just tried to call you, but you were in another call."),
- tp_contact_get_alias (contact));
-
- notification = empathy_notify_manager_create_notification (summary, body,
- NULL);
-
- emp_contact = empathy_contact_dup_from_tp_contact (contact);
- pixbuf = empathy_notify_manager_get_pixbuf_for_notification (
- self->priv->notify_mgr, emp_contact, TPAW_IMAGE_AVATAR_DEFAULT);
-
- if (pixbuf != NULL)
- {
- notify_notification_set_icon_from_pixbuf (notification, pixbuf);
- g_object_unref (pixbuf);
- }
-
- notify_notification_show (notification, NULL);
-
- g_object_unref (notification);
- g_free (summary);
- g_free (body);
- g_object_unref (emp_contact);
-}
-
-static TpChannel *
-find_main_channel (GList *channels)
-{
- GList *l;
-
- for (l = channels; l != NULL; l = g_list_next (l))
- {
- TpChannel *channel = l->data;
- GQuark channel_type;
-
- if (tp_proxy_get_invalidated (channel) != NULL)
- continue;
-
- channel_type = tp_channel_get_channel_type_id (channel);
-
- if (channel_type == TP_IFACE_QUARK_CHANNEL_TYPE_STREAMED_MEDIA ||
- channel_type == TP_IFACE_QUARK_CHANNEL_TYPE_CALL)
- return channel;
- }
-
- return NULL;
-}
-
-static gboolean
-has_ongoing_calls (EmpathyCallObserver *self)
-{
- GList *l;
-
- for (l = self->priv->channels; l != NULL; l = l->next)
- {
- TpChannel *channel = TP_CHANNEL (l->data);
- GQuark type = tp_channel_get_channel_type_id (channel);
-
- /* Check that Call channels are not ended */
- if (type == TP_IFACE_QUARK_CHANNEL_TYPE_CALL &&
- tp_call_channel_get_state (TP_CALL_CHANNEL (channel),
- NULL, NULL, NULL) == TP_CALL_STATE_ENDED)
- continue;
-
- return TRUE;
- }
-
- return FALSE;
-}
-
-static void
-claim_and_leave_cb (GObject *source,
- GAsyncResult *result,
- gpointer user_data)
-{
- AutoRejectCtx *ctx = user_data;
- GError *error = NULL;
-
- if (!tp_channel_dispatch_operation_leave_channels_finish (
- TP_CHANNEL_DISPATCH_OPERATION (source), result, &error))
- {
- DEBUG ("Failed to reject call: %s", error->message);
-
- g_error_free (error);
- goto out;
- }
-
- display_reject_notification (ctx->self, ctx->main_channel);
-
-out:
- auto_reject_ctx_free (ctx);
-}
-
-static void
-observe_channels (TpSimpleObserver *observer,
- TpAccount *account,
- TpConnection *connection,
- GList *channels,
- TpChannelDispatchOperation *dispatch_operation,
- GList *requests,
- TpObserveChannelsContext *context,
- gpointer user_data)
-{
- EmpathyCallObserver *self = EMPATHY_CALL_OBSERVER (user_data);
- TpChannel *channel;
- const GError *error;
-
- channel = find_main_channel (channels);
- if (channel == NULL)
- {
- GError err = { TP_ERROR, TP_ERROR_INVALID_ARGUMENT,
- "Unknown channel type" };
-
- DEBUG ("Didn't find any Call or StreamedMedia channel; ignoring");
-
- tp_observe_channels_context_fail (context, &err);
- return;
- }
-
- /* Autoreject if there are other ongoing calls */
- if (has_ongoing_calls (self))
- {
- AutoRejectCtx *ctx = auto_reject_ctx_new (self, context, channel);
-
- DEBUG ("Autorejecting incoming call since there are others in "
- "progress: %s", tp_proxy_get_object_path (channel));
-
- tp_channel_dispatch_operation_leave_channels_async (dispatch_operation,
- TP_CHANNEL_GROUP_CHANGE_REASON_BUSY, "Already in a call",
- claim_and_leave_cb, ctx);
-
- tp_observe_channels_context_accept (context);
- return;
- }
-
- if ((error = tp_proxy_get_invalidated (channel)) != NULL)
- {
- DEBUG ("The channel has already been invalidated: %s",
- error->message);
-
- tp_observe_channels_context_fail (context, error);
- return;
- }
-
- DEBUG ("Observing channel %s", tp_proxy_get_object_path (channel));
-
- tp_g_signal_connect_object (channel, "invalidated",
- G_CALLBACK (on_channel_closed), self, 0);
- self->priv->channels = g_list_prepend (self->priv->channels,
- g_object_ref (channel));
-
- tp_observe_channels_context_accept (context);
-}
-
-static GObject *
-observer_constructor (GType type,
- guint n_props,
- GObjectConstructParam *props)
-{
- GObject *retval;
-
- if (observer_singleton)
- {
- retval = g_object_ref (observer_singleton);
- }
- else
- {
- retval = G_OBJECT_CLASS (empathy_call_observer_parent_class)->constructor
- (type, n_props, props);
-
- observer_singleton = EMPATHY_CALL_OBSERVER (retval);
- g_object_add_weak_pointer (retval, (gpointer) &observer_singleton);
- }
-
- return retval;
-}
-
-static void
-observer_dispose (GObject *object)
-{
- EmpathyCallObserver *self = EMPATHY_CALL_OBSERVER (object);
-
- tp_clear_object (&self->priv->notify_mgr);
- tp_clear_object (&self->priv->observer);
- g_list_free_full (self->priv->channels, g_object_unref);
- self->priv->channels = NULL;
-}
-
-static void
-empathy_call_observer_class_init (EmpathyCallObserverClass *klass)
-{
- GObjectClass *object_class = G_OBJECT_CLASS (klass);
-
- object_class->dispose = observer_dispose;
- object_class->constructor = observer_constructor;
-
- g_type_class_add_private (object_class, sizeof (EmpathyCallObserverPriv));
-}
-
-static void
-empathy_call_observer_init (EmpathyCallObserver *self)
-{
- EmpathyCallObserverPriv *priv = G_TYPE_INSTANCE_GET_PRIVATE (self,
- EMPATHY_TYPE_CALL_OBSERVER, EmpathyCallObserverPriv);
- TpAccountManager *am;
- GError *error = NULL;
-
- self->priv = priv;
-
- self->priv->notify_mgr = empathy_notify_manager_dup_singleton ();
-
- am = tp_account_manager_dup ();
-
- self->priv->observer = tp_simple_observer_new_with_am (am, TRUE,
- "Empathy.CallObserver", FALSE,
- observe_channels, self, NULL);
-
- /* Observe Call and StreamedMedia channels */
- tp_base_client_take_observer_filter (self->priv->observer,
- tp_asv_new (
- TP_PROP_CHANNEL_CHANNEL_TYPE, G_TYPE_STRING,
- TP_IFACE_CHANNEL_TYPE_STREAMED_MEDIA,
- TP_PROP_CHANNEL_TARGET_HANDLE_TYPE, G_TYPE_UINT,
- TP_HANDLE_TYPE_CONTACT,
- NULL));
- tp_base_client_take_observer_filter (self->priv->observer,
- tp_asv_new (
- TP_PROP_CHANNEL_CHANNEL_TYPE, G_TYPE_STRING,
- TP_IFACE_CHANNEL_TYPE_CALL,
- TP_PROP_CHANNEL_TARGET_HANDLE_TYPE, G_TYPE_UINT,
- TP_HANDLE_TYPE_CONTACT,
- NULL));
-
- tp_base_client_set_observer_delay_approvers (self->priv->observer, TRUE);
-
- if (!tp_base_client_register (self->priv->observer, &error))
- {
- DEBUG ("Failed to register observer: %s", error->message);
- g_error_free (error);
- }
-
- g_object_unref (am);
-}
-
-EmpathyCallObserver *
-empathy_call_observer_dup_singleton (void)
-{
- return g_object_new (EMPATHY_TYPE_CALL_OBSERVER, NULL);
-}
diff --git a/src/empathy-call-observer.h b/src/empathy-call-observer.h
deleted file mode 100644
index 3fdb6b79..00000000
--- a/src/empathy-call-observer.h
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * Copyright (C) 2011 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: Emilio Pozuelo Monfort <emilio.pozuelo@collabora.co.uk>
- */
-
-#ifndef __EMPATHY_CALL_OBSERVER_H__
-#define __EMPATHY_CALL_OBSERVER_H__
-
-#include <glib-object.h>
-
-G_BEGIN_DECLS
-
-#define EMPATHY_TYPE_CALL_OBSERVER (empathy_call_observer_get_type ())
-#define EMPATHY_CALL_OBSERVER(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), EMPATHY_TYPE_CALL_OBSERVER, EmpathyCallObserver))
-#define EMPATHY_CALL_OBSERVER_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), EMPATHY_TYPE_CALL_OBSERVER, EmpathyCallObserverClass))
-#define EMPATHY_IS_CALL_OBSERVER(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), EMPATHY_TYPE_CALL_OBSERVER))
-#define EMPATHY_IS_CALL_OBSERVER_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), EMPATHY_TYPE_CALL_OBSERVER))
-#define EMPATHY_CALL_OBSERVER_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), EMPATHY_TYPE_CALL_OBSERVER, EmpathyCallObserverClass))
-
-typedef struct _EmpathyCallObserver EmpathyCallObserver;
-typedef struct _EmpathyCallObserverPriv EmpathyCallObserverPriv;
-typedef struct _EmpathyCallObserverClass EmpathyCallObserverClass;
-
-struct _EmpathyCallObserver {
- GObject parent;
- EmpathyCallObserverPriv *priv;
-};
-
-struct _EmpathyCallObserverClass {
- GObjectClass parent_class;
-};
-
-GType empathy_call_observer_get_type (void) G_GNUC_CONST;
-EmpathyCallObserver *empathy_call_observer_dup_singleton (void);
-
-G_END_DECLS
-
-#endif /* __EMPATHY_CALL_OBSERVER_H__ */
diff --git a/src/empathy-call-window-fullscreen.c b/src/empathy-call-window-fullscreen.c
deleted file mode 100644
index 5ecc123a..00000000
--- a/src/empathy-call-window-fullscreen.c
+++ /dev/null
@@ -1,310 +0,0 @@
-/*
- * empathy-call-window-fullscreen.c - Source for EmpathyCallWindowFullscreen
- * Copyright (C) 2009-2011 Collabora Ltd.
- *
- * Some code is based on the Totem Movie Player, especially
- * totem-fullscreen.c which has the following copyright:
- * Copyright (C) 2001-2007 Bastien Nocera <hadess@hadess.net>
- * Copyright (C) 2007 Sunil Mohan Adapa <sunilmohan@gnu.org.in>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-#include "config.h"
-#include "empathy-call-window-fullscreen.h"
-
-#include <tp-account-widgets/tpaw-builder.h>
-
-#include "empathy-ui-utils.h"
-#include "empathy-utils.h"
-
-/* The number of seconds for which the "leave fullscreen" popup should
- be shown */
-#define FULLSCREEN_POPUP_TIMEOUT 5
-
-G_DEFINE_TYPE (EmpathyCallWindowFullscreen, empathy_call_window_fullscreen,
- G_TYPE_OBJECT)
-
-/* private structure */
-typedef struct _EmpathyCallWindowFullscreenPriv
- EmpathyCallWindowFullscreenPriv;
-
-struct _EmpathyCallWindowFullscreenPriv
-{
- EmpathyCallWindow *parent_window;
-
- GtkWidget *leave_fullscreen_popup;
- GtkWidget *video_widget;
-
- guint popup_timeout;
- gboolean popup_creation_in_progress;
- gboolean dispose_has_run;
-};
-
-#define GET_PRIV(o) \
- (G_TYPE_INSTANCE_GET_PRIVATE ((o), EMPATHY_TYPE_CALL_WINDOW_FULLSCREEN, \
- EmpathyCallWindowFullscreenPriv))
-
-static void empathy_call_window_fullscreen_dispose (GObject *object);
-static void empathy_call_window_fullscreen_finalize (GObject *object);
-
-static gboolean empathy_call_window_fullscreen_hide_popup (
- EmpathyCallWindowFullscreen *fs);
-
-static void
-empathy_call_window_fullscreen_set_cursor_visible (
- EmpathyCallWindowFullscreen *fs,
- gboolean show_cursor)
-{
- EmpathyCallWindowFullscreenPriv *priv = GET_PRIV (fs);
- GdkWindow *window;
-
- if (priv->video_widget == NULL)
- return;
-
- window = gtk_widget_get_window (priv->video_widget);
-
- if (!show_cursor)
- gdk_window_set_cursor (window, gdk_cursor_new (GDK_BLANK_CURSOR));
- else
- gdk_window_set_cursor (window, NULL);
-}
-
-static void
-empathy_call_window_fullscreen_add_popup_timeout (
- EmpathyCallWindowFullscreen *self)
-{
- EmpathyCallWindowFullscreenPriv *priv = GET_PRIV (self);
-
- if (priv->popup_timeout == 0)
- {
- priv->popup_timeout = g_timeout_add_seconds (FULLSCREEN_POPUP_TIMEOUT,
- (GSourceFunc) empathy_call_window_fullscreen_hide_popup, self);
- }
-}
-
-static void
-empathy_call_window_fullscreen_remove_popup_timeout (
- EmpathyCallWindowFullscreen *self)
-{
- EmpathyCallWindowFullscreenPriv *priv = GET_PRIV (self);
-
- if (priv->popup_timeout != 0)
- {
- g_source_remove (priv->popup_timeout);
- priv->popup_timeout = 0;
- }
-}
-
-void
-empathy_call_window_fullscreen_show_popup (EmpathyCallWindowFullscreen *self)
-{
- gint leave_fullscreen_width, leave_fullscreen_height;
- GdkScreen *screen;
- GdkRectangle fullscreen_rect;
- EmpathyCallWindowFullscreenPriv *priv = GET_PRIV (self);
-
- g_assert (self->is_fullscreen);
-
- g_return_if_fail (priv->parent_window != NULL);
-
- if (priv->popup_creation_in_progress)
- return;
-
- if (!gtk_window_is_active (GTK_WINDOW (priv->parent_window)))
- return;
-
- priv->popup_creation_in_progress = TRUE;
-
- empathy_call_window_fullscreen_set_cursor_visible (self, TRUE);
-
- /* Obtaining the screen rectangle */
- screen = gtk_window_get_screen (GTK_WINDOW (priv->parent_window));
- gdk_screen_get_monitor_geometry (screen,
- gdk_screen_get_monitor_at_window (screen,
- gtk_widget_get_window (GTK_WIDGET (priv->parent_window))),
- &fullscreen_rect);
-
- /* Getting the popup window sizes */
- gtk_window_get_size (GTK_WINDOW (priv->leave_fullscreen_popup),
- &leave_fullscreen_width, &leave_fullscreen_height);
-
- /* Moving the popup to the top-right corner (if the direction is LTR) or the
- top-left corner (if the direction is RTL).*/
- if (gtk_widget_get_direction (priv->leave_fullscreen_popup)
- == GTK_TEXT_DIR_LTR)
- {
- gtk_window_move (GTK_WINDOW (priv->leave_fullscreen_popup),
- fullscreen_rect.width + fullscreen_rect.x - leave_fullscreen_width,
- fullscreen_rect.y);
-
- }
- else
- {
- gtk_window_move (GTK_WINDOW (priv->leave_fullscreen_popup),
- fullscreen_rect.x, fullscreen_rect.y);
- }
-
- gtk_widget_show_all (priv->leave_fullscreen_popup);
- empathy_call_window_fullscreen_add_popup_timeout (self);
-
- priv->popup_creation_in_progress = FALSE;
-}
-
-static gboolean
-empathy_call_window_fullscreen_hide_popup (EmpathyCallWindowFullscreen *fs)
-{
- EmpathyCallWindowFullscreenPriv *priv = GET_PRIV (fs);
-
- if (priv->video_widget == NULL || !fs->is_fullscreen)
- return TRUE;
-
- gtk_widget_hide (priv->leave_fullscreen_popup);
- empathy_call_window_fullscreen_remove_popup_timeout (fs);
-
- empathy_call_window_fullscreen_set_cursor_visible (fs, FALSE);
-
- return FALSE;
-}
-
-static void
-empathy_call_window_fullscreen_init (EmpathyCallWindowFullscreen *self)
-{
- EmpathyCallWindowFullscreenPriv *priv = GET_PRIV (self);
- GtkBuilder *gui;
- gchar *filename;
-
- filename = empathy_file_lookup ("empathy-call-window-fullscreen.ui", "src");
- gui = tpaw_builder_get_file (filename,
- "leave_fullscreen_window", &priv->leave_fullscreen_popup,
- "leave_fullscreen_button", &self->leave_fullscreen_button,
- NULL);
-
- gtk_widget_add_events (priv->leave_fullscreen_popup, GDK_POINTER_MOTION_MASK);
-
- g_object_unref (gui);
- g_free (filename);
-}
-
-static void
-empathy_call_window_fullscreen_class_init (
- EmpathyCallWindowFullscreenClass *klass)
-{
- GObjectClass *object_class = G_OBJECT_CLASS (klass);
-
- g_type_class_add_private (klass, sizeof (EmpathyCallWindowFullscreenPriv));
-
- object_class->dispose = empathy_call_window_fullscreen_dispose;
- object_class->finalize = empathy_call_window_fullscreen_finalize;
-}
-
-void
-empathy_call_window_fullscreen_dispose (GObject *object)
-{
- EmpathyCallWindowFullscreen *self = EMPATHY_CALL_WINDOW_FULLSCREEN (object);
- EmpathyCallWindowFullscreenPriv *priv = GET_PRIV (self);
-
- if (priv->dispose_has_run)
- return;
-
- priv->dispose_has_run = TRUE;
-
- if (priv->leave_fullscreen_popup != NULL)
- gtk_widget_destroy (priv->leave_fullscreen_popup);
- priv->leave_fullscreen_popup = NULL;
-
- if (G_OBJECT_CLASS (empathy_call_window_fullscreen_parent_class)->dispose)
- {
- G_OBJECT_CLASS (
- empathy_call_window_fullscreen_parent_class)->dispose (object);
- }
-}
-
-void
-empathy_call_window_fullscreen_finalize (GObject *object)
-{
- EmpathyCallWindowFullscreen *self = EMPATHY_CALL_WINDOW_FULLSCREEN (object);
-
- empathy_call_window_fullscreen_remove_popup_timeout (self);
-
- G_OBJECT_CLASS (
- empathy_call_window_fullscreen_parent_class)->finalize (object);
-}
-
-static void
-empathy_call_window_fullscreen_parent_window_notify (GtkWidget *parent_window,
- GParamSpec *property, EmpathyCallWindowFullscreen *fs)
-{
- EmpathyCallWindowFullscreenPriv *priv = GET_PRIV (fs);
-
- if (!fs->is_fullscreen)
- return;
-
- if (parent_window == GTK_WIDGET (priv->parent_window) &&
- !gtk_window_is_active (GTK_WINDOW (parent_window)))
- {
- empathy_call_window_fullscreen_hide_popup (fs);
- empathy_call_window_fullscreen_set_cursor_visible (fs, TRUE);
- }
-}
-
-EmpathyCallWindowFullscreen *
-empathy_call_window_fullscreen_new (EmpathyCallWindow *parent_window)
-{
- EmpathyCallWindowFullscreen *self = EMPATHY_CALL_WINDOW_FULLSCREEN (
- g_object_new (EMPATHY_TYPE_CALL_WINDOW_FULLSCREEN, NULL));
- EmpathyCallWindowFullscreenPriv *priv = GET_PRIV (self);
-
- priv->parent_window = parent_window;
- g_signal_connect (G_OBJECT (priv->parent_window), "notify::is-active",
- G_CALLBACK (empathy_call_window_fullscreen_parent_window_notify), self);
-
- return self;
-}
-
-void
-empathy_call_window_fullscreen_set_fullscreen (EmpathyCallWindowFullscreen *fs,
- gboolean set_fullscreen)
-{
-
- if (set_fullscreen)
- empathy_call_window_fullscreen_remove_popup_timeout (fs);
- else
- empathy_call_window_fullscreen_hide_popup (fs);
-
- empathy_call_window_fullscreen_set_cursor_visible (fs, !set_fullscreen);
- fs->is_fullscreen = set_fullscreen;
-}
-
-static void
-video_widget_destroy_cb (GtkWidget *widget,
- EmpathyCallWindowFullscreen *self)
-{
- EmpathyCallWindowFullscreenPriv *priv = GET_PRIV (self);
-
- priv->video_widget = NULL;
-}
-
-void
-empathy_call_window_fullscreen_set_video_widget (
- EmpathyCallWindowFullscreen *fs,
- GtkWidget *video_widget)
-{
- EmpathyCallWindowFullscreenPriv *priv = GET_PRIV (fs);
- priv->video_widget = video_widget;
-
- tp_g_signal_connect_object (video_widget, "destroy",
- G_CALLBACK (video_widget_destroy_cb), fs, 0);
-}
diff --git a/src/empathy-call-window-fullscreen.h b/src/empathy-call-window-fullscreen.h
deleted file mode 100644
index 56ddf99b..00000000
--- a/src/empathy-call-window-fullscreen.h
+++ /dev/null
@@ -1,75 +0,0 @@
-/*
- * empathy-call-window-fullscreen.h - Header for EmpathyCallWindowFullscreen
- * Copyright (C) 2009-2011 Collabora Ltd.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-#ifndef __EMPATHY_CALL_WINDOW_FULLSCREEN_H__
-#define __EMPATHY_CALL_WINDOW_FULLSCREEN_H__
-
-
-#include "empathy-call-window.h"
-
-G_BEGIN_DECLS
-
-typedef struct _EmpathyCallWindowFullscreen EmpathyCallWindowFullscreen;
-typedef struct _EmpathyCallWindowFullscreenClass
- EmpathyCallWindowFullscreenClass;
-
-struct _EmpathyCallWindowFullscreenClass {
- GObjectClass parent_class;
-};
-
-struct _EmpathyCallWindowFullscreen {
- GObject parent;
- gboolean is_fullscreen;
- GtkWidget *leave_fullscreen_button;
-};
-
-GType empathy_call_window_fullscreen_get_type (void);
-
-/* TYPE MACROS */
-#define EMPATHY_TYPE_CALL_WINDOW_FULLSCREEN \
- (empathy_call_window_fullscreen_get_type ())
-#define EMPATHY_CALL_WINDOW_FULLSCREEN(obj) \
- (G_TYPE_CHECK_INSTANCE_CAST((obj), EMPATHY_TYPE_CALL_WINDOW_FULLSCREEN, \
- EmpathyCallWindowFullscreen))
-#define EMPATHY_CALL_WINDOW_FULLSCREEN_CLASS(klass) \
- (G_TYPE_CHECK_CLASS_CAST((klass), EMPATHY_TYPE_CALL_WINDOW_FULLSCREEN, \
- EmpathyCallWindowClassFullscreen))
-#define EMPATHY_IS_CALL_WINDOW_FULLSCREEN(obj) \
- (G_TYPE_CHECK_INSTANCE_TYPE((obj), EMPATHY_TYPE_CALL_WINDOW_FULLSCREEN))
-#define EMPATHY_IS_CALL_WINDOW_FULLSCREEN_CLASS(klass) \
- (G_TYPE_CHECK_CLASS_TYPE((klass), EMPATHY_TYPE_CALL_WINDOW_FULLSCREEN))
-#define EMPATHY_CALL_WINDOW_FULLSCREEN_GET_CLASS(obj) \
- (G_TYPE_INSTANCE_GET_CLASS ((obj), EMPATHY_TYPE_CALL_WINDOW_FULLSCREEN, \
- EmpathyCallWindowFullscreenClass))
-
-EmpathyCallWindowFullscreen *empathy_call_window_fullscreen_new (
- EmpathyCallWindow *parent);
-
-void empathy_call_window_fullscreen_set_fullscreen (
- EmpathyCallWindowFullscreen *fs,
- gboolean set_fullscreen);
-void empathy_call_window_fullscreen_set_video_widget (
- EmpathyCallWindowFullscreen *fs,
- GtkWidget *video_widget);
-void empathy_call_window_fullscreen_show_popup (
- EmpathyCallWindowFullscreen *fs);
-
-G_END_DECLS
-
-#endif /* #ifndef __EMPATHY_CALL_WINDOW_FULLSCREEN_H__*/
diff --git a/src/empathy-call-window-fullscreen.ui b/src/empathy-call-window-fullscreen.ui
deleted file mode 100644
index 4e864bce..00000000
--- a/src/empathy-call-window-fullscreen.ui
+++ /dev/null
@@ -1,23 +0,0 @@
-<?xml version="1.0"?>
-<interface>
- <requires lib="gtk+" version="2.16"/>
- <!-- interface-naming-policy toplevel-contextual -->
- <object class="GtkWindow" id="leave_fullscreen_window">
- <property name="type">popup</property>
- <property name="resizable">False</property>
- <property name="skip_taskbar_hint">True</property>
- <property name="skip_pager_hint">True</property>
- <property name="decorated">False</property>
- <property name="deletable">False</property>
- <signal name="motion_notify_event" handler="empathy_call_window_fullscreen_motion_notify_cb"/>
- <child>
- <object class="GtkButton" id="leave_fullscreen_button">
- <property name="label">gtk-leave-fullscreen</property>
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="receives_default">True</property>
- <property name="use_stock">True</property>
- </object>
- </child>
- </object>
-</interface>
diff --git a/src/empathy-call-window.c b/src/empathy-call-window.c
deleted file mode 100644
index 39c70c17..00000000
--- a/src/empathy-call-window.c
+++ /dev/null
@@ -1,4289 +0,0 @@
-/*
- * empathy-call-window.c - Source for EmpathyCallWindow
- * Copyright (C) 2008-2011 Collabora Ltd.
- * @author Sjoerd Simons <sjoerd.simons@collabora.co.uk>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-#include "config.h"
-#include "empathy-call-window.h"
-
-#include <glib/gi18n.h>
-#include <telepathy-farstream/telepathy-farstream.h>
-#include <farstream/fs-element-added-notifier.h>
-#include <farstream/fs-utils.h>
-#include <tp-account-widgets/tpaw-builder.h>
-#include <tp-account-widgets/tpaw-camera-monitor.h>
-#include <tp-account-widgets/tpaw-images.h>
-#include <tp-account-widgets/tpaw-pixbuf-utils.h>
-#include <tp-account-widgets/tpaw-utils.h>
-
-#include "empathy-about-dialog.h"
-#include "empathy-audio-sink.h"
-#include "empathy-call-utils.h"
-#include "empathy-call-window-fullscreen.h"
-#include "empathy-camera-menu.h"
-#include "empathy-dialpad-widget.h"
-#include "empathy-geometry.h"
-#include "empathy-gsettings.h"
-#include "empathy-images.h"
-#include "empathy-mic-menu.h"
-#include "empathy-preferences.h"
-#include "empathy-request-util.h"
-#include "empathy-rounded-actor.h"
-#include "empathy-rounded-rectangle.h"
-#include "empathy-rounded-texture.h"
-#include "empathy-sound-manager.h"
-#include "empathy-ui-utils.h"
-#include "empathy-utils.h"
-
-#define DEBUG_FLAG EMPATHY_DEBUG_VOIP
-#include "empathy-debug.h"
-
-#define CONTENT_HBOX_SPACING 3
-#define CONTENT_HBOX_CHILDREN_PACKING_PADDING 0
-#define OVERLAY_MARGIN 6
-
-#define REMOTE_VIDEO_DEFAULT_WIDTH 320
-#define REMOTE_VIDEO_DEFAULT_HEIGHT 240
-
-#define SELF_VIDEO_SECTION_WIDTH 120
-#define SELF_VIDEO_SECTION_HEIGHT 90
-#define SELF_VIDEO_SECTION_MARGIN 2
-#define SELF_VIDEO_SECTION_BORDER SELF_VIDEO_SECTION_MARGIN*2
-
-/* The avatar's default width and height are set to the same value because we
- want a square icon. */
-#define REMOTE_CONTACT_AVATAR_DEFAULT_HEIGHT REMOTE_VIDEO_DEFAULT_HEIGHT
-#define REMOTE_CONTACT_AVATAR_DEFAULT_WIDTH REMOTE_VIDEO_DEFAULT_HEIGHT
-
-#define SMALL_TOOLBAR_SIZE 36
-
-/* If an video input error occurs, the error message will start with "v4l" */
-#define VIDEO_INPUT_ERROR_PREFIX "v4l"
-
-/* The time interval in milliseconds between 2 outgoing rings */
-#define MS_BETWEEN_RING 500
-
-/* The roundedness of preview box and placeholders */
-#define PREVIEW_ROUND_FACTOR 16
-
-#define PREVIEW_BUTTON_OPACITY 180
-
-G_DEFINE_TYPE(EmpathyCallWindow, empathy_call_window, GTK_TYPE_WINDOW)
-
-enum {
- PROP_CALL_HANDLER = 1,
-};
-
-enum {
- SIG_INHIBIT,
- LAST_SIGNAL
-};
-
-static guint signals[LAST_SIGNAL];
-
-typedef enum {
- RINGING, /* Incoming call */
- CONNECTING, /* Outgoing call */
- CONNECTED, /* Connected */
- HELD, /* Connected, but on hold */
- DISCONNECTED, /* Disconnected */
- REDIALING /* Redialing (special case of CONNECTING) */
-} CallState;
-
-typedef enum {
- CAMERA_STATE_OFF = 0,
- CAMERA_STATE_ON,
-} CameraState;
-
-typedef enum {
- PREVIEW_POS_NONE,
- PREVIEW_POS_TOP_LEFT,
- PREVIEW_POS_TOP_RIGHT,
- PREVIEW_POS_BOTTOM_LEFT,
- PREVIEW_POS_BOTTOM_RIGHT,
-} PreviewPosition;
-
-struct _EmpathyCallWindowPriv
-{
- gboolean dispose_has_run;
- EmpathyCallHandler *handler;
-
- EmpathyContact *contact;
-
- TpawCameraMonitor *camera_monitor;
-
- CallState call_state;
- gboolean outgoing;
-
- GtkUIManager *ui_manager;
- GtkWidget *errors_vbox;
- /* widget displays the video received from the remote user. This widget is
- * alive only during call. */
- ClutterActor *video_output;
- ClutterActor *video_preview;
- ClutterActor *drag_preview;
- ClutterActor *preview_shown_button;
- ClutterActor *preview_hidden_button;
- ClutterActor *preview_rectangle1;
- ClutterActor *preview_rectangle2;
- ClutterActor *preview_rectangle3;
- ClutterActor *preview_rectangle4;
- ClutterActor *preview_spinner_actor;
- GtkWidget *preview_spinner_widget;
- GtkWidget *video_container;
- GtkWidget *remote_user_avatar_widget;
- GtkWidget *remote_user_avatar_toolbar;
- GtkWidget *remote_user_name_toolbar;
- GtkWidget *remote_user_status_toolbar;
- GtkWidget *status_label;
- GtkWidget *hangup_button;
- GtkWidget *audio_call_button;
- GtkWidget *video_call_button;
- GtkWidget *mic_button;
- GtkWidget *microphone_icon;
- GtkWidget *volume_button;
- GtkWidget *camera_button;
- GtkWidget *dialpad_button;
- GtkWidget *toolbar;
- GtkWidget *bottom_toolbar;
- ClutterActor *floating_toolbar;
- GtkWidget *pane;
- GtkAction *menu_fullscreen;
- GtkAction *menu_swap_camera;
-
- ClutterState *transitions;
-
- /* The main box covering all the stage, contaning remote avatar/video */
- ClutterActor *video_box;
- ClutterLayoutManager *video_layout;
-
- /* A bin layout manager containing a bin for previews
- * and the floating toolbar */
- ClutterActor *overlay_bin;
- ClutterLayoutManager *overlay_layout;
-
- /* Bin layout for the previews */
- ClutterActor *preview_box;
- ClutterLayoutManager *preview_layout;
-
- /* Coordinates of the preview drag event's start. */
- PreviewPosition preview_pos;
-
- /* We keep a reference on the hbox which contains the main content so we can
- easilly repack everything when toggling fullscreen */
- GtkWidget *content_hbox;
-
- /* These are used to accept or reject an incoming call when the status
- is RINGING. */
- GtkWidget *incoming_call_dialog;
- TpCallChannel *pending_channel;
- TpChannelDispatchOperation *pending_cdo;
- TpAddDispatchOperationContext *pending_context;
-
- gulong video_output_motion_handler_id;
- guint bus_message_source_id;
-
- GtkWidget *dtmf_panel;
-
- /* Details vbox */
- GtkWidget *details_vbox;
- GtkWidget *vcodec_encoding_label;
- GtkWidget *acodec_encoding_label;
- GtkWidget *vcodec_decoding_label;
- GtkWidget *acodec_decoding_label;
-
- GtkWidget *audio_remote_candidate_label;
- GtkWidget *audio_local_candidate_label;
- GtkWidget *video_remote_candidate_label;
- GtkWidget *video_local_candidate_label;
- GtkWidget *video_remote_candidate_info_img;
- GtkWidget *video_local_candidate_info_img;
- GtkWidget *audio_remote_candidate_info_img;
- GtkWidget *audio_local_candidate_info_img;
-
- GstElement *video_input;
- GstElement *video_preview_sink;
- GstElement *video_output_sink;
- GstElement *audio_input;
- GstElement *audio_output;
- gboolean audio_output_added;
- GstElement *pipeline;
- GstElement *video_tee;
-
- GstElement *funnel;
-
- GList *notifiers;
-
- GTimer *timer;
- guint timer_id;
-
- GMutex lock;
- gboolean call_started;
- gboolean sending_video;
- CameraState camera_state;
-
- EmpathyCallWindowFullscreen *fullscreen;
- gboolean is_fullscreen;
-
- gboolean got_video;
- guint got_video_src;
-
- guint inactivity_src;
-
- /* Those fields represent the state of the window before it actually was in
- fullscreen mode. */
- gboolean dialpad_was_visible_before_fs;
- gint original_width_before_fs;
- gint original_height_before_fs;
-
- gint x, y, w, h, dialpad_width;
- gboolean maximized;
-
- /* TRUE if the call should be started when the pipeline is playing */
- gboolean start_call_when_playing;
- /* TRUE if we requested to set the pipeline in the playing state */
- gboolean pipeline_playing;
-
- EmpathySoundManager *sound_mgr;
-
- GSettings *settings;
- EmpathyMicMenu *mic_menu;
- EmpathyCameraMenu *camera_menu;
-
- gboolean muted;
-};
-
-#define GET_PRIV(o) (EMPATHY_CALL_WINDOW (o)->priv)
-
-static void empathy_call_window_realized_cb (GtkWidget *widget,
- EmpathyCallWindow *window);
-
-static gboolean empathy_call_window_delete_cb (GtkWidget *widget,
- GdkEvent *event, EmpathyCallWindow *window);
-
-static gboolean empathy_call_window_state_event_cb (GtkWidget *widget,
- GdkEventWindowState *event, EmpathyCallWindow *window);
-
-static void empathy_call_window_set_send_video (EmpathyCallWindow *window,
- CameraState state);
-
-static void empathy_call_window_hangup_cb (gpointer object,
- EmpathyCallWindow *window);
-
-static void empathy_call_window_fullscreen_cb (gpointer object,
- EmpathyCallWindow *window);
-
-static void empathy_call_window_fullscreen_toggle (EmpathyCallWindow *window);
-
-static gboolean empathy_call_window_video_button_press_cb (
- GtkWidget *video_output, GdkEventButton *event, EmpathyCallWindow *window);
-
-static gboolean empathy_call_window_key_press_cb (GtkWidget *video_output,
- GdkEventKey *event, EmpathyCallWindow *window);
-
-static gboolean empathy_call_window_video_output_motion_notify (
- GtkWidget *widget, GdkEventMotion *event, EmpathyCallWindow *window);
-
-static void empathy_call_window_video_menu_popup (EmpathyCallWindow *window,
- guint button);
-
-static void empathy_call_window_connect_handler (EmpathyCallWindow *self);
-
-static void empathy_call_window_dialpad_cb (GtkToggleToolButton *button,
- EmpathyCallWindow *window);
-
-static void empathy_call_window_restart_call (EmpathyCallWindow *window);
-
-static void empathy_call_window_status_message (EmpathyCallWindow *window,
- gchar *message);
-
-static gboolean empathy_call_window_bus_message (GstBus *bus,
- GstMessage *message, gpointer user_data);
-
-static gboolean empathy_call_window_update_timer (gpointer user_data);
-
-static void
-make_background_transparent (GtkClutterActor *actor)
-{
- GdkRGBA transparent = { 0., 0., 0., 0. };
- GtkWidget *widget;
-
- widget = gtk_clutter_actor_get_widget (actor);
- gtk_widget_override_background_color (widget, GTK_STATE_FLAG_NORMAL, &transparent);
-}
-
-static void
-empathy_call_window_show_hangup_button (EmpathyCallWindow *self,
- gboolean show)
-{
- gtk_widget_set_visible (self->priv->hangup_button, show);
- gtk_widget_set_visible (self->priv->audio_call_button, !show);
- gtk_widget_set_visible (self->priv->video_call_button, !show);
-}
-
-static void
-empathy_call_window_audio_call_cb (GtkToggleToolButton *button,
- EmpathyCallWindow *self)
-{
- g_object_set (self->priv->handler, "initial-video", FALSE, NULL);
- empathy_call_window_restart_call (self);
-}
-
-static void
-empathy_call_window_video_call_cb (GtkToggleToolButton *button,
- EmpathyCallWindow *self)
-{
- empathy_call_window_set_send_video (self, CAMERA_STATE_ON);
- g_object_set (self->priv->handler, "initial-video", TRUE, NULL);
- empathy_call_window_restart_call (self);
-}
-
-static void
-dtmf_start_tone_cb (EmpathyDialpadWidget *dialpad,
- TpDTMFEvent event,
- EmpathyCallWindow *self)
-{
- TpCallChannel *call;
- gchar tones[2];
-
- g_object_get (self->priv->handler, "call-channel", &call, NULL);
-
- tones[0] = tp_dtmf_event_to_char (event);
- tones[1] = '\0';
- tp_call_channel_send_tones_async (call, tones, NULL, NULL, NULL);
-
- g_object_unref (call);
-}
-
-static void
-empathy_call_window_show_video_output (EmpathyCallWindow *self,
- gboolean show)
-{
- if (self->priv->video_output != NULL)
- g_object_set (self->priv->video_output, "visible", show, NULL);
-
- gtk_widget_set_visible (self->priv->remote_user_avatar_widget, !show);
-
- clutter_actor_raise_top (self->priv->overlay_bin);
-}
-
-static void
-create_video_output_widget (EmpathyCallWindow *self)
-{
- EmpathyCallWindowPriv *priv = GET_PRIV (self);
-
- g_assert (priv->video_output == NULL);
- g_assert (priv->pipeline != NULL);
-
- priv->video_output = clutter_texture_new ();
-
- clutter_texture_set_keep_aspect_ratio (CLUTTER_TEXTURE (priv->video_output),
- TRUE);
-
- priv->video_output_sink = gst_element_factory_make ("cluttersink", NULL);
- if (priv->video_output_sink == NULL)
- g_error ("Missing cluttersink");
- else
- g_object_set (priv->video_output_sink, "texture", priv->video_output, NULL);
-
- clutter_container_add_actor (CLUTTER_CONTAINER (priv->video_box),
- priv->video_output);
-
- gtk_widget_add_events (priv->video_container,
- GDK_BUTTON_PRESS_MASK | GDK_POINTER_MOTION_MASK);
- g_signal_connect (G_OBJECT (priv->video_container), "button-press-event",
- G_CALLBACK (empathy_call_window_video_button_press_cb), self);
-}
-
-static void
-create_video_input (EmpathyCallWindow *self)
-{
- EmpathyCallWindowPriv *priv = GET_PRIV (self);
-
- g_assert (priv->video_input == NULL);
- priv->video_input = empathy_video_src_new ();
- gst_object_ref_sink (priv->video_input);
-}
-
-static gboolean
-audio_control_volume_to_element (GBinding *binding,
- const GValue *source_value,
- GValue *target_value,
- gpointer user_data)
-{
- /* AudioControl volume is 0-255, with -1 for unknown */
- gint hv;
-
- hv = g_value_get_int (source_value);
- if (hv < 0)
- return FALSE;
-
- hv = MIN (hv, 255);
- g_value_set_double (target_value, hv/255.0);
-
- return TRUE;
-}
-
-static gboolean
-element_volume_to_audio_control (GBinding *binding,
- const GValue *source_value,
- GValue *target_value,
- gpointer user_data)
-{
- gdouble ev;
-
- ev = g_value_get_double (source_value);
- ev = CLAMP (ev, 0.0, 1.0);
-
- g_value_set_int (target_value, ev * 255);
- return TRUE;
-}
-
-static void
-audio_input_mute_notify_cb (GObject *obj, GParamSpec *spec,
- EmpathyCallWindow *self)
-{
- gboolean muted;
- g_object_get (obj, "mute", &muted, NULL);
-
- self->priv->muted = muted;
- if (muted && self->priv->transitions)
- clutter_state_set_state (self->priv->transitions, "fade-in");
-
- if (muted)
- {
- gtk_image_set_from_icon_name (GTK_IMAGE (self->priv->microphone_icon),
- EMPATHY_IMAGE_MIC_MUTED, GTK_ICON_SIZE_MENU);
- }
- else
- {
- gtk_image_set_from_icon_name (GTK_IMAGE (self->priv->microphone_icon),
- EMPATHY_IMAGE_MIC, GTK_ICON_SIZE_MENU);
- }
-
- empathy_call_window_update_timer (self);
-}
-
-static void
-create_audio_input (EmpathyCallWindow *self)
-{
- EmpathyCallWindowPriv *priv = GET_PRIV (self);
-
- g_assert (priv->audio_input == NULL);
- priv->audio_input = empathy_audio_src_new ();
- gst_object_ref_sink (priv->audio_input);
-
- g_signal_connect (priv->audio_input, "notify::mute",
- G_CALLBACK (audio_input_mute_notify_cb), self);
-}
-
-static void
-add_video_preview_to_pipeline (EmpathyCallWindow *self)
-{
- EmpathyCallWindowPriv *priv = GET_PRIV (self);
- GstElement *preview;
-
- g_assert (priv->video_preview != NULL);
- g_assert (priv->pipeline != NULL);
- g_assert (priv->video_input != NULL);
- g_assert (priv->video_tee != NULL);
-
- preview = priv->video_preview_sink;
-
- if (!gst_bin_add (GST_BIN (priv->pipeline), priv->video_input))
- {
- g_warning ("Could not add video input to pipeline");
- return;
- }
-
- if (!gst_bin_add (GST_BIN (priv->pipeline), preview))
- {
- g_warning ("Could not add video preview to pipeline");
- return;
- }
-
- if (!gst_element_link (priv->video_input, priv->video_tee))
- {
- g_warning ("Could not link video input to video tee");
- return;
- }
-
- if (!gst_element_link (priv->video_tee, preview))
- {
- g_warning ("Could not link video tee to video preview");
- return;
- }
-}
-
-static void
-empathy_call_window_disable_camera_cb (GtkAction *action,
- EmpathyCallWindow *self)
-{
- clutter_actor_destroy (self->priv->preview_hidden_button);
-
- gtk_toggle_button_set_active (
- GTK_TOGGLE_BUTTON (self->priv->camera_button), FALSE);
-}
-
-static void
-empathy_call_window_minimise_camera_cb (GtkAction *action,
- EmpathyCallWindow *self)
-{
- clutter_actor_hide (self->priv->video_preview);
- clutter_actor_show (self->priv->preview_hidden_button);
-}
-
-static void
-empathy_call_window_maximise_camera_cb (GtkAction *action,
- EmpathyCallWindow *self)
-{
- clutter_actor_show (self->priv->video_preview);
- clutter_actor_hide (self->priv->preview_hidden_button);
-}
-
-static void
-empathy_call_window_swap_camera_cb (GtkAction *action,
- EmpathyCallWindow *self)
-{
- const GList *cameras, *l;
- gchar *current_cam;
-
- DEBUG ("Swapping the camera");
-
- cameras = tpaw_camera_monitor_get_cameras (self->priv->camera_monitor);
- current_cam = empathy_video_src_dup_device (
- EMPATHY_GST_VIDEO_SRC (self->priv->video_input));
-
- for (l = cameras; l != NULL; l = l->next)
- {
- TpawCamera *camera = l->data;
-
- if (!tp_strdiff (camera->device, current_cam))
- {
- TpawCamera *next;
-
- if (l->next != NULL)
- next = l->next->data;
- else
- next = cameras->data;
-
- /* EmpathyCameraMenu will update itself and do the actual change
- * for us */
- g_settings_set_string (self->priv->settings,
- EMPATHY_PREFS_CALL_CAMERA_DEVICE,
- next->device);
-
- break;
- }
- }
-
- g_free (current_cam);
-}
-
-static void
-empathy_call_window_camera_added_cb (TpawCameraMonitor *monitor,
- TpawCamera *camera,
- EmpathyCallWindow *self)
-{
- const GList *cameras = tpaw_camera_monitor_get_cameras (monitor);
-
- gtk_action_set_visible (self->priv->menu_swap_camera,
- g_list_length ((GList *) cameras) >= 2);
-}
-
-static void
-empathy_call_window_camera_removed_cb (TpawCameraMonitor *monitor,
- TpawCamera *camera,
- EmpathyCallWindow *self)
-{
- const GList *cameras = tpaw_camera_monitor_get_cameras (monitor);
-
- gtk_action_set_visible (self->priv->menu_swap_camera,
- g_list_length ((GList *) cameras) >= 2);
-}
-
-static void
-empathy_call_window_preview_button_clicked_cb (ClutterClickAction *action,
- ClutterActor *actor,
- EmpathyCallWindow *self)
-{
- GtkWidget *menu;
-
- menu = gtk_ui_manager_get_widget (self->priv->ui_manager,
- "/preview-menu");
- gtk_menu_popup (GTK_MENU (menu), NULL, NULL, NULL, NULL,
- 0, gtk_get_current_event_time ());
- gtk_menu_shell_select_first (GTK_MENU_SHELL (menu), FALSE);
-}
-
-static void
-empathy_call_window_preview_hidden_button_clicked_cb (
- ClutterClickAction *action,
- ClutterActor *actor,
- EmpathyCallWindow *self)
-{
- GtkWidget *menu;
-
- menu = gtk_ui_manager_get_widget (self->priv->ui_manager,
- "/preview-hidden-menu");
- gtk_menu_popup (GTK_MENU (menu), NULL, NULL, NULL, NULL,
- 0, gtk_get_current_event_time ());
- gtk_menu_shell_select_first (GTK_MENU_SHELL (menu), FALSE);
-}
-
-static ClutterActor *
-empathy_call_window_create_preview_rectangle (EmpathyCallWindow *self,
- ClutterBinAlignment x,
- ClutterBinAlignment y)
-{
- ClutterActor *rectangle;
-
- rectangle = CLUTTER_ACTOR (empathy_rounded_rectangle_new (
- SELF_VIDEO_SECTION_WIDTH, SELF_VIDEO_SECTION_HEIGHT,
- PREVIEW_ROUND_FACTOR));
-
- clutter_bin_layout_add (CLUTTER_BIN_LAYOUT (self->priv->preview_layout),
- rectangle, x, y);
- clutter_actor_hide (rectangle);
-
- return rectangle;
-}
-
-static void
-empathy_call_window_create_preview_rectangles (EmpathyCallWindow *self)
-{
- ClutterActor *box;
-
- self->priv->preview_layout = clutter_bin_layout_new (
- CLUTTER_BIN_ALIGNMENT_CENTER, CLUTTER_BIN_ALIGNMENT_CENTER);
- self->priv->preview_box = box = clutter_box_new (self->priv->preview_layout);
-
- clutter_bin_layout_add (CLUTTER_BIN_LAYOUT (self->priv->overlay_layout),
- box,
- CLUTTER_BIN_ALIGNMENT_FILL, CLUTTER_BIN_ALIGNMENT_FILL);
-
- self->priv->preview_rectangle1 =
- empathy_call_window_create_preview_rectangle (self,
- CLUTTER_BIN_ALIGNMENT_START, CLUTTER_BIN_ALIGNMENT_START);
- self->priv->preview_rectangle2 =
- empathy_call_window_create_preview_rectangle (self,
- CLUTTER_BIN_ALIGNMENT_START, CLUTTER_BIN_ALIGNMENT_END);
- self->priv->preview_rectangle3 =
- empathy_call_window_create_preview_rectangle (self,
- CLUTTER_BIN_ALIGNMENT_END, CLUTTER_BIN_ALIGNMENT_START);
- self->priv->preview_rectangle4 =
- empathy_call_window_create_preview_rectangle (self,
- CLUTTER_BIN_ALIGNMENT_END, CLUTTER_BIN_ALIGNMENT_END);
-}
-
-static void
-empathy_call_window_show_preview_rectangles (EmpathyCallWindow *self,
- gboolean show)
-{
- g_object_set (self->priv->preview_rectangle1, "visible", show, NULL);
- g_object_set (self->priv->preview_rectangle2, "visible", show, NULL);
- g_object_set (self->priv->preview_rectangle3, "visible", show, NULL);
- g_object_set (self->priv->preview_rectangle4, "visible", show, NULL);
-}
-
-static void
-empathy_call_window_get_preview_coordinates (EmpathyCallWindow *self,
- PreviewPosition pos,
- guint *x,
- guint *y)
-{
- guint ret_x = 0, ret_y = 0;
- ClutterGeometry box;
-
- if (!clutter_actor_has_allocation (self->priv->preview_box))
- goto out;
-
- clutter_actor_get_geometry (self->priv->preview_box, &box);
-
- switch (pos)
- {
- case PREVIEW_POS_TOP_LEFT:
- ret_x = ret_y = SELF_VIDEO_SECTION_MARGIN;
- break;
- case PREVIEW_POS_TOP_RIGHT:
- ret_x = box.width - SELF_VIDEO_SECTION_MARGIN
- - SELF_VIDEO_SECTION_WIDTH;
- ret_y = SELF_VIDEO_SECTION_MARGIN;
- break;
- case PREVIEW_POS_BOTTOM_LEFT:
- ret_x = SELF_VIDEO_SECTION_MARGIN;
- ret_y = box.height - SELF_VIDEO_SECTION_MARGIN
- - SELF_VIDEO_SECTION_HEIGHT;
- break;
- case PREVIEW_POS_BOTTOM_RIGHT:
- ret_x = box.width - SELF_VIDEO_SECTION_MARGIN
- - SELF_VIDEO_SECTION_WIDTH;
- ret_y = box.height - SELF_VIDEO_SECTION_MARGIN
- - SELF_VIDEO_SECTION_HEIGHT;
- break;
- default:
- g_warn_if_reached ();
- }
-
-out:
- if (x != NULL)
- *x = ret_x;
-
- if (y != NULL)
- *y = ret_y;
-}
-
-static PreviewPosition
-empathy_call_window_get_preview_position (EmpathyCallWindow *self,
- gfloat event_x,
- gfloat event_y)
-{
- ClutterGeometry box;
- PreviewPosition pos = PREVIEW_POS_NONE;
-
- if (!clutter_actor_has_allocation (self->priv->preview_box))
- return pos;
-
- clutter_actor_get_geometry (self->priv->preview_box, &box);
-
- if (0 + SELF_VIDEO_SECTION_MARGIN <= event_x &&
- event_x <= (0 + SELF_VIDEO_SECTION_MARGIN + (gint) SELF_VIDEO_SECTION_WIDTH) &&
- 0 + SELF_VIDEO_SECTION_MARGIN <= event_y &&
- event_y <= (0 + SELF_VIDEO_SECTION_MARGIN + (gint) SELF_VIDEO_SECTION_HEIGHT))
- {
- pos = PREVIEW_POS_TOP_LEFT;
- }
- else if (box.width - SELF_VIDEO_SECTION_MARGIN >= event_x &&
- event_x >= (box.width - SELF_VIDEO_SECTION_MARGIN - (gint) SELF_VIDEO_SECTION_WIDTH) &&
- 0 + SELF_VIDEO_SECTION_MARGIN <= event_y &&
- event_y <= (0 + SELF_VIDEO_SECTION_MARGIN + (gint) SELF_VIDEO_SECTION_HEIGHT))
- {
- pos = PREVIEW_POS_TOP_RIGHT;
- }
- else if (0 + SELF_VIDEO_SECTION_MARGIN <= event_x &&
- event_x <= (0 + SELF_VIDEO_SECTION_MARGIN + (gint) SELF_VIDEO_SECTION_WIDTH) &&
- box.height - SELF_VIDEO_SECTION_MARGIN >= event_y &&
- event_y >= (box.height - SELF_VIDEO_SECTION_MARGIN - (gint) SELF_VIDEO_SECTION_HEIGHT))
- {
- pos = PREVIEW_POS_BOTTOM_LEFT;
- }
- else if (box.width - SELF_VIDEO_SECTION_MARGIN >= event_x &&
- event_x >= (box.width - SELF_VIDEO_SECTION_MARGIN - (gint) SELF_VIDEO_SECTION_WIDTH) &&
- box.height - 2 * SELF_VIDEO_SECTION_MARGIN >= event_y &&
- event_y >= (box.height - SELF_VIDEO_SECTION_MARGIN - (gint) SELF_VIDEO_SECTION_HEIGHT))
- {
- pos = PREVIEW_POS_BOTTOM_RIGHT;
- }
-
- return pos;
-}
-
-static ClutterActor *
-empathy_call_window_get_preview_rectangle (EmpathyCallWindow *self,
- PreviewPosition pos)
-{
- ClutterActor *rectangle;
-
- switch (pos)
- {
- case PREVIEW_POS_TOP_LEFT:
- rectangle = self->priv->preview_rectangle1;
- break;
- case PREVIEW_POS_TOP_RIGHT:
- rectangle = self->priv->preview_rectangle3;
- break;
- case PREVIEW_POS_BOTTOM_LEFT:
- rectangle = self->priv->preview_rectangle2;
- break;
- case PREVIEW_POS_BOTTOM_RIGHT:
- rectangle = self->priv->preview_rectangle4;
- break;
- default:
- rectangle = NULL;
- }
-
- return rectangle;
-}
-
-static void
-empathy_call_window_move_video_preview (EmpathyCallWindow *self,
- PreviewPosition pos)
-{
- ClutterBinLayout *layout = CLUTTER_BIN_LAYOUT (self->priv->preview_layout);
-
- DEBUG ("moving the video preview to %d", pos);
-
- self->priv->preview_pos = pos;
-
- switch (pos)
- {
- case PREVIEW_POS_TOP_LEFT:
- clutter_bin_layout_set_alignment (layout,
- self->priv->video_preview,
- CLUTTER_BIN_ALIGNMENT_START,
- CLUTTER_BIN_ALIGNMENT_START);
- break;
- case PREVIEW_POS_TOP_RIGHT:
- clutter_bin_layout_set_alignment (layout,
- self->priv->video_preview,
- CLUTTER_BIN_ALIGNMENT_END,
- CLUTTER_BIN_ALIGNMENT_START);
- break;
- case PREVIEW_POS_BOTTOM_LEFT:
- clutter_bin_layout_set_alignment (layout,
- self->priv->video_preview,
- CLUTTER_BIN_ALIGNMENT_START,
- CLUTTER_BIN_ALIGNMENT_END);
- break;
- case PREVIEW_POS_BOTTOM_RIGHT:
- clutter_bin_layout_set_alignment (layout,
- self->priv->video_preview,
- CLUTTER_BIN_ALIGNMENT_END,
- CLUTTER_BIN_ALIGNMENT_END);
- break;
- default:
- g_warn_if_reached ();
- }
-
- g_settings_set_enum (self->priv->settings, "camera-position", pos);
-}
-
-static void
-empathy_call_window_highlight_preview_rectangle (EmpathyCallWindow *self,
- PreviewPosition pos)
-{
- ClutterActor *rectangle;
- ClutterColor white = { 0xff, 0xff, 0xff, 0xff};
-
- rectangle = empathy_call_window_get_preview_rectangle (self, pos);
-
- empathy_rounded_rectangle_set_border_width (
- EMPATHY_ROUNDED_RECTANGLE (rectangle), 2 * SELF_VIDEO_SECTION_MARGIN);
- empathy_rounded_rectangle_set_border_color (
- EMPATHY_ROUNDED_RECTANGLE (rectangle), &white);
-}
-
-static void
-empathy_call_window_darken_preview_rectangle (EmpathyCallWindow *self,
- ClutterActor *rectangle)
-{
- ClutterColor white = { 0xff, 0xff, 0xff, 0xff}, darker;
-
- clutter_color_shade (&white, 0.55, &darker);
-
- empathy_rounded_rectangle_set_border_width (
- EMPATHY_ROUNDED_RECTANGLE (rectangle), 1);
- empathy_rounded_rectangle_set_border_color (
- EMPATHY_ROUNDED_RECTANGLE (rectangle), &darker);
-}
-
-static void
-empathy_call_window_darken_preview_rectangles (EmpathyCallWindow *self)
-{
- ClutterActor *rectangle;
-
- rectangle = empathy_call_window_get_preview_rectangle (self,
- self->priv->preview_pos);
-
- /* We don't want to darken the rectangle where the preview
- * currently is. */
-
- if (self->priv->preview_rectangle1 != rectangle)
- empathy_call_window_darken_preview_rectangle (self,
- self->priv->preview_rectangle1);
-
- if (self->priv->preview_rectangle2 != rectangle)
- empathy_call_window_darken_preview_rectangle (self,
- self->priv->preview_rectangle2);
-
- if (self->priv->preview_rectangle3 != rectangle)
- empathy_call_window_darken_preview_rectangle (self,
- self->priv->preview_rectangle3);
-
- if (self->priv->preview_rectangle4 != rectangle)
- empathy_call_window_darken_preview_rectangle (self,
- self->priv->preview_rectangle4);
-}
-
-static void
-empathy_call_window_preview_on_drag_begin_cb (ClutterDragAction *action,
- ClutterActor *actor,
- gfloat event_x,
- gfloat event_y,
- ClutterModifierType modifiers,
- EmpathyCallWindow *self)
-{
- ClutterActor *stage = clutter_actor_get_stage (actor);
- gfloat rel_x, rel_y;
-
- self->priv->drag_preview = clutter_clone_new (actor);
-
- clutter_container_add_actor (CLUTTER_CONTAINER (stage),
- self->priv->drag_preview);
-
- clutter_actor_transform_stage_point (actor, event_x, event_y,
- &rel_x, &rel_y);
-
- clutter_actor_set_position (self->priv->drag_preview,
- event_x - rel_x, event_y - rel_y);
-
- clutter_drag_action_set_drag_handle (action,
- self->priv->drag_preview);
-
- clutter_actor_set_opacity (actor, 0);
- clutter_actor_hide (self->priv->preview_shown_button);
-
- empathy_call_window_show_preview_rectangles (self, TRUE);
- empathy_call_window_darken_preview_rectangles (self);
-}
-
-static void
-empathy_call_window_on_animation_completed_cb (ClutterAnimation *animation,
- ClutterActor *actor)
-{
- clutter_actor_set_opacity (actor, 255);
-}
-
-static void
-empathy_call_window_preview_on_drag_end_cb (ClutterDragAction *action,
- ClutterActor *actor,
- gfloat event_x,
- gfloat event_y,
- ClutterModifierType modifiers,
- EmpathyCallWindow *self)
-{
- PreviewPosition pos;
- guint x, y;
-
- /* Get the position before destroying the drag actor, otherwise the
- * preview_box allocation won't be valid and we won't be able to
- * calculate the position. */
- pos = empathy_call_window_get_preview_position (self, event_x, event_y);
-
- empathy_call_window_get_preview_coordinates (self,
- pos != PREVIEW_POS_NONE ? pos : self->priv->preview_pos,
- &x, &y);
-
- /* Move the preview to the destination and destroy it afterwards */
- clutter_actor_animate (self->priv->drag_preview, CLUTTER_LINEAR, 500,
- "x", (gfloat) x,
- "y", (gfloat) y,
- "signal-swapped-after::completed",
- clutter_actor_destroy, self->priv->drag_preview,
- "signal-swapped-after::completed",
- clutter_actor_show, self->priv->preview_shown_button,
- "signal::completed",
- empathy_call_window_on_animation_completed_cb, actor,
- NULL);
-
- self->priv->drag_preview = NULL;
-
- if (pos != PREVIEW_POS_NONE)
- empathy_call_window_move_video_preview (self, pos);
-
- empathy_call_window_show_preview_rectangles (self, FALSE);
-}
-
-static void
-empathy_call_window_preview_on_drag_motion_cb (ClutterDragAction *action,
- ClutterActor *actor,
- gfloat delta_x,
- gfloat delta_y,
- EmpathyCallWindow *self)
-{
- PreviewPosition pos;
- gfloat event_x, event_y;
-
- clutter_drag_action_get_motion_coords (action, &event_x, &event_y);
-
- pos = empathy_call_window_get_preview_position (self, event_x, event_y);
-
- if (pos != PREVIEW_POS_NONE)
- empathy_call_window_highlight_preview_rectangle (self, pos);
- else
- empathy_call_window_darken_preview_rectangles (self);
-}
-
-static gboolean
-empathy_call_window_preview_enter_event_cb (ClutterActor *actor,
- ClutterCrossingEvent *event,
- EmpathyCallWindow *self)
-{
- ClutterActor *rectangle;
-
- rectangle = empathy_call_window_get_preview_rectangle (self,
- self->priv->preview_pos);
-
- empathy_call_window_highlight_preview_rectangle (self,
- self->priv->preview_pos);
-
- clutter_actor_show (rectangle);
-
- return FALSE;
-}
-
-static gboolean
-empathy_call_window_preview_leave_event_cb (ClutterActor *actor,
- ClutterCrossingEvent *event,
- EmpathyCallWindow *self)
-{
- ClutterActor *rectangle;
-
- rectangle = empathy_call_window_get_preview_rectangle (self,
- self->priv->preview_pos);
-
- empathy_call_window_darken_preview_rectangle (self, rectangle);
-
- clutter_actor_hide (rectangle);
-
- return FALSE;
-}
-
-static void
-create_video_preview (EmpathyCallWindow *self)
-{
- EmpathyCallWindowPriv *priv = GET_PRIV (self);
- ClutterLayoutManager *layout;
- ClutterActor *preview;
- ClutterActor *b;
- ClutterAction *action;
- PreviewPosition pos;
-
- g_assert (priv->video_preview == NULL);
-
- pos = g_settings_get_enum (priv->settings, "camera-position");
-
- preview = empathy_rounded_texture_new ();
- clutter_actor_set_size (preview,
- SELF_VIDEO_SECTION_WIDTH, SELF_VIDEO_SECTION_HEIGHT);
-
- priv->video_preview_sink = gst_element_factory_make ("cluttersink", NULL);
- if (priv->video_preview_sink == NULL)
- g_error ("Missing cluttersink, check your clutter-gst installation");
- g_object_set (priv->video_preview_sink, "texture", preview, NULL);
- g_object_add_weak_pointer (G_OBJECT (priv->video_preview_sink), (gpointer) &priv->video_preview_sink);
-
- /* Add a little offset to the video preview */
- layout = clutter_bin_layout_new (CLUTTER_BIN_ALIGNMENT_CENTER,
- CLUTTER_BIN_ALIGNMENT_CENTER);
- priv->video_preview = clutter_box_new (layout);
- clutter_actor_set_size (priv->video_preview,
- SELF_VIDEO_SECTION_WIDTH + 2 * SELF_VIDEO_SECTION_MARGIN,
- SELF_VIDEO_SECTION_HEIGHT + 2 * SELF_VIDEO_SECTION_MARGIN);
-
- /* Spinner for when changing the camera device */
- priv->preview_spinner_widget = gtk_spinner_new ();
- priv->preview_spinner_actor = empathy_rounded_actor_new (PREVIEW_ROUND_FACTOR);
-
- g_object_set (priv->preview_spinner_widget, "expand", TRUE, NULL);
- make_background_transparent (GTK_CLUTTER_ACTOR (priv->preview_spinner_actor));
- gtk_widget_show (priv->preview_spinner_widget);
-
- gtk_container_add (
- GTK_CONTAINER (gtk_clutter_actor_get_widget (
- GTK_CLUTTER_ACTOR (priv->preview_spinner_actor))),
- priv->preview_spinner_widget);
- clutter_actor_set_size (priv->preview_spinner_actor,
- SELF_VIDEO_SECTION_WIDTH, SELF_VIDEO_SECTION_HEIGHT);
- clutter_actor_set_opacity (priv->preview_spinner_actor, 128);
- clutter_actor_hide (priv->preview_spinner_actor);
-
- clutter_container_add_actor (CLUTTER_CONTAINER (priv->video_preview),
- preview);
- clutter_container_add_actor (CLUTTER_CONTAINER (priv->video_preview),
- priv->preview_spinner_actor);
-
- g_object_set (priv->video_preview_sink,
- "sync", FALSE,
- "async", FALSE,
- NULL);
-
- /* Preview show */
- priv->preview_shown_button = b = gtk_clutter_actor_new_with_contents (
- gtk_image_new_from_icon_name ("emblem-system-symbolic",
- GTK_ICON_SIZE_MENU));
- clutter_actor_set_margin_right (b, 4);
- clutter_actor_set_margin_bottom (b, 2);
- clutter_actor_set_opacity (b, PREVIEW_BUTTON_OPACITY);
- make_background_transparent (GTK_CLUTTER_ACTOR (b));
-
- clutter_bin_layout_add (CLUTTER_BIN_LAYOUT (layout), b,
- CLUTTER_BIN_ALIGNMENT_END, CLUTTER_BIN_ALIGNMENT_END);
-
- action = clutter_click_action_new ();
- clutter_actor_add_action (b, action);
- g_signal_connect (action, "clicked",
- G_CALLBACK (empathy_call_window_preview_button_clicked_cb), self);
-
- /* Preview hidden */
- priv->preview_hidden_button = b = gtk_clutter_actor_new_with_contents (
- gtk_image_new_from_icon_name ("emblem-system-symbolic",
- GTK_ICON_SIZE_MENU));
- make_background_transparent (GTK_CLUTTER_ACTOR (b));
-
- clutter_bin_layout_add (CLUTTER_BIN_LAYOUT (priv->preview_layout),
- priv->preview_hidden_button,
- CLUTTER_BIN_ALIGNMENT_START,
- CLUTTER_BIN_ALIGNMENT_END);
-
- self->priv->preview_pos = PREVIEW_POS_BOTTOM_LEFT;
-
- clutter_actor_hide (priv->preview_hidden_button);
-
- action = clutter_click_action_new ();
- clutter_actor_add_action (b, action);
- g_signal_connect (action, "clicked",
- G_CALLBACK (empathy_call_window_preview_hidden_button_clicked_cb), self);
-
- clutter_bin_layout_add (CLUTTER_BIN_LAYOUT (priv->preview_layout),
- priv->video_preview,
- CLUTTER_BIN_ALIGNMENT_START,
- CLUTTER_BIN_ALIGNMENT_END);
-
- empathy_call_window_move_video_preview (self, pos);
-
- action = clutter_drag_action_new ();
- g_signal_connect (action, "drag-begin",
- G_CALLBACK (empathy_call_window_preview_on_drag_begin_cb), self);
- g_signal_connect (action, "drag-end",
- G_CALLBACK (empathy_call_window_preview_on_drag_end_cb), self);
- g_signal_connect (action, "drag-motion",
- G_CALLBACK (empathy_call_window_preview_on_drag_motion_cb), self);
-
- g_signal_connect (preview, "enter-event",
- G_CALLBACK (empathy_call_window_preview_enter_event_cb), self);
- g_signal_connect (preview, "leave-event",
- G_CALLBACK (empathy_call_window_preview_leave_event_cb), self);
-
- clutter_actor_add_action (preview, action);
- clutter_actor_set_reactive (preview, TRUE);
- clutter_actor_set_reactive (priv->preview_shown_button, TRUE);
-}
-
-static void
-empathy_call_window_start_camera_spinning (EmpathyCallWindow *self)
-{
- clutter_actor_show (self->priv->preview_spinner_actor);
- gtk_spinner_start (GTK_SPINNER (self->priv->preview_spinner_widget));
-}
-
-static void
-empathy_call_window_stop_camera_spinning (EmpathyCallWindow *self)
-{
- clutter_actor_hide (self->priv->preview_spinner_actor);
- gtk_spinner_stop (GTK_SPINNER (self->priv->preview_spinner_widget));
-}
-
-void
-empathy_call_window_play_camera (EmpathyCallWindow *self,
- gboolean play)
-{
- EmpathyCallWindowPriv *priv = GET_PRIV (self);
- GstElement *preview;
- GstState state;
-
- if (priv->video_preview == NULL)
- {
- create_video_preview (self);
- add_video_preview_to_pipeline (self);
- }
-
- if (play)
- {
- state = GST_STATE_PLAYING;
- }
- else
- {
- empathy_call_window_start_camera_spinning (self);
- state = GST_STATE_NULL;
- }
-
- preview = priv->video_preview_sink;
-
- gst_element_set_state (preview, state);
- gst_element_set_state (priv->video_tee, state);
- gst_element_set_state (priv->video_input, state);
-}
-
-static void
-display_video_preview (EmpathyCallWindow *self,
- gboolean display)
-{
- EmpathyCallWindowPriv *priv = GET_PRIV (self);
-
- if (priv->video_preview == NULL)
- {
- create_video_preview (self);
- add_video_preview_to_pipeline (self);
- }
-
- if (display)
- {
- /* Display the video preview */
- DEBUG ("Show video preview");
-
- empathy_call_window_play_camera (self, TRUE);
- clutter_actor_show (priv->video_preview);
- clutter_actor_raise_top (priv->floating_toolbar);
- }
- else
- {
- /* Hide the video preview */
- DEBUG ("Hide video preview");
-
- if (priv->video_preview != NULL)
- {
- clutter_actor_hide (priv->video_preview);
- empathy_call_window_play_camera (self, FALSE);
- }
- }
-}
-
-static void
-empathy_call_window_set_state_connecting (EmpathyCallWindow *window)
-{
- EmpathyCallWindowPriv *priv = GET_PRIV (window);
-
- empathy_call_window_status_message (window, _("Connecting…"));
- priv->call_state = CONNECTING;
-
- /* Show the toolbar */
- clutter_state_set_state (priv->transitions, "fade-in");
-
- if (priv->outgoing)
- empathy_sound_manager_start_playing (priv->sound_mgr, GTK_WIDGET (window),
- EMPATHY_SOUND_PHONE_OUTGOING, MS_BETWEEN_RING);
-}
-
-static void
-disable_camera (EmpathyCallWindow *self)
-{
- EmpathyCallWindowPriv *priv = GET_PRIV (self);
-
- if (priv->camera_state == CAMERA_STATE_OFF)
- return;
-
- DEBUG ("Disable camera");
-
- empathy_call_window_set_send_video (self, CAMERA_STATE_OFF);
-
- priv->camera_state = CAMERA_STATE_OFF;
-}
-
-static void
-enable_camera (EmpathyCallWindow *self)
-{
- EmpathyCallWindowPriv *priv = GET_PRIV (self);
-
- if (priv->camera_state == CAMERA_STATE_ON)
- return;
-
- if (priv->video_input == NULL)
- {
- DEBUG ("Can't enable camera, no input");
- return;
- }
-
- DEBUG ("Enable camera");
-
- empathy_call_window_set_send_video (self, CAMERA_STATE_ON);
-
- priv->camera_state = CAMERA_STATE_ON;
-}
-
-static void
-empathy_call_window_camera_toggled_cb (GtkToggleButton *toggle,
- EmpathyCallWindow *self)
-{
- if (gtk_toggle_button_get_active (toggle))
- enable_camera (self);
- else
- disable_camera (self);
-}
-
-static void
-create_pipeline (EmpathyCallWindow *self)
-{
- EmpathyCallWindowPriv *priv = GET_PRIV (self);
- GstBus *bus;
-
- g_assert (priv->pipeline == NULL);
-
- priv->pipeline = gst_pipeline_new (NULL);
- priv->pipeline_playing = FALSE;
-
- priv->video_tee = gst_element_factory_make ("tee", NULL);
- gst_object_ref_sink (priv->video_tee);
-
- gst_bin_add (GST_BIN (priv->pipeline), priv->video_tee);
-
- bus = gst_pipeline_get_bus (GST_PIPELINE (priv->pipeline));
- priv->bus_message_source_id = gst_bus_add_watch (bus,
- empathy_call_window_bus_message, self);
-
- g_object_unref (bus);
-}
-
-static void
-empathy_call_window_settings_cb (GtkAction *action,
- EmpathyCallWindow *self)
-{
- gchar *args = g_strdup_printf ("-p %s",
- empathy_preferences_tab_to_string (EMPATHY_PREFERENCES_TAB_CALLS));
-
- empathy_launch_program (BIN_DIR, "empathy", args);
-
- g_free (args);
-}
-
-static void
-empathy_call_window_contents_cb (GtkAction *action,
- EmpathyCallWindow *self)
-{
- empathy_url_show (GTK_WIDGET (self), "help:empathy/audio-video");
-}
-
-static void
-show_png (GPid pid, gint status, gpointer user_data)
-{
- gtk_show_uri (NULL, (gchar *) user_data, GDK_CURRENT_TIME, NULL);
- g_spawn_close_pid (pid);
- g_free (user_data);
-}
-
-static void
-empathy_call_window_debug_gst_cb (GtkAction *action,
- EmpathyCallWindow *self)
-{
- EmpathyCallWindowPriv *priv = GET_PRIV (self);
- GDateTime *date_time;
- GPid dot_pid;
- const gchar *dot_dir;
- const gchar *prgname;
- gchar *dot_cmd;
- gchar *filename;
- gchar **argv;
- gint argc;
-
- if (priv->pipeline == NULL)
- DEBUG ("No pipeline");
-
- date_time = g_date_time_new_now_utc ();
- prgname = g_get_prgname ();
- filename = g_strdup_printf ("%s-%" G_GINT64_FORMAT, prgname,
- g_date_time_to_unix (date_time));
-
- GST_DEBUG_BIN_TO_DOT_FILE (GST_BIN (priv->pipeline),
- GST_DEBUG_GRAPH_SHOW_ALL, filename);
-
- dot_dir = g_getenv ("GST_DEBUG_DUMP_DOT_DIR");
- dot_cmd = g_strdup_printf ("dot -Tpng -o %s.png %s.dot",
- filename,
- filename);
- g_shell_parse_argv (dot_cmd, &argc, &argv, NULL);
-
- if (g_spawn_async (dot_dir,
- argv,
- NULL,
- G_SPAWN_DO_NOT_REAP_CHILD | G_SPAWN_SEARCH_PATH,
- NULL,
- NULL,
- &dot_pid,
- NULL))
- {
- gchar *uri = g_strdup_printf ("file://%s/%s.png", dot_dir, filename);
- g_child_watch_add (dot_pid, show_png, uri);
- }
-
- g_strfreev (argv);
- g_free (dot_cmd);
- g_free (filename);
- g_date_time_unref (date_time);
-}
-
-static void
-empathy_call_window_debug_tp_cb (GtkAction *action,
- EmpathyCallWindow *self)
-{
- empathy_launch_program (BIN_DIR, "empathy-debugger", "-s Empathy.Call");
-}
-
-static void
-empathy_call_window_about_cb (GtkAction *action,
- EmpathyCallWindow *self)
-{
- empathy_about_dialog_new (GTK_WINDOW (self));
-}
-
-static gboolean
-empathy_call_window_toolbar_timeout (gpointer data)
-{
- EmpathyCallWindow *self = data;
-
- /* We don't want to hide the toolbar if we're not in a call, as
- * to show the call status all the time. Also don't hide if we're muted
- * to prevent the awkward, talking when muted situation */
- if (self->priv->call_state != CONNECTING &&
- self->priv->call_state != DISCONNECTED &&
- !self->priv->muted)
- clutter_state_set_state (self->priv->transitions, "fade-out");
-
- return TRUE;
-}
-
-static gboolean
-empathy_call_window_motion_notify_cb (GtkWidget *widget,
- GdkEvent *event,
- EmpathyCallWindow *self)
-{
- clutter_state_set_state (self->priv->transitions, "fade-in");
-
- if (self->priv->inactivity_src > 0)
- g_source_remove (self->priv->inactivity_src);
-
- self->priv->inactivity_src = g_timeout_add_seconds (3,
- empathy_call_window_toolbar_timeout, self);
-
- return FALSE;
-}
-
-static gboolean
-empathy_call_window_configure_event_cb (GtkWidget *widget,
- GdkEvent *event,
- EmpathyCallWindow *self)
-{
- GdkWindow *gdk_window;
- GdkWindowState window_state;
-
- gtk_window_get_position (GTK_WINDOW (self), &self->priv->x, &self->priv->y);
- gtk_window_get_size (GTK_WINDOW (self), &self->priv->w, &self->priv->h);
-
- gtk_widget_get_preferred_width (self->priv->dtmf_panel,
- &self->priv->dialpad_width, NULL);
-
- gdk_window = gtk_widget_get_window (widget);
- window_state = gdk_window_get_state (gdk_window);
- self->priv->maximized = (window_state & GDK_WINDOW_STATE_MAXIMIZED);
-
- return FALSE;
-}
-
-static void
-empathy_call_window_destroyed_cb (GtkWidget *object,
- EmpathyCallWindow *self)
-{
- if (gtk_widget_get_visible (self->priv->dtmf_panel))
- {
- /* Save the geometry as if the dialpad was hidden. */
- empathy_geometry_save_values (GTK_WINDOW (self),
- self->priv->x, self->priv->y,
- self->priv->w - self->priv->dialpad_width, self->priv->h,
- self->priv->maximized);
- }
-}
-
-static void
-empathy_call_window_incoming_call_response_cb (GtkDialog *dialog,
- gint response_id,
- EmpathyCallWindow *self)
-{
- switch (response_id)
- {
- case GTK_RESPONSE_ACCEPT:
- tp_channel_dispatch_operation_handle_with_async (
- self->priv->pending_cdo, EMPATHY_CALL_BUS_NAME, NULL, NULL);
-
- tp_clear_object (&self->priv->pending_cdo);
- tp_clear_object (&self->priv->pending_channel);
- tp_clear_object (&self->priv->pending_context);
-
- break;
- case GTK_RESPONSE_CANCEL:
- tp_channel_dispatch_operation_close_channels_async (
- self->priv->pending_cdo, NULL, NULL);
-
- empathy_call_window_status_message (self, _("Disconnected"));
- self->priv->call_state = DISCONNECTED;
- break;
- default:
- g_warn_if_reached ();
- }
-}
-
-static void
-empathy_call_window_set_state_ringing (EmpathyCallWindow *self)
-{
- gboolean video;
-
- g_assert (self->priv->call_state != CONNECTED);
-
- video = tp_call_channel_has_initial_video (self->priv->pending_channel, NULL);
-
- empathy_call_window_status_message (self, _("Incoming call"));
- self->priv->call_state = RINGING;
-
- self->priv->incoming_call_dialog = gtk_message_dialog_new (
- GTK_WINDOW (self), GTK_DIALOG_MODAL,
- GTK_MESSAGE_QUESTION, GTK_BUTTONS_NONE,
- video ? _("Incoming video call from %s") : _("Incoming call from %s"),
- empathy_contact_get_alias (self->priv->contact));
-
- gtk_dialog_add_buttons (GTK_DIALOG (self->priv->incoming_call_dialog),
- _("Reject"), GTK_RESPONSE_CANCEL,
- _("Answer"), GTK_RESPONSE_ACCEPT,
- NULL);
-
- g_signal_connect (self->priv->incoming_call_dialog, "response",
- G_CALLBACK (empathy_call_window_incoming_call_response_cb), self);
- gtk_widget_show (self->priv->incoming_call_dialog);
-}
-
-static void
-empathy_call_window_cdo_invalidated_cb (TpProxy *channel,
- guint domain,
- gint code,
- gchar *message,
- EmpathyCallWindow *self)
-{
- tp_clear_object (&self->priv->pending_cdo);
- tp_clear_object (&self->priv->pending_channel);
- tp_clear_object (&self->priv->pending_context);
-
- /* We don't know if the incoming call has been accepted or not, so we
- * assume it hasn't and if it has, we'll set the proper status when
- * we get the new handler. */
- empathy_call_window_status_message (self, _("Disconnected"));
- self->priv->call_state = DISCONNECTED;
-
- gtk_widget_destroy (self->priv->incoming_call_dialog);
- self->priv->incoming_call_dialog = NULL;
-}
-
-void
-empathy_call_window_start_ringing (EmpathyCallWindow *self,
- TpCallChannel *channel,
- TpChannelDispatchOperation *dispatch_operation,
- TpAddDispatchOperationContext *context)
-{
- g_assert (self->priv->pending_channel == NULL);
- g_assert (self->priv->pending_context == NULL);
- g_assert (self->priv->pending_cdo == NULL);
-
- /* Start ringing and delay until the user answers or hangs. */
- self->priv->pending_channel = g_object_ref (channel);
- self->priv->pending_context = g_object_ref (context);
- self->priv->pending_cdo = g_object_ref (dispatch_operation);
-
- g_signal_connect (self->priv->pending_cdo, "invalidated",
- G_CALLBACK (empathy_call_window_cdo_invalidated_cb), self);
-
- empathy_call_window_set_state_ringing (self);
- tp_add_dispatch_operation_context_accept (context);
-}
-
-static void
-mic_button_clicked (GtkWidget *button,
- EmpathyCallWindow *self)
-{
- /* Toggle the muted state. We rely on audio_input_mute_notify_cb to update
- * the icon. */
- empathy_audio_src_set_mute (EMPATHY_GST_AUDIO_SRC (self->priv->audio_input),
- !self->priv->muted);
-}
-
-static void
-empathy_call_window_init (EmpathyCallWindow *self)
-{
- EmpathyCallWindowPriv *priv;
- GtkBuilder *gui;
- GtkWidget *top_vbox;
- gchar *filename;
- ClutterConstraint *constraint;
- ClutterActor *remote_avatar;
- ClutterColor black = { 0, 0, 0, 0 };
- ClutterMargin overlay_margin = { OVERLAY_MARGIN, OVERLAY_MARGIN,
- OVERLAY_MARGIN, OVERLAY_MARGIN };
-
- priv = self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self,
- EMPATHY_TYPE_CALL_WINDOW, EmpathyCallWindowPriv);
-
- priv->settings = g_settings_new (EMPATHY_PREFS_CALL_SCHEMA);
- priv->timer = g_timer_new ();
-
- filename = empathy_file_lookup ("empathy-call-window.ui", "src");
- gui = tpaw_builder_get_file (filename,
- "call_window_vbox", &top_vbox,
- "errors_vbox", &priv->errors_vbox,
- "pane", &priv->pane,
- "remote_user_name_toolbar", &priv->remote_user_name_toolbar,
- "remote_user_status_toolbar", &priv->remote_user_status_toolbar,
- "remote_user_avatar_toolbar", &priv->remote_user_avatar_toolbar,
- "status_label", &priv->status_label,
- "audiocall", &priv->audio_call_button,
- "videocall", &priv->video_call_button,
- "microphone", &priv->mic_button,
- "microphone_icon", &priv->microphone_icon,
- "volume", &priv->volume_button,
- "camera", &priv->camera_button,
- "hangup", &priv->hangup_button,
- "dialpad", &priv->dialpad_button,
- "toolbar", &priv->toolbar,
- "bottom_toolbar", &priv->bottom_toolbar,
- "ui_manager", &priv->ui_manager,
- "menufullscreen", &priv->menu_fullscreen,
- "menupreviewswap", &priv->menu_swap_camera,
- "details_vbox", &priv->details_vbox,
- "vcodec_encoding_label", &priv->vcodec_encoding_label,
- "acodec_encoding_label", &priv->acodec_encoding_label,
- "acodec_decoding_label", &priv->acodec_decoding_label,
- "vcodec_decoding_label", &priv->vcodec_decoding_label,
- "audio_remote_candidate_label", &priv->audio_remote_candidate_label,
- "audio_local_candidate_label", &priv->audio_local_candidate_label,
- "video_remote_candidate_label", &priv->video_remote_candidate_label,
- "video_local_candidate_label", &priv->video_local_candidate_label,
- "video_remote_candidate_info_img", &priv->video_remote_candidate_info_img,
- "video_local_candidate_info_img", &priv->video_local_candidate_info_img,
- "audio_remote_candidate_info_img", &priv->audio_remote_candidate_info_img,
- "audio_local_candidate_info_img", &priv->audio_local_candidate_info_img,
- NULL);
- g_free (filename);
-
- tpaw_builder_connect (gui, self,
- "hangup", "clicked", empathy_call_window_hangup_cb,
- "audiocall", "clicked", empathy_call_window_audio_call_cb,
- "videocall", "clicked", empathy_call_window_video_call_cb,
- "camera", "toggled", empathy_call_window_camera_toggled_cb,
- "dialpad", "toggled", empathy_call_window_dialpad_cb,
- "menufullscreen", "activate", empathy_call_window_fullscreen_cb,
- "menusettings", "activate", empathy_call_window_settings_cb,
- "menucontents", "activate", empathy_call_window_contents_cb,
- "menudebuggst", "activate", empathy_call_window_debug_gst_cb,
- "menudebugtp", "activate", empathy_call_window_debug_tp_cb,
- "menuabout", "activate", empathy_call_window_about_cb,
- "menupreviewdisable", "activate", empathy_call_window_disable_camera_cb,
- "menupreviewminimise", "activate", empathy_call_window_minimise_camera_cb,
- "menupreviewmaximise", "activate", empathy_call_window_maximise_camera_cb,
- "menupreviewswap", "activate", empathy_call_window_swap_camera_cb,
- NULL);
-
- empathy_set_css_provider (GTK_WIDGET (self));
- gtk_action_set_sensitive (priv->menu_fullscreen, FALSE);
-
- priv->camera_monitor = tpaw_camera_monitor_dup_singleton ();
-
- g_object_bind_property (priv->camera_monitor, "available",
- priv->camera_button, "sensitive",
- G_BINDING_SYNC_CREATE);
-
- g_signal_connect (priv->camera_monitor, "added",
- G_CALLBACK (empathy_call_window_camera_added_cb), self);
- g_signal_connect (priv->camera_monitor, "removed",
- G_CALLBACK (empathy_call_window_camera_removed_cb), self);
-
- g_signal_connect (priv->mic_button, "clicked",
- G_CALLBACK (mic_button_clicked), self);
-
- g_mutex_init (&priv->lock);
-
- gtk_container_add (GTK_CONTAINER (self), top_vbox);
-
- priv->content_hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL,
- CONTENT_HBOX_SPACING);
- gtk_box_pack_start (GTK_BOX (priv->pane), priv->content_hbox,
- TRUE, TRUE, 0);
-
- /* main contents remote avatar/video box */
- priv->video_layout = clutter_bin_layout_new (CLUTTER_BIN_ALIGNMENT_FILL,
- CLUTTER_BIN_ALIGNMENT_FILL);
-
- priv->video_box = clutter_box_new (priv->video_layout);
-
- priv->video_container = gtk_clutter_embed_new ();
-
- gtk_widget_set_size_request (priv->video_container,
- REMOTE_VIDEO_DEFAULT_WIDTH, REMOTE_VIDEO_DEFAULT_HEIGHT);
-
- /* Set the background black */
- clutter_stage_set_color (
- CLUTTER_STAGE (gtk_clutter_embed_get_stage (
- GTK_CLUTTER_EMBED (priv->video_container))),
- &black);
-
- clutter_container_add (
- CLUTTER_CONTAINER (gtk_clutter_embed_get_stage (
- GTK_CLUTTER_EMBED (priv->video_container))),
- priv->video_box,
- NULL);
-
- constraint = clutter_bind_constraint_new (
- gtk_clutter_embed_get_stage (GTK_CLUTTER_EMBED (priv->video_container)),
- CLUTTER_BIND_SIZE, 0);
- clutter_actor_add_constraint (priv->video_box, constraint);
-
- priv->remote_user_avatar_widget = gtk_image_new ();
- remote_avatar = gtk_clutter_actor_new_with_contents (
- priv->remote_user_avatar_widget);
- make_background_transparent (GTK_CLUTTER_ACTOR (remote_avatar));
-
- clutter_container_add_actor (CLUTTER_CONTAINER (priv->video_box),
- remote_avatar);
-
- /* create the overlay bin */
- priv->overlay_layout = clutter_bin_layout_new (CLUTTER_BIN_ALIGNMENT_CENTER,
- CLUTTER_BIN_ALIGNMENT_CENTER);
- priv->overlay_bin = clutter_actor_new ();
- clutter_actor_set_layout_manager (priv->overlay_bin, priv->overlay_layout);
-
- clutter_actor_set_margin (priv->overlay_bin, &overlay_margin);
-
- clutter_bin_layout_add (CLUTTER_BIN_LAYOUT (priv->video_layout),
- priv->overlay_bin,
- CLUTTER_BIN_ALIGNMENT_FILL, CLUTTER_BIN_ALIGNMENT_FILL);
-
- empathy_call_window_create_preview_rectangles (self);
-
- gtk_box_pack_start (GTK_BOX (priv->content_hbox),
- priv->video_container, TRUE, TRUE,
- CONTENT_HBOX_CHILDREN_PACKING_PADDING);
-
- create_pipeline (self);
- create_video_output_widget (self);
- create_audio_input (self);
- create_video_input (self);
-
- priv->floating_toolbar = gtk_clutter_actor_new ();
- clutter_actor_set_reactive (priv->floating_toolbar, TRUE);
- make_background_transparent (GTK_CLUTTER_ACTOR (priv->floating_toolbar));
-
- gtk_style_context_add_class (
- gtk_widget_get_style_context (GTK_WIDGET (priv->bottom_toolbar)),
- GTK_STYLE_CLASS_OSD);
- gtk_widget_reparent (priv->bottom_toolbar,
- gtk_clutter_actor_get_widget (GTK_CLUTTER_ACTOR (priv->floating_toolbar)));
-
- clutter_bin_layout_add (CLUTTER_BIN_LAYOUT (priv->overlay_layout),
- priv->floating_toolbar,
- CLUTTER_BIN_ALIGNMENT_CENTER, CLUTTER_BIN_ALIGNMENT_END);
-
- clutter_actor_raise_top (priv->floating_toolbar);
-
- /* Transitions for the floating toolbar */
- priv->transitions = clutter_state_new ();
-
- /* all transitions last for 2s */
- clutter_state_set_duration (priv->transitions, NULL, NULL, 2000);
-
- /* transition from any state to "fade-out" state */
- clutter_state_set (priv->transitions, NULL, "fade-out",
- priv->floating_toolbar,
- "opacity", CLUTTER_EASE_OUT_QUAD, 0,
- NULL);
-
- /* transition from any state to "fade-in" state */
- clutter_state_set (priv->transitions, NULL, "fade-in",
- priv->floating_toolbar,
- "opacity", CLUTTER_EASE_OUT_QUAD, 255,
- NULL);
-
- /* put the actor into the "fade-in" state with no animation */
- clutter_state_warp_to_state (priv->transitions, "fade-in");
-
- /* The call will be started as soon the pipeline is playing */
- priv->start_call_when_playing = TRUE;
-
- priv->dtmf_panel = empathy_dialpad_widget_new ();
- g_signal_connect (priv->dtmf_panel, "start-tone",
- G_CALLBACK (dtmf_start_tone_cb), self);
-
- gtk_box_pack_start (GTK_BOX (priv->pane), priv->dtmf_panel,
- FALSE, FALSE, 6);
-
- gtk_box_pack_start (GTK_BOX (priv->pane), priv->details_vbox,
- FALSE, FALSE, 0);
-
- gtk_widget_set_sensitive (priv->dtmf_panel, FALSE);
-
- gtk_widget_show_all (top_vbox);
-
- gtk_widget_hide (priv->dtmf_panel);
- gtk_widget_hide (priv->details_vbox);
-
- priv->fullscreen = empathy_call_window_fullscreen_new (self);
-
- empathy_call_window_fullscreen_set_video_widget (priv->fullscreen,
- priv->video_container);
-
- /* We hide the bottom toolbar after 3s of inactivity and show it
- * again on mouse movement */
- priv->inactivity_src = g_timeout_add_seconds (3,
- empathy_call_window_toolbar_timeout, self);
-
- g_signal_connect (G_OBJECT (priv->fullscreen->leave_fullscreen_button),
- "clicked", G_CALLBACK (empathy_call_window_fullscreen_cb), self);
-
- g_signal_connect (G_OBJECT (self), "realize",
- G_CALLBACK (empathy_call_window_realized_cb), self);
-
- g_signal_connect (G_OBJECT (self), "delete-event",
- G_CALLBACK (empathy_call_window_delete_cb), self);
-
- g_signal_connect (G_OBJECT (self), "window-state-event",
- G_CALLBACK (empathy_call_window_state_event_cb), self);
-
- g_signal_connect (G_OBJECT (self), "key-press-event",
- G_CALLBACK (empathy_call_window_key_press_cb), self);
-
- g_signal_connect (self, "motion-notify-event",
- G_CALLBACK (empathy_call_window_motion_notify_cb), self);
-
- g_object_ref (priv->ui_manager);
- g_object_unref (gui);
-
- priv->sound_mgr = empathy_sound_manager_dup_singleton ();
- priv->mic_menu = empathy_mic_menu_new (self);
- priv->camera_menu = empathy_camera_menu_new (self);
-
- empathy_call_window_show_hangup_button (self, TRUE);
-
- gtk_window_set_default_size (GTK_WINDOW (self), 580, 480);
-
- empathy_geometry_bind (GTK_WINDOW (self), "call-window");
- /* These signals are used to track the window position and save it
- * when the window is destroyed. We need to do this as we don't want
- * the window geometry to be saved with the dialpad taken into account. */
- g_signal_connect (self, "destroy",
- G_CALLBACK (empathy_call_window_destroyed_cb), self);
- g_signal_connect (self, "configure-event",
- G_CALLBACK (empathy_call_window_configure_event_cb), self);
- g_signal_connect (self, "window-state-event",
- G_CALLBACK (empathy_call_window_configure_event_cb), self);
-
- /* Don't display labels in both toolbars */
- gtk_toolbar_set_style (GTK_TOOLBAR (priv->toolbar), GTK_TOOLBAR_ICONS);
-}
-
-/* Instead of specifying a width and a height, we specify only one size. That's
- because we want a square avatar icon. */
-static void
-init_contact_avatar_with_size (EmpathyContact *contact,
- GtkWidget *image_widget,
- gint size)
-{
- GdkPixbuf *pixbuf_avatar = NULL;
-
- if (contact != NULL)
- {
- pixbuf_avatar = empathy_pixbuf_avatar_from_contact_scaled (contact,
- size, size);
- }
-
- if (pixbuf_avatar == NULL)
- {
- pixbuf_avatar = tpaw_pixbuf_from_icon_name_sized (
- TPAW_IMAGE_AVATAR_DEFAULT, size);
- }
-
- gtk_image_set_from_pixbuf (GTK_IMAGE (image_widget), pixbuf_avatar);
-
- if (pixbuf_avatar != NULL)
- g_object_unref (pixbuf_avatar);
-}
-
-static void
-set_window_title (EmpathyCallWindow *self)
-{
- EmpathyCallWindowPriv *priv = GET_PRIV (self);
- gchar *tmp;
-
- if (priv->contact != NULL)
- {
- /* translators: Call is a noun and %s is the contact name. This string
- * is used in the window title */
- tmp = g_strdup_printf (_("Call with %s"),
- empathy_contact_get_alias (priv->contact));
- gtk_window_set_title (GTK_WINDOW (self), tmp);
- g_free (tmp);
- }
- else
- {
- g_warning ("Unknown remote contact!");
- }
-}
-
-static void
-set_remote_user_name (EmpathyCallWindow *self,
- EmpathyContact *contact)
-{
- const gchar *alias = empathy_contact_get_alias (contact);
- const gchar *status = empathy_contact_get_status (contact);
-
- gtk_label_set_text (GTK_LABEL (self->priv->remote_user_name_toolbar), alias);
-
- if (status != NULL) {
- gchar *markup;
-
- markup = g_markup_printf_escaped ("<small>%s</small>", status);
- gtk_label_set_markup (GTK_LABEL (self->priv->remote_user_status_toolbar),
- markup);
- g_free (markup);
- } else {
- gtk_label_set_markup (GTK_LABEL (self->priv->remote_user_status_toolbar),
- "");
- }
-}
-
-static void
-contact_name_changed_cb (EmpathyContact *contact,
- GParamSpec *pspec,
- EmpathyCallWindow *self)
-{
- set_window_title (self);
- set_remote_user_name (self, contact);
-}
-
-static void
-contact_presence_changed_cb (EmpathyContact *contact,
- GParamSpec *pspec,
- EmpathyCallWindow *self)
-{
- set_remote_user_name (self, contact);
-}
-
-static void
-contact_avatar_changed_cb (EmpathyContact *contact,
- GParamSpec *pspec,
- EmpathyCallWindow *self)
-{
- int size;
- GtkAllocation allocation;
- GtkWidget *avatar_widget;
-
- avatar_widget = self->priv->remote_user_avatar_widget;
-
- gtk_widget_get_allocation (avatar_widget, &allocation);
- size = allocation.height;
-
- if (size == 0)
- {
- /* the widget is not allocated yet, set a default size */
- size = MIN (REMOTE_CONTACT_AVATAR_DEFAULT_HEIGHT,
- REMOTE_CONTACT_AVATAR_DEFAULT_WIDTH);
- }
-
- init_contact_avatar_with_size (contact, avatar_widget, size);
-
- avatar_widget = self->priv->remote_user_avatar_toolbar;
-
- gtk_widget_get_allocation (avatar_widget, &allocation);
- size = allocation.height;
-
- if (size == 0)
- {
- /* the widget is not allocated yet, set a default size */
- size = SMALL_TOOLBAR_SIZE;
- }
-
- init_contact_avatar_with_size (contact, avatar_widget, size);
-}
-
-static void
-empathy_call_window_setup_avatars (EmpathyCallWindow *self,
- EmpathyCallHandler *handler)
-{
- EmpathyCallWindowPriv *priv = GET_PRIV (self);
-
- tp_g_signal_connect_object (priv->contact, "notify::name",
- G_CALLBACK (contact_name_changed_cb), self, 0);
- tp_g_signal_connect_object (priv->contact, "notify::avatar",
- G_CALLBACK (contact_avatar_changed_cb), self, 0);
- tp_g_signal_connect_object (priv->contact, "notify::presence",
- G_CALLBACK (contact_presence_changed_cb), self, 0);
-
- set_window_title (self);
- set_remote_user_name (self, priv->contact);
-
- init_contact_avatar_with_size (priv->contact,
- priv->remote_user_avatar_widget,
- MIN (REMOTE_CONTACT_AVATAR_DEFAULT_WIDTH,
- REMOTE_CONTACT_AVATAR_DEFAULT_HEIGHT));
-
- init_contact_avatar_with_size (priv->contact,
- priv->remote_user_avatar_toolbar,
- SMALL_TOOLBAR_SIZE);
-
- /* The remote avatar is shown by default and will be hidden when we receive
- video from the remote side. */
- clutter_actor_hide (priv->video_output);
- gtk_widget_show (priv->remote_user_avatar_widget);
-}
-
-static void
-update_send_codec (EmpathyCallWindow *self,
- gboolean audio)
-{
- EmpathyCallWindowPriv *priv = GET_PRIV (self);
- FsCodec *codec;
- GtkWidget *widget;
- gchar *tmp;
-
- if (audio)
- {
- codec = empathy_call_handler_get_send_audio_codec (priv->handler);
- widget = priv->acodec_encoding_label;
- }
- else
- {
- codec = empathy_call_handler_get_send_video_codec (priv->handler);
- widget = priv->vcodec_encoding_label;
- }
-
- if (codec == NULL)
- return;
-
- tmp = g_strdup_printf ("%s/%u", codec->encoding_name, codec->clock_rate);
- gtk_label_set_text (GTK_LABEL (widget), tmp);
- g_free (tmp);
-}
-
-static void
-send_audio_codec_notify_cb (GObject *object,
- GParamSpec *pspec,
- gpointer user_data)
-{
- EmpathyCallWindow *self = user_data;
-
- update_send_codec (self, TRUE);
-}
-
-static void
-send_video_codec_notify_cb (GObject *object,
- GParamSpec *pspec,
- gpointer user_data)
-{
- EmpathyCallWindow *self = user_data;
-
- update_send_codec (self, FALSE);
-}
-
-static void
-update_recv_codec (EmpathyCallWindow *self,
- gboolean audio)
-{
- EmpathyCallWindowPriv *priv = GET_PRIV (self);
- GList *codecs, *l;
- GtkWidget *widget;
- GString *str = NULL;
-
- if (audio)
- {
- codecs = empathy_call_handler_get_recv_audio_codecs (priv->handler);
- widget = priv->acodec_decoding_label;
- }
- else
- {
- codecs = empathy_call_handler_get_recv_video_codecs (priv->handler);
- widget = priv->vcodec_decoding_label;
- }
-
- if (codecs == NULL)
- return;
-
- for (l = codecs; l != NULL; l = g_list_next (l))
- {
- FsCodec *codec = l->data;
-
- if (str == NULL)
- str = g_string_new (NULL);
- else
- g_string_append (str, ", ");
-
- g_string_append_printf (str, "%s/%u", codec->encoding_name,
- codec->clock_rate);
- }
-
- gtk_label_set_text (GTK_LABEL (widget), str->str);
- g_string_free (str, TRUE);
-}
-
-static void
-recv_audio_codecs_notify_cb (GObject *object,
- GParamSpec *pspec,
- gpointer user_data)
-{
- EmpathyCallWindow *self = user_data;
-
- update_recv_codec (self, TRUE);
-}
-
-static void
-recv_video_codecs_notify_cb (GObject *object,
- GParamSpec *pspec,
- gpointer user_data)
-{
- EmpathyCallWindow *self = user_data;
-
- update_recv_codec (self, FALSE);
-}
-
-static const gchar *
-candidate_type_to_str (FsCandidate *candidate)
-{
- switch (candidate->type)
- {
- case FS_CANDIDATE_TYPE_HOST:
- return "host";
- case FS_CANDIDATE_TYPE_SRFLX:
- return "server reflexive";
- case FS_CANDIDATE_TYPE_PRFLX:
- return "peer reflexive";
- case FS_CANDIDATE_TYPE_RELAY:
- return "relay";
- case FS_CANDIDATE_TYPE_MULTICAST:
- return "multicast";
- }
-
- return NULL;
-}
-
-static const gchar *
-candidate_type_to_desc (FsCandidate *candidate)
-{
- switch (candidate->type)
- {
- case FS_CANDIDATE_TYPE_HOST:
- return _("The IP address as seen by the machine");
- case FS_CANDIDATE_TYPE_SRFLX:
- return _("The IP address as seen by a server on the Internet");
- case FS_CANDIDATE_TYPE_PRFLX:
- return _("The IP address of the peer as seen by the other side");
- case FS_CANDIDATE_TYPE_RELAY:
- return _("The IP address of a relay server");
- case FS_CANDIDATE_TYPE_MULTICAST:
- return _("The IP address of the multicast group");
- }
-
- return NULL;
-}
-
-static void
-update_candidat_widget (EmpathyCallWindow *self,
- GtkWidget *label,
- GtkWidget *img,
- FsCandidate *candidate)
-{
- gchar *str;
-
- g_assert (candidate != NULL);
- str = g_strdup_printf ("%s %u (%s)", candidate->ip,
- candidate->port, candidate_type_to_str (candidate));
-
- gtk_label_set_text (GTK_LABEL (label), str);
- gtk_widget_set_tooltip_text (img, candidate_type_to_desc (candidate));
-
- g_free (str);
-}
-
-static void
-candidates_changed_cb (GObject *object,
- FsMediaType type,
- EmpathyCallWindow *self)
-{
- EmpathyCallWindowPriv *priv = GET_PRIV (self);
- FsCandidate *candidate = NULL;
-
- if (type == FS_MEDIA_TYPE_VIDEO)
- {
- /* Update remote candidate */
- candidate = empathy_call_handler_get_video_remote_candidate (
- priv->handler);
-
- update_candidat_widget (self, priv->video_remote_candidate_label,
- priv->video_remote_candidate_info_img, candidate);
-
- /* Update local candidate */
- candidate = empathy_call_handler_get_video_local_candidate (
- priv->handler);
-
- update_candidat_widget (self, priv->video_local_candidate_label,
- priv->video_local_candidate_info_img, candidate);
- }
- else
- {
- /* Update remote candidate */
- candidate = empathy_call_handler_get_audio_remote_candidate (
- priv->handler);
-
- update_candidat_widget (self, priv->audio_remote_candidate_label,
- priv->audio_remote_candidate_info_img, candidate);
-
- /* Update local candidate */
- candidate = empathy_call_handler_get_audio_local_candidate (
- priv->handler);
-
- update_candidat_widget (self, priv->audio_local_candidate_label,
- priv->audio_local_candidate_info_img, candidate);
- }
-}
-
-static void
-empathy_call_window_constructed (GObject *object)
-{
- EmpathyCallWindow *self = EMPATHY_CALL_WINDOW (object);
- EmpathyCallWindowPriv *priv = GET_PRIV (self);
- TpCallChannel *call;
- TpCallState state;
-
- g_assert (priv->handler != NULL);
-
- g_object_get (priv->handler, "call-channel", &call, NULL);
- state = tp_call_channel_get_state (call, NULL, NULL, NULL);
- priv->outgoing = (state == TP_CALL_STATE_PENDING_INITIATOR);
- tp_clear_object (&call);
-
- priv->contact = empathy_call_handler_get_contact (priv->handler);
- g_assert (priv->contact != NULL);
- g_object_ref (priv->contact);
-
- if (!empathy_contact_can_voip_video (priv->contact))
- {
- gtk_widget_set_sensitive (priv->video_call_button, FALSE);
- gtk_widget_set_sensitive (priv->camera_button, FALSE);
- }
-
- empathy_call_window_setup_avatars (self, priv->handler);
- empathy_call_window_set_state_connecting (self);
-
- if (!empathy_call_handler_has_initial_video (priv->handler))
- {
- gtk_toggle_button_set_active (
- GTK_TOGGLE_BUTTON (priv->camera_button), FALSE);
- }
- /* If call has InitialVideo, the preview will be started once the call has
- * been started (start_call()). */
-
- update_send_codec (self, TRUE);
- update_send_codec (self, FALSE);
- update_recv_codec (self, TRUE);
- update_recv_codec (self, FALSE);
-
- tp_g_signal_connect_object (priv->handler, "notify::send-audio-codec",
- G_CALLBACK (send_audio_codec_notify_cb), self, 0);
- tp_g_signal_connect_object (priv->handler, "notify::send-video-codec",
- G_CALLBACK (send_video_codec_notify_cb), self, 0);
- tp_g_signal_connect_object (priv->handler, "notify::recv-audio-codecs",
- G_CALLBACK (recv_audio_codecs_notify_cb), self, 0);
- tp_g_signal_connect_object (priv->handler, "notify::recv-video-codecs",
- G_CALLBACK (recv_video_codecs_notify_cb), self, 0);
-
- tp_g_signal_connect_object (priv->handler, "candidates-changed",
- G_CALLBACK (candidates_changed_cb), self, 0);
-}
-
-static void empathy_call_window_dispose (GObject *object);
-static void empathy_call_window_finalize (GObject *object);
-
-static void
-empathy_call_window_set_property (GObject *object,
- guint property_id, const GValue *value, GParamSpec *pspec)
-{
- EmpathyCallWindowPriv *priv = GET_PRIV (object);
-
- switch (property_id)
- {
- case PROP_CALL_HANDLER:
- priv->handler = g_value_dup_object (value);
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
- }
-}
-
-static void
-empathy_call_window_get_property (GObject *object,
- guint property_id, GValue *value, GParamSpec *pspec)
-{
- EmpathyCallWindowPriv *priv = GET_PRIV (object);
-
- switch (property_id)
- {
- case PROP_CALL_HANDLER:
- g_value_set_object (value, priv->handler);
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
- }
-}
-
-static void
-empathy_call_window_class_init (
- EmpathyCallWindowClass *empathy_call_window_class)
-{
- GObjectClass *object_class = G_OBJECT_CLASS (empathy_call_window_class);
- GParamSpec *param_spec;
-
- g_type_class_add_private (empathy_call_window_class,
- sizeof (EmpathyCallWindowPriv));
-
- object_class->constructed = empathy_call_window_constructed;
- object_class->set_property = empathy_call_window_set_property;
- object_class->get_property = empathy_call_window_get_property;
-
- object_class->dispose = empathy_call_window_dispose;
- object_class->finalize = empathy_call_window_finalize;
-
- param_spec = g_param_spec_object ("handler",
- "handler", "The call handler",
- EMPATHY_TYPE_CALL_HANDLER,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS);
- g_object_class_install_property (object_class,
- PROP_CALL_HANDLER, param_spec);
-
- signals[SIG_INHIBIT] = g_signal_new ("inhibit",
- G_OBJECT_CLASS_TYPE (empathy_call_window_class),
- G_SIGNAL_RUN_LAST,
- 0, NULL, NULL, NULL,
- G_TYPE_NONE,
- 1, G_TYPE_BOOLEAN);
-}
-
-void
-empathy_call_window_dispose (GObject *object)
-{
- EmpathyCallWindow *self = EMPATHY_CALL_WINDOW (object);
- EmpathyCallWindowPriv *priv = GET_PRIV (self);
-
- if (priv->dispose_has_run)
- return;
-
- priv->dispose_has_run = TRUE;
-
- if (priv->handler != NULL)
- {
- empathy_call_handler_stop_call (priv->handler);
- tp_clear_object (&priv->handler);
- }
-
- if (priv->bus_message_source_id != 0)
- {
- g_source_remove (priv->bus_message_source_id);
- priv->bus_message_source_id = 0;
- }
-
- if (priv->got_video_src > 0)
- {
- g_source_remove (priv->got_video_src);
- priv->got_video_src = 0;
- }
-
- if (priv->inactivity_src > 0)
- {
- g_source_remove (priv->inactivity_src);
- priv->inactivity_src = 0;
- }
-
- tp_clear_object (&priv->pipeline);
- tp_clear_object (&priv->video_input);
- tp_clear_object (&priv->audio_input);
- tp_clear_object (&priv->video_tee);
- tp_clear_object (&priv->ui_manager);
- tp_clear_object (&priv->fullscreen);
- tp_clear_object (&priv->camera_monitor);
- tp_clear_object (&priv->settings);
- tp_clear_object (&priv->sound_mgr);
- tp_clear_object (&priv->mic_menu);
- tp_clear_object (&priv->camera_menu);
- tp_clear_object (&priv->transitions);
-
- g_list_free_full (priv->notifiers, g_object_unref);
-
- if (priv->timer_id != 0)
- g_source_remove (priv->timer_id);
- priv->timer_id = 0;
-
- tp_clear_object (&priv->contact);
-
- G_OBJECT_CLASS (empathy_call_window_parent_class)->dispose (object);
-}
-
-static void
-disconnect_video_output_motion_handler (EmpathyCallWindow *self)
-{
- EmpathyCallWindowPriv *priv = GET_PRIV (self);
-
- if (priv->video_output_motion_handler_id != 0)
- {
- g_signal_handler_disconnect (G_OBJECT (priv->video_container),
- priv->video_output_motion_handler_id);
- priv->video_output_motion_handler_id = 0;
- }
-}
-
-void
-empathy_call_window_finalize (GObject *object)
-{
- EmpathyCallWindow *self = EMPATHY_CALL_WINDOW (object);
- EmpathyCallWindowPriv *priv = GET_PRIV (self);
-
- disconnect_video_output_motion_handler (self);
-
- /* free any data held directly by the object here */
- g_mutex_clear (&priv->lock);
-
- g_timer_destroy (priv->timer);
-
- G_OBJECT_CLASS (empathy_call_window_parent_class)->finalize (object);
-}
-
-
-EmpathyCallWindow *
-empathy_call_window_new (EmpathyCallHandler *handler)
-{
- return EMPATHY_CALL_WINDOW (
- g_object_new (EMPATHY_TYPE_CALL_WINDOW, "handler", handler, NULL));
-}
-
-void
-empathy_call_window_new_handler (EmpathyCallWindow *self,
- EmpathyCallHandler *handler,
- gboolean present,
- guint32 x11_time)
-{
- g_return_if_fail (EMPATHY_IS_CALL_HANDLER (handler));
-
- if (present)
- tpaw_window_present_with_time (GTK_WINDOW (self), x11_time);
-
- if (self->priv->call_state == DISCONNECTED)
- {
- /* start a new call if one is not already in progress */
- tp_clear_object (&self->priv->handler);
- self->priv->handler = g_object_ref (handler);
- empathy_call_window_connect_handler (self);
-
- empathy_call_window_restart_call (self);
- }
-}
-
-static void
-empathy_call_window_conference_added_cb (EmpathyCallHandler *handler,
- GstElement *conference, gpointer user_data)
-{
- EmpathyCallWindow *self = EMPATHY_CALL_WINDOW (user_data);
- EmpathyCallWindowPriv *priv = GET_PRIV (self);
- FsElementAddedNotifier *notifier;
- GKeyFile *keyfile;
-
- DEBUG ("Conference added");
-
- /* Add notifier to set the various element properties as needed */
- notifier = fs_element_added_notifier_new ();
- keyfile = fs_utils_get_default_element_properties (conference);
-
- if (keyfile != NULL)
- fs_element_added_notifier_set_properties_from_keyfile (notifier, keyfile);
-
- fs_element_added_notifier_add (notifier, GST_BIN (priv->pipeline));
-
- priv->notifiers = g_list_prepend (priv->notifiers, notifier);
-
- gst_bin_add (GST_BIN (priv->pipeline), conference);
- gst_element_set_state (conference, GST_STATE_PLAYING);
-}
-
-static void
-empathy_call_window_conference_removed_cb (EmpathyCallHandler *handler,
- GstElement *conference, gpointer user_data)
-{
- EmpathyCallWindow *self = EMPATHY_CALL_WINDOW (user_data);
- EmpathyCallWindowPriv *priv = GET_PRIV (self);
-
- g_list_free_full (priv->notifiers, g_object_unref);
- priv->notifiers = NULL;
-
- gst_bin_remove (GST_BIN (priv->pipeline), conference);
- gst_element_set_state (conference, GST_STATE_NULL);
-}
-
-static gboolean
-empathy_call_window_reset_pipeline (EmpathyCallWindow *self)
-{
- GstStateChangeReturn state_change_return;
- EmpathyCallWindowPriv *priv = GET_PRIV (self);
-
- if (priv->pipeline == NULL)
- return TRUE;
-
- if (priv->bus_message_source_id != 0)
- {
- g_source_remove (priv->bus_message_source_id);
- priv->bus_message_source_id = 0;
- }
-
- state_change_return = gst_element_set_state (priv->pipeline, GST_STATE_NULL);
-
- if (state_change_return == GST_STATE_CHANGE_SUCCESS ||
- state_change_return == GST_STATE_CHANGE_NO_PREROLL)
- {
- if (priv->pipeline != NULL)
- g_object_unref (priv->pipeline);
- priv->pipeline = NULL;
-
- if (priv->audio_output != NULL)
- g_object_unref (priv->audio_output);
- priv->audio_output = NULL;
- priv->audio_output_added = FALSE;
-
- if (priv->video_tee != NULL)
- g_object_unref (priv->video_tee);
- priv->video_tee = NULL;
-
- if (priv->video_preview != NULL)
- clutter_actor_destroy (priv->video_preview);
- priv->video_preview = NULL;
-
- /* If we destroy the preview while it's being dragged, we won't
- * get the ::drag-end signal, so manually destroy the clone */
- if (priv->drag_preview != NULL)
- {
- clutter_actor_destroy (priv->drag_preview);
- empathy_call_window_show_preview_rectangles (self, FALSE);
- priv->drag_preview = NULL;
- }
-
- priv->funnel = NULL;
-
- create_pipeline (self);
- /* Call will be started when user will hit the 'redial' button */
- priv->start_call_when_playing = FALSE;
- gst_element_set_state (priv->pipeline, GST_STATE_PAUSED);
-
- return TRUE;
- }
- else
- {
- g_message ("Error: could not destroy pipeline. Closing call window");
- gtk_widget_destroy (GTK_WIDGET (self));
-
- return FALSE;
- }
-}
-
-static void
-reset_details_pane (EmpathyCallWindow *self)
-{
- EmpathyCallWindowPriv *priv = GET_PRIV (self);
-
- gtk_label_set_text (GTK_LABEL (priv->vcodec_encoding_label), _("Unknown"));
- gtk_label_set_text (GTK_LABEL (priv->acodec_encoding_label), _("Unknown"));
- gtk_label_set_text (GTK_LABEL (priv->vcodec_decoding_label), _("Unknown"));
- gtk_label_set_text (GTK_LABEL (priv->acodec_decoding_label), _("Unknown"));
-}
-
-static gboolean
-empathy_call_window_disconnected (EmpathyCallWindow *self,
- gboolean restart)
-{
- gboolean could_disconnect = FALSE;
- EmpathyCallWindowPriv *priv = GET_PRIV (self);
- gboolean could_reset_pipeline;
-
- /* Leave full screen mode if needed */
- gtk_window_unfullscreen (GTK_WINDOW (self));
-
- g_signal_emit (self, signals[SIG_INHIBIT], 0, FALSE);
-
- gtk_action_set_sensitive (priv->menu_fullscreen, FALSE);
- gtk_widget_set_sensitive (priv->dtmf_panel, FALSE);
-
- /* Create the video input and then turn on the camera
- * menu, so that the active camera gets marked as such.
- */
- if (priv->video_input == NULL)
- create_video_input (self);
- empathy_camera_menu_set_sensitive (priv->camera_menu, TRUE);
-
- could_reset_pipeline = empathy_call_window_reset_pipeline (self);
-
- if (priv->call_state == CONNECTING)
- empathy_sound_manager_stop (priv->sound_mgr, EMPATHY_SOUND_PHONE_OUTGOING);
-
- if (priv->call_state != REDIALING)
- priv->call_state = DISCONNECTED;
-
- /* Show the toolbar */
- clutter_state_set_state (priv->transitions, "fade-in");
-
- if (could_reset_pipeline)
- {
- g_mutex_lock (&priv->lock);
-
- g_timer_stop (priv->timer);
-
- if (priv->timer_id != 0)
- g_source_remove (priv->timer_id);
- priv->timer_id = 0;
-
- g_mutex_unlock (&priv->lock);
-
- if (!restart)
- /* We are about to destroy the window, no need to update it or create
- * a video preview */
- return TRUE;
-
- empathy_call_window_status_message (self, _("Disconnected"));
-
- empathy_call_window_show_hangup_button (self, FALSE);
-
- /* Unsensitive the camera and mic button */
- gtk_widget_set_sensitive (priv->camera_button, FALSE);
- gtk_widget_set_sensitive (priv->mic_button, FALSE);
-
- /* Be sure that the mic button is enabled */
- empathy_audio_src_set_mute (
- EMPATHY_GST_AUDIO_SRC (self->priv->audio_input), FALSE);
-
- if (priv->camera_state == CAMERA_STATE_ON)
- {
- /* Restart the preview with the new pipeline. */
- display_video_preview (self, TRUE);
- }
-
- /* destroy the video output; it will be recreated when we'll redial */
- disconnect_video_output_motion_handler (self);
- if (priv->video_output != NULL)
- clutter_actor_destroy (priv->video_output);
- priv->video_output = NULL;
- if (priv->got_video_src > 0)
- {
- g_source_remove (priv->got_video_src);
- priv->got_video_src = 0;
- }
-
- gtk_widget_show (priv->remote_user_avatar_widget);
-
- reset_details_pane (self);
-
- priv->sending_video = FALSE;
- priv->call_started = FALSE;
-
- could_disconnect = TRUE;
-
- /* TODO: display the self avatar of the preview (depends if the "Always
- * Show Video Preview" is enabled or not) */
- }
-
- return could_disconnect;
-}
-
-
-static void
-empathy_call_window_channel_closed_cb (EmpathyCallHandler *handler,
- gpointer user_data)
-{
- EmpathyCallWindow *self = EMPATHY_CALL_WINDOW (user_data);
- EmpathyCallWindowPriv *priv = GET_PRIV (self);
-
- if (empathy_call_window_disconnected (self, TRUE) &&
- priv->call_state == REDIALING)
- empathy_call_window_restart_call (self);
-}
-
-static gboolean
-empathy_call_window_content_is_raw (TfContent *content)
-{
- FsConference *conference;
- gboolean israw;
-
- g_object_get (content, "fs-conference", &conference, NULL);
- g_assert (conference != NULL);
-
- /* FIXME: Ugly hack, update when moving a packetization property into
- * farstream */
- israw = g_str_has_prefix (GST_OBJECT_NAME (conference), "fsrawconf");
- gst_object_unref (conference);
-
- return israw;
-}
-
-static gboolean
-empathy_call_window_content_removed_cb (EmpathyCallHandler *handler,
- TfContent *content,
- EmpathyCallWindow *self)
-{
- EmpathyCallWindowPriv *priv = GET_PRIV (self);
- FsMediaType media_type;
-
- DEBUG ("removing content");
-
- g_object_get (content, "media-type", &media_type, NULL);
-
- /*
- * This assumes that there is only one video stream per channel...
- */
-
- if ((guint) media_type == FS_MEDIA_TYPE_VIDEO)
- {
- if (priv->funnel != NULL)
- {
- GstElement *output;
-
- output = priv->video_output_sink;
-
- gst_element_set_state (output, GST_STATE_NULL);
- gst_element_set_state (priv->funnel, GST_STATE_NULL);
-
- gst_bin_remove (GST_BIN (priv->pipeline), output);
- gst_bin_remove (GST_BIN (priv->pipeline), priv->funnel);
- priv->funnel = NULL;
- }
- }
- else if (media_type == FS_MEDIA_TYPE_AUDIO)
- {
- if (priv->audio_output != NULL)
- {
- gst_element_set_state (priv->audio_output, GST_STATE_NULL);
-
- if (priv->audio_output_added)
- gst_bin_remove (GST_BIN (priv->pipeline), priv->audio_output);
- priv->audio_output = NULL;
- priv->audio_output_added = FALSE;
- }
- }
- else
- {
- g_assert_not_reached ();
- }
-
- return TRUE;
-}
-
-static void
-empathy_call_window_framerate_changed_cb (EmpathyCallHandler *handler,
- guint framerate,
- EmpathyCallWindow *self)
-{
- EmpathyCallWindowPriv *priv = GET_PRIV (self);
-
- DEBUG ("Framerate changed to %u", framerate);
-
- if (priv->video_input != NULL)
- empathy_video_src_set_framerate (priv->video_input, framerate);
-}
-
-static void
-empathy_call_window_resolution_changed_cb (EmpathyCallHandler *handler,
- guint width,
- guint height,
- EmpathyCallWindow *self)
-{
- EmpathyCallWindowPriv *priv = GET_PRIV (self);
-
- DEBUG ("Resolution changed to %ux%u", width, height);
-
- if (priv->video_input != NULL)
- {
- empathy_video_src_set_resolution (priv->video_input, width, height);
- }
-}
-
-/* Called with global lock held */
-static GstPad *
-empathy_call_window_get_video_sink_pad (EmpathyCallWindow *self)
-{
- EmpathyCallWindowPriv *priv = GET_PRIV (self);
- GstPad *pad;
- GstElement *output;
-
- if (priv->funnel == NULL)
- {
- output = priv->video_output_sink;
-#ifdef HAVE_GST1
- priv->funnel = gst_element_factory_make ("funnel", NULL);
-#else
- priv->funnel = gst_element_factory_make ("fsfunnel", NULL);
-#endif
-
- if (!priv->funnel)
- {
- g_warning ("Could not create video funnel");
- return NULL;
- }
-
- if (!gst_bin_add (GST_BIN (priv->pipeline), priv->funnel))
- {
- gst_object_unref (priv->funnel);
- priv->funnel = NULL;
- g_warning ("Could not add funnel to pipeline");
- return NULL;
- }
-
- if (!gst_bin_add (GST_BIN (priv->pipeline), output))
- {
- g_warning ("Could not add the video output widget to the pipeline");
- goto error;
- }
-
- if (!gst_element_link (priv->funnel, output))
- {
- g_warning ("Could not link output sink to funnel");
- goto error_output_added;
- }
-
- if (gst_element_set_state (output, GST_STATE_PLAYING) == GST_STATE_CHANGE_FAILURE)
- {
- g_warning ("Could not start video sink");
- goto error_output_added;
- }
-
- if (gst_element_set_state (priv->funnel, GST_STATE_PLAYING) == GST_STATE_CHANGE_FAILURE)
- {
- g_warning ("Could not start funnel");
- goto error_output_added;
- }
- }
-#ifdef HAVE_GST1
- pad = gst_element_get_request_pad (priv->funnel, "sink_%u");
-#else
- pad = gst_element_get_request_pad (priv->funnel, "sink%d");
-#endif
-
- if (!pad)
- g_warning ("Could not get request pad from funnel");
-
- return pad;
-
-
- error_output_added:
-
- gst_element_set_locked_state (priv->funnel, TRUE);
- gst_element_set_locked_state (output, TRUE);
-
- gst_element_set_state (priv->funnel, GST_STATE_NULL);
- gst_element_set_state (output, GST_STATE_NULL);
-
- gst_bin_remove (GST_BIN (priv->pipeline), output);
- gst_element_set_locked_state (output, FALSE);
-
- error:
-
- gst_bin_remove (GST_BIN (priv->pipeline), priv->funnel);
- priv->funnel = NULL;
-
- return NULL;
-}
-
-/* Called with global lock held */
-static GstPad *
-empathy_call_window_get_audio_sink_pad (EmpathyCallWindow *self,
- TfContent *content)
-{
- EmpathyCallWindowPriv *priv = GET_PRIV (self);
- GstPad *pad;
- GstPadTemplate *template;
-
- if (!priv->audio_output_added)
- {
- if (!gst_bin_add (GST_BIN (priv->pipeline), priv->audio_output))
- {
- g_warning ("Could not add audio sink to pipeline");
- g_object_unref (priv->audio_output);
- goto error_add_output;
- }
-
- if (gst_element_set_state (priv->audio_output, GST_STATE_PLAYING) == GST_STATE_CHANGE_FAILURE)
- {
- g_warning ("Could not start audio sink");
- goto error;
- }
- priv->audio_output_added = TRUE;
- }
-
- template = gst_element_class_get_pad_template (
- GST_ELEMENT_GET_CLASS (priv->audio_output), "sink%d");
-
- pad = gst_element_request_pad (priv->audio_output,
- template, NULL, NULL);
-
- if (pad == NULL)
- {
- g_warning ("Could not get sink pad from sink");
- return NULL;
- }
-
- return pad;
-
-error:
- gst_element_set_locked_state (priv->audio_output, TRUE);
- gst_element_set_state (priv->audio_output, GST_STATE_NULL);
- gst_bin_remove (GST_BIN (priv->pipeline), priv->audio_output);
- priv->audio_output = NULL;
-
-error_add_output:
-
- return NULL;
-}
-
-static gboolean
-empathy_call_window_update_timer (gpointer user_data)
-{
- EmpathyCallWindow *self = EMPATHY_CALL_WINDOW (user_data);
- EmpathyCallWindowPriv *priv = GET_PRIV (self);
- const gchar *status;
- gchar *str;
- gdouble time_;
-
- time_ = g_timer_elapsed (priv->timer, NULL);
-
- if (priv->call_state == HELD)
- status = _("On hold");
- else if (priv->call_state == DISCONNECTED)
- status = _("Disconnected");
- else if (priv->muted)
- status = _("Mute");
- else
- status = _("Duration");
-
- /* Translators: 'status - minutes:seconds' the caller has been connected */
- str = g_strdup_printf (_("%s — %d:%02dm"),
- status,
- (int) time_ / 60, (int) time_ % 60);
- empathy_call_window_status_message (self, str);
- g_free (str);
-
- return TRUE;
-}
-
-enum
-{
- EMP_RESPONSE_BALANCE
-};
-
-static void
-on_error_infobar_response_cb (GtkInfoBar *info_bar,
- gint response_id,
- gpointer user_data)
-{
- switch (response_id)
- {
- case GTK_RESPONSE_CLOSE:
- gtk_widget_destroy (GTK_WIDGET (info_bar));
- break;
- case EMP_RESPONSE_BALANCE:
- empathy_url_show (GTK_WIDGET (info_bar),
- g_object_get_data (G_OBJECT (info_bar), "uri"));
- break;
- }
-}
-
-static void
-display_error (EmpathyCallWindow *self,
- const gchar *img,
- const gchar *title,
- const gchar *desc,
- const gchar *details,
- const gchar *button_text,
- const gchar *uri,
- gint button_response)
-{
- EmpathyCallWindowPriv *priv = GET_PRIV (self);
- GtkWidget *info_bar;
- GtkWidget *content_area;
- GtkWidget *hbox;
- GtkWidget *vbox;
- GtkWidget *image;
- GtkWidget *label;
- gchar *txt;
-
- /* Create info bar */
- info_bar = gtk_info_bar_new ();
-
- if (button_text != NULL)
- {
- gtk_info_bar_add_button (GTK_INFO_BAR (info_bar),
- button_text, button_response);
- g_object_set_data_full (G_OBJECT (info_bar),
- "uri", g_strdup (uri), g_free);
- }
-
- gtk_info_bar_add_button (GTK_INFO_BAR (info_bar),
- GTK_STOCK_CLOSE, GTK_RESPONSE_CLOSE);
-
- gtk_info_bar_set_message_type (GTK_INFO_BAR (info_bar), GTK_MESSAGE_WARNING);
-
- content_area = gtk_info_bar_get_content_area (GTK_INFO_BAR (info_bar));
-
- /* hbox containing the image and the messages vbox */
- hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 3);
- gtk_container_add (GTK_CONTAINER (content_area), hbox);
-
- /* Add image */
- image = gtk_image_new_from_icon_name (img, GTK_ICON_SIZE_DIALOG);
- gtk_box_pack_start (GTK_BOX (hbox), image, FALSE, FALSE, 0);
-
- /* vbox containing the main message and the details expander */
- vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 3);
- gtk_box_pack_start (GTK_BOX (hbox), vbox, TRUE, TRUE, 0);
-
- /* Add text */
- txt = g_strdup_printf ("<b>%s</b>\n%s", title, desc);
-
- label = gtk_label_new (NULL);
- gtk_label_set_markup (GTK_LABEL (label), txt);
- gtk_label_set_line_wrap (GTK_LABEL (label), TRUE);
- gtk_misc_set_alignment (GTK_MISC (label), 0, 0);
- g_free (txt);
-
- gtk_box_pack_start (GTK_BOX (vbox), label, TRUE, TRUE, 0);
-
- /* Add details */
- if (details != NULL)
- {
- GtkWidget *expander;
-
- expander = gtk_expander_new (_("Technical Details"));
-
- txt = g_strdup_printf ("<i>%s</i>", details);
-
- label = gtk_label_new (NULL);
- gtk_label_set_markup (GTK_LABEL (label), txt);
- gtk_label_set_line_wrap (GTK_LABEL (label), TRUE);
- gtk_misc_set_alignment (GTK_MISC (label), 0, 0);
- g_free (txt);
-
- gtk_container_add (GTK_CONTAINER (expander), label);
- gtk_box_pack_start (GTK_BOX (vbox), expander, TRUE, TRUE, 0);
- }
-
- g_signal_connect (info_bar, "response",
- G_CALLBACK (on_error_infobar_response_cb), NULL);
-
- gtk_box_pack_start (GTK_BOX (priv->errors_vbox), info_bar,
- FALSE, FALSE, CONTENT_HBOX_CHILDREN_PACKING_PADDING);
- gtk_widget_show_all (info_bar);
-}
-
-#if 0
-static gchar *
-media_stream_error_to_txt (EmpathyCallWindow *self,
- TpCallChannel *call,
- gboolean audio,
- TpMediaStreamError error)
-{
- EmpathyCallWindowPriv *priv = GET_PRIV (self);
- const gchar *cm = NULL;
- gchar *url;
- gchar *result;
-
- switch (error)
- {
- case TP_MEDIA_STREAM_ERROR_CODEC_NEGOTIATION_FAILED:
- if (audio)
- return g_strdup_printf (
- _("%s's software does not understand any of the audio formats "
- "supported by your computer"),
- empathy_contact_get_alias (priv->contact));
- else
- return g_strdup_printf (
- _("%s's software does not understand any of the video formats "
- "supported by your computer"),
- empathy_contact_get_alias (priv->contact));
-
- case TP_MEDIA_STREAM_ERROR_CONNECTION_FAILED:
- return g_strdup_printf (
- _("Can't establish a connection to %s. "
- "One of you might be on a network that does not allow "
- "direct connections."),
- empathy_contact_get_alias (priv->contact));
-
- case TP_MEDIA_STREAM_ERROR_NETWORK_ERROR:
- return g_strdup (_("There was a failure on the network"));
-
- case TP_MEDIA_STREAM_ERROR_NO_CODECS:
- if (audio)
- return g_strdup (_("The audio formats necessary for this call "
- "are not installed on your computer"));
- else
- return g_strdup (_("The video formats necessary for this call "
- "are not installed on your computer"));
-
- case TP_MEDIA_STREAM_ERROR_INVALID_CM_BEHAVIOR:
- tp_connection_parse_object_path (
- tp_channel_get_connection (TP_CHANNEL (call)),
- NULL, &cm);
-
- url = g_strdup_printf ("http://bugs.freedesktop.org/enter_bug.cgi?"
- "product=Telepathy&amp;component=%s", cm);
-
- result = g_strdup_printf (
- _("Something unexpected happened in a Telepathy component. "
- "Please <a href=\"%s\">report this bug</a> and attach "
- "logs gathered from the 'Debug' window in the Help menu."), url);
-
- g_free (url);
- g_free (cm);
- return result;
-
- case TP_MEDIA_STREAM_ERROR_MEDIA_ERROR:
- return g_strdup (_("There was a failure in the call engine"));
-
- case TP_MEDIA_STREAM_ERROR_EOS:
- return g_strdup (_("The end of the stream was reached"));
-
- case TP_MEDIA_STREAM_ERROR_UNKNOWN:
- default:
- return NULL;
- }
-}
-
-static void
-empathy_call_window_stream_error (EmpathyCallWindow *self,
- TpCallChannel *call,
- gboolean audio,
- guint code,
- const gchar *msg,
- const gchar *icon,
- const gchar *title)
-{
- gchar *desc;
-
- desc = media_stream_error_to_txt (self, call, audio, code);
- if (desc == NULL)
- {
- /* No description, use the error message. That's not great as it's not
- * localized but it's better than nothing. */
- display_error (self, call, icon, title, msg, NULL);
- }
- else
- {
- display_error (self, call, icon, title, desc, msg);
- g_free (desc);
- }
-}
-
-static void
-empathy_call_window_audio_stream_error (TpCallChannel *call,
- guint code,
- const gchar *msg,
- EmpathyCallWindow *self)
-{
- empathy_call_window_stream_error (self, call, TRUE, code, msg,
- "gnome-stock-mic", _("Can't establish audio stream"));
-}
-
-static void
-empathy_call_window_video_stream_error (TpCallChannel *call,
- guint code,
- const gchar *msg,
- EmpathyCallWindow *self)
-{
- empathy_call_window_stream_error (self, call, FALSE, code, msg,
- "camera-web", _("Can't establish video stream"));
-}
-#endif
-
-static void
-show_balance_error (EmpathyCallWindow *self)
-{
- TpChannel *call;
- TpConnection *conn;
- gchar *balance, *tmp;
- const gchar *uri, *currency;
- gint amount;
- guint scale;
-
- g_object_get (self->priv->handler,
- "call-channel", &call,
- NULL);
-
- conn = tp_channel_get_connection (call);
- g_object_unref (call);
-
- uri = tp_connection_get_balance_uri (conn);
-
- if (!tp_connection_get_balance (conn, &amount, &scale, &currency))
- {
- /* unknown balance */
- balance = g_strdup ("(--)");
- }
- else
- {
- char *money = empathy_format_currency (amount, scale, currency);
-
- balance = g_strdup_printf ("%s %s",
- currency, money);
- g_free (money);
- }
-
- tmp = g_strdup_printf (_("Your current balance is %s."), balance),
-
- display_error (self,
- NULL,
- _("Sorry, you don’t have enough credit for that call."),
- tmp, NULL,
- _("Top Up"),
- uri,
- EMP_RESPONSE_BALANCE);
-
- g_free (tmp);
- g_free (balance);
-}
-
-static void
-empathy_call_window_state_changed_cb (EmpathyCallHandler *handler,
- TpCallState state,
- gchar *reason,
- EmpathyCallWindow *self)
-{
- EmpathyCallWindowPriv *priv = GET_PRIV (self);
- TpCallChannel *call;
- gboolean can_send_video;
-
- if (state == TP_CALL_STATE_ENDED)
- {
- DEBUG ("Call ended: %s", (reason != NULL && reason[0] != '\0') ? reason : "unspecified reason");
- empathy_call_window_disconnected (self, TRUE);
- if (!tp_strdiff (reason, TP_ERROR_STR_INSUFFICIENT_BALANCE))
- show_balance_error (self);
- return;
- }
-
- if (state != TP_CALL_STATE_ACCEPTED)
- return;
-
- if (priv->call_state == CONNECTED)
- return;
-
- g_timer_start (priv->timer);
- priv->call_state = CONNECTED;
-
- empathy_sound_manager_stop (priv->sound_mgr, EMPATHY_SOUND_PHONE_OUTGOING);
-
- can_send_video = priv->video_input != NULL &&
- empathy_contact_can_voip_video (priv->contact) &&
- tpaw_camera_monitor_get_available (priv->camera_monitor);
-
- g_object_get (priv->handler, "call-channel", &call, NULL);
-
- if (tp_call_channel_has_dtmf (call))
- gtk_widget_set_sensitive (priv->dtmf_panel, TRUE);
-
- if (priv->video_input == NULL)
- empathy_call_window_set_send_video (self, CAMERA_STATE_OFF);
-
- gtk_widget_set_sensitive (priv->camera_button, can_send_video);
-
- empathy_call_window_show_hangup_button (self, TRUE);
-
- gtk_widget_set_sensitive (priv->mic_button, TRUE);
-
- clutter_actor_hide (priv->video_output);
- gtk_widget_show (priv->remote_user_avatar_widget);
-
- g_object_unref (call);
-
- g_mutex_lock (&priv->lock);
-
- priv->timer_id = g_timeout_add_seconds (1,
- empathy_call_window_update_timer, self);
-
- g_mutex_unlock (&priv->lock);
-
- empathy_call_window_update_timer (self);
-
- gtk_action_set_sensitive (priv->menu_fullscreen, TRUE);
-}
-
-static gboolean
-empathy_call_window_show_video_output_cb (gpointer user_data)
-{
- EmpathyCallWindow *self = EMPATHY_CALL_WINDOW (user_data);
-
- if (self->priv->video_output != NULL)
- {
- gtk_widget_hide (self->priv->remote_user_avatar_widget);
- clutter_actor_show (self->priv->video_output);
- clutter_actor_raise_top (self->priv->overlay_bin);
- }
-
- return FALSE;
-}
-
-static gboolean
-empathy_call_window_check_video_cb (gpointer data)
-{
- EmpathyCallWindow *self = data;
-
- if (self->priv->got_video)
- {
- self->priv->got_video = FALSE;
- return TRUE;
- }
-
- /* No video in the last N seconds, display the remote avatar */
- empathy_call_window_show_video_output (self, FALSE);
-
- return TRUE;
-}
-
-/* Called from the streaming thread */
-#ifdef HAVE_GST1
-static GstPadProbeReturn
-empathy_call_window_video_probe_cb (GstPad *pad,
- GstPadProbeInfo *info,
- gpointer user_data)
-{
- EmpathyCallWindow *self = user_data;
-
- if (G_UNLIKELY (!self->priv->got_video))
- {
- /* show the remote video */
- g_idle_add_full (G_PRIORITY_DEFAULT_IDLE,
- empathy_call_window_show_video_output_cb,
- g_object_ref (self), g_object_unref);
-
- self->priv->got_video = TRUE;
- }
-
- return GST_PAD_PROBE_OK;
-}
-#else
-static gboolean
-empathy_call_window_video_probe_cb (GstPad *pad,
- GstMiniObject *mini_obj,
- EmpathyCallWindow *self)
-{
- /* Ignore events */
- if (GST_IS_EVENT (mini_obj))
- return TRUE;
-
- if (G_UNLIKELY (!self->priv->got_video))
- {
- /* show the remote video */
- g_idle_add_full (G_PRIORITY_DEFAULT_IDLE,
- empathy_call_window_show_video_output_cb,
- g_object_ref (self), g_object_unref);
-
- self->priv->got_video = TRUE;
- }
-
- return TRUE;
-}
-#endif
-
-/* Called from the streaming thread */
-static gboolean
-empathy_call_window_src_added_cb (EmpathyCallHandler *handler,
- TfContent *content, GstPad *src, gpointer user_data)
-{
- EmpathyCallWindow *self = EMPATHY_CALL_WINDOW (user_data);
- EmpathyCallWindowPriv *priv = GET_PRIV (self);
- gboolean retval = FALSE;
- guint media_type;
-
- GstPad *pad;
-
- g_mutex_lock (&priv->lock);
-
- g_object_get (content, "media-type", &media_type, NULL);
-
- switch (media_type)
- {
- case TP_MEDIA_STREAM_TYPE_AUDIO:
- pad = empathy_call_window_get_audio_sink_pad (self, content);
- break;
- case TP_MEDIA_STREAM_TYPE_VIDEO:
- g_idle_add (empathy_call_window_show_video_output_cb, self);
- pad = empathy_call_window_get_video_sink_pad (self);
-
-#ifdef HAVE_GST1
- gst_pad_add_probe (src,
- GST_PAD_PROBE_TYPE_BUFFER | GST_PAD_PROBE_TYPE_BUFFER_LIST,
- empathy_call_window_video_probe_cb, self, NULL);
-#else
- gst_pad_add_data_probe (src,
- G_CALLBACK (empathy_call_window_video_probe_cb), self);
-#endif
- if (priv->got_video_src > 0)
- g_source_remove (priv->got_video_src);
- priv->got_video_src = g_timeout_add_seconds (1,
- empathy_call_window_check_video_cb, self);
- break;
- default:
- g_assert_not_reached ();
- }
-
- if (pad == NULL)
- goto out;
-
- if (GST_PAD_LINK_FAILED (gst_pad_link (src, pad)))
- g_warning ("Could not link %s sink pad",
- media_type == TP_MEDIA_STREAM_TYPE_AUDIO ? "audio" : "video");
- else
- retval = TRUE;
-
- gst_object_unref (pad);
-
- out:
-
- /* If no sink could be linked, try to add fakesink to prevent the whole call
- * aborting */
-
- if (!retval)
- {
- GstElement *fakesink = gst_element_factory_make ("fakesink", NULL);
-
- if (gst_bin_add (GST_BIN (priv->pipeline), fakesink))
- {
- GstPad *sinkpad = gst_element_get_static_pad (fakesink, "sink");
- if (gst_element_set_state (fakesink, GST_STATE_PLAYING) == GST_STATE_CHANGE_FAILURE ||
- GST_PAD_LINK_FAILED (gst_pad_link (src, sinkpad)))
- {
- gst_element_set_locked_state (fakesink, TRUE);
- gst_element_set_state (fakesink, GST_STATE_NULL);
- gst_bin_remove (GST_BIN (priv->pipeline), fakesink);
- }
- else
- {
- DEBUG ("Could not link real sink, linked fakesink instead");
- }
- gst_object_unref (sinkpad);
- }
- else
- {
- gst_object_unref (fakesink);
- }
- }
-
-
- g_mutex_unlock (&priv->lock);
-
- return TRUE;
-}
-
-static void
-empathy_call_window_prepare_audio_output (EmpathyCallWindow *self,
- TfContent *content)
-{
- EmpathyCallWindowPriv *priv = self->priv;
-
- g_assert (priv->audio_output_added == FALSE);
- g_assert (priv->audio_output == FALSE);
-
- priv->audio_output = empathy_audio_sink_new ();
- g_object_ref_sink (priv->audio_output);
-
- /* volume button to output volume linking */
- g_object_bind_property (priv->audio_output, "volume",
- priv->volume_button, "value",
- G_BINDING_BIDIRECTIONAL | G_BINDING_SYNC_CREATE);
-
- g_object_bind_property_full (content, "requested-output-volume",
- priv->audio_output, "volume",
- G_BINDING_DEFAULT,
- audio_control_volume_to_element,
- element_volume_to_audio_control,
- NULL, NULL);
-
- /* Link volumes together, sync the current audio input volume property
- * back to farstream first */
- g_object_bind_property_full (priv->audio_output, "volume",
- content, "reported-output-volume",
- G_BINDING_SYNC_CREATE,
- element_volume_to_audio_control,
- audio_control_volume_to_element,
- NULL, NULL);
-
- /* For raw audio conferences assume that the producer of the raw data
- * has already processed it, so turn off any echo cancellation and any
- * other audio improvements that come with it */
- empathy_audio_sink_set_echo_cancel (
- EMPATHY_GST_AUDIO_SINK (priv->audio_output),
- !empathy_call_window_content_is_raw (content));
-}
-
-
-static gboolean
-empathy_call_window_content_added_cb (EmpathyCallHandler *handler,
- TfContent *content, gpointer user_data)
-{
- EmpathyCallWindow *self = EMPATHY_CALL_WINDOW (user_data);
- EmpathyCallWindowPriv *priv = GET_PRIV (self);
- GstPad *sink, *pad;
- FsMediaType media_type;
- gboolean retval = FALSE;
-
- g_object_get (content, "media-type", &media_type, "sink-pad", &sink, NULL);
- g_assert (sink != NULL);
-
- switch (media_type)
- {
- case FS_MEDIA_TYPE_AUDIO:
-
- /* For raw audio conferences assume that the receiver of the raw data
- * wants it unprocessed, so turn off any echo cancellation and any
- * other audio improvements that come with it */
- empathy_audio_src_set_echo_cancel (
- EMPATHY_GST_AUDIO_SRC (priv->audio_input),
- !empathy_call_window_content_is_raw (content));
-
- /* Link volumes together, sync the current audio input volume property
- * back to farstream first */
- g_object_bind_property_full (content, "requested-input-volume",
- priv->audio_input, "volume",
- G_BINDING_DEFAULT,
- audio_control_volume_to_element,
- element_volume_to_audio_control,
- NULL, NULL);
-
- g_object_bind_property_full (priv->audio_input, "volume",
- content, "reported-input-volume",
- G_BINDING_SYNC_CREATE,
- element_volume_to_audio_control,
- audio_control_volume_to_element,
- NULL, NULL);
-
- if (!gst_bin_add (GST_BIN (priv->pipeline), priv->audio_input))
- {
- g_warning ("Could not add audio source to pipeline");
- break;
- }
-
- pad = gst_element_get_static_pad (priv->audio_input, "src");
- if (!pad)
- {
- gst_bin_remove (GST_BIN (priv->pipeline), priv->audio_input);
- g_warning ("Could not get source pad from audio source");
- break;
- }
-
- if (GST_PAD_LINK_FAILED (gst_pad_link (pad, sink)))
- {
- gst_bin_remove (GST_BIN (priv->pipeline), priv->audio_input);
- gst_object_unref (pad);
- g_warning ("Could not link audio source to farsight");
- break;
- }
- gst_object_unref (pad);
-
- if (gst_element_set_state (priv->audio_input, GST_STATE_PLAYING) == GST_STATE_CHANGE_FAILURE)
- {
- g_warning ("Could not start audio source");
- gst_element_set_state (priv->audio_input, GST_STATE_NULL);
- gst_bin_remove (GST_BIN (priv->pipeline), priv->audio_input);
- break;
- }
-
- /* Prepare our audio output, not added yet though */
- empathy_call_window_prepare_audio_output (self, content);
-
- retval = TRUE;
- break;
- case FS_MEDIA_TYPE_VIDEO:
- if (priv->video_tee != NULL)
- {
-#ifdef HAVE_GST1
- pad = gst_element_get_request_pad (priv->video_tee, "src_%u");
-#else
- pad = gst_element_get_request_pad (priv->video_tee, "src%d");
-#endif
- if (GST_PAD_LINK_FAILED (gst_pad_link (pad, sink)))
- {
- g_warning ("Could not link video source input pipeline");
- break;
- }
- gst_object_unref (pad);
- }
-
- retval = TRUE;
- break;
- default:
- g_assert_not_reached ();
- }
-
- gst_object_unref (sink);
- return retval;
-}
-
-static void
-empathy_call_window_remove_video_input (EmpathyCallWindow *self)
-{
- EmpathyCallWindowPriv *priv = GET_PRIV (self);
- GstElement *preview;
-
- disable_camera (self);
-
- DEBUG ("remove video input");
- preview = priv->video_preview_sink;
-
- gst_element_set_state (priv->video_input, GST_STATE_NULL);
- gst_element_set_state (priv->video_tee, GST_STATE_NULL);
- gst_element_set_state (preview, GST_STATE_NULL);
-
- gst_bin_remove_many (GST_BIN (priv->pipeline), priv->video_input,
- preview, NULL);
-
- g_object_unref (priv->video_input);
- priv->video_input = NULL;
- g_object_unref (priv->video_tee);
- priv->video_tee = NULL;
- clutter_actor_destroy (priv->video_preview);
- priv->video_preview = NULL;
-
- gtk_widget_set_sensitive (priv->camera_button, FALSE);
- empathy_camera_menu_set_sensitive (priv->camera_menu, FALSE);
-}
-
-static void
-start_call (EmpathyCallWindow *self)
-{
- EmpathyCallWindowPriv *priv = GET_PRIV (self);
-
- g_signal_emit (self, signals[SIG_INHIBIT], 0, TRUE);
-
- priv->call_started = TRUE;
- empathy_call_handler_start_call (priv->handler,
- gtk_get_current_event_time ());
-
- if (empathy_call_handler_has_initial_video (priv->handler))
- {
- TpCallChannel *call;
- TpSendingState s;
-
- g_object_get (priv->handler, "call-channel", &call, NULL);
- /* If the call channel isn't set yet we're requesting it, if we're
- * requesting it with initial video it should be PENDING_SEND when we get
- * it */
- if (call == NULL)
- s = TP_SENDING_STATE_PENDING_SEND;
- else
- s = empathy_call_channel_get_video_state (call);
-
- if (s == TP_SENDING_STATE_PENDING_SEND ||
- s == TP_SENDING_STATE_SENDING)
- {
- /* Enable 'send video' buttons and display the preview */
- gtk_toggle_button_set_active (
- GTK_TOGGLE_BUTTON (priv->camera_button), TRUE);
- }
- else
- {
- gtk_toggle_button_set_active (
- GTK_TOGGLE_BUTTON (priv->camera_button), FALSE);
-
- if (priv->video_preview == NULL)
- {
- create_video_preview (self);
- add_video_preview_to_pipeline (self);
- }
- }
-
- if (call != NULL)
- g_object_unref (call);
- }
-}
-
-static gboolean
-empathy_call_window_bus_message (GstBus *bus, GstMessage *message,
- gpointer user_data)
-{
- EmpathyCallWindow *self = EMPATHY_CALL_WINDOW (user_data);
- EmpathyCallWindowPriv *priv = GET_PRIV (self);
- GstState newstate, pending;
-
- empathy_call_handler_bus_message (priv->handler, bus, message);
-
- switch (GST_MESSAGE_TYPE (message))
- {
- case GST_MESSAGE_STATE_CHANGED:
- if (GST_MESSAGE_SRC (message) == GST_OBJECT (priv->video_input))
- {
- gst_message_parse_state_changed (message, NULL, &newstate, NULL);
- }
- if (GST_MESSAGE_SRC (message) == GST_OBJECT (priv->pipeline) &&
- !priv->call_started)
- {
- gst_message_parse_state_changed (message, NULL, &newstate, NULL);
- if (newstate == GST_STATE_PAUSED)
- {
- gst_element_set_state (priv->pipeline, GST_STATE_PLAYING);
- priv->pipeline_playing = TRUE;
-
- if (priv->start_call_when_playing)
- start_call (self);
- }
- }
- if (priv->video_preview_sink != NULL &&
- GST_MESSAGE_SRC (message) == GST_OBJECT (priv->video_preview_sink))
- {
- gst_message_parse_state_changed (message, NULL, &newstate,
- &pending);
-
- if (newstate == GST_STATE_PLAYING &&
- pending == GST_STATE_VOID_PENDING)
- empathy_call_window_stop_camera_spinning (self);
- }
- break;
- case GST_MESSAGE_ERROR:
- {
- GError *error = NULL;
- GstElement *gst_error;
- gchar *debug;
- gchar *name;
-
- gst_message_parse_error (message, &error, &debug);
- gst_error = GST_ELEMENT (GST_MESSAGE_SRC (message));
-
- g_message ("Element error: %s -- %s\n", error->message, debug);
-
- name = gst_element_get_name (gst_error);
- if (g_str_has_prefix (name, VIDEO_INPUT_ERROR_PREFIX))
- {
- /* Remove the video input and continue */
- if (priv->video_input != NULL)
- empathy_call_window_remove_video_input (self);
- gst_element_set_state (priv->pipeline, GST_STATE_PLAYING);
- }
- else
- {
- empathy_call_window_disconnected (self, TRUE);
- }
- g_free (name);
- g_error_free (error);
- g_free (debug);
- }
- case GST_MESSAGE_UNKNOWN:
- case GST_MESSAGE_EOS:
- case GST_MESSAGE_WARNING:
- case GST_MESSAGE_INFO:
- case GST_MESSAGE_TAG:
- case GST_MESSAGE_BUFFERING:
- case GST_MESSAGE_STATE_DIRTY:
- case GST_MESSAGE_STEP_DONE:
- case GST_MESSAGE_CLOCK_PROVIDE:
- case GST_MESSAGE_CLOCK_LOST:
- case GST_MESSAGE_NEW_CLOCK:
- case GST_MESSAGE_STRUCTURE_CHANGE:
- case GST_MESSAGE_STREAM_STATUS:
- case GST_MESSAGE_APPLICATION:
- case GST_MESSAGE_ELEMENT:
- case GST_MESSAGE_SEGMENT_START:
- case GST_MESSAGE_SEGMENT_DONE:
- case GST_MESSAGE_DURATION:
- case GST_MESSAGE_ANY:
- default:
- break;
- }
-
- return TRUE;
-}
-
-static void
-empathy_call_window_members_changed_cb (TpCallChannel *call,
- GHashTable *updates,
- GPtrArray *removed,
- TpCallStateReason *reason,
- EmpathyCallWindow *self)
-{
- EmpathyCallWindowPriv *priv = GET_PRIV (self);
- GHashTableIter iter;
- gpointer key, value;
- gboolean held = FALSE;
-
- g_hash_table_iter_init (&iter, updates);
- while (g_hash_table_iter_next (&iter, &key, &value))
- {
- if (GPOINTER_TO_INT (value) & TP_CALL_MEMBER_FLAG_HELD)
- {
- /* This assumes this is a 1-1 call, otherwise one participant
- * putting the call on hold wouldn't mean the call is on hold
- * for everyone. */
- held = TRUE;
- break;
- }
- }
-
- if (held)
- priv->call_state = HELD;
- else if (priv->call_state == HELD)
- priv->call_state = CONNECTED;
-}
-
-static void
-call_handler_notify_call_cb (EmpathyCallHandler *handler,
- GParamSpec *spec,
- EmpathyCallWindow *self)
-{
- EmpathyCallWindowPriv *priv = GET_PRIV (self);
- TpCallChannel *call;
-
- g_object_get (priv->handler, "call-channel", &call, NULL);
- if (call == NULL)
- return;
-
-/* FIXME
- tp_g_signal_connect_object (call, "audio-stream-error",
- G_CALLBACK (empathy_call_window_audio_stream_error), self, 0);
- tp_g_signal_connect_object (call, "video-stream-error",
- G_CALLBACK (empathy_call_window_video_stream_error), self, 0);
-*/
-
- tp_g_signal_connect_object (call, "members-changed",
- G_CALLBACK (empathy_call_window_members_changed_cb), self, 0);
-
- g_object_unref (call);
-}
-
-static void
-empathy_call_window_connect_handler (EmpathyCallWindow *self)
-{
- EmpathyCallWindowPriv *priv = GET_PRIV (self);
- TpCallChannel *call;
-
- g_signal_connect (priv->handler, "state-changed",
- G_CALLBACK (empathy_call_window_state_changed_cb), self);
- g_signal_connect (priv->handler, "conference-added",
- G_CALLBACK (empathy_call_window_conference_added_cb), self);
- g_signal_connect (priv->handler, "conference-removed",
- G_CALLBACK (empathy_call_window_conference_removed_cb), self);
- g_signal_connect (priv->handler, "closed",
- G_CALLBACK (empathy_call_window_channel_closed_cb), self);
- g_signal_connect (priv->handler, "src-pad-added",
- G_CALLBACK (empathy_call_window_src_added_cb), self);
- g_signal_connect (priv->handler, "content-added",
- G_CALLBACK (empathy_call_window_content_added_cb), self);
- g_signal_connect (priv->handler, "content-removed",
- G_CALLBACK (empathy_call_window_content_removed_cb), self);
-
- /* We connect to ::call-channel unconditionally since we'll
- * get new channels if we hangup and redial or if we reuse the
- * call window. */
- g_signal_connect (priv->handler, "notify::call-channel",
- G_CALLBACK (call_handler_notify_call_cb), self);
-
- g_signal_connect (priv->handler, "framerate-changed",
- G_CALLBACK (empathy_call_window_framerate_changed_cb), self);
- g_signal_connect (priv->handler, "resolution-changed",
- G_CALLBACK (empathy_call_window_resolution_changed_cb), self);
-
- g_object_get (priv->handler, "call-channel", &call, NULL);
- if (call != NULL)
- {
- /* We won't get notify::call-channel for this channel, so
- * directly call the callback. */
- call_handler_notify_call_cb (priv->handler, NULL, self);
- g_object_unref (call);
- }
-}
-
-static void
-empathy_call_window_realized_cb (GtkWidget *widget,
- EmpathyCallWindow *self)
-{
- gint width;
-
- /* Make the hangup button twice as wide */
- width = gtk_widget_get_allocated_width (self->priv->hangup_button);
- gtk_widget_set_size_request (self->priv->hangup_button, width * 2, -1);
-
- empathy_call_window_connect_handler (self);
-
- gst_element_set_state (self->priv->pipeline, GST_STATE_PAUSED);
-}
-
-static gboolean
-empathy_call_window_delete_cb (GtkWidget *widget, GdkEvent*event,
- EmpathyCallWindow *window)
-{
- EmpathyCallWindowPriv *priv = GET_PRIV (window);
-
- if (priv->pipeline != NULL)
- {
- if (priv->bus_message_source_id != 0)
- {
- g_source_remove (priv->bus_message_source_id);
- priv->bus_message_source_id = 0;
- }
-
- gst_element_set_state (priv->pipeline, GST_STATE_NULL);
- }
-
- if (priv->call_state == CONNECTING)
- empathy_sound_manager_stop (priv->sound_mgr, EMPATHY_SOUND_PHONE_OUTGOING);
-
- return FALSE;
-}
-
-static void
-show_controls (EmpathyCallWindow *window, gboolean set_fullscreen)
-{
- GtkWidget *menu;
- EmpathyCallWindowPriv *priv = GET_PRIV (window);
-
- menu = gtk_ui_manager_get_widget (priv->ui_manager,
- "/menubar1");
-
- if (set_fullscreen)
- {
- gtk_widget_hide (priv->dtmf_panel);
- gtk_widget_hide (menu);
- gtk_widget_hide (priv->toolbar);
- }
- else
- {
- if (priv->dialpad_was_visible_before_fs)
- gtk_widget_show (priv->dtmf_panel);
-
- gtk_widget_show (menu);
- gtk_widget_show (priv->toolbar);
-
- gtk_window_resize (GTK_WINDOW (window), priv->original_width_before_fs,
- priv->original_height_before_fs);
- }
-}
-
-static void
-show_borders (EmpathyCallWindow *window, gboolean set_fullscreen)
-{
- EmpathyCallWindowPriv *priv = GET_PRIV (window);
-
- gtk_box_set_spacing (GTK_BOX (priv->content_hbox),
- set_fullscreen ? 0 : CONTENT_HBOX_SPACING);
-
- if (priv->video_output != NULL)
- {
-#if 0
- gtk_box_set_child_packing (GTK_BOX (priv->content_hbox),
- priv->video_output, TRUE, TRUE,
- set_fullscreen ? 0 : CONTENT_HBOX_CHILDREN_PACKING_PADDING,
- GTK_PACK_START);
-#endif
- }
-}
-
-static gboolean
-empathy_call_window_state_event_cb (GtkWidget *widget,
- GdkEventWindowState *event, EmpathyCallWindow *window)
-{
- if (event->changed_mask & GDK_WINDOW_STATE_FULLSCREEN)
- {
- EmpathyCallWindowPriv *priv = GET_PRIV (window);
- gboolean set_fullscreen = event->new_window_state &
- GDK_WINDOW_STATE_FULLSCREEN;
-
- if (set_fullscreen)
- {
- gboolean dialpad_was_visible;
- GtkAllocation allocation;
- gint original_width, original_height;
-
- gtk_widget_get_allocation (GTK_WIDGET (window), &allocation);
- original_width = allocation.width;
- original_height = allocation.height;
-
- g_object_get (priv->dtmf_panel,
- "visible", &dialpad_was_visible,
- NULL);
-
- priv->dialpad_was_visible_before_fs = dialpad_was_visible;
- priv->original_width_before_fs = original_width;
- priv->original_height_before_fs = original_height;
-
- if (priv->video_output_motion_handler_id == 0 &&
- priv->video_output != NULL)
- {
- priv->video_output_motion_handler_id = g_signal_connect (
- G_OBJECT (priv->video_container), "motion-notify-event",
- G_CALLBACK (empathy_call_window_video_output_motion_notify),
- window);
- }
- }
- else
- {
- disconnect_video_output_motion_handler (window);
- }
-
- empathy_call_window_fullscreen_set_fullscreen (priv->fullscreen,
- set_fullscreen);
- show_controls (window, set_fullscreen);
- show_borders (window, set_fullscreen);
- gtk_action_set_stock_id (priv->menu_fullscreen,
- (set_fullscreen ? "view-restore" : "view-fullscreen"));
- priv->is_fullscreen = set_fullscreen;
- }
-
- return FALSE;
-}
-
-static void
-empathy_call_window_show_dialpad (EmpathyCallWindow *window,
- gboolean active)
-{
- EmpathyCallWindowPriv *priv = GET_PRIV (window);
- int w, h, dialpad_width;
- GtkAllocation allocation;
-
- gtk_widget_get_allocation (GTK_WIDGET (window), &allocation);
- w = allocation.width;
- h = allocation.height;
-
- gtk_widget_get_preferred_width (priv->dtmf_panel, &dialpad_width, NULL);
-
- if (active)
- {
- gtk_widget_show (priv->dtmf_panel);
- w += dialpad_width;
- }
- else
- {
- w -= dialpad_width;
- gtk_widget_hide (priv->dtmf_panel);
- }
-
- if (w > 0 && h > 0)
- gtk_window_resize (GTK_WINDOW (window), w, h);
-}
-
-static void
-empathy_call_window_set_send_video (EmpathyCallWindow *window,
- CameraState state)
-{
- EmpathyCallWindowPriv *priv = GET_PRIV (window);
- TpCallChannel *call;
-
- priv->sending_video = (state == CAMERA_STATE_ON);
-
- if (state == CAMERA_STATE_ON)
- {
- /* When we start sending video, we want to show the video preview by
- default. */
- display_video_preview (window, TRUE);
- }
- else
- {
- display_video_preview (window, FALSE);
- }
-
- if (priv->call_state != CONNECTED)
- return;
-
- g_object_get (priv->handler, "call-channel", &call, NULL);
- DEBUG ("%s sending video", priv->sending_video ? "start": "stop");
- empathy_call_channel_send_video (call, priv->sending_video);
- g_object_unref (call);
-}
-
-static void
-empathy_call_window_hangup_cb (gpointer object,
- EmpathyCallWindow *self)
-{
- /* stopping the call will put it the ENDED state and
- * from state_changed_cb we'll reconfigure the window
- */
- empathy_call_handler_stop_call (self->priv->handler);
-}
-
-static void
-empathy_call_window_restart_call (EmpathyCallWindow *window)
-{
- EmpathyCallWindowPriv *priv = GET_PRIV (window);
-
- /* Remove error info bars */
- gtk_container_forall (GTK_CONTAINER (priv->errors_vbox),
- (GtkCallback) gtk_widget_destroy, NULL);
-
- create_video_output_widget (window);
- priv->outgoing = TRUE;
- empathy_call_window_set_state_connecting (window);
-
- if (priv->pipeline_playing)
- start_call (window);
- else
- /* call will be started when the pipeline is ready */
- priv->start_call_when_playing = TRUE;
-
- empathy_call_window_setup_avatars (window, priv->handler);
-
- empathy_call_window_show_hangup_button (window, TRUE);
-}
-
-static void
-empathy_call_window_dialpad_cb (GtkToggleToolButton *button,
- EmpathyCallWindow *window)
-{
- gboolean active;
-
- active = gtk_toggle_tool_button_get_active (button);
-
- empathy_call_window_show_dialpad (window, active);
-}
-
-static void
-empathy_call_window_fullscreen_cb (gpointer object,
- EmpathyCallWindow *window)
-{
- empathy_call_window_fullscreen_toggle (window);
-}
-
-static void
-empathy_call_window_fullscreen_toggle (EmpathyCallWindow *window)
-{
- EmpathyCallWindowPriv *priv = GET_PRIV (window);
-
- if (priv->is_fullscreen)
- gtk_window_unfullscreen (GTK_WINDOW (window));
- else
- gtk_window_fullscreen (GTK_WINDOW (window));
-}
-
-static gboolean
-empathy_call_window_video_button_press_cb (GtkWidget *video_preview,
- GdkEventButton *event, EmpathyCallWindow *window)
-{
- if (event->button == 3 && event->type == GDK_BUTTON_PRESS)
- {
- empathy_call_window_video_menu_popup (window, event->button);
- return TRUE;
- }
-
- return FALSE;
-}
-
-static gboolean
-empathy_call_window_key_press_cb (GtkWidget *video_output,
- GdkEventKey *event, EmpathyCallWindow *window)
-{
- EmpathyCallWindowPriv *priv = GET_PRIV (window);
- gchar key;
-
- if (priv->is_fullscreen && event->keyval == GDK_KEY_Escape)
- {
- /* Since we are in fullscreen mode, toggling will bring us back to
- normal mode. */
- empathy_call_window_fullscreen_toggle (window);
- return TRUE;
- }
-
- key = gdk_keyval_to_unicode (event->keyval);
- switch (key)
- {
- case '0':
- case '1':
- case '2':
- case '3':
- case '4':
- case '5':
- case '6':
- case '7':
- case '8':
- case '9':
- case '*':
- case '#':
- break;
- default:
- return TRUE;
- break;
- }
-
- gtk_toggle_tool_button_set_active (
- GTK_TOGGLE_TOOL_BUTTON (priv->dialpad_button), TRUE);
-
- empathy_dialpad_widget_press_key (
- EMPATHY_DIALPAD_WIDGET (priv->dtmf_panel), key);
-
- return TRUE;
-}
-
-static gboolean
-empathy_call_window_video_output_motion_notify (GtkWidget *widget,
- GdkEventMotion *event, EmpathyCallWindow *window)
-{
- EmpathyCallWindowPriv *priv = GET_PRIV (window);
-
- if (priv->is_fullscreen)
- {
- empathy_call_window_fullscreen_show_popup (priv->fullscreen);
-
- /* Show the bottom toolbar */
- empathy_call_window_motion_notify_cb (NULL, NULL, window);
- return TRUE;
- }
- return FALSE;
-}
-
-static void
-empathy_call_window_video_menu_popup (EmpathyCallWindow *window,
- guint button)
-{
- GtkWidget *menu;
- EmpathyCallWindowPriv *priv = GET_PRIV (window);
-
- menu = gtk_ui_manager_get_widget (priv->ui_manager,
- "/video-popup");
- gtk_menu_popup (GTK_MENU (menu), NULL, NULL, NULL, NULL,
- button, gtk_get_current_event_time ());
- gtk_menu_shell_select_first (GTK_MENU_SHELL (menu), FALSE);
-}
-
-static void
-empathy_call_window_status_message (EmpathyCallWindow *self,
- gchar *message)
-{
- gtk_label_set_label (GTK_LABEL (self->priv->status_label), message);
-}
-
-GtkUIManager *
-empathy_call_window_get_ui_manager (EmpathyCallWindow *window)
-{
- EmpathyCallWindowPriv *priv = GET_PRIV (window);
-
- return priv->ui_manager;
-}
-
-EmpathyGstAudioSrc *
-empathy_call_window_get_audio_src (EmpathyCallWindow *window)
-{
- EmpathyCallWindowPriv *priv = GET_PRIV (window);
-
- return (EmpathyGstAudioSrc *) priv->audio_input;
-}
-
-EmpathyGstVideoSrc *
-empathy_call_window_get_video_src (EmpathyCallWindow *self)
-{
- return EMPATHY_GST_VIDEO_SRC (self->priv->video_input);
-}
-
-void
-empathy_call_window_change_webcam (EmpathyCallWindow *self,
- const gchar *device)
-{
- EmpathyGstVideoSrc *video;
- gboolean running;
-
- /* Restart the camera only if it's already running */
- running = (self->priv->video_preview != NULL);
- video = empathy_call_window_get_video_src (self);
-
- if (running)
- empathy_call_window_play_camera (self, FALSE);
-
- empathy_video_src_change_device (video, device);
-
- if (running)
- empathy_call_window_play_camera (self, TRUE);
-}
diff --git a/src/empathy-call-window.h b/src/empathy-call-window.h
deleted file mode 100644
index ad7b1f26..00000000
--- a/src/empathy-call-window.h
+++ /dev/null
@@ -1,87 +0,0 @@
-/*
- * empathy-call-window.h - Header for EmpathyCallWindow
- * Copyright (C) 2008-2011 Collabora Ltd.
- * @author Sjoerd Simons <sjoerd.simons@collabora.co.uk>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-#ifndef __EMPATHY_CALL_WINDOW_H__
-#define __EMPATHY_CALL_WINDOW_H__
-
-#include <gtk/gtk.h>
-
-#include "empathy-audio-src.h"
-#include "empathy-call-handler.h"
-#include "empathy-video-src.h"
-
-G_BEGIN_DECLS
-
-typedef struct _EmpathyCallWindow EmpathyCallWindow;
-typedef struct _EmpathyCallWindowPriv EmpathyCallWindowPriv;
-typedef struct _EmpathyCallWindowClass EmpathyCallWindowClass;
-
-struct _EmpathyCallWindowClass {
- GtkWindowClass parent_class;
-};
-
-struct _EmpathyCallWindow {
- GtkWindow parent;
- EmpathyCallWindowPriv *priv;
-};
-
-GType empathy_call_window_get_type (void);
-
-/* TYPE MACROS */
-#define EMPATHY_TYPE_CALL_WINDOW \
- (empathy_call_window_get_type ())
-#define EMPATHY_CALL_WINDOW(obj) \
- (G_TYPE_CHECK_INSTANCE_CAST((obj), EMPATHY_TYPE_CALL_WINDOW, \
- EmpathyCallWindow))
-#define EMPATHY_CALL_WINDOW_CLASS(klass) \
- (G_TYPE_CHECK_CLASS_CAST((klass), EMPATHY_TYPE_CALL_WINDOW, \
- EmpathyCallWindowClass))
-#define EMPATHY_IS_CALL_WINDOW(obj) \
- (G_TYPE_CHECK_INSTANCE_TYPE((obj), EMPATHY_TYPE_CALL_WINDOW))
-#define EMPATHY_IS_CALL_WINDOW_CLASS(klass) \
- (G_TYPE_CHECK_CLASS_TYPE((klass), EMPATHY_TYPE_CALL_WINDOW))
-#define EMPATHY_CALL_WINDOW_GET_CLASS(obj) \
- (G_TYPE_INSTANCE_GET_CLASS ((obj), EMPATHY_TYPE_CALL_WINDOW, \
- EmpathyCallWindowClass))
-
-EmpathyCallWindow *empathy_call_window_new (EmpathyCallHandler *handler);
-void empathy_call_window_new_handler (EmpathyCallWindow *window,
- EmpathyCallHandler *handler,
- gboolean present,
- guint32 x11_time);
-void empathy_call_window_start_ringing (EmpathyCallWindow *self,
- TpCallChannel *channel,
- TpChannelDispatchOperation *dispatch_operation,
- TpAddDispatchOperationContext *context);
-
-GtkUIManager *empathy_call_window_get_ui_manager (EmpathyCallWindow *window);
-
-EmpathyGstAudioSrc *empathy_call_window_get_audio_src (EmpathyCallWindow *window);
-EmpathyGstVideoSrc *empathy_call_window_get_video_src (EmpathyCallWindow *window);
-
-void empathy_call_window_play_camera (EmpathyCallWindow *self,
- gboolean play);
-
-void empathy_call_window_change_webcam (EmpathyCallWindow *self,
- const gchar *device);
-
-G_END_DECLS
-
-#endif /* #ifndef __EMPATHY_CALL_WINDOW_H__*/
diff --git a/src/empathy-call-window.ui b/src/empathy-call-window.ui
deleted file mode 100644
index 133f4ca4..00000000
--- a/src/empathy-call-window.ui
+++ /dev/null
@@ -1,960 +0,0 @@
-<?xml version="1.0"?>
-<!--Generated with glade3 3.4.5 on Mon Feb 16 12:31:56 2009 -->
-<interface>
- <object class="GtkUIManager" id="ui_manager">
- <child>
- <object class="GtkActionGroup" id="actiongroup1">
- <child>
- <object class="GtkAction" id="call">
- <property name="name">call</property>
- <property name="label" translatable="yes">_Call</property>
- </object>
- </child>
- <child>
- <object class="GtkAction" id="menufullscreen">
- <property name="stock_id">gtk-fullscreen</property>
- <property name="name">menufullscreen</property>
- </object>
- <accelerator key="F11"/>
- </child>
- <child>
- <object class="GtkAction" id="edit">
- <property name="name">edit</property>
- <property name="label" translatable="yes">_Edit</property>
- </object>
- </child>
- <child>
- <object class="GtkAction" id="menumicrophone">
- <property name="label" translatable="yes">_Microphone</property>
- <property name="name">menumicrophone</property>
- <property name="icon_name">gnome-stock-mic</property>
- </object>
- </child>
- <child>
- <object class="GtkAction" id="menucamera">
- <property name="label" translatable="yes">_Camera</property>
- <property name="name">menucamera</property>
- <property name="icon_name">camera-web</property>
- </object>
- </child>
- <child>
- <object class="GtkAction" id="menusettings">
- <property name="stock_id">preferences-desktop</property>
- <property name="name">menusettings</property>
- <property name="label" translatable="yes">_Settings</property>
- </object>
- </child>
- <child>
- <object class="GtkAction" id="view">
- <property name="name">view</property>
- <property name="label" translatable="yes">_View</property>
- </object>
- </child>
- <child>
- <object class="GtkAction" id="help">
- <property name="name">help</property>
- <property name="label" translatable="yes">_Help</property>
- </object>
- </child>
- <child>
- <object class="GtkAction" id="menucontents">
- <property name="stock_id">gtk-help</property>
- <property name="name">menucontents</property>
- <property name="label" translatable="yes">_Contents</property>
- </object>
- <accelerator key="F1" modifiers=""/>
- </child>
- <child>
- <object class="GtkAction" id="menudebug">
- <property name="name">menudebug</property>
- <property name="label" translatable="yes">_Debug</property>
- </object>
- </child>
- <child>
- <object class="GtkAction" id="menudebuggst">
- <property name="name">menudebuggst</property>
- <property name="label" translatable="yes">_GStreamer</property>
- </object>
- </child>
- <child>
- <object class="GtkAction" id="menudebugtp">
- <property name="name">menudebugtp</property>
- <property name="label" translatable="yes">_Telepathy</property>
- </object>
- </child>
- <child>
- <object class="GtkAction" id="menuabout">
- <property name="stock_id">gtk-about</property>
- <property name="name">menuabout</property>
- </object>
- </child>
- <child>
- <object class="GtkAction" id="menupreviewswap">
- <property name="name">menupreviewswap</property>
- <property name="label" translatable="yes">Swap camera</property>
- </object>
- </child>
- <child>
- <object class="GtkAction" id="menupreviewminimise">
- <property name="name">menupreviewminimise</property>
- <property name="label" translatable="yes">Minimise me</property>
- </object>
- </child>
- <child>
- <object class="GtkAction" id="menupreviewmaximise">
- <property name="name">menupreviewmaximise</property>
- <property name="label" translatable="yes">Maximise me</property>
- </object>
- </child>
- <child>
- <object class="GtkAction" id="menupreviewdisable">
- <property name="name">menupreviewdisable</property>
- <property name="label" translatable="yes">Disable camera</property>
- </object>
- </child>
- </object>
- </child>
- <ui>
- <menubar name="menubar1">
- <menu action="call">
- <menuitem action="menufullscreen"/>
- </menu>
- <menu action="edit">
- <menu action="menumicrophone"/>
- <menu action="menucamera"/>
- <menuitem name="menusettings" action="menusettings"/>
- </menu>
- <menu action="help">
- <menuitem name="menucontents" action="menucontents"/>
- <menu name="menudebug" action="menudebug">
- <menuitem action="menudebuggst"/>
- <menuitem action="menudebugtp"/>
- </menu>
- <menuitem name="menuabout" action="menuabout"/>
- </menu>
- </menubar>
- <popup name="video-popup">
- <menuitem name="menufullscreen" action="menufullscreen"/>
- </popup>
- <popup name="preview-menu">
- <menuitem name="menupreviewswap" action="menupreviewswap"/>
- <menuitem name="menupreviewminimise" action="menupreviewminimise"/>
- <menuitem name="menupreviewdisable" action="menupreviewdisable"/>
- </popup>
- <popup name="preview-hidden-menu">
- <menuitem name="menupreviewswap" action="menupreviewswap"/>
- <menuitem name="menupreviewmaximise" action="menupreviewmaximise"/>
- <menuitem name="menupreviewdisable" action="menupreviewdisable"/>
- </popup>
- </ui>
- </object>
- <object class="GtkVBox" id="call_window_vbox">
- <property name="visible">True</property>
- <child>
- <object class="GtkMenuBar" constructor="ui_manager" id="menubar1">
- <property name="visible">True</property>
- </object>
- <packing>
- <property name="expand">False</property>
- </packing>
- </child>
- <child>
- <object class="GtkToolbar" id="toolbar">
- <property name="visible">True</property>
- <style>
- <class name="primary-toolbar"/>
- </style>
- <child>
- <object class="GtkToolItem" id="toolitem1">
- <property name="visible">True</property>
- <child>
- <object class="GtkImage" id="remote_user_avatar_toolbar">
- <property name="visible">True</property>
- </object>
- </child>
- </object>
- </child>
- <child>
- <object class="GtkSeparatorToolItem" id="toolbutton1">
- <property name="draw">False</property>
- <property name="visible">True</property>
- </object>
- </child>
- <child>
-
- <object class="GtkToolItem" id="toolitem2">
- <property name="visible">True</property>
- <child>
- <object class="GtkVBox" id="uservbox">
- <child>
- <object class="GtkLabel" id="remote_user_name_toolbar">
- <property name="visible">True</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_END</property>
- <property name="xalign">0</property>
- </object>
- <packing>
- <property name="fill">False</property>
- </packing>
- </child>
- <child>
- <object class="GtkLabel" id="remote_user_status_toolbar">
- <property name="visible">True</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_END</property>
- <property name="xalign">0</property>
- </object>
- <packing>
- <property name="fill">False</property>
- </packing>
- </child>
- </object>
- </child>
- </object>
- <packing> <property name="expand">True</property></packing>
- </child>
- <child>
- <object class="GtkToolButton" id="hangup">
- <property name="visible">True</property>
- <property name="label" translatable="yes">Hang up</property>
- <property name="icon_name">call-stop</property>
- <property name="tooltip_text" translatable="yes">Hang up current call</property>
- </object>
- </child>
- <child>
- <object class="GtkToolButton" id="videocall">
- <property name="label" translatable="yes">Video call</property>
- <property name="icon_name">camera-web</property>
- <property name="tooltip_text" translatable="yes">Start a video call</property>
- </object>
- </child>
- <child>
- <object class="GtkToolButton" id="audiocall">
- <property name="label" translatable="yes">Call</property>
- <property name="icon_name">call-start</property>
- <property name="tooltip_text" translatable="yes">Start an audio call</property>
- </object>
- </child>
- <child>
- <object class="GtkToggleToolButton" id="dialpad">
- <property name="visible">True</property>
- <property name="label" translatable="yes">Show dialpad</property>
- <property name="icon_name">input-dialpad</property>
- <property name="tooltip_text" translatable="yes">Display the dialpad</property>
- </object>
- </child>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="position">1</property>
- </packing>
- </child>
- <child>
- <object class="GtkVBox" id="errors_vbox">
- <property name="visible">True</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="position">2</property>
- </packing>
- </child>
- <child>
- <object class="GtkHBox" id="pane">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- </object>
- <packing>
- <property name="position">3</property>
- </packing>
- </child>
- <child>
- <object class="GtkToolbar" id="bottom_toolbar">
- <property name="visible">True</property>
- <property name="show_arrow">False</property>
- <child>
- <object class="GtkToolItem" id="toolitem_group">
- <property name="visible">True</property>
- <child>
- <object class="GtkBox" id="button_group">
- <property name="orientation">horizontal</property>
- <property name="spacing">0</property>
- <property name="visible">True</property>
- <child>
- <object class="GtkToggleButton" id="camera">
- <property name="visible">True</property>
- <property name="sensitive">False</property>
- <property name="tooltip_text" translatable="yes">Toggle video transmission</property>
- <child>
- <object class="GtkImage" id="camera_icon">
- <property name="visible">True</property>
- <property name="icon_name">camera-web-symbolic</property>
- <property name="icon_size">1</property>
- </object>
- </child>
- </object>
- </child>
- <child>
- <object class="GtkVolumeButton" id="volume">
- <property name="visible">True</property>
- <property name="value">1.0</property>
- <property name="relief">normal</property>
- <property name="use_symbolic">True</property>
- <property name="size">1</property>
- </object>
- </child>
- <child>
- <object class="GtkButton" id="microphone">
- <property name="visible">True</property>
- <property name="tooltip_text" translatable="yes">Toggle audio transmission</property>
- <child>
- <object class="GtkImage" id="microphone_icon">
- <property name="visible">True</property>
- <property name="icon_name">audio-input-microphone-symbolic</property>
- <property name="icon_size">1</property>
- </object>
- </child>
- </object>
- </child>
- </object>
- </child>
- </object>
- </child>
- <child>
- <object class="GtkSeparatorToolItem" id="toolbutton2">
- <property name="draw">False</property>
- <property name="visible">True</property>
- </object>
- <packing>
- <property name="expand">True</property>
- </packing>
- </child>
- <child>
- <object class="GtkToolItem" id="toolitem4">
- <property name="visible">True</property>
- <child>
- <object class="GtkLabel" id="status_label">
- <property name="visible">True</property>
- <property name="margin_left">10</property>
- <property name="margin_right">10</property>
- </object>
- </child>
- </object>
- </child>
- </object>
- </child>
- </object>
-
- <object class="GtkVBox" id="details_vbox">
- <property name="border_width">6</property>
- <property name="visible">False</property>
- <property name="homogeneous">False</property>
- <property name="spacing">18</property>
- <property name="orientation">vertical</property>
-
- <child>
- <object class="GtkVBox" id="video_vbox">
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">6</property>
- <property name="orientation">vertical</property>
-
- <child>
- <object class="GtkLabel" id="video_label">
- <property name="visible">True</property>
- <property name="label" translatable="yes">Video</property>
- <property name="use_underline">False</property>
- <property name="use_markup">True</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- <attributes>
- <attribute name="weight" value="bold"/>
- </attributes>
- </object>
- <packing>
- <property name="padding">0</property>
- <property name="expand">True</property>
- <property name="fill">True</property>
- </packing>
- </child>
-
- <child>
- <object class="GtkAlignment" id="alignment2">
- <property name="visible">True</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xscale">1</property>
- <property name="yscale">1</property>
- <property name="top_padding">0</property>
- <property name="bottom_padding">0</property>
- <property name="left_padding">12</property>
- <property name="right_padding">0</property>
-
- <child>
- <object class="GtkGrid" id="video">
- <property name="visible">True</property>
- <property name="row_spacing">6</property>
- <property name="column_spacing">12</property>
-
- <child>
- <object class="GtkLabel" id="vcodec1_label">
- <property name="visible">True</property>
- <property name="label" translatable="yes">Encoding Codec:</property>
- <property name="use_underline">False</property>
- <property name="use_markup">True</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- <attributes>
- <attribute name="style" value="PANGO_STYLE_ITALIC"/>
- </attributes>
- </object>
- <packing>
- <property name="left_attach">0</property>
- <property name="top_attach">1</property>
- </packing>
- </child>
-
- <child>
-
- <object class="GtkLabel" id="vcodec_encoding_label">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="label" translatable="yes">Unknown</property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">False</property>
- <property name="selectable">True</property>
- <property name="xalign">0</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- </object>
- <packing>
- <property name="left_attach">1</property>
- <property name="top_attach">1</property>
- </packing>
- </child>
-
- <child>
- <object class="GtkLabel" id="vcodec2_label">
- <property name="visible">True</property>
- <property name="label" translatable="yes">Decoding Codec:</property>
- <property name="use_underline">False</property>
- <property name="use_markup">True</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- <attributes>
- <attribute name="style" value="PANGO_STYLE_ITALIC"/>
- </attributes>
- </object>
- <packing>
- <property name="left_attach">0</property>
- <property name="top_attach">2</property>
- </packing>
- </child>
-
- <child>
-
- <object class="GtkLabel" id="vcodec_decoding_label">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="label" translatable="yes">Unknown</property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">False</property>
- <property name="selectable">True</property>
- <property name="xalign">0</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- </object>
- <packing>
- <property name="left_attach">1</property>
- <property name="top_attach">2</property>
- </packing>
- </child>
-
- <child>
- <object class="GtkLabel" id="vrc_label">
- <property name="visible">True</property>
- <property name="label" translatable="yes">Remote Candidate:</property>
- <property name="use_underline">False</property>
- <property name="use_markup">True</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- <attributes>
- <attribute name="style" value="PANGO_STYLE_ITALIC"/>
- </attributes>
- </object>
- <packing>
- <property name="left_attach">0</property>
- <property name="top_attach">3</property>
- </packing>
- </child>
-
- <child>
- <object class="GtkLabel" id="video_remote_candidate_label">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="label" translatable="yes">Unknown</property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">False</property>
- <property name="selectable">True</property>
- <property name="xalign">0</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- </object>
- <packing>
- <property name="left_attach">1</property>
- <property name="top_attach">3</property>
- </packing>
- </child>
-
- <child>
- <object class="GtkImage" id="video_remote_candidate_info_img">
- <property name="visible">True</property>
- <property name="stock">gtk-info</property>
- <property name="xalign">0</property>
- </object>
- <packing>
- <property name="left_attach">2</property>
- <property name="top_attach">3</property>
- </packing>
- </child>
-
-
- <child>
- <object class="GtkLabel" id="vlc_label">
- <property name="visible">True</property>
- <property name="label" translatable="yes">Local Candidate:</property>
- <property name="use_underline">False</property>
- <property name="use_markup">True</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- <attributes>
- <attribute name="style" value="PANGO_STYLE_ITALIC"/>
- </attributes>
- </object>
- <packing>
- <property name="left_attach">0</property>
- <property name="top_attach">4</property>
- </packing>
- </child>
-
- <child>
- <object class="GtkLabel" id="video_local_candidate_label">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="label" translatable="yes">Unknown</property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">False</property>
- <property name="selectable">True</property>
- <property name="xalign">0</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- </object>
- <packing>
- <property name="left_attach">1</property>
- <property name="top_attach">4</property>
- </packing>
- </child>
-
- <child>
- <object class="GtkImage" id="video_local_candidate_info_img">
- <property name="visible">True</property>
- <property name="stock">gtk-info</property>
- <property name="xalign">0</property>
- </object>
- <packing>
- <property name="left_attach">2</property>
- <property name="top_attach">4</property>
- </packing>
- </child>
-
- </object>
- </child>
- </object>
- <packing>
- <property name="padding">0</property>
- <property name="expand">True</property>
- <property name="fill">True</property>
- </packing>
- </child>
- </object>
- <packing>
- <property name="padding">0</property>
- <property name="expand">True</property>
- <property name="fill">True</property>
- </packing>
- </child>
-
- <child>
- <object class="GtkVBox" id="audio_vbox">
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">6</property>
- <property name="orientation">vertical</property>
-
- <child>
- <object class="GtkLabel" id="bvwp_audio_label">
- <property name="visible">True</property>
- <property name="label" translatable="yes">Audio</property>
- <property name="use_underline">False</property>
- <property name="use_markup">True</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- <attributes>
- <attribute name="weight" value="bold"/>
- </attributes>
- </object>
- <packing>
- <property name="padding">0</property>
- <property name="expand">True</property>
- <property name="fill">True</property>
- </packing>
- </child>
-
- <child>
- <object class="GtkAlignment" id="alignment3">
- <property name="visible">True</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xscale">1</property>
- <property name="yscale">1</property>
- <property name="top_padding">0</property>
- <property name="bottom_padding">0</property>
- <property name="left_padding">12</property>
- <property name="right_padding">0</property>
-
- <child>
- <object class="GtkGrid" id="audio">
- <property name="visible">True</property>
- <property name="row_spacing">6</property>
- <property name="column_spacing">12</property>
-
- <child>
- <object class="GtkLabel" id="acodec1_label">
- <property name="visible">True</property>
- <property name="label" translatable="yes">Encoding Codec:</property>
- <property name="use_underline">False</property>
- <property name="use_markup">True</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- <attributes>
- <attribute name="style" value="PANGO_STYLE_ITALIC"/>
- </attributes>
- </object>
- <packing>
- <property name="left_attach">0</property>
- <property name="top_attach">0</property>
- </packing>
- </child>
-
- <child>
- <object class="GtkLabel" id="acodec_encoding_label">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="label" translatable="yes">Unknown</property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">False</property>
- <property name="selectable">True</property>
- <property name="xalign">0</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- </object>
- <packing>
- <property name="left_attach">1</property>
- <property name="top_attach">0</property>
- </packing>
- </child>
-
- <child>
- <object class="GtkLabel" id="acodec2_label">
- <property name="visible">True</property>
- <property name="label" translatable="yes">Decoding Codec:</property>
- <property name="use_underline">False</property>
- <property name="use_markup">True</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- <attributes>
- <attribute name="style" value="PANGO_STYLE_ITALIC"/>
- </attributes>
- </object>
- <packing>
- <property name="left_attach">0</property>
- <property name="top_attach">1</property>
- </packing>
- </child>
-
- <child>
- <object class="GtkLabel" id="acodec_decoding_label">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="label" translatable="yes">Unknown</property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">False</property>
- <property name="selectable">True</property>
- <property name="xalign">0</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- </object>
- <packing>
- <property name="left_attach">1</property>
- <property name="top_attach">1</property>
- </packing>
- </child>
-
- <child>
- <object class="GtkLabel" id="arc_label">
- <property name="visible">True</property>
- <property name="label" translatable="yes">Remote Candidate:</property>
- <property name="use_underline">False</property>
- <property name="use_markup">True</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- <attributes>
- <attribute name="style" value="PANGO_STYLE_ITALIC"/>
- </attributes>
- </object>
- <packing>
- <property name="left_attach">0</property>
- <property name="top_attach">2</property>
- </packing>
- </child>
-
- <child>
- <object class="GtkLabel" id="audio_remote_candidate_label">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="label" translatable="yes">Unknown</property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">False</property>
- <property name="selectable">True</property>
- <property name="xalign">0</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- </object>
- <packing>
- <property name="left_attach">1</property>
- <property name="top_attach">2</property>
- </packing>
- </child>
-
- <child>
- <object class="GtkImage" id="audio_remote_candidate_info_img">
- <property name="visible">True</property>
- <property name="stock">gtk-info</property>
- <property name="xalign">0</property>
- </object>
- <packing>
- <property name="left_attach">2</property>
- <property name="top_attach">2</property>
- </packing>
- </child>
-
- <child>
- <object class="GtkLabel" id="alc_label">
- <property name="visible">True</property>
- <property name="label" translatable="yes">Local Candidate:</property>
- <property name="use_underline">False</property>
- <property name="use_markup">True</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- <attributes>
- <attribute name="style" value="PANGO_STYLE_ITALIC"/>
- </attributes>
- </object>
- <packing>
- <property name="left_attach">0</property>
- <property name="top_attach">3</property>
- </packing>
- </child>
-
- <child>
- <object class="GtkLabel" id="audio_local_candidate_label">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="label" translatable="yes">Unknown</property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">False</property>
- <property name="selectable">True</property>
- <property name="xalign">0</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- </object>
- <packing>
- <property name="left_attach">1</property>
- <property name="top_attach">3</property>
- </packing>
- </child>
-
- <child>
- <object class="GtkImage" id="audio_local_candidate_info_img">
- <property name="visible">True</property>
- <property name="stock">gtk-info</property>
- <property name="xalign">0</property>
- </object>
- <packing>
- <property name="left_attach">2</property>
- <property name="top_attach">3</property>
- </packing>
- </child>
-
- </object>
- </child>
- </object>
- <packing>
- <property name="padding">0</property>
- <property name="expand">True</property>
- <property name="fill">True</property>
- </packing>
- </child>
- </object>
- <packing>
- <property name="padding">0</property>
- <property name="expand">True</property>
- <property name="fill">True</property>
- </packing>
- </child>
- </object>
-
-</interface>
diff --git a/src/empathy-call.c b/src/empathy-call.c
deleted file mode 100644
index 3d3ae80c..00000000
--- a/src/empathy-call.c
+++ /dev/null
@@ -1,293 +0,0 @@
-/*
- * Copyright (C) 2007-2011 Collabora Ltd.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301 USA
- *
- * Authors: Xavier Claessens <xclaesse@gmail.com>
- * Guillaume Desmottes <guillaume.desmottes@collabora.co.uk>
- */
-
-#include "config.h"
-
-#include <glib/gi18n.h>
-#include <clutter-gtk/clutter-gtk.h>
-#include <clutter-gst/clutter-gst.h>
-#include <tp-account-widgets/tpaw-utils.h>
-
-#ifdef CLUTTER_WINDOWING_X11
-#include <X11/Xlib.h>
-#endif
-
-#include "empathy-call-factory.h"
-#include "empathy-call-window.h"
-#include "empathy-ui-utils.h"
-
-#define DEBUG_FLAG EMPATHY_DEBUG_VOIP
-#include "empathy-debug.h"
-
-/* Exit after $TIMEOUT seconds if not displaying any call window */
-#define TIMEOUT 60
-
-#define EMPATHY_CALL_DBUS_NAME "org.gnome.Empathy.Call"
-
-static GtkApplication *app = NULL;
-static gboolean activated = FALSE;
-static gboolean use_timer = TRUE;
-static guint inhibit_id = 0;
-
-static EmpathyCallFactory *call_factory = NULL;
-
-/* An EmpathyContact -> EmpathyCallWindow hash table for all existing
- * Call windows. We own a ref on the EmpathyContacts. */
-static GHashTable *call_windows;
-
-static void
-call_window_destroyed_cb (GtkWidget *window,
- EmpathyContact *contact)
-{
- g_hash_table_remove (call_windows, contact);
-
- g_application_release (G_APPLICATION (app));
-}
-
-static gboolean
-find_window_for_handle (gpointer key,
- gpointer value,
- gpointer user_data)
-{
- EmpathyContact *contact = key;
- guint handle = GPOINTER_TO_UINT (user_data);
-
- if (handle == empathy_contact_get_handle (contact))
- return TRUE;
-
- return FALSE;
-}
-
-static gboolean
-incoming_call_cb (EmpathyCallFactory *factory,
- guint handle,
- TpCallChannel *channel,
- TpChannelDispatchOperation *dispatch_operation,
- TpAddDispatchOperationContext *context,
- gpointer user_data)
-{
- EmpathyCallWindow *window = g_hash_table_find (call_windows,
- find_window_for_handle, GUINT_TO_POINTER (handle));
-
- if (window != NULL)
- {
- /* The window takes care of accepting or rejecting the context. */
- empathy_call_window_start_ringing (window,
- channel, dispatch_operation, context);
- return TRUE;
- }
-
- return FALSE;
-}
-
-static void
-call_window_inhibit_cb (EmpathyCallWindow *window,
- gboolean inhibit,
- gpointer user_data)
-{
- if (inhibit)
- {
- if (inhibit_id != 0)
- return;
-
- inhibit_id = gtk_application_inhibit (GTK_APPLICATION (app),
- GTK_WINDOW (window),
- GTK_APPLICATION_INHIBIT_LOGOUT | GTK_APPLICATION_INHIBIT_SWITCH |
- GTK_APPLICATION_INHIBIT_SUSPEND | GTK_APPLICATION_INHIBIT_IDLE,
- _("In a call"));
- }
- else
- {
- if (inhibit_id == 0)
- return;
-
- gtk_application_uninhibit (GTK_APPLICATION (app), inhibit_id);
- inhibit_id = 0;
- }
-}
-
-static void
-new_call_handler_cb (EmpathyCallFactory *factory,
- EmpathyCallHandler *handler,
- gint64 user_action_time,
- gpointer user_data)
-{
- EmpathyCallWindow *window;
- EmpathyContact *contact;
- guint32 x11_time;
- gboolean present;
-
- DEBUG ("Show the call window");
-
- contact = empathy_call_handler_get_contact (handler);
-
- window = g_hash_table_lookup (call_windows, contact);
-
- present = tp_user_action_time_should_present (user_action_time,
- &x11_time);
-
- if (window != NULL)
- {
- empathy_call_window_new_handler (window, handler, present, x11_time);
- }
- else
- {
- window = empathy_call_window_new (handler);
-
- g_hash_table_insert (call_windows, g_object_ref (contact), window);
- g_application_hold (G_APPLICATION (app));
- g_signal_connect (window, "destroy",
- G_CALLBACK (call_window_destroyed_cb), contact);
- g_signal_connect (window, "inhibit",
- G_CALLBACK (call_window_inhibit_cb), NULL);
-
- gtk_widget_show (GTK_WIDGET (window));
-
- if (present)
- tpaw_window_present_with_time (GTK_WINDOW (window), x11_time);
- }
-}
-
-static void
-activate_cb (GApplication *application)
-{
- GError *error = NULL;
-
- if (activated)
- return;
-
- activated = TRUE;
-
- if (!use_timer)
- {
- /* keep a 'ref' to the application */
- g_application_hold (G_APPLICATION (app));
- }
-
- g_assert (call_factory == NULL);
- call_factory = empathy_call_factory_initialise ();
-
- g_signal_connect (G_OBJECT (call_factory), "new-call-handler",
- G_CALLBACK (new_call_handler_cb), NULL);
- g_signal_connect (G_OBJECT (call_factory), "incoming-call",
- G_CALLBACK (incoming_call_cb), NULL);
-
- if (!empathy_call_factory_register (call_factory, &error))
- {
- g_critical ("Failed to register Handler: %s", error->message);
- g_error_free (error);
- }
-}
-
-int
-main (int argc,
- char *argv[])
-{
- GOptionContext *optcontext;
- GOptionEntry options[] = {
- { NULL }
- };
-#ifdef ENABLE_DEBUG
- TpDebugSender *debug_sender;
-#endif
- GError *error = NULL;
- gint retval;
- GtkSettings *gtk_settings;
-
- g_setenv ("GST_DEBUG_DUMP_DOT_DIR", g_get_tmp_dir (), FALSE);
-
-#ifdef GDK_WINDOWING_X11
- /* We can't call clutter_gst_init() before gtk_clutter_init(), so no choice
- * but to intiialise X11 threading ourself */
- XInitThreads ();
-#endif
-
- optcontext = g_option_context_new (N_("- Empathy Audio/Video Client"));
- g_option_context_add_group (optcontext, gst_init_get_option_group ());
- g_option_context_add_group (optcontext, gtk_get_option_group (TRUE));
- g_option_context_add_group (optcontext, cogl_get_option_group ());
- g_option_context_add_group (optcontext,
- clutter_get_option_group_without_init ());
- g_option_context_add_group (optcontext, gtk_clutter_get_option_group ());
- g_option_context_add_main_entries (optcontext, options, GETTEXT_PACKAGE);
- g_option_context_set_translation_domain (optcontext, GETTEXT_PACKAGE);
-
- if (!g_option_context_parse (optcontext, &argc, &argv, &error)) {
- g_print ("%s\nRun '%s --help' to see a full list of available command "
- "line options.\n",
- error->message, argv[0]);
- g_warning ("Error in empathy-call init: %s", error->message);
- return EXIT_FAILURE;
- }
-
- g_option_context_free (optcontext);
-
- clutter_gst_init (&argc, &argv);
-
- empathy_gtk_init ();
- textdomain (GETTEXT_PACKAGE);
- g_set_application_name (_("Empathy Audio/Video Client"));
-
- /* Make empathy and empathy-call appear as the same app in gnome-shell */
- gdk_set_program_class ("Empathy");
- gtk_window_set_default_icon_name ("empathy");
-
- gtk_settings = gtk_settings_get_default ();
- g_object_set (G_OBJECT (gtk_settings), "gtk-application-prefer-dark-theme",
- TRUE, NULL);
-
- app = gtk_application_new (EMPATHY_CALL_DBUS_NAME, G_APPLICATION_FLAGS_NONE);
- g_signal_connect (app, "activate", G_CALLBACK (activate_cb), NULL);
-
-#ifdef ENABLE_DEBUG
- /* Set up debug sender */
- debug_sender = tp_debug_sender_dup ();
- g_log_set_default_handler (tp_debug_sender_log_handler, G_LOG_DOMAIN);
-#endif
-
- if (g_getenv ("EMPATHY_PERSIST") != NULL)
- {
- DEBUG ("Disable timer");
-
- use_timer = FALSE;
- }
-
- call_windows = g_hash_table_new_full (g_direct_hash, g_direct_equal,
- g_object_unref, NULL);
-
- /* the inactivity timeout can only be set while the application is held */
- g_application_hold (G_APPLICATION (app));
- g_application_set_inactivity_timeout (G_APPLICATION (app), TIMEOUT * 1000);
- g_application_release (G_APPLICATION (app));
-
- retval = g_application_run (G_APPLICATION (app), argc, argv);
-
- g_hash_table_unref (call_windows);
- g_object_unref (app);
- tp_clear_object (&call_factory);
-
-#ifdef ENABLE_DEBUG
- g_object_unref (debug_sender);
-#endif
-
- return retval;
-}
diff --git a/src/empathy-camera-menu.c b/src/empathy-camera-menu.c
deleted file mode 100644
index cf18340c..00000000
--- a/src/empathy-camera-menu.c
+++ /dev/null
@@ -1,418 +0,0 @@
-/*
- * Copyright (C) 2011 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
- *
- * GtkAction code based on gnome-terminal's TerminalTabsMenu object.
- * Thanks guys!
- */
-
-#include "config.h"
-#include "empathy-camera-menu.h"
-
-#include <tp-account-widgets/tpaw-camera-monitor.h>
-
-#include "empathy-gsettings.h"
-
-#define DEBUG_FLAG EMPATHY_DEBUG_VOIP
-#include "empathy-debug.h"
-
-struct _EmpathyCameraMenuPrivate
-{
- /* Borrowed ref; the call window actually owns us. */
- EmpathyCallWindow *window;
-
- /* Given away ref; the call window's UI manager now owns this. */
- GtkActionGroup *action_group;
-
- /* An invisible radio action so new cameras are always in the
- * same radio group. */
- GtkAction *anchor_action;
-
- /* The merge ID used with the UI manager. We need to keep this
- * around so in _clean we can remove all the items we've added
- * before and start again. */
- guint ui_id;
-
- /* TRUE if we're in _update and so calling _set_active. */
- gboolean in_update;
-
- /* Queue of GtkRadioActions. */
- GQueue *cameras;
-
- TpawCameraMonitor *camera_monitor;
-
- GSettings *settings;
-};
-
-G_DEFINE_TYPE (EmpathyCameraMenu, empathy_camera_menu, G_TYPE_OBJECT);
-
-enum
-{
- PROP_WINDOW = 1,
-};
-
-static void empathy_camera_menu_update (EmpathyCameraMenu *self);
-
-static void
-empathy_camera_menu_init (EmpathyCameraMenu *self)
-{
- self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self,
- EMPATHY_TYPE_CAMERA_MENU, EmpathyCameraMenuPrivate);
-}
-
-static void
-empathy_camera_menu_set_property (GObject *object,
- guint property_id,
- const GValue *value,
- GParamSpec *pspec)
-{
- EmpathyCameraMenu *self = EMPATHY_CAMERA_MENU (object);
-
- switch (property_id)
- {
- case PROP_WINDOW:
- self->priv->window = g_value_get_object (value);
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
- }
-}
-
-static void
-empathy_camera_menu_get_property (GObject *object,
- guint property_id,
- GValue *value,
- GParamSpec *pspec)
-{
- EmpathyCameraMenu *self = EMPATHY_CAMERA_MENU (object);
-
- switch (property_id)
- {
- case PROP_WINDOW:
- g_value_set_object (value, self->priv->window);
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
- }
-}
-
-static void
-empathy_camera_menu_clean (EmpathyCameraMenu *self)
-{
- GtkUIManager *ui_manager;
-
- if (self->priv->ui_id == 0)
- return;
-
- ui_manager = empathy_call_window_get_ui_manager (self->priv->window);
-
- gtk_ui_manager_remove_ui (ui_manager, self->priv->ui_id);
- gtk_ui_manager_ensure_update (ui_manager);
- self->priv->ui_id = 0;
-}
-
-static void
-empathy_camera_menu_activate_cb (GtkAction *action,
- EmpathyCameraMenu *self)
-{
- EmpathyGstVideoSrc *video;
- const gchar *device;
- gchar *current_device = NULL;
-
- if (self->priv->in_update)
- return;
-
- video = empathy_call_window_get_video_src (self->priv->window);
- if (video != NULL)
- current_device = empathy_video_src_dup_device (video);
-
- device = gtk_action_get_name (action);
-
- /* Don't change the device if it's the currently used one */
- if (!tp_strdiff (device, current_device))
- goto out;
-
- empathy_call_window_change_webcam (self->priv->window, device);
-
- out:
- g_free (current_device);
-}
-
-static void
-empathy_camera_menu_update (EmpathyCameraMenu *self)
-{
- GList *l;
- GtkAction *menu;
- GtkUIManager *ui_manager;
- EmpathyGstVideoSrc *video;
- gboolean show_menu;
- gchar *current_camera = NULL;
- guint n_cameras;
-
- ui_manager = empathy_call_window_get_ui_manager (self->priv->window);
-
- menu = gtk_ui_manager_get_action (ui_manager, "/menubar1/edit/menucamera");
- n_cameras = g_queue_get_length (self->priv->cameras);
- show_menu = (n_cameras > 1);
- gtk_action_set_visible (menu, show_menu);
-
- video = empathy_call_window_get_video_src (self->priv->window);
- if (video != NULL)
- current_camera = empathy_video_src_dup_device (video);
-
- empathy_camera_menu_clean (self);
- self->priv->ui_id = gtk_ui_manager_new_merge_id (ui_manager);
-
- for (l = self->priv->cameras->head; l != NULL; l = g_list_next (l))
- {
- GtkRadioAction *action = l->data;
- const gchar *name = gtk_action_get_name (GTK_ACTION (action));
-
- if (!tp_strdiff (current_camera, name))
- {
- self->priv->in_update = TRUE;
- gtk_toggle_action_set_active (GTK_TOGGLE_ACTION (action), TRUE);
- self->priv->in_update = FALSE;
- }
-
- gtk_ui_manager_add_ui (ui_manager, self->priv->ui_id,
- /* TODO: this should probably be passed from the call
- * window, seeing that it's a reference to
- * empathy-call-window.ui. */
- "/menubar1/edit/menucamera",
- name, name, GTK_UI_MANAGER_MENUITEM, FALSE);
- }
-
- g_free (current_camera);
-}
-
-static void
-empathy_camera_menu_add_camera (EmpathyCameraMenu *self,
- TpawCamera *camera)
-{
- GtkRadioAction *action;
- GSList *group;
-
- action = gtk_radio_action_new (camera->device, camera->name, NULL, NULL, 0);
- gtk_action_group_add_action (self->priv->action_group, GTK_ACTION (action));
-
- group = gtk_radio_action_get_group (
- GTK_RADIO_ACTION (self->priv->anchor_action));
- gtk_radio_action_set_group (GTK_RADIO_ACTION (action), group);
-
- g_queue_push_tail (self->priv->cameras, action);
-
- g_signal_connect (action, "activate",
- G_CALLBACK (empathy_camera_menu_activate_cb), self);
-}
-
-static void
-empathy_camera_menu_camera_added_cb (TpawCameraMonitor *monitor,
- TpawCamera *camera,
- EmpathyCameraMenu *self)
-{
- empathy_camera_menu_add_camera (self, camera);
- empathy_camera_menu_update (self);
-}
-
-static void
-empathy_camera_menu_camera_removed_cb (TpawCameraMonitor *monitor,
- TpawCamera *camera,
- EmpathyCameraMenu *self)
-{
- GList *l;
-
- for (l = self->priv->cameras->head; l != NULL; l = g_list_next (l))
- {
- GtkAction *action = l->data;
- const gchar *device;
-
- device = gtk_action_get_name (action);
-
- if (tp_strdiff (device, camera->device))
- continue;
-
- g_signal_handlers_disconnect_by_func (action,
- G_CALLBACK (empathy_camera_menu_activate_cb), self);
-
- gtk_action_group_remove_action (self->priv->action_group,
- action);
- g_queue_remove (self->priv->cameras, action);
- break;
- }
-
- empathy_camera_menu_update (self);
-}
-
-static void
-empathy_camera_menu_prefs_camera_changed_cb (GSettings *settings,
- gchar *key,
- EmpathyCameraMenu *self)
-{
- gchar *device = g_settings_get_string (settings, key);
- GtkRadioAction *action = NULL;
- gboolean found = FALSE;
- GList *l;
-
- for (l = self->priv->cameras->head; l != NULL; l = g_list_next (l))
- {
- const gchar *name;
-
- action = l->data;
- name = gtk_action_get_name (GTK_ACTION (action));
-
- if (!tp_strdiff (device, name))
- {
- found = TRUE;
- break;
- }
- }
-
- /* If the selected camera isn't found, we connect the first
- * available one */
- if (!found && self->priv->cameras->head != NULL)
- action = self->priv->cameras->head->data;
-
- if (action != NULL &&
- !gtk_toggle_action_get_active (GTK_TOGGLE_ACTION (action)))
- {
- g_signal_handlers_block_by_func (settings,
- empathy_camera_menu_prefs_camera_changed_cb, self);
- gtk_toggle_action_set_active (GTK_TOGGLE_ACTION (action), TRUE);
- g_signal_handlers_unblock_by_func (settings,
- empathy_camera_menu_prefs_camera_changed_cb, self);
- }
-
- g_free (device);
-}
-
-static void
-empathy_camera_menu_get_cameras (EmpathyCameraMenu *self)
-{
- const GList *cameras;
-
- cameras = tpaw_camera_monitor_get_cameras (self->priv->camera_monitor);
-
- for (; cameras != NULL; cameras = g_list_next (cameras))
- {
- TpawCamera *camera = cameras->data;
-
- empathy_camera_menu_add_camera (self, camera);
- }
-
- empathy_camera_menu_update (self);
-
- /* Do as if the gsettings key had changed, so we select the key that
- * was last set. */
- empathy_camera_menu_prefs_camera_changed_cb (self->priv->settings,
- EMPATHY_PREFS_CALL_CAMERA_DEVICE, self);
-}
-
-static void
-empathy_camera_menu_constructed (GObject *obj)
-{
- EmpathyCameraMenu *self = EMPATHY_CAMERA_MENU (obj);
- GtkUIManager *ui_manager;
-
- g_assert (EMPATHY_IS_CALL_WINDOW (self->priv->window));
-
- ui_manager = empathy_call_window_get_ui_manager (self->priv->window);
-
- g_assert (GTK_IS_UI_MANAGER (ui_manager));
-
- /* Okay let's go go go. */
-
- self->priv->action_group = gtk_action_group_new ("EmpathyCameraMenu");
- gtk_ui_manager_insert_action_group (ui_manager, self->priv->action_group, -1);
- /* the UI manager now owns this */
- g_object_unref (self->priv->action_group);
-
- self->priv->anchor_action = g_object_new (GTK_TYPE_RADIO_ACTION,
- "name", "EmpathyCameraMenuAnchorAction",
- NULL);
- gtk_action_group_add_action (self->priv->action_group,
- self->priv->anchor_action);
- g_object_unref (self->priv->anchor_action);
-
- self->priv->camera_monitor = tpaw_camera_monitor_new ();
-
- tp_g_signal_connect_object (self->priv->camera_monitor, "added",
- G_CALLBACK (empathy_camera_menu_camera_added_cb), self, 0);
- tp_g_signal_connect_object (self->priv->camera_monitor, "removed",
- G_CALLBACK (empathy_camera_menu_camera_removed_cb), self, 0);
-
- self->priv->settings = g_settings_new (EMPATHY_PREFS_CALL_SCHEMA);
- g_signal_connect (self->priv->settings,
- "changed::"EMPATHY_PREFS_CALL_CAMERA_DEVICE,
- G_CALLBACK (empathy_camera_menu_prefs_camera_changed_cb), self);
-
- self->priv->cameras = g_queue_new ();
-
- empathy_camera_menu_get_cameras (self);
-}
-
-static void
-empathy_camera_menu_dispose (GObject *obj)
-{
- EmpathyCameraMenu *self = EMPATHY_CAMERA_MENU (obj);
-
- tp_clear_pointer (&self->priv->cameras, g_queue_free);
-
- tp_clear_object (&self->priv->camera_monitor);
- tp_clear_object (&self->priv->settings);
-
- G_OBJECT_CLASS (empathy_camera_menu_parent_class)->dispose (obj);
-}
-
-static void
-empathy_camera_menu_class_init (EmpathyCameraMenuClass *klass)
-{
- GObjectClass *object_class = G_OBJECT_CLASS (klass);
-
- object_class->set_property = empathy_camera_menu_set_property;
- object_class->get_property = empathy_camera_menu_get_property;
- object_class->constructed = empathy_camera_menu_constructed;
- object_class->dispose = empathy_camera_menu_dispose;
-
- g_object_class_install_property (object_class, PROP_WINDOW,
- g_param_spec_object ("window", "window", "window",
- EMPATHY_TYPE_CALL_WINDOW,
- G_PARAM_WRITABLE | G_PARAM_STATIC_STRINGS | G_PARAM_CONSTRUCT_ONLY));
-
- g_type_class_add_private (object_class, sizeof (EmpathyCameraMenuPrivate));
-}
-
-EmpathyCameraMenu *
-empathy_camera_menu_new (EmpathyCallWindow *window)
-{
- return g_object_new (EMPATHY_TYPE_CAMERA_MENU,
- "window", window,
- NULL);
-}
-
-void
-empathy_camera_menu_set_sensitive (EmpathyCameraMenu *self,
- gboolean sensitive)
-{
- GtkUIManager *ui_manager;
-
- gtk_action_group_set_sensitive (self->priv->action_group, sensitive);
- if (sensitive) /* Mark the active camera as such. */
- empathy_camera_menu_update (self);
-
- ui_manager = empathy_call_window_get_ui_manager (self->priv->window);
- gtk_ui_manager_ensure_update (ui_manager);
-}
diff --git a/src/empathy-camera-menu.h b/src/empathy-camera-menu.h
deleted file mode 100644
index b55726be..00000000
--- a/src/empathy-camera-menu.h
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- * Copyright (C) 2011 Collabora Ltd.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-#ifndef __EMPATHY_CAMERA_MENU_H__
-#define __EMPATHY_CAMERA_MENU_H__
-
-
-#include "empathy-call-window.h"
-
-G_BEGIN_DECLS
-
-#define EMPATHY_TYPE_CAMERA_MENU (empathy_camera_menu_get_type ())
-#define EMPATHY_CAMERA_MENU(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), EMPATHY_TYPE_CAMERA_MENU, EmpathyCameraMenu))
-#define EMPATHY_CAMERA_MENU_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), EMPATHY_TYPE_CAMERA_MENU, EmpathyCameraMenuClass))
-#define EMPATHY_IS_CAMERA_MENU(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), EMPATHY_TYPE_CAMERA_MENU))
-#define EMPATHY_IS_CAMERA_MENU_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), EMPATHY_TYPE_CAMERA_MENU))
-#define EMPATHY_CAMERA_MENU_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), EMPATHY_TYPE_CAMERA_MENU, EmpathyCameraMenuClass))
-
-typedef struct _EmpathyCameraMenu EmpathyCameraMenu;
-typedef struct _EmpathyCameraMenuPrivate EmpathyCameraMenuPrivate;
-typedef struct _EmpathyCameraMenuClass EmpathyCameraMenuClass;
-
-struct _EmpathyCameraMenu
-{
- GObject parent;
- EmpathyCameraMenuPrivate *priv;
-};
-
-struct _EmpathyCameraMenuClass
-{
- GObjectClass parent_class;
-};
-
-GType empathy_camera_menu_get_type (void) G_GNUC_CONST;
-
-EmpathyCameraMenu * empathy_camera_menu_new (EmpathyCallWindow *window);
-
-void empathy_camera_menu_set_sensitive (EmpathyCameraMenu *self,
- gboolean sensitive);
-
-G_END_DECLS
-
-#endif /* __EMPATHY_CAMERA_MENU_H__ */
diff --git a/src/empathy-chat-manager.c b/src/empathy-chat-manager.c
deleted file mode 100644
index 02ed0d94..00000000
--- a/src/empathy-chat-manager.c
+++ /dev/null
@@ -1,558 +0,0 @@
-/*
- * empathy-chat-manager.c - Source for EmpathyChatManager
- * Copyright (C) 2010 Collabora Ltd.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-#include "config.h"
-#include "empathy-chat-manager.h"
-
-#include <telepathy-glib/proxy-subclass.h>
-
-#include "empathy-chatroom-manager.h"
-#include "empathy-chat-window.h"
-#include "empathy-request-util.h"
-#include "empathy-ui-utils.h"
-#include "extensions.h"
-
-#define DEBUG_FLAG EMPATHY_DEBUG_OTHER
-#include "empathy-debug.h"
-
-enum {
- CLOSED_CHATS_CHANGED,
- DISPLAYED_CHATS_CHANGED,
- LAST_SIGNAL
-};
-
-static guint signals[LAST_SIGNAL];
-
-static void svc_iface_init (gpointer, gpointer);
-
-G_DEFINE_TYPE_WITH_CODE (EmpathyChatManager, empathy_chat_manager,
- G_TYPE_OBJECT,
- G_IMPLEMENT_INTERFACE (EMP_TYPE_SVC_CHAT_MANAGER,
- svc_iface_init)
- )
-
-/* private structure */
-typedef struct _EmpathyChatManagerPriv EmpathyChatManagerPriv;
-
-struct _EmpathyChatManagerPriv
-{
- EmpathyChatroomManager *chatroom_mgr;
- /* Queue of (ChatData *) representing the closed chats */
- GQueue *closed_queue;
-
- guint num_displayed_chat;
-
- /* account path -> (GHashTable<(owned gchar *) contact ID
- * -> (owned gchar *) non-NULL message>)
- */
- GHashTable *messages;
-
- TpBaseClient *handler;
-
- /* Cached to keep Folks in memory while empathy-chat is running; we don't
- * want to reload it each time the last chat window is closed
- * and re-opened. */
- EmpathyIndividualManager *individual_mgr;
-};
-
-#define GET_PRIV(o) \
- (G_TYPE_INSTANCE_GET_PRIVATE ((o), EMPATHY_TYPE_CHAT_MANAGER, \
- EmpathyChatManagerPriv))
-
-static EmpathyChatManager *chat_manager_singleton = NULL;
-
-typedef struct
-{
- TpAccount *account;
- gchar *id;
- gboolean room;
- gboolean sms;
-} ChatData;
-
-static ChatData *
-chat_data_new (EmpathyChat *chat)
-{
- ChatData *data = NULL;
-
- data = g_slice_new0 (ChatData);
-
- data->account = g_object_ref (empathy_chat_get_account (chat));
- data->id = g_strdup (empathy_chat_get_id (chat));
- data->room = empathy_chat_is_room (chat);
- data->sms = empathy_chat_is_sms_channel (chat);
-
- return data;
-}
-
-static void
-chat_data_free (ChatData *data)
-{
- if (data->account != NULL)
- {
- g_object_unref (data->account);
- data->account = NULL;
- }
-
- if (data->id != NULL)
- {
- g_free (data->id);
- data->id = NULL;
- }
-
- g_slice_free (ChatData, data);
-}
-
-static void
-chat_destroyed_cb (gpointer data,
- GObject *object)
-{
- EmpathyChatManager *self = data;
- EmpathyChatManagerPriv *priv = GET_PRIV (self);
-
- priv->num_displayed_chat--;
-
- DEBUG ("Chat destroyed; we are now displaying %u chats",
- priv->num_displayed_chat);
-
- g_signal_emit (self, signals[DISPLAYED_CHATS_CHANGED], 0,
- priv->num_displayed_chat);
-}
-
-static void
-join_cb (GObject *source,
- GAsyncResult *result,
- gpointer user_data)
-{
- TpChannel *channel = TP_CHANNEL (source);
- GError *error = NULL;
-
- if (!tp_channel_join_finish (channel, result, &error))
- {
- DEBUG ("Failed to join chat (%s): %s",
- tp_channel_get_identifier (channel), error->message);
- g_error_free (error);
- }
-}
-
-static void
-individual_mgr_cb (EmpathyChatWindow *window,
- GParamSpec *spec,
- EmpathyChatManager *self)
-{
- EmpathyChatManagerPriv *priv = GET_PRIV (self);
-
- if (priv->individual_mgr != NULL)
- return;
-
- priv->individual_mgr = empathy_chat_window_get_individual_manager (window);
- g_object_ref (priv->individual_mgr);
-}
-
-static void
-process_tp_chat (EmpathyChatManager *self,
- EmpathyTpChat *tp_chat,
- TpAccount *account,
- gint64 user_action_time)
-{
- EmpathyChatManagerPriv *priv = GET_PRIV (self);
- EmpathyChat *chat = NULL;
- const gchar *id;
- EmpathyChatWindow *window;
-
- id = empathy_tp_chat_get_id (tp_chat);
- if (!tp_str_empty (id))
- {
- chat = empathy_chat_window_find_chat (account, id,
- tp_text_channel_is_sms_channel ((TpTextChannel *) tp_chat));
- }
-
- if (chat != NULL)
- {
- empathy_chat_set_tp_chat (chat, tp_chat);
- }
- else
- {
- GHashTable *chats = NULL;
-
- chat = empathy_chat_new (tp_chat);
- /* empathy_chat_new returns a floating reference as EmpathyChat is
- * a GtkWidget. This reference will be taken by a container
- * (a GtkNotebook) when we'll call empathy_chat_window_present_chat */
-
- priv->num_displayed_chat++;
-
- DEBUG ("Chat displayed; we are now displaying %u chat",
- priv->num_displayed_chat);
-
- g_signal_emit (self, signals[DISPLAYED_CHATS_CHANGED], 0,
- priv->num_displayed_chat);
-
- /* Set the saved message in the channel if we have one. */
- chats = g_hash_table_lookup (priv->messages,
- tp_proxy_get_object_path (account));
-
- if (chats != NULL)
- {
- const gchar *msg = g_hash_table_lookup (chats, id);
-
- if (msg != NULL)
- empathy_chat_set_text (chat, msg);
- }
-
- g_object_weak_ref ((GObject *) chat, chat_destroyed_cb, self);
- }
-
- window = empathy_chat_window_present_chat (chat, user_action_time);
-
- if (priv->individual_mgr == NULL)
- {
- /* We want to cache it as soon it's created */
- tp_g_signal_connect_object (window, "notify::individual-manager",
- G_CALLBACK (individual_mgr_cb), self, 0);
- }
-
- if (empathy_tp_chat_is_invited (tp_chat, NULL))
- {
- /* We have been invited to the room. Add ourself as member as this
- * channel has been approved. */
- tp_channel_join_async (TP_CHANNEL (tp_chat), "", join_cb, self);
- }
-}
-
-static void
-handle_channels (TpSimpleHandler *handler,
- TpAccount *account,
- TpConnection *connection,
- GList *channels,
- GList *requests_satisfied,
- gint64 user_action_time,
- TpHandleChannelsContext *context,
- gpointer user_data)
-{
- EmpathyChatManager *self = (EmpathyChatManager *) user_data;
- GList *l;
-
- for (l = channels; l != NULL; l = g_list_next (l))
- {
- EmpathyTpChat *tp_chat = l->data;
-
- if (tp_proxy_get_invalidated (tp_chat) != NULL)
- continue;
-
- if (!EMPATHY_IS_TP_CHAT (tp_chat))
- {
- DEBUG ("Channel %s doesn't implement Messages; can't handle it",
- tp_proxy_get_object_path (tp_chat));
- continue;
- }
-
- DEBUG ("Now handling channel %s", tp_proxy_get_object_path (tp_chat));
-
- process_tp_chat (self, tp_chat, account, user_action_time);
- }
-
- tp_handle_channels_context_accept (context);
-}
-
-static void
-empathy_chat_manager_init (EmpathyChatManager *self)
-{
- EmpathyChatManagerPriv *priv = GET_PRIV (self);
- TpAccountManager *am;
- GError *error = NULL;
-
- priv->closed_queue = g_queue_new ();
- priv->messages = g_hash_table_new_full (g_str_hash, g_str_equal,
- g_free, (GDestroyNotify) g_hash_table_unref);
-
- am = tp_account_manager_dup ();
-
- priv->chatroom_mgr = empathy_chatroom_manager_dup_singleton (NULL);
-
- /* Text channels handler */
- priv->handler = tp_simple_handler_new_with_am (am, FALSE, FALSE,
- EMPATHY_CHAT_BUS_NAME_SUFFIX, FALSE, handle_channels, self, NULL);
-
- g_object_unref (am);
-
- tp_base_client_take_handler_filter (priv->handler, tp_asv_new (
- TP_PROP_CHANNEL_CHANNEL_TYPE, G_TYPE_STRING, TP_IFACE_CHANNEL_TYPE_TEXT,
- TP_PROP_CHANNEL_TARGET_HANDLE_TYPE, G_TYPE_UINT, TP_HANDLE_TYPE_CONTACT,
- NULL));
-
- tp_base_client_take_handler_filter (priv->handler, tp_asv_new (
- TP_PROP_CHANNEL_CHANNEL_TYPE, G_TYPE_STRING, TP_IFACE_CHANNEL_TYPE_TEXT,
- TP_PROP_CHANNEL_TARGET_HANDLE_TYPE, G_TYPE_UINT, TP_HANDLE_TYPE_ROOM,
- NULL));
-
- tp_base_client_take_handler_filter (priv->handler, tp_asv_new (
- TP_PROP_CHANNEL_CHANNEL_TYPE, G_TYPE_STRING, TP_IFACE_CHANNEL_TYPE_TEXT,
- TP_PROP_CHANNEL_TARGET_HANDLE_TYPE, G_TYPE_UINT, TP_HANDLE_TYPE_NONE,
- NULL));
-
- if (!tp_base_client_register (priv->handler, &error))
- {
- g_critical ("Failed to register text handler: %s", error->message);
- g_error_free (error);
- }
-}
-
-static void
-empathy_chat_manager_finalize (GObject *object)
-{
- EmpathyChatManager *self = EMPATHY_CHAT_MANAGER (object);
- EmpathyChatManagerPriv *priv = GET_PRIV (self);
-
- if (priv->closed_queue != NULL)
- {
- g_queue_foreach (priv->closed_queue, (GFunc) chat_data_free, NULL);
- g_queue_free (priv->closed_queue);
- priv->closed_queue = NULL;
- }
-
- tp_clear_pointer (&priv->messages, g_hash_table_unref);
-
- tp_clear_object (&priv->handler);
- tp_clear_object (&priv->chatroom_mgr);
- tp_clear_object (&priv->individual_mgr);
-
- G_OBJECT_CLASS (empathy_chat_manager_parent_class)->finalize (object);
-}
-
-static GObject *
-empathy_chat_manager_constructor (GType type,
- guint n_construct_params,
- GObjectConstructParam *construct_params)
-{
- GObject *retval;
-
- if (!chat_manager_singleton)
- {
- retval = G_OBJECT_CLASS (empathy_chat_manager_parent_class)->constructor
- (type, n_construct_params, construct_params);
-
- chat_manager_singleton = EMPATHY_CHAT_MANAGER (retval);
- g_object_add_weak_pointer (retval, (gpointer) &chat_manager_singleton);
- }
- else
- {
- retval = g_object_ref (chat_manager_singleton);
- }
-
- return retval;
-}
-
-static void
-empathy_chat_manager_constructed (GObject *obj)
-{
- TpDBusDaemon *dbus_daemon;
-
- dbus_daemon = tp_dbus_daemon_dup (NULL);
-
- if (dbus_daemon != NULL)
- {
- tp_dbus_daemon_register_object (dbus_daemon,
- "/org/gnome/Empathy/ChatManager", obj);
-
- g_object_unref (dbus_daemon);
- }
-}
-
-static void
-empathy_chat_manager_class_init (
- EmpathyChatManagerClass *empathy_chat_manager_class)
-{
- GObjectClass *object_class = G_OBJECT_CLASS (empathy_chat_manager_class);
-
- object_class->finalize = empathy_chat_manager_finalize;
- object_class->constructor = empathy_chat_manager_constructor;
- object_class->constructed = empathy_chat_manager_constructed;
-
- signals[CLOSED_CHATS_CHANGED] =
- g_signal_new ("closed-chats-changed",
- G_TYPE_FROM_CLASS (object_class),
- G_SIGNAL_RUN_LAST,
- 0,
- NULL, NULL,
- g_cclosure_marshal_generic,
- G_TYPE_NONE,
- 1, G_TYPE_UINT, NULL);
-
- signals[DISPLAYED_CHATS_CHANGED] =
- g_signal_new ("displayed-chats-changed",
- G_TYPE_FROM_CLASS (object_class),
- G_SIGNAL_RUN_LAST,
- 0,
- NULL, NULL,
- g_cclosure_marshal_generic,
- G_TYPE_NONE,
- 1, G_TYPE_UINT, NULL);
-
- g_type_class_add_private (empathy_chat_manager_class,
- sizeof (EmpathyChatManagerPriv));
-}
-
-EmpathyChatManager *
-empathy_chat_manager_dup_singleton (void)
-{
- return g_object_new (EMPATHY_TYPE_CHAT_MANAGER, NULL);
-}
-
-void
-empathy_chat_manager_closed_chat (EmpathyChatManager *self,
- EmpathyChat *chat)
-{
- EmpathyChatManagerPriv *priv = GET_PRIV (self);
- ChatData *data;
- GHashTable *chats;
- gchar *message;
-
- data = chat_data_new (chat);
-
- DEBUG ("Adding %s to closed queue: %s",
- data->room ? "room" : "contact", data->id);
-
- g_queue_push_tail (priv->closed_queue, data);
-
- g_signal_emit (self, signals[CLOSED_CHATS_CHANGED], 0,
- g_queue_get_length (priv->closed_queue));
-
- /* If there was a message saved from last time it was closed
- * (perhaps by accident?) save it to our hash table so it can be
- * used again when the same chat pops up. Hot. */
- message = empathy_chat_dup_text (chat);
-
- chats = g_hash_table_lookup (priv->messages,
- tp_proxy_get_object_path (data->account));
-
- /* Don't create a new hash table if we don't already have one and we
- * don't actually have a message to save. */
- if (chats == NULL && tp_str_empty (message))
- {
- g_free (message);
- return;
- }
- else if (chats == NULL && !tp_str_empty (message))
- {
- chats = g_hash_table_new_full (g_str_hash, g_str_equal,
- g_free, g_free);
-
- g_hash_table_insert (priv->messages,
- g_strdup (tp_proxy_get_object_path (data->account)),
- chats);
- }
-
- if (tp_str_empty (message))
- {
- g_hash_table_remove (chats, data->id);
- /* might be '\0' */
- g_free (message);
- }
- else
- {
- /* takes ownership of message */
- g_hash_table_insert (chats, g_strdup (data->id), message);
- }
-}
-
-void
-empathy_chat_manager_undo_closed_chat (EmpathyChatManager *self,
- gint64 timestamp)
-{
- EmpathyChatManagerPriv *priv = GET_PRIV (self);
- ChatData *data;
-
- data = g_queue_pop_tail (priv->closed_queue);
-
- if (data == NULL)
- return;
-
- DEBUG ("Removing %s from closed queue and starting a chat with: %s",
- data->room ? "room" : "contact", data->id);
-
- if (data->room)
- empathy_join_muc (data->account, data->id, timestamp);
- else if (data->sms)
- empathy_sms_contact_id (data->account, data->id, timestamp,
- NULL, NULL);
- else
- empathy_chat_with_contact_id (data->account, data->id, timestamp,
- NULL, NULL);
-
- g_signal_emit (self, signals[CLOSED_CHATS_CHANGED], 0,
- g_queue_get_length (priv->closed_queue));
-
- chat_data_free (data);
-}
-
-guint
-empathy_chat_manager_get_num_closed_chats (EmpathyChatManager *self)
-{
- EmpathyChatManagerPriv *priv = GET_PRIV (self);
-
- return g_queue_get_length (priv->closed_queue);
-}
-
-static void
-empathy_chat_manager_dbus_undo_closed_chat (EmpSvcChatManager *manager,
- gint64 timestamp,
- DBusGMethodInvocation *context)
-{
- empathy_chat_manager_undo_closed_chat ((EmpathyChatManager *) manager,
- timestamp);
-
- emp_svc_chat_manager_return_from_undo_closed_chat (context);
-}
-
-static void
-svc_iface_init (gpointer g_iface,
- gpointer iface_data)
-{
- EmpSvcChatManagerClass *klass = (EmpSvcChatManagerClass *) g_iface;
-
-#define IMPLEMENT(x) emp_svc_chat_manager_implement_##x (\
- klass, empathy_chat_manager_dbus_##x)
- IMPLEMENT(undo_closed_chat);
-#undef IMPLEMENT
-}
-
-void
-empathy_chat_manager_call_undo_closed_chat (void)
-{
- TpDBusDaemon *dbus_daemon = tp_dbus_daemon_dup (NULL);
- TpProxy *proxy;
-
- if (dbus_daemon == NULL)
- return;
-
- proxy = g_object_new (TP_TYPE_PROXY,
- "dbus-daemon", dbus_daemon,
- "dbus-connection", tp_proxy_get_dbus_connection (TP_PROXY (dbus_daemon)),
- "bus-name", EMPATHY_CHAT_BUS_NAME,
- "object-path", "/org/gnome/Empathy/ChatManager",
- NULL);
-
- tp_proxy_add_interface_by_id (proxy, EMP_IFACE_QUARK_CHAT_MANAGER);
-
- emp_cli_chat_manager_call_undo_closed_chat (proxy, -1, empathy_get_current_action_time (),
- NULL, NULL, NULL, NULL);
-
- g_object_unref (proxy);
- g_object_unref (dbus_daemon);
-}
diff --git a/src/empathy-chat-manager.h b/src/empathy-chat-manager.h
deleted file mode 100644
index b5516c33..00000000
--- a/src/empathy-chat-manager.h
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
- * empathy-chat-manager.h - Header for EmpathyChatManager
- * Copyright (C) 2010 Collabora Ltd.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-#ifndef __EMPATHY_CHAT_MANAGER_H__
-#define __EMPATHY_CHAT_MANAGER_H__
-
-
-#include "empathy-chat.h"
-
-G_BEGIN_DECLS
-
-typedef struct _EmpathyChatManager EmpathyChatManager;
-typedef struct _EmpathyChatManagerClass EmpathyChatManagerClass;
-
-struct _EmpathyChatManagerClass
-{
- GObjectClass parent_class;
-};
-
-struct _EmpathyChatManager
-{
- GObject parent;
-};
-
-GType empathy_chat_manager_get_type (void);
-
-/* TYPE MACROS */
-#define EMPATHY_TYPE_CHAT_MANAGER \
- (empathy_chat_manager_get_type ())
-#define EMPATHY_CHAT_MANAGER(obj) \
- (G_TYPE_CHECK_INSTANCE_CAST((obj), EMPATHY_TYPE_CHAT_MANAGER, \
- EmpathyChatManager))
-#define EMPATHY_CHAT_MANAGER_CLASS(klass) \
- (G_TYPE_CHECK_CLASS_CAST((klass), EMPATHY_TYPE_CHAT_MANAGER, \
- EmpathyChatManagerClass))
-#define EMPATHY_IS_CHAT_MANAGER(obj) \
- (G_TYPE_CHECK_INSTANCE_TYPE((obj), EMPATHY_TYPE_CHAT_MANAGER))
-#define EMPATHY_IS_CHAT_MANAGER_CLASS(klass) \
- (G_TYPE_CHECK_CLASS_TYPE((klass), EMPATHY_TYPE_CHAT_MANAGER))
-#define EMPATHY_CHAT_MANAGER_GET_CLASS(obj) \
- (G_TYPE_INSTANCE_GET_CLASS ((obj), EMPATHY_TYPE_CHAT_MANAGER, \
- EmpathyChatManagerClass))
-
-EmpathyChatManager *empathy_chat_manager_dup_singleton (void);
-
-void empathy_chat_manager_closed_chat (EmpathyChatManager *self,
- EmpathyChat *chat);
-void empathy_chat_manager_undo_closed_chat (EmpathyChatManager *self,
- gint64 timestamp);
-guint empathy_chat_manager_get_num_closed_chats (EmpathyChatManager *self);
-
-void empathy_chat_manager_call_undo_closed_chat (void);
-
-G_END_DECLS
-
-#endif /* #ifndef __EMPATHY_CHAT_MANAGER_H__*/
diff --git a/src/empathy-chat-window.c b/src/empathy-chat-window.c
deleted file mode 100644
index 609b52c2..00000000
--- a/src/empathy-chat-window.c
+++ /dev/null
@@ -1,2894 +0,0 @@
-/*
- * Copyright (C) 2003-2007 Imendio AB
- * Copyright (C) 2007-2012 Collabora Ltd.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301 USA
- *
- * Authors: 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>
- * Rômulo Fernandes Machado <romulo@castorgroup.net>
- */
-
-#include "config.h"
-#include "empathy-chat-window.h"
-
-#include <glib/gi18n.h>
-#include <tp-account-widgets/tpaw-builder.h>
-#include <tp-account-widgets/tpaw-utils.h>
-
-#include "empathy-about-dialog.h"
-#include "empathy-chat-manager.h"
-#include "empathy-chatroom-manager.h"
-#include "empathy-client-factory.h"
-#include "empathy-geometry.h"
-#include "empathy-gsettings.h"
-#include "empathy-images.h"
-#include "empathy-invite-participant-dialog.h"
-#include "empathy-notify-manager.h"
-#include "empathy-request-util.h"
-#include "empathy-smiley-manager.h"
-#include "empathy-sound-manager.h"
-#include "empathy-ui-utils.h"
-#include "empathy-utils.h"
-
-#define DEBUG_FLAG EMPATHY_DEBUG_CHAT
-#include "empathy-debug.h"
-
-/* Macro to compare guint32 X timestamps, while accounting for wrapping around
- */
-#define X_EARLIER_OR_EQL(t1, t2) \
- ((t1 <= t2 && ((t2 - t1) < G_MAXUINT32/2)) \
- || (t1 >= t2 && (t1 - t2) > (G_MAXUINT32/2)) \
- )
-
-enum
-{
- PROP_INDIVIDUAL_MGR = 1
-};
-
-struct _EmpathyChatWindowPriv
-{
- EmpathyChat *current_chat;
- GList *chats;
- gboolean page_added;
- gboolean dnd_same_window;
- EmpathyChatroomManager *chatroom_manager;
- EmpathyNotifyManager *notify_mgr;
- EmpathyIndividualManager *individual_mgr;
- GtkWidget *notebook;
- NotifyNotification *notification;
-
- GtkTargetList *contact_targets;
- GtkTargetList *file_targets;
-
- EmpathyChatManager *chat_manager;
- gulong chat_manager_chats_changed_id;
-
- /* Menu items. */
- GtkUIManager *ui_manager;
- GtkAction *menu_conv_insert_smiley;
- GtkAction *menu_conv_favorite;
- GtkAction *menu_conv_join_chat;
- GtkAction *menu_conv_leave_chat;
- GtkAction *menu_conv_always_urgent;
- GtkAction *menu_conv_toggle_contacts;
-
- GtkAction *menu_edit_cut;
- GtkAction *menu_edit_copy;
- GtkAction *menu_edit_paste;
- GtkAction *menu_edit_find;
-
- GtkAction *menu_tabs_next;
- GtkAction *menu_tabs_prev;
- GtkAction *menu_tabs_undo_close_tab;
- GtkAction *menu_tabs_left;
- GtkAction *menu_tabs_right;
- GtkAction *menu_tabs_detach;
-
- /* Last user action time we acted upon to show a tab */
- guint32 x_user_action_time;
-
- GSettings *gsettings_chat;
- GSettings *gsettings_notif;
- GSettings *gsettings_ui;
-
- EmpathySoundManager *sound_mgr;
-
- gboolean updating_menu;
-};
-
-static GList *chat_windows = NULL;
-
-static const guint tab_accel_keys[] =
-{
- GDK_KEY_1, GDK_KEY_2, GDK_KEY_3, GDK_KEY_4, GDK_KEY_5,
- GDK_KEY_6, GDK_KEY_7, GDK_KEY_8, GDK_KEY_9, GDK_KEY_0
-};
-
-typedef enum
-{
- DND_DRAG_TYPE_CONTACT_ID,
- DND_DRAG_TYPE_INDIVIDUAL_ID,
- DND_DRAG_TYPE_URI_LIST,
- DND_DRAG_TYPE_TAB
-} DndDragType;
-
-static const GtkTargetEntry drag_types_dest[] =
-{
- { "text/contact-id", 0, DND_DRAG_TYPE_CONTACT_ID },
- { "text/x-individual-id", 0, DND_DRAG_TYPE_INDIVIDUAL_ID },
- { "GTK_NOTEBOOK_TAB", GTK_TARGET_SAME_APP, DND_DRAG_TYPE_TAB },
- /* FIXME: disabled because of bug #640513
- { "text/uri-list", 0, DND_DRAG_TYPE_URI_LIST },
- { "text/path-list", 0, DND_DRAG_TYPE_URI_LIST },
- */
-};
-
-static const GtkTargetEntry drag_types_dest_contact[] =
-{
- { "text/contact-id", 0, DND_DRAG_TYPE_CONTACT_ID },
- { "text/x-individual-id", 0, DND_DRAG_TYPE_INDIVIDUAL_ID },
-};
-
-static const GtkTargetEntry drag_types_dest_file[] =
-{
- /* must be first to be prioritized, in order to receive the
- * note's file path from Tomboy instead of an URI */
- { "text/path-list", 0, DND_DRAG_TYPE_URI_LIST },
- { "text/uri-list", 0, DND_DRAG_TYPE_URI_LIST },
-};
-
-static void chat_window_update (EmpathyChatWindow *window,
- gboolean update_contact_menu);
-
-static void empathy_chat_window_add_chat (EmpathyChatWindow *window,
- EmpathyChat *chat);
-
-static void empathy_chat_window_remove_chat (EmpathyChatWindow *window,
- EmpathyChat *chat);
-
-static void empathy_chat_window_move_chat (EmpathyChatWindow *old_window,
- EmpathyChatWindow *new_window,
- EmpathyChat *chat);
-
-static void empathy_chat_window_get_nb_chats (EmpathyChatWindow *self,
- guint *nb_rooms,
- guint *nb_private);
-
-G_DEFINE_TYPE (EmpathyChatWindow, empathy_chat_window, GTK_TYPE_WINDOW)
-
-static void
-chat_window_accel_cb (GtkAccelGroup *accelgroup,
- GObject *object,
- guint key,
- GdkModifierType mod,
- EmpathyChatWindow *self)
-{
- gint num = -1;
- guint i;
-
- 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 (self->priv->notebook), num);
-}
-
-static EmpathyChatWindow *
-chat_window_find_chat (EmpathyChat *chat)
-{
- GList *l, *ll;
-
- for (l = chat_windows; l; l = l->next)
- {
- EmpathyChatWindow *window = l->data;
-
- ll = g_list_find (window->priv->chats, chat);
- if (ll)
- return l->data;
- }
-
- return NULL;
-}
-
-static void
-remove_all_chats (EmpathyChatWindow *self)
-{
- g_object_ref (self);
-
- while (self->priv->chats)
- empathy_chat_window_remove_chat (self, self->priv->chats->data);
-
- g_object_unref (self);
-}
-
-static void
-confirm_close_response_cb (GtkWidget *dialog,
- int response,
- EmpathyChatWindow *window)
-{
- EmpathyChat *chat;
-
- chat = g_object_get_data (G_OBJECT (dialog), "chat");
-
- gtk_widget_destroy (dialog);
-
- if (response != GTK_RESPONSE_ACCEPT)
- return;
-
- if (chat != NULL)
- empathy_chat_window_remove_chat (window, chat);
- else
- remove_all_chats (window);
-}
-
-static void
-confirm_close (EmpathyChatWindow *self,
- gboolean close_window,
- guint n_rooms,
- EmpathyChat *chat)
-{
- GtkWidget *dialog;
- gchar *primary, *secondary;
-
- g_return_if_fail (n_rooms > 0);
-
- if (n_rooms > 1)
- g_return_if_fail (chat == NULL);
- else
- g_return_if_fail (chat != NULL);
-
- /* If there are no chats in this window, how could we possibly have got
- * here?
- */
- g_return_if_fail (self->priv->chats != NULL);
-
- /* Treat closing a window which only has one tab exactly like closing
- * that tab.
- */
- if (close_window && self->priv->chats->next == NULL)
- {
- close_window = FALSE;
- chat = self->priv->chats->data;
- }
-
- if (close_window)
- {
- primary = g_strdup (_("Close this window?"));
-
- if (n_rooms == 1)
- {
- gchar *chat_name = empathy_chat_dup_name (chat);
- secondary = g_strdup_printf (
- _("Closing this window will leave %s. You will "
- "not receive any further messages until you "
- "rejoin it."),
- chat_name);
- g_free (chat_name);
- }
- else
- {
- secondary = g_strdup_printf (
- /* Note to translators: the number of chats will
- * always be at least 2.
- */
- ngettext (
- "Closing this window will leave a chat room. You will "
- "not receive any further messages until you rejoin it.",
- "Closing this window will leave %u chat rooms. You will "
- "not receive any further messages until you rejoin them.",
- n_rooms),
- n_rooms);
- }
- }
- else
- {
- gchar *chat_name = empathy_chat_dup_name (chat);
- primary = g_strdup_printf (_("Leave %s?"), chat_name);
- secondary = g_strdup (
- _("You will not receive any further messages from this chat "
- "room until you rejoin it."));
- g_free (chat_name);
- }
-
- dialog = gtk_message_dialog_new (
- GTK_WINDOW (self),
- GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT,
- GTK_MESSAGE_WARNING,
- GTK_BUTTONS_CANCEL,
- "%s", primary);
-
- gtk_window_set_title (GTK_WINDOW (dialog), "");
- g_object_set (dialog, "secondary-text", secondary, NULL);
-
- g_free (primary);
- g_free (secondary);
-
- gtk_dialog_add_button (GTK_DIALOG (dialog),
- close_window ? _("Close window") : _("Leave room"),
- GTK_RESPONSE_ACCEPT);
- gtk_dialog_set_default_response (GTK_DIALOG (dialog),
- GTK_RESPONSE_ACCEPT);
-
- if (!close_window)
- g_object_set_data (G_OBJECT (dialog), "chat", chat);
-
- g_signal_connect (dialog, "response",
- G_CALLBACK (confirm_close_response_cb), self);
-
- gtk_window_present (GTK_WINDOW (dialog));
-}
-
-/* Returns TRUE if we should check if the user really wants to leave. If it's
- * a multi-user chat, and it has a TpChat (so there's an underlying channel, so
- * the user is actually in the room as opposed to having been kicked or gone
- * offline or something), then we should check.
- */
-static gboolean
-chat_needs_close_confirmation (EmpathyChat *chat)
-{
- return (empathy_chat_is_room (chat) &&
- empathy_chat_get_tp_chat (chat) != NULL);
-}
-
-static void
-maybe_close_chat (EmpathyChatWindow *window,
- EmpathyChat *chat)
-{
- g_return_if_fail (chat != NULL);
-
- if (chat_needs_close_confirmation (chat))
- confirm_close (window, FALSE, 1, chat);
- else
- empathy_chat_window_remove_chat (window, chat);
-}
-
-static void
-chat_window_close_clicked_cb (GtkAction *action,
- EmpathyChat *chat)
-{
- EmpathyChatWindow *window;
-
- window = chat_window_find_chat (chat);
- maybe_close_chat (window, chat);
-}
-
-static void
-chat_tab_style_updated_cb (GtkWidget *hbox,
- gpointer user_data)
-{
- GtkWidget *button;
- int char_width, h, w;
- PangoContext *context;
- const PangoFontDescription *font_desc;
- PangoFontMetrics *metrics;
-
- button = g_object_get_data (G_OBJECT (user_data),
- "chat-window-tab-close-button");
- context = gtk_widget_get_pango_context (hbox);
-
- font_desc = gtk_style_context_get_font (gtk_widget_get_style_context (hbox),
- GTK_STATE_FLAG_NORMAL);
-
- metrics = pango_context_get_metrics (context, font_desc,
- pango_context_get_language (context));
- char_width = pango_font_metrics_get_approximate_char_width (metrics);
- pango_font_metrics_unref (metrics);
-
- gtk_icon_size_lookup_for_settings (gtk_widget_get_settings (button),
- GTK_ICON_SIZE_MENU, &w, &h);
-
- /* Request at least about 12 chars width plus at least space for the status
- * image and the close button */
- gtk_widget_set_size_request (hbox,
- 12 * PANGO_PIXELS (char_width) + 2 * w, -1);
-
- gtk_widget_set_size_request (button, w, h);
-}
-
-static GtkWidget *
-create_close_button (void)
-{
- GtkWidget *button, *image;
- GtkStyleContext *context;
-
- button = gtk_button_new ();
-
- context = gtk_widget_get_style_context (button);
- gtk_style_context_add_class (context, "empathy-tab-close-button");
-
- gtk_button_set_relief (GTK_BUTTON (button), GTK_RELIEF_NONE);
- gtk_button_set_focus_on_click (GTK_BUTTON (button), FALSE);
-
- /* We don't want focus/keynav for the button to avoid clutter, and
- * Ctrl-W works anyway.
- */
- gtk_widget_set_can_focus (button, FALSE);
- gtk_widget_set_can_default (button, FALSE);
-
- image = gtk_image_new_from_icon_name ("window-close-symbolic",
- GTK_ICON_SIZE_MENU);
- gtk_widget_show (image);
-
- gtk_container_add (GTK_CONTAINER (button), image);
-
- return button;
-}
-
-static GtkWidget *
-chat_window_create_label (EmpathyChatWindow *window,
- EmpathyChat *chat,
- gboolean is_tab_label)
-{
- GtkWidget *hbox;
- GtkWidget *name_label;
- GtkWidget *status_image;
- GtkWidget *event_box;
- GtkWidget *event_box_hbox;
- PangoAttrList *attr_list;
- PangoAttribute *attr;
-
- /* The spacing between the button and the label. */
- hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 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);
- if (is_tab_label)
- 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),
- is_tab_label ? "chat-window-tab-label" : "chat-window-menu-label",
- name_label);
-
- status_image = gtk_image_new ();
-
- /* Spacing between the icon and label. */
- event_box_hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 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),
- is_tab_label ? "chat-window-tab-image" : "chat-window-menu-image",
- status_image);
- g_object_set_data (G_OBJECT (chat),
- is_tab_label ? "chat-window-tab-tooltip-widget" :
- "chat-window-menu-tooltip-widget",
- event_box);
-
- gtk_container_add (GTK_CONTAINER (event_box), event_box_hbox);
- gtk_box_pack_start (GTK_BOX (hbox), event_box, TRUE, TRUE, 0);
-
- if (is_tab_label)
- {
- GtkWidget *close_button;
- GtkWidget *sending_spinner;
-
- sending_spinner = gtk_spinner_new ();
-
- gtk_box_pack_start (GTK_BOX (hbox), sending_spinner,
- FALSE, FALSE, 0);
- g_object_set_data (G_OBJECT (chat),
- "chat-window-tab-sending-spinner",
- sending_spinner);
-
- close_button = create_close_button ();
- g_object_set_data (G_OBJECT (chat), "chat-window-tab-close-button",
- close_button);
-
- gtk_box_pack_end (GTK_BOX (hbox), close_button, FALSE, FALSE, 0);
-
- g_signal_connect (close_button,
- "clicked",
- G_CALLBACK (chat_window_close_clicked_cb), chat);
-
- /* React to theme changes and also setup the size correctly. */
- g_signal_connect (hbox, "style-updated",
- G_CALLBACK (chat_tab_style_updated_cb), chat);
- }
-
- gtk_widget_show_all (hbox);
-
- return hbox;
-}
-
-static void
-_submenu_notify_visible_changed_cb (GObject *object,
- GParamSpec *pspec,
- gpointer userdata)
-{
- g_signal_handlers_disconnect_by_func (object,
- _submenu_notify_visible_changed_cb, userdata);
-
- chat_window_update (EMPATHY_CHAT_WINDOW (userdata), TRUE);
-}
-
-static void
-chat_window_menu_context_update (EmpathyChatWindow *self,
- gint num_pages)
-{
- gboolean first_page;
- gboolean last_page;
- gboolean wrap_around;
- gboolean is_connected;
- gint page_num;
-
- page_num = gtk_notebook_get_current_page (
- GTK_NOTEBOOK (self->priv->notebook));
- first_page = (page_num == 0);
- last_page = (page_num == (num_pages - 1));
- g_object_get (gtk_settings_get_default (), "gtk-keynav-wrap-around",
- &wrap_around, NULL);
- is_connected = empathy_chat_get_tp_chat (self->priv->current_chat) != NULL;
-
- gtk_action_set_sensitive (self->priv->menu_tabs_next, (!last_page ||
- wrap_around));
- gtk_action_set_sensitive (self->priv->menu_tabs_prev, (!first_page ||
- wrap_around));
- gtk_action_set_sensitive (self->priv->menu_tabs_detach, num_pages > 1);
- gtk_action_set_sensitive (self->priv->menu_tabs_left, !first_page);
- gtk_action_set_sensitive (self->priv->menu_tabs_right, !last_page);
- gtk_action_set_sensitive (self->priv->menu_conv_insert_smiley, is_connected);
-}
-
-static void
-chat_window_conversation_menu_update (EmpathyChatWindow *self)
-{
- EmpathyTpChat *tp_chat;
- TpConnection *connection;
- GtkAction *action;
- gboolean sensitive = FALSE;
-
- g_return_if_fail (self->priv->current_chat != NULL);
-
- action = gtk_ui_manager_get_action (self->priv->ui_manager,
- "/chats_menubar/menu_conv/menu_conv_invite_participant");
- tp_chat = empathy_chat_get_tp_chat (self->priv->current_chat);
-
- if (tp_chat != NULL)
- {
- connection = tp_channel_get_connection (TP_CHANNEL (tp_chat));
-
- sensitive = empathy_tp_chat_can_add_contact (tp_chat) &&
- (tp_connection_get_status (connection, NULL) ==
- TP_CONNECTION_STATUS_CONNECTED);
- }
-
- gtk_action_set_sensitive (action, sensitive);
-}
-
-static void
-chat_window_contact_menu_update (EmpathyChatWindow *self)
-{
- GtkWidget *menu, *submenu, *orig_submenu;
-
- if (self->priv->updating_menu)
- return;
- self->priv->updating_menu = TRUE;
-
- menu = gtk_ui_manager_get_widget (self->priv->ui_manager,
- "/chats_menubar/menu_contact");
- orig_submenu = gtk_menu_item_get_submenu (GTK_MENU_ITEM (menu));
-
- if (orig_submenu == NULL || !gtk_widget_get_visible (orig_submenu))
- {
- submenu = empathy_chat_get_contact_menu (self->priv->current_chat);
-
- if (submenu != NULL)
- {
- /* gtk_menu_attach_to_widget () doesn't behave nicely here */
- g_object_set_data (G_OBJECT (submenu), "window", self);
-
- gtk_menu_item_set_submenu (GTK_MENU_ITEM (menu), submenu);
- gtk_widget_show (menu);
- gtk_widget_set_sensitive (menu, TRUE);
- }
- else
- {
- gtk_widget_set_sensitive (menu, FALSE);
- }
- }
- else
- {
- tp_g_signal_connect_object (orig_submenu,
- "notify::visible",
- (GCallback)_submenu_notify_visible_changed_cb, self, 0);
- }
-
- self->priv->updating_menu = FALSE;
-}
-
-static guint
-get_all_unread_messages (EmpathyChatWindow *self)
-{
- GList *l;
- guint nb = 0;
-
- for (l = self->priv->chats; l != NULL; l = g_list_next (l))
- nb += empathy_chat_get_nb_unread_messages (EMPATHY_CHAT (l->data));
-
- return nb;
-}
-
-static gchar *
-get_window_title_name (EmpathyChatWindow *self)
-{
- gchar *active_name, *ret;
- guint nb_chats;
- guint current_unread_msgs;
-
- nb_chats = g_list_length (self->priv->chats);
- g_assert (nb_chats > 0);
-
- active_name = empathy_chat_dup_name (self->priv->current_chat);
-
- current_unread_msgs = empathy_chat_get_nb_unread_messages (
- self->priv->current_chat);
-
- if (nb_chats == 1)
- {
- /* only one tab */
- if (current_unread_msgs == 0)
- ret = g_strdup (active_name);
- else
- ret = g_strdup_printf (ngettext (
- "%s (%d unread)",
- "%s (%d unread)", current_unread_msgs),
- active_name, current_unread_msgs);
- }
- else
- {
- guint nb_others = nb_chats - 1;
- guint all_unread_msgs;
-
- all_unread_msgs = get_all_unread_messages (self);
-
- if (all_unread_msgs == 0)
- {
- /* no unread message */
- ret = g_strdup_printf (ngettext (
- "%s (and %u other)",
- "%s (and %u others)", nb_others),
- active_name, nb_others);
- }
- else if (all_unread_msgs == current_unread_msgs)
- {
- /* unread messages are in the current tab */
- ret = g_strdup_printf (ngettext (
- "%s (%d unread)",
- "%s (%d unread)", current_unread_msgs),
- active_name, current_unread_msgs);
- }
- else if (current_unread_msgs == 0)
- {
- /* unread messages are in other tabs */
- ret = g_strdup_printf (ngettext (
- "%s (%d unread from others)",
- "%s (%d unread from others)",
- all_unread_msgs),
- active_name, all_unread_msgs);
- }
- else
- {
- /* unread messages are in all the tabs */
- ret = g_strdup_printf (ngettext (
- "%s (%d unread from all)",
- "%s (%d unread from all)",
- all_unread_msgs),
- active_name, all_unread_msgs);
- }
- }
-
- g_free (active_name);
-
- return ret;
-}
-
-static void
-chat_window_title_update (EmpathyChatWindow *self)
-{
- gchar *name;
-
- name = get_window_title_name (self);
- gtk_window_set_title (GTK_WINDOW (self), name);
- g_free (name);
-}
-
-static void
-chat_window_icon_update (EmpathyChatWindow *self,
- gboolean new_messages)
-{
- GdkPixbuf *icon;
- EmpathyContact *remote_contact;
- gboolean avatar_in_icon;
- guint n_chats;
-
- n_chats = g_list_length (self->priv->chats);
-
- /* Update window icon */
- if (new_messages)
- {
- gtk_window_set_icon_name (GTK_WINDOW (self),
- EMPATHY_IMAGE_MESSAGE);
- }
- else
- {
- avatar_in_icon = g_settings_get_boolean (self->priv->gsettings_chat,
- EMPATHY_PREFS_CHAT_AVATAR_IN_ICON);
-
- if (n_chats == 1 && avatar_in_icon)
- {
- remote_contact = empathy_chat_get_remote_contact (self->priv->current_chat);
- icon = empathy_pixbuf_avatar_from_contact_scaled (remote_contact,
- 0, 0);
- gtk_window_set_icon (GTK_WINDOW (self), icon);
-
- if (icon != NULL)
- g_object_unref (icon);
- }
- else
- {
- gtk_window_set_icon_name (GTK_WINDOW (self), NULL);
- }
- }
-}
-
-static void
-chat_window_close_button_update (EmpathyChatWindow *self,
- gint num_pages)
-{
- GtkWidget *chat;
- GtkWidget *chat_close_button;
- gint i;
-
- if (num_pages == 1)
- {
- chat = gtk_notebook_get_nth_page (GTK_NOTEBOOK (self->priv->notebook), 0);
- chat_close_button = g_object_get_data (G_OBJECT (chat),
- "chat-window-tab-close-button");
- gtk_widget_hide (chat_close_button);
- }
- else
- {
- for (i=0; i<num_pages; i++)
- {
- chat = gtk_notebook_get_nth_page (GTK_NOTEBOOK (self->priv->notebook), i);
- chat_close_button = g_object_get_data (G_OBJECT (chat),
- "chat-window-tab-close-button");
- gtk_widget_show (chat_close_button);
- }
- }
-}
-
-static void
-chat_window_update (EmpathyChatWindow *self,
- gboolean update_contact_menu)
-{
- gint num_pages;
-
- num_pages = gtk_notebook_get_n_pages (GTK_NOTEBOOK (self->priv->notebook));
-
- /* Update Tab menu */
- chat_window_menu_context_update (self, num_pages);
-
- chat_window_conversation_menu_update (self);
-
- /* If this update is due to a focus-in event, we know the menu will be
- the same as when we last left it, so no work to do. Besides, if we
- swap out the menu on a focus-in, we may confuse any external global
- menu watching. */
- if (update_contact_menu)
- {
- chat_window_contact_menu_update (self);
- }
-
- chat_window_title_update (self);
-
- chat_window_icon_update (self, get_all_unread_messages (self) > 0);
-
- chat_window_close_button_update (self, num_pages);
-}
-
-static void
-append_markup_printf (GString *string,
- const char *format,
- ...)
-{
- gchar *tmp;
- va_list args;
-
- va_start (args, format);
-
- tmp = g_markup_vprintf_escaped (format, args);
- g_string_append (string, tmp);
- g_free (tmp);
-
- va_end (args);
-}
-
-static void
-chat_window_update_chat_tab_full (EmpathyChat *chat,
- gboolean update_contact_menu)
-{
- EmpathyChatWindow *self;
- EmpathyContact *remote_contact;
- gchar *name;
- const gchar *id;
- TpAccount *account;
- const gchar *subject;
- const gchar *status = NULL;
- GtkWidget *widget;
- GString *tooltip;
- gchar *markup;
- const gchar *icon_name;
- GtkWidget *tab_image;
- GtkWidget *menu_image;
- GtkWidget *sending_spinner;
- guint nb_sending;
-
- self = chat_window_find_chat (chat);
- if (!self)
- return;
-
- /* Get information */
- name = empathy_chat_dup_name (chat);
- account = empathy_chat_get_account (chat);
- subject = empathy_chat_get_subject (chat);
- remote_contact = empathy_chat_get_remote_contact (chat);
-
- DEBUG ("Updating chat tab, name=%s, account=%s, subject=%s, "
- "remote_contact=%p",
- name, tp_proxy_get_object_path (account), subject, remote_contact);
-
- /* Update tab image */
- if (empathy_chat_get_tp_chat (chat) == NULL)
- {
- /* No TpChat, we are disconnected */
- icon_name = NULL;
- }
- else if (empathy_chat_get_nb_unread_messages (chat) > 0)
- {
- icon_name = EMPATHY_IMAGE_MESSAGE;
- }
- else if (remote_contact && empathy_chat_is_composing (chat))
- {
- icon_name = EMPATHY_IMAGE_TYPING;
- }
- else if (empathy_chat_is_sms_channel (chat))
- {
- icon_name = EMPATHY_IMAGE_SMS;
- }
- else if (remote_contact)
- {
- icon_name = empathy_icon_name_for_contact (remote_contact);
- }
- else
- {
- icon_name = EMPATHY_IMAGE_GROUP_MESSAGE;
- }
-
- tab_image = g_object_get_data (G_OBJECT (chat), "chat-window-tab-image");
- menu_image = g_object_get_data (G_OBJECT (chat), "chat-window-menu-image");
-
- if (icon_name != NULL)
- {
- gtk_image_set_from_icon_name (GTK_IMAGE (tab_image), icon_name,
- GTK_ICON_SIZE_MENU);
- gtk_widget_show (tab_image);
- gtk_image_set_from_icon_name (GTK_IMAGE (menu_image), icon_name,
- GTK_ICON_SIZE_MENU);
- gtk_widget_show (menu_image);
- }
- else
- {
- gtk_widget_hide (tab_image);
- gtk_widget_hide (menu_image);
- }
-
- /* Update the sending spinner */
- nb_sending = empathy_chat_get_n_messages_sending (chat);
- sending_spinner = g_object_get_data (G_OBJECT (chat),
- "chat-window-tab-sending-spinner");
-
- g_object_set (sending_spinner,
- "active", nb_sending > 0,
- "visible", nb_sending > 0,
- NULL);
-
- /* Update tab tooltip */
- tooltip = g_string_new (NULL);
-
- if (remote_contact)
- {
- id = empathy_contact_get_id (remote_contact);
- status = empathy_contact_get_presence_message (remote_contact);
- }
- else
- {
- id = name;
- }
-
- if (empathy_chat_is_sms_channel (chat))
- append_markup_printf (tooltip, "%s ", _("SMS:"));
-
- append_markup_printf (tooltip, "<b>%s</b><small> (%s)</small>",
- id, tp_account_get_display_name (account));
-
- if (nb_sending > 0)
- {
- char *tmp = g_strdup_printf (
- ngettext ("Sending %d message",
- "Sending %d messages",
- nb_sending),
- nb_sending);
-
- g_string_append (tooltip, "\n");
- g_string_append (tooltip, tmp);
-
- gtk_widget_set_tooltip_text (sending_spinner, tmp);
- g_free (tmp);
- }
-
- if (!TPAW_STR_EMPTY (status))
- append_markup_printf (tooltip, "\n<i>%s</i>", status);
-
- if (!TPAW_STR_EMPTY (subject))
- append_markup_printf (tooltip, "\n<b>%s</b> %s",
- _("Topic:"), subject);
-
- if (remote_contact && empathy_chat_is_composing (chat))
- append_markup_printf (tooltip, "\n%s", _("Typing a message."));
-
- if (remote_contact != NULL)
- {
- const gchar * const *types;
-
- types = empathy_contact_get_client_types (remote_contact);
- if (empathy_client_types_contains_mobile_device ((GStrv) types))
- {
- /* I'm on a mobile device ! */
- gchar *tmp = name;
-
- name = g_strdup_printf ("☎ %s", name);
- g_free (tmp);
- }
- }
-
- markup = g_string_free (tooltip, FALSE);
- widget = g_object_get_data (G_OBJECT (chat),
- "chat-window-tab-tooltip-widget");
- gtk_widget_set_tooltip_markup (widget, markup);
-
- widget = g_object_get_data (G_OBJECT (chat),
- "chat-window-menu-tooltip-widget");
- gtk_widget_set_tooltip_markup (widget, markup);
- g_free (markup);
-
- /* Update tab and menu label */
- if (empathy_chat_is_highlighted (chat))
- {
- markup = g_markup_printf_escaped (
- "<span color=\"red\" weight=\"bold\">%s</span>",
- name);
- }
- else
- {
- markup = g_markup_escape_text (name, -1);
- }
-
- widget = g_object_get_data (G_OBJECT (chat), "chat-window-tab-label");
- gtk_label_set_markup (GTK_LABEL (widget), markup);
- widget = g_object_get_data (G_OBJECT (chat), "chat-window-menu-label");
- gtk_label_set_markup (GTK_LABEL (widget), markup);
- g_free (markup);
-
- /* Update the window if it's the current chat */
- if (self->priv->current_chat == chat)
- chat_window_update (self, update_contact_menu);
-
- g_free (name);
-}
-
-static void
-chat_window_update_chat_tab (EmpathyChat *chat)
-{
- chat_window_update_chat_tab_full (chat, TRUE);
-}
-
-static void
-chat_window_chat_notify_cb (EmpathyChat *chat)
-{
- EmpathyChatWindow *window;
- 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_full (G_OBJECT (chat), "chat-window-remote-contact",
- g_object_ref (remote_contact), (GDestroyNotify) g_object_unref);
- }
-
- chat_window_update_chat_tab (chat);
-
- window = chat_window_find_chat (chat);
- if (window != NULL)
- chat_window_update (window, FALSE);
-}
-
-static void
-chat_window_insert_smiley_activate_cb (EmpathySmileyManager *manager,
- EmpathySmiley *smiley,
- gpointer user_data)
-{
- EmpathyChatWindow *self = user_data;
- EmpathyChat *chat;
- GtkTextBuffer *buffer;
- GtkTextIter iter;
-
- chat = self->priv->current_chat;
-
- 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->str, -1);
-}
-
-static void
-chat_window_conv_activate_cb (GtkAction *action,
- EmpathyChatWindow *self)
-{
- gboolean is_room;
- gboolean active;
- EmpathyContact *remote_contact = NULL;
- gboolean disconnected;
-
- /* Favorite room menu */
- is_room = empathy_chat_is_room (self->priv->current_chat);
- if (is_room)
- {
- const gchar *room;
- TpAccount *account;
- gboolean found = FALSE;
- EmpathyChatroom *chatroom;
-
- room = empathy_chat_get_id (self->priv->current_chat);
- account = empathy_chat_get_account (self->priv->current_chat);
- chatroom = empathy_chatroom_manager_find (self->priv->chatroom_manager,
- account, room);
-
- if (chatroom != NULL)
- found = empathy_chatroom_is_favorite (chatroom);
-
- DEBUG ("This room %s favorite", found ? "is" : "is not");
- gtk_toggle_action_set_active (
- GTK_TOGGLE_ACTION (self->priv->menu_conv_favorite), found);
-
- if (chatroom != NULL)
- found = empathy_chatroom_is_always_urgent (chatroom);
-
- gtk_toggle_action_set_active (
- GTK_TOGGLE_ACTION (self->priv->menu_conv_always_urgent), found);
- }
-
- gtk_action_set_visible (self->priv->menu_conv_favorite, is_room);
- gtk_action_set_visible (self->priv->menu_conv_always_urgent, is_room);
-
- /* Show contacts menu */
- g_object_get (self->priv->current_chat,
- "remote-contact", &remote_contact,
- "show-contacts", &active,
- NULL);
-
- if (remote_contact == NULL)
- {
- gtk_toggle_action_set_active (
- GTK_TOGGLE_ACTION (self->priv->menu_conv_toggle_contacts), active);
- }
-
- /* Menu-items to be visible for MUCs only */
- gtk_action_set_visible (self->priv->menu_conv_toggle_contacts,
- (remote_contact == NULL));
-
- disconnected = (empathy_chat_get_tp_chat (self->priv->current_chat) == NULL);
- if (disconnected)
- {
- gtk_action_set_visible (self->priv->menu_conv_join_chat, TRUE);
- gtk_action_set_visible (self->priv->menu_conv_leave_chat, FALSE);
- }
- else
- {
- TpChannel *channel = NULL;
- TpContact *self_contact = NULL;
- TpHandle self_handle = 0;
-
- channel = (TpChannel *) (empathy_chat_get_tp_chat (
- self->priv->current_chat));
- self_contact = tp_channel_group_get_self_contact (channel);
- if (self_contact == NULL)
- {
- /* The channel may not be a group */
- gtk_action_set_visible (self->priv->menu_conv_leave_chat, FALSE);
- }
- else
- {
- self_handle = tp_contact_get_handle (self_contact);
- /* There is sometimes a lag between the members-changed signal
- emitted on tp-chat and invalidated signal being emitted on the channel.
- Leave Chat menu-item should be sensitive only till our self-handle is
- a part of channel-members */
- gtk_action_set_visible (self->priv->menu_conv_leave_chat,
- self_handle != 0);
- }
-
- /* Join Chat is insensitive for a connected chat */
- gtk_action_set_visible (self->priv->menu_conv_join_chat, FALSE);
- }
-
- if (remote_contact != NULL)
- g_object_unref (remote_contact);
-}
-
-static void
-chat_window_clear_activate_cb (GtkAction *action,
- EmpathyChatWindow *self)
-{
- empathy_chat_clear (self->priv->current_chat);
-}
-
-static void
-chat_window_favorite_toggled_cb (GtkToggleAction *toggle_action,
- EmpathyChatWindow *self)
-{
- gboolean active;
- TpAccount *account;
- gchar *name;
- const gchar *room;
- EmpathyChatroom *chatroom;
-
- active = gtk_toggle_action_get_active (toggle_action);
- account = empathy_chat_get_account (self->priv->current_chat);
- room = empathy_chat_get_id (self->priv->current_chat);
- name = empathy_chat_dup_name (self->priv->current_chat);
-
- chatroom = empathy_chatroom_manager_ensure_chatroom (self->priv->chatroom_manager,
- account, room, name);
-
- empathy_chatroom_set_favorite (chatroom, active);
- g_object_unref (chatroom);
- g_free (name);
-}
-
-static void
-chat_window_always_urgent_toggled_cb (GtkToggleAction *toggle_action,
- EmpathyChatWindow *self)
-{
- gboolean active;
- TpAccount *account;
- gchar *name;
- const gchar *room;
- EmpathyChatroom *chatroom;
-
- active = gtk_toggle_action_get_active (toggle_action);
- account = empathy_chat_get_account (self->priv->current_chat);
- room = empathy_chat_get_id (self->priv->current_chat);
- name = empathy_chat_dup_name (self->priv->current_chat);
-
- chatroom = empathy_chatroom_manager_ensure_chatroom (self->priv->chatroom_manager,
- account, room, name);
-
- empathy_chatroom_set_always_urgent (chatroom, active);
- g_object_unref (chatroom);
- g_free (name);
-}
-
-static void
-chat_window_contacts_toggled_cb (GtkToggleAction *toggle_action,
- EmpathyChatWindow *self)
-{
- gboolean active;
-
- active = gtk_toggle_action_get_active (toggle_action);
-
- empathy_chat_set_show_contacts (self->priv->current_chat, active);
-}
-
-static void
-chat_window_invite_participant_activate_cb (GtkAction *action,
- EmpathyChatWindow *self)
-{
- GtkWidget *dialog;
- EmpathyTpChat *tp_chat;
- int response;
-
- g_return_if_fail (self->priv->current_chat != NULL);
-
- tp_chat = empathy_chat_get_tp_chat (self->priv->current_chat);
-
- dialog = empathy_invite_participant_dialog_new (
- GTK_WINDOW (self), tp_chat);
-
- gtk_widget_show (dialog);
-
- response = gtk_dialog_run (GTK_DIALOG (dialog));
-
- if (response == GTK_RESPONSE_ACCEPT)
- {
- TpContact *tp_contact;
- EmpathyContact *contact;
-
- tp_contact = empathy_invite_participant_dialog_get_selected (
- EMPATHY_INVITE_PARTICIPANT_DIALOG (dialog));
- if (tp_contact == NULL)
- goto out;
-
- contact = empathy_contact_dup_from_tp_contact (tp_contact);
-
- empathy_tp_chat_add (tp_chat, contact, _("Inviting you to this room"));
-
- g_object_unref (contact);
- }
-
-out:
- gtk_widget_destroy (dialog);
-}
-
-static void
-chat_window_join_chat_activate_cb (GtkAction *action,
- EmpathyChatWindow *self)
-{
- g_return_if_fail (self->priv->current_chat != NULL);
-
- empathy_chat_join_muc (self->priv->current_chat,
- empathy_chat_get_id (self->priv->current_chat));
-}
-
-static void
-chat_window_leave_chat_activate_cb (GtkAction *action,
- EmpathyChatWindow *self)
-{
- EmpathyTpChat * tp_chat;
-
- g_return_if_fail (self->priv->current_chat != NULL);
-
- tp_chat = empathy_chat_get_tp_chat (self->priv->current_chat);
- if (tp_chat != NULL)
- empathy_tp_chat_leave (tp_chat, "");
-}
-
-static void
-chat_window_close_activate_cb (GtkAction *action,
- EmpathyChatWindow *self)
-{
- g_return_if_fail (self->priv->current_chat != NULL);
-
- maybe_close_chat (self, self->priv->current_chat);
-}
-
-static void
-chat_window_edit_activate_cb (GtkAction *action,
- EmpathyChatWindow *self)
-{
- GtkClipboard *clipboard;
- GtkTextBuffer *buffer;
- gboolean text_available;
-
- g_return_if_fail (self->priv->current_chat != NULL);
-
- if (!empathy_chat_get_tp_chat (self->priv->current_chat))
- {
- gtk_action_set_sensitive (self->priv->menu_edit_copy, FALSE);
- gtk_action_set_sensitive (self->priv->menu_edit_cut, FALSE);
- gtk_action_set_sensitive (self->priv->menu_edit_paste, FALSE);
- return;
- }
-
- buffer = gtk_text_view_get_buffer (
- GTK_TEXT_VIEW (self->priv->current_chat->input_text_view));
-
- if (gtk_text_buffer_get_has_selection (buffer))
- {
- gtk_action_set_sensitive (self->priv->menu_edit_copy, TRUE);
- gtk_action_set_sensitive (self->priv->menu_edit_cut, TRUE);
- }
- else
- {
- gboolean selection;
-
- selection = empathy_theme_adium_get_has_selection (
- self->priv->current_chat->view);
-
- gtk_action_set_sensitive (self->priv->menu_edit_cut, FALSE);
- gtk_action_set_sensitive (self->priv->menu_edit_copy, selection);
- }
-
- clipboard = gtk_clipboard_get (GDK_SELECTION_CLIPBOARD);
- text_available = gtk_clipboard_wait_is_text_available (clipboard);
- gtk_action_set_sensitive (self->priv->menu_edit_paste, text_available);
-}
-
-static void
-chat_window_cut_activate_cb (GtkAction *action,
- EmpathyChatWindow *self)
-{
- g_return_if_fail (EMPATHY_IS_CHAT_WINDOW (self));
-
- empathy_chat_cut (self->priv->current_chat);
-}
-
-static void
-chat_window_copy_activate_cb (GtkAction *action,
- EmpathyChatWindow *self)
-{
- g_return_if_fail (EMPATHY_IS_CHAT_WINDOW (self));
-
- empathy_chat_copy (self->priv->current_chat);
-}
-
-static void
-chat_window_paste_activate_cb (GtkAction *action,
- EmpathyChatWindow *self)
-{
- g_return_if_fail (EMPATHY_IS_CHAT_WINDOW (self));
-
- empathy_chat_paste (self->priv->current_chat);
-}
-
-static void
-chat_window_find_activate_cb (GtkAction *action,
- EmpathyChatWindow *self)
-{
- g_return_if_fail (EMPATHY_IS_CHAT_WINDOW (self));
-
- empathy_chat_find (self->priv->current_chat);
-}
-
-static void
-chat_window_tabs_next_activate_cb (GtkAction *action,
- EmpathyChatWindow *self)
-{
- gint index_, numPages;
- gboolean wrap_around;
-
- g_object_get (gtk_settings_get_default (),
- "gtk-keynav-wrap-around", &wrap_around,
- NULL);
-
- index_ = gtk_notebook_get_current_page (GTK_NOTEBOOK (self->priv->notebook));
- numPages = gtk_notebook_get_n_pages (GTK_NOTEBOOK (self->priv->notebook));
-
- if (index_ == (numPages - 1) && wrap_around)
- {
- gtk_notebook_set_current_page (GTK_NOTEBOOK (self->priv->notebook), 0);
- return;
- }
-
- gtk_notebook_next_page (GTK_NOTEBOOK (self->priv->notebook));
-}
-
-static void
-chat_window_tabs_previous_activate_cb (GtkAction *action,
- EmpathyChatWindow *self)
-{
- gint index_, numPages;
- gboolean wrap_around;
-
- g_object_get (gtk_settings_get_default (),
- "gtk-keynav-wrap-around", &wrap_around,
- NULL);
-
- index_ = gtk_notebook_get_current_page (GTK_NOTEBOOK (self->priv->notebook));
- numPages = gtk_notebook_get_n_pages (GTK_NOTEBOOK (self->priv->notebook));
-
- if (index_ <= 0 && wrap_around)
- {
- gtk_notebook_set_current_page (GTK_NOTEBOOK (self->priv->notebook),
- numPages - 1);
- return;
- }
-
- gtk_notebook_prev_page (GTK_NOTEBOOK (self->priv->notebook));
-}
-
-static void
-chat_window_tabs_undo_close_tab_activate_cb (GtkAction *action,
- EmpathyChatWindow *self)
-{
- empathy_chat_manager_undo_closed_chat (self->priv->chat_manager,
- empathy_get_current_action_time ());
-}
-
-static void
-chat_window_tabs_left_activate_cb (GtkAction *action,
- EmpathyChatWindow *self)
-{
- EmpathyChat *chat;
- gint index_, num_pages;
-
- chat = self->priv->current_chat;
- index_ = gtk_notebook_get_current_page (GTK_NOTEBOOK (self->priv->notebook));
- if (index_ <= 0)
- return;
-
- gtk_notebook_reorder_child (GTK_NOTEBOOK (self->priv->notebook), GTK_WIDGET (chat),
- index_ - 1);
-
- num_pages = gtk_notebook_get_n_pages (GTK_NOTEBOOK (self->priv->notebook));
- chat_window_menu_context_update (self, num_pages);
-}
-
-static void
-chat_window_tabs_right_activate_cb (GtkAction *action,
- EmpathyChatWindow *self)
-{
- EmpathyChat *chat;
- gint index_, num_pages;
-
- chat = self->priv->current_chat;
- index_ = gtk_notebook_get_current_page (GTK_NOTEBOOK (self->priv->notebook));
-
- gtk_notebook_reorder_child (GTK_NOTEBOOK (self->priv->notebook), GTK_WIDGET (chat),
- index_ + 1);
-
- num_pages = gtk_notebook_get_n_pages (GTK_NOTEBOOK (self->priv->notebook));
- chat_window_menu_context_update (self, num_pages);
-}
-
-static EmpathyChatWindow *
-empathy_chat_window_new (void)
-{
- return g_object_new (EMPATHY_TYPE_CHAT_WINDOW,
- "default-width", 580,
- "default-height", 480,
- "title", _("Chat"),
- "role", "chat",
- NULL);
-}
-
-static void
-chat_window_detach_activate_cb (GtkAction *action,
- EmpathyChatWindow *self)
-{
- EmpathyChatWindow *new_window;
- EmpathyChat *chat;
-
- chat = self->priv->current_chat;
- new_window = empathy_chat_window_new ();
-
- empathy_chat_window_move_chat (self, new_window, chat);
-
- gtk_widget_show (GTK_WIDGET (new_window));
-}
-
-static void
-chat_window_help_contents_activate_cb (GtkAction *action,
- EmpathyChatWindow *self)
-{
- empathy_url_show (GTK_WIDGET (self), "help:empathy");
-}
-
-static void
-chat_window_help_about_activate_cb (GtkAction *action,
- EmpathyChatWindow *self)
-{
- empathy_about_dialog_new (GTK_WINDOW (self));
-}
-
-static gboolean
-chat_window_delete_event_cb (GtkWidget *dialog,
- GdkEvent *event,
- EmpathyChatWindow *self)
-{
- EmpathyChat *chat = NULL;
- guint n_rooms = 0;
- GList *l;
-
- DEBUG ("Delete event received");
-
- for (l = self->priv->chats; l != NULL; l = l->next)
- {
- if (chat_needs_close_confirmation (l->data))
- {
- chat = l->data;
- n_rooms++;
- }
- }
-
- if (n_rooms > 0)
- {
- confirm_close (self, TRUE, n_rooms, (n_rooms == 1 ? chat : NULL));
- }
- else
- {
- remove_all_chats (self);
- }
-
- return TRUE;
-}
-
-static void
-chat_window_composing_cb (EmpathyChat *chat,
- gboolean is_composing,
- EmpathyChatWindow *self)
-{
- chat_window_update_chat_tab (chat);
-}
-
-static void
-chat_window_set_urgency_hint (EmpathyChatWindow *self,
- gboolean urgent)
-{
- gtk_window_set_urgency_hint (GTK_WINDOW (self), urgent);
-}
-
-static void
-chat_window_notification_closed_cb (NotifyNotification *notify,
- EmpathyChatWindow *self)
-{
- g_object_unref (notify);
- if (self->priv->notification == notify)
- self->priv->notification = NULL;
-}
-
-static void
-chat_window_show_or_update_notification (EmpathyChatWindow *self,
- EmpathyMessage *message,
- EmpathyChat *chat)
-{
- EmpathyContact *sender;
- const gchar *header;
- char *escaped;
- const char *body;
- GdkPixbuf *pixbuf;
- gboolean res, has_x_canonical_append;
- NotifyNotification *notification = self->priv->notification;
-
- if (!empathy_notify_manager_notification_is_enabled (self->priv->notify_mgr))
- return;
-
- res = g_settings_get_boolean (self->priv->gsettings_notif,
- EMPATHY_PREFS_NOTIFICATIONS_FOCUS);
-
- if (!res)
- return;
-
- sender = empathy_message_get_sender (message);
- header = empathy_contact_get_alias (sender);
- body = empathy_message_get_body (message);
- escaped = g_markup_escape_text (body, -1);
-
- has_x_canonical_append = empathy_notify_manager_has_capability (
- self->priv->notify_mgr, EMPATHY_NOTIFY_MANAGER_CAP_X_CANONICAL_APPEND);
-
- if (notification != NULL && !has_x_canonical_append)
- {
- /* if the notification server supports x-canonical-append, it is
- better to not use notify_notification_update to avoid
- overwriting the current notification message */
- notify_notification_update (notification,
- header, escaped, NULL);
- }
- else
- {
- /* if the notification server supports x-canonical-append,
- the hint will be added, so that the message from the
- just created notification will be automatically appended
- to an existing notification with the same title.
- In this way the previous message will not be lost: the new
- message will appear below it, in the same notification */
- const gchar *category = empathy_chat_is_room (chat)
- ? EMPATHY_NOTIFICATION_CATEGORY_MENTIONED
- : EMPATHY_NOTIFICATION_CATEGORY_CHAT;
-
- notification = empathy_notify_manager_create_notification (header,
- escaped, NULL);
-
- if (self->priv->notification == NULL)
- self->priv->notification = notification;
-
- tp_g_signal_connect_object (notification, "closed",
- G_CALLBACK (chat_window_notification_closed_cb), self, 0);
-
- if (has_x_canonical_append)
- {
- /* We have to set a not empty string to keep libnotify happy */
- notify_notification_set_hint_string (notification,
- EMPATHY_NOTIFY_MANAGER_CAP_X_CANONICAL_APPEND, "1");
- }
-
- notify_notification_set_hint (notification,
- EMPATHY_NOTIFY_MANAGER_CAP_CATEGORY, g_variant_new_string (category));
- }
-
- pixbuf = empathy_notify_manager_get_pixbuf_for_notification (self->priv->notify_mgr,
- sender, EMPATHY_IMAGE_NEW_MESSAGE);
-
- if (pixbuf != NULL)
- {
- notify_notification_set_icon_from_pixbuf (notification, pixbuf);
- g_object_unref (pixbuf);
- }
-
- notify_notification_show (notification, NULL);
-
- g_free (escaped);
-}
-
-static gboolean
-empathy_chat_window_has_focus (EmpathyChatWindow *self)
-{
- gboolean has_focus;
-
- g_return_val_if_fail (EMPATHY_IS_CHAT_WINDOW (self), FALSE);
-
- g_object_get (self, "has-toplevel-focus", &has_focus, NULL);
-
- return has_focus;
-}
-
-static void
-chat_window_new_message_cb (EmpathyChat *chat,
- EmpathyMessage *message,
- gboolean pending,
- gboolean should_highlight,
- EmpathyChatWindow *self)
-{
- gboolean has_focus;
- gboolean needs_urgency;
- EmpathyContact *sender;
-
- has_focus = empathy_chat_window_has_focus (self);
-
- /* - if we're the sender, we play the sound if it's specified in the
- * preferences and we're not away.
- * - if we receive a message, we play the sound if it's specified in the
- * preferences and the window does not have focus on the chat receiving
- * the message.
- */
-
- sender = empathy_message_get_sender (message);
-
- if (empathy_contact_is_user (sender))
- {
- empathy_sound_manager_play (self->priv->sound_mgr, GTK_WIDGET (self),
- EMPATHY_SOUND_MESSAGE_OUTGOING);
- return;
- }
-
- if (has_focus && self->priv->current_chat == chat)
- {
- /* window and tab are focused so consider the message to be read */
-
- /* FIXME: see Bug#610994 and coments about it in EmpathyChatPriv */
- empathy_chat_messages_read (chat);
- return;
- }
-
- /* Update the chat tab if this is the first unread message */
- if (empathy_chat_get_nb_unread_messages (chat) == 1)
- {
- chat_window_update_chat_tab (chat);
- }
-
- /* If empathy_chat_is_room () returns TRUE, that means it's a named MUC.
- * If empathy_chat_get_remote_contact () returns NULL, that means it's
- * an unamed MUC (msn-like).
- * In case of a MUC, we set urgency if either:
- * a) the chatroom's always_urgent property is TRUE
- * b) the message contains our alias
- */
- if (empathy_chat_is_room (chat))
- {
- TpAccount *account;
- const gchar *room;
- EmpathyChatroom *chatroom;
-
- account = empathy_chat_get_account (chat);
- room = empathy_chat_get_id (chat);
-
- chatroom = empathy_chatroom_manager_find (self->priv->chatroom_manager,
- account, room);
-
- if (chatroom != NULL && empathy_chatroom_is_always_urgent (chatroom))
- needs_urgency = TRUE;
- else
- needs_urgency = should_highlight;
- }
- else
- {
- needs_urgency = TRUE;
- }
-
- if (needs_urgency)
- {
- if (!has_focus)
- chat_window_set_urgency_hint (self, TRUE);
-
- /* Pending messages have already been displayed and notified in the
- * approver, so we don't display a notification and play a sound
- * for those */
- if (!pending)
- {
- empathy_sound_manager_play (self->priv->sound_mgr,
- GTK_WIDGET (self), EMPATHY_SOUND_MESSAGE_INCOMING);
-
- chat_window_show_or_update_notification (self, message, chat);
- }
- }
-
- /* update the number of unread messages and the window icon */
- chat_window_title_update (self);
- chat_window_icon_update (self, TRUE);
-}
-
-static void
-chat_window_command_part (EmpathyChat *chat,
- GStrv strv)
-{
- EmpathyChat *chat_to_be_parted;
- EmpathyTpChat *tp_chat = NULL;
-
- if (strv[1] == NULL)
- {
- /* No chatroom ID specified */
- tp_chat = empathy_chat_get_tp_chat (chat);
-
- if (tp_chat)
- empathy_tp_chat_leave (tp_chat, "");
-
- return;
- }
-
- chat_to_be_parted = empathy_chat_window_find_chat (
- empathy_chat_get_account (chat), strv[1], FALSE);
-
- if (chat_to_be_parted != NULL)
- {
- /* Found a chatroom matching the specified ID */
- tp_chat = empathy_chat_get_tp_chat (chat_to_be_parted);
-
- if (tp_chat)
- empathy_tp_chat_leave (tp_chat, strv[2]);
- }
- else
- {
- gchar *message;
-
- /* Going by the syntax of PART command:
- *
- * /PART [<chatroom-ID>] [<reason>]
- *
- * Chatroom-ID is not a must to specify a reason.
- * If strv[1] (chatroom-ID) is not a valid identifier for a connected
- * MUC then the current chatroom should be parted and srtv[1] should
- * be treated as part of the optional part-message. */
- message = g_strconcat (strv[1], " ", strv[2], NULL);
- tp_chat = empathy_chat_get_tp_chat (chat);
-
- if (tp_chat)
- empathy_tp_chat_leave (tp_chat, message);
-
- g_free (message);
- }
-}
-
-static GtkNotebook *
-notebook_create_window_cb (GtkNotebook *source,
- GtkWidget *page,
- gint x,
- gint y,
- gpointer user_data)
-{
- EmpathyChatWindow *window, *new_window;
- EmpathyChat *chat;
-
- chat = EMPATHY_CHAT (page);
- window = chat_window_find_chat (chat);
-
- new_window = empathy_chat_window_new ();
-
- DEBUG ("Detach hook called");
-
- empathy_chat_window_move_chat (window, new_window, chat);
-
- gtk_widget_show (GTK_WIDGET (new_window));
- gtk_window_move (GTK_WINDOW (new_window), x, y);
-
- return NULL;
-}
-
-static void
-chat_window_page_switched_cb (GtkNotebook *notebook,
- GtkWidget *child,
- gint page_num,
- EmpathyChatWindow *self)
-{
- EmpathyChat *chat = EMPATHY_CHAT (child);
-
- DEBUG ("Page switched");
-
- if (self->priv->page_added)
- {
- self->priv->page_added = FALSE;
- empathy_chat_scroll_down (chat);
- }
- else if (self->priv->current_chat == chat)
- {
- return;
- }
-
- self->priv->current_chat = chat;
- empathy_chat_messages_read (chat);
-
- chat_window_update_chat_tab (chat);
-}
-
-static void
-chat_window_page_added_cb (GtkNotebook *notebook,
- GtkWidget *child,
- guint page_num,
- EmpathyChatWindow *self)
-{
- EmpathyChat *chat;
-
- /* 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 (self->priv->dnd_same_window)
- {
- DEBUG ("Page added (back to the same window)");
- self->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), self);
- g_signal_connect (chat, "new-message",
- G_CALLBACK (chat_window_new_message_cb), self);
- g_signal_connect (chat, "part-command-entered",
- G_CALLBACK (chat_window_command_part), NULL);
- g_signal_connect (chat, "notify::tp-chat",
- G_CALLBACK (chat_window_update_chat_tab), self);
-
- /* Set flag so we know to perform some special operations on
- * switch page due to the new page being added.
- */
- self->priv->page_added = TRUE;
-
- /* Get list of chats up to date */
- self->priv->chats = g_list_append (self->priv->chats, chat);
-
- chat_window_update_chat_tab (chat);
-}
-
-static void
-chat_window_page_removed_cb (GtkNotebook *notebook,
- GtkWidget *child,
- guint page_num,
- EmpathyChatWindow *self)
-{
- EmpathyChat *chat;
-
- /* 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 (self->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), self);
- g_signal_handlers_disconnect_by_func (chat,
- G_CALLBACK (chat_window_new_message_cb), self);
- g_signal_handlers_disconnect_by_func (chat,
- G_CALLBACK (chat_window_update_chat_tab), self);
-
- /* Keep list of chats up to date */
- self->priv->chats = g_list_remove (self->priv->chats, chat);
- empathy_chat_messages_read (chat);
-
- if (self->priv->chats == NULL)
- {
- gtk_widget_destroy (GTK_WIDGET (self));
- }
- else
- {
- chat_window_update (self, TRUE);
- }
-}
-
-static gboolean
-chat_window_focus_in_event_cb (GtkWidget *widget,
- GdkEvent *event,
- EmpathyChatWindow *self)
-{
- empathy_chat_messages_read (self->priv->current_chat);
-
- chat_window_set_urgency_hint (self, FALSE);
-
- /* Update the title, since we now mark all unread messages as read. */
- chat_window_update_chat_tab_full (self->priv->current_chat, FALSE);
-
- return FALSE;
-}
-
-static void
-contacts_loaded_cb (EmpathyIndividualManager *mgr,
- EmpathyChatWindow *self)
-{
- chat_window_contact_menu_update (self);
-}
-
-static gboolean
-chat_window_focus_out_event_cb (GtkWidget *widget,
- GdkEvent *event,
- EmpathyChatWindow *self)
-{
- if (self->priv->individual_mgr != NULL)
- return FALSE;
-
- /* Keep the individual manager alive so we won't fetch everything from Folks
- * each time we need to use it. Loading FolksAggregator can takes quite a
- * while (if user has a huge LDAP abook for example) and it blocks
- * the mainloop during most of this loading. We workaround this by loading
- * it when the chat window has been unfocused and so, hopefully, not impact
- * the reactivity of the chat window too much.
- *
- * The individual manager (and so Folks) is needed to know to which
- * FolksIndividual a TpContact belongs, including:
- * - empathy_chat_get_contact_menu: to list all the personas of the contact
- * - empathy_display_individual_info: to invoke gnome-contacts with the
- * FolksIndividual.id of the contact
- * - drag_data_received_individual_id: to find the individual associated
- * with the ID we received from the DnD in order to invite him.
- */
- self->priv->individual_mgr = empathy_individual_manager_dup_singleton ();
-
- if (!empathy_individual_manager_get_contacts_loaded (
- self->priv->individual_mgr))
- {
- /* We want to update the contact menu when Folks is loaded so we can
- * list all the personas of the contact. */
- tp_g_signal_connect_object (self->priv->individual_mgr, "contacts-loaded",
- G_CALLBACK (contacts_loaded_cb), self, 0);
- }
-
- g_object_notify (G_OBJECT (self), "individual-manager");
-
- return FALSE;
-}
-
-static gboolean
-chat_window_drag_drop (GtkWidget *widget,
- GdkDragContext *context,
- int x,
- int y,
- guint time_,
- EmpathyChatWindow *self)
-{
- GdkAtom target;
-
- target = gtk_drag_dest_find_target (widget, context, self->priv->file_targets);
- if (target == GDK_NONE)
- target = gtk_drag_dest_find_target (widget, context, self->priv->contact_targets);
-
- if (target != GDK_NONE)
- {
- gtk_drag_get_data (widget, context, target, time_);
- return TRUE;
- }
-
- return FALSE;
-}
-
-static gboolean
-chat_window_drag_motion (GtkWidget *widget,
- GdkDragContext *context,
- int x,
- int y,
- guint time_,
- EmpathyChatWindow *self)
-{
- GdkAtom target;
-
- target = gtk_drag_dest_find_target (widget, context, self->priv->file_targets);
-
- if (target != GDK_NONE)
- {
- /* This is a file drag. Ensure the contact is online and set the
- drag type to COPY. Note that it's possible that the tab will
- be switched by GTK+ after a timeout from drag_motion without
- getting another drag_motion to disable the drop. You have
- to hold your mouse really still.
- */
- EmpathyContact *contact;
-
- contact = empathy_chat_get_remote_contact (self->priv->current_chat);
-
- /* contact is NULL for multi-user chats. We don't do
- * file transfers to MUCs. We also don't send files
- * to offline contacts or contacts that don't support
- * file transfer.
- */
- if ((contact == NULL) || !empathy_contact_is_online (contact))
- {
- gdk_drag_status (context, 0, time_);
- return FALSE;
- }
-
- if (!(empathy_contact_get_capabilities (contact)
- & EMPATHY_CAPABILITIES_FT))
- {
- gdk_drag_status (context, 0, time_);
- return FALSE;
- }
-
- gdk_drag_status (context, GDK_ACTION_COPY, time_);
- return TRUE;
- }
-
- target = gtk_drag_dest_find_target (widget, context, self->priv->contact_targets);
- if (target != GDK_NONE)
- {
- /* This is a drag of a contact from a contact list. Set to COPY.
- FIXME: If this drag is to a MUC window, it invites the user.
- Otherwise, it opens a chat. Should we use a different drag
- type for invites? Should we allow ASK?
- */
- gdk_drag_status (context, GDK_ACTION_COPY, time_);
- return TRUE;
- }
-
- return FALSE;
-}
-
-static void
-drag_data_received_individual_id (EmpathyChatWindow *self,
- GtkWidget *widget,
- GdkDragContext *context,
- int x,
- int y,
- GtkSelectionData *selection,
- guint info,
- guint time_)
-{
- const gchar *id;
- FolksIndividual *individual;
- EmpathyTpChat *chat;
- TpContact *tp_contact;
- TpConnection *conn;
- EmpathyContact *contact;
-
- id = (const gchar *) gtk_selection_data_get_data (selection);
-
- DEBUG ("DND invididual %s", id);
-
- if (self->priv->current_chat == NULL)
- goto out;
-
- chat = empathy_chat_get_tp_chat (self->priv->current_chat);
- if (chat == NULL)
- goto out;
-
- if (!empathy_tp_chat_can_add_contact (chat))
- {
- DEBUG ("Can't invite contact to %s",
- tp_proxy_get_object_path (chat));
- goto out;
- }
-
- if (self->priv->individual_mgr == NULL)
- /* Not likely as we have to focus out the chat window in order to start
- * the DnD but best to be safe. */
- goto out;
-
- individual = empathy_individual_manager_lookup_member (
- self->priv->individual_mgr, id);
- if (individual == NULL)
- {
- DEBUG ("Failed to find individual %s", id);
- goto out;
- }
-
- conn = tp_channel_get_connection ((TpChannel *) chat);
- tp_contact = empathy_get_tp_contact_for_individual (individual, conn);
- if (tp_contact == NULL)
- {
- DEBUG ("Can't find a TpContact on connection %s for %s",
- tp_proxy_get_object_path (conn), id);
- goto out;
- }
-
- DEBUG ("Inviting %s to join %s", tp_contact_get_identifier (tp_contact),
- tp_channel_get_identifier ((TpChannel *) chat));
-
- contact = empathy_contact_dup_from_tp_contact (tp_contact);
- empathy_tp_chat_add (chat, contact, NULL);
- g_object_unref (contact);
-
-out:
- gtk_drag_finish (context, TRUE, FALSE, time_);
-}
-
-static void
-chat_window_drag_data_received (GtkWidget *widget,
- GdkDragContext *context,
- int x,
- int y,
- GtkSelectionData *selection,
- guint info,
- guint time_,
- EmpathyChatWindow *self)
-{
- if (info == DND_DRAG_TYPE_CONTACT_ID)
- {
- EmpathyChat *chat = NULL;
- EmpathyChatWindow *old_window;
- TpAccount *account = NULL;
- EmpathyClientFactory *factory;
- const gchar *id;
- gchar **strv;
- const gchar *account_id;
- const gchar *contact_id;
-
- id = (const gchar*) gtk_selection_data_get_data (selection);
-
- factory = empathy_client_factory_dup ();
-
- DEBUG ("DND contact from roster with id:'%s'", id);
-
- strv = g_strsplit (id, ":", 2);
- if (g_strv_length (strv) == 2)
- {
- account_id = strv[0];
- contact_id = strv[1];
-
- account = tp_simple_client_factory_ensure_account (
- TP_SIMPLE_CLIENT_FACTORY (factory), account_id, NULL, NULL);
-
- g_object_unref (factory);
- if (account != NULL)
- chat = empathy_chat_window_find_chat (account, contact_id, FALSE);
- }
-
- if (account == NULL)
- {
- g_strfreev (strv);
- gtk_drag_finish (context, FALSE, FALSE, time_);
- return;
- }
-
- if (!chat)
- {
- empathy_chat_with_contact_id (account, contact_id,
- empathy_get_current_action_time (), NULL, NULL);
-
- g_strfreev (strv);
- return;
- }
-
- g_strfreev (strv);
-
- old_window = chat_window_find_chat (chat);
- if (old_window)
- {
- if (old_window == self)
- {
- gtk_drag_finish (context, TRUE, FALSE, time_);
- return;
- }
-
- empathy_chat_window_move_chat (old_window, self, chat);
- }
- else
- {
- empathy_chat_window_add_chat (self, chat);
- }
-
- /* Added to take care of any outstanding chat events */
- empathy_chat_window_present_chat (chat,
- TP_USER_ACTION_TIME_NOT_USER_ACTION);
-
- /* 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_INDIVIDUAL_ID)
- {
- drag_data_received_individual_id (self, widget, context, x, y,
- selection, info, time_);
- }
- else if (info == DND_DRAG_TYPE_URI_LIST)
- {
- EmpathyContact *contact;
- const gchar *data;
-
- contact = empathy_chat_get_remote_contact (self->priv->current_chat);
-
- /* contact is NULL when current_chat is a multi-user chat.
- * We don't do file transfers to MUCs, so just cancel the drag.
- */
- if (contact == NULL)
- {
- gtk_drag_finish (context, TRUE, FALSE, time_);
- return;
- }
-
- data = (const gchar *) gtk_selection_data_get_data (selection);
- empathy_send_file_from_uri_list (contact, data);
-
- 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 *) gtk_selection_data_get_data (selection);
- old_window = chat_window_find_chat (*chat);
-
- if (old_window)
- {
- self->priv->dnd_same_window = (old_window == self);
-
- DEBUG ("DND tab (within same window: %s)",
- self->priv->dnd_same_window ? "Yes" : "No");
- }
- }
- else
- {
- DEBUG ("DND from unknown source");
- gtk_drag_finish (context, FALSE, FALSE, time_);
- }
-}
-
-static void
-chat_window_chat_manager_chats_changed_cb (EmpathyChatManager *chat_manager,
- guint num_chats_in_manager,
- EmpathyChatWindow *self)
-{
- gtk_action_set_sensitive (self->priv->menu_tabs_undo_close_tab,
- num_chats_in_manager > 0);
-}
-
-static void
-chat_window_finalize (GObject *object)
-{
- EmpathyChatWindow *self = EMPATHY_CHAT_WINDOW (object);
-
- DEBUG ("Finalized: %p", object);
-
- g_object_unref (self->priv->ui_manager);
- g_object_unref (self->priv->chatroom_manager);
- g_object_unref (self->priv->notify_mgr);
- g_object_unref (self->priv->gsettings_chat);
- g_object_unref (self->priv->gsettings_notif);
- g_object_unref (self->priv->gsettings_ui);
- g_object_unref (self->priv->sound_mgr);
- g_clear_object (&self->priv->individual_mgr);
-
- if (self->priv->notification != NULL)
- {
- notify_notification_close (self->priv->notification, NULL);
- self->priv->notification = NULL;
- }
-
- if (self->priv->contact_targets)
- gtk_target_list_unref (self->priv->contact_targets);
-
- if (self->priv->file_targets)
- gtk_target_list_unref (self->priv->file_targets);
-
- if (self->priv->chat_manager)
- {
- g_signal_handler_disconnect (self->priv->chat_manager,
- self->priv->chat_manager_chats_changed_id);
- g_object_unref (self->priv->chat_manager);
- self->priv->chat_manager = NULL;
- }
-
- chat_windows = g_list_remove (chat_windows, self);
-
- G_OBJECT_CLASS (empathy_chat_window_parent_class)->finalize (object);
-}
-
-static void
-chat_window_get_property (GObject *object,
- guint property_id,
- GValue *value,
- GParamSpec *pspec)
-{
- EmpathyChatWindow *self = EMPATHY_CHAT_WINDOW (object);
-
- switch (property_id)
- {
- case PROP_INDIVIDUAL_MGR:
- g_value_set_object (value, self->priv->individual_mgr);
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
- break;
- }
-}
-
-static void
-empathy_chat_window_class_init (EmpathyChatWindowClass *klass)
-{
- GObjectClass *object_class = G_OBJECT_CLASS (klass);
- GParamSpec *spec;
-
- object_class->get_property = chat_window_get_property;
- object_class->finalize = chat_window_finalize;
-
- spec = g_param_spec_object ("individual-manager", "individual-manager",
- "EmpathyIndividualManager",
- EMPATHY_TYPE_INDIVIDUAL_MANAGER,
- G_PARAM_READABLE | G_PARAM_STATIC_STRINGS);
- g_object_class_install_property (object_class, PROP_INDIVIDUAL_MGR, spec);
-
- g_type_class_add_private (object_class, sizeof (EmpathyChatWindowPriv));
-}
-
-static void
-empathy_chat_window_init (EmpathyChatWindow *self)
-{
- GtkBuilder *gui;
- GtkAccelGroup *accel_group;
- GClosure *closure;
- GtkWidget *menu;
- GtkWidget *submenu;
- guint i;
- GtkWidget *chat_vbox;
- gchar *filename;
- EmpathySmileyManager *smiley_manager;
-
- self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self,
- EMPATHY_TYPE_CHAT_WINDOW, EmpathyChatWindowPriv);
-
- filename = empathy_file_lookup ("empathy-chat-window.ui", "src");
- gui = tpaw_builder_get_file (filename,
- "chat_vbox", &chat_vbox,
- "ui_manager", &self->priv->ui_manager,
- "menu_conv_insert_smiley", &self->priv->menu_conv_insert_smiley,
- "menu_conv_favorite", &self->priv->menu_conv_favorite,
- "menu_conv_join_chat", &self->priv->menu_conv_join_chat,
- "menu_conv_leave_chat", &self->priv->menu_conv_leave_chat,
- "menu_conv_always_urgent", &self->priv->menu_conv_always_urgent,
- "menu_conv_toggle_contacts", &self->priv->menu_conv_toggle_contacts,
- "menu_edit_cut", &self->priv->menu_edit_cut,
- "menu_edit_copy", &self->priv->menu_edit_copy,
- "menu_edit_paste", &self->priv->menu_edit_paste,
- "menu_edit_find", &self->priv->menu_edit_find,
- "menu_tabs_next", &self->priv->menu_tabs_next,
- "menu_tabs_prev", &self->priv->menu_tabs_prev,
- "menu_tabs_undo_close_tab", &self->priv->menu_tabs_undo_close_tab,
- "menu_tabs_left", &self->priv->menu_tabs_left,
- "menu_tabs_right", &self->priv->menu_tabs_right,
- "menu_tabs_detach", &self->priv->menu_tabs_detach,
- NULL);
- g_free (filename);
-
- tpaw_builder_connect (gui, self,
- "menu_conv", "activate", chat_window_conv_activate_cb,
- "menu_conv_clear", "activate", chat_window_clear_activate_cb,
- "menu_conv_favorite", "toggled", chat_window_favorite_toggled_cb,
- "menu_conv_always_urgent", "toggled", chat_window_always_urgent_toggled_cb,
- "menu_conv_toggle_contacts", "toggled", chat_window_contacts_toggled_cb,
- "menu_conv_invite_participant", "activate", chat_window_invite_participant_activate_cb,
- "menu_conv_join_chat", "activate", chat_window_join_chat_activate_cb,
- "menu_conv_leave_chat", "activate", chat_window_leave_chat_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_edit_find", "activate", chat_window_find_activate_cb,
- "menu_tabs_next", "activate", chat_window_tabs_next_activate_cb,
- "menu_tabs_prev", "activate", chat_window_tabs_previous_activate_cb,
- "menu_tabs_undo_close_tab", "activate", chat_window_tabs_undo_close_tab_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_activate_cb,
- "menu_help_about", "activate", chat_window_help_about_activate_cb,
- NULL);
-
- empathy_set_css_provider (GTK_WIDGET (self));
-
- self->priv->gsettings_chat = g_settings_new (EMPATHY_PREFS_CHAT_SCHEMA);
- self->priv->gsettings_notif = g_settings_new (EMPATHY_PREFS_NOTIFICATIONS_SCHEMA);
- self->priv->gsettings_ui = g_settings_new (EMPATHY_PREFS_UI_SCHEMA);
- self->priv->chatroom_manager = empathy_chatroom_manager_dup_singleton (NULL);
-
- self->priv->sound_mgr = empathy_sound_manager_dup_singleton ();
-
- self->priv->notebook = gtk_notebook_new ();
-
- g_signal_connect (self->priv->notebook, "create-window",
- G_CALLBACK (notebook_create_window_cb), self);
-
- gtk_container_add (GTK_CONTAINER (self), chat_vbox);
-
- gtk_notebook_set_group_name (GTK_NOTEBOOK (self->priv->notebook),
- "EmpathyChatWindow");
- gtk_notebook_set_scrollable (GTK_NOTEBOOK (self->priv->notebook), TRUE);
- gtk_notebook_popup_enable (GTK_NOTEBOOK (self->priv->notebook));
- gtk_box_pack_start (GTK_BOX (chat_vbox), self->priv->notebook, TRUE, TRUE, 0);
- gtk_widget_show (self->priv->notebook);
-
- /* Set up accels */
- accel_group = gtk_accel_group_new ();
- gtk_window_add_accel_group (GTK_WINDOW (self), accel_group);
-
- for (i = 0; i < G_N_ELEMENTS (tab_accel_keys); i++)
- {
- closure = g_cclosure_new (G_CALLBACK (chat_window_accel_cb), self,
- NULL);
-
- gtk_accel_group_connect (accel_group, tab_accel_keys[i], GDK_MOD1_MASK, 0,
- closure);
- }
-
- g_object_unref (accel_group);
-
- /* Set up drag target lists */
- self->priv->contact_targets = gtk_target_list_new (drag_types_dest_contact,
- G_N_ELEMENTS (drag_types_dest_contact));
-
- self->priv->file_targets = gtk_target_list_new (drag_types_dest_file,
- G_N_ELEMENTS (drag_types_dest_file));
-
- /* Set up smiley menu */
- smiley_manager = empathy_smiley_manager_dup_singleton ();
- submenu = empathy_smiley_menu_new (smiley_manager,
- chat_window_insert_smiley_activate_cb, self);
-
- menu = gtk_ui_manager_get_widget (self->priv->ui_manager,
- "/chats_menubar/menu_conv/menu_conv_insert_smiley");
- gtk_menu_item_set_submenu (GTK_MENU_ITEM (menu), submenu);
- g_object_unref (smiley_manager);
-
- /* Set up signals we can't do with ui file since we may need to
- * block/unblock them at some later stage.
- */
-
- g_signal_connect (self, "delete_event",
- G_CALLBACK (chat_window_delete_event_cb), self);
- g_signal_connect (self, "focus_in_event",
- G_CALLBACK (chat_window_focus_in_event_cb), self);
- g_signal_connect (self, "focus_out_event",
- G_CALLBACK (chat_window_focus_out_event_cb), self);
- g_signal_connect_after (self->priv->notebook, "switch_page",
- G_CALLBACK (chat_window_page_switched_cb), self);
- g_signal_connect (self->priv->notebook, "page_added",
- G_CALLBACK (chat_window_page_added_cb), self);
- g_signal_connect (self->priv->notebook, "page_removed",
- G_CALLBACK (chat_window_page_removed_cb), self);
-
- /* Set up drag and drop */
- gtk_drag_dest_set (GTK_WIDGET (self->priv->notebook),
- GTK_DEST_DEFAULT_HIGHLIGHT,
- drag_types_dest,
- G_N_ELEMENTS (drag_types_dest),
- GDK_ACTION_MOVE | GDK_ACTION_COPY);
-
- /* connect_after to allow GtkNotebook's built-in tab switching */
- g_signal_connect_after (self->priv->notebook, "drag-motion",
- G_CALLBACK (chat_window_drag_motion), self);
- g_signal_connect (self->priv->notebook, "drag-data-received",
- G_CALLBACK (chat_window_drag_data_received), self);
- g_signal_connect (self->priv->notebook, "drag-drop",
- G_CALLBACK (chat_window_drag_drop), self);
-
- chat_windows = g_list_prepend (chat_windows, self);
-
- /* Set up private details */
- self->priv->chats = NULL;
- self->priv->current_chat = NULL;
- self->priv->notification = NULL;
-
- self->priv->notify_mgr = empathy_notify_manager_dup_singleton ();
-
- self->priv->chat_manager = empathy_chat_manager_dup_singleton ();
- self->priv->chat_manager_chats_changed_id = g_signal_connect (
- self->priv->chat_manager, "closed-chats-changed",
- G_CALLBACK (chat_window_chat_manager_chats_changed_cb), self);
-
- chat_window_chat_manager_chats_changed_cb (self->priv->chat_manager,
- empathy_chat_manager_get_num_closed_chats (self->priv->chat_manager), self);
-
- g_object_ref (self->priv->ui_manager);
- g_object_unref (gui);
-}
-
-/* Returns the window to open a new tab in if there is a suitable window,
- * otherwise, returns NULL indicating that a new window should be added.
- */
-static EmpathyChatWindow *
-empathy_chat_window_get_default (gboolean room)
-{
- GSettings *gsettings = g_settings_new (EMPATHY_PREFS_UI_SCHEMA);
- GList *l;
- gboolean separate_windows = TRUE;
-
- separate_windows = g_settings_get_boolean (gsettings,
- EMPATHY_PREFS_UI_SEPARATE_CHAT_WINDOWS);
-
- g_object_unref (gsettings);
-
- if (separate_windows)
- /* Always create a new window */
- return NULL;
-
- for (l = chat_windows; l; l = l->next)
- {
- EmpathyChatWindow *chat_window;
- guint nb_rooms, nb_private;
-
- chat_window = l->data;
-
- empathy_chat_window_get_nb_chats (chat_window, &nb_rooms, &nb_private);
-
- /* Skip the window if there aren't any rooms in it */
- if (room && nb_rooms == 0)
- continue;
-
- /* Skip the window if there aren't any 1-1 chats in it */
- if (!room && nb_private == 0)
- continue;
-
- return chat_window;
- }
-
- return NULL;
-}
-
-static void
-empathy_chat_window_add_chat (EmpathyChatWindow *self,
- EmpathyChat *chat)
-{
- GtkWidget *label;
- GtkWidget *popup_label;
- GtkWidget *child;
- GValue value = { 0, };
-
- g_return_if_fail (self != NULL);
- g_return_if_fail (EMPATHY_IS_CHAT (chat));
-
- /* Reference the chat object */
- g_object_ref (chat);
-
- /* If this window has just been created, position it */
- if (self->priv->chats == NULL)
- {
- const gchar *name = "chat-window";
- gboolean separate_windows;
-
- separate_windows = g_settings_get_boolean (self->priv->gsettings_ui,
- EMPATHY_PREFS_UI_SEPARATE_CHAT_WINDOWS);
-
- if (empathy_chat_is_room (chat))
- name = "room-window";
-
- if (separate_windows)
- {
- gint x, y;
-
- /* Save current position of the window */
- gtk_window_get_position (GTK_WINDOW (self), &x, &y);
-
- /* First bind to the 'generic' name. So new window for which we didn't
- * save a geometry yet will have the geometry of the last saved
- * window (bgo #601191). */
- empathy_geometry_bind (GTK_WINDOW (self), name);
-
- /* Restore previous position of the window so the newly created window
- * won't be in the same position as the latest saved window and so
- * completely hide it. */
- gtk_window_move (GTK_WINDOW (self), x, y);
-
- /* Then bind it to the name of the contact/room so we'll save the
- * geometry specific to this window */
- name = empathy_chat_get_id (chat);
- }
-
- empathy_geometry_bind (GTK_WINDOW (self), name);
- }
-
- child = GTK_WIDGET (chat);
- label = chat_window_create_label (self, chat, TRUE);
- popup_label = chat_window_create_label (self, chat, FALSE);
- 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);
- g_signal_connect (chat, "notify::sms-channel",
- G_CALLBACK (chat_window_chat_notify_cb), NULL);
- g_signal_connect (chat, "notify::n-messages-sending",
- G_CALLBACK (chat_window_chat_notify_cb), NULL);
- g_signal_connect (chat, "notify::nb-unread-messages",
- G_CALLBACK (chat_window_chat_notify_cb), NULL);
- chat_window_chat_notify_cb (chat);
-
- gtk_notebook_append_page_menu (GTK_NOTEBOOK (self->priv->notebook), child, label,
- popup_label);
- gtk_notebook_set_tab_reorderable (GTK_NOTEBOOK (self->priv->notebook), child, TRUE);
- gtk_notebook_set_tab_detachable (GTK_NOTEBOOK (self->priv->notebook), child, TRUE);
- g_value_init (&value, G_TYPE_BOOLEAN);
- g_value_set_boolean (&value, TRUE);
- gtk_container_child_set_property (GTK_CONTAINER (self->priv->notebook),
- child, "tab-expand" , &value);
- gtk_container_child_set_property (GTK_CONTAINER (self->priv->notebook),
- child, "tab-fill" , &value);
- g_value_unset (&value);
-
- DEBUG ("Chat added (%d references)", G_OBJECT (chat)->ref_count);
-}
-
-static void
-empathy_chat_window_remove_chat (EmpathyChatWindow *self,
- EmpathyChat *chat)
-{
- gint position;
- EmpathyContact *remote_contact;
- EmpathyChatManager *chat_manager;
-
- g_return_if_fail (self != NULL);
- g_return_if_fail (EMPATHY_IS_CHAT (chat));
-
- 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);
- }
-
- chat_manager = empathy_chat_manager_dup_singleton ();
- empathy_chat_manager_closed_chat (chat_manager, chat);
- g_object_unref (chat_manager);
-
- position = gtk_notebook_page_num (GTK_NOTEBOOK (self->priv->notebook),
- GTK_WIDGET (chat));
- gtk_notebook_remove_page (GTK_NOTEBOOK (self->priv->notebook), position);
-
- DEBUG ("Chat removed (%d references)", G_OBJECT (chat)->ref_count - 1);
-
- g_object_unref (chat);
-}
-
-static 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);
-}
-
-static void
-empathy_chat_window_switch_to_chat (EmpathyChatWindow *self,
- EmpathyChat *chat)
-{
- gint page_num;
-
- g_return_if_fail (self != NULL);
- g_return_if_fail (EMPATHY_IS_CHAT (chat));
-
- page_num = gtk_notebook_page_num (GTK_NOTEBOOK (self->priv->notebook),
- GTK_WIDGET (chat));
-
- gtk_notebook_set_current_page (GTK_NOTEBOOK (self->priv->notebook),
- page_num);
-}
-
-EmpathyChat *
-empathy_chat_window_find_chat (TpAccount *account,
- const gchar *id,
- gboolean sms_channel)
-{
- GList *l;
-
- g_return_val_if_fail (!TPAW_STR_EMPTY (id), NULL);
-
- for (l = chat_windows; l; l = l->next)
- {
- EmpathyChatWindow *window = l->data;
- GList *ll;
-
- for (ll = window->priv->chats; ll; ll = ll->next)
- {
- EmpathyChat *chat;
-
- chat = ll->data;
-
- if (account == empathy_chat_get_account (chat) &&
- !tp_strdiff (id, empathy_chat_get_id (chat)) &&
- sms_channel == empathy_chat_is_sms_channel (chat))
- return chat;
- }
- }
-
- return NULL;
-}
-
-EmpathyChatWindow *
-empathy_chat_window_present_chat (EmpathyChat *chat,
- gint64 timestamp)
-{
- EmpathyChatWindow *self;
- guint32 x_timestamp;
-
- g_return_val_if_fail (EMPATHY_IS_CHAT (chat), NULL);
-
- self = chat_window_find_chat (chat);
-
- /* If the chat has no window, create one */
- if (self == NULL)
- {
- self = empathy_chat_window_get_default (empathy_chat_is_room (chat));
- if (!self)
- {
- self = empathy_chat_window_new ();
-
- /* we want to display the newly created window even if we
- * don't present it */
- gtk_widget_show (GTK_WIDGET (self));
- }
-
- empathy_chat_window_add_chat (self, chat);
- }
-
- /* Don't force the window to show itself when it wasn't
- * an action by the user
- */
- if (!tp_user_action_time_should_present (timestamp, &x_timestamp))
- return self;
-
- if (x_timestamp != GDK_CURRENT_TIME)
- {
- /* Don't present or switch tab if the action was earlier than the
- * last actions X time, accounting for overflow and the first ever
- * presentation */
-
- if (self->priv->x_user_action_time != 0
- && X_EARLIER_OR_EQL (x_timestamp, self->priv->x_user_action_time))
- return self;
-
- self->priv->x_user_action_time = x_timestamp;
- }
-
- empathy_chat_window_switch_to_chat (self, chat);
-
- /* Don't use tpaw_window_present_with_time () which would move the window
- * to our current desktop but move to the window's desktop instead. This is
- * more coherent with Shell's 'app is ready' notication which moves the view
- * to the app desktop rather than moving the app itself. */
- empathy_move_to_window_desktop (GTK_WINDOW (self), x_timestamp);
-
- gtk_widget_grab_focus (chat->input_text_view);
- return self;
-}
-
-static void
-empathy_chat_window_get_nb_chats (EmpathyChatWindow *self,
- guint *nb_rooms,
- guint *nb_private)
-{
- GList *l;
- guint _nb_rooms = 0, _nb_private = 0;
-
- for (l = self->priv->chats; l != NULL; l = g_list_next (l))
- {
- if (empathy_chat_is_room (EMPATHY_CHAT (l->data)))
- _nb_rooms++;
- else
- _nb_private++;
- }
-
- if (nb_rooms != NULL)
- *nb_rooms = _nb_rooms;
- if (nb_private != NULL)
- *nb_private = _nb_private;
-}
-
-EmpathyIndividualManager *
-empathy_chat_window_get_individual_manager (EmpathyChatWindow *self)
-{
- return self->priv->individual_mgr;
-}
diff --git a/src/empathy-chat-window.h b/src/empathy-chat-window.h
deleted file mode 100644
index ae986cc7..00000000
--- a/src/empathy-chat-window.h
+++ /dev/null
@@ -1,89 +0,0 @@
-/*
- * Copyright (C) 2003-2007 Imendio AB
- * Copyright (C) 2007-2012 Collabora Ltd.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301 USA
- *
- * Authors: 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 <gtk/gtk.h>
-#include <telepathy-glib/telepathy-glib.h>
-
-#include "empathy-chat.h"
-#include "empathy-individual-manager.h"
-
-G_BEGIN_DECLS
-
-#define EMPATHY_TYPE_CHAT_WINDOW \
- (empathy_chat_window_get_type ())
-#define EMPATHY_CHAT_WINDOW(obj) \
- (G_TYPE_CHECK_INSTANCE_CAST((obj), \
- EMPATHY_TYPE_CHAT_WINDOW, \
- EmpathyChatWindow))
-#define EMPATHY_CHAT_WINDOW_CLASS(klass) \
- (G_TYPE_CHECK_CLASS_CAST((klass), \
- EMPATHY_TYPE_CHAT_WINDOW, \
- EmpathyChatWindowClass))
-#define EMPATHY_IS_CHAT_WINDOW(obj) \
- (G_TYPE_CHECK_INSTANCE_TYPE((obj), \
- EMPATHY_TYPE_CHAT_WINDOW))
-#define EMPATHY_IS_CHAT_WINDOW_CLASS(klass) \
- (G_TYPE_CHECK_CLASS_TYPE((klass), \
- EMPATHY_TYPE_CHAT_WINDOW))
-#define EMPATHY_CHAT_WINDOW_GET_CLASS(obj) \
- (G_TYPE_INSTANCE_GET_CLASS ((obj), \
- EMPATHY_TYPE_CHAT_WINDOW, \
- EmpathyChatWindowClass))
-
-
-typedef struct _EmpathyChatWindow EmpathyChatWindow;
-typedef struct _EmpathyChatWindowClass EmpathyChatWindowClass;
-typedef struct _EmpathyChatWindowPriv EmpathyChatWindowPriv;
-
-struct _EmpathyChatWindow
-{
- GtkWindow parent;
- EmpathyChatWindowPriv *priv;
-};
-
-struct _EmpathyChatWindowClass
-{
- GtkWindowClass parent_class;
-};
-
-GType empathy_chat_window_get_type (void);
-
-EmpathyChat * empathy_chat_window_find_chat (TpAccount *account,
- const gchar *id,
- gboolean sms_channel);
-
-EmpathyChatWindow * empathy_chat_window_present_chat (EmpathyChat *chat,
- gint64 timestamp);
-
-EmpathyIndividualManager * empathy_chat_window_get_individual_manager (
- EmpathyChatWindow *self);
-
-G_END_DECLS
-
-#endif
diff --git a/src/empathy-chat-window.ui b/src/empathy-chat-window.ui
deleted file mode 100644
index 4901978b..00000000
--- a/src/empathy-chat-window.ui
+++ /dev/null
@@ -1,236 +0,0 @@
-<?xml version="1.0"?>
-<!--*- mode: xml -*-->
-<interface>
- <object class="GtkUIManager" id="ui_manager">
- <child>
- <object class="GtkActionGroup" id="actiongroup1">
- <child>
- <object class="GtkAction" id="menu_conv">
- <property name="name">menu_conv</property>
- <property name="label" translatable="yes">_Conversation</property>
- </object>
- </child>
- <child>
- <object class="GtkAction" id="menu_conv_clear">
- <property name="stock_id">gtk-clear</property>
- <property name="name">menu_conv_clear</property>
- <property name="label" translatable="yes">C_lear</property>
- </object>
- <accelerator key="L" modifiers="GDK_CONTROL_MASK"/>
- </child>
- <child>
- <object class="GtkAction" id="menu_conv_insert_smiley">
- <property name="icon-name">face-smile</property>
- <property name="name">menu_conv_insert_smiley</property>
- <property name="label" translatable="yes">Insert _Smiley</property>
- </object>
- </child>
- <child>
- <object class="GtkToggleAction" id="menu_conv_favorite">
- <property name="name">menu_conv_favorite</property>
- <property name="label" translatable="yes">_Favorite Chat Room</property>
- </object>
- </child>
- <child>
- <object class="GtkToggleAction" id="menu_conv_always_urgent">
- <property name="name">menu_conv_always_urgent</property>
- <property name="label" translatable="yes">Notify for All Messages</property>
- </object>
- </child>
- <child>
- <object class="GtkToggleAction" id="menu_conv_toggle_contacts">
- <property name="name">menu_conv_toggle_contacts</property>
- <property name="active">TRUE</property>
- <property name="label" translatable="yes">_Show Contact List</property>
- </object>
- <accelerator key="F9" modifiers=""/>
- </child>
- <child>
- <object class="GtkAction" id="menu_conv_invite_participant">
- <property name="name">menu_conv_invite_participant</property>
- <property name="label" translatable="yes">Invite _Participant…</property>
- </object>
- </child>
- <child>
- <object class="GtkAction" id="menu_conv_join_chat">
- <property name="name">menu_conv_join_chat</property>
- <property name="label" translatable="yes">_Join Chat</property>
- </object>
- </child>
- <child>
- <object class="GtkAction" id="menu_conv_leave_chat">
- <property name="name">menu_conv_leave_chat</property>
- <property name="label" translatable="yes">Le_ave Chat</property>
- </object>
- </child>
- <child>
- <object class="GtkAction" id="menu_conv_close">
- <property name="stock_id">gtk-close</property>
- <property name="name">menu_conv_close</property>
- </object>
- <accelerator key="W" modifiers="GDK_CONTROL_MASK"/>
- </child>
- <child>
- <object class="GtkAction" id="menu_contact">
- <property name="name">menu_contact</property>
- <property name="label" translatable="yes">C_ontact</property>
- </object>
- </child>
- <child>
- <object class="GtkAction" id="menu_edit">
- <property name="name">menu_edit</property>
- <property name="label" translatable="yes">_Edit</property>
- </object>
- </child>
- <child>
- <object class="GtkAction" id="menu_edit_cut">
- <property name="stock_id">gtk-cut</property>
- <property name="name">menu_edit_cut</property>
- </object>
- <accelerator key="X" modifiers="GDK_CONTROL_MASK"/>
- </child>
- <child>
- <object class="GtkAction" id="menu_edit_copy">
- <property name="stock_id">gtk-copy</property>
- <property name="name">menu_edit_copy</property>
- </object>
- <accelerator key="C" modifiers="GDK_CONTROL_MASK"/>
- </child>
- <child>
- <object class="GtkAction" id="menu_edit_paste">
- <property name="stock_id">gtk-paste</property>
- <property name="name">menu_edit_paste</property>
- </object>
- <accelerator key="V" modifiers="GDK_CONTROL_MASK"/>
- </child>
- <child>
- <object class="GtkAction" id="menu_edit_find">
- <property name="stock_id">gtk-find</property>
- <property name="name">menu_edit_find</property>
- </object>
- <accelerator key="F" modifiers="GDK_CONTROL_MASK"/>
- </child>
- <child>
- <object class="GtkAction" id="menu_tabs">
- <property name="name">menu_tabs</property>
- <property name="label" translatable="yes">_Tabs</property>
- </object>
- </child>
- <child>
- <object class="GtkAction" id="menu_tabs_prev">
- <property name="name">menu_tabs_prev</property>
- <property name="label" translatable="yes">_Previous Tab</property>
- </object>
- <accelerator key="Page_Up" modifiers="GDK_CONTROL_MASK"/>
- </child>
- <child>
- <object class="GtkAction" id="menu_tabs_next">
- <property name="name">menu_tabs_next</property>
- <property name="label" translatable="yes">_Next Tab</property>
- </object>
- <accelerator key="Page_Down" modifiers="GDK_CONTROL_MASK"/>
- </child>
- <child>
- <object class="GtkAction" id="menu_tabs_undo_close_tab">
- <property name="name">menu_tabs_undo_close_tab</property>
- <property name="label" translatable="yes">_Undo Close Tab</property>
- </object>
- <accelerator key="t" modifiers="GDK_SHIFT_MASK | GDK_CONTROL_MASK"/>
- </child>
- <child>
- <object class="GtkAction" id="menu_tabs_left">
- <property name="name">menu_tabs_left</property>
- <property name="label" translatable="yes">Move Tab _Left</property>
- </object>
- <accelerator key="Page_Up" modifiers="GDK_CONTROL_MASK|GDK_SHIFT_MASK"/>
- </child>
- <child>
- <object class="GtkAction" id="menu_tabs_right">
- <property name="name">menu_tabs_right</property>
- <property name="label" translatable="yes">Move Tab _Right</property>
- </object>
- <accelerator key="Page_Down" modifiers="GDK_CONTROL_MASK|GDK_SHIFT_MASK"/>
- </child>
- <child>
- <object class="GtkAction" id="menu_tabs_detach">
- <property name="name">menu_tabs_detach</property>
- <property name="label" translatable="yes">_Detach Tab</property>
- </object>
- </child>
- <child>
- <object class="GtkAction" id="menu_help">
- <property name="name">menu_help</property>
- <property name="label" translatable="yes">_Help</property>
- </object>
- </child>
- <child>
- <object class="GtkAction" id="menu_help_contents">
- <property name="stock_id">gtk-help</property>
- <property name="name">menu_help_contents</property>
- <property name="label" translatable="yes">_Contents</property>
- </object>
- <accelerator key="F1" modifiers=""/>
- </child>
- <child>
- <object class="GtkAction" id="menu_help_about">
- <property name="stock_id">gtk-about</property>
- <property name="name">menu_help_about</property>
- </object>
- </child>
- </object>
- </child>
- <ui>
- <menubar name="chats_menubar">
- <menu action="menu_conv">
- <menuitem action="menu_conv_join_chat"/>
- <menuitem action="menu_conv_leave_chat"/>
- <separator/>
- <menuitem action="menu_conv_clear"/>
- <menuitem action="menu_conv_insert_smiley"/>
- <menuitem action="menu_conv_favorite"/>
- <menuitem action="menu_conv_always_urgent"/>
- <menuitem action="menu_conv_toggle_contacts"/>
- <menuitem action="menu_conv_invite_participant"/>
- <separator/>
- <menuitem action="menu_conv_close"/>
- </menu>
- <menu action="menu_contact" />
- <menu action="menu_edit">
- <menuitem action="menu_edit_cut"/>
- <menuitem action="menu_edit_copy"/>
- <menuitem action="menu_edit_paste"/>
- <separator/>
- <menuitem action="menu_edit_find"/>
- </menu>
- <menu action="menu_tabs">
- <menuitem action="menu_tabs_prev"/>
- <menuitem action="menu_tabs_next"/>
- <menuitem action="menu_tabs_undo_close_tab"/>
- <separator/>
- <menuitem action="menu_tabs_left"/>
- <menuitem action="menu_tabs_right"/>
- <menuitem action="menu_tabs_detach"/>
- </menu>
- <menu action="menu_help">
- <menuitem action="menu_help_contents"/>
- <menuitem action="menu_help_about"/>
- </menu>
- </menubar>
- </ui>
- </object>
- <object class="GtkVBox" id="chat_vbox">
- <property name="visible">True</property>
- <child>
- <object class="GtkMenuBar" constructor="ui_manager" id="chats_menubar">
- <property name="visible">True</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
- <child>
- <placeholder/>
- </child>
- </object>
-</interface>
diff --git a/src/empathy-chat.c b/src/empathy-chat.c
deleted file mode 100644
index 1c4c57d2..00000000
--- a/src/empathy-chat.c
+++ /dev/null
@@ -1,175 +0,0 @@
-/*
- * Copyright (C) 2007-2010 Collabora Ltd.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301 USA
- *
- * Authors: Xavier Claessens <xclaesse@gmail.com>
- * Guillaume Desmottes <guillaume.desmottes@collabora.co.uk>
- */
-
-#include "config.h"
-
-#include <glib/gi18n.h>
-#include <libnotify/notify.h>
-
-#include "empathy-chat-manager.h"
-#include "empathy-chat-resources.h"
-#include "empathy-presence-manager.h"
-#include "empathy-theme-manager.h"
-#include "empathy-ui-utils.h"
-#include "empathy-utils.h"
-
-#define DEBUG_FLAG EMPATHY_DEBUG_CHAT
-#include "empathy-debug.h"
-
-/* Exit after $TIMEOUT seconds if not displaying any call window */
-#define TIMEOUT 60
-
-#define EMPATHY_CHAT_DBUS_NAME "org.gnome.Empathy.Chat"
-
-static GtkApplication *app = NULL;
-static gboolean activated = FALSE;
-static gboolean use_timer = TRUE;
-
-static EmpathyChatManager *chat_mgr = NULL;
-
-static void
-displayed_chats_changed_cb (EmpathyChatManager *mgr,
- guint nb_chats,
- gpointer user_data)
-{
- DEBUG ("New chat count: %u", nb_chats);
-
- if (nb_chats == 0)
- g_application_release (G_APPLICATION (app));
- else
- g_application_hold (G_APPLICATION (app));
-}
-
-static void
-activate_cb (GApplication *application)
-{
- if (activated)
- return;
-
- activated = TRUE;
- empathy_gtk_init ();
-
- if (!use_timer)
- {
- /* keep a 'ref' to the application */
- g_application_hold (G_APPLICATION (application));
- }
-
- g_assert (chat_mgr == NULL);
- chat_mgr = empathy_chat_manager_dup_singleton ();
-
- g_signal_connect (chat_mgr, "displayed-chats-changed",
- G_CALLBACK (displayed_chats_changed_cb), GUINT_TO_POINTER (1));
-}
-
-int
-main (int argc,
- char *argv[])
-{
- GOptionContext *optcontext;
- GOptionEntry options[] = {
- { NULL }
- };
- GResource *resource;
-#ifdef ENABLE_DEBUG
- TpDebugSender *debug_sender;
-#endif
- GError *error = NULL;
- EmpathyPresenceManager *presence_mgr;
- EmpathyThemeManager *theme_mgr;
- gint retval;
-
- optcontext = g_option_context_new (N_("- Empathy Chat Client"));
- g_option_context_add_group (optcontext, gtk_get_option_group (FALSE));
- g_option_context_add_main_entries (optcontext, options, GETTEXT_PACKAGE);
- g_option_context_set_translation_domain (optcontext, GETTEXT_PACKAGE);
-
- if (!g_option_context_parse (optcontext, &argc, &argv, &error))
- {
- g_print ("%s\nRun '%s --help' to see a full list of available command "
- "line options.\n",
- error->message, argv[0]);
- g_warning ("Error in empathy-av init: %s", error->message);
- return EXIT_FAILURE;
- }
-
- g_option_context_free (optcontext);
-
- empathy_init ();
-
- /* Make empathy and empathy-chat appear as the same app in gnome-shell */
- gdk_set_program_class ("Empathy");
- gtk_window_set_default_icon_name ("empathy");
- textdomain (GETTEXT_PACKAGE);
-
- notify_init (_(PACKAGE_NAME));
-
- resource = empathy_chat_get_resource ();
- g_resources_register (resource);
-
- app = gtk_application_new (EMPATHY_CHAT_DBUS_NAME, G_APPLICATION_FLAGS_NONE);
- g_signal_connect (app, "activate", G_CALLBACK (activate_cb), NULL);
-
-#ifdef ENABLE_DEBUG
- /* Set up debug sender */
- debug_sender = tp_debug_sender_dup ();
- g_log_set_default_handler (tp_debug_sender_log_handler, G_LOG_DOMAIN);
-#endif
-
- /* Setting up Idle */
- presence_mgr = empathy_presence_manager_dup_singleton ();
-
- /* Keep the theme manager alive as it does some caching */
- theme_mgr = empathy_theme_manager_dup_singleton ();
-
- if (g_getenv ("EMPATHY_PERSIST") != NULL)
- {
- DEBUG ("Disable timer");
-
- use_timer = FALSE;
- }
-
- /* the inactivity timeout can only be set while the application is held */
- g_application_hold (G_APPLICATION (app));
- g_application_set_inactivity_timeout (G_APPLICATION (app), TIMEOUT * 1000);
- g_application_release (G_APPLICATION (app));
-
- DEBUG ("Waiting for text channels to handle");
-
- retval = g_application_run (G_APPLICATION (app), argc, argv);
-
- g_object_unref (app);
- g_object_unref (presence_mgr);
- g_object_unref (theme_mgr);
- tp_clear_object (&chat_mgr);
-
-#ifdef ENABLE_DEBUG
- g_object_unref (debug_sender);
-#endif
-
- g_resources_unregister (resource);
- g_resource_unref (resource);
-
- notify_uninit ();
-
- return retval;
-}
diff --git a/src/empathy-chat.gresource.xml b/src/empathy-chat.gresource.xml
deleted file mode 100644
index dd5a29b2..00000000
--- a/src/empathy-chat.gresource.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<gresources>
- <gresource prefix="/org/gnome/Empathy/Chat">
- <file>empathy-chat.js</file>
- </gresource>
-</gresources>
diff --git a/src/empathy-chat.js b/src/empathy-chat.js
deleted file mode 100644
index 23604995..00000000
--- a/src/empathy-chat.js
+++ /dev/null
@@ -1,92 +0,0 @@
-/*
- * Copyright (C) 2012 Red Hat, Inc.
- *
- * 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
- *
- * Author: Debarshi Ray <debarshir@src.gnome.org>
- */
-
-
-var chat = document.getElementById("Chat");
-
-
-function createHTMLNode(html) {
- var range = document.createRange();
- range.selectNode(chat);
- return range.createContextualFragment(html);
-}
-
-
-function getContentsNode(node) {
- var post = node.getElementsByClassName("post")[0];
- return post.getElementsByClassName("post-contents")[0];
-}
-
-
-// Remove all but the last #insert
-function removeInsertNodes(node) {
- var inserts = node.querySelectorAll("#insert");
- if (inserts.length < 2)
- return;
-
- for (var i = 0; i < inserts.length - 1; i++) {
- var insert = inserts[i];
- insert.parentNode.removeChild(insert);
- }
-}
-
-
-// Remove all but the first #prepend
-function removePrependNodes(node) {
- var pres = node.querySelectorAll("#prepend");
- if (pres.length < 2)
- return;
-
- for (var i = 1; i < pres.length; i++) {
- var pre = pres[i];
- pre.parentNode.removeChild(pre);
- }
-}
-
-
-function prepend(html) {
- var node = createHTMLNode(html);
- chat.insertBefore(node, chat.firstChild);
-
- // The lastChild should retain the #insert
- if (chat.children.length == 1)
- return;
-
- removeInsertNodes(chat);
- removePrependNodes(chat);
-}
-
-
-function prependPrev(html) {
- var pre = chat.firstChild.querySelector("#prepend");
-
- // For themes that don't support #prepend
- if (!pre) {
- prepend(html);
- return;
- }
-
- var contents = pre.parentNode;
- var node = createHTMLNode(html);
-
- // Skip both the #prepend and #insert
- for (var i = node.childNodes.length - 2; i > 0; i--)
- contents.insertBefore(node.childNodes[i], pre.nextSibling);
-}
diff --git a/src/empathy-chatrooms-window.c b/src/empathy-chatrooms-window.c
deleted file mode 100644
index 25c7814f..00000000
--- a/src/empathy-chatrooms-window.c
+++ /dev/null
@@ -1,487 +0,0 @@
-/* -*- 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., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301 USA
- *
- * Authors: Xavier Claessens <xclaesse@gmail.com>
- * Martyn Russell <martyn@imendio.com>
- * Mikael Hallendal <micke@imendio.com>
- */
-
-#include "config.h"
-#include "empathy-chatrooms-window.h"
-
-#include <glib/gi18n.h>
-#include <tp-account-widgets/tpaw-builder.h>
-
-#include "empathy-account-chooser.h"
-#include "empathy-chatroom-manager.h"
-#include "empathy-ui-utils.h"
-#include "empathy-utils.h"
-
-typedef struct {
- EmpathyChatroomManager *manager;
-
- GtkWidget *window;
- GtkWidget *hbox_account;
- GtkWidget *label_account;
- GtkWidget *account_chooser;
- GtkWidget *treeview;
- GtkWidget *button_remove;
- GtkWidget *button_close;
-} 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 void chatrooms_window_button_remove_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;
- GtkBuilder *gui;
- gchar *filename;
- GtkWidget *sw, *toolbar;
- GtkStyleContext *context;
-
- if (window) {
- gtk_window_present (GTK_WINDOW (window->window));
- return;
- }
-
- window = g_new0 (EmpathyChatroomsWindow, 1);
-
- filename = empathy_file_lookup ("empathy-chatrooms-window.ui", "src");
- gui = tpaw_builder_get_file (filename,
- "chatrooms_window", &window->window,
- "hbox_account", &window->hbox_account,
- "label_account", &window->label_account,
- "sw_room_list", &sw,
- "treeview", &window->treeview,
- "toolbar_remove", &toolbar,
- "button_remove", &window->button_remove,
- "button_close", &window->button_close,
- NULL);
- g_free (filename);
-
- /* join the remove toolbar to the treeview */
- context = gtk_widget_get_style_context (sw);
- gtk_style_context_set_junction_sides (context, GTK_JUNCTION_BOTTOM);
- context = gtk_widget_get_style_context (toolbar);
- gtk_style_context_set_junction_sides (context, GTK_JUNCTION_TOP);
-
- tpaw_builder_connect (gui, window,
- "chatrooms_window", "destroy", chatrooms_window_destroy_cb,
- "button_remove", "clicked", chatrooms_window_button_remove_clicked_cb,
- "button_close", "clicked", chatrooms_window_button_close_clicked_cb,
- NULL);
-
- g_object_unref (gui);
-
- g_object_add_weak_pointer (G_OBJECT (window->window), (gpointer) &window);
-
- /* Get the session and chat room manager */
- window->manager = empathy_chatroom_manager_dup_singleton (NULL);
-
- 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_supports_chatrooms,
- 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);
-
- /* 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);
-
- /* 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;
- EmpathyAccountChooser *account_chooser;
- TpAccount *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_dup_account (account_chooser);
-
- chatrooms = empathy_chatroom_manager_get_chatrooms (window->manager, account);
-
- /* 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_insert_with_values (store, &iter, -1,
- 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);
-
- gtk_list_store_set (store, &iter, COL_AUTO_CONNECT, enabled, -1);
- gtk_tree_path_free (path);
- g_object_unref (chatroom);
-}
-
-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_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;
- TpAccount *account;
-
- account_chooser = EMPATHY_ACCOUNT_CHOOSER (window->account_chooser);
- account = empathy_account_chooser_dup_account (account_chooser);
-
- if (!account) {
- chatrooms_window_model_add (window, chatroom, FALSE);
- } else {
- if (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/src/empathy-chatrooms-window.h b/src/empathy-chatrooms-window.h
deleted file mode 100644
index 1d8476ec..00000000
--- a/src/empathy-chatrooms-window.h
+++ /dev/null
@@ -1,37 +0,0 @@
-/* -*- 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., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301 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/src/empathy-chatrooms-window.ui b/src/empathy-chatrooms-window.ui
deleted file mode 100644
index 30700c50..00000000
--- a/src/empathy-chatrooms-window.ui
+++ /dev/null
@@ -1,126 +0,0 @@
-<?xml version="1.0"?>
-<!--*- mode: xml -*-->
-<interface>
- <object 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>
- <object class="GtkVBox" id="vbox12">
- <property name="visible">True</property>
- <property name="spacing">12</property>
- <child>
- <object class="GtkVBox" id="vbox18">
- <property name="visible">True</property>
- <property name="spacing">18</property>
- <child>
- <object class="GtkHBox" id="hbox_account">
- <property name="visible">True</property>
- <property name="spacing">12</property>
- <child>
- <object class="GtkLabel" id="label_account">
- <property name="visible">True</property>
- <property name="xalign">0</property>
- <property name="label" translatable="yes">Account:</property>
- </object>
- <packing>
- <property name="expand">False</property>
- </packing>
- </child>
- <child>
- <placeholder/>
- </child>
- </object>
- <packing>
- <property name="expand">False</property>
- </packing>
- </child>
- <child>
- <object class="GtkVBox" id="box_room_list">
- <property name="visible">True</property>
- <child>
- <object class="GtkScrolledWindow" id="sw_room_list">
- <property name="width_request">408</property>
- <property name="height_request">252</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>
- <object class="GtkTreeView" id="treeview">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="has_focus">True</property>
- </object>
- </child>
- </object>
- <packing>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkToolbar" id="toolbar_remove">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="icon_size">1</property>
- <style>
- <class name="inline-toolbar"/>
- </style>
- <child>
- <object class="GtkToolButton" id="button_remove">
- <property name="tooltip-text" translatable="yes">Remove</property>
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="receives_default">True</property>
- <property name="icon_name">list-remove-symbolic</property>
- <property name="use_underline">True</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="homogeneous">True</property>
- </packing>
- </child>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="position">1</property>
- </packing>
- </child>
- </object>
- </child>
- </object>
- </child>
- <child>
- <object class="GtkHButtonBox" id="hbuttonbox3">
- <property name="visible">True</property>
- <property name="spacing">6</property>
- <property name="layout_style">end</property>
- <child>
- <object class="GtkButton" id="button_close">
- <property name="label">gtk-close</property>
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="can_default">True</property>
- <property name="receives_default">True</property>
- <property name="use_stock">True</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">1</property>
- </packing>
- </child>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">1</property>
- </packing>
- </child>
- </object>
- </child>
- </object>
-</interface>
diff --git a/src/empathy-debug-window.c b/src/empathy-debug-window.c
deleted file mode 100644
index fcf5804d..00000000
--- a/src/empathy-debug-window.c
+++ /dev/null
@@ -1,2214 +0,0 @@
-/*
-* Copyright (C) 2009 Collabora Ltd.
-*
-* This library is free software; you can redistribute it and/or
-* modify it under the terms of the GNU Lesser General Public
-* License as published by the Free Software Foundation; either
-* version 2.1 of the License, or (at your option) any later version.
-*
-* This library is distributed in the hope that it will be useful,
-* but WITHOUT ANY WARRANTY; without even the implied warranty of
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-* Lesser General Public License for more details.
-*
-* You should have received a copy of the GNU Lesser General Public
-* License along with this library; if not, write to the Free Software
-* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
-*
-* Authors: Jonny Lamb <jonny.lamb@collabora.co.uk>
-* Cosimo Cecchi <cosimo.cecchi@collabora.co.uk>
-*/
-
-#include "config.h"
-#include "empathy-debug-window.h"
-
-#include <glib/gi18n.h>
-#include <libsoup/soup.h>
-#include <tp-account-widgets/tpaw-utils.h>
-
-#include "empathy-geometry.h"
-#include "empathy-ui-utils.h"
-#include "empathy-utils.h"
-
-#define DEBUG_FLAG EMPATHY_DEBUG_OTHER
-#include "empathy-debug.h"
-
-G_DEFINE_TYPE (EmpathyDebugWindow, empathy_debug_window,
- GTK_TYPE_WINDOW)
-
-typedef enum
-{
- SERVICE_TYPE_CM = 0,
- SERVICE_TYPE_CLIENT,
-} ServiceType;
-
-enum
-{
- COL_DEBUG_MESSAGE = 0,
- NUM_DEBUG_COLS
-};
-
-enum
-{
- COL_NAME = 0,
- COL_UNIQUE_NAME,
- COL_GONE,
- COL_ACTIVE_BUFFER,
- COL_PAUSE_BUFFER,
- COL_PROXY,
- NUM_COLS
-};
-
-enum
-{
- COL_LEVEL_NAME,
- COL_LEVEL_VALUE,
- NUM_COLS_LEVEL
-};
-
-#define GET_PRIV(obj) EMPATHY_GET_PRIV (obj, EmpathyDebugWindow)
-struct _EmpathyDebugWindowPriv
-{
- /* Toolbar items */
- GtkWidget *chooser;
- GtkToolItem *save_button;
- GtkToolItem *send_to_pastebin;
- GtkToolItem *copy_button;
- GtkToolItem *clear_button;
- GtkToolItem *pause_button;
- GtkToolItem *level_label;
- GtkWidget *level_filter;
-
- /* TreeView */
- GtkTreeModel *store_filter;
- GtkWidget *view;
- GtkWidget *scrolled_win;
- GtkWidget *not_supported_label;
- gboolean view_visible;
-
- /* Connection */
- TpDBusDaemon *dbus;
- TpProxySignalConnection *name_owner_changed_signal;
-
- /* Whether NewDebugMessage will be fired */
- gboolean paused;
-
- /* Service (CM, Client) chooser store */
- GtkListStore *service_store;
-
- /* Counters on services detected and added */
- guint services_detected;
- guint name_owner_cb_count;
-
- /* Debug to show upon creation */
- gchar *select_name;
-
- /* Misc. */
- gboolean dispose_run;
- TpAccountManager *am;
- GtkListStore *all_active_buffer;
-};
-
-static const gchar *
-log_level_to_string (GLogLevelFlags level)
-{
- switch (level)
- {
- case G_LOG_LEVEL_ERROR:
- return "Error";
- break;
- case G_LOG_LEVEL_CRITICAL:
- return "Critical";
- break;
- case G_LOG_LEVEL_WARNING:
- return "Warning";
- break;
- case G_LOG_LEVEL_MESSAGE:
- return "Message";
- break;
- case G_LOG_LEVEL_INFO:
- return "Info";
- break;
- case G_LOG_LEVEL_DEBUG:
- return "Debug";
- break;
- default:
- g_assert_not_reached ();
- break;
- }
-}
-
-static gchar *
-get_active_service_name (EmpathyDebugWindow *self)
-{
- GtkTreeIter iter;
- gchar *name;
-
- if (!gtk_combo_box_get_active_iter (GTK_COMBO_BOX (self->priv->chooser),
- &iter))
- return NULL;
-
- gtk_tree_model_get (GTK_TREE_MODEL (self->priv->service_store), &iter,
- COL_NAME, &name, -1);
-
- return name;
-}
-
-static gboolean
-copy_buffered_messages (GtkTreeModel *buffer,
- GtkTreePath *path,
- GtkTreeIter *iter,
- gpointer data)
-{
- GtkListStore *active_buffer = data;
- GtkTreeIter active_buffer_iter;
- TpDebugMessage *msg;
-
- gtk_tree_model_get (buffer, iter,
- COL_DEBUG_MESSAGE, &msg,
- -1);
- gtk_list_store_insert_with_values (active_buffer, &active_buffer_iter, -1,
- COL_DEBUG_MESSAGE, msg,
- -1);
-
- g_object_unref (msg);
-
- return FALSE;
-}
-
-static void
-insert_values_in_buffer (GtkListStore *store,
- TpDebugMessage *msg)
-{
- GtkTreeIter iter;
-
- gtk_list_store_insert_with_values (store, &iter, -1,
- COL_DEBUG_MESSAGE, msg,
- -1);
-}
-
-static void
-debug_window_add_message (EmpathyDebugWindow *self,
- TpDebugClient *debug,
- TpDebugMessage *msg)
-{
- GtkListStore *active_buffer, *pause_buffer;
-
- pause_buffer = g_object_get_data (G_OBJECT (debug), "pause-buffer");
- active_buffer = g_object_get_data (G_OBJECT (debug), "active-buffer");
-
- if (self->priv->paused)
- {
- insert_values_in_buffer (pause_buffer, msg);
- }
- else
- {
- /* Append 'this' message to this service's and All's active-buffers */
- insert_values_in_buffer (active_buffer, msg);
-
- insert_values_in_buffer (self->priv->all_active_buffer, msg);
- }
-}
-
-static void
-debug_window_new_debug_message_cb (TpDebugClient *debug,
- TpDebugMessage *msg,
- gpointer user_data)
-{
- EmpathyDebugWindow *self = user_data;
-
- debug_window_add_message (self, debug, msg);
-}
-
-static void
-set_enabled_cb (GObject *source,
- GAsyncResult *result,
- gpointer user_data)
-{
- TpDebugClient *debug = TP_DEBUG_CLIENT (source);
- gboolean enabled = GPOINTER_TO_UINT (user_data);
- GError *error = NULL;
-
- if (!tp_debug_client_set_enabled_finish (debug, result, &error))
- {
- DEBUG ("Failed to %s debugging on %s", enabled ? "enable" : "disable",
- tp_proxy_get_bus_name (debug));
- g_error_free (error);
- }
-}
-
-static void
-debug_window_set_enabled (TpDebugClient *debug,
- gboolean enabled)
-{
- g_return_if_fail (debug != NULL);
-
- tp_debug_client_set_enabled_async (debug, enabled,
- set_enabled_cb, GUINT_TO_POINTER (enabled));
-}
-
-static void
-debug_window_set_toolbar_sensitivity (EmpathyDebugWindow *self,
- gboolean sensitive)
-{
- GtkWidget *vbox = gtk_bin_get_child (GTK_BIN (self));
-
- gtk_widget_set_sensitive (GTK_WIDGET (self->priv->save_button), sensitive);
- gtk_widget_set_sensitive (GTK_WIDGET (self->priv->send_to_pastebin),
- sensitive);
- gtk_widget_set_sensitive (GTK_WIDGET (self->priv->copy_button), sensitive);
- gtk_widget_set_sensitive (GTK_WIDGET (self->priv->clear_button), sensitive);
- gtk_widget_set_sensitive (GTK_WIDGET (self->priv->pause_button), sensitive);
- gtk_widget_set_sensitive (GTK_WIDGET (self->priv->level_label), sensitive);
- gtk_widget_set_sensitive (GTK_WIDGET (self->priv->level_filter), sensitive);
- gtk_widget_set_sensitive (GTK_WIDGET (self->priv->view), sensitive);
-
- if (sensitive && !self->priv->view_visible)
- {
- /* Add view and remove label */
- gtk_container_remove (GTK_CONTAINER (vbox),
- self->priv->not_supported_label);
- gtk_box_pack_start (GTK_BOX (vbox),
- self->priv->scrolled_win, TRUE, TRUE, 0);
- self->priv->view_visible = TRUE;
- }
- else if (!sensitive && self->priv->view_visible)
- {
- /* Add label and remove view */
- gtk_container_remove (GTK_CONTAINER (vbox), self->priv->scrolled_win);
- gtk_box_pack_start (GTK_BOX (vbox), self->priv->not_supported_label,
- TRUE, TRUE, 0);
- self->priv->view_visible = FALSE;
- }
-}
-
-static gboolean
-debug_window_get_iter_for_active_buffer (GtkListStore *active_buffer,
- GtkTreeIter *iter,
- EmpathyDebugWindow *self)
-{
- gboolean valid_iter;
- GtkTreeModel *model = GTK_TREE_MODEL (self->priv->service_store);
-
- gtk_tree_model_get_iter_first (model, iter);
- for (valid_iter = gtk_tree_model_iter_next (model, iter);
- valid_iter;
- valid_iter = gtk_tree_model_iter_next (model, iter))
- {
- GtkListStore *stored_active_buffer;
-
- gtk_tree_model_get (model, iter,
- COL_ACTIVE_BUFFER, &stored_active_buffer,
- -1);
- if (active_buffer == stored_active_buffer)
- {
- g_object_unref (stored_active_buffer);
- return valid_iter;
- }
- g_object_unref (stored_active_buffer);
- }
-
- return valid_iter;
-}
-
-static void refresh_all_buffer (EmpathyDebugWindow *self);
-
-static void
-proxy_invalidated_cb (TpProxy *proxy,
- guint domain,
- gint code,
- gchar *msg,
- gpointer user_data)
-{
- EmpathyDebugWindow *self = (EmpathyDebugWindow *) user_data;
- GtkTreeModel *service_store = GTK_TREE_MODEL (self->priv->service_store);
- TpProxy *stored_proxy;
- GtkTreeIter iter;
- gboolean valid_iter;
-
- /* Proxy has been invalidated so we find and set it to NULL
- * in service store */
- gtk_tree_model_get_iter_first (service_store, &iter);
- for (valid_iter = gtk_tree_model_iter_next (service_store, &iter);
- valid_iter;
- valid_iter = gtk_tree_model_iter_next (service_store, &iter))
- {
- gtk_tree_model_get (service_store, &iter,
- COL_PROXY, &stored_proxy,
- -1);
-
- if (proxy == stored_proxy)
- gtk_list_store_set (self->priv->service_store, &iter,
- COL_PROXY, NULL,
- -1);
- }
-
- /* Also, we refresh "All" selection's active buffer since it should not
- * show messages obtained from the proxy getting destroyed above */
- refresh_all_buffer (self);
-}
-
-static void
-debug_window_get_messages_cb (GObject *object,
- GAsyncResult *result,
- gpointer user_data)
-{
- TpDebugClient *debug = TP_DEBUG_CLIENT (object);
- EmpathyDebugWindow *self = user_data;
- gchar *active_service_name;
- guint i;
- GtkListStore *active_buffer;
- gboolean valid_iter;
- GtkTreeIter iter;
- gchar *proxy_service_name;
- GPtrArray *messages;
- GError *error = NULL;
-
- active_buffer = g_object_get_data (object, "active-buffer");
- valid_iter = debug_window_get_iter_for_active_buffer (active_buffer, &iter,
- self);
- gtk_tree_model_get (GTK_TREE_MODEL (self->priv->service_store), &iter,
- COL_NAME, &proxy_service_name,
- -1);
-
- active_service_name = get_active_service_name (self);
-
- messages = tp_debug_client_get_messages_finish (debug, result, &error);
- if (messages == NULL)
- {
- DEBUG ("Failed to get debug messsages: %s", error->message);
- g_error_free (error);
-
- /* We want to set the window sensitivity to false only when proxy for the
- * selected service is unable to fetch debug messages */
- if (!tp_strdiff (active_service_name, proxy_service_name))
- debug_window_set_toolbar_sensitivity (self, FALSE);
-
- /* We created the proxy for GetMessages call. Now destroy it. */
- tp_clear_object (&debug);
- return;
- }
-
- DEBUG ("Retrieved debug messages for %s", active_service_name);
- g_free (active_service_name);
- debug_window_set_toolbar_sensitivity (self, TRUE);
-
- for (i = 0; i < messages->len; i++)
- {
- TpDebugMessage *msg = g_ptr_array_index (messages, i);
-
- debug_window_add_message (self, debug, msg);
- }
-
- /* Now we save this precious proxy in the service_store along its service */
- if (valid_iter)
- {
- DEBUG ("Proxy for service: %s was successful in fetching debug"
- " messages. Saving it.", proxy_service_name);
-
- gtk_list_store_set (self->priv->service_store, &iter,
- COL_PROXY, debug,
- -1);
- }
- g_ptr_array_unref (messages);
-
- g_free (proxy_service_name);
-
- /* Connect to "invalidated" signal */
- g_signal_connect (debug, "invalidated",
- G_CALLBACK (proxy_invalidated_cb), self);
-
- /* Connect to NewDebugMessage */
- tp_g_signal_connect_object (debug, "new-debug-message",
- G_CALLBACK (debug_window_new_debug_message_cb), self, 0);
-
- /* Now that active-buffer is up to date, we can see which messages are
- * to be visible */
- gtk_tree_model_filter_refilter (GTK_TREE_MODEL_FILTER (
- self->priv->store_filter));
-
- /* Set the proxy to signal for new debug messages */
- debug_window_set_enabled (debug, TRUE);
-}
-
-static void
-create_proxy_to_get_messages (EmpathyDebugWindow *self,
- GtkTreeIter *iter,
- TpDBusDaemon *dbus)
-{
- gchar *bus_name, *name = NULL;
- TpDebugClient *new_proxy, *stored_proxy = NULL;
- GtkTreeModel *pause_buffer, *active_buffer;
- gboolean gone;
- GError *error = NULL;
-
- gtk_tree_model_get (GTK_TREE_MODEL (self->priv->service_store), iter,
- COL_NAME, &name,
- COL_GONE, &gone,
- COL_ACTIVE_BUFFER, &active_buffer,
- COL_PAUSE_BUFFER, &pause_buffer,
- COL_PROXY, &stored_proxy,
- -1);
-
- /* If the stored_proxy is not NULL then messages have been obtained and
- * new-debug-message-signal has been set on it. Also, the proxy is valid.
- * If the service is gone, we still display the messages-cached till now. */
- if (gone ||
- (!gone && stored_proxy != NULL))
- {
- /* Nothing needs to be done. The associated active-buffer has already
- * been set as view's model */
- goto finally;
- }
-
- DEBUG ("Preparing proxy to obtain messages for service %s", name);
-
- gtk_tree_model_get (GTK_TREE_MODEL (self->priv->service_store), iter,
- COL_UNIQUE_NAME, &bus_name, -1);
-
- new_proxy = tp_debug_client_new (dbus, bus_name, &error);
-
- if (new_proxy == NULL)
- {
- DEBUG ("Failed to create TpDebugClient on bus %s: %s", bus_name,
- error->message);
- g_free (bus_name);
- goto finally;
- }
-
- g_free (bus_name);
-
- g_object_set_data (G_OBJECT (new_proxy), "active-buffer", active_buffer);
- g_object_set_data (G_OBJECT (new_proxy), "pause-buffer", pause_buffer);
-
- /* Now we call GetMessages with fresh proxy.
- * The old proxy is NULL due to one of the following -
- * * Wasn't saved as last GetMessages call failed
- * * The service has newly arrived and no proxy has been prepared yet for it
- * * A service with the same name has reappeared but the owner maybe new */
-
- tp_debug_client_get_messages_async (TP_DEBUG_CLIENT (new_proxy),
- debug_window_get_messages_cb, self);
-
-finally:
- g_free (name);
- tp_clear_object (&stored_proxy);
- g_object_unref (active_buffer);
- g_object_unref (pause_buffer);
-}
-
-static GtkListStore *
-new_list_store_for_service (void)
-{
- return gtk_list_store_new (NUM_DEBUG_COLS,
- TP_TYPE_DEBUG_MESSAGE); /* COL_DEBUG_MESSAGE */
-}
-
-static gboolean
-debug_window_visible_func (GtkTreeModel *model,
- GtkTreeIter *iter,
- gpointer user_data)
-{
- EmpathyDebugWindow *self = user_data;
- GLogLevelFlags filter_value;
- GtkTreeModel *filter_model;
- GtkTreeIter filter_iter;
- TpDebugMessage *msg;
- gboolean result;
-
- filter_model = gtk_combo_box_get_model (
- GTK_COMBO_BOX (self->priv->level_filter));
- gtk_combo_box_get_active_iter (GTK_COMBO_BOX (self->priv->level_filter),
- &filter_iter);
-
- gtk_tree_model_get (model, iter, COL_DEBUG_MESSAGE, &msg, -1);
- gtk_tree_model_get (filter_model, &filter_iter,
- COL_LEVEL_VALUE, &filter_value, -1);
-
- result = (tp_debug_message_get_level (msg) <= filter_value);
- g_object_unref (msg);
-
- return result;
-}
-
-static gboolean
-tree_view_search_equal_func_cb (GtkTreeModel *model,
- gint column,
- const gchar *key,
- GtkTreeIter *iter,
- gpointer search_data)
-{
- gchar *str;
- gint key_len;
- gint len;
- gint i;
- gboolean ret = TRUE; /* The return value is counter-intuitive */
-
- gtk_tree_model_get (model, iter, column, &str, -1);
-
- key_len = strlen (key);
- len = strlen (str) - key_len;
-
- for (i = 0; i <= len; ++i)
- {
- if (!g_ascii_strncasecmp (key, str + i, key_len))
- {
- ret = FALSE;
- break;
- }
- }
-
- g_free (str);
- return ret;
-}
-
-static void
-update_store_filter (EmpathyDebugWindow *self,
- GtkListStore *active_buffer)
-{
- debug_window_set_toolbar_sensitivity (self, FALSE);
-
- tp_clear_object (&self->priv->store_filter);
- self->priv->store_filter = gtk_tree_model_filter_new (
- GTK_TREE_MODEL (active_buffer), NULL);
-
- gtk_tree_model_filter_set_visible_func (
- GTK_TREE_MODEL_FILTER (self->priv->store_filter),
- debug_window_visible_func, self, NULL);
- gtk_tree_view_set_model (GTK_TREE_VIEW (self->priv->view),
- self->priv->store_filter);
-
- /* Since view's model has changed, reset the search column and
- * search_equal_func */
- gtk_tree_view_set_search_column (GTK_TREE_VIEW (self->priv->view),
- COL_DEBUG_MESSAGE);
- gtk_tree_view_set_search_equal_func (GTK_TREE_VIEW (self->priv->view),
- tree_view_search_equal_func_cb, NULL, NULL);
-
- debug_window_set_toolbar_sensitivity (self, TRUE);
-}
-
-static void
-refresh_all_buffer (EmpathyDebugWindow *self)
-{
- gboolean valid_iter;
- GtkTreeIter iter;
- GtkTreeModel *service_store = GTK_TREE_MODEL (self->priv->service_store);
-
- /* Clear All's active-buffer */
- gtk_list_store_clear (self->priv->all_active_buffer);
-
- /* Skipping the first service store iter which is reserved for "All" */
- gtk_tree_model_get_iter_first (service_store, &iter);
- for (valid_iter = gtk_tree_model_iter_next (service_store, &iter);
- valid_iter;
- valid_iter = gtk_tree_model_iter_next (service_store, &iter))
- {
- TpProxy *proxy = NULL;
- GtkListStore *service_active_buffer;
- gboolean gone;
-
- gtk_tree_model_get (service_store, &iter,
- COL_GONE, &gone,
- COL_PROXY, &proxy,
- COL_ACTIVE_BUFFER, &service_active_buffer,
- -1);
-
- if (gone)
- {
- gtk_tree_model_foreach (GTK_TREE_MODEL (service_active_buffer),
- copy_buffered_messages, self->priv->all_active_buffer);
- }
- else
- {
- if (proxy != NULL)
- {
- if (service_active_buffer == NULL)
- break;
-
- /* Copy the debug messages to all_active_buffer */
- gtk_tree_model_foreach (GTK_TREE_MODEL (service_active_buffer),
- copy_buffered_messages, self->priv->all_active_buffer);
- }
- else
- {
- GError *error = NULL;
- TpDBusDaemon *dbus = tp_dbus_daemon_dup (&error);
-
- if (error != NULL)
- {
- DEBUG ("Failed at duping the dbus daemon: %s", error->message);
- g_error_free (error);
- }
-
- create_proxy_to_get_messages (self, &iter, dbus);
-
- g_object_unref (dbus);
- }
- }
-
- g_object_unref (service_active_buffer);
- tp_clear_object (&proxy);
- }
-}
-
-static void
-debug_window_service_chooser_changed_cb (GtkComboBox *chooser,
- EmpathyDebugWindow *self)
-{
- TpDBusDaemon *dbus;
- GError *error = NULL;
- GtkListStore *stored_active_buffer = NULL;
- gchar *name = NULL;
- GtkTreeIter iter;
- gboolean gone;
-
- if (!gtk_combo_box_get_active_iter (chooser, &iter))
- {
- DEBUG ("No CM is selected");
- if (gtk_tree_model_iter_n_children (
- GTK_TREE_MODEL (self->priv->service_store), NULL) > 0)
- {
- gtk_combo_box_set_active (chooser, 0);
- }
- return;
- }
-
- debug_window_set_toolbar_sensitivity (self, TRUE);
-
- gtk_tree_model_get (GTK_TREE_MODEL (self->priv->service_store), &iter,
- COL_NAME, &name,
- COL_GONE, &gone,
- COL_ACTIVE_BUFFER, &stored_active_buffer,
- -1);
-
- DEBUG ("Service chosen: %s", name);
-
- if (tp_strdiff (name, "All") && stored_active_buffer == NULL)
- {
- DEBUG ("No list store assigned to service %s", name);
- goto finally;
- }
-
- if (!tp_strdiff (name, "All"))
- {
- update_store_filter (self, self->priv->all_active_buffer);
- goto finally;
- }
-
- update_store_filter (self, stored_active_buffer);
-
- dbus = tp_dbus_daemon_dup (&error);
-
- if (error != NULL)
- {
- DEBUG ("Failed at duping the dbus daemon: %s", error->message);
- }
-
- create_proxy_to_get_messages (self, &iter, dbus);
-
- g_object_unref (dbus);
-
-finally:
- g_free (name);
- tp_clear_object (&stored_active_buffer);
-}
-
-typedef struct
-{
- const gchar *name;
- gboolean found;
- gboolean use_name;
- GtkTreeIter **found_iter;
-} CmInModelForeachData;
-
-static gboolean
-debug_window_service_foreach (GtkTreeModel *model,
- GtkTreePath *path,
- GtkTreeIter *iter,
- gpointer user_data)
-{
- CmInModelForeachData *data = (CmInModelForeachData *) user_data;
- gchar *store_name;
-
- gtk_tree_model_get (model, iter,
- (data->use_name ? COL_NAME : COL_UNIQUE_NAME),
- &store_name,
- -1);
-
- if (!tp_strdiff (store_name, data->name))
- {
- data->found = TRUE;
-
- if (data->found_iter != NULL)
- *(data->found_iter) = gtk_tree_iter_copy (iter);
- }
-
- g_free (store_name);
-
- return data->found;
-}
-
-static gboolean
-debug_window_service_is_in_model (EmpathyDebugWindow *self,
- const gchar *name,
- GtkTreeIter **iter,
- gboolean use_name)
-{
- CmInModelForeachData *data;
- gboolean found;
-
- data = g_slice_new0 (CmInModelForeachData);
- data->name = name;
- data->found = FALSE;
- data->found_iter = iter;
- data->use_name = use_name;
-
- gtk_tree_model_foreach (GTK_TREE_MODEL (self->priv->service_store),
- debug_window_service_foreach, data);
-
- found = data->found;
-
- g_slice_free (CmInModelForeachData, data);
-
- return found;
-}
-
-static gchar *
-get_cm_display_name (EmpathyDebugWindow *self,
- const char *cm_name)
-{
- GHashTable *protocols = g_hash_table_new (g_str_hash, g_str_equal);
- GList *accounts, *ptr;
- char *retval;
-
- accounts = tp_account_manager_dup_valid_accounts (self->priv->am);
-
- for (ptr = accounts; ptr != NULL; ptr = ptr->next)
- {
- TpAccount *account = TP_ACCOUNT (ptr->data);
-
- if (!tp_strdiff (tp_account_get_cm_name (account), cm_name))
- {
- g_hash_table_insert (protocols,
- (char *) tp_account_get_protocol_name (account),
- GUINT_TO_POINTER (TRUE));
- }
- }
-
- g_list_free_full (accounts, g_object_unref);
-
- if (g_hash_table_size (protocols) > 0)
- {
- GHashTableIter iter;
- char **protocolsv;
- char *key, *str;
- guint i;
-
- protocolsv = g_new0 (char *, g_hash_table_size (protocols) + 1);
-
- g_hash_table_iter_init (&iter, protocols);
- for (i = 0; g_hash_table_iter_next (&iter, (gpointer) &key, NULL); i++)
- {
- protocolsv[i] = key;
- }
-
- str = g_strjoinv (", ", protocolsv);
- retval = g_strdup_printf ("%s (%s)", cm_name, str);
-
- g_free (protocolsv);
- g_free (str);
- }
- else
- {
- retval = g_strdup (cm_name);
- }
-
- g_hash_table_unref (protocols);
-
- return retval;
-}
-
-typedef struct
-{
- EmpathyDebugWindow *self;
- gchar *name;
- ServiceType type;
-} FillServiceChooserData;
-
-static FillServiceChooserData *
-fill_service_chooser_data_new (EmpathyDebugWindow *window,
- const gchar *name,
- ServiceType type)
-{
- FillServiceChooserData * data = g_slice_new (FillServiceChooserData);
-
- data->self = window;
- data->name = g_strdup (name);
- data->type = SERVICE_TYPE_CM;
- return data;
-}
-
-static void
-fill_service_chooser_data_free (FillServiceChooserData *data)
-{
- g_free (data->name);
- g_slice_free (FillServiceChooserData, data);
-}
-
-static void
-debug_window_get_name_owner_cb (TpDBusDaemon *proxy,
- const gchar *out,
- const GError *error,
- gpointer user_data,
- GObject *weak_object)
-{
- FillServiceChooserData *data = (FillServiceChooserData *) user_data;
- EmpathyDebugWindow *self = EMPATHY_DEBUG_WINDOW (data->self);
- GtkTreeIter iter;
-
- self->priv->name_owner_cb_count++;
-
- if (error != NULL)
- {
- DEBUG ("GetNameOwner failed: %s", error->message);
- goto OUT;
- }
-
- if (!debug_window_service_is_in_model (data->self, out, NULL, FALSE))
- {
- char *name;
- GtkListStore *active_buffer, *pause_buffer;
-
- DEBUG ("Adding %s to list: %s at unique name: %s",
- data->type == SERVICE_TYPE_CM? "CM": "Client",
- data->name, out);
-
- if (data->type == SERVICE_TYPE_CM)
- name = get_cm_display_name (self, data->name);
- else
- name = g_strdup (data->name);
-
- active_buffer = new_list_store_for_service ();
- pause_buffer = new_list_store_for_service ();
-
- gtk_list_store_insert_with_values (self->priv->service_store, &iter, -1,
- COL_NAME, name,
- COL_UNIQUE_NAME, out,
- COL_GONE, FALSE,
- COL_ACTIVE_BUFFER, active_buffer,
- COL_PAUSE_BUFFER, pause_buffer,
- COL_PROXY, NULL,
- -1);
-
- g_object_unref (active_buffer);
- g_object_unref (pause_buffer);
-
- if (self->priv->select_name != NULL &&
- !tp_strdiff (name, self->priv->select_name))
- {
- gtk_combo_box_set_active_iter (GTK_COMBO_BOX (self->priv->chooser),
- &iter);
- tp_clear_pointer (&self->priv->select_name, g_free);
- }
-
- g_free (name);
- }
-
- if (self->priv->services_detected == self->priv->name_owner_cb_count)
- {
- /* Time to add "All" selection to service_store */
- gtk_list_store_insert_with_values (self->priv->service_store, &iter, 0,
- COL_NAME, "All",
- COL_ACTIVE_BUFFER, NULL,
- -1);
-
- self->priv->all_active_buffer = new_list_store_for_service ();
-
- /* Populate active buffers for all services */
- refresh_all_buffer (self);
-
- gtk_combo_box_set_active (GTK_COMBO_BOX (self->priv->chooser), 0);
- }
-
-OUT:
- fill_service_chooser_data_free (data);
-}
-
-static void
-debug_window_list_connection_names_cb (const gchar * const *names,
- gsize n,
- const gchar * const *cms,
- const gchar * const *protocols,
- const GError *error,
- gpointer user_data,
- GObject *weak_object)
-{
- EmpathyDebugWindow *self = user_data;
- guint i;
- TpDBusDaemon *dbus;
- GError *error2 = NULL;
-
- if (error != NULL)
- {
- DEBUG ("list_connection_names failed: %s", error->message);
- return;
- }
-
- dbus = tp_dbus_daemon_dup (&error2);
-
- if (error2 != NULL)
- {
- DEBUG ("Failed to dup TpDBusDaemon.");
- g_error_free (error2);
- return;
- }
-
- for (i = 0; cms[i] != NULL; i++)
- {
- FillServiceChooserData *data = fill_service_chooser_data_new (
- self, cms[i], SERVICE_TYPE_CM);
-
- tp_cli_dbus_daemon_call_get_name_owner (dbus, -1,
- names[i], debug_window_get_name_owner_cb,
- data, NULL, NULL);
-
- self->priv->services_detected ++;
- }
-
- g_object_unref (dbus);
-}
-
-static void
-debug_window_name_owner_changed_cb (TpDBusDaemon *proxy,
- const gchar *arg0,
- const gchar *arg1,
- const gchar *arg2,
- gpointer user_data,
- GObject *weak_object)
-{
- EmpathyDebugWindow *self = EMPATHY_DEBUG_WINDOW (user_data);
- ServiceType type;
- const gchar *name;
-
- if (g_str_has_prefix (arg0, TP_CM_BUS_NAME_BASE))
- {
- type = SERVICE_TYPE_CM;
- name = arg0 + strlen (TP_CM_BUS_NAME_BASE);
- }
- else if (g_str_has_prefix (arg0, TP_CLIENT_BUS_NAME_BASE))
- {
- type = SERVICE_TYPE_CLIENT;
- name = arg0 + strlen (TP_CLIENT_BUS_NAME_BASE);
- }
- else
- {
- return;
- }
-
- if (TPAW_STR_EMPTY (arg1) && !TPAW_STR_EMPTY (arg2))
- {
- GtkTreeIter *found_at_iter = NULL;
- gchar *display_name;
-
- if (type == SERVICE_TYPE_CM)
- display_name = get_cm_display_name (self, name);
- else
- display_name = g_strdup (name);
-
- /* A service joined */
- if (!debug_window_service_is_in_model (user_data, display_name,
- &found_at_iter, TRUE))
- {
- GtkTreeIter iter;
- GtkListStore *active_buffer, *pause_buffer;
-
- DEBUG ("Adding new service '%s' at %s.", name, arg2);
-
- active_buffer = new_list_store_for_service ();
- pause_buffer = new_list_store_for_service ();
-
- gtk_list_store_insert_with_values (self->priv->service_store,
- &iter, -1,
- COL_NAME, display_name,
- COL_UNIQUE_NAME, arg2,
- COL_GONE, FALSE,
- COL_ACTIVE_BUFFER, active_buffer,
- COL_PAUSE_BUFFER, pause_buffer,
- COL_PROXY, NULL,
- -1);
-
- g_object_unref (active_buffer);
- g_object_unref (pause_buffer);
- }
- else
- {
- /* a service with the same name is already in the service_store,
- * update it and set it as re-enabled.
- */
- GtkListStore *active_buffer, *pause_buffer;
- TpProxy *stored_proxy;
-
- DEBUG ("Refreshing CM '%s' at '%s'.", name, arg2);
-
- active_buffer= new_list_store_for_service ();
- pause_buffer = new_list_store_for_service ();
-
- gtk_tree_model_get (GTK_TREE_MODEL (self->priv->service_store),
- found_at_iter, COL_PROXY, &stored_proxy, -1);
-
- tp_clear_object (&stored_proxy);
-
- gtk_list_store_set (self->priv->service_store, found_at_iter,
- COL_NAME, display_name,
- COL_UNIQUE_NAME, arg2,
- COL_GONE, FALSE,
- COL_ACTIVE_BUFFER, active_buffer,
- COL_PAUSE_BUFFER, pause_buffer,
- COL_PROXY, NULL,
- -1);
-
- g_object_unref (active_buffer);
- g_object_unref (pause_buffer);
-
- gtk_tree_iter_free (found_at_iter);
-
- debug_window_service_chooser_changed_cb
- (GTK_COMBO_BOX (self->priv->chooser), user_data);
- }
-
- /* If a new service arrives when "All" is selected, the view will
- * not show its messages which we do not want. So we refresh All's
- * active buffer.
- * Similarly for when a service with an already seen service name
- * appears. */
- refresh_all_buffer (self);
-
- g_free (display_name);
- }
- else if (!TPAW_STR_EMPTY (arg1) && TPAW_STR_EMPTY (arg2))
- {
- /* A service died */
- GtkTreeIter *iter = NULL;
-
- DEBUG ("Setting service disabled from %s.", arg1);
-
- /* set the service as disabled in the model */
- if (debug_window_service_is_in_model (user_data, arg1, &iter, FALSE))
- {
- gtk_list_store_set (self->priv->service_store,
- iter, COL_GONE, TRUE, -1);
- gtk_tree_iter_free (iter);
- }
-
- /* Refresh all's active buffer */
- refresh_all_buffer (self);
- }
-}
-
-static void
-add_client (EmpathyDebugWindow *self,
- const gchar *name)
-{
- const gchar *suffix;
- FillServiceChooserData *data;
-
- suffix = name + strlen (TP_CLIENT_BUS_NAME_BASE);
-
- data = fill_service_chooser_data_new (self, suffix, SERVICE_TYPE_CLIENT);
-
- tp_cli_dbus_daemon_call_get_name_owner (self->priv->dbus, -1,
- name, debug_window_get_name_owner_cb, data, NULL, NULL);
-
- self->priv->services_detected ++;
-}
-
-static void
-list_names_cb (TpDBusDaemon *bus_daemon,
- const gchar * const *names,
- const GError *error,
- gpointer user_data,
- GObject *weak_object)
-{
- EmpathyDebugWindow *self = EMPATHY_DEBUG_WINDOW (weak_object);
- guint i;
-
- if (error != NULL)
- {
- DEBUG ("Failed to list names: %s", error->message);
- return;
- }
-
- for (i = 0; names[i] != NULL; i++)
- {
- if (g_str_has_prefix (names[i], TP_CLIENT_BUS_NAME_BASE))
- {
- add_client (self, names[i]);
- }
- }
-}
-
-static void
-debug_window_fill_service_chooser (EmpathyDebugWindow *self)
-{
- GError *error = NULL;
- GtkTreeIter iter;
- GtkListStore *active_buffer, *pause_buffer;
-
- self->priv->dbus = tp_dbus_daemon_dup (&error);
-
- if (error != NULL)
- {
- DEBUG ("Failed to dup dbus daemon: %s", error->message);
- g_error_free (error);
- return;
- }
-
- /* Keep a count of the services detected and added */
- self->priv->services_detected = 0;
- self->priv->name_owner_cb_count = 0;
-
- /* Add CMs to list */
- tp_list_connection_names (self->priv->dbus,
- debug_window_list_connection_names_cb, self, NULL, NULL);
-
- /* add Mission Control */
- active_buffer= new_list_store_for_service ();
- pause_buffer = new_list_store_for_service ();
-
- gtk_list_store_insert_with_values (self->priv->service_store, &iter, -1,
- COL_NAME, "mission-control",
- COL_UNIQUE_NAME, "org.freedesktop.Telepathy.MissionControl5",
- COL_GONE, FALSE,
- COL_ACTIVE_BUFFER, active_buffer,
- COL_PAUSE_BUFFER, pause_buffer,
- COL_PROXY, NULL,
- -1);
- g_object_unref (active_buffer);
- g_object_unref (pause_buffer);
-
- /* add clients */
- tp_dbus_daemon_list_names (self->priv->dbus, 2000,
- list_names_cb, NULL, NULL, G_OBJECT (self));
-
- self->priv->name_owner_changed_signal =
- tp_cli_dbus_daemon_connect_to_name_owner_changed (self->priv->dbus,
- debug_window_name_owner_changed_cb, self, NULL, NULL, NULL);
-}
-
-static void
-debug_window_pause_toggled_cb (GtkToggleToolButton *pause_,
- EmpathyDebugWindow *self)
-{
- GtkTreeIter iter;
- gboolean valid_iter;
- GtkTreeModel *model = GTK_TREE_MODEL (self->priv->service_store);
-
- self->priv->paused = gtk_toggle_tool_button_get_active (pause_);
-
- if (!self->priv->paused)
- {
- /* Pause has been released - flush all pause buffers */
- GtkTreeModel *service_store = GTK_TREE_MODEL (self->priv->service_store);
-
- /* Skipping the first iter which is reserved for "All" */
- gtk_tree_model_get_iter_first (model, &iter);
- for (valid_iter = gtk_tree_model_iter_next (model, &iter);
- valid_iter;
- valid_iter = gtk_tree_model_iter_next (model, &iter))
- {
- GtkListStore *pause_buffer, *active_buffer;
-
- gtk_tree_model_get (service_store, &iter,
- COL_PAUSE_BUFFER, &pause_buffer,
- COL_ACTIVE_BUFFER, &active_buffer,
- -1);
-
- gtk_tree_model_foreach (GTK_TREE_MODEL (pause_buffer),
- copy_buffered_messages, active_buffer);
- gtk_tree_model_foreach (GTK_TREE_MODEL (pause_buffer),
- copy_buffered_messages, self->priv->all_active_buffer);
-
- gtk_list_store_clear (pause_buffer);
-
- g_object_unref (active_buffer);
- g_object_unref (pause_buffer);
- }
- }
-}
-
-static void
-debug_window_filter_changed_cb (GtkComboBox *filter,
- EmpathyDebugWindow *self)
-{
- gtk_tree_model_filter_refilter (
- GTK_TREE_MODEL_FILTER (self->priv->store_filter));
-}
-
-static void
-debug_window_clear_clicked_cb (GtkToolButton *clear_button,
- EmpathyDebugWindow *self)
-{
- GtkTreeIter iter;
- GtkListStore *active_buffer;
-
- /* "All" is the first choice in the service chooser and it's buffer is
- * not saved in the service-store but is accessed using a self->private
- * reference */
- if (gtk_combo_box_get_active (GTK_COMBO_BOX (self->priv->chooser)) == 0)
- {
- gtk_list_store_clear (self->priv->all_active_buffer);
- return;
- }
-
- gtk_combo_box_get_active_iter (GTK_COMBO_BOX (self->priv->chooser), &iter);
- gtk_tree_model_get (GTK_TREE_MODEL (self->priv->service_store), &iter,
- COL_ACTIVE_BUFFER, &active_buffer, -1);
-
- gtk_list_store_clear (active_buffer);
-
- g_object_unref (active_buffer);
-}
-
-static void
-debug_window_menu_copy_activate_cb (GtkMenuItem *menu_item,
- EmpathyDebugWindow *self)
-{
- GtkTreePath *path;
- GtkTreeViewColumn *focus_column;
- GtkTreeIter iter;
- TpDebugMessage *msg;
- const gchar *message;
- GtkClipboard *clipboard;
-
- gtk_tree_view_get_cursor (GTK_TREE_VIEW (self->priv->view),
- &path, &focus_column);
-
- if (path == NULL)
- {
- DEBUG ("No row is in focus");
- return;
- }
-
- gtk_tree_model_get_iter (self->priv->store_filter, &iter, path);
-
- gtk_tree_model_get (self->priv->store_filter, &iter,
- COL_DEBUG_MESSAGE, &msg,
- -1);
-
- message = tp_debug_message_get_message (msg);
-
- if (TPAW_STR_EMPTY (message))
- {
- DEBUG ("Log message is empty");
- return;
- }
-
- clipboard = gtk_clipboard_get_for_display (
- gtk_widget_get_display (GTK_WIDGET (menu_item)),
- GDK_SELECTION_CLIPBOARD);
-
- gtk_clipboard_set_text (clipboard, message, -1);
-
- g_object_unref (msg);
-}
-
-typedef struct
-{
- EmpathyDebugWindow *self;
- guint button;
- guint32 time;
-} MenuPopupData;
-
-static gboolean
-debug_window_show_menu (gpointer user_data)
-{
- MenuPopupData *data = (MenuPopupData *) user_data;
- GtkWidget *menu, *item;
- GtkMenuShell *shell;
-
- menu = empathy_context_menu_new (GTK_WIDGET (data->self));
- shell = GTK_MENU_SHELL (menu);
-
- item = gtk_image_menu_item_new_from_stock (GTK_STOCK_COPY, NULL);
-
- g_signal_connect (item, "activate",
- G_CALLBACK (debug_window_menu_copy_activate_cb), data->self);
-
- gtk_menu_shell_append (shell, item);
- gtk_widget_show (item);
-
- gtk_menu_popup (GTK_MENU (menu), NULL, NULL, NULL, NULL,
- data->button, data->time);
-
- g_slice_free (MenuPopupData, user_data);
-
- return FALSE;
-}
-
-static gboolean
-debug_window_button_press_event_cb (GtkTreeView *view,
- GdkEventButton *event,
- gpointer user_data)
-{
- /* A mouse button was pressed on the tree view. */
-
- if (event->button == 3)
- {
- /* The tree view was right-clicked. (3 == third mouse button) */
- MenuPopupData *data;
- data = g_slice_new0 (MenuPopupData);
- data->self = user_data;
- data->button = event->button;
- data->time = event->time;
- g_idle_add (debug_window_show_menu, data);
- }
-
- return FALSE;
-}
-
-static gchar *
-debug_window_format_timestamp (TpDebugMessage *msg)
-{
- GDateTime *t;
- gchar *time_str, *text;
- gint ms;
-
- t = tp_debug_message_get_time (msg);
-
- time_str = g_date_time_format (t, "%x %T");
-
- ms = g_date_time_get_microsecond (t);
- text = g_strdup_printf ("%s.%d", time_str, ms);
-
- g_free (time_str);
- return text;
-}
-
-static void
-debug_window_time_formatter (GtkTreeViewColumn *tree_column,
- GtkCellRenderer *cell,
- GtkTreeModel *tree_model,
- GtkTreeIter *iter,
- gpointer data)
-{
- TpDebugMessage *msg;
- gchar *time_str;
-
- gtk_tree_model_get (tree_model, iter, COL_DEBUG_MESSAGE, &msg, -1);
-
- time_str = debug_window_format_timestamp (msg);
-
- g_object_set (G_OBJECT (cell), "text", time_str, NULL);
-
- g_object_unref (msg);
-}
-
-static void
-debug_window_domain_formatter (GtkTreeViewColumn *tree_column,
- GtkCellRenderer *cell,
- GtkTreeModel *tree_model,
- GtkTreeIter *iter,
- gpointer data)
-{
- TpDebugMessage *msg;
-
- gtk_tree_model_get (tree_model, iter, COL_DEBUG_MESSAGE, &msg, -1);
-
- g_object_set (G_OBJECT (cell), "text", tp_debug_message_get_domain (msg),
- NULL);
-
- g_object_unref (msg);
-}
-
-static void
-debug_window_category_formatter (GtkTreeViewColumn *tree_column,
- GtkCellRenderer *cell,
- GtkTreeModel *tree_model,
- GtkTreeIter *iter,
- gpointer data)
-{
- TpDebugMessage *msg;
- const gchar *category;
-
- gtk_tree_model_get (tree_model, iter, COL_DEBUG_MESSAGE, &msg, -1);
-
- category = tp_debug_message_get_category (msg);
-
- g_object_set (G_OBJECT (cell), "text", category ? category : "", NULL);
-
- g_object_unref (msg);
-}
-
-static void
-debug_window_message_formatter (GtkTreeViewColumn *tree_column,
- GtkCellRenderer *cell,
- GtkTreeModel *tree_model,
- GtkTreeIter *iter,
- gpointer data)
-{
- TpDebugMessage *msg;
-
- gtk_tree_model_get (tree_model, iter, COL_DEBUG_MESSAGE, &msg, -1);
-
- g_object_set (G_OBJECT (cell), "text",
- tp_debug_message_get_message (msg), NULL);
-
- g_object_unref (msg);
-}
-
-static void
-debug_window_level_formatter (GtkTreeViewColumn *tree_column,
- GtkCellRenderer *cell,
- GtkTreeModel *tree_model,
- GtkTreeIter *iter,
- gpointer data)
-{
- TpDebugMessage *msg;
- const gchar *level;
-
- gtk_tree_model_get (tree_model, iter, COL_DEBUG_MESSAGE, &msg, -1);
-
- level = log_level_to_string (tp_debug_message_get_level (msg));
-
- g_object_set (G_OBJECT (cell), "text", level, NULL);
-
- g_object_unref (msg);
-}
-
-static gboolean
-debug_window_copy_model_foreach (GtkTreeModel *model,
- GtkTreePath *path,
- GtkTreeIter *iter,
- gpointer user_data)
-{
- gchar **text = (gchar **) user_data;
- gchar *tmp;
- gchar *level_upper;
- const gchar *level_str, *category;
- gchar *line, *time_str;
- TpDebugMessage *msg;
-
- if (*text == NULL)
- *text = g_strdup ("");
-
- gtk_tree_model_get (model, iter,
- COL_DEBUG_MESSAGE, &msg,
- -1);
-
- level_str = log_level_to_string (tp_debug_message_get_level (msg));
- level_upper = g_ascii_strup (level_str, -1);
-
- time_str = debug_window_format_timestamp (msg);
- category = tp_debug_message_get_category (msg);
-
- line = g_strdup_printf ("%s%s%s-%s: %s: %s\n",
- tp_debug_message_get_domain (msg),
- category ? "" : "/", category ? category : "",
- level_upper, time_str, tp_debug_message_get_message (msg));
-
- g_free (time_str);
-
- tmp = g_strconcat (*text, line, NULL);
-
- g_free (*text);
- g_free (line);
- g_free (level_upper);
- g_object_unref (msg);
-
- *text = tmp;
-
- return FALSE;
-}
-
-static void
-debug_window_save_file_chooser_response_cb (GtkDialog *dialog,
- gint response_id,
- EmpathyDebugWindow *self)
-{
- gchar *filename = NULL;
- GFile *gfile = NULL;
- gchar *debug_data = NULL;
- GFileOutputStream *output_stream = NULL;
- GError *file_open_error = NULL;
- GError *file_write_error = NULL;
-
- if (response_id != GTK_RESPONSE_ACCEPT)
- goto OUT;
-
- filename = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (dialog));
-
- DEBUG ("Saving log as %s", filename);
-
- gfile = g_file_new_for_path (filename);
- output_stream = g_file_replace (gfile, NULL, FALSE,
- G_FILE_CREATE_NONE, NULL, &file_open_error);
-
- if (file_open_error != NULL)
- {
- DEBUG ("Failed to open file for writing: %s", file_open_error->message);
- g_error_free (file_open_error);
- goto OUT;
- }
-
- gtk_tree_model_foreach (self->priv->store_filter,
- debug_window_copy_model_foreach, &debug_data);
-
- g_output_stream_write (G_OUTPUT_STREAM (output_stream), debug_data,
- strlen (debug_data), NULL, &file_write_error);
- g_free (debug_data);
-
- if (file_write_error != NULL)
- {
- DEBUG ("Failed to write to file: %s", file_write_error->message);
- g_error_free (file_write_error);
- }
-
-OUT:
- if (gfile != NULL)
- g_object_unref (gfile);
-
- if (output_stream != NULL)
- g_object_unref (output_stream);
-
- if (filename != NULL)
- g_free (filename);
-
- gtk_widget_destroy (GTK_WIDGET (dialog));
-}
-
-static void
-debug_window_save_clicked_cb (GtkToolButton *tool_button,
- EmpathyDebugWindow *self)
-{
- GtkWidget *file_chooser;
- gchar *name, *tmp = NULL;
- char time_str[32];
- time_t t;
- struct tm *tm_s;
-
- file_chooser = gtk_file_chooser_dialog_new (_("Save"),
- GTK_WINDOW (self), GTK_FILE_CHOOSER_ACTION_SAVE,
- GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
- GTK_STOCK_SAVE, GTK_RESPONSE_ACCEPT,
- NULL);
-
- gtk_window_set_modal (GTK_WINDOW (file_chooser), TRUE);
- gtk_file_chooser_set_do_overwrite_confirmation (
- GTK_FILE_CHOOSER (file_chooser), TRUE);
-
- gtk_file_chooser_set_current_folder (GTK_FILE_CHOOSER (file_chooser),
- g_get_home_dir ());
-
- name = get_active_service_name (self);
-
- t = time (NULL);
- tm_s = localtime (&t);
- if (tm_s != NULL)
- {
- if (strftime (time_str, sizeof (time_str), "%d-%m-%y_%H-%M-%S", tm_s))
- tmp = g_strdup_printf ("%s-%s.log", name, time_str);
- }
-
- if (tmp == NULL)
- tmp = g_strdup_printf ("%s.log", name);
- g_free (name);
-
- gtk_file_chooser_set_current_name (GTK_FILE_CHOOSER (file_chooser), tmp);
- g_free (tmp);
-
- g_signal_connect (file_chooser, "response",
- G_CALLBACK (debug_window_save_file_chooser_response_cb),
- self);
-
- gtk_widget_show (file_chooser);
-}
-
-static void
-debug_window_pastebin_response_dialog_closed_cb (GtkDialog *dialog,
- gint response_id,
- SoupBuffer *buffer)
-{
- soup_buffer_free (buffer);
-
- gtk_widget_destroy (GTK_WIDGET (dialog));
-}
-
-static void
-debug_window_pastebin_callback (SoupSession *session,
- SoupMessage *msg,
- gpointer self)
-{
- GtkWidget *dialog;
- SoupBuffer *buffer;
-
- buffer = soup_message_body_flatten (msg->response_body);
- if (g_str_has_prefix (buffer->data, "http://pastebin.com/"))
- {
- dialog = gtk_message_dialog_new (GTK_WINDOW (self),
- GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_INFO, GTK_BUTTONS_CLOSE,
- _("Pastebin link"));
-
- gtk_message_dialog_format_secondary_markup (GTK_MESSAGE_DIALOG (dialog),
- "<a href=\"%s\">%s</a>", buffer->data, buffer->data);
- }
- else
- {
- dialog = gtk_message_dialog_new (GTK_WINDOW (self),
- GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_INFO, GTK_BUTTONS_CLOSE,
- _("Pastebin response"));
-
- if (!tp_str_empty (buffer->data))
- gtk_message_dialog_format_secondary_markup (GTK_MESSAGE_DIALOG (dialog),
- "%s", buffer->data);
- else
- gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (dialog),
- _("Data too large for a single paste. Please save logs to file."));
- }
-
- g_object_unref (session);
-
- gtk_window_set_transient_for (GTK_WINDOW (dialog), self);
-
- gtk_widget_show_all (GTK_WIDGET (dialog));
-
- g_signal_connect_after (dialog, "response", G_CALLBACK (
- debug_window_pastebin_response_dialog_closed_cb), buffer);
-}
-
-static void
-debug_window_message_dialog (EmpathyDebugWindow *self,
- const gchar *primary_text,
- const gchar *secondary_text)
-{
- GtkWidget *dialog;
-
- dialog = gtk_message_dialog_new (GTK_WINDOW (self),
- GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_INFO, GTK_BUTTONS_OK,
- "%s", _(primary_text));
- gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (dialog),
- "%s", _(secondary_text));
- gtk_window_set_transient_for (GTK_WINDOW (dialog),
- GTK_WINDOW (self));
-
- gtk_dialog_run (GTK_DIALOG (dialog));
- gtk_widget_destroy (dialog);
-}
-
-static void
-debug_window_send_to_pastebin (EmpathyDebugWindow *self,
- gchar *debug_data)
-{
- SoupSession *session;
- SoupMessage *msg;
- gchar *api_dev_key, *api_paste_code, *api_paste_name, *formdata;
-
- if (tp_str_empty (debug_data))
- {
- debug_window_message_dialog (self, "Error", "No data to send");
- return;
- }
-
- /* Constructing a valid URL for http post. See http://pastebin.com/api#2 */
-
- /* The api_dev_key is the author's developer key to access the Pastebin API
- * This developer key is published here with the autorization of pastebin;
- * see PASTEBIN-API-KEY.txt */
- api_dev_key = soup_uri_encode ("f6ccfabfdcd4b77b825ee38a30d11d52", NULL);
- api_paste_code = soup_uri_encode (debug_data, NULL);
- api_paste_name = soup_uri_encode ("Empathy debug data", NULL);
- formdata = g_strdup_printf ("api_dev_key=%s&api_paste_code=%s"
- "&api_paste_name=%s&api_paste_format=text&api_option=paste",
- api_dev_key, api_paste_code, api_paste_name);
-
- session = soup_session_async_new ();
-
- msg = soup_message_new ("POST", "http://pastebin.com/api/api_post.php");
- soup_message_set_request (msg,
- "application/x-www-form-urlencoded;charset=UTF-8", SOUP_MEMORY_COPY,
- formdata, strlen (formdata));
-
- g_free (api_dev_key);
- g_free (api_paste_code);
- g_free (api_paste_name);
- g_free (formdata);
-
- soup_session_queue_message (session, msg, debug_window_pastebin_callback,
- self);
-}
-
-static void
-debug_window_send_to_pastebin_cb (GtkToolButton *tool_button,
- EmpathyDebugWindow *self)
-{
- gchar *debug_data = NULL;
-
- DEBUG ("Preparing debug data for sending to pastebin.");
-
- gtk_tree_model_foreach (self->priv->store_filter,
- debug_window_copy_model_foreach, &debug_data);
-
- debug_window_send_to_pastebin (self, debug_data);
- g_free (debug_data);
-}
-
-static void
-debug_window_copy_clicked_cb (GtkToolButton *tool_button,
- EmpathyDebugWindow *self)
-{
- GtkClipboard *clipboard;
- gchar *text = NULL;
-
- gtk_tree_model_foreach (self->priv->store_filter,
- debug_window_copy_model_foreach, &text);
-
- clipboard = gtk_clipboard_get_for_display (
- gtk_widget_get_display (GTK_WIDGET (tool_button)),
- GDK_SELECTION_CLIPBOARD);
-
- DEBUG ("Copying text to clipboard (length: %" G_GSIZE_FORMAT ")",
- strlen (text));
-
- gtk_clipboard_set_text (clipboard, text, -1);
-
- g_free (text);
-}
-
-static gboolean
-debug_window_key_press_event_cb (GtkWidget *widget,
- GdkEventKey *event,
- gpointer user_data)
-{
- if ((event->state & GDK_CONTROL_MASK && event->keyval == GDK_KEY_w)
- || event->keyval == GDK_KEY_Escape)
- {
- gtk_widget_destroy (widget);
- return TRUE;
- }
-
- return FALSE;
-}
-
-static void
-empathy_debug_window_select_name (EmpathyDebugWindow *self,
- const gchar *name)
-{
- GtkTreeModel *model = GTK_TREE_MODEL (self->priv->service_store);
- GtkTreeIter iter;
- gchar *iter_name;
- gboolean valid, found = FALSE;
-
- for (valid = gtk_tree_model_get_iter_first (model, &iter);
- valid;
- valid = gtk_tree_model_iter_next (model, &iter))
- {
- gtk_tree_model_get (model, &iter,
- COL_NAME, &iter_name,
- -1);
-
- if (!tp_strdiff (name, iter_name))
- found = TRUE;
-
- g_free (iter_name);
-
- if (found)
- break;
- }
-
- if (found)
- gtk_combo_box_set_active_iter (GTK_COMBO_BOX (self->priv->chooser), &iter);
-}
-
-static void
-am_prepared_cb (GObject *am,
- GAsyncResult *res,
- gpointer user_data)
-{
- EmpathyDebugWindow *self = user_data;
- GObject *object = user_data;
- GtkWidget *vbox;
- GtkWidget *toolbar;
- GtkWidget *image;
- GtkWidget *label;
- GtkToolItem *item;
- GtkCellRenderer *renderer;
- GtkListStore *level_store;
- GtkTreeIter iter;
- GError *error = NULL;
- GtkWidget *infobar, *content;
-
- if (!tp_proxy_prepare_finish (am, res, &error))
- {
- g_warning ("Failed to prepare AM: %s", error->message);
- g_clear_error (&error);
- }
-
- empathy_set_css_provider (GTK_WIDGET (object));
-
- gtk_window_set_title (GTK_WINDOW (object), _("Debug Window"));
- gtk_window_set_default_size (GTK_WINDOW (object), 800, 400);
- empathy_geometry_bind (GTK_WINDOW (object), "debug-window");
-
- g_signal_connect (object, "key-press-event",
- G_CALLBACK (debug_window_key_press_event_cb), NULL);
-
- vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
- gtk_container_add (GTK_CONTAINER (object), vbox);
- gtk_widget_show (vbox);
-
- toolbar = gtk_toolbar_new ();
- gtk_toolbar_set_style (GTK_TOOLBAR (toolbar), GTK_TOOLBAR_BOTH_HORIZ);
- gtk_toolbar_set_show_arrow (GTK_TOOLBAR (toolbar), TRUE);
- gtk_toolbar_set_icon_size (GTK_TOOLBAR (toolbar),
- GTK_ICON_SIZE_SMALL_TOOLBAR);
- gtk_style_context_add_class (gtk_widget_get_style_context (toolbar),
- GTK_STYLE_CLASS_PRIMARY_TOOLBAR);
- gtk_widget_show (toolbar);
-
- gtk_box_pack_start (GTK_BOX (vbox), toolbar, FALSE, FALSE, 0);
-
- /* CM */
- self->priv->chooser = gtk_combo_box_text_new ();
- self->priv->service_store = gtk_list_store_new (NUM_COLS,
- G_TYPE_STRING, /* COL_NAME */
- G_TYPE_STRING, /* COL_UNIQUE_NAME */
- G_TYPE_BOOLEAN, /* COL_GONE */
- G_TYPE_OBJECT, /* COL_ACTIVE_BUFFER */
- G_TYPE_OBJECT, /* COL_PAUSE_BUFFER */
- TP_TYPE_PROXY); /* COL_PROXY */
- gtk_combo_box_set_model (GTK_COMBO_BOX (self->priv->chooser),
- GTK_TREE_MODEL (self->priv->service_store));
- gtk_widget_show (self->priv->chooser);
-
- item = gtk_tool_item_new ();
- gtk_widget_show (GTK_WIDGET (item));
- gtk_container_add (GTK_CONTAINER (item), self->priv->chooser);
- gtk_toolbar_insert (GTK_TOOLBAR (toolbar), item, -1);
- g_signal_connect (self->priv->chooser, "changed",
- G_CALLBACK (debug_window_service_chooser_changed_cb), object);
- gtk_widget_show (GTK_WIDGET (self->priv->chooser));
-
- item = gtk_separator_tool_item_new ();
- gtk_widget_show (GTK_WIDGET (item));
- gtk_toolbar_insert (GTK_TOOLBAR (toolbar), item, -1);
-
- /* Save */
- self->priv->save_button = gtk_tool_button_new_from_stock (GTK_STOCK_SAVE);
- g_signal_connect (self->priv->save_button, "clicked",
- G_CALLBACK (debug_window_save_clicked_cb), object);
- gtk_widget_show (GTK_WIDGET (self->priv->save_button));
- gtk_tool_item_set_is_important (GTK_TOOL_ITEM (self->priv->save_button),
- TRUE);
- gtk_toolbar_insert (GTK_TOOLBAR (toolbar), self->priv->save_button, -1);
-
- /* Send to pastebin */
- self->priv->send_to_pastebin = gtk_tool_button_new_from_stock (
- GTK_STOCK_PASTE);
- gtk_tool_button_set_label (GTK_TOOL_BUTTON (self->priv->send_to_pastebin),
- _("Send to pastebin"));
- g_signal_connect (self->priv->send_to_pastebin, "clicked",
- G_CALLBACK (debug_window_send_to_pastebin_cb), object);
- gtk_widget_show (GTK_WIDGET (self->priv->send_to_pastebin));
- gtk_tool_item_set_is_important (GTK_TOOL_ITEM (self->priv->send_to_pastebin),
- TRUE);
- gtk_toolbar_insert (GTK_TOOLBAR (toolbar), self->priv->send_to_pastebin, -1);
-
- /* Copy */
- self->priv->copy_button = gtk_tool_button_new_from_stock (GTK_STOCK_COPY);
- g_signal_connect (self->priv->copy_button, "clicked",
- G_CALLBACK (debug_window_copy_clicked_cb), object);
- gtk_widget_show (GTK_WIDGET (self->priv->copy_button));
- gtk_tool_item_set_is_important (GTK_TOOL_ITEM (self->priv->copy_button),
- TRUE);
- gtk_toolbar_insert (GTK_TOOLBAR (toolbar), self->priv->copy_button, -1);
-
- /* Clear */
- self->priv->clear_button = gtk_tool_button_new_from_stock (GTK_STOCK_CLEAR);
- g_signal_connect (self->priv->clear_button, "clicked",
- G_CALLBACK (debug_window_clear_clicked_cb), object);
- gtk_widget_show (GTK_WIDGET (self->priv->clear_button));
- gtk_tool_item_set_is_important (GTK_TOOL_ITEM (self->priv->clear_button),
- TRUE);
- gtk_toolbar_insert (GTK_TOOLBAR (toolbar), self->priv->clear_button, -1);
-
- item = gtk_separator_tool_item_new ();
- gtk_widget_show (GTK_WIDGET (item));
- gtk_toolbar_insert (GTK_TOOLBAR (toolbar), item, -1);
-
- /* Pause */
- self->priv->paused = FALSE;
- image = gtk_image_new_from_stock (GTK_STOCK_MEDIA_PAUSE,
- GTK_ICON_SIZE_MENU);
- gtk_widget_show (image);
- self->priv->pause_button = gtk_toggle_tool_button_new ();
- gtk_toggle_tool_button_set_active (
- GTK_TOGGLE_TOOL_BUTTON (self->priv->pause_button), self->priv->paused);
- g_signal_connect (self->priv->pause_button, "toggled",
- G_CALLBACK (debug_window_pause_toggled_cb), object);
- gtk_widget_show (GTK_WIDGET (self->priv->pause_button));
- gtk_tool_item_set_is_important (GTK_TOOL_ITEM (self->priv->pause_button),
- TRUE);
- gtk_tool_button_set_label (GTK_TOOL_BUTTON (self->priv->pause_button),
- _("Pause"));
- gtk_tool_button_set_icon_widget (
- GTK_TOOL_BUTTON (self->priv->pause_button), image);
- gtk_toolbar_insert (GTK_TOOLBAR (toolbar), self->priv->pause_button, -1);
-
- item = gtk_separator_tool_item_new ();
- gtk_widget_show (GTK_WIDGET (item));
- gtk_toolbar_insert (GTK_TOOLBAR (toolbar), item, -1);
-
- /* Level */
- self->priv->level_label = gtk_tool_item_new ();
- gtk_widget_show (GTK_WIDGET (self->priv->level_label));
- label = gtk_label_new (_("Level "));
- gtk_widget_show (label);
- gtk_container_add (GTK_CONTAINER (self->priv->level_label), label);
- gtk_toolbar_insert (GTK_TOOLBAR (toolbar), self->priv->level_label, -1);
-
- self->priv->level_filter = gtk_combo_box_text_new ();
- gtk_widget_show (self->priv->level_filter);
-
- item = gtk_tool_item_new ();
- gtk_widget_show (GTK_WIDGET (item));
- gtk_container_add (GTK_CONTAINER (item), self->priv->level_filter);
- gtk_toolbar_insert (GTK_TOOLBAR (toolbar), item, -1);
-
- level_store = gtk_list_store_new (NUM_COLS_LEVEL,
- G_TYPE_STRING, G_TYPE_UINT);
- gtk_combo_box_set_model (GTK_COMBO_BOX (self->priv->level_filter),
- GTK_TREE_MODEL (level_store));
-
- gtk_list_store_insert_with_values (level_store, &iter, -1,
- COL_LEVEL_NAME, _("Debug"),
- COL_LEVEL_VALUE, G_LOG_LEVEL_DEBUG,
- -1);
-
- gtk_list_store_insert_with_values (level_store, &iter, -1,
- COL_LEVEL_NAME, _("Info"),
- COL_LEVEL_VALUE, G_LOG_LEVEL_INFO,
- -1);
-
- gtk_list_store_insert_with_values (level_store, &iter, -1,
- COL_LEVEL_NAME, _("Message"),
- COL_LEVEL_VALUE, G_LOG_LEVEL_MESSAGE,
- -1);
-
- gtk_list_store_insert_with_values (level_store, &iter, -1,
- COL_LEVEL_NAME, _("Warning"),
- COL_LEVEL_VALUE, G_LOG_LEVEL_WARNING,
- -1);
-
- gtk_list_store_insert_with_values (level_store, &iter, -1,
- COL_LEVEL_NAME, _("Critical"),
- COL_LEVEL_VALUE, G_LOG_LEVEL_CRITICAL,
- -1);
-
- gtk_list_store_insert_with_values (level_store, &iter, -1,
- COL_LEVEL_NAME, _("Error"),
- COL_LEVEL_VALUE, G_LOG_LEVEL_ERROR,
- -1);
-
- gtk_combo_box_set_active (GTK_COMBO_BOX (self->priv->level_filter), 0);
- g_signal_connect (self->priv->level_filter, "changed",
- G_CALLBACK (debug_window_filter_changed_cb), object);
-
- /* Info bar */
- infobar = gtk_info_bar_new ();
- gtk_info_bar_set_message_type (GTK_INFO_BAR (infobar), GTK_MESSAGE_INFO);
-
- label = gtk_label_new (
- _("Even if they don't display passwords, logs can contain sensitive "
- "information such as your list of contacts or the messages you "
- "recently sent or received.\nIf you don't want to see such "
- "information available in a public bug report, you "
- "can choose to limit the visibility of your bug to "
- "Empathy developers when reporting it by displaying "
- "the advanced fields in the "
- "<a href=\"https://bugzilla.gnome.org/enter_bug.cgi?product=empathy\">"
- "bug report</a>."));
- gtk_label_set_use_markup (GTK_LABEL (label), TRUE);
- gtk_label_set_line_wrap (GTK_LABEL (label), TRUE);
- gtk_style_context_add_class (gtk_widget_get_style_context (label),
- GTK_STYLE_CLASS_DIM_LABEL);
-
- content = gtk_info_bar_get_content_area (GTK_INFO_BAR (infobar));
- gtk_box_pack_start (GTK_BOX (content), label, FALSE, FALSE, 0);
-
- gtk_widget_show (infobar);
- gtk_widget_show (label);
- gtk_box_pack_start (GTK_BOX (vbox), infobar, FALSE, FALSE, 0);
-
- /* Debug treeview */
- self->priv->view = gtk_tree_view_new ();
- gtk_tree_view_set_rules_hint (GTK_TREE_VIEW (self->priv->view), TRUE);
-
- g_signal_connect (self->priv->view, "button-press-event",
- G_CALLBACK (debug_window_button_press_event_cb), object);
-
- renderer = gtk_cell_renderer_text_new ();
- g_object_set (renderer, "yalign", (gfloat) 0, NULL);
-
- gtk_tree_view_insert_column_with_data_func (GTK_TREE_VIEW (self->priv->view),
- -1, _("Time"), renderer,
- (GtkTreeCellDataFunc) debug_window_time_formatter, NULL, NULL);
- gtk_tree_view_insert_column_with_data_func (GTK_TREE_VIEW (self->priv->view),
- -1, _("Domain"), renderer,
- (GtkTreeCellDataFunc) debug_window_domain_formatter, NULL, NULL);
- gtk_tree_view_insert_column_with_data_func (GTK_TREE_VIEW (self->priv->view),
- -1, _("Category"), renderer,
- (GtkTreeCellDataFunc) debug_window_category_formatter, NULL, NULL);
- gtk_tree_view_insert_column_with_data_func (GTK_TREE_VIEW (self->priv->view),
- -1, _("Level"), renderer,
- (GtkTreeCellDataFunc) debug_window_level_formatter, NULL, NULL);
-
- renderer = gtk_cell_renderer_text_new ();
- g_object_set (renderer, "family", "Monospace", NULL);
- gtk_tree_view_insert_column_with_data_func (GTK_TREE_VIEW (self->priv->view),
- -1, _("Message"), renderer,
- (GtkTreeCellDataFunc) debug_window_message_formatter, NULL, NULL);
-
- self->priv->store_filter = NULL;
-
- gtk_tree_view_set_model (GTK_TREE_VIEW (self->priv->view),
- self->priv->store_filter);
-
- /* Scrolled window */
- self->priv->scrolled_win = g_object_ref (gtk_scrolled_window_new (
- NULL, NULL));
- gtk_scrolled_window_set_policy (
- GTK_SCROLLED_WINDOW (self->priv->scrolled_win),
- GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
-
- gtk_widget_show (self->priv->view);
- gtk_container_add (GTK_CONTAINER (self->priv->scrolled_win),
- self->priv->view);
-
- gtk_widget_show (self->priv->scrolled_win);
-
- /* Not supported label */
- self->priv->not_supported_label = g_object_ref (gtk_label_new (
- _("The selected connection manager does not support the remote "
- "debugging extension.")));
- gtk_widget_show (self->priv->not_supported_label);
- gtk_box_pack_start (GTK_BOX (vbox), self->priv->not_supported_label,
- TRUE, TRUE, 0);
-
- self->priv->view_visible = FALSE;
-
- self->priv->all_active_buffer = NULL;
-
- debug_window_set_toolbar_sensitivity (EMPATHY_DEBUG_WINDOW (object), FALSE);
- debug_window_fill_service_chooser (EMPATHY_DEBUG_WINDOW (object));
- gtk_widget_show (GTK_WIDGET (object));
-}
-
-static void
-debug_window_constructed (GObject *object)
-{
- EmpathyDebugWindow *self = EMPATHY_DEBUG_WINDOW (object);
-
- self->priv->am = tp_account_manager_dup ();
- tp_proxy_prepare_async (self->priv->am, NULL, am_prepared_cb, object);
-}
-
-static void
-empathy_debug_window_init (EmpathyDebugWindow *self)
-{
- self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self,
- EMPATHY_TYPE_DEBUG_WINDOW, EmpathyDebugWindowPriv);
-}
-
-static void
-debug_window_set_property (GObject *object,
- guint prop_id,
- const GValue *value,
- GParamSpec *pspec)
-{
- switch (prop_id)
- {
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
- break;
- }
-}
-
-static void
-debug_window_get_property (GObject *object,
- guint prop_id,
- GValue *value,
- GParamSpec *pspec)
-{
- switch (prop_id)
- {
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
- break;
- }
-}
-
-static void
-debug_window_finalize (GObject *object)
-{
- EmpathyDebugWindow *self = EMPATHY_DEBUG_WINDOW (object);
-
- g_free (self->priv->select_name);
-
- (G_OBJECT_CLASS (empathy_debug_window_parent_class)->finalize) (object);
-}
-
-static void
-debug_window_dispose (GObject *object)
-{
- EmpathyDebugWindow *self = EMPATHY_DEBUG_WINDOW (object);
-
- if (self->priv->name_owner_changed_signal != NULL)
- tp_proxy_signal_connection_disconnect (
- self->priv->name_owner_changed_signal);
-
- g_clear_object (&self->priv->service_store);
- g_clear_object (&self->priv->dbus);
- g_clear_object (&self->priv->am);
- g_clear_object (&self->priv->all_active_buffer);
-
- (G_OBJECT_CLASS (empathy_debug_window_parent_class)->dispose) (object);
-}
-
-static void
-empathy_debug_window_class_init (EmpathyDebugWindowClass *klass)
-{
- GObjectClass *object_class = G_OBJECT_CLASS (klass);
- object_class->constructed = debug_window_constructed;
- object_class->dispose = debug_window_dispose;
- object_class->finalize = debug_window_finalize;
- object_class->set_property = debug_window_set_property;
- object_class->get_property = debug_window_get_property;
-
- g_type_class_add_private (klass, sizeof (EmpathyDebugWindowPriv));
-}
-
-/* public methods */
-
-GtkWidget *
-empathy_debug_window_new (GtkWindow *parent)
-{
- g_return_val_if_fail (parent == NULL || GTK_IS_WINDOW (parent), NULL);
-
- return GTK_WIDGET (g_object_new (EMPATHY_TYPE_DEBUG_WINDOW,
- "transient-for", parent, NULL));
-}
-
-void
-empathy_debug_window_show (EmpathyDebugWindow *self,
- const gchar *name)
-{
- if (self->priv->service_store != NULL)
- {
- empathy_debug_window_select_name (self, name);
- }
- else
- {
- g_free (self->priv->select_name);
- self->priv->select_name = g_strdup (name);
- }
-}
diff --git a/src/empathy-debug-window.h b/src/empathy-debug-window.h
deleted file mode 100644
index c8944bf0..00000000
--- a/src/empathy-debug-window.h
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
-* Copyright (C) 2009 Collabora Ltd.
-*
-* This library is free software; you can redistribute it and/or
-* modify it under the terms of the GNU Lesser General Public
-* License as published by the Free Software Foundation; either
-* version 2.1 of the License, or (at your option) any later version.
-*
-* This library is distributed in the hope that it will be useful,
-* but WITHOUT ANY WARRANTY; without even the implied warranty of
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-* Lesser General Public License for more details.
-*
-* You should have received a copy of the GNU Lesser General Public
-* License along with this library; if not, write to the Free Software
-* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
-*
-* Authors: Jonny Lamb <jonny.lamb@collabora.co.uk>
-*/
-
-#ifndef __EMPATHY_DEBUG_WINDOW_H__
-#define __EMPATHY_DEBUG_WINDOW_H__
-
-#include <gtk/gtk.h>
-
-G_BEGIN_DECLS
-
-#define EMPATHY_TYPE_DEBUG_WINDOW (empathy_debug_window_get_type ())
-#define EMPATHY_DEBUG_WINDOW(object) (G_TYPE_CHECK_INSTANCE_CAST \
- ((object), EMPATHY_TYPE_DEBUG_WINDOW, EmpathyDebugWindow))
-#define EMPATHY_DEBUG_WINDOW_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), \
- EMPATHY_TYPE_DEBUG_WINDOW, EmpathyDebugWindowClass))
-#define EMPATHY_IS_DEBUG_WINDOW(object) (G_TYPE_CHECK_INSTANCE_TYPE \
- ((object), EMPATHY_TYPE_DEBUG_WINDOW))
-#define EMPATHY_IS_DEBUG_WINDOW_CLASS(klass) \
- (G_TYPE_CHECK_CLASS_TYPE ((klass), EMPATHY_TYPE_DEBUG_WINDOW))
-#define EMPATHY_DEBUG_WINDOW_GET_CLASS(object) (G_TYPE_INSTANCE_GET_CLASS \
- ((object), EMPATHY_TYPE_DEBUG_WINDOW, EmpathyDebugWindowClass))
-
-#define DEBUG_OBJECT_PATH "/org/freedesktop/Telepathy/debug"
-
-typedef struct _EmpathyDebugWindow EmpathyDebugWindow;
-typedef struct _EmpathyDebugWindowClass EmpathyDebugWindowClass;
-typedef struct _EmpathyDebugWindowPriv EmpathyDebugWindowPriv;
-
-struct _EmpathyDebugWindow
-{
- GtkWindow parent;
- EmpathyDebugWindowPriv *priv;
-};
-
-struct _EmpathyDebugWindowClass
-{
- GtkWindowClass parent_class;
-};
-
-GType empathy_debug_window_get_type (void) G_GNUC_CONST;
-
-GtkWidget * empathy_debug_window_new (GtkWindow *parent);
-
-void empathy_debug_window_show (EmpathyDebugWindow *self,
- const gchar *name);
-
-G_END_DECLS
-
-#endif /* __EMPATHY_DEBUG_WINDOW_H__ */
diff --git a/src/empathy-debugger.c b/src/empathy-debugger.c
deleted file mode 100644
index fb4ef1e4..00000000
--- a/src/empathy-debugger.c
+++ /dev/null
@@ -1,153 +0,0 @@
-/*
- * Copyright (C) 2005-2007 Imendio AB
- * Copyright (C) 2007-2010 Collabora Ltd.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-#include "config.h"
-
-#include <glib/gi18n.h>
-
-#include "empathy-debug-window.h"
-#include "empathy-ui-utils.h"
-
-#define EMPATHY_DEBUGGER_DBUS_NAME "org.gnome.Empathy.Debugger"
-
-static GtkWidget *window = NULL;
-static gchar *service = NULL;
-
-static void
-app_activate (GApplication *app)
-{
- if (window == NULL)
- {
- window = empathy_debug_window_new (NULL);
-
- gtk_application_add_window (GTK_APPLICATION (app),
- GTK_WINDOW (window));
- }
- else
- {
- gtk_window_present (GTK_WINDOW (window));
- }
-
- if (!tp_str_empty (service))
- empathy_debug_window_show (EMPATHY_DEBUG_WINDOW (window),
- service);
-}
-
-static void
-on_show_service_cb (GAction *action,
- GVariant *parameter,
- gpointer data)
-{
- g_free (service);
- service = g_variant_dup_string (parameter, NULL);
-}
-
-static gboolean
-local_cmdline (GApplication *app,
- gchar ***arguments,
- gint *exit_status)
-{
- GError *error = NULL;
- GSimpleAction *action;
- gchar **argv;
- gint argc;
- gint i;
- gboolean retval = TRUE;
-
- GOptionContext *optcontext;
- GOptionEntry options[] = {
- { "show-service", 's',
- 0, G_OPTION_ARG_STRING, &service,
- N_("Show a particular service"),
- NULL },
- { NULL }
- };
-
- optcontext = g_option_context_new (N_("- Empathy Debugger"));
- g_option_context_add_group (optcontext, gtk_get_option_group (FALSE));
- g_option_context_add_main_entries (optcontext, options, GETTEXT_PACKAGE);
- g_option_context_set_translation_domain (optcontext, GETTEXT_PACKAGE);
-
- action = g_simple_action_new ("show-service", G_VARIANT_TYPE_STRING);
- g_signal_connect (action, "activate", G_CALLBACK (on_show_service_cb), app);
- g_action_map_add_action (G_ACTION_MAP (app), G_ACTION (action));
- g_object_unref (action);
-
- argv = *arguments;
- for (i = 0; argv[i] != NULL; i++)
- argc++;
-
- if (!g_option_context_parse (optcontext, &argc, &argv, &error))
- {
- g_print ("%s\nRun '%s --help' to see a full list of available command "
- "line options.\n",
- error->message, argv[0]);
-
- g_clear_error (&error);
- *exit_status = EXIT_FAILURE;
- }
- else
- {
- if (g_application_register (app, NULL, &error))
- {
- GVariant *parameter = g_variant_new_string (service ? service : "");
- g_action_group_activate_action (G_ACTION_GROUP (app), "show-service", parameter);
-
- g_application_activate (app);
- }
- else
- {
- g_warning("Impossible to register empathy-debugger: %s", error->message);
- g_clear_error (&error);
- *exit_status = EXIT_FAILURE;
- }
- }
-
- g_option_context_free (optcontext);
-
- return retval;
-}
-
-int
-main (int argc,
- char **argv)
-{
- GtkApplication *app;
- GApplicationClass *app_class;
- gint retval;
-
- textdomain (GETTEXT_PACKAGE);
-
- app = gtk_application_new (EMPATHY_DEBUGGER_DBUS_NAME, G_APPLICATION_FLAGS_NONE);
- app_class = G_APPLICATION_CLASS (G_OBJECT_GET_CLASS (app));
- app_class->local_command_line = local_cmdline;
- app_class->activate = app_activate;
-
- g_set_application_name (_("Empathy Debugger"));
-
- /* Make empathy and empathy-debugger appear as the same app in gnome-shell */
- gdk_set_program_class ("Empathy");
- gtk_window_set_default_icon_name ("empathy");
-
- retval = g_application_run (G_APPLICATION (app), argc, argv);
-
- g_object_unref (app);
-
- return retval;
-}
diff --git a/src/empathy-event-manager.c b/src/empathy-event-manager.c
deleted file mode 100644
index e973ef3b..00000000
--- a/src/empathy-event-manager.c
+++ /dev/null
@@ -1,1525 +0,0 @@
-/*
- * 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>
- * Sjoerd Simons <sjoerd.simons@collabora.co.uk>
- */
-
-#include "config.h"
-#include "empathy-event-manager.h"
-
-#include <glib/gi18n.h>
-#include <tp-account-widgets/tpaw-images.h>
-#include <tp-account-widgets/tpaw-utils.h>
-
-#include "empathy-call-utils.h"
-#include "empathy-connection-aggregator.h"
-#include "empathy-gsettings.h"
-#include "empathy-images.h"
-#include "empathy-presence-manager.h"
-#include "empathy-sasl-mechanisms.h"
-#include "empathy-sound-manager.h"
-#include "empathy-subscription-dialog.h"
-#include "empathy-tp-chat.h"
-#include "empathy-ui-utils.h"
-#include "empathy-utils.h"
-
-#define DEBUG_FLAG EMPATHY_DEBUG_DISPATCHER
-#include "empathy-debug.h"
-
-#define GET_PRIV(obj) EMPATHY_GET_PRIV (obj, EmpathyEventManager)
-
-#define NOTIFICATION_TIMEOUT 2 /* seconds */
-
-#define ACCEPT_WITHOUT_VIDEO 1
-
-/* The time interval in milliseconds between 2 incoming rings */
-#define MS_BETWEEN_RING 500
-
-typedef struct {
- EmpathyEventManager *manager;
- TpChannelDispatchOperation *operation;
- gulong invalidated_handler;
- /* Remove contact if applicable */
- EmpathyContact *contact;
- /* option signal handler and it's instance */
- gulong handler;
- GObject *handler_instance;
- /* optional accept widget */
- GtkWidget *dialog;
- /* Channel of the CDO that will be used during the approval */
- TpChannel *main_channel;
- gboolean auto_approved;
-} EventManagerApproval;
-
-typedef struct {
- TpBaseClient *approver;
- TpBaseClient *auth_approver;
- EmpathyConnectionAggregator *conn_aggregator;
- GSList *events;
- /* Ongoing approvals */
- GSList *approvals;
-
- gint ringing;
-
- GSettings *gsettings_notif;
- GSettings *gsettings_ui;
-
- EmpathySoundManager *sound_mgr;
-
- /* TpContact -> EmpathyContact */
- GHashTable *contacts;
-} EmpathyEventManagerPriv;
-
-typedef struct _EventPriv EventPriv;
-typedef void (*EventFunc) (EventPriv *event);
-
-struct _EventPriv {
- EmpathyEvent public;
- EmpathyEventManager *manager;
- EventManagerApproval *approval;
- EventFunc func;
- gboolean inhibit;
- gpointer user_data;
- guint autoremove_timeout_id;
-};
-
-enum {
- EVENT_ADDED,
- EVENT_REMOVED,
- EVENT_UPDATED,
- LAST_SIGNAL
-};
-
-static guint signals[LAST_SIGNAL];
-
-G_DEFINE_TYPE (EmpathyEventManager, empathy_event_manager, G_TYPE_OBJECT);
-
-static EmpathyEventManager * manager_singleton = NULL;
-
-static EventManagerApproval *
-event_manager_approval_new (EmpathyEventManager *manager,
- TpChannelDispatchOperation *operation,
- TpChannel *main_channel)
-{
- EventManagerApproval *result = g_slice_new0 (EventManagerApproval);
- result->operation = g_object_ref (operation);
- result->manager = manager;
- result->main_channel = g_object_ref (main_channel);
-
- return result;
-}
-
-static void
-event_manager_approval_free (EventManagerApproval *approval)
-{
- g_signal_handler_disconnect (approval->operation,
- approval->invalidated_handler);
- g_object_unref (approval->operation);
-
- g_object_unref (approval->main_channel);
-
- if (approval->handler != 0)
- g_signal_handler_disconnect (approval->handler_instance,
- approval->handler);
-
- if (approval->handler_instance != NULL)
- g_object_unref (approval->handler_instance);
-
- if (approval->contact != NULL)
- g_object_unref (approval->contact);
-
- if (approval->dialog != NULL)
- {
- gtk_widget_destroy (approval->dialog);
- }
-
- g_slice_free (EventManagerApproval, approval);
-}
-
-static void
-event_free (EventPriv *event)
-{
- g_free (event->public.icon_name);
- g_free (event->public.header);
- g_free (event->public.message);
-
- if (event->autoremove_timeout_id != 0)
- g_source_remove (event->autoremove_timeout_id);
-
- tp_clear_object (&(event->public.contact));
- tp_clear_object (&(event->public.account));
-
- g_slice_free (EventPriv, event);
-}
-
-static void
-event_remove (EventPriv *event)
-{
- EmpathyEventManagerPriv *priv = GET_PRIV (event->manager);
-
- DEBUG ("Removing event %p", event);
-
- priv->events = g_slist_remove (priv->events, event);
- g_signal_emit (event->manager, signals[EVENT_REMOVED], 0, event);
- event_free (event);
-}
-
-void
-empathy_event_remove (EmpathyEvent *event_public)
-{
- EventPriv *event = (EventPriv *) event_public;
-
- event_remove (event);
-}
-
-static gboolean
-autoremove_event_timeout_cb (EventPriv *event)
-{
- event->autoremove_timeout_id = 0;
- event_remove (event);
- return FALSE;
-}
-
-static gboolean
-display_notify_area (EmpathyEventManager *self)
-{
- EmpathyEventManagerPriv *priv = GET_PRIV (self);
-
- return g_settings_get_boolean (priv->gsettings_ui,
- EMPATHY_PREFS_UI_EVENTS_NOTIFY_AREA);
-}
-
-static void
-event_manager_add (EmpathyEventManager *manager,
- TpAccount *account,
- EmpathyContact *contact,
- EmpathyEventType type,
- const gchar *icon_name,
- const gchar *header,
- const gchar *message,
- EventManagerApproval *approval,
- EventFunc func,
- gpointer user_data)
-{
- EmpathyEventManagerPriv *priv = GET_PRIV (manager);
- EventPriv *event;
-
- event = g_slice_new0 (EventPriv);
- event->public.account = account != NULL ? g_object_ref (account) : NULL;
- event->public.contact = contact ? g_object_ref (contact) : NULL;
- event->public.type = type;
- event->public.icon_name = g_strdup (icon_name);
- event->public.header = g_strdup (header);
- event->public.message = g_strdup (message);
- event->public.must_ack = (func != NULL);
- if (approval != NULL)
- event->public.handler_instance = approval->handler_instance;
- event->inhibit = FALSE;
- event->func = func;
- event->user_data = user_data;
- event->manager = manager;
- event->approval = approval;
-
- DEBUG ("Adding event %p", event);
- priv->events = g_slist_prepend (priv->events, event);
-
- if (!display_notify_area (manager))
- {
- /* Don't fire the 'event-added' signal as we activate the event now */
- if (approval != NULL)
- approval->auto_approved = TRUE;
-
- empathy_event_activate (&event->public);
- return;
- }
-
- g_signal_emit (event->manager, signals[EVENT_ADDED], 0, event);
-
- if (!event->public.must_ack)
- {
- event->autoremove_timeout_id = g_timeout_add_seconds (
- NOTIFICATION_TIMEOUT, (GSourceFunc) autoremove_event_timeout_cb,
- event);
- }
-}
-
-static void
-handle_with_cb (GObject *source,
- GAsyncResult *result,
- gpointer user_data)
-{
- TpChannelDispatchOperation *cdo = TP_CHANNEL_DISPATCH_OPERATION (source);
- GError *error = NULL;
-
- if (!tp_channel_dispatch_operation_handle_with_finish (cdo, result, &error))
- {
- DEBUG ("HandleWith failed: %s\n", error->message);
- g_error_free (error);
- }
-}
-
-static void
-handle_with_time_cb (GObject *source,
- GAsyncResult *result,
- gpointer user_data)
-{
- TpChannelDispatchOperation *cdo = TP_CHANNEL_DISPATCH_OPERATION (source);
- GError *error = NULL;
-
- if (!tp_channel_dispatch_operation_handle_with_time_finish (cdo, result,
- &error))
- {
- if (g_error_matches (error, TP_ERROR, TP_ERROR_NOT_IMPLEMENTED))
- {
- EventManagerApproval *approval = user_data;
-
- DEBUG ("HandleWithTime() is not implemented, falling back to "
- "HandleWith(). Please upgrade to telepathy-mission-control "
- "5.5.0 or later");
-
- tp_channel_dispatch_operation_handle_with_async (approval->operation,
- NULL, handle_with_cb, approval);
- }
- else
- {
- DEBUG ("HandleWithTime failed: %s\n", error->message);
- }
- g_error_free (error);
- }
-}
-
-static void
-event_manager_approval_approve (EventManagerApproval *approval)
-{
- gint64 timestamp;
-
- if (approval->auto_approved)
- {
- timestamp = TP_USER_ACTION_TIME_NOT_USER_ACTION;
- }
- else
- {
- timestamp = empathy_get_current_action_time ();
- }
-
- g_assert (approval->operation != NULL);
-
- tp_channel_dispatch_operation_handle_with_time_async (approval->operation,
- NULL, timestamp, handle_with_time_cb, approval);
-}
-
-static void
-event_channel_process_func (EventPriv *event)
-{
- event_manager_approval_approve (event->approval);
-}
-
-static void
-event_text_channel_process_func (EventPriv *event)
-{
- EmpathyTpChat *tp_chat;
-
- if (event->approval->handler != 0)
- {
- tp_chat = EMPATHY_TP_CHAT (event->approval->handler_instance);
-
- g_signal_handler_disconnect (tp_chat, event->approval->handler);
- event->approval->handler = 0;
- }
-
- event_manager_approval_approve (event->approval);
-}
-
-static EventPriv *
-event_lookup_by_approval (EmpathyEventManager *manager,
- EventManagerApproval *approval)
-{
- EmpathyEventManagerPriv *priv = GET_PRIV (manager);
- GSList *l;
- EventPriv *retval = NULL;
-
- for (l = priv->events; l; l = l->next)
- {
- EventPriv *event = l->data;
-
- if (event->approval == approval)
- {
- retval = event;
- break;
- }
- }
-
- return retval;
-}
-
-static void
-event_update (EmpathyEventManager *manager, EventPriv *event,
- const char *icon_name, const char *header, const char *msg)
-{
- g_free (event->public.icon_name);
- g_free (event->public.header);
- g_free (event->public.message);
-
- event->public.icon_name = g_strdup (icon_name);
- event->public.header = g_strdup (header);
- event->public.message = g_strdup (msg);
-
- g_signal_emit (manager, signals[EVENT_UPDATED], 0, event);
-}
-
-static void
-reject_channel_claim_cb (GObject *source,
- GAsyncResult *result,
- gpointer user_data)
-{
- TpChannelDispatchOperation *cdo = TP_CHANNEL_DISPATCH_OPERATION (source);
- GError *error = NULL;
-
- if (!tp_channel_dispatch_operation_claim_with_finish (cdo, result, &error))
- {
- DEBUG ("Failed to claim channel: %s", error->message);
-
- g_error_free (error);
- goto out;
- }
-
- if (TP_IS_CALL_CHANNEL (user_data))
- {
- tp_call_channel_hangup_async (user_data,
- TP_CALL_STATE_CHANGE_REASON_USER_REQUESTED,
- "", "", NULL, NULL);
- tp_channel_close_async (user_data, NULL, NULL);
- }
- else if (EMPATHY_IS_TP_CHAT (user_data))
- {
- empathy_tp_chat_leave (user_data, "");
- }
- else if (TP_IS_FILE_TRANSFER_CHANNEL (user_data))
- {
- tp_channel_close_async (user_data, NULL, NULL);
- }
-
-out:
- g_object_unref (user_data);
-}
-
-static void
-reject_approval (EventManagerApproval *approval)
-{
- EmpathyEventManagerPriv *priv = GET_PRIV (approval->manager);
-
- /* We have to claim the channel before closing it */
-
- /* Unfortunately, we need to special case the auth channels for the
- * time being as they don't have a wrapper object handler in
- * approval->handler_instance as they're not actually handled by
- * this process, so we can just use a noddy callback to call Close()
- * directly. */
- if (approval->handler_instance != NULL)
- {
- tp_channel_dispatch_operation_claim_with_async (approval->operation,
- priv->approver, reject_channel_claim_cb,
- g_object_ref (approval->handler_instance));
- }
- else if (tp_channel_get_channel_type_id (approval->main_channel)
- == TP_IFACE_QUARK_CHANNEL_TYPE_SERVER_AUTHENTICATION)
- {
- tp_channel_dispatch_operation_close_channels_async (approval->operation,
- NULL, NULL);
- }
-}
-
-static void
-event_manager_call_window_confirmation_dialog_response_cb (GtkDialog *dialog,
- gint response, gpointer user_data)
-{
- EventManagerApproval *approval = user_data;
-
- gtk_widget_destroy (approval->dialog);
- approval->dialog = NULL;
-
- if (response == GTK_RESPONSE_ACCEPT)
- {
- event_manager_approval_approve (approval);
- }
- else if (response == ACCEPT_WITHOUT_VIDEO)
- {
- empathy_call_channel_send_video (TP_CALL_CHANNEL (approval->main_channel),
- FALSE);
- event_manager_approval_approve (approval);
- }
- else
- {
- reject_approval (approval);
- }
-}
-
-static void
-event_channel_process_voip_func (EventPriv *event)
-{
- GtkWidget *dialog;
- GtkWidget *button;
- GtkWidget *image;
- gboolean video;
- gchar *title;
- EmpathyEventType etype = event->public.type;
-
- if (event->approval->dialog != NULL)
- {
- gtk_window_present (GTK_WINDOW (event->approval->dialog));
- return;
- }
-
- if (etype == EMPATHY_EVENT_TYPE_CALL)
- {
- TpCallChannel *call;
- call = TP_CALL_CHANNEL (event->approval->handler_instance);
- video = tp_call_channel_has_initial_video (call, NULL);
- }
- else
- {
- g_warning ("Unknown event type: %d", event->public.type);
- return;
- }
-
- dialog = gtk_message_dialog_new (NULL, 0,
- GTK_MESSAGE_QUESTION, GTK_BUTTONS_NONE,
- video ? _("Incoming video call"): _("Incoming call"));
-
- gtk_message_dialog_format_secondary_text (
- GTK_MESSAGE_DIALOG (dialog), video ?
- _("%s is video calling you. Do you want to answer?"):
- _("%s is calling you. Do you want to answer?"),
- empathy_contact_get_alias (event->approval->contact));
-
- title = g_strdup_printf (_("Incoming call from %s"),
- empathy_contact_get_alias (event->approval->contact));
-
- gtk_window_set_title (GTK_WINDOW (dialog), title);
- g_free (title);
-
- /* Set image of the dialog */
- if (video)
- {
- image = gtk_image_new_from_icon_name (EMPATHY_IMAGE_VIDEO_CALL,
- GTK_ICON_SIZE_DIALOG);
- }
- else
- {
- image = gtk_image_new_from_icon_name (EMPATHY_IMAGE_VOIP,
- GTK_ICON_SIZE_DIALOG);
- }
-
- gtk_message_dialog_set_image (GTK_MESSAGE_DIALOG (dialog), image);
- gtk_widget_show (image);
-
- gtk_dialog_set_default_response (GTK_DIALOG (dialog),
- GTK_RESPONSE_OK);
-
- button = gtk_dialog_add_button (GTK_DIALOG (dialog),
- _("_Reject"), GTK_RESPONSE_REJECT);
- image = gtk_image_new_from_icon_name ("call-stop",
- GTK_ICON_SIZE_BUTTON);
- gtk_button_set_image (GTK_BUTTON (button), image);
-
- if (video && etype == EMPATHY_EVENT_TYPE_CALL)
- {
- button = gtk_dialog_add_button (GTK_DIALOG (dialog),
- _("_Answer"), ACCEPT_WITHOUT_VIDEO);
-
- image = gtk_image_new_from_icon_name ("call-start",
- GTK_ICON_SIZE_BUTTON);
- gtk_button_set_image (GTK_BUTTON (button), image);
- }
-
- button = gtk_dialog_add_button (GTK_DIALOG (dialog),
- video ? _("_Answer with video") : _("_Answer"), GTK_RESPONSE_ACCEPT);
-
- image = gtk_image_new_from_icon_name ("call-start",
- GTK_ICON_SIZE_BUTTON);
- gtk_button_set_image (GTK_BUTTON (button), image);
-
- g_signal_connect (dialog, "response",
- G_CALLBACK (event_manager_call_window_confirmation_dialog_response_cb),
- event->approval);
-
- gtk_widget_show (dialog);
-
- event->approval->dialog = dialog;
-}
-
-static void
-event_manager_chat_message_received_cb (EmpathyTpChat *tp_chat,
- EmpathyMessage *message,
- EventManagerApproval *approval)
-{
- EmpathyContact *sender;
- const gchar *header;
- const gchar *msg;
- EventPriv *event;
- EmpathyEventManagerPriv *priv = GET_PRIV (approval->manager);
-
- /* try to update the event if it's referring to a chat which is already in the
- * queue. */
- event = event_lookup_by_approval (approval->manager, approval);
-
- sender = empathy_message_get_sender (message);
-
- /* We only want to show incoming messages */
- if (empathy_contact_is_user (sender))
- return;
-
- header = empathy_contact_get_alias (sender);
- msg = empathy_message_get_body (message);
-
- if (event != NULL)
- event_update (approval->manager, event, EMPATHY_IMAGE_NEW_MESSAGE, header,
- msg);
- else
- event_manager_add (approval->manager, NULL, sender,
- EMPATHY_EVENT_TYPE_CHAT, EMPATHY_IMAGE_NEW_MESSAGE, header, msg,
- approval, event_text_channel_process_func, NULL);
-
- empathy_sound_manager_play (priv->sound_mgr, NULL,
- EMPATHY_SOUND_CONVERSATION_NEW);
-}
-
-static void
-event_manager_approval_done (EventManagerApproval *approval)
-{
- EmpathyEventManagerPriv *priv = GET_PRIV (approval->manager);
- GSList *l;
-
- if (approval->operation != NULL)
- {
- GQuark channel_type;
-
- channel_type = tp_channel_get_channel_type_id (approval->main_channel);
-
- if (channel_type == TP_IFACE_QUARK_CHANNEL_TYPE_STREAMED_MEDIA ||
- channel_type == TP_IFACE_QUARK_CHANNEL_TYPE_CALL)
- {
- priv->ringing--;
- if (priv->ringing == 0)
- empathy_sound_manager_stop (priv->sound_mgr,
- EMPATHY_SOUND_PHONE_INCOMING);
- }
- }
-
- priv->approvals = g_slist_remove (priv->approvals, approval);
-
- for (l = priv->events; l; l = l->next)
- {
- EventPriv *event = l->data;
-
- if (event->approval == approval)
- {
- event_remove (event);
- break;
- }
- }
-
- event_manager_approval_free (approval);
-}
-
-static void
-cdo_invalidated_cb (TpProxy *cdo,
- guint domain,
- gint code,
- gchar *message,
- EventManagerApproval *approval)
-{
- DEBUG ("ChannelDispatchOperation has been invalidated: %s", message);
-
- event_manager_approval_done (approval);
-}
-
-static void
-event_manager_call_state_changed_cb (TpCallChannel *call,
- TpCallState state,
- TpCallFlags flags,
- TpCallStateReason *reason,
- GHashTable *details,
- EventManagerApproval *approval)
-{
- if (state == TP_CALL_STATE_ENDED)
- {
- DEBUG ("Call ended, seems we missed it :/");
- reject_approval (approval);
- }
-}
-
-static void
-invite_dialog_response_cb (GtkDialog *dialog,
- gint response,
- EventManagerApproval *approval)
-{
- gtk_widget_destroy (GTK_WIDGET (approval->dialog));
- approval->dialog = NULL;
-
- if (response != GTK_RESPONSE_OK)
- {
- /* close channel */
- DEBUG ("Muc invitation rejected");
-
- reject_approval (approval);
-
- return;
- }
-
- DEBUG ("Muc invitation accepted");
-
- /* We'll join the room when handling the channel */
- event_manager_approval_approve (approval);
-}
-
-static void
-event_room_channel_process_func (EventPriv *event)
-{
- GtkWidget *dialog, *button, *image;
- TpChannel *channel = event->approval->main_channel;
- gchar *title;
-
- if (event->approval->dialog != NULL)
- {
- gtk_window_present (GTK_WINDOW (event->approval->dialog));
- return;
- }
-
- /* create dialog */
- dialog = gtk_message_dialog_new (NULL, 0,
- GTK_MESSAGE_QUESTION, GTK_BUTTONS_NONE, _("Room invitation"));
-
- title = g_strdup_printf (_("Invitation to join %s"),
- tp_channel_get_identifier (channel));
-
- gtk_window_set_title (GTK_WINDOW (dialog), title);
- g_free (title);
-
- gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (dialog),
- _("%s is inviting you to join %s"),
- empathy_contact_get_alias (event->approval->contact),
- tp_channel_get_identifier (channel));
-
- gtk_dialog_set_default_response (GTK_DIALOG (dialog),
- GTK_RESPONSE_OK);
-
- button = gtk_dialog_add_button (GTK_DIALOG (dialog),
- _("_Decline"), 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 (dialog),
- _("_Join"), 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 (dialog, "response",
- G_CALLBACK (invite_dialog_response_cb), event->approval);
-
- gtk_widget_show (dialog);
-
- event->approval->dialog = dialog;
-}
-
-static void
-display_invite_room_dialog (EventManagerApproval *approval)
-{
- const gchar *invite_msg;
- gchar *msg;
- TpContact *self_contact;
- EmpathyEventManagerPriv *priv = GET_PRIV (approval->manager);
-
- self_contact = tp_channel_group_get_self_contact (approval->main_channel);
- tp_channel_group_get_local_pending_contact_info (approval->main_channel,
- self_contact, NULL, NULL, &invite_msg);
-
- if (approval->contact != NULL)
- {
- msg = g_strdup_printf (_("%s invited you to join %s"),
- empathy_contact_get_alias (approval->contact),
- tp_channel_get_identifier (approval->main_channel));
- }
- else
- {
- msg = g_strdup_printf (_("You have been invited to join %s"),
- tp_channel_get_identifier (approval->main_channel));
- }
-
- event_manager_add (approval->manager, NULL,
- approval->contact, EMPATHY_EVENT_TYPE_INVITATION,
- EMPATHY_IMAGE_GROUP_MESSAGE, msg, invite_msg, approval,
- event_room_channel_process_func, NULL);
-
- empathy_sound_manager_play (priv->sound_mgr, NULL,
- EMPATHY_SOUND_CONVERSATION_NEW);
-
- g_free (msg);
-}
-
-static void
-event_manager_auth_process_func (EventPriv *event)
-{
- empathy_event_approve ((EmpathyEvent *) event);
-}
-
-/* If there is a file-transfer, media, or auth channel consider it as
- * the main one. */
-static TpChannel *
-find_main_channel (GList *channels)
-{
- GList *l;
- TpChannel *text = NULL;
-
- for (l = channels; l != NULL; l = g_list_next (l))
- {
- TpChannel *channel = l->data;
- GQuark channel_type;
-
- if (tp_proxy_get_invalidated (channel) != NULL)
- continue;
-
- channel_type = tp_channel_get_channel_type_id (channel);
-
- if (channel_type == TP_IFACE_QUARK_CHANNEL_TYPE_STREAMED_MEDIA ||
- channel_type == TP_IFACE_QUARK_CHANNEL_TYPE_CALL ||
- channel_type == TP_IFACE_QUARK_CHANNEL_TYPE_FILE_TRANSFER ||
- channel_type == TP_IFACE_QUARK_CHANNEL_TYPE_SERVER_AUTHENTICATION)
- return channel;
-
- else if (channel_type == TP_IFACE_QUARK_CHANNEL_TYPE_TEXT)
- text = channel;
- }
-
- return text;
-}
-
-static void
-approve_text_channel (EmpathyEventManager *self,
- EventManagerApproval *approval,
- TpAddDispatchOperationContext *context,
- EmpathyTpChat *tp_chat)
-{
- GList *messages, *l;
-
- approval->handler_instance = g_object_ref (tp_chat);
-
- if (tp_proxy_has_interface (tp_chat, TP_IFACE_CHANNEL_INTERFACE_GROUP))
- {
- /* Are we in local-pending ? */
- TpContact *inviter;
-
- if (empathy_tp_chat_is_invited (tp_chat, &inviter))
- {
- /* We are invited to a room */
- DEBUG ("Have been invited to %s. Ask user if he wants to accept",
- tp_channel_get_identifier (TP_CHANNEL_GROUP_CHANGE_REASON_NONE));
-
- if (inviter != NULL)
- {
- approval->contact = empathy_contact_dup_from_tp_contact (
- inviter);
- }
-
- display_invite_room_dialog (approval);
- tp_add_dispatch_operation_context_accept (context);
-
- return;
- }
-
- /* We are not invited, approve the channel right now */
- tp_add_dispatch_operation_context_accept (context);
-
- approval->auto_approved = TRUE;
- event_manager_approval_approve (approval);
- return;
- }
-
- /* 1-1 text channel, wait for the first message */
- approval->handler = g_signal_connect (tp_chat, "message-received-empathy",
- G_CALLBACK (event_manager_chat_message_received_cb), approval);
-
- messages = (GList *) empathy_tp_chat_get_pending_messages (tp_chat);
- for (l = messages; l != NULL; l = g_list_next (l))
- {
- EmpathyMessage *msg = l->data;
-
- event_manager_chat_message_received_cb (tp_chat, msg, approval);
- }
-
- tp_add_dispatch_operation_context_accept (context);
-}
-
-static void
-approval_set_target_contact (EventManagerApproval *approval,
- TpChannel *channel)
-{
- TpContact *contact;
-
- contact = tp_channel_get_target_contact (channel);
- approval->contact = empathy_contact_dup_from_tp_contact (contact);
-}
-
-static void
-approve_call_channel (EmpathyEventManager *self,
- EventManagerApproval *approval,
- TpAddDispatchOperationContext *context,
- TpCallChannel *call)
-{
- TpChannel *channel = TP_CHANNEL (call);
- EmpathyEventManagerPriv *priv = GET_PRIV (approval->manager);
- gchar *header;
- gboolean video;
-
- approval->handler_instance = g_object_ref (call);
- approval_set_target_contact (approval, channel);
-
- tp_add_dispatch_operation_context_accept (context);
-
- if (tp_call_channel_get_state (call, NULL, NULL, NULL) == TP_CALL_STATE_ENDED)
- {
- DEBUG ("Call already ended, seems we missed it :/");
- reject_approval (approval);
- return;
- }
-
- approval->handler = g_signal_connect (call, "state-changed",
- G_CALLBACK (event_manager_call_state_changed_cb), approval);
-
- g_object_get (G_OBJECT (call), "initial-video", &video, NULL);
-
- header = g_strdup_printf (
- video ? _("Incoming video call from %s") :_("Incoming call from %s"),
- empathy_contact_get_alias (approval->contact));
-
- event_manager_add (approval->manager, NULL,
- approval->contact, EMPATHY_EVENT_TYPE_CALL,
- video ? EMPATHY_IMAGE_VIDEO_CALL : EMPATHY_IMAGE_VOIP,
- header, NULL, approval,
- event_channel_process_voip_func, NULL);
-
- g_free (header);
-
- priv->ringing++;
- if (priv->ringing == 1)
- {
- TpAccountManager *am = tp_account_manager_dup ();
- TpConnectionPresenceType presence;
-
- presence = tp_account_manager_get_most_available_presence (am,
- NULL, NULL);
-
- if (presence != TP_CONNECTION_PRESENCE_TYPE_BUSY)
- empathy_sound_manager_start_playing (priv->sound_mgr, NULL,
- EMPATHY_SOUND_PHONE_INCOMING, MS_BETWEEN_RING);
-
- g_object_unref (am);
- }
-}
-
-static void
-approve_ft_channel (EmpathyEventManager *self,
- EventManagerApproval *approval,
- TpAddDispatchOperationContext *context,
- TpFileTransferChannel *ft)
-{
- TpChannel *channel = TP_CHANNEL (ft);
- EmpathyEventManagerPriv *priv = GET_PRIV (approval->manager);
- gchar *header;
-
- approval->handler_instance = g_object_ref (ft);
- approval_set_target_contact (approval, channel);
-
- tp_add_dispatch_operation_context_accept (context);
-
- header = g_strdup_printf (_("Incoming file transfer from %s"),
- empathy_contact_get_alias (approval->contact));
-
- event_manager_add (approval->manager, NULL,
- approval->contact, EMPATHY_EVENT_TYPE_TRANSFER,
- EMPATHY_IMAGE_DOCUMENT_SEND, header, NULL,
- approval, event_channel_process_func, NULL);
-
- /* FIXME better sound for incoming file transfers ?*/
- empathy_sound_manager_play (priv->sound_mgr, NULL,
- EMPATHY_SOUND_CONVERSATION_NEW);
-
- g_free (header);
-}
-
-static void
-approve_sasl_channel (EmpathyEventManager *self,
- TpAccount *account,
- EventManagerApproval *approval,
- TpAddDispatchOperationContext *context,
- TpChannel *channel)
-{
- if (empathy_sasl_channel_supports_mechanism (channel, "X-TELEPATHY-PASSWORD"))
- {
- event_manager_add (approval->manager, account, NULL,
- EMPATHY_EVENT_TYPE_AUTH,
- GTK_STOCK_DIALOG_AUTHENTICATION,
- tp_account_get_display_name (account),
- _("Password required"), approval,
- event_manager_auth_process_func, NULL);
- }
- else
- {
- GError error = { TP_ERROR, TP_ERROR_NOT_IMPLEMENTED,
- "Support only X-TELEPATHY-PASSWORD auth method" };
-
- tp_add_dispatch_operation_context_fail (context, &error);
- return;
- }
-
- tp_add_dispatch_operation_context_accept (context);
-}
-
-static void
-approve_channels (TpSimpleApprover *approver,
- TpAccount *account,
- TpConnection *connection,
- GList *channels,
- TpChannelDispatchOperation *dispatch_operation,
- TpAddDispatchOperationContext *context,
- gpointer user_data)
-{
- EmpathyEventManager *self = user_data;
- EmpathyEventManagerPriv *priv = GET_PRIV (self);
- TpChannel *channel;
- EventManagerApproval *approval;
- GQuark channel_type;
-
- channel = find_main_channel (channels);
- if (channel == NULL)
- {
- GError error = { TP_ERROR, TP_ERROR_INVALID_ARGUMENT,
- "Unknown channel type" };
-
- DEBUG ("Failed to find the main channel; ignoring");
-
- tp_add_dispatch_operation_context_fail (context, &error);
- return;
- }
-
- approval = event_manager_approval_new (self, dispatch_operation, channel);
- priv->approvals = g_slist_prepend (priv->approvals, approval);
-
- approval->invalidated_handler = g_signal_connect (dispatch_operation,
- "invalidated", G_CALLBACK (cdo_invalidated_cb), approval);
-
- channel_type = tp_channel_get_channel_type_id (channel);
-
- if (EMPATHY_IS_TP_CHAT (channel))
- {
- approve_text_channel (self, approval, context, EMPATHY_TP_CHAT (channel));
- }
- else if (TP_IS_CALL_CHANNEL (channel))
- {
- approve_call_channel (self, approval, context, TP_CALL_CHANNEL (channel));
- }
- else if (TP_IS_FILE_TRANSFER_CHANNEL (channel))
- {
- approve_ft_channel (self, approval, context,
- TP_FILE_TRANSFER_CHANNEL (channel));
- }
- else if (channel_type == TP_IFACE_QUARK_CHANNEL_TYPE_SERVER_AUTHENTICATION)
- {
- approve_sasl_channel (self, account, approval, context, channel);
- }
- else
- {
- GError error = { TP_ERROR, TP_ERROR_INVALID_ARGUMENT,
- "Invalid channel type" };
-
- DEBUG ("Unknown channel type (%s), ignoring..",
- g_quark_to_string (channel_type));
-
- tp_add_dispatch_operation_context_fail (context, &error);
- return;
- }
-}
-
-static void
-event_pending_subscribe_func (EventPriv *event)
-{
- GtkWidget *dialog;
- FolksIndividual *individual;
-
- individual = empathy_ensure_individual_from_tp_contact (
- empathy_contact_get_tp_contact (event->public.contact));
-
- dialog = empathy_subscription_dialog_new (individual, event->public.message);
- gtk_window_present (GTK_WINDOW (dialog));
-
- event_remove (event);
-
- g_object_unref (individual);
-}
-
-static void
-check_publish_state (EmpathyEventManager *self,
- TpContact *tp_contact)
-{
- EmpathyEventManagerPriv *priv = GET_PRIV (self);
- gchar *header, *event_msg;
- TpSubscriptionState state;
- EmpathyContact *contact;
- const gchar *message;
-
- state = tp_contact_get_publish_state (tp_contact);
-
- contact = empathy_contact_dup_from_tp_contact (tp_contact);
-
- if (state != TP_SUBSCRIPTION_STATE_ASK)
- {
- GSList *l;
-
- for (l = priv->events; l; l = l->next)
- {
- EventPriv *event = l->data;
-
- if (event->public.contact == contact &&
- event->func == event_pending_subscribe_func)
- {
- event_remove (event);
- break;
- }
- }
-
- goto out;
- }
-
- header = g_strdup_printf (
- _("%s would like permission to see when you are online"),
- empathy_contact_get_alias (contact));
-
- message = tp_contact_get_publish_request (tp_contact);
-
- if (!TPAW_STR_EMPTY (message))
- event_msg = g_strdup_printf (_("\nMessage: %s"), message);
- else
- event_msg = NULL;
-
- event_manager_add (self, NULL, contact, EMPATHY_EVENT_TYPE_SUBSCRIPTION,
- GTK_STOCK_DIALOG_QUESTION, header, event_msg, NULL,
- event_pending_subscribe_func, NULL);
-
- g_free (event_msg);
- g_free (header);
-
-out:
- g_object_unref (contact);
-}
-
-static void
-event_manager_publish_state_changed_cb (TpContact *contact,
- GParamSpec *spec,
- EmpathyEventManager *self)
-{
- check_publish_state (self, contact);
-}
-
-static void
-check_presence (EmpathyEventManager *manager,
- EmpathyContact *contact,
- TpConnectionPresenceType current,
- TpConnectionPresenceType previous)
-{
- EmpathyEventManagerPriv *priv = GET_PRIV (manager);
- TpAccount *account;
- EmpathyPresenceManager *presence_mgr;
-
- account = empathy_contact_get_account (contact);
- presence_mgr = empathy_presence_manager_dup_singleton ();
-
- if (empathy_presence_manager_account_is_just_connected (presence_mgr, account))
- goto out;
-
- if (tp_connection_presence_type_cmp_availability (previous,
- TP_CONNECTION_PRESENCE_TYPE_OFFLINE) > 0)
- {
- /* contact was online */
- if (tp_connection_presence_type_cmp_availability (current,
- TP_CONNECTION_PRESENCE_TYPE_OFFLINE) <= 0)
- {
- /* someone is logging off */
- empathy_sound_manager_play (priv->sound_mgr, NULL,
- EMPATHY_SOUND_CONTACT_DISCONNECTED);
-
- if (g_settings_get_boolean (priv->gsettings_notif,
- EMPATHY_PREFS_NOTIFICATIONS_CONTACT_SIGNOUT))
- {
- event_manager_add (manager, NULL, contact,
- EMPATHY_EVENT_TYPE_PRESENCE_OFFLINE,
- TPAW_IMAGE_AVATAR_DEFAULT,
- empathy_contact_get_alias (contact), _("Disconnected"),
- NULL, NULL, NULL);
- }
- }
- }
- else
- {
- /* contact was offline */
- if (tp_connection_presence_type_cmp_availability (current,
- TP_CONNECTION_PRESENCE_TYPE_OFFLINE) > 0)
- {
- /* someone is logging in */
- empathy_sound_manager_play (priv->sound_mgr, NULL,
- EMPATHY_SOUND_CONTACT_CONNECTED);
-
- if (g_settings_get_boolean (priv->gsettings_notif,
- EMPATHY_PREFS_NOTIFICATIONS_CONTACT_SIGNIN))
- {
- event_manager_add (manager, NULL, contact,
- EMPATHY_EVENT_TYPE_PRESENCE_ONLINE,
- TPAW_IMAGE_AVATAR_DEFAULT,
- empathy_contact_get_alias (contact), _("Connected"),
- NULL, NULL, NULL);
- }
- }
- }
-
-out:
- g_object_unref (presence_mgr);
-}
-
-static void
-event_manager_presence_changed_cb (EmpathyContact *contact,
- TpConnectionPresenceType current,
- TpConnectionPresenceType previous,
- EmpathyEventManager *manager)
-{
- check_presence (manager, contact, current, previous);
-}
-
-static GObject *
-event_manager_constructor (GType type,
- guint n_props,
- GObjectConstructParam *props)
-{
- GObject *retval;
-
- if (manager_singleton) {
- retval = g_object_ref (manager_singleton);
- } else {
- retval = G_OBJECT_CLASS (empathy_event_manager_parent_class)->constructor
- (type, n_props, props);
-
- manager_singleton = EMPATHY_EVENT_MANAGER (retval);
- g_object_add_weak_pointer (retval, (gpointer) &manager_singleton);
- }
-
- return retval;
-}
-
-static void
-event_manager_finalize (GObject *object)
-{
- EmpathyEventManagerPriv *priv = GET_PRIV (object);
-
- if (priv->ringing > 0)
- empathy_sound_manager_stop (priv->sound_mgr, EMPATHY_SOUND_PHONE_INCOMING);
-
- g_slist_foreach (priv->events, (GFunc) event_free, NULL);
- g_slist_free (priv->events);
- g_slist_foreach (priv->approvals, (GFunc) event_manager_approval_free, NULL);
- g_slist_free (priv->approvals);
- g_object_unref (priv->conn_aggregator);
- g_object_unref (priv->approver);
- g_object_unref (priv->auth_approver);
- g_object_unref (priv->gsettings_notif);
- g_object_unref (priv->gsettings_ui);
- g_object_unref (priv->sound_mgr);
- g_hash_table_unref (priv->contacts);
-}
-
-static void
-empathy_event_manager_class_init (EmpathyEventManagerClass *klass)
-{
- GObjectClass *object_class = G_OBJECT_CLASS (klass);
-
- object_class->finalize = event_manager_finalize;
- object_class->constructor = event_manager_constructor;
-
- signals[EVENT_ADDED] =
- g_signal_new ("event-added",
- G_TYPE_FROM_CLASS (klass),
- G_SIGNAL_RUN_LAST,
- 0,
- NULL, NULL,
- g_cclosure_marshal_generic,
- G_TYPE_NONE,
- 1, G_TYPE_POINTER);
-
- signals[EVENT_REMOVED] =
- g_signal_new ("event-removed",
- G_TYPE_FROM_CLASS (klass),
- G_SIGNAL_RUN_LAST,
- 0,
- NULL, NULL,
- g_cclosure_marshal_generic,
- G_TYPE_NONE, 1, G_TYPE_POINTER);
-
- signals[EVENT_UPDATED] =
- g_signal_new ("event-updated",
- G_TYPE_FROM_CLASS (klass),
- G_SIGNAL_RUN_LAST,
- 0,
- NULL, NULL,
- g_cclosure_marshal_generic,
- G_TYPE_NONE, 1, G_TYPE_POINTER);
-
- g_type_class_add_private (object_class, sizeof (EmpathyEventManagerPriv));
-}
-
-static void
-contact_list_changed_cb (EmpathyConnectionAggregator *aggregator,
- GPtrArray *added,
- GPtrArray *removed,
- EmpathyEventManager *self)
-{
- EmpathyEventManagerPriv *priv = GET_PRIV (self);
- guint i;
-
- for (i = 0; i < added->len; i++)
- {
- TpContact *tp_contact = g_ptr_array_index (added, i);
- EmpathyContact *contact;
-
- if (g_hash_table_lookup (priv->contacts, tp_contact) != NULL)
- continue;
-
- contact = empathy_contact_dup_from_tp_contact (tp_contact);
-
- tp_g_signal_connect_object (contact, "presence-changed",
- G_CALLBACK (event_manager_presence_changed_cb), self, 0);
-
- check_presence (self, contact,
- empathy_contact_get_presence (contact),
- TP_CONNECTION_PRESENCE_TYPE_OFFLINE);
-
- tp_g_signal_connect_object (tp_contact, "notify::publish-state",
- G_CALLBACK (event_manager_publish_state_changed_cb), self, 0);
-
- check_publish_state (self, tp_contact);
-
- /* Pass ownership to the hash table */
- g_hash_table_insert (priv->contacts, g_object_ref (tp_contact), contact);
- }
-
- for (i = 0; i < removed->len; i++)
- {
- TpContact *tp_contact = g_ptr_array_index (removed, i);
- EmpathyContact *contact;
-
- contact = g_hash_table_lookup (priv->contacts, tp_contact);
- if (contact == NULL)
- continue;
-
- g_signal_handlers_disconnect_by_func (contact,
- event_manager_presence_changed_cb, self);
-
- g_signal_handlers_disconnect_by_func (tp_contact,
- event_manager_publish_state_changed_cb, self);
-
- g_hash_table_remove (priv->contacts, tp_contact);
- }
-}
-
-static void
-empathy_event_manager_init (EmpathyEventManager *manager)
-{
- EmpathyEventManagerPriv *priv = G_TYPE_INSTANCE_GET_PRIVATE (manager,
- EMPATHY_TYPE_EVENT_MANAGER, EmpathyEventManagerPriv);
- GError *error = NULL;
- TpAccountManager *am;
- GPtrArray *contacts, *empty;
-
- manager->priv = priv;
-
- priv->gsettings_notif = g_settings_new (EMPATHY_PREFS_NOTIFICATIONS_SCHEMA);
- priv->gsettings_ui = g_settings_new (EMPATHY_PREFS_UI_SCHEMA);
-
- priv->sound_mgr = empathy_sound_manager_dup_singleton ();
-
- priv->contacts = g_hash_table_new_full (NULL, NULL, g_object_unref,
- g_object_unref);
-
- priv->conn_aggregator = empathy_connection_aggregator_dup_singleton ();
-
- tp_g_signal_connect_object (priv->conn_aggregator, "contact-list-changed",
- G_CALLBACK (contact_list_changed_cb), manager, 0);
-
- contacts = empathy_connection_aggregator_dup_all_contacts (
- priv->conn_aggregator);
-
- empty = g_ptr_array_new ();
-
- contact_list_changed_cb (priv->conn_aggregator, contacts, empty, manager);
-
- g_ptr_array_unref (contacts);
- g_ptr_array_unref (empty);
-
- am = tp_account_manager_dup ();
-
- priv->approver = tp_simple_approver_new_with_am (am, "Empathy.EventManager",
- FALSE, approve_channels, manager, NULL);
-
- /* Private text channels */
- tp_base_client_take_approver_filter (priv->approver,
- tp_asv_new (
- TP_PROP_CHANNEL_CHANNEL_TYPE, G_TYPE_STRING, TP_IFACE_CHANNEL_TYPE_TEXT,
- TP_PROP_CHANNEL_TARGET_HANDLE_TYPE, G_TYPE_UINT, TP_HANDLE_TYPE_CONTACT,
- NULL));
-
- /* Muc text channels */
- tp_base_client_take_approver_filter (priv->approver,
- tp_asv_new (
- TP_PROP_CHANNEL_CHANNEL_TYPE, G_TYPE_STRING, TP_IFACE_CHANNEL_TYPE_TEXT,
- TP_PROP_CHANNEL_TARGET_HANDLE_TYPE, G_TYPE_UINT, TP_HANDLE_TYPE_ROOM,
- NULL));
-
- /* File transfer */
- tp_base_client_take_approver_filter (priv->approver,
- tp_asv_new (
- TP_PROP_CHANNEL_CHANNEL_TYPE, G_TYPE_STRING,
- TP_IFACE_CHANNEL_TYPE_FILE_TRANSFER,
- TP_PROP_CHANNEL_TARGET_HANDLE_TYPE, G_TYPE_UINT, TP_HANDLE_TYPE_CONTACT,
- NULL));
-
- /* Calls */
- tp_base_client_take_approver_filter (priv->approver,
- tp_asv_new (
- TP_PROP_CHANNEL_CHANNEL_TYPE, G_TYPE_STRING,
- TP_IFACE_CHANNEL_TYPE_STREAMED_MEDIA,
- TP_PROP_CHANNEL_TARGET_HANDLE_TYPE, G_TYPE_UINT, TP_HANDLE_TYPE_CONTACT,
- NULL));
- tp_base_client_take_approver_filter (priv->approver,
- tp_asv_new (
- TP_PROP_CHANNEL_CHANNEL_TYPE, G_TYPE_STRING,
- TP_IFACE_CHANNEL_TYPE_CALL,
- TP_PROP_CHANNEL_TARGET_HANDLE_TYPE, G_TYPE_UINT, TP_HANDLE_TYPE_CONTACT,
- NULL));
-
- /* I don't feel good about doing this, and I'm sorry, but the
- * capabilities connection feature is added earlier because it's
- * needed for EmpathyTpChat. If the capabilities feature is required
- * then preparing an auth channel (which of course appears in the
- * CONNECTING state) will never be prepared. So the options are
- * either to create another approver like I've done, or to port
- * EmpathyTpChat and its users to not depend on the connection being
- * prepared with capabilities. I chose the former, obviously. :-) */
-
- priv->auth_approver = tp_simple_approver_new_with_am (am,
- "Empathy.AuthEventManager", FALSE, approve_channels, manager,
- NULL);
-
- /* SASL auth channels */
- tp_base_client_take_approver_filter (priv->auth_approver,
- tp_asv_new (
- TP_PROP_CHANNEL_CHANNEL_TYPE, G_TYPE_STRING,
- TP_IFACE_CHANNEL_TYPE_SERVER_AUTHENTICATION,
- TP_PROP_CHANNEL_TYPE_SERVER_AUTHENTICATION_AUTHENTICATION_METHOD,
- G_TYPE_STRING,
- TP_IFACE_CHANNEL_INTERFACE_SASL_AUTHENTICATION,
- NULL));
-
- if (!tp_base_client_register (priv->approver, &error))
- {
- DEBUG ("Failed to register Approver: %s", error->message);
- g_error_free (error);
- }
-
- if (!tp_base_client_register (priv->auth_approver, &error))
- {
- DEBUG ("Failed to register auth Approver: %s", error->message);
- g_error_free (error);
- }
-
- g_object_unref (am);
-}
-
-EmpathyEventManager *
-empathy_event_manager_dup_singleton (void)
-{
- return g_object_new (EMPATHY_TYPE_EVENT_MANAGER, NULL);
-}
-
-GSList *
-empathy_event_manager_get_events (EmpathyEventManager *manager)
-{
- EmpathyEventManagerPriv *priv = GET_PRIV (manager);
-
- g_return_val_if_fail (EMPATHY_IS_EVENT_MANAGER (manager), NULL);
-
- return priv->events;
-}
-
-EmpathyEvent *
-empathy_event_manager_get_top_event (EmpathyEventManager *manager)
-{
- EmpathyEventManagerPriv *priv = GET_PRIV (manager);
-
- g_return_val_if_fail (EMPATHY_IS_EVENT_MANAGER (manager), NULL);
-
- return priv->events ? priv->events->data : NULL;
-}
-
-void
-empathy_event_activate (EmpathyEvent *event_public)
-{
- EventPriv *event = (EventPriv *) event_public;
-
- g_return_if_fail (event_public != NULL);
-
- if (event->func)
- event->func (event);
- else
- event_remove (event);
-}
-
-void
-empathy_event_inhibit_updates (EmpathyEvent *event_public)
-{
- EventPriv *event = (EventPriv *) event_public;
-
- g_return_if_fail (event_public != NULL);
-
- event->inhibit = TRUE;
-}
-
-void
-empathy_event_approve (EmpathyEvent *event_public)
-{
- EventPriv *event = (EventPriv *) event_public;
-
- g_return_if_fail (event_public != NULL);
-
- event_manager_approval_approve (event->approval);
-}
-
-void
-empathy_event_decline (EmpathyEvent *event_public)
-{
- EventPriv *event = (EventPriv *) event_public;
-
- g_return_if_fail (event_public != NULL);
-
- reject_approval (event->approval);
-}
diff --git a/src/empathy-event-manager.h b/src/empathy-event-manager.h
deleted file mode 100644
index f2878c7c..00000000
--- a/src/empathy-event-manager.h
+++ /dev/null
@@ -1,86 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * Copyright (C) 2007-2008 Collabora Ltd.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- *
- * Authors: Xavier Claessens <xclaesse@gmail.com>
- */
-
-#ifndef __EMPATHY_EVENT_MANAGER_H__
-#define __EMPATHY_EVENT_MANAGER_H__
-
-#include <glib-object.h>
-
-#include "empathy-contact.h"
-
-G_BEGIN_DECLS
-
-#define EMPATHY_TYPE_EVENT_MANAGER (empathy_event_manager_get_type ())
-#define EMPATHY_EVENT_MANAGER(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), EMPATHY_TYPE_EVENT_MANAGER, EmpathyEventManager))
-#define EMPATHY_EVENT_MANAGER_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), EMPATHY_TYPE_EVENT_MANAGER, EmpathyEventManagerClass))
-#define EMPATHY_IS_EVENT_MANAGER(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), EMPATHY_TYPE_EVENT_MANAGER))
-#define EMPATHY_IS_EVENT_MANAGER_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), EMPATHY_TYPE_EVENT_MANAGER))
-#define EMPATHY_EVENT_MANAGER_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), EMPATHY_TYPE_EVENT_MANAGER, EmpathyEventManagerClass))
-
-typedef struct _EmpathyEventManager EmpathyEventManager;
-typedef struct _EmpathyEventManagerClass EmpathyEventManagerClass;
-
-struct _EmpathyEventManager {
- GObject parent;
- gpointer priv;
-};
-
-struct _EmpathyEventManagerClass {
- GObjectClass parent_class;
-};
-
-typedef enum {
- EMPATHY_EVENT_TYPE_CHAT,
- EMPATHY_EVENT_TYPE_CALL,
- EMPATHY_EVENT_TYPE_TRANSFER,
- EMPATHY_EVENT_TYPE_SUBSCRIPTION,
- EMPATHY_EVENT_TYPE_PRESENCE_ONLINE,
- EMPATHY_EVENT_TYPE_PRESENCE_OFFLINE,
- EMPATHY_EVENT_TYPE_INVITATION,
- EMPATHY_EVENT_TYPE_AUTH,
- EMPATHY_EVENT_TYPE_MENTIONED,
-} EmpathyEventType;
-
-typedef struct {
- TpAccount *account;
- EmpathyContact *contact;
- EmpathyEventType type;
- gchar *icon_name;
- gchar *header;
- gchar *message;
- gboolean must_ack;
- GObject *handler_instance;
- guint roster_view_id;
-} EmpathyEvent;
-
-GType empathy_event_manager_get_type (void) G_GNUC_CONST;
-EmpathyEventManager *empathy_event_manager_dup_singleton (void);
-EmpathyEvent * empathy_event_manager_get_top_event (EmpathyEventManager *manager);
-GSList * empathy_event_manager_get_events (EmpathyEventManager *manager);
-void empathy_event_activate (EmpathyEvent *event);
-void empathy_event_inhibit_updates (EmpathyEvent *event);
-void empathy_event_approve (EmpathyEvent *event);
-void empathy_event_decline (EmpathyEvent *event);
-void empathy_event_remove (EmpathyEvent *event);
-
-G_END_DECLS
-
-#endif /* __EMPATHY_EVENT_MANAGER_H__ */
diff --git a/src/empathy-ft-manager.c b/src/empathy-ft-manager.c
deleted file mode 100644
index 4321969d..00000000
--- a/src/empathy-ft-manager.c
+++ /dev/null
@@ -1,1181 +0,0 @@
-/*
- * Copyright (C) 2003, 2004 Xan Lopez
- * Copyright (C) 2007 Marco Barisione <marco@barisione.org>
- * Copyright (C) 2008-2009 Collabora Ltd.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301 USA
- *
- * Authors: Xan Lopez
- * Marco Barisione <marco@barisione.org>
- * Jonny Lamb <jonny.lamb@collabora.co.uk>
- * Xavier Claessens <xclaesse@gmail.com>
- * Cosimo Cecchi <cosimo.cecchi@collabora.co.uk>
- */
-
-/* The original file transfer manager code was copied from Epiphany */
-
-#include "config.h"
-#include "empathy-ft-manager.h"
-
-#include <glib/gi18n.h>
-#include <tp-account-widgets/tpaw-builder.h>
-
-#include "empathy-geometry.h"
-#include "empathy-ui-utils.h"
-#include "empathy-utils.h"
-
-#define DEBUG_FLAG EMPATHY_DEBUG_FT
-#include "empathy-debug.h"
-
-enum
-{
- COL_PERCENT,
- COL_ICON,
- COL_MESSAGE,
- COL_REMAINING,
- COL_FT_OBJECT
-};
-
-typedef struct {
- GtkTreeModel *model;
- GHashTable *ft_handler_to_row_ref;
-
- /* Widgets */
- GtkWidget *window;
- GtkWidget *treeview;
- GtkWidget *open_button;
- GtkWidget *abort_button;
- GtkWidget *clear_button;
-} EmpathyFTManagerPriv;
-
-enum
-{
- RESPONSE_OPEN = 1,
- RESPONSE_STOP = 2,
- RESPONSE_CLEAR = 3,
- RESPONSE_CLOSE = 4
-};
-
-G_DEFINE_TYPE (EmpathyFTManager, empathy_ft_manager, G_TYPE_OBJECT);
-
-#define GET_PRIV(obj) EMPATHY_GET_PRIV (obj, EmpathyFTManager)
-
-static EmpathyFTManager *manager_singleton = NULL;
-
-static void ft_handler_hashing_started_cb (EmpathyFTHandler *handler,
- EmpathyFTManager *manager);
-
-static gchar *
-ft_manager_format_interval (guint interval)
-{
- gint hours, mins, secs;
-
- hours = interval / 3600;
- interval -= hours * 3600;
- mins = interval / 60;
- interval -= mins * 60;
- secs = interval;
-
- if (hours > 0)
- /* Translators: time left, when it is more than one hour */
- return g_strdup_printf (_("%u:%02u.%02u"), hours, mins, secs);
- else
- /* Translators: time left, when is is less than one hour */
- return g_strdup_printf (_("%02u.%02u"), mins, secs);
-}
-
-static void
-ft_manager_update_buttons (EmpathyFTManager *manager)
-{
- GtkTreeSelection *selection;
- GtkTreeModel *model;
- GtkTreeIter iter;
- EmpathyFTHandler *handler;
- gboolean open_enabled = FALSE;
- gboolean abort_enabled = FALSE;
- gboolean clear_enabled = FALSE;
- gboolean is_completed, is_cancelled;
- GHashTableIter hash_iter;
- EmpathyFTManagerPriv *priv = GET_PRIV (manager);
-
- selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (priv->treeview));
-
- if (gtk_tree_selection_get_selected (selection, &model, &iter))
- {
- gtk_tree_model_get (model, &iter, COL_FT_OBJECT, &handler, -1);
-
- is_completed = empathy_ft_handler_is_completed (handler);
- is_cancelled = empathy_ft_handler_is_cancelled (handler);
-
- /* I can open the file if the transfer is completed and was incoming */
- open_enabled = (is_completed && empathy_ft_handler_is_incoming (handler));
-
- /* I can abort if the transfer is not already finished */
- abort_enabled = (is_cancelled == FALSE && is_completed == FALSE);
-
- g_object_unref (handler);
- }
-
- g_hash_table_iter_init (&hash_iter, priv->ft_handler_to_row_ref);
-
- while (g_hash_table_iter_next (&hash_iter, (gpointer *) &handler, NULL))
- {
- if (empathy_ft_handler_is_completed (handler) ||
- empathy_ft_handler_is_cancelled (handler))
- clear_enabled = TRUE;
-
- if (clear_enabled)
- break;
- }
-
- gtk_widget_set_sensitive (priv->open_button, open_enabled);
- gtk_widget_set_sensitive (priv->abort_button, abort_enabled);
-
- if (clear_enabled)
- gtk_widget_set_sensitive (priv->clear_button, TRUE);
-}
-
-static void
-ft_manager_selection_changed (GtkTreeSelection *selection,
- EmpathyFTManager *manager)
-{
- ft_manager_update_buttons (manager);
-}
-
-static void
-ft_manager_progress_cell_data_func (GtkTreeViewColumn *col,
- GtkCellRenderer *renderer,
- GtkTreeModel *model,
- GtkTreeIter *iter,
- gpointer user_data)
-{
- const gchar *text = NULL;
- gint percent;
-
- gtk_tree_model_get (model, iter, COL_PERCENT, &percent, -1);
-
- if (percent < 0)
- {
- percent = 0;
- text = C_("file transfer percent", "Unknown");
- }
-
- g_object_set (renderer, "text", text, "value", percent, NULL);
-}
-
-static GtkTreeRowReference *
-ft_manager_get_row_from_handler (EmpathyFTManager *manager,
- EmpathyFTHandler *handler)
-{
- EmpathyFTManagerPriv *priv = GET_PRIV (manager);
-
- return g_hash_table_lookup (priv->ft_handler_to_row_ref, handler);
-}
-
-static void
-ft_manager_remove_file_from_model (EmpathyFTManager *manager,
- EmpathyFTHandler *handler)
-{
- GtkTreeRowReference *row_ref;
- GtkTreeSelection *selection;
- GtkTreePath *path = NULL;
- GtkTreeIter iter;
- gboolean update_selection;
- EmpathyFTManagerPriv *priv = GET_PRIV (manager);
-
- row_ref = ft_manager_get_row_from_handler (manager, handler);
- g_return_if_fail (row_ref);
-
- DEBUG ("Removing file transfer from window: contact=%s, filename=%s",
- empathy_contact_get_alias (empathy_ft_handler_get_contact (handler)),
- empathy_ft_handler_get_filename (handler));
-
- /* Get the iter from the row_ref */
- path = gtk_tree_row_reference_get_path (row_ref);
- gtk_tree_model_get_iter (priv->model, &iter, path);
- gtk_tree_path_free (path);
-
- /* We have to update the selection only if we are removing the selected row */
- selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (priv->treeview));
- update_selection = gtk_tree_selection_iter_is_selected (selection, &iter);
-
- /* Remove tp_file's row. After that iter points to the next row */
- if (!gtk_list_store_remove (GTK_LIST_STORE (priv->model), &iter))
- {
- gint n_row;
-
- /* There is no next row, set iter to the last row */
- n_row = gtk_tree_model_iter_n_children (priv->model, NULL);
- if (n_row > 0)
- gtk_tree_model_iter_nth_child (priv->model, &iter, NULL, n_row - 1);
- else
- update_selection = FALSE;
- }
-
- if (update_selection)
- gtk_tree_selection_select_iter (selection, &iter);
-}
-
-static gboolean
-remove_finished_transfer_foreach (gpointer key,
- gpointer value,
- gpointer user_data)
-{
- EmpathyFTHandler *handler = key;
- EmpathyFTManager *manager = user_data;
-
- if (empathy_ft_handler_is_completed (handler) ||
- empathy_ft_handler_is_cancelled (handler))
- {
- ft_manager_remove_file_from_model (manager, handler);
- return TRUE;
- }
-
- return FALSE;
-}
-
-static gchar *
-ft_manager_format_progress_bytes_and_percentage (guint64 current,
- guint64 total,
- gdouble speed,
- int *percentage)
-{
- char *total_str, *current_str, *retval;
- char *speed_str = NULL;
-
- total_str = g_format_size (total);
- current_str = g_format_size (current);
-
- if (speed > 0)
- speed_str = g_format_size ((goffset) speed);
-
- /* translators: first %s is the currently processed size, second %s is
- * the total file size */
- retval = speed_str ?
- g_strdup_printf (_("%s of %s at %s/s"), current_str, total_str, speed_str) :
- g_strdup_printf (_("%s of %s"), current_str, total_str);
-
- g_free (total_str);
- g_free (current_str);
- g_free (speed_str);
-
- if (percentage != NULL)
- {
- if (total != 0)
- *percentage = current * 100 / total;
- else
- *percentage = -1;
- }
-
- return retval;
-}
-
-static gchar *
-ft_manager_format_contact_info (EmpathyFTHandler *handler)
-{
- gboolean incoming;
- const char *filename, *contact_name, *first_line_format;
- char *retval;
-
- incoming = empathy_ft_handler_is_incoming (handler);
- contact_name = empathy_contact_get_alias
- (empathy_ft_handler_get_contact (handler));
- filename = empathy_ft_handler_get_filename (handler);
-
- if (incoming)
- /* translators: first %s is filename, second %s is the contact name */
- first_line_format = _("Receiving \"%s\" from %s");
- else
- /* translators: first %s is filename, second %s is the contact name */
- first_line_format = _("Sending \"%s\" to %s");
-
- retval = g_strdup_printf (first_line_format, filename, contact_name);
-
- return retval;
-}
-
-static gchar *
-ft_manager_format_error_message (EmpathyFTHandler *handler,
- const GError *error)
-{
- const char *contact_name, *filename;
- EmpathyContact *contact;
- char *first_line, *message;
- gboolean incoming;
-
- contact_name = NULL;
- incoming = empathy_ft_handler_is_incoming (handler);
-
- contact = empathy_ft_handler_get_contact (handler);
- if (contact)
- contact_name = empathy_contact_get_alias (contact);
-
- filename = empathy_ft_handler_get_filename (handler);
-
- if (incoming)
- /* filename/contact_name here are either both NULL or both valid */
- if (filename && contact_name)
- /* translators: first %s is filename, second %s
- * is the contact name */
- first_line = g_strdup_printf (_("Error receiving \"%s\" from %s"), filename,
- contact_name);
- else
- first_line = g_strdup (_("Error receiving a file"));
- else
- /* translators: first %s is filename, second %s
- * is the contact name */
- if (filename && contact_name)
- first_line = g_strdup_printf (_("Error sending \"%s\" to %s"), filename,
- contact_name);
- else
- first_line = g_strdup (_("Error sending a file"));
-
- message = g_strdup_printf ("%s\n%s", first_line, error->message);
-
- g_free (first_line);
-
- return message;
-}
-
-static void
-ft_manager_update_handler_message (EmpathyFTManager *manager,
- GtkTreeRowReference *row_ref,
- const char *message)
-{
- GtkTreePath *path;
- GtkTreeIter iter;
- EmpathyFTManagerPriv *priv = GET_PRIV (manager);
-
- /* Set new value in the store */
- path = gtk_tree_row_reference_get_path (row_ref);
- gtk_tree_model_get_iter (priv->model, &iter, path);
- gtk_list_store_set (GTK_LIST_STORE (priv->model),
- &iter,
- COL_MESSAGE, message ? message : "",
- -1);
-
- gtk_tree_path_free (path);
-}
-
-static void
-ft_manager_update_handler_progress (EmpathyFTManager *manager,
- GtkTreeRowReference *row_ref,
- int percentage)
-{
- GtkTreePath *path;
- GtkTreeIter iter;
- EmpathyFTManagerPriv *priv = GET_PRIV (manager);
-
- /* Set new value in the store */
- path = gtk_tree_row_reference_get_path (row_ref);
- gtk_tree_model_get_iter (priv->model, &iter, path);
- gtk_list_store_set (GTK_LIST_STORE (priv->model),
- &iter,
- COL_PERCENT, percentage,
- -1);
-
- gtk_tree_path_free (path);
-
-}
-
-static void
-ft_manager_update_handler_time (EmpathyFTManager *manager,
- GtkTreeRowReference *row_ref,
- guint remaining_time)
-{
- GtkTreePath *path;
- GtkTreeIter iter;
- EmpathyFTManagerPriv *priv = GET_PRIV (manager);
- char *remaining_str;
-
- remaining_str = ft_manager_format_interval (remaining_time);
-
- /* Set new value in the store */
- path = gtk_tree_row_reference_get_path (row_ref);
- gtk_tree_model_get_iter (priv->model, &iter, path);
- gtk_list_store_set (GTK_LIST_STORE (priv->model),
- &iter,
- COL_REMAINING, remaining_str,
- -1);
-
- gtk_tree_path_free (path);
- g_free (remaining_str);
-}
-
-static void
-ft_manager_clear_handler_time (EmpathyFTManager *manager,
- GtkTreeRowReference *row_ref)
-{
- GtkTreePath *path;
- GtkTreeIter iter;
- EmpathyFTManagerPriv *priv = GET_PRIV (manager);
-
- /* Set new value in the store */
- path = gtk_tree_row_reference_get_path (row_ref);
- gtk_tree_model_get_iter (priv->model, &iter, path);
- gtk_list_store_set (GTK_LIST_STORE (priv->model),
- &iter,
- COL_REMAINING, NULL,
- -1);
-
- gtk_tree_path_free (path);
-}
-
-static void
-ft_handler_transfer_error_cb (EmpathyFTHandler *handler,
- GError *error,
- EmpathyFTManager *manager)
-{
- char *message;
- GtkTreeRowReference *row_ref;
-
- DEBUG ("Transfer error %s", error->message);
-
- row_ref = ft_manager_get_row_from_handler (manager, handler);
- g_return_if_fail (row_ref != NULL);
-
- message = ft_manager_format_error_message (handler, error);
-
- ft_manager_update_handler_message (manager, row_ref, message);
- ft_manager_clear_handler_time (manager, row_ref);
- ft_manager_update_buttons (manager);
-
- g_free (message);
-}
-
-static void
-do_real_transfer_done (EmpathyFTManager *manager,
- EmpathyFTHandler *handler)
-{
- const char *contact_name;
- const char *filename;
- char *first_line, *second_line, *message;
- char *uri;
- gboolean incoming;
- GtkTreeRowReference *row_ref;
- GtkRecentManager *recent_manager;
- GFile *file;
-
- row_ref = ft_manager_get_row_from_handler (manager, handler);
- g_return_if_fail (row_ref != NULL);
-
- incoming = empathy_ft_handler_is_incoming (handler);
- contact_name = empathy_contact_get_alias
- (empathy_ft_handler_get_contact (handler));
- filename = empathy_ft_handler_get_filename (handler);
-
- if (incoming)
- /* translators: first %s is filename, second %s
- * is the contact name */
- first_line = g_strdup_printf (_("\"%s\" received from %s"), filename,
- contact_name);
- else
- /* translators: first %s is filename, second %s
- * is the contact name */
- first_line = g_strdup_printf (_("\"%s\" sent to %s"), filename,
- contact_name);
-
- second_line = g_strdup (_("File transfer completed"));
-
- message = g_strdup_printf ("%s\n%s", first_line, second_line);
- ft_manager_update_handler_message (manager, row_ref, message);
- ft_manager_clear_handler_time (manager, row_ref);
-
- /* update buttons */
- ft_manager_update_buttons (manager);
-
- g_free (message);
- g_free (first_line);
- g_free (second_line);
-
- recent_manager = gtk_recent_manager_get_default ();
- file = empathy_ft_handler_get_gfile (handler);
- uri = g_file_get_uri (file);
-
- gtk_recent_manager_add_item (recent_manager, uri);
-
- g_free (uri);
-}
-
-static void
-ft_handler_transfer_done_cb (EmpathyFTHandler *handler,
- TpFileTransferChannel *channel,
- EmpathyFTManager *manager)
-{
- if (empathy_ft_handler_is_incoming (handler) &&
- empathy_ft_handler_get_use_hash (handler))
- {
- DEBUG ("Transfer done, waiting for hashing-started");
-
- /* connect to the signal and return early */
- g_signal_connect (handler, "hashing-started",
- G_CALLBACK (ft_handler_hashing_started_cb), manager);
-
- return;
- }
-
- DEBUG ("Transfer done, no hashing");
-
- do_real_transfer_done (manager, handler);
-}
-
-static void
-ft_handler_transfer_progress_cb (EmpathyFTHandler *handler,
- guint64 current_bytes,
- guint64 total_bytes,
- guint remaining_time,
- gdouble speed,
- EmpathyFTManager *manager)
-{
- char *first_line, *second_line, *message;
- int percentage;
- GtkTreeRowReference *row_ref;
-
- DEBUG ("Transfer progress");
-
- row_ref = ft_manager_get_row_from_handler (manager, handler);
- g_return_if_fail (row_ref != NULL);
-
- first_line = ft_manager_format_contact_info (handler);
- second_line = ft_manager_format_progress_bytes_and_percentage
- (current_bytes, total_bytes, speed, &percentage);
-
- message = g_strdup_printf ("%s\n%s", first_line, second_line);
-
- ft_manager_update_handler_message (manager, row_ref, message);
- ft_manager_update_handler_progress (manager, row_ref, percentage);
-
- if (remaining_time > 0)
- ft_manager_update_handler_time (manager, row_ref, remaining_time);
-
- g_free (message);
- g_free (first_line);
- g_free (second_line);
-}
-
-static void
-ft_handler_transfer_started_cb (EmpathyFTHandler *handler,
- TpFileTransferChannel *channel,
- EmpathyFTManager *manager)
-{
- guint64 transferred_bytes, total_bytes;
-
- DEBUG ("Transfer started");
-
- g_signal_connect (handler, "transfer-progress",
- G_CALLBACK (ft_handler_transfer_progress_cb), manager);
- g_signal_connect (handler, "transfer-done",
- G_CALLBACK (ft_handler_transfer_done_cb), manager);
-
- transferred_bytes = empathy_ft_handler_get_transferred_bytes (handler);
- total_bytes = empathy_ft_handler_get_total_bytes (handler);
-
- ft_handler_transfer_progress_cb (handler, transferred_bytes, total_bytes,
- 0, -1, manager);
-}
-
-static void
-ft_handler_hashing_done_cb (EmpathyFTHandler *handler,
- EmpathyFTManager *manager)
-{
- GtkTreeRowReference *row_ref;
- char *first_line, *second_line, *message;
-
- DEBUG ("Hashing done");
-
- /* update the message */
- if (empathy_ft_handler_is_incoming (handler))
- {
- do_real_transfer_done (manager, handler);
- return;
- }
-
- row_ref = ft_manager_get_row_from_handler (manager, handler);
- g_return_if_fail (row_ref != NULL);
-
- first_line = ft_manager_format_contact_info (handler);
- second_line = g_strdup (_("Waiting for the other participant's response"));
- message = g_strdup_printf ("%s\n%s", first_line, second_line);
-
- ft_manager_update_handler_message (manager, row_ref, message);
-
- g_free (message);
- g_free (first_line);
- g_free (second_line);
-
- g_signal_connect (handler, "transfer-started",
- G_CALLBACK (ft_handler_transfer_started_cb), manager);
-}
-
-static void
-ft_handler_hashing_progress_cb (EmpathyFTHandler *handler,
- guint64 current_bytes,
- guint64 total_bytes,
- EmpathyFTManager *manager)
-{
- char *first_line, *second_line, *message;
- GtkTreeRowReference *row_ref;
-
- row_ref = ft_manager_get_row_from_handler (manager, handler);
- g_return_if_fail (row_ref != NULL);
-
- if (empathy_ft_handler_is_incoming (handler))
- first_line = g_strdup_printf (_("Checking integrity of \"%s\""),
- empathy_ft_handler_get_filename (handler));
- else
- first_line = g_strdup_printf (_("Hashing \"%s\""),
- empathy_ft_handler_get_filename (handler));
-
- second_line = ft_manager_format_progress_bytes_and_percentage
- (current_bytes, total_bytes, -1, NULL);
-
- message = g_strdup_printf ("%s\n%s", first_line, second_line);
-
- ft_manager_update_handler_message (manager, row_ref, message);
-
- g_free (message);
- g_free (first_line);
- g_free (second_line);
-}
-
-static void
-ft_handler_hashing_started_cb (EmpathyFTHandler *handler,
- EmpathyFTManager *manager)
-{
- char *message, *first_line, *second_line;
- GtkTreeRowReference *row_ref;
-
- DEBUG ("Hashing started");
-
- g_signal_connect (handler, "hashing-progress",
- G_CALLBACK (ft_handler_hashing_progress_cb), manager);
- g_signal_connect (handler, "hashing-done",
- G_CALLBACK (ft_handler_hashing_done_cb), manager);
-
- row_ref = ft_manager_get_row_from_handler (manager, handler);
- g_return_if_fail (row_ref != NULL);
-
- first_line = ft_manager_format_contact_info (handler);
-
- if (empathy_ft_handler_is_incoming (handler))
- second_line = g_strdup_printf (_("Checking integrity of \"%s\""),
- empathy_ft_handler_get_filename (handler));
- else
- second_line = g_strdup_printf (_("Hashing \"%s\""),
- empathy_ft_handler_get_filename (handler));
-
- message = g_strdup_printf ("%s\n%s", first_line, second_line);
-
- ft_manager_update_handler_message (manager, row_ref, message);
-
- g_free (first_line);
- g_free (second_line);
- g_free (message);
-}
-
-static void
-ft_manager_start_transfer (EmpathyFTManager *manager,
- EmpathyFTHandler *handler)
-{
- gboolean is_outgoing;
-
- is_outgoing = !empathy_ft_handler_is_incoming (handler);
-
- DEBUG ("Start transfer, is outgoing %s",
- is_outgoing ? "True" : "False");
-
- /* now connect the signals */
- g_signal_connect (handler, "transfer-error",
- G_CALLBACK (ft_handler_transfer_error_cb), manager);
-
- if (is_outgoing && empathy_ft_handler_get_use_hash (handler)) {
- g_signal_connect (handler, "hashing-started",
- G_CALLBACK (ft_handler_hashing_started_cb), manager);
- } else {
- /* either incoming or outgoing without hash */
- g_signal_connect (handler, "transfer-started",
- G_CALLBACK (ft_handler_transfer_started_cb), manager);
- }
-
- empathy_ft_handler_start_transfer (handler);
-}
-
-static void
-ft_manager_add_handler_to_list (EmpathyFTManager *manager,
- EmpathyFTHandler *handler,
- const GError *error)
-{
- GtkTreeRowReference *row_ref;
- GtkTreeIter iter;
- GtkTreeSelection *selection;
- GtkTreePath *path;
- GIcon *icon;
- const char *content_type, *second_line;
- char *first_line, *message;
- EmpathyFTManagerPriv *priv = GET_PRIV (manager);
-
- icon = NULL;
-
- /* get the icon name from the mime-type of the file. */
- content_type = empathy_ft_handler_get_content_type (handler);
-
- if (content_type != NULL)
- icon = g_content_type_get_icon (content_type);
-
- /* append the handler in the store */
- gtk_list_store_insert_with_values (GTK_LIST_STORE (priv->model),
- &iter, G_MAXINT, COL_FT_OBJECT, handler,
- COL_ICON, icon, -1);
-
- if (icon != NULL)
- g_object_unref (icon);
-
- /* insert the new row_ref in the hash table */
- path = gtk_tree_model_get_path (GTK_TREE_MODEL (priv->model), &iter);
- row_ref = gtk_tree_row_reference_new (GTK_TREE_MODEL (priv->model), path);
- gtk_tree_path_free (path);
- g_hash_table_insert (priv->ft_handler_to_row_ref, g_object_ref (handler),
- row_ref);
-
- /* select the new row */
- selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (priv->treeview));
- gtk_tree_selection_select_iter (selection, &iter);
-
- if (error != NULL)
- {
- message = ft_manager_format_error_message (handler, error);
- ft_manager_update_handler_message (manager, row_ref, message);
-
- g_free (message);
- return;
- }
-
- /* update the row with the initial values.
- * the only case where we postpone this is in case we're managing
- * an outgoing+hashing transfer, as the hashing started signal will
- * take care of updating the information.
- */
- if (empathy_ft_handler_is_incoming (handler) ||
- !empathy_ft_handler_get_use_hash (handler)) {
- first_line = ft_manager_format_contact_info (handler);
- second_line = _("Waiting for the other participant's response");
- message = g_strdup_printf ("%s\n%s", first_line, second_line);
-
- ft_manager_update_handler_message (manager, row_ref, message);
-
- g_free (first_line);
- g_free (message);
- }
-
- /* hook up the signals and start the transfer */
- ft_manager_start_transfer (manager, handler);
-}
-
-static void
-ft_manager_clear (EmpathyFTManager *manager)
-{
- EmpathyFTManagerPriv *priv;
-
- DEBUG ("Clearing file transfer list");
-
- priv = GET_PRIV (manager);
-
- /* Remove completed and cancelled transfers */
- g_hash_table_foreach_remove (priv->ft_handler_to_row_ref,
- remove_finished_transfer_foreach, manager);
-
- /* set the clear button back to insensitive */
- gtk_widget_set_sensitive (priv->clear_button, FALSE);
-}
-
-static void
-ft_manager_open (EmpathyFTManager *manager)
-{
- GtkTreeSelection *selection;
- GtkTreeIter iter;
- GtkTreeModel *model;
- EmpathyFTHandler *handler;
- EmpathyFTManagerPriv *priv = GET_PRIV (manager);
-
- selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (priv->treeview));
-
- if (!gtk_tree_selection_get_selected (selection, &model, &iter))
- return;
-
- gtk_tree_model_get (model, &iter, COL_FT_OBJECT, &handler, -1);
-
- if (empathy_ft_handler_is_completed (handler)){
- char *uri;
- GFile *file;
-
- file = empathy_ft_handler_get_gfile (handler);
- uri = g_file_get_uri (file);
-
- DEBUG ("Opening URI: %s", uri);
- empathy_url_show (GTK_WIDGET (priv->window), uri);
- g_free (uri);
- }
-
- g_object_unref (handler);
-}
-
-static void
-ft_manager_stop (EmpathyFTManager *manager)
-{
- GtkTreeSelection *selection;
- GtkTreeIter iter;
- GtkTreeModel *model;
- EmpathyFTHandler *handler;
- EmpathyFTManagerPriv *priv;
-
- priv = GET_PRIV (manager);
-
- selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (priv->treeview));
-
- if (!gtk_tree_selection_get_selected (selection, &model, &iter))
- return;
-
- gtk_tree_model_get (model, &iter, COL_FT_OBJECT, &handler, -1);
- g_return_if_fail (handler != NULL);
-
- DEBUG ("Stopping file transfer: contact=%s, filename=%s",
- empathy_contact_get_alias (empathy_ft_handler_get_contact (handler)),
- empathy_ft_handler_get_filename (handler));
-
- empathy_ft_handler_cancel_transfer (handler);
-
- g_object_unref (handler);
-}
-
-static gboolean
-close_window (EmpathyFTManager *manager)
-{
- EmpathyFTManagerPriv *priv = GET_PRIV (manager);
-
- DEBUG ("%p", manager);
-
- /* remove all the completed/cancelled/errored transfers */
- ft_manager_clear (manager);
-
- if (g_hash_table_size (priv->ft_handler_to_row_ref) > 0)
- {
- /* There is still FTs on flight, just hide the window */
- DEBUG ("Hiding window");
- gtk_widget_hide (priv->window);
- return TRUE;
- }
-
- return FALSE;
-}
-
-static void
-ft_manager_response_cb (GtkWidget *widget,
- gint response,
- EmpathyFTManager *manager)
-{
- EmpathyFTManagerPriv *priv = GET_PRIV (manager);
-
- switch (response)
- {
- case RESPONSE_CLEAR:
- ft_manager_clear (manager);
- break;
- case RESPONSE_OPEN:
- ft_manager_open (manager);
- break;
- case RESPONSE_STOP:
- ft_manager_stop (manager);
- break;
- case RESPONSE_CLOSE:
- if (!close_window (manager))
- gtk_widget_destroy (priv->window);
- break;
- case GTK_RESPONSE_NONE:
- case GTK_RESPONSE_DELETE_EVENT:
- /* Do nothing */
- break;
- default:
- g_assert_not_reached ();
- }
-}
-
-static gboolean
-ft_manager_delete_event_cb (GtkWidget *widget,
- GdkEvent *event,
- EmpathyFTManager *manager)
-{
- return close_window (manager);
-}
-
-static void
-ft_manager_destroy_cb (GtkWidget *widget,
- EmpathyFTManager *manager)
-{
- DEBUG ("%p", manager);
-
- g_object_unref (manager);
-}
-
-static gboolean
-ft_view_button_press_event_cb (GtkWidget *widget,
- GdkEventKey *event,
- EmpathyFTManager *manager)
-{
-
- if (event->type != GDK_2BUTTON_PRESS)
- return FALSE;
-
- ft_manager_open (manager);
-
- return FALSE;
-}
-
-static gboolean
-ft_manager_key_press_event_cb (GtkWidget *widget,
- GdkEventKey *event,
- gpointer user_data)
-{
- if ((event->state & GDK_CONTROL_MASK && event->keyval == GDK_KEY_w)
- || event->keyval == GDK_KEY_Escape)
- {
- gtk_widget_destroy (widget);
- return TRUE;
- }
-
- return FALSE;
-}
-
-static void
-ft_manager_build_ui (EmpathyFTManager *manager)
-{
- GtkBuilder *gui;
- GtkTreeView *view;
- GtkListStore *liststore;
- GtkTreeViewColumn *column;
- GtkCellRenderer *renderer;
- GtkTreeSelection *selection;
- gchar *filename;
- EmpathyFTManagerPriv *priv = GET_PRIV (manager);
-
- filename = empathy_file_lookup ("empathy-ft-manager.ui", "src");
- gui = tpaw_builder_get_file (filename,
- "ft_manager_dialog", &priv->window,
- "ft_list", &priv->treeview,
- "clear_button", &priv->clear_button,
- "open_button", &priv->open_button,
- "abort_button", &priv->abort_button,
- NULL);
- g_free (filename);
-
- tpaw_builder_connect (gui, manager,
- "ft_manager_dialog", "destroy", ft_manager_destroy_cb,
- "ft_manager_dialog", "response", ft_manager_response_cb,
- "ft_manager_dialog", "delete-event", ft_manager_delete_event_cb,
- "ft_manager_dialog", "key-press-event", ft_manager_key_press_event_cb,
- NULL);
-
- tpaw_builder_unref_and_keep_widget (gui, priv->window);
-
- /* Window geometry. */
- empathy_geometry_bind (GTK_WINDOW (priv->window), "ft-manager");
-
- /* Setup the tree view */
- view = GTK_TREE_VIEW (priv->treeview);
- selection = gtk_tree_view_get_selection (view);
- gtk_tree_selection_set_mode (selection, GTK_SELECTION_BROWSE);
- g_signal_connect (selection, "changed",
- G_CALLBACK (ft_manager_selection_changed), manager);
- g_signal_connect (view, "button-press-event",
- G_CALLBACK (ft_view_button_press_event_cb),
- manager);
- gtk_tree_view_set_headers_visible (view, TRUE);
- gtk_tree_view_set_enable_search (view, FALSE);
-
- /* Setup the model */
- liststore = gtk_list_store_new (5,
- G_TYPE_INT, /* percent */
- G_TYPE_ICON, /* icon */
- G_TYPE_STRING, /* message */
- G_TYPE_STRING, /* remaining */
- G_TYPE_OBJECT); /* ft_handler */
- gtk_tree_view_set_model (view, GTK_TREE_MODEL (liststore));
- priv->model = GTK_TREE_MODEL (liststore);
- g_object_unref (liststore);
-
- /* Progress column */
- column = gtk_tree_view_column_new ();
- gtk_tree_view_column_set_title (column, _("%"));
- gtk_tree_view_column_set_sort_column_id (column, COL_PERCENT);
- gtk_tree_view_insert_column (view, column, -1);
-
- renderer = gtk_cell_renderer_progress_new ();
- g_object_set (renderer, "xalign", 0.5, NULL);
- gtk_tree_view_column_pack_start (column, renderer, FALSE);
- gtk_tree_view_column_set_cell_data_func (column, renderer,
- ft_manager_progress_cell_data_func, NULL, NULL);
-
- /* Icon and filename column*/
- column = gtk_tree_view_column_new ();
- gtk_tree_view_column_set_title (column, _("File"));
- gtk_tree_view_column_set_expand (column, TRUE);
- gtk_tree_view_column_set_resizable (column, TRUE);
- gtk_tree_view_column_set_sort_column_id (column, COL_MESSAGE);
- gtk_tree_view_column_set_spacing (column, 3);
- gtk_tree_view_insert_column (view, column, -1);
-
- renderer = gtk_cell_renderer_pixbuf_new ();
- g_object_set (renderer, "xpad", 3,
- "stock-size", GTK_ICON_SIZE_DND, NULL);
- gtk_tree_view_column_pack_start (column, renderer, FALSE);
- gtk_tree_view_column_set_attributes (column, renderer,
- "gicon", COL_ICON, NULL);
-
- renderer = gtk_cell_renderer_text_new ();
- g_object_set (renderer, "ellipsize", PANGO_ELLIPSIZE_END, NULL);
- gtk_tree_view_column_pack_start (column, renderer, TRUE);
- gtk_tree_view_column_set_attributes (column, renderer,
- "text", COL_MESSAGE, NULL);
-
- /* Remaining time column */
- column = gtk_tree_view_column_new ();
- gtk_tree_view_column_set_title (column, _("Remaining"));
- gtk_tree_view_column_set_sort_column_id (column, COL_REMAINING);
- gtk_tree_view_insert_column (view, column, -1);
-
- renderer = gtk_cell_renderer_text_new ();
- g_object_set (renderer, "xalign", 0.5, NULL);
- gtk_tree_view_column_pack_start (column, renderer, FALSE);
- gtk_tree_view_column_set_attributes (column, renderer,
- "text", COL_REMAINING, NULL);
-
- /* clear button should be sensitive only if there are completed/cancelled
- * handlers in the store.
- */
- gtk_widget_set_sensitive (priv->clear_button, FALSE);
-}
-
-/* GObject method overrides */
-
-static void
-empathy_ft_manager_finalize (GObject *object)
-{
- EmpathyFTManagerPriv *priv = GET_PRIV (object);
-
- DEBUG ("FT Manager %p", object);
-
- g_hash_table_unref (priv->ft_handler_to_row_ref);
-
- G_OBJECT_CLASS (empathy_ft_manager_parent_class)->finalize (object);
-}
-
-static void
-empathy_ft_manager_init (EmpathyFTManager *manager)
-{
- EmpathyFTManagerPriv *priv;
-
- priv = G_TYPE_INSTANCE_GET_PRIVATE ((manager), EMPATHY_TYPE_FT_MANAGER,
- EmpathyFTManagerPriv);
-
- manager->priv = priv;
-
- priv->ft_handler_to_row_ref = g_hash_table_new_full (g_direct_hash,
- g_direct_equal, (GDestroyNotify) g_object_unref,
- (GDestroyNotify) gtk_tree_row_reference_free);
-
- ft_manager_build_ui (manager);
-}
-
-static GObject *
-empathy_ft_manager_constructor (GType type,
- guint n_props,
- GObjectConstructParam *props)
-{
- GObject *retval;
-
- if (manager_singleton)
- {
- retval = G_OBJECT (manager_singleton);
- }
- else
- {
- retval = G_OBJECT_CLASS (empathy_ft_manager_parent_class)->constructor
- (type, n_props, props);
-
- manager_singleton = EMPATHY_FT_MANAGER (retval);
- g_object_add_weak_pointer (retval, (gpointer) &manager_singleton);
- }
-
- return retval;
-}
-
-static void
-empathy_ft_manager_class_init (EmpathyFTManagerClass *klass)
-{
- GObjectClass *object_class = G_OBJECT_CLASS (klass);
-
- object_class->finalize = empathy_ft_manager_finalize;
- object_class->constructor = empathy_ft_manager_constructor;
-
- g_type_class_add_private (object_class, sizeof (EmpathyFTManagerPriv));
-}
-
-/* public methods */
-
-void
-empathy_ft_manager_add_handler (EmpathyFTHandler *handler)
-{
- EmpathyFTManager *manager;
- EmpathyFTManagerPriv *priv;
-
- DEBUG ("Adding handler");
-
- g_return_if_fail (EMPATHY_IS_FT_HANDLER (handler));
-
- manager = g_object_new (EMPATHY_TYPE_FT_MANAGER, NULL);
- priv = GET_PRIV (manager);
-
- ft_manager_add_handler_to_list (manager, handler, NULL);
- gtk_window_present (GTK_WINDOW (priv->window));
-}
-
-void
-empathy_ft_manager_display_error (EmpathyFTHandler *handler,
- const GError *error)
-{
- EmpathyFTManager *manager;
- EmpathyFTManagerPriv *priv;
-
- g_return_if_fail (EMPATHY_IS_FT_HANDLER (handler));
- g_return_if_fail (error != NULL);
-
- manager = g_object_new (EMPATHY_TYPE_FT_MANAGER, NULL);
- priv = GET_PRIV (manager);
-
- ft_manager_add_handler_to_list (manager, handler, error);
- gtk_window_present (GTK_WINDOW (priv->window));
-}
-
-void
-empathy_ft_manager_show (void)
-{
- EmpathyFTManager *manager;
- EmpathyFTManagerPriv *priv;
-
- manager = g_object_new (EMPATHY_TYPE_FT_MANAGER, NULL);
- priv = GET_PRIV (manager);
-
- gtk_window_present (GTK_WINDOW (priv->window));
-}
diff --git a/src/empathy-ft-manager.h b/src/empathy-ft-manager.h
deleted file mode 100644
index be41730e..00000000
--- a/src/empathy-ft-manager.h
+++ /dev/null
@@ -1,69 +0,0 @@
-/*
- * Copyright (C) 2007 Marco Barisione <marco@barisione.org>
- * Copyright (C) 2008-2009 Collabora Ltd.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301 USA
- *
- * Authors: Marco Barisione <marco@barisione.org>
- * Jonny Lamb <jonny.lamb@collabora.co.uk>
- * Cosimo Cecchi <cosimo.cecchi@collabora.co.uk>
- */
-
-#ifndef __EMPATHY_FT_MANAGER_H__
-#define __EMPATHY_FT_MANAGER_H__
-
-#include <glib-object.h>
-
-#include "empathy-ft-handler.h"
-
-G_BEGIN_DECLS
-
-#define EMPATHY_TYPE_FT_MANAGER \
- (empathy_ft_manager_get_type ())
-#define EMPATHY_FT_MANAGER(o) \
- (G_TYPE_CHECK_INSTANCE_CAST ((o), EMPATHY_TYPE_FT_MANAGER, EmpathyFTManager))
-#define EMPATHY_FT_MANAGER_CLASS(k) \
- (G_TYPE_CHECK_CLASS_CAST((k), EMPATHY_TYPE_FT_MANAGER, EmpathyFTManagerClass))
-#define EMPATHY_IS_FT_MANAGER(o) \
- (G_TYPE_CHECK_INSTANCE_TYPE ((o), EMPATHY_TYPE_FT_MANAGER))
-#define EMPATHY_IS_FT_MANAGER_CLASS(k) \
- (G_TYPE_CHECK_CLASS_TYPE ((k), EMPATHY_TYPE_FT_MANAGER))
-#define EMPATHY_FT_MANAGER_GET_CLASS(o) \
- (G_TYPE_INSTANCE_GET_CLASS ((o), EMPATHY_TYPE_FT_MANAGER, EmpathyFTManagerClass))
-
-typedef struct _EmpathyFTManager EmpathyFTManager;
-typedef struct _EmpathyFTManagerClass EmpathyFTManagerClass;
-
-struct _EmpathyFTManager {
- GObject parent;
- gpointer priv;
-};
-
-struct _EmpathyFTManagerClass {
- GObjectClass parent_class;
-};
-
-GType empathy_ft_manager_get_type (void);
-
-/* public methods */
-void empathy_ft_manager_add_handler (EmpathyFTHandler *handler);
-void empathy_ft_manager_display_error (EmpathyFTHandler *handler,
- const GError *error);
-void empathy_ft_manager_show (void);
-
-G_END_DECLS
-
-#endif /* __EMPATHY_FT_MANAGER_H__ */
diff --git a/src/empathy-ft-manager.ui b/src/empathy-ft-manager.ui
deleted file mode 100644
index 803d010b..00000000
--- a/src/empathy-ft-manager.ui
+++ /dev/null
@@ -1,103 +0,0 @@
-<?xml version="1.0"?>
-<!--*- mode: xml -*-->
-<interface>
- <object class="GtkDialog" id="ft_manager_dialog">
- <property name="width_request">620</property>
- <property name="height_request">250</property>
- <property name="border_width">5</property>
- <property name="title" translatable="yes">File Transfers</property>
- <property name="role">empathy-ft-manager</property>
- <property name="icon_name">document-send</property>
- <property name="type_hint">GDK_WINDOW_TYPE_HINT_NORMAL</property>
- <child internal-child="vbox">
- <object class="GtkVBox" id="dialog-vbox31">
- <property name="visible">True</property>
- <property name="spacing">2</property>
- <child>
- <object class="GtkScrolledWindow" id="scrolledwindow1134">
- <property name="height_request">100</property>
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="border_width">5</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>
- <object class="GtkTreeView" id="ft_list">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- </object>
- </child>
- </object>
- <packing>
- <property name="expand">True</property>
- <property name="position">1</property>
- </packing>
- </child>
- <child internal-child="action_area">
- <object class="GtkHButtonBox" id="dialog-action_area31">
- <property name="visible">True</property>
- <property name="layout_style">GTK_BUTTONBOX_END</property>
- <child>
- <object class="GtkButton" id="clear_button">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="receives_default">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="tooltip-text" translatable="yes">Remove completed, canceled and failed file transfers from the list</property>
- <property name="label">gtk-clear</property>
- <property name="use_stock">True</property>
- </object>
- </child>
- <child>
- <object class="GtkButton" id="open_button">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="can_default">True</property>
- <property name="label">gtk-open</property>
- <property name="use_stock">True</property>
- </object>
- <packing>
- <property name="position">1</property>
- </packing>
- </child>
- <child>
- <object class="GtkButton" id="abort_button">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="can_default">True</property>
- <property name="label">gtk-stop</property>
- <property name="use_stock">True</property>
- </object>
- <packing>
- <property name="position">2</property>
- </packing>
- </child>
- <child>
- <object class="GtkButton" id="close_button">
- <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>
- </object>
- <packing>
- <property name="position">3</property>
- </packing>
- </child>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="pack_type">GTK_PACK_END</property>
- </packing>
- </child>
- </object>
- </child>
- <action-widgets>
- <action-widget response="3">clear_button</action-widget>
- <action-widget response="1">open_button</action-widget>
- <action-widget response="2">abort_button</action-widget>
- <action-widget response="4">close_button</action-widget>
- </action-widgets>
- </object>
-</interface>
diff --git a/src/empathy-import-dialog.c b/src/empathy-import-dialog.c
deleted file mode 100644
index 9d86dd1d..00000000
--- a/src/empathy-import-dialog.c
+++ /dev/null
@@ -1,264 +0,0 @@
-/*
- * Copyright (C) 2008-2009 Collabora Ltd.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301 USA
- *
- * Authors: Jonny Lamb <jonny.lamb@collabora.co.uk>
- * Cosimo Cecchi <cosimo.cecchi@collabora.co.uk>
- */
-
-#include "config.h"
-#include "empathy-import-dialog.h"
-
-#include <glib/gi18n-lib.h>
-
-#include "empathy-import-widget.h"
-#include "empathy-utils.h"
-
-#define DEBUG_FLAG EMPATHY_DEBUG_OTHER
-#include "empathy-debug.h"
-
-enum {
- PROP_PARENT = 1,
- PROP_SHOW_WARNING,
- PROP_CMS,
-};
-
-typedef struct {
- GtkWindow *parent_window;
-
- EmpathyImportWidget *iw;
-
- gboolean show_warning;
- TpawConnectionManagers *cms;
-} EmpathyImportDialogPriv;
-
-G_DEFINE_TYPE (EmpathyImportDialog, empathy_import_dialog, GTK_TYPE_DIALOG)
-#define GET_PRIV(obj) EMPATHY_GET_PRIV (obj, EmpathyImportDialog)
-
-static void
-import_dialog_add_import_widget (EmpathyImportDialog *self)
-{
- EmpathyImportWidget *iw;
- EmpathyImportDialogPriv *priv = GET_PRIV (self);
- GtkWidget *widget, *area;
-
- area = gtk_dialog_get_content_area (GTK_DIALOG (self));
-
- iw = empathy_import_widget_new (EMPATHY_IMPORT_APPLICATION_ALL, priv->cms);
- widget = empathy_import_widget_get_widget (iw);
- gtk_box_pack_start (GTK_BOX (area), widget, TRUE, TRUE, 0);
- gtk_widget_show (widget);
-
- priv->iw = iw;
-
- gtk_dialog_add_buttons (GTK_DIALOG (self),
- GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
- _("_Import"), GTK_RESPONSE_OK,
- NULL);
-}
-
-static void
-import_dialog_show_warning_message (EmpathyImportDialog *self)
-{
- GtkWidget *hbox, *vbox, *w;
-
- vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 12);
- hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 12);
-
- w = gtk_label_new (_("No accounts to import could be found. Empathy "
- "currently only supports importing accounts from Pidgin."));
- gtk_label_set_line_wrap (GTK_LABEL (w), TRUE);
- gtk_label_set_selectable (GTK_LABEL (w), TRUE);
- gtk_misc_set_alignment (GTK_MISC (w), 0.0, 0.0);
- gtk_box_pack_start (GTK_BOX (vbox), w, FALSE, FALSE, 0);
-
- w = gtk_image_new_from_stock (GTK_STOCK_DIALOG_WARNING,
- GTK_ICON_SIZE_DIALOG);
- gtk_misc_set_alignment (GTK_MISC (w), 0.5, 0.0);
- gtk_box_pack_start (GTK_BOX (hbox), w, FALSE, FALSE, 0);
-
- gtk_box_pack_start (GTK_BOX (hbox), vbox, TRUE, TRUE, 0);
-
- w = gtk_dialog_get_content_area (GTK_DIALOG (self));
- gtk_box_pack_start (GTK_BOX (w), hbox, FALSE, FALSE, 0);
-
- gtk_box_set_spacing (GTK_BOX (w), 14); /* 14 + 2 * 5 = 24 */
-
- gtk_dialog_add_button (GTK_DIALOG (self), GTK_STOCK_CLOSE,
- GTK_RESPONSE_CLOSE);
-
- gtk_widget_show_all (w);
-}
-
-static void
-impl_signal_response (GtkDialog *dialog,
- gint response_id)
-{
- EmpathyImportDialogPriv *priv = GET_PRIV (dialog);
-
- if (response_id == GTK_RESPONSE_OK)
- empathy_import_widget_add_selected_accounts (priv->iw);
-
- gtk_widget_destroy (GTK_WIDGET (dialog));
-}
-
-static void
-do_get_property (GObject *object,
- guint property_id,
- GValue *value,
- GParamSpec *pspec)
-{
- EmpathyImportDialogPriv *priv = GET_PRIV (object);
-
- switch (property_id)
- {
- case PROP_PARENT:
- g_value_set_object (value, priv->parent_window);
- break;
- case PROP_SHOW_WARNING:
- g_value_set_boolean (value, priv->show_warning);
- break;
- case PROP_CMS:
- g_value_set_object (value, priv->cms);
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
- }
-}
-
-static void
-do_set_property (GObject *object,
- guint property_id,
- const GValue *value,
- GParamSpec *pspec)
-{
- EmpathyImportDialogPriv *priv = GET_PRIV (object);
-
- switch (property_id)
- {
- case PROP_PARENT:
- priv->parent_window = g_value_get_object (value);
- break;
- case PROP_SHOW_WARNING:
- priv->show_warning = g_value_get_boolean (value);
- break;
- case PROP_CMS:
- priv->cms = g_value_dup_object (value);
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
- }
-}
-
-static void
-do_constructed (GObject *obj)
-{
- EmpathyImportDialog *self = EMPATHY_IMPORT_DIALOG (obj);
- EmpathyImportDialogPriv *priv = GET_PRIV (self);
- gboolean have_accounts;
-
- have_accounts = empathy_import_accounts_to_import ();
-
- if (!have_accounts)
- {
- if (priv->show_warning)
- {
- import_dialog_show_warning_message (self);
- }
- else
- DEBUG ("No accounts to import; closing dialog silently.");
- }
- else
- {
- import_dialog_add_import_widget (self);
- }
-
- if (priv->parent_window)
- gtk_window_set_transient_for (GTK_WINDOW (self), priv->parent_window);
-}
-
-static void
-empathy_import_dialog_init (EmpathyImportDialog *self)
-{
- EmpathyImportDialogPriv *priv = G_TYPE_INSTANCE_GET_PRIVATE (self,
- EMPATHY_TYPE_IMPORT_DIALOG, EmpathyImportDialogPriv);
-
- self->priv = priv;
-
- gtk_container_set_border_width (GTK_CONTAINER (self), 5);
- gtk_window_set_title (GTK_WINDOW (self), _("Import Accounts"));
- gtk_window_set_modal (GTK_WINDOW (self), TRUE);
-}
-static void
-do_dispose (GObject *obj)
-{
- EmpathyImportDialogPriv *priv = GET_PRIV (obj);
-
- g_clear_object (&priv->cms);
-
- G_OBJECT_CLASS (empathy_import_dialog_parent_class)->dispose (obj);
-}
-
-static void
-empathy_import_dialog_class_init (EmpathyImportDialogClass *klass)
-{
- GObjectClass *oclass = G_OBJECT_CLASS (klass);
- GtkDialogClass *gtkclass = GTK_DIALOG_CLASS (klass);
- GParamSpec *param_spec;
-
- oclass->constructed = do_constructed;
- oclass->get_property = do_get_property;
- oclass->set_property = do_set_property;
- oclass->dispose = do_dispose;
-
- gtkclass->response = impl_signal_response;
-
- param_spec = g_param_spec_object ("parent-window",
- "parent-window", "The parent window",
- GTK_TYPE_WINDOW,
- G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | G_PARAM_CONSTRUCT_ONLY);
- g_object_class_install_property (oclass, PROP_PARENT, param_spec);
-
- param_spec = g_param_spec_boolean ("show-warning",
- "show-warning", "Whether a warning should be shown when there are no "
- "sources for importing accounts.",
- FALSE,
- G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | G_PARAM_CONSTRUCT_ONLY);
- g_object_class_install_property (oclass, PROP_SHOW_WARNING, param_spec);
-
- param_spec = g_param_spec_object ("cms",
- "TpawConnectionManagers", "EmpathyConnectionManager",
- TPAW_TYPE_CONNECTION_MANAGERS,
- G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | G_PARAM_CONSTRUCT_ONLY);
- g_object_class_install_property (oclass, PROP_CMS, param_spec);
-
- g_type_class_add_private (klass, sizeof (EmpathyImportDialogPriv));
-}
-
-GtkWidget *
-empathy_import_dialog_new (GtkWindow *parent,
- gboolean warning,
- TpawConnectionManagers *cms)
-{
- g_return_val_if_fail (TPAW_IS_CONNECTION_MANAGERS (cms), NULL);
-
- return g_object_new (EMPATHY_TYPE_IMPORT_DIALOG,
- "parent-window", parent,
- "show-warning", warning,
- "cms", cms,
- NULL);
-}
diff --git a/src/empathy-import-dialog.h b/src/empathy-import-dialog.h
deleted file mode 100644
index 8fce49fc..00000000
--- a/src/empathy-import-dialog.h
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
- * Copyright (C) 2008-2009 Collabora Ltd.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301 USA
- *
- * Authors: Jonny Lamb <jonny.lamb@collabora.co.uk>
- * Cosimo Cecchi <cosimo.cecchi@collabora.co.uk>
- */
-
-#include <gtk/gtk.h>
-
-#ifndef __EMPATHY_IMPORT_DIALOG_H__
-#define __EMPATHY_IMPORT_DIALOG_H__
-
-#include <tp-account-widgets/tpaw-connection-managers.h>
-
-G_BEGIN_DECLS
-
-#define EMPATHY_TYPE_IMPORT_DIALOG empathy_import_dialog_get_type()
-#define EMPATHY_IMPORT_DIALOG(obj) \
- (G_TYPE_CHECK_INSTANCE_CAST ((obj), EMPATHY_TYPE_IMPORT_DIALOG,\
- EmpathyImportDialog))
-#define EMPATHY_IMPORT_DIALOG_CLASS(klass) \
- (G_TYPE_CHECK_CLASS_CAST ((klass), EMPATHY_TYPE_IMPORT_DIALOG,\
- EmpathyImportDialogClass))
-#define EMPATHY_IS_IMPORT_DIALOG(obj) \
- (G_TYPE_CHECK_INSTANCE_TYPE ((obj), EMPATHY_TYPE_IMPORT_DIALOG))
-#define EMPATHY_IS_IMPORT_DIALOG_CLASS(klass) \
- (G_TYPE_CHECK_CLASS_TYPE ((klass), EMPATHY_TYPE_IMPORT_DIALOG))
-#define EMPATHY_IMPORT_DIALOG_GET_CLASS(obj) \
- (G_TYPE_INSTANCE_GET_CLASS ((obj), EMPATHY_TYPE_IMPORT_DIALOG,\
- EmpathyImportDialogClass))
-
-typedef struct {
- GtkDialog parent;
-
- /* private */
- gpointer priv;
-} EmpathyImportDialog;
-
-typedef struct {
- GtkDialogClass parent_class;
-} EmpathyImportDialogClass;
-
-GType empathy_import_dialog_get_type (void);
-
-GtkWidget* empathy_import_dialog_new (GtkWindow *parent_window,
- gboolean show_warning,
- TpawConnectionManagers *cms);
-
-G_END_DECLS
-
-#endif /* __EMPATHY_IMPORT_DIALOG_H__ */
diff --git a/src/empathy-import-dialog.ui b/src/empathy-import-dialog.ui
deleted file mode 100644
index 2cc9207b..00000000
--- a/src/empathy-import-dialog.ui
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0"?>
-<interface>
- <!-- interface-requires gtk+ 2.12 -->
- <!-- interface-naming-policy toplevel-contextual -->
- <object class="GtkVBox" id="widget_vbox">
- <property name="visible">True</property>
- <property name="spacing">2</property>
- <child>
- <object class="GtkScrolledWindow" id="scrolledwindow">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="hscrollbar_policy">never</property>
- <property name="vscrollbar_policy">automatic</property>
- <property name="shadow_type">in</property>
- <child>
- <object class="GtkTreeView" id="treeview">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="enable_search">False</property>
- </object>
- </child>
- </object>
- <packing>
- <property name="position">1</property>
- </packing>
- </child>
- </object>
-</interface>
diff --git a/src/empathy-import-pidgin.c b/src/empathy-import-pidgin.c
deleted file mode 100644
index bd05753c..00000000
--- a/src/empathy-import-pidgin.c
+++ /dev/null
@@ -1,409 +0,0 @@
-/*
- * 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., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301 USA
- *
- * Authors: Jonny Lamb <jonny.lamb@collabora.co.uk>
- * */
-
-#include "config.h"
-#include "empathy-import-pidgin.h"
-
-#include <glib/gstdio.h>
-#include <dbus/dbus-protocol.h>
-#include <tp-account-widgets/tpaw-utils.h>
-
-#include "empathy-import-utils.h"
-#include "empathy-utils.h"
-
-#define DEBUG_FLAG EMPATHY_DEBUG_OTHER
-#include "empathy-debug.h"
-
-/* Pidgin to CM map */
-typedef struct
-{
- const gchar *protocol;
- const gchar *pidgin_name;
- const gchar *cm_name;
-} PidginCmMapItem;
-
-static PidginCmMapItem pidgin_cm_map[] =
-{
- { "msn", "server", "server" },
- { "msn", "port", "port" },
-
- { "jabber", "connect_server", "server" },
- { "jabber", "port", "port" },
- { "jabber", "require_tls", "require-encryption" },
- { "jabber", "old_ssl", "old-ssl" },
-
- { "aim", "server", "server" },
- { "aim", "port", "port" },
-
- { "salut", "first", "first-name" },
- { "salut", "last", "last-name" },
- { "salut", "jid", "jid" },
- { "salut", "email", "email" },
-
- { "groupwise", "server", "server" },
- { "groupwise", "port", "port" },
-
- { "icq", "server", "server" },
- { "icq", "port", "port" },
-
- { "irc", "realname", "fullname" },
- { "irc", "ssl", "use-ssl" },
- { "irc", "port", "port" },
-
- { "yahoo", "server", "server" },
- { "yahoo", "port", "port" },
- { "yahoo", "xfer_port", "xfer-port" },
- { "yahoo", "ignore_invites", "ignore-invites" },
- { "yahoo", "yahoojp", "yahoojp" },
- { "yahoo", "xferjp_host", "xferjp-host" },
- { "yahoo", "serverjp", "serverjp" },
- { "yahoo", "xfer_host", "xfer-host" },
-};
-
-#define PIDGIN_ACCOUNT_TAG_NAME "name"
-#define PIDGIN_ACCOUNT_TAG_ACCOUNT "account"
-#define PIDGIN_ACCOUNT_TAG_PROTOCOL "protocol"
-#define PIDGIN_ACCOUNT_TAG_PASSWORD "password"
-#define PIDGIN_ACCOUNT_TAG_SETTINGS "settings"
-#define PIDGIN_SETTING_PROP_UI "ui"
-#define PIDGIN_SETTING_PROP_NAME "name"
-#define PIDGIN_SETTING_PROP_TYPE "type"
-#define PIDGIN_PROTOCOL_BONJOUR "bonjour"
-#define PIDGIN_PROTOCOL_NOVELL "novell"
-
-static void
-import_dialog_pidgin_parse_setting (EmpathyImportAccountData *data,
- xmlNodePtr setting)
-{
- PidginCmMapItem *item = NULL;
- gchar *tag_name;
- gchar *type = NULL;
- gchar *content;
- guint i;
- GValue *value = NULL;
-
- /* We can't do anything if the setting don't have a name */
- tag_name = (gchar *) xmlGetProp (setting,
- (xmlChar *) PIDGIN_SETTING_PROP_NAME);
- if (!tag_name)
- return;
-
- /* Search for the map corresponding to setting we are parsing */
- for (i = 0; i < G_N_ELEMENTS (pidgin_cm_map); i++)
- {
- if (!tp_strdiff (data->protocol, pidgin_cm_map[i].protocol) &&
- !tp_strdiff (tag_name, pidgin_cm_map[i].pidgin_name))
- {
- item = pidgin_cm_map + i;
- break;
- }
- }
- g_free (tag_name);
-
- /* If we didn't find the item, there is nothing we can do */
- if (!item)
- return;
-
- type = (gchar *) xmlGetProp (setting, (xmlChar *) PIDGIN_SETTING_PROP_TYPE);
- content = (gchar *) xmlNodeGetContent (setting);
-
- if (!tp_strdiff (type, "bool"))
- {
- i = (gint) g_ascii_strtod (content, NULL);
- value = tp_g_value_slice_new (G_TYPE_BOOLEAN);
- g_value_set_boolean (value, i != 0);
- }
- else if (!tp_strdiff (type, "int"))
- {
- TpConnectionManager *cm = NULL;
- TpProtocol *proto;
- const TpConnectionManagerParam *param;
- const gchar *signature;
- int signature_i;
-
- if (!empathy_import_protocol_is_supported (data->protocol, &cm))
- return;
-
- proto = tp_connection_manager_get_protocol_object (cm, data->protocol);
- param = tp_protocol_get_param (proto, item->cm_name);
- signature = tp_connection_manager_param_get_dbus_signature (param);
- signature_i = (int) (*signature);
-
- i = (gint) g_ascii_strtod (content, NULL);
-
- if (signature_i == DBUS_TYPE_INT16 ||
- signature_i == DBUS_TYPE_INT32)
- {
- value = tp_g_value_slice_new (G_TYPE_INT);
- g_value_set_int (value, i);
- }
- else if (signature_i == DBUS_TYPE_UINT16 ||
- signature_i == DBUS_TYPE_UINT32)
- {
- value = tp_g_value_slice_new (G_TYPE_UINT);
- g_value_set_uint (value, (guint) i);
- }
- }
- else if (!tp_strdiff (type, "string"))
- {
- value = tp_g_value_slice_new (G_TYPE_STRING);
- g_value_set_string (value, content);
- }
-
- if (value)
- g_hash_table_insert (data->settings, (gpointer) item->cm_name, value);
-
- g_free (type);
- g_free (content);
-}
-
-static void
-import_dialog_pidgin_handle_settings (EmpathyImportAccountData *data,
- xmlNodePtr settings)
-{
- xmlNodePtr setting;
- gchar *tag_ui, *name, *type, *content;
-
- tag_ui = (gchar *) xmlGetProp (settings, (xmlChar *) PIDGIN_SETTING_PROP_UI);
-
- /* UI settings - fetch the Enabled parameter.
- * The expected value of the ui property is 'gtk-gaim', which looks obsolete,
- * but still valid for 2.7.3.
- */
- if (tag_ui && !tp_strdiff (tag_ui, "gtk-gaim"))
- {
- for (setting = settings->children; setting; setting = setting->next)
- {
- name = (gchar *) xmlGetProp (setting,
- (xmlChar *) PIDGIN_SETTING_PROP_NAME);
- type = (gchar *) xmlGetProp (setting,
- (xmlChar *) PIDGIN_SETTING_PROP_TYPE);
- /* The Enabled parameter is supposed to be boolean.
- * Pidgin name of the setting is 'auto-login'.
- */
- if (!tp_strdiff (name, "auto-login") && !tp_strdiff (type, "bool"))
- {
- content = (gchar *) xmlNodeGetContent (setting);
- data->enabled = (0 != (gint) g_ascii_strtod (content, NULL));
- g_free (content);
- }
- g_free (type);
- g_free (name);
- }
- }
- /* General settings. */
- else
- {
- for (setting = settings->children; setting; setting = setting->next)
- import_dialog_pidgin_parse_setting (data, setting);
- }
-
- g_free (tag_ui);
-}
-
-GList *
-empathy_import_pidgin_load (void)
-{
- xmlNodePtr rootnode, node, child;
- xmlParserCtxtPtr ctxt;
- xmlDocPtr doc;
- gchar *filename;
- GList *accounts = NULL;
-
- /* Load pidgin accounts xml */
- ctxt = xmlNewParserCtxt ();
- filename = g_build_filename (g_get_home_dir (), ".purple", "accounts.xml",
- NULL);
-
- if (g_access (filename, R_OK) != 0)
- goto FILENAME;
-
- doc = xmlCtxtReadFile (ctxt, filename, NULL, 0);
-
- rootnode = xmlDocGetRootElement (doc);
- if (rootnode == NULL)
- goto OUT;
-
- for (node = rootnode->children; node; node = node->next)
- {
- EmpathyImportAccountData *data;
-
- /* If it is not an account node, skip. */
- if (tp_strdiff ((gchar *) node->name, PIDGIN_ACCOUNT_TAG_ACCOUNT))
- continue;
-
- /* Create account data struct */
- data = empathy_import_account_data_new ("Pidgin");
-
- /* Parse account's child nodes to fill the account data struct */
- for (child = node->children; child; child = child->next)
- {
- GValue *value;
-
- /* Protocol */
- if (!tp_strdiff ((gchar *) child->name,
- PIDGIN_ACCOUNT_TAG_PROTOCOL))
- {
- xmlChar *content;
- const gchar *protocol;
-
- content = xmlNodeGetContent (child);
-
- protocol = (const gchar *) content;
-
- if (g_str_has_prefix (protocol, "prpl-"))
- protocol += 5;
-
- if (!tp_strdiff (protocol, PIDGIN_PROTOCOL_BONJOUR))
- data->protocol = g_strdup ("salut");
- else if (!tp_strdiff (protocol, PIDGIN_PROTOCOL_NOVELL))
- data->protocol = g_strdup ("groupwise");
- else
- data->protocol = g_strdup (protocol);
-
- xmlFree (content);
-
- if (data->protocol == NULL)
- break;
- }
-
- /* Username and IRC server. */
- else if (!tp_strdiff ((gchar *) child->name,
- PIDGIN_ACCOUNT_TAG_NAME))
- {
- gchar *name;
- GStrv name_resource = NULL;
- GStrv nick_server = NULL;
- const gchar *username;
-
- name = (gchar *) xmlNodeGetContent (child);
-
- /* Split "username/resource" */
- if (g_strrstr (name, "/") != NULL)
- {
- name_resource = g_strsplit (name, "/", 2);
- username = name_resource[0];
- }
- else
- username = name;
-
- /* Split "username@server" if it is an IRC account */
- if (strstr (name, "@") && !tp_strdiff (data->protocol, "irc"))
- {
- nick_server = g_strsplit (name, "@", 2);
- username = nick_server[0];
-
- /* Add the server setting */
- value = tp_g_value_slice_new (G_TYPE_STRING);
- g_value_set_string (value, nick_server[1]);
- g_hash_table_insert (data->settings, (gpointer) "server", value);
- }
-
- /* Add the account setting */
- value = tp_g_value_slice_new (G_TYPE_STRING);
- g_value_set_string (value, username);
- g_hash_table_insert (data->settings, (gpointer) "account", value);
-
- g_strfreev (name_resource);
- g_strfreev (nick_server);
- g_free (name);
- }
-
- /* Password */
- else if (!tp_strdiff ((gchar *) child->name,
- PIDGIN_ACCOUNT_TAG_PASSWORD))
- {
- gchar *password;
-
- password = (gchar *) xmlNodeGetContent (child);
-
- /* Add the password setting */
- value = tp_g_value_slice_new (G_TYPE_STRING);
- g_value_set_string (value, password);
- g_hash_table_insert (data->settings, (gpointer) "password", value);
-
- g_free (password);
- }
-
- /* Other settings */
- else if (!tp_strdiff ((gchar *) child->name,
- PIDGIN_ACCOUNT_TAG_SETTINGS))
- import_dialog_pidgin_handle_settings (data, child);
- }
-
- /* If we have the needed settings, add the account data to the list,
- * otherwise free the data */
- if (data->protocol != NULL && g_hash_table_size (data->settings) > 0)
- {
- /* Special-case XMPP:
- * http://bugzilla.gnome.org/show_bug.cgi?id=579992 */
- if (!tp_strdiff (data->protocol, "jabber"))
- {
- if (TPAW_STR_EMPTY (tp_asv_get_string (data->settings, "server")))
- {
- g_hash_table_remove (data->settings, "port");
- g_hash_table_remove (data->settings, "server");
- }
- }
-
- /* If there is no password then MC treats the account as not
- * ready and doesn't display it. */
- if (!g_hash_table_lookup (data->settings, "password"))
- {
- GValue *value;
- value = tp_g_value_slice_new (G_TYPE_STRING);
- g_value_set_string (value, "");
- g_hash_table_insert (data->settings, (gpointer) "password", value);
- }
-
- accounts = g_list_prepend (accounts, data);
- }
- else
- empathy_import_account_data_free (data);
- }
-
-OUT:
- xmlFreeDoc (doc);
- xmlFreeParserCtxt (ctxt);
-
-FILENAME:
- g_free (filename);
-
- return accounts;
-}
-
-gboolean
-empathy_import_pidgin_accounts_to_import (void)
-{
- gchar *filename;
- gboolean out;
- GFile *file;
-
- filename = g_build_filename (g_get_home_dir (), ".purple", "accounts.xml",
- NULL);
- file = g_file_new_for_path (filename);
- out = g_file_query_exists (file, NULL);
-
- g_free (filename);
- g_object_unref (file);
-
- return out;
-}
diff --git a/src/empathy-import-pidgin.h b/src/empathy-import-pidgin.h
deleted file mode 100644
index b72acf55..00000000
--- a/src/empathy-import-pidgin.h
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * 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., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301 USA
- *
- * Authors: Jonny Lamb <jonny.lamb@collabora.co.uk>
- */
-
-#include <gtk/gtk.h>
-
-#ifndef __EMPATHY_IMPORT_PIDGIN_H__
-#define __EMPATHY_IMPORT_PIDGIN_H__
-
-G_BEGIN_DECLS
-
-GList *empathy_import_pidgin_load (void);
-gboolean empathy_import_pidgin_accounts_to_import (void);
-
-G_END_DECLS
-
-#endif /* __EMPATHY_IMPORT_PIDGIN_H__ */
diff --git a/src/empathy-import-utils.c b/src/empathy-import-utils.c
deleted file mode 100644
index ab7847c3..00000000
--- a/src/empathy-import-utils.c
+++ /dev/null
@@ -1,126 +0,0 @@
-/*
- * Copyright (C) 2009 Collabora Ltd.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- *
- * Authors: Jonny Lamb <jonny.lamb@collabora.co.uk>
- * Cosimo Cecchi <cosimo.cecchi@collabora.co.uk>
- */
-
-#include "config.h"
-#include "empathy-import-utils.h"
-
-#include <tp-account-widgets/tpaw-connection-managers.h>
-#include <tp-account-widgets/tpaw-utils.h>
-
-#include "empathy-import-pidgin.h"
-#include "empathy-utils.h"
-
-EmpathyImportAccountData *
-empathy_import_account_data_new (const gchar *source)
-{
- EmpathyImportAccountData *data;
-
- g_return_val_if_fail (!TPAW_STR_EMPTY (source), NULL);
-
- data = g_slice_new0 (EmpathyImportAccountData);
- data->settings = g_hash_table_new_full (g_str_hash, g_str_equal, NULL,
- (GDestroyNotify) tp_g_value_slice_free);
- data->source = g_strdup (source);
- data->protocol = NULL;
- data->connection_manager = NULL;
- data->enabled = FALSE;
-
- return data;
-}
-
-void
-empathy_import_account_data_free (EmpathyImportAccountData *data)
-{
- if (data == NULL)
- return;
- if (data->protocol != NULL)
- g_free (data->protocol);
- if (data->connection_manager != NULL)
- g_free (data->connection_manager);
- if (data->settings != NULL)
- g_hash_table_unref (data->settings);
- if (data->source != NULL)
- g_free (data->source);
-
- g_slice_free (EmpathyImportAccountData, data);
-}
-
-gboolean
-empathy_import_accounts_to_import (void)
-{
- return empathy_import_pidgin_accounts_to_import ();
-}
-
-GList *
-empathy_import_accounts_load (EmpathyImportApplication id)
-{
- if (id == EMPATHY_IMPORT_APPLICATION_PIDGIN)
- return empathy_import_pidgin_load ();
-
- return empathy_import_pidgin_load ();
-}
-
-gboolean
-empathy_import_protocol_is_supported (const gchar *protocol,
- TpConnectionManager **cm)
-{
- TpawConnectionManagers *manager;
- GList *cms;
- GList *l;
- gboolean proto_is_supported = FALSE;
-
- manager = tpaw_connection_managers_dup_singleton ();
- cms = tpaw_connection_managers_get_cms (manager);
-
- for (l = cms; l; l = l->next)
- {
-
- TpConnectionManager *tp_cm = l->data;
- if (tp_connection_manager_has_protocol (tp_cm,
- (const gchar*) protocol))
- {
- if (!tp_strdiff (protocol, "irc")
- && !tp_strdiff (tp_connection_manager_get_name (tp_cm), "haze"))
- continue;
-
- if (!proto_is_supported)
- {
- *cm = tp_cm;
- proto_is_supported = TRUE;
-
- continue;
- }
-
- /* we have more than one CM for this protocol,
- * select the one which is not haze.
- */
- if (!tp_strdiff (tp_connection_manager_get_name ((*cm)), "haze"))
- {
- *cm = tp_cm;
- break;
- }
- }
- }
-
- g_object_unref (manager);
-
- return proto_is_supported;
-}
diff --git a/src/empathy-import-utils.h b/src/empathy-import-utils.h
deleted file mode 100644
index d860c4ee..00000000
--- a/src/empathy-import-utils.h
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * Copyright (C) 2009 Collabora Ltd.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- *
- * Authors: Jonny Lamb <jonny.lamb@collabora.co.uk>
- * Cosimo Cecchi <cosimo.cecchi@collabora.co.uk>
- */
-
-#ifndef __EMPATHY_IMPORT_UTILS_H__
-#define __EMPATHY_IMPORT_UTILS_H__
-
-#include <telepathy-glib/telepathy-glib.h>
-
-G_BEGIN_DECLS
-
-typedef struct
-{
- /* Table mapping CM param string to a GValue */
- GHashTable *settings;
- /* Protocol name */
- gchar *protocol;
- /* Connection manager name */
- gchar *connection_manager;
- /* The name of the account import source */
- gchar *source;
- /* Indicates whether the account is enabled by default */
- gboolean enabled;
-} EmpathyImportAccountData;
-
-typedef enum {
- EMPATHY_IMPORT_APPLICATION_ALL = 0,
- EMPATHY_IMPORT_APPLICATION_PIDGIN,
- EMPATHY_IMPORT_APPLICATION_INVALID
-} EmpathyImportApplication;
-
-EmpathyImportAccountData *empathy_import_account_data_new (
- const gchar *source);
-void empathy_import_account_data_free (EmpathyImportAccountData *data);
-
-gboolean empathy_import_accounts_to_import (void);
-GList *empathy_import_accounts_load (EmpathyImportApplication id);
-
-gboolean empathy_import_protocol_is_supported (const gchar *protocol,
- TpConnectionManager **cm);
-
-G_END_DECLS
-
-#endif /* __EMPATHY_IMPORT_UTILS_H__ */
diff --git a/src/empathy-import-widget.c b/src/empathy-import-widget.c
deleted file mode 100644
index 42ffdd30..00000000
--- a/src/empathy-import-widget.c
+++ /dev/null
@@ -1,515 +0,0 @@
-/*
- * Copyright (C) 2008-2009 Collabora Ltd.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301 USA
- *
- * Authors: Jonny Lamb <jonny.lamb@collabora.co.uk>
- * Cosimo Cecchi <cosimo.cecchi@collabora.co.uk>
- */
-
-/* empathy-import-widget.c */
-
-#include "config.h"
-#include "empathy-import-widget.h"
-
-#include <glib/gi18n-lib.h>
-#include <tp-account-widgets/tpaw-builder.h>
-#include <tp-account-widgets/tpaw-utils.h>
-
-#include "empathy-ui-utils.h"
-#include "empathy-utils.h"
-
-#define DEBUG_FLAG EMPATHY_DEBUG_OTHER
-#include "empathy-debug.h"
-
-G_DEFINE_TYPE (EmpathyImportWidget, empathy_import_widget, G_TYPE_OBJECT)
-
-#define GET_PRIV(obj) EMPATHY_GET_PRIV (obj, EmpathyImportWidget)
-
-enum
-{
- COL_IMPORT = 0,
- COL_PROTOCOL,
- COL_NAME,
- COL_SOURCE,
- COL_ACCOUNT_DATA,
- COL_COUNT
-};
-
-enum {
- PROP_APPLICATION_ID = 1,
- PROP_CMS
-};
-
-typedef struct {
- GtkWidget *vbox;
- GtkWidget *treeview;
- GtkWidget *scrolledwindow;
-
- GList *accounts;
- EmpathyImportApplication app_id;
-
- TpawConnectionManagers *cms;
-
- gboolean dispose_run;
-} EmpathyImportWidgetPriv;
-
-static gboolean
-import_widget_account_id_in_list (GList *accounts,
- const gchar *account_id)
-{
- GList *l;
-
- for (l = accounts; l; l = l->next)
- {
- TpAccount *account = l->data;
- const GHashTable *parameters;
-
- parameters = tp_account_get_parameters (account);
-
- if (!tp_strdiff (tp_asv_get_string (parameters, "account"), account_id))
- return TRUE;
- }
-
- return FALSE;
-}
-
-#define MAX_TREEVIEW_HEIGHT 300
-
-static void
-import_widget_add_accounts_to_model (EmpathyImportWidget *self)
-{
- TpAccountManager *manager;
- GtkTreeModel *model;
- GList *l;
- EmpathyImportWidgetPriv *priv = GET_PRIV (self);
- gint min, natural;
-
- manager = tp_account_manager_dup ();
-
- model = gtk_tree_view_get_model (GTK_TREE_VIEW (priv->treeview));
-
- for (l = priv->accounts; l; l = l->next)
- {
- GValue *value;
- EmpathyImportAccountData *data = l->data;
- gboolean import;
- GList *accounts;
- TpConnectionManager *cm = NULL;
-
- if (!empathy_import_protocol_is_supported (data->protocol, &cm))
- continue;
-
- data->connection_manager = g_strdup (
- tp_connection_manager_get_name (cm));
-
- value = g_hash_table_lookup (data->settings, "account");
-
- accounts = tp_account_manager_dup_valid_accounts (manager);
-
- /* Only set the "Import" cell to be active if there isn't already an
- * account set up with the same account id. */
- import = !import_widget_account_id_in_list (accounts,
- g_value_get_string (value));
-
- g_list_free_full (accounts, g_object_unref);
-
- gtk_list_store_insert_with_values (GTK_LIST_STORE (model), NULL, -1,
- COL_IMPORT, import,
- COL_PROTOCOL, data->protocol,
- COL_NAME, g_value_get_string (value),
- COL_SOURCE, data->source,
- COL_ACCOUNT_DATA, data,
- -1);
-
- }
-
- /* Display as much rows as possible */
- gtk_widget_get_preferred_height (priv->treeview, &min, &natural);
- gtk_widget_set_size_request (priv->scrolledwindow, -1,
- MIN (natural, MAX_TREEVIEW_HEIGHT));
-
- g_object_unref (manager);
-}
-
-static void
-import_widget_create_account_cb (GObject *source,
- GAsyncResult *result,
- gpointer user_data)
-{
- TpAccountManager *account_manager;
- TpAccount *account;
- GError *error = NULL;
- EmpathyImportWidget *self = user_data;
-
- account = tp_account_manager_create_account_finish (
- TP_ACCOUNT_MANAGER (source), result, &error);
-
- if (account == NULL)
- {
- DEBUG ("Failed to create account: %s",
- error ? error->message : "No error given");
- g_clear_error (&error);
- return;
- }
-
- DEBUG ("account created\n");
-
- if (tp_account_is_enabled (account))
- {
- account_manager = tp_account_manager_dup ();
- tpaw_connect_new_account (account, account_manager);
- g_object_unref (account_manager);
- }
-
- g_object_unref (self);
-}
-
-static void
-import_widget_add_account (EmpathyImportWidget *self,
- EmpathyImportAccountData *data)
-{
- TpAccountManager *account_manager;
- gchar *display_name = NULL;
- GHashTable *properties;
- GValue *username;
-
- account_manager = tp_account_manager_dup ();
-
- DEBUG ("connection_manager: %s\n", data->connection_manager);
-
- /* Set the display name of the account */
- username = g_hash_table_lookup (data->settings, "account");
-
- if (!tp_strdiff (data->protocol, "irc"))
- {
- const gchar *server;
-
- server = tp_asv_get_string (data->settings, "server");
-
- if (server != NULL)
- display_name = g_strdup_printf ("%s on %s",
- g_value_get_string (username), server);
- }
-
- if (display_name == NULL)
- {
- display_name = g_strdup_printf ("%s (%s)",
- data->protocol, g_value_get_string (username));
- }
-
- DEBUG ("display name: %s\n", display_name);
-
- properties = tp_asv_new (NULL, NULL);
- tp_asv_set_boolean (properties, TP_IFACE_ACCOUNT ".Enabled", data->enabled);
-
- tp_account_manager_create_account_async (account_manager,
- (const gchar*) data->connection_manager, data->protocol, display_name,
- data->settings, properties, import_widget_create_account_cb,
- g_object_ref (self));
-
- g_hash_table_unref (properties);
- g_free (display_name);
- g_object_unref (account_manager);
-}
-
-static gboolean
-import_widget_tree_model_foreach (GtkTreeModel *model,
- GtkTreePath *path,
- GtkTreeIter *iter,
- gpointer user_data)
-{
- gboolean to_import;
- EmpathyImportAccountData *data;
- EmpathyImportWidget *self = user_data;
-
- gtk_tree_model_get (model, iter,
- COL_IMPORT, &to_import,
- COL_ACCOUNT_DATA, &data,
- -1);
-
- if (to_import)
- import_widget_add_account (self, data);
-
- return FALSE;
-}
-
-static void
-import_widget_cell_toggled_cb (GtkCellRendererToggle *cell_renderer,
- const gchar *path_str,
- EmpathyImportWidget *self)
-{
- GtkTreeModel *model;
- GtkTreeIter iter;
- GtkTreePath *path;
- EmpathyImportWidgetPriv *priv = GET_PRIV (self);
-
- path = gtk_tree_path_new_from_string (path_str);
- model = gtk_tree_view_get_model (GTK_TREE_VIEW (priv->treeview));
-
- gtk_tree_model_get_iter (model, &iter, path);
-
- gtk_list_store_set (GTK_LIST_STORE (model), &iter,
- COL_IMPORT, !gtk_cell_renderer_toggle_get_active (cell_renderer),
- -1);
-
- gtk_tree_path_free (path);
-}
-
-static void
-import_widget_set_up_account_list (EmpathyImportWidget *self)
-{
- EmpathyImportWidgetPriv *priv = GET_PRIV (self);
- GtkListStore *store;
- GtkTreeView *view;
- GtkTreeViewColumn *column;
- GtkCellRenderer *cell;
-
- priv->accounts = empathy_import_accounts_load (priv->app_id);
-
- store = gtk_list_store_new (COL_COUNT, G_TYPE_BOOLEAN, G_TYPE_STRING,
- G_TYPE_STRING, G_TYPE_STRING, G_TYPE_POINTER);
-
- gtk_tree_view_set_model (GTK_TREE_VIEW (priv->treeview),
- GTK_TREE_MODEL (store));
-
- g_object_unref (store);
-
- view = GTK_TREE_VIEW (priv->treeview);
- gtk_tree_view_set_headers_visible (view, TRUE);
-
- /* Import column */
- cell = gtk_cell_renderer_toggle_new ();
- gtk_tree_view_insert_column_with_attributes (view, -1,
- /* Translators: this is the header of a treeview column */
- _("Import"), cell,
- "active", COL_IMPORT,
- NULL);
-
- g_signal_connect (cell, "toggled",
- G_CALLBACK (import_widget_cell_toggled_cb), self);
-
- /* Protocol column */
- column = gtk_tree_view_column_new ();
- gtk_tree_view_column_set_title (column, _("Protocol"));
- gtk_tree_view_column_set_expand (column, TRUE);
- gtk_tree_view_append_column (view, column);
-
- cell = gtk_cell_renderer_text_new ();
- g_object_set (cell, "editable", FALSE, NULL);
- gtk_tree_view_column_pack_start (column, cell, TRUE);
- gtk_tree_view_column_add_attribute (column, cell, "text", COL_PROTOCOL);
-
- /* Account column */
- column = gtk_tree_view_column_new ();
- gtk_tree_view_column_set_title (column, _("Account"));
- gtk_tree_view_column_set_expand (column, TRUE);
- gtk_tree_view_append_column (view, column);
-
- cell = gtk_cell_renderer_text_new ();
- g_object_set (cell, "editable", FALSE, NULL);
- gtk_tree_view_column_pack_start (column, cell, TRUE);
- gtk_tree_view_column_add_attribute (column, cell, "text", COL_NAME);
-
- if (priv->app_id == EMPATHY_IMPORT_APPLICATION_ALL)
- {
- /* Source column */
- column = gtk_tree_view_column_new ();
- gtk_tree_view_column_set_title (column, _("Source"));
- gtk_tree_view_column_set_expand (column, TRUE);
- gtk_tree_view_append_column (view, column);
-
- cell = gtk_cell_renderer_text_new ();
- g_object_set (cell, "editable", FALSE, NULL);
- gtk_tree_view_column_pack_start (column, cell, TRUE);
- gtk_tree_view_column_add_attribute (column, cell, "text", COL_SOURCE);
- }
-
- import_widget_add_accounts_to_model (self);
-}
-
-static void
-import_widget_destroy_cb (GtkWidget *w,
- EmpathyImportWidget *self)
-{
- g_object_unref (self);
-}
-
-static void
-do_get_property (GObject *object,
- guint property_id,
- GValue *value,
- GParamSpec *pspec)
-{
- EmpathyImportWidgetPriv *priv = GET_PRIV (object);
-
- switch (property_id)
- {
- case PROP_APPLICATION_ID:
- g_value_set_int (value, priv->app_id);
- break;
- case PROP_CMS:
- g_value_set_object (value, priv->cms);
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
- }
-}
-
-static void
-do_set_property (GObject *object,
- guint property_id,
- const GValue *value,
- GParamSpec *pspec)
-{
- EmpathyImportWidgetPriv *priv = GET_PRIV (object);
-
- switch (property_id)
- {
- case PROP_APPLICATION_ID:
- priv->app_id = g_value_get_int (value);
- break;
- case PROP_CMS:
- priv->cms = g_value_dup_object (value);
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
- }
-}
-
-static void
-do_finalize (GObject *obj)
-{
- EmpathyImportWidgetPriv *priv = GET_PRIV (obj);
-
- g_list_foreach (priv->accounts, (GFunc) empathy_import_account_data_free,
- NULL);
- g_list_free (priv->accounts);
-
- if (G_OBJECT_CLASS (empathy_import_widget_parent_class)->finalize != NULL)
- G_OBJECT_CLASS (empathy_import_widget_parent_class)->finalize (obj);
-}
-
-static void
-do_dispose (GObject *obj)
-{
- EmpathyImportWidgetPriv *priv = GET_PRIV (obj);
-
- if (priv->dispose_run)
- return;
-
- priv->dispose_run = TRUE;
-
- if (priv->cms != NULL)
- {
- g_object_unref (priv->cms);
- priv->cms = NULL;
- }
-
- if (G_OBJECT_CLASS (empathy_import_widget_parent_class)->dispose != NULL)
- G_OBJECT_CLASS (empathy_import_widget_parent_class)->dispose (obj);
-}
-
-static void
-do_constructed (GObject *obj)
-{
- EmpathyImportWidget *self = EMPATHY_IMPORT_WIDGET (obj);
- EmpathyImportWidgetPriv *priv = GET_PRIV (self);
- GtkBuilder *gui;
- gchar *filename;
-
- filename = empathy_file_lookup ("empathy-import-dialog.ui", "src");
- gui = tpaw_builder_get_file (filename,
- "widget_vbox", &priv->vbox,
- "treeview", &priv->treeview,
- "scrolledwindow", &priv->scrolledwindow,
- NULL);
-
- g_free (filename);
- tpaw_builder_unref_and_keep_widget (gui, priv->vbox);
-
- g_signal_connect (priv->vbox, "destroy",
- G_CALLBACK (import_widget_destroy_cb), self);
-
- import_widget_set_up_account_list (self);
-}
-
-static void
-empathy_import_widget_class_init (EmpathyImportWidgetClass *klass)
-{
- GObjectClass *oclass = G_OBJECT_CLASS (klass);
- GParamSpec *param_spec;
-
- oclass->constructed = do_constructed;
- oclass->finalize = do_finalize;
- oclass->dispose = do_dispose;
- oclass->set_property = do_set_property;
- oclass->get_property = do_get_property;
-
- param_spec = g_param_spec_int ("application-id",
- "application-id", "The application id to import from",
- 0, EMPATHY_IMPORT_APPLICATION_INVALID, EMPATHY_IMPORT_APPLICATION_ALL,
- G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | G_PARAM_CONSTRUCT_ONLY);
- g_object_class_install_property (oclass, PROP_APPLICATION_ID, param_spec);
-
- param_spec = g_param_spec_object ("cms",
- "TpawConnectionManagers", "TpawConnectionManagers",
- TPAW_TYPE_CONNECTION_MANAGERS,
- G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | G_PARAM_CONSTRUCT_ONLY);
- g_object_class_install_property (oclass, PROP_CMS, param_spec);
-
- g_type_class_add_private (klass, sizeof (EmpathyImportWidgetPriv));
-}
-
-static void
-empathy_import_widget_init (EmpathyImportWidget *self)
-{
- EmpathyImportWidgetPriv *priv =
- G_TYPE_INSTANCE_GET_PRIVATE (self, EMPATHY_TYPE_IMPORT_WIDGET,
- EmpathyImportWidgetPriv);
-
- self->priv = priv;
-}
-
-EmpathyImportWidget *
-empathy_import_widget_new (EmpathyImportApplication id,
- TpawConnectionManagers *cms)
-{
- g_return_val_if_fail (TPAW_IS_CONNECTION_MANAGERS (cms), NULL);
-
- return g_object_new (EMPATHY_TYPE_IMPORT_WIDGET,
- "application-id", id,
- "cms", cms,
- NULL);
-}
-
-GtkWidget *
-empathy_import_widget_get_widget (EmpathyImportWidget *self)
-{
- EmpathyImportWidgetPriv *priv = GET_PRIV (self);
-
- return priv->vbox;
-}
-
-void
-empathy_import_widget_add_selected_accounts (EmpathyImportWidget *self)
-{
- GtkTreeModel *model;
- EmpathyImportWidgetPriv *priv = GET_PRIV (self);
-
- model = gtk_tree_view_get_model (GTK_TREE_VIEW (priv->treeview));
- gtk_tree_model_foreach (model, import_widget_tree_model_foreach, self);
-}
diff --git a/src/empathy-import-widget.h b/src/empathy-import-widget.h
deleted file mode 100644
index 221fa143..00000000
--- a/src/empathy-import-widget.h
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
- * Copyright (C) 2008-2009 Collabora Ltd.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301 USA
- *
- * Authors: Jonny Lamb <jonny.lamb@collabora.co.uk>
- * Cosimo Cecchi <cosimo.cecchi@collabora.co.uk>
- */
-
-/* empathy-import-widget.h */
-
-#ifndef __EMPATHY_IMPORT_WIDGET_H__
-#define __EMPATHY_IMPORT_WIDGET_H__
-
-#include <gtk/gtk.h>
-#include <tp-account-widgets/tpaw-connection-managers.h>
-
-#include "empathy-import-utils.h"
-
-G_BEGIN_DECLS
-
-#define EMPATHY_TYPE_IMPORT_WIDGET empathy_import_widget_get_type()
-#define EMPATHY_IMPORT_WIDGET(obj) \
- (G_TYPE_CHECK_INSTANCE_CAST ((obj), EMPATHY_TYPE_IMPORT_WIDGET,\
- EmpathyImportWidget))
-#define EMPATHY_IMPORT_WIDGET_CLASS(klass) \
- (G_TYPE_CHECK_CLASS_CAST ((klass), EMPATHY_TYPE_IMPORT_WIDGET,\
- EmpathyImportWidgetClass))
-#define EMPATHY_IS_IMPORT_WIDGET(obj) \
- (G_TYPE_CHECK_INSTANCE_TYPE ((obj), EMPATHY_TYPE_IMPORT_WIDGET))
-#define EMPATHY_IS_IMPORT_WIDGET_CLASS(klass) \
- (G_TYPE_CHECK_CLASS_TYPE ((klass), EMPATHY_TYPE_IMPORT_WIDGET))
-#define EMPATHY_IMPORT_WIDGET_GET_CLASS(obj) \
- (G_TYPE_INSTANCE_GET_CLASS ((obj), EMPATHY_TYPE_IMPORT_WIDGET,\
- EmpathyImportWidgetClass))
-
-typedef struct {
- GObject parent;
-
- /* private */
- gpointer priv;
-} EmpathyImportWidget;
-
-typedef struct {
- GObjectClass parent_class;
-} EmpathyImportWidgetClass;
-
-GType empathy_import_widget_get_type (void);
-
-EmpathyImportWidget* empathy_import_widget_new (EmpathyImportApplication id,
- TpawConnectionManagers *cms);
-
-GtkWidget * empathy_import_widget_get_widget (EmpathyImportWidget *self);
-
-void empathy_import_widget_add_selected_accounts (EmpathyImportWidget *self);
-
-G_END_DECLS
-
-#endif /* __EMPATHY_IMPORT_WIDGET_H__ */
diff --git a/src/empathy-invite-participant-dialog.c b/src/empathy-invite-participant-dialog.c
deleted file mode 100644
index e562dc56..00000000
--- a/src/empathy-invite-participant-dialog.c
+++ /dev/null
@@ -1,301 +0,0 @@
-/*
- * empathy-invite-participant-dialog.c
- *
- * EmpathyInviteParticipantDialog
- *
- * (c) 2009, Collabora Ltd.
- *
- * Authors:
- * Danielle Madeley <danielle.madeley@collabora.co.uk>
- */
-
-#include "config.h"
-#include "empathy-invite-participant-dialog.h"
-
-#include <glib/gi18n.h>
-
-#include "empathy-contact-chooser.h"
-#include "empathy-utils.h"
-
-G_DEFINE_TYPE (EmpathyInviteParticipantDialog,
- empathy_invite_participant_dialog, GTK_TYPE_DIALOG);
-
-enum
-{
- PROP_TP_CHAT = 1
-};
-
-struct _EmpathyInviteParticipantDialogPrivate
-{
- EmpathyTpChat *tp_chat;
-
- GtkWidget *chooser;
- GtkWidget *invite_button;
-};
-
-static void
-invite_participant_dialog_get_property (GObject *object,
- guint param_id,
- GValue *value,
- GParamSpec *pspec)
-{
- EmpathyInviteParticipantDialog *self = (EmpathyInviteParticipantDialog *)
- object;
-
- switch (param_id)
- {
- case PROP_TP_CHAT:
- g_value_set_object (value, self->priv->tp_chat);
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, pspec);
- break;
- };
-}
-
-static void
-invite_participant_dialog_set_property (GObject *object,
- guint param_id,
- const GValue *value,
- GParamSpec *pspec)
-{
- EmpathyInviteParticipantDialog *self = (EmpathyInviteParticipantDialog *)
- object;
-
- switch (param_id)
- {
- case PROP_TP_CHAT:
- g_assert (self->priv->tp_chat == NULL); /* construct-only */
- self->priv->tp_chat = g_value_dup_object (value);
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, pspec);
- break;
- };
-}
-
-static void
-invite_participant_dialog_dispose (GObject *object)
-{
- EmpathyInviteParticipantDialog *self = (EmpathyInviteParticipantDialog *)
- object;
-
- tp_clear_object (&self->priv->tp_chat);
-
- G_OBJECT_CLASS (empathy_invite_participant_dialog_parent_class)->dispose (
- object);
-}
-
-static void
-selection_changed_cb (GtkWidget *treeview,
- FolksIndividual *selected,
- EmpathyInviteParticipantDialog *self)
-{
- gtk_widget_set_sensitive (self->priv->invite_button, selected != NULL);
-}
-
-static void
-activate_cb (GtkWidget *chooser,
- EmpathyInviteParticipantDialog *self)
-{
- gtk_dialog_response (GTK_DIALOG (self), GTK_RESPONSE_ACCEPT);
-}
-
-/* Return the TpContact of @individual which is on the same connection as the
- * EmpathyTpChat */
-static TpContact *
-get_tp_contact_for_chat (EmpathyInviteParticipantDialog *self,
- FolksIndividual *individual)
-{
- TpConnection *chat_conn;
-
- chat_conn = tp_channel_get_connection (TP_CHANNEL (self->priv->tp_chat));
- if (chat_conn == NULL)
- return NULL;
-
- return empathy_get_tp_contact_for_individual (individual, chat_conn);
-}
-
-static gboolean
-filter_individual (EmpathyContactChooser *chooser,
- FolksIndividual *individual,
- gboolean is_online,
- gboolean searching,
- gpointer user_data)
-{
- EmpathyInviteParticipantDialog *self = user_data;
- GList *members, *l;
- TpContact *contact;
- gboolean display = TRUE;
-
- /* Filter out offline contacts if we are not searching */
- if (!searching && !is_online)
- return FALSE;
-
- /* Filter out individuals not having a persona on the same connection as the
- * EmpathyTpChat. */
- contact = get_tp_contact_for_chat (self, individual);
-
- if (contact == NULL)
- return FALSE;
-
- /* Filter out contacts which are already in the chat */
- members = empathy_tp_chat_get_members (self->priv->tp_chat);
-
- for (l = members; l != NULL; l = g_list_next (l))
- {
- EmpathyContact *member = l->data;
- TpContact *owner;
-
- /* Try to get the non-channel specific contact. */
- owner = tp_channel_group_get_contact_owner (
- TP_CHANNEL (self->priv->tp_chat),
- empathy_contact_get_tp_contact (member));
-
- if (owner == NULL)
- owner = empathy_contact_get_tp_contact (member);
-
- if (owner == contact)
- {
- display = FALSE;
- break;
- }
- }
-
- g_list_free_full (members, g_object_unref);
-
- return display;
-}
-
-static gboolean
-has_contact_list (EmpathyInviteParticipantDialog *self)
-{
- TpConnection *conn;
-
- conn = tp_channel_get_connection (TP_CHANNEL (self->priv->tp_chat));
-
- return tp_proxy_has_interface_by_id (conn,
- TP_IFACE_QUARK_CONNECTION_INTERFACE_CONTACT_LIST);
-}
-
-static void
-invite_participant_dialog_constructed (GObject *object)
-{
- EmpathyInviteParticipantDialog *self =
- (EmpathyInviteParticipantDialog *) object;
- GtkDialog *dialog = GTK_DIALOG (self);
- GtkWidget *label;
- char *str;
- GtkWidget *content;
-
- content = gtk_dialog_get_content_area (dialog);
-
- label = gtk_label_new (NULL);
- str = g_strdup_printf (
- "<span size=\"x-large\" weight=\"bold\">%s</span>\n\n%s",
- _("Invite Participant"),
- _("Choose a contact to invite into the conversation:"));
- gtk_label_set_markup (GTK_LABEL (label), str);
- g_free (str);
-
- gtk_box_pack_start (GTK_BOX (content), label, FALSE, TRUE, 6);
- gtk_widget_show (label);
-
- gtk_dialog_add_button (dialog, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL);
-
- /* contact chooser */
- self->priv->chooser = empathy_contact_chooser_new ();
-
- empathy_contact_chooser_set_filter_func (
- EMPATHY_CONTACT_CHOOSER (self->priv->chooser), filter_individual, self);
-
- gtk_box_pack_start (GTK_BOX (content), self->priv->chooser, TRUE, TRUE, 6);
- gtk_widget_show (self->priv->chooser);
-
- g_signal_connect (self->priv->chooser, "selection-changed",
- G_CALLBACK (selection_changed_cb), self);
- g_signal_connect (self->priv->chooser, "activate",
- G_CALLBACK (activate_cb), self);
-
- self->priv->invite_button = gtk_dialog_add_button (dialog, _("Invite"),
- GTK_RESPONSE_ACCEPT);
- gtk_widget_set_sensitive (self->priv->invite_button, FALSE);
-
- gtk_window_set_title (GTK_WINDOW (self), _("Invite Participant"));
- gtk_window_set_role (GTK_WINDOW (self), "invite_participant");
-
- if (has_contact_list (self))
- {
- /* Set a default height so a few contacts are displayed */
- gtk_window_set_default_size (GTK_WINDOW (self), -1, 400);
- }
- else
- {
- /* No need to display an empty treeview (ie IRC) */
- empathy_contact_chooser_show_tree_view (
- EMPATHY_CONTACT_CHOOSER (self->priv->chooser), FALSE);
- }
-}
-
-static void
-empathy_invite_participant_dialog_class_init (
- EmpathyInviteParticipantDialogClass *klass)
-{
- GObjectClass *object_class = G_OBJECT_CLASS (klass);
-
- object_class->get_property = invite_participant_dialog_get_property;
- object_class->set_property = invite_participant_dialog_set_property;
- object_class->constructed = invite_participant_dialog_constructed;
- object_class->dispose = invite_participant_dialog_dispose;
-
- g_type_class_add_private (object_class,
- sizeof (EmpathyInviteParticipantDialogPrivate));
-
- g_object_class_install_property (object_class,
- PROP_TP_CHAT,
- g_param_spec_object ("tp-chat", "EmpathyTpChat", "EmpathyTpChat",
- EMPATHY_TYPE_TP_CHAT,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS));
-}
-
-static void
-empathy_invite_participant_dialog_init (EmpathyInviteParticipantDialog *self)
-{
- self->priv = G_TYPE_INSTANCE_GET_PRIVATE (
- self, EMPATHY_TYPE_INVITE_PARTICIPANT_DIALOG,
- EmpathyInviteParticipantDialogPrivate);
-}
-
-GtkWidget *
-empathy_invite_participant_dialog_new (GtkWindow *parent,
- EmpathyTpChat *tp_chat)
-{
- GtkWidget *self = g_object_new (EMPATHY_TYPE_INVITE_PARTICIPANT_DIALOG,
- "tp-chat", tp_chat,
- NULL);
-
- if (parent != NULL)
- {
- gtk_window_set_transient_for (GTK_WINDOW (self), parent);
- }
-
- return self;
-}
-
-TpContact *
-empathy_invite_participant_dialog_get_selected (
- EmpathyInviteParticipantDialog *self)
-{
- FolksIndividual *individual;
- TpContact *contact;
-
- individual = empathy_contact_chooser_dup_selected (
- EMPATHY_CONTACT_CHOOSER (self->priv->chooser));
- if (individual == NULL)
- return NULL;
-
- contact = get_tp_contact_for_chat (self, individual);
-
- g_object_unref (individual);
- return contact;
-}
diff --git a/src/empathy-invite-participant-dialog.h b/src/empathy-invite-participant-dialog.h
deleted file mode 100644
index daa3448d..00000000
--- a/src/empathy-invite-participant-dialog.h
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * empathy-invite-participant-dialog.h
- *
- * EmpathyInviteParticipantDialog
- *
- * (c) 2009, Collabora Ltd.
- *
- * Authors:
- * Danielle Madeley <danielle.madeley@collabora.co.uk>
- */
-
-#ifndef __EMPATHY_INVITE_PARTICIPANT_DIALOG_H__
-#define __EMPATHY_INVITE_PARTICIPANT_DIALOG_H__
-
-#include <gtk/gtk.h>
-#include <telepathy-glib/telepathy-glib.h>
-
-#include "empathy-tp-chat.h"
-
-G_BEGIN_DECLS
-
-#define EMPATHY_TYPE_INVITE_PARTICIPANT_DIALOG (empathy_invite_participant_dialog_get_type ())
-#define EMPATHY_INVITE_PARTICIPANT_DIALOG(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), EMPATHY_TYPE_INVITE_PARTICIPANT_DIALOG, EmpathyInviteParticipantDialog))
-#define EMPATHY_INVITE_PARTICIPANT_DIALOG_CLASS(obj) (G_TYPE_CHECK_CLASS_CAST ((obj), EMPATHY_TYPE_INVITE_PARTICIPANT_DIALOG, EmpathyInviteParticipantDialogClass))
-#define EMPATHY_IS_INVITE_PARTICIPANT_DIALOG(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), EMPATHY_TYPE_INVITE_PARTICIPANT_DIALOG))
-#define EMPATHY_IS_INVITE_PARTICIPANT_DIALOG_CLASS(obj) (G_TYPE_CHECK_CLASS_TYPE ((obj), EMPATHY_TYPE_INVITE_PARTICIPANT_DIALOG))
-#define EMPATHY_INVITE_PARTICIPANT_DIALOG_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), EMPATHY_TYPE_INVITE_PARTICIPANT_DIALOG, EmpathyInviteParticipantDialogClass))
-
-typedef struct _EmpathyInviteParticipantDialog EmpathyInviteParticipantDialog;
-typedef struct _EmpathyInviteParticipantDialogClass EmpathyInviteParticipantDialogClass;
-typedef struct _EmpathyInviteParticipantDialogPrivate EmpathyInviteParticipantDialogPrivate;
-
-struct _EmpathyInviteParticipantDialog
-{
- GtkDialog parent;
-
- EmpathyInviteParticipantDialogPrivate *priv;
-};
-
-struct _EmpathyInviteParticipantDialogClass
-{
- GtkDialogClass parent_class;
-};
-
-GType empathy_invite_participant_dialog_get_type (void);
-
-GtkWidget * empathy_invite_participant_dialog_new (GtkWindow *parent,
- EmpathyTpChat *tp_chat);
-
-TpContact * empathy_invite_participant_dialog_get_selected (
- EmpathyInviteParticipantDialog *self);
-
-G_END_DECLS
-
-#endif
diff --git a/src/empathy-mic-menu.c b/src/empathy-mic-menu.c
deleted file mode 100644
index 612ff34b..00000000
--- a/src/empathy-mic-menu.c
+++ /dev/null
@@ -1,431 +0,0 @@
-/*
- * Copyright (C) 2011 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
- *
- * GtkAction code based on gnome-terminal's TerminalTabsMenu object.
- * Thanks guys!
- */
-
-#include "config.h"
-#include "empathy-mic-menu.h"
-
-#include "empathy-mic-monitor.h"
-
-#define DEBUG_FLAG EMPATHY_DEBUG_VOIP
-#include "empathy-debug.h"
-
-struct _EmpathyMicMenuPrivate
-{
- /* Borrowed ref; the call window actually owns us. */
- EmpathyCallWindow *window;
-
- /* Given away ref; the call window's UI manager now owns this. */
- GtkActionGroup *action_group;
-
- /* An invisible radio action so new microphones are always in the
- * same radio group. */
- GtkAction *anchor_action;
-
- /* The merge ID used with the UI manager. We need to keep this
- * around so in _clean we can remove all the items we've added
- * before and start again. */
- guint ui_id;
-
- /* TRUE if we're in _update and so calling _set_active. */
- gboolean in_update;
-
- /* Queue of GtkRadioActions. */
- GQueue *microphones;
-
- EmpathyMicMonitor *mic_monitor;
-};
-
-G_DEFINE_TYPE (EmpathyMicMenu, empathy_mic_menu, G_TYPE_OBJECT);
-
-#define MONITOR_KEY "empathy-mic-menu-is-monitor"
-
-enum
-{
- PROP_WINDOW = 1,
-};
-
-static void empathy_mic_menu_update (EmpathyMicMenu *self);
-
-static void
-empathy_mic_menu_init (EmpathyMicMenu *self)
-{
- EmpathyMicMenuPrivate *priv = G_TYPE_INSTANCE_GET_PRIVATE (self,
- EMPATHY_TYPE_MIC_MENU, EmpathyMicMenuPrivate);
-
- self->priv = priv;
-}
-
-static void
-empathy_mic_menu_set_property (GObject *object,
- guint property_id,
- const GValue *value,
- GParamSpec *pspec)
-{
- EmpathyMicMenu *self = EMPATHY_MIC_MENU (object);
- EmpathyMicMenuPrivate *priv = self->priv;
-
- switch (property_id)
- {
- case PROP_WINDOW:
- priv->window = g_value_get_object (value);
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
- }
-}
-
-static void
-empathy_mic_menu_get_property (GObject *object,
- guint property_id,
- GValue *value,
- GParamSpec *pspec)
-{
- EmpathyMicMenu *self = EMPATHY_MIC_MENU (object);
- EmpathyMicMenuPrivate *priv = self->priv;
-
- switch (property_id)
- {
- case PROP_WINDOW:
- g_value_set_object (value, priv->window);
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
- }
-}
-
-static void
-empathy_mic_menu_clean (EmpathyMicMenu *self)
-{
- EmpathyMicMenuPrivate *priv = self->priv;
- GtkUIManager *ui_manager;
-
- if (priv->ui_id == 0)
- return;
-
- ui_manager = empathy_call_window_get_ui_manager (priv->window);
-
- gtk_ui_manager_remove_ui (ui_manager, priv->ui_id);
- gtk_ui_manager_ensure_update (ui_manager);
- priv->ui_id = 0;
-}
-
-static void
-empathy_mic_menu_change_mic_cb (GObject *source_object,
- GAsyncResult *result,
- gpointer user_data)
-{
- EmpathyGstAudioSrc *audio = EMPATHY_GST_AUDIO_SRC (source_object);
- EmpathyMicMenu *self = user_data;
- GError *error = NULL;
-
- if (!empathy_audio_src_change_microphone_finish (audio, result, &error))
- {
- DEBUG ("Failed to change microphone: %s", error->message);
- g_clear_error (&error);
-
- /* We call update here because if this change operation failed
- * and we don't update the menu items, it'll point to the wrong
- * device. We don't want to call it if the change was successful
- * because we'll get the notify::microphone signal fired in a
- * bit and the current value hasn't changed so it'd keep jumping
- * between these values like there's no tomorrow, etc. */
- empathy_mic_menu_update (self);
- }
-}
-
-static void
-empathy_mic_menu_activate_cb (GtkToggleAction *action,
- EmpathyMicMenu *self)
-{
- EmpathyMicMenuPrivate *priv = self->priv;
- EmpathyGstAudioSrc *audio;
- gint value;
-
- if (priv->in_update)
- return;
-
- audio = empathy_call_window_get_audio_src (priv->window);
-
- g_object_get (action, "value", &value, NULL);
-
- empathy_audio_src_change_microphone_async (audio, value,
- empathy_mic_menu_change_mic_cb, self);
-}
-
-static void
-empathy_mic_menu_update (EmpathyMicMenu *self)
-{
- EmpathyMicMenuPrivate *priv = self->priv;
- GList *l;
- GtkUIManager *ui_manager;
- EmpathyGstAudioSrc *audio;
- guint current_mic;
-
- ui_manager = empathy_call_window_get_ui_manager (priv->window);
-
- audio = empathy_call_window_get_audio_src (priv->window);
- current_mic = empathy_audio_src_get_microphone (audio);
-
- empathy_mic_menu_clean (self);
- priv->ui_id = gtk_ui_manager_new_merge_id (ui_manager);
-
- for (l = priv->microphones->head; l != NULL; l = l->next)
- {
- GtkRadioAction *action = l->data;
- const gchar *name = gtk_action_get_name (GTK_ACTION (action));
- gint value;
- gboolean active;
-
- g_object_get (action, "value", &value, NULL);
-
- active = (value == (gint) current_mic);
-
- if (active)
- {
- priv->in_update = TRUE;
- gtk_toggle_action_set_active (GTK_TOGGLE_ACTION (action), TRUE);
- priv->in_update = FALSE;
- }
-
- /* If action is a monitor then don't show it in the UI, BUT do
- * display it regardless if it is the current device. This is so
- * we don't have a rubbish UI by showing monitor devices in
- * Empathy, but still show the correct device when someone plays
- * with pavucontrol. */
- if (g_object_get_data (G_OBJECT (action), MONITOR_KEY) != NULL
- && !active)
- continue;
-
- gtk_ui_manager_add_ui (ui_manager, priv->ui_id,
- /* TODO: this should probably be passed from the call
- * window, seeing that it's a reference to
- * empathy-call-window.ui. */
- "/menubar1/edit/menumicrophone",
- name, name, GTK_UI_MANAGER_MENUITEM, FALSE);
- }
-}
-
-static void
-empathy_mic_menu_add_microphone (EmpathyMicMenu *self,
- const gchar *name,
- const gchar *description,
- guint source_idx,
- gboolean is_monitor)
-{
- EmpathyMicMenuPrivate *priv = self->priv;
- GtkRadioAction *action;
- GSList *group;
-
- action = gtk_radio_action_new (name, description, NULL, NULL, source_idx);
- gtk_action_group_add_action_with_accel (priv->action_group,
- GTK_ACTION (action), NULL);
-
- /* Set MONITOR_KEY on the action to non-NULL if it's a monitor
- * because we don't want to show monitors if we can help it. */
- if (is_monitor)
- {
- g_object_set_data (G_OBJECT (action), MONITOR_KEY,
- GUINT_TO_POINTER (TRUE));
- }
-
- group = gtk_radio_action_get_group (GTK_RADIO_ACTION (priv->anchor_action));
- gtk_radio_action_set_group (GTK_RADIO_ACTION (action), group);
-
- g_queue_push_tail (priv->microphones, action);
-
- g_signal_connect (action, "activate",
- G_CALLBACK (empathy_mic_menu_activate_cb), self);
-}
-
-static void
-empathy_mic_menu_notify_microphone_cb (EmpathyGstAudioSrc *audio,
- GParamSpec *pspec,
- EmpathyMicMenu *self)
-{
- empathy_mic_menu_update (self);
-}
-
-static void
-empathy_mic_menu_microphone_added_cb (EmpathyMicMonitor *monitor,
- guint source_idx,
- const gchar *name,
- const gchar *description,
- gboolean is_monitor,
- EmpathyMicMenu *self)
-{
- empathy_mic_menu_add_microphone (self, name, description,
- source_idx, is_monitor);
-
- empathy_mic_menu_update (self);
-}
-
-static void
-empathy_mic_menu_microphone_removed_cb (EmpathyMicMonitor *monitor,
- guint source_idx,
- EmpathyMicMenu *self)
-{
- EmpathyMicMenuPrivate *priv = self->priv;
- GList *l;
-
- for (l = priv->microphones->head; l != NULL; l = l->next)
- {
- GtkRadioAction *action = l->data;
- gint value;
-
- g_object_get (action, "value", &value, NULL);
-
- if (value != (gint) source_idx)
- {
- action = NULL;
- continue;
- }
-
- g_signal_handlers_disconnect_by_func (action,
- G_CALLBACK (empathy_mic_menu_activate_cb), self);
-
- gtk_action_group_remove_action (priv->action_group, GTK_ACTION (action));
- g_queue_remove (priv->microphones, action);
- break;
- }
-
- empathy_mic_menu_update (self);
-}
-
-static void
-empathy_mic_menu_list_microphones_cb (GObject *source_object,
- GAsyncResult *result,
- gpointer user_data)
-{
- EmpathyMicMonitor *monitor = EMPATHY_MIC_MONITOR (source_object);
- EmpathyMicMenu *self = user_data;
- GError *error = NULL;
- const GList *mics = NULL;
-
- mics = empathy_mic_monitor_list_microphones_finish (monitor, result, &error);
-
- if (error != NULL)
- {
- DEBUG ("Failed to get microphone list: %s", error->message);
- g_clear_error (&error);
- return;
- }
-
- for (; mics != NULL; mics = mics->next)
- {
- EmpathyMicrophone *mic = mics->data;
-
- empathy_mic_menu_add_microphone (self, mic->name,
- mic->description, mic->index, mic->is_monitor);
- }
-
- empathy_mic_menu_update (self);
-}
-
-static void
-empathy_mic_menu_constructed (GObject *obj)
-{
- EmpathyMicMenu *self = EMPATHY_MIC_MENU (obj);
- EmpathyMicMenuPrivate *priv = self->priv;
- GtkUIManager *ui_manager;
- EmpathyGstAudioSrc *audio;
-
- g_assert (EMPATHY_IS_CALL_WINDOW (priv->window));
-
- ui_manager = empathy_call_window_get_ui_manager (priv->window);
- audio = empathy_call_window_get_audio_src (priv->window);
-
- g_assert (GTK_IS_UI_MANAGER (ui_manager));
- g_assert (EMPATHY_IS_GST_AUDIO_SRC (audio));
-
- /* Okay let's go go go. */
-
- priv->mic_monitor = empathy_mic_monitor_new ();
-
- priv->action_group = gtk_action_group_new ("EmpathyMicMenu");
- gtk_ui_manager_insert_action_group (ui_manager, priv->action_group, -1);
- /* the UI manager now owns this */
- g_object_unref (priv->action_group);
-
- priv->anchor_action = g_object_new (GTK_TYPE_RADIO_ACTION,
- "name", "EmpathyMicMenuAnchorAction",
- NULL);
- gtk_action_group_add_action (priv->action_group, priv->anchor_action);
- g_object_unref (priv->anchor_action);
-
- priv->microphones = g_queue_new ();
-
- /* Don't bother with any of this if we don't support changing
- * microphone, so don't listen for microphone changes or enumerate
- * the available microphones. */
- if (!empathy_audio_src_supports_changing_mic (audio))
- return;
-
- tp_g_signal_connect_object (audio, "notify::microphone",
- G_CALLBACK (empathy_mic_menu_notify_microphone_cb), self, 0);
- tp_g_signal_connect_object (priv->mic_monitor, "microphone-added",
- G_CALLBACK (empathy_mic_menu_microphone_added_cb), self, 0);
- tp_g_signal_connect_object (priv->mic_monitor, "microphone-removed",
- G_CALLBACK (empathy_mic_menu_microphone_removed_cb), self, 0);
-
- empathy_mic_monitor_list_microphones_async (priv->mic_monitor,
- empathy_mic_menu_list_microphones_cb, self);
-}
-
-static void
-empathy_mic_menu_dispose (GObject *obj)
-{
- EmpathyMicMenu *self = EMPATHY_MIC_MENU (obj);
- EmpathyMicMenuPrivate *priv = self->priv;
-
- if (priv->microphones != NULL)
- g_queue_free (priv->microphones);
- priv->microphones = NULL;
-
- tp_clear_object (&priv->mic_monitor);
-
- G_OBJECT_CLASS (empathy_mic_menu_parent_class)->dispose (obj);
-}
-
-static void
-empathy_mic_menu_class_init (EmpathyMicMenuClass *klass)
-{
- GObjectClass *object_class = G_OBJECT_CLASS (klass);
-
- object_class->set_property = empathy_mic_menu_set_property;
- object_class->get_property = empathy_mic_menu_get_property;
- object_class->constructed = empathy_mic_menu_constructed;
- object_class->dispose = empathy_mic_menu_dispose;
-
- g_object_class_install_property (object_class, PROP_WINDOW,
- g_param_spec_object ("window", "window", "window",
- EMPATHY_TYPE_CALL_WINDOW,
- G_PARAM_WRITABLE | G_PARAM_STATIC_STRINGS | G_PARAM_CONSTRUCT_ONLY));
-
- g_type_class_add_private (object_class, sizeof (EmpathyMicMenuPrivate));
-}
-
-EmpathyMicMenu *
-empathy_mic_menu_new (EmpathyCallWindow *window)
-{
- return g_object_new (EMPATHY_TYPE_MIC_MENU,
- "window", window,
- NULL);
-}
diff --git a/src/empathy-mic-menu.h b/src/empathy-mic-menu.h
deleted file mode 100644
index 87691ae6..00000000
--- a/src/empathy-mic-menu.h
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- * Copyright (C) 2011 Collabora Ltd.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-#ifndef __EMPATHY_MIC_MENU_H__
-#define __EMPATHY_MIC_MENU_H__
-
-#include <glib-object.h>
-
-#include "empathy-call-window.h"
-
-G_BEGIN_DECLS
-
-#define EMPATHY_TYPE_MIC_MENU (empathy_mic_menu_get_type ())
-#define EMPATHY_MIC_MENU(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), EMPATHY_TYPE_MIC_MENU, EmpathyMicMenu))
-#define EMPATHY_MIC_MENU_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), EMPATHY_TYPE_MIC_MENU, EmpathyMicMenuClass))
-#define EMPATHY_IS_MIC_MENU(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), EMPATHY_TYPE_MIC_MENU))
-#define EMPATHY_IS_MIC_MENU_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), EMPATHY_TYPE_MIC_MENU))
-#define EMPATHY_MIC_MENU_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), EMPATHY_TYPE_MIC_MENU, EmpathyMicMenuClass))
-
-typedef struct _EmpathyMicMenu EmpathyMicMenu;
-typedef struct _EmpathyMicMenuPrivate EmpathyMicMenuPrivate;
-typedef struct _EmpathyMicMenuClass EmpathyMicMenuClass;
-
-struct _EmpathyMicMenu
-{
- GObject parent;
- EmpathyMicMenuPrivate *priv;
-};
-
-struct _EmpathyMicMenuClass
-{
- GObjectClass parent_class;
-};
-
-GType empathy_mic_menu_get_type (void) G_GNUC_CONST;
-
-EmpathyMicMenu * empathy_mic_menu_new (EmpathyCallWindow *window);
-
-G_END_DECLS
-
-#endif /* __EMPATHY_MIC_MENU_H__ */
diff --git a/src/empathy-mic-monitor.c b/src/empathy-mic-monitor.c
deleted file mode 100644
index a97f70e0..00000000
--- a/src/empathy-mic-monitor.c
+++ /dev/null
@@ -1,683 +0,0 @@
-/*
- * Copyright (C) 2011 Collabora Ltd.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- *
- */
-
-#include "config.h"
-#include "empathy-mic-monitor.h"
-
-#include <pulse/glib-mainloop.h>
-#include <tp-account-widgets/tpaw-utils.h>
-
-#include "empathy-utils.h"
-
-#define DEBUG_FLAG EMPATHY_DEBUG_VOIP
-#include "empathy-debug.h"
-
-enum
-{
- MICROPHONE_ADDED,
- MICROPHONE_REMOVED,
- MICROPHONE_CHANGED,
- LAST_SIGNAL
-};
-
-static guint signals[LAST_SIGNAL] = {0};
-
-struct _EmpathyMicMonitorPrivate
-{
- pa_glib_mainloop *loop;
- pa_context *context;
- GQueue *operations;
-};
-
-G_DEFINE_TYPE (EmpathyMicMonitor, empathy_mic_monitor, G_TYPE_OBJECT);
-
-typedef void (*OperationFunc) (EmpathyMicMonitor *, GSimpleAsyncResult *);
-
-typedef struct
-{
- OperationFunc func;
- GSimpleAsyncResult *result;
-} Operation;
-
-static Operation *
-operation_new (OperationFunc func,
- GSimpleAsyncResult *result)
-{
- Operation *o = g_slice_new0 (Operation);
-
- o->func = func;
- o->result = result;
-
- return o;
-}
-
-static void
-operation_free (Operation *o,
- gboolean cancelled)
-{
- if (cancelled)
- {
- g_simple_async_result_set_error (o->result,
- G_IO_ERROR, G_IO_ERROR_CANCELLED,
- "The microphone monitor was disposed");
- g_simple_async_result_complete (o->result);
- g_object_unref (o->result);
- }
-
- g_slice_free (Operation, o);
-}
-
-static void
-operations_run (EmpathyMicMonitor *self)
-{
- EmpathyMicMonitorPrivate *priv = self->priv;
- pa_context_state_t state = pa_context_get_state (priv->context);
- GList *l;
-
- if (state != PA_CONTEXT_READY)
- return;
-
- for (l = priv->operations->head; l != NULL; l = l->next)
- {
- Operation *o = l->data;
-
- o->func (self, o->result);
-
- operation_free (o, FALSE);
- }
-
- g_queue_clear (priv->operations);
-}
-
-static void
-empathy_mic_monitor_source_output_info_cb (pa_context *context,
- const pa_source_output_info *info,
- int eol,
- void *userdata)
-{
- EmpathyMicMonitor *self = userdata;
-
- if (eol)
- return;
-
- g_signal_emit (self, signals[MICROPHONE_CHANGED], 0,
- info->index, info->source);
-}
-
-static void
-empathy_mic_monitor_source_info_cb (pa_context *context,
- const pa_source_info *info,
- int eol,
- void *userdata)
-{
- EmpathyMicMonitor *self = userdata;
- gboolean is_monitor;
-
- if (eol)
- return;
-
- is_monitor = (info->monitor_of_sink != PA_INVALID_INDEX);
-
- g_signal_emit (self, signals[MICROPHONE_ADDED], 0,
- info->index, info->name, info->description, is_monitor);
-}
-
-static void
-empathy_mic_monitor_pa_event_cb (pa_context *context,
- pa_subscription_event_type_t type,
- uint32_t idx,
- void *userdata)
-{
- EmpathyMicMonitor *self = userdata;
-
- if ((type & PA_SUBSCRIPTION_EVENT_FACILITY_MASK) == PA_SUBSCRIPTION_EVENT_SOURCE_OUTPUT
- && (type & PA_SUBSCRIPTION_EVENT_TYPE_MASK) == PA_SUBSCRIPTION_EVENT_CHANGE)
- {
- /* Microphone in the source output has changed */
- pa_context_get_source_output_info (context, idx,
- empathy_mic_monitor_source_output_info_cb, self);
- }
- else if ((type & PA_SUBSCRIPTION_EVENT_FACILITY_MASK) == PA_SUBSCRIPTION_EVENT_SOURCE
- && (type & PA_SUBSCRIPTION_EVENT_TYPE_MASK) == PA_SUBSCRIPTION_EVENT_REMOVE)
- {
- /* A mic has been removed */
- g_signal_emit (self, signals[MICROPHONE_REMOVED], 0, idx);
- }
- else if ((type & PA_SUBSCRIPTION_EVENT_FACILITY_MASK) == PA_SUBSCRIPTION_EVENT_SOURCE
- && (type & PA_SUBSCRIPTION_EVENT_TYPE_MASK) == PA_SUBSCRIPTION_EVENT_NEW)
- {
- /* A mic has been plugged in */
- pa_context_get_source_info_by_index (context, idx,
- empathy_mic_monitor_source_info_cb, self);
- }
-}
-
-static void
-empathy_mic_monitor_pa_subscribe_cb (pa_context *context,
- int success,
- void *userdata)
-{
- if (!success)
- DEBUG ("Failed to subscribe to PulseAudio events");
-}
-
-static void
-empathy_mic_monitor_pa_state_change_cb (pa_context *context,
- void *userdata)
-{
- EmpathyMicMonitor *self = userdata;
- EmpathyMicMonitorPrivate *priv = self->priv;
- pa_context_state_t state = pa_context_get_state (priv->context);
-
- if (state == PA_CONTEXT_READY)
- {
- /* Listen to pulseaudio events so we know when sources are
- * added and when the microphone is changed. */
- pa_context_set_subscribe_callback (priv->context,
- empathy_mic_monitor_pa_event_cb, self);
- pa_context_subscribe (priv->context,
- PA_SUBSCRIPTION_MASK_SOURCE | PA_SUBSCRIPTION_MASK_SOURCE_OUTPUT,
- empathy_mic_monitor_pa_subscribe_cb, NULL);
-
- operations_run (self);
- }
-}
-
-static void
-empathy_mic_monitor_init (EmpathyMicMonitor *self)
-{
- EmpathyMicMonitorPrivate *priv = G_TYPE_INSTANCE_GET_PRIVATE (self,
- EMPATHY_TYPE_MIC_MONITOR, EmpathyMicMonitorPrivate);
-
- self->priv = priv;
-}
-
-static void
-empathy_mic_monitor_constructed (GObject *obj)
-{
- EmpathyMicMonitor *self = EMPATHY_MIC_MONITOR (obj);
- EmpathyMicMonitorPrivate *priv = self->priv;
-
- /* PulseAudio stuff: We need to create a dummy pa_glib_mainloop* so
- * Pulse can use the mainloop that GTK has created for us. */
- priv->loop = pa_glib_mainloop_new (NULL);
- priv->context = pa_context_new (pa_glib_mainloop_get_api (priv->loop),
- "EmpathyMicMonitor");
-
- /* Finally listen for state changes so we know when we've
- * connected. */
- pa_context_set_state_callback (priv->context,
- empathy_mic_monitor_pa_state_change_cb, obj);
- pa_context_connect (priv->context, NULL, 0, NULL);
-
- priv->operations = g_queue_new ();
-}
-
-static void
-empathy_mic_monitor_dispose (GObject *obj)
-{
- EmpathyMicMonitor *self = EMPATHY_MIC_MONITOR (obj);
- EmpathyMicMonitorPrivate *priv = self->priv;
-
- g_queue_foreach (priv->operations, (GFunc) operation_free,
- GUINT_TO_POINTER (TRUE));
- g_queue_free (priv->operations);
-
- if (priv->context != NULL)
- pa_context_unref (priv->context);
- priv->context = NULL;
-
- if (priv->loop != NULL)
- pa_glib_mainloop_free (priv->loop);
- priv->loop = NULL;
-
- G_OBJECT_CLASS (empathy_mic_monitor_parent_class)->dispose (obj);
-}
-
-static void
-empathy_mic_monitor_class_init (EmpathyMicMonitorClass *klass)
-{
- GObjectClass *object_class = G_OBJECT_CLASS (klass);
-
- object_class->constructed = empathy_mic_monitor_constructed;
- object_class->dispose = empathy_mic_monitor_dispose;
-
- signals[MICROPHONE_ADDED] = g_signal_new ("microphone-added",
- G_TYPE_FROM_CLASS (klass),
- G_SIGNAL_RUN_LAST,
- 0,
- NULL, NULL,
- g_cclosure_marshal_generic,
- G_TYPE_NONE, 4, G_TYPE_UINT, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_BOOLEAN);
-
- signals[MICROPHONE_REMOVED] = g_signal_new ("microphone-removed",
- G_TYPE_FROM_CLASS (klass),
- G_SIGNAL_RUN_LAST,
- 0,
- NULL, NULL,
- g_cclosure_marshal_generic,
- G_TYPE_NONE, 1, G_TYPE_UINT);
-
- signals[MICROPHONE_CHANGED] = g_signal_new ("microphone-changed",
- G_TYPE_FROM_CLASS (klass),
- G_SIGNAL_RUN_LAST,
- 0,
- NULL, NULL,
- g_cclosure_marshal_generic,
- G_TYPE_NONE, 2, G_TYPE_UINT, G_TYPE_UINT);
-
- g_type_class_add_private (object_class, sizeof (EmpathyMicMonitorPrivate));
-}
-
-EmpathyMicMonitor *
-empathy_mic_monitor_new (void)
-{
- return g_object_new (EMPATHY_TYPE_MIC_MONITOR,
- NULL);
-}
-
-/* operation: list microphones */
-static void
-operation_list_microphones_free (gpointer data)
-{
- GQueue *queue = data;
- GList *l;
-
- for (l = queue->head; l != NULL; l = l->next)
- {
- EmpathyMicrophone *mic = l->data;
-
- g_free (mic->name);
- g_free (mic->description);
- g_slice_free (EmpathyMicrophone, mic);
- }
-
- g_queue_free (queue);
-}
-
-static void
-operation_list_microphones_cb (pa_context *context,
- const pa_source_info *info,
- int eol,
- void *userdata)
-{
- GSimpleAsyncResult *result = userdata;
- EmpathyMicrophone *mic;
- GQueue *queue;
-
- if (eol)
- {
- g_simple_async_result_complete (result);
- g_object_unref (result);
- return;
- }
-
- mic = g_slice_new0 (EmpathyMicrophone);
- mic->index = info->index;
- mic->name = g_strdup (info->name);
- mic->description = g_strdup (info->description);
- mic->is_monitor = (info->monitor_of_sink != PA_INVALID_INDEX);
-
- /* add it to the queue */
- queue = g_simple_async_result_get_op_res_gpointer (result);
- g_queue_push_tail (queue, mic);
-}
-
-static void
-operation_list_microphones (EmpathyMicMonitor *self,
- GSimpleAsyncResult *result)
-{
- EmpathyMicMonitorPrivate *priv = self->priv;
-
- g_assert_cmpuint (pa_context_get_state (priv->context), ==, PA_CONTEXT_READY);
-
- g_simple_async_result_set_op_res_gpointer (result, g_queue_new (),
- operation_list_microphones_free);
-
- pa_context_get_source_info_list (priv->context,
- operation_list_microphones_cb, result);
-}
-
-void
-empathy_mic_monitor_list_microphones_async (EmpathyMicMonitor *self,
- GAsyncReadyCallback callback,
- gpointer user_data)
-{
-EmpathyMicMonitorPrivate *priv = self->priv;
- Operation *operation;
- GSimpleAsyncResult *simple;
-
- simple = g_simple_async_result_new (G_OBJECT (self), callback, user_data,
- empathy_mic_monitor_list_microphones_async);
-
- operation = operation_new (operation_list_microphones, simple);
- g_queue_push_tail (priv->operations, operation);
-
- /* gogogogo */
- operations_run (self);
-}
-
-const GList *
-empathy_mic_monitor_list_microphones_finish (EmpathyMicMonitor *src,
- GAsyncResult *result,
- GError **error)
-{
- GSimpleAsyncResult *simple = G_SIMPLE_ASYNC_RESULT (result);
- GQueue *queue;
-
- if (g_simple_async_result_propagate_error (simple, error))
- return NULL;
-
- g_return_val_if_fail (g_simple_async_result_is_valid (result,
- G_OBJECT (src), empathy_mic_monitor_list_microphones_async),
- NULL);
-
- queue = g_simple_async_result_get_op_res_gpointer (simple);
- return queue->head;
-}
-
-/* operation: change microphone */
-typedef struct
-{
- guint source_output_idx;
- guint source_idx;
-} ChangeMicrophoneData;
-
-static void
-operation_change_microphone_cb (pa_context *context,
- int success,
- void *userdata)
-{
- GSimpleAsyncResult *result = userdata;
-
- if (!success)
- {
- g_simple_async_result_set_error (result, G_IO_ERROR, G_IO_ERROR_FAILED,
- "Failed to change microphone. Reason unknown.");
- }
-
- g_simple_async_result_complete (result);
- g_object_unref (result);
-}
-
-static void
-operation_change_microphone (EmpathyMicMonitor *self,
- GSimpleAsyncResult *result)
-{
- EmpathyMicMonitorPrivate *priv = self->priv;
- ChangeMicrophoneData *data;
-
- g_assert_cmpuint (pa_context_get_state (priv->context), ==, PA_CONTEXT_READY);
-
- data = g_simple_async_result_get_op_res_gpointer (result);
-
- pa_context_move_source_output_by_index (priv->context,
- data->source_output_idx, data->source_idx,
- operation_change_microphone_cb, result);
-
- g_simple_async_result_set_op_res_gpointer (result, NULL, NULL);
- g_slice_free (ChangeMicrophoneData, data);
-}
-
-void
-empathy_mic_monitor_change_microphone_async (EmpathyMicMonitor *self,
- guint source_output_idx,
- guint source_idx,
- GAsyncReadyCallback callback,
- gpointer user_data)
-{
- EmpathyMicMonitorPrivate *priv = self->priv;
- GSimpleAsyncResult *simple;
- Operation *operation;
- ChangeMicrophoneData *data;
-
- simple = g_simple_async_result_new (G_OBJECT (self), callback, user_data,
- empathy_mic_monitor_change_microphone_async);
-
- if (source_output_idx == PA_INVALID_INDEX)
- {
- g_simple_async_result_set_error (simple, G_IO_ERROR, G_IO_ERROR_FAILED,
- "Invalid source output index");
- g_simple_async_result_complete_in_idle (simple);
- g_object_unref (simple);
- return;
- }
-
- data = g_slice_new0 (ChangeMicrophoneData);
- data->source_idx = source_idx;
- data->source_output_idx = source_output_idx;
- g_simple_async_result_set_op_res_gpointer (simple, data, NULL);
-
- operation = operation_new (operation_change_microphone, simple);
- g_queue_push_tail (priv->operations, operation);
-
- /* gogogogo */
- operations_run (self);
-}
-
-gboolean
-empathy_mic_monitor_change_microphone_finish (EmpathyMicMonitor *self,
- GAsyncResult *result,
- GError **error)
-{
- tpaw_implement_finish_void (self,
- empathy_mic_monitor_change_microphone_async);
-}
-
-/* operation: get current mic */
-static void
-empathy_mic_monitor_get_current_mic_cb (pa_context *context,
- const pa_source_output_info *info,
- int eol,
- void *userdata)
-{
- GSimpleAsyncResult *result = userdata;
-
- if (eol)
- return;
-
- if (g_simple_async_result_get_op_res_gpointer (result) != NULL)
- return;
-
- g_simple_async_result_set_op_res_gpointer (result,
- GUINT_TO_POINTER (info->source), NULL);
- g_simple_async_result_complete (result);
- g_object_unref (result);
-}
-
-static void
-operation_get_current_mic (EmpathyMicMonitor *self,
- GSimpleAsyncResult *result)
-{
- EmpathyMicMonitorPrivate *priv = self->priv;
- guint source_output_idx;
-
- g_assert_cmpuint (pa_context_get_state (priv->context), ==, PA_CONTEXT_READY);
-
- source_output_idx = GPOINTER_TO_UINT (
- g_simple_async_result_get_op_res_gpointer (result));
-
- /* unset this so we can use it in the cb */
- g_simple_async_result_set_op_res_gpointer (result, NULL, NULL);
-
- pa_context_get_source_output_info (priv->context, source_output_idx,
- empathy_mic_monitor_get_current_mic_cb, result);
-}
-
-void
-empathy_mic_monitor_get_current_mic_async (EmpathyMicMonitor *self,
- guint source_output_idx,
- GAsyncReadyCallback callback,
- gpointer user_data)
-{
- EmpathyMicMonitorPrivate *priv = self->priv;
- Operation *operation;
- GSimpleAsyncResult *simple;
-
- simple = g_simple_async_result_new (G_OBJECT (self), callback, user_data,
- empathy_mic_monitor_get_current_mic_async);
-
- g_simple_async_result_set_op_res_gpointer (simple,
- GUINT_TO_POINTER (source_output_idx), NULL);
-
- operation = operation_new (operation_get_current_mic, simple);
- g_queue_push_tail (priv->operations, operation);
-
- operations_run (self);
-}
-
-guint
-empathy_mic_monitor_get_current_mic_finish (EmpathyMicMonitor *self,
- GAsyncResult *result,
- GError **error)
-{
- GSimpleAsyncResult *simple = G_SIMPLE_ASYNC_RESULT (result);
-
- if (g_simple_async_result_propagate_error (simple, error))
- return PA_INVALID_INDEX;
-
- g_return_val_if_fail (g_simple_async_result_is_valid (result,
- G_OBJECT (self), empathy_mic_monitor_get_current_mic_async),
- PA_INVALID_INDEX);
-
- return GPOINTER_TO_UINT (
- g_simple_async_result_get_op_res_gpointer (simple));
-}
-
-/* operation: get default */
-static void
-empathy_mic_monitor_get_default_cb (pa_context *context,
- const pa_server_info *info,
- void *userdata)
-{
- GSimpleAsyncResult *result = userdata;
-
- /* TODO: it would be nice in future, for consistency, if this gave
- * the source idx instead of the name. */
- g_simple_async_result_set_op_res_gpointer (result,
- g_strdup (info->default_source_name), g_free);
- g_simple_async_result_complete (result);
- g_object_unref (result);
-}
-
-static void
-operation_get_default (EmpathyMicMonitor *self,
- GSimpleAsyncResult *result)
-{
- EmpathyMicMonitorPrivate *priv = self->priv;
-
- g_assert_cmpuint (pa_context_get_state (priv->context), ==, PA_CONTEXT_READY);
-
- /* unset this so we can use it in the cb */
- g_simple_async_result_set_op_res_gpointer (result, NULL, NULL);
-
- pa_context_get_server_info (priv->context, empathy_mic_monitor_get_default_cb,
- result);
-}
-
-void
-empathy_mic_monitor_get_default_async (EmpathyMicMonitor *self,
- GAsyncReadyCallback callback,
- gpointer user_data)
-{
- EmpathyMicMonitorPrivate *priv = self->priv;
- Operation *operation;
- GSimpleAsyncResult *simple;
-
- simple = g_simple_async_result_new (G_OBJECT (self), callback, user_data,
- empathy_mic_monitor_get_default_async);
-
- operation = operation_new (operation_get_default, simple);
- g_queue_push_tail (priv->operations, operation);
-
- operations_run (self);
-}
-
-const gchar *
-empathy_mic_monitor_get_default_finish (EmpathyMicMonitor *self,
- GAsyncResult *result,
- GError **error)
-{
- tpaw_implement_finish_return_pointer (self,
- empathy_mic_monitor_get_default_async);
-}
-
-/* operation: set default */
-static void
-empathy_mic_monitor_set_default_cb (pa_context *c,
- int success,
- void *userdata)
-{
- GSimpleAsyncResult *result = userdata;
-
- if (!success)
- {
- g_simple_async_result_set_error (result,
- G_IO_ERROR, G_IO_ERROR_FAILED,
- "The operation failed for an unknown reason");
- }
-
- g_simple_async_result_complete (result);
- g_object_unref (result);
-}
-
-static void
-operation_set_default (EmpathyMicMonitor *self,
- GSimpleAsyncResult *result)
-{
- EmpathyMicMonitorPrivate *priv = self->priv;
- gchar *name;
-
- g_assert_cmpuint (pa_context_get_state (priv->context), ==, PA_CONTEXT_READY);
-
- name = g_simple_async_result_get_op_res_gpointer (result);
-
- pa_context_set_default_source (priv->context, name,
- empathy_mic_monitor_set_default_cb, result);
-}
-
-void
-empathy_mic_monitor_set_default_async (EmpathyMicMonitor *self,
- const gchar *name,
- GAsyncReadyCallback callback,
- gpointer user_data)
-{
- EmpathyMicMonitorPrivate *priv = self->priv;
- Operation *operation;
- GSimpleAsyncResult *simple;
-
- simple = g_simple_async_result_new (G_OBJECT (self), callback, user_data,
- empathy_mic_monitor_set_default_async);
-
- g_simple_async_result_set_op_res_gpointer (simple, g_strdup (name), g_free);
-
- operation = operation_new (operation_set_default, simple);
- g_queue_push_tail (priv->operations, operation);
-
- operations_run (self);
-}
-
-gboolean
-empathy_mic_monitor_set_default_finish (EmpathyMicMonitor *self,
- GAsyncResult *result,
- GError **error)
-{
- tpaw_implement_finish_void (self,
- empathy_mic_monitor_set_default_async);
-}
diff --git a/src/empathy-mic-monitor.h b/src/empathy-mic-monitor.h
deleted file mode 100644
index 73771681..00000000
--- a/src/empathy-mic-monitor.h
+++ /dev/null
@@ -1,89 +0,0 @@
-/*
- * Copyright (C) 2011 Collabora Ltd.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-#ifndef __EMPATHY_MIC_MONITOR_H__
-#define __EMPATHY_MIC_MONITOR_H__
-
-#include <gio/gio.h>
-#include <pulse/pulseaudio.h>
-
-G_BEGIN_DECLS
-
-#define EMPATHY_TYPE_MIC_MONITOR (empathy_mic_monitor_get_type ())
-#define EMPATHY_MIC_MONITOR(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), EMPATHY_TYPE_MIC_MONITOR, EmpathyMicMonitor))
-#define EMPATHY_MIC_MONITOR_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), EMPATHY_TYPE_MIC_MONITOR, EmpathyMicMonitorClass))
-#define EMPATHY_IS_MIC_MONITOR(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), EMPATHY_TYPE_MIC_MONITOR))
-#define EMPATHY_IS_MIC_MONITOR_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), EMPATHY_TYPE_MIC_MONITOR))
-#define EMPATHY_MIC_MONITOR_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), EMPATHY_TYPE_MIC_MONITOR, EmpathyMicMonitorClass))
-
-typedef struct _EmpathyMicMonitor EmpathyMicMonitor;
-typedef struct _EmpathyMicMonitorPrivate EmpathyMicMonitorPrivate;
-typedef struct _EmpathyMicMonitorClass EmpathyMicMonitorClass;
-
-struct _EmpathyMicMonitor
-{
- GObject parent;
- EmpathyMicMonitorPrivate *priv;
-};
-
-struct _EmpathyMicMonitorClass
-{
- GObjectClass parent_class;
-};
-
-GType empathy_mic_monitor_get_type (void) G_GNUC_CONST;
-
-EmpathyMicMonitor * empathy_mic_monitor_new (void);
-
-
-typedef struct
-{
- guint index;
- gchar *name;
- gchar *description;
- gboolean is_monitor;
-} EmpathyMicrophone;
-
-void empathy_mic_monitor_list_microphones_async (EmpathyMicMonitor *monitor,
- GAsyncReadyCallback callback, gpointer user_data);
-const GList * empathy_mic_monitor_list_microphones_finish (EmpathyMicMonitor *monitor,
- GAsyncResult *result, GError **error);
-
-void empathy_mic_monitor_change_microphone_async (EmpathyMicMonitor *monitor,
- guint source_output_idx, guint source_idx, GAsyncReadyCallback callback, gpointer user_data);
-gboolean empathy_mic_monitor_change_microphone_finish (EmpathyMicMonitor *monitor,
- GAsyncResult *result, GError **error);
-
-void empathy_mic_monitor_get_current_mic_async (EmpathyMicMonitor *self,
- guint source_output_idx, GAsyncReadyCallback callback, gpointer user_data);
-guint empathy_mic_monitor_get_current_mic_finish (EmpathyMicMonitor *self,
- GAsyncResult *result, GError **error);
-
-void empathy_mic_monitor_get_default_async (EmpathyMicMonitor *self,
- GAsyncReadyCallback callback, gpointer user_data);
-const gchar * empathy_mic_monitor_get_default_finish (EmpathyMicMonitor *self,
- GAsyncResult *result, GError **error);
-
-void empathy_mic_monitor_set_default_async (EmpathyMicMonitor *self,
- const gchar *name, GAsyncReadyCallback callback, gpointer user_data);
-gboolean empathy_mic_monitor_set_default_finish (EmpathyMicMonitor *self,
- GAsyncResult *result, GError **error);
-
-G_END_DECLS
-
-#endif /* __EMPATHY_MIC_MONITOR_H__ */
diff --git a/src/empathy-new-chatroom-dialog.c b/src/empathy-new-chatroom-dialog.c
deleted file mode 100644
index 7f46cb4f..00000000
--- a/src/empathy-new-chatroom-dialog.c
+++ /dev/null
@@ -1,830 +0,0 @@
-/*
- * Copyright (C) 2006-2007 Imendio AB
- * Copyright (C) 2007-2011 Collabora Ltd.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301 USA
- *
- * Authors: Martyn Russell <martyn@imendio.com>
- * Xavier Claessens <xclaesse@gmail.com>
- */
-
-#include "config.h"
-#include "empathy-new-chatroom-dialog.h"
-
-#include <glib/gi18n.h>
-#include <tp-account-widgets/tpaw-builder.h>
-#include <tp-account-widgets/tpaw-utils.h>
-
-#include "empathy-account-chooser.h"
-#include "empathy-gsettings.h"
-#include "empathy-request-util.h"
-#include "empathy-ui-utils.h"
-#include "empathy-utils.h"
-
-#define DEBUG_FLAG EMPATHY_DEBUG_OTHER
-#include "empathy-debug.h"
-
-G_DEFINE_TYPE (EmpathyNewChatroomDialog, empathy_new_chatroom_dialog,
- GTK_TYPE_DIALOG)
-
-struct _EmpathyNewChatroomDialogPriv
-{
- TpRoomList *room_list;
- /* Currently selected account */
- TpAccount *account;
- /* Signal id of the "status-changed" signal connected on the currently
- * selected account */
- gulong status_changed_id;
-
- GtkWidget *table_grid;
- GtkWidget *label_account;
- GtkWidget *account_chooser;
- GtkWidget *label_server;
- GtkWidget *entry_server;
- GtkWidget *label_room;
- GtkWidget *entry_room;
- GtkWidget *expander_browse;
- GtkWidget *hbox_expander;
- GtkWidget *throbber;
- GtkWidget *treeview;
- GtkTreeModel *model;
- GtkWidget *button_join;
- GtkWidget *label_error_message;
- GtkWidget *viewport_error;
-
- GSettings *gsettings;
-};
-
-enum
-{
- COL_NEED_PASSWORD,
- COL_INVITE_ONLY,
- COL_NAME,
- COL_ROOM,
- COL_MEMBERS,
- COL_MEMBERS_INT,
- COL_TOOLTIP,
- COL_COUNT
-};
-
-static EmpathyNewChatroomDialog *dialog_p = NULL;
-
-static void
-new_chatroom_dialog_store_last_account (GSettings *gsettings,
- EmpathyAccountChooser *account_chooser)
-{
- TpAccount *account;
- const char *account_path;
-
- account = empathy_account_chooser_get_account (account_chooser);
- if (account == NULL)
- return;
-
- account_path = tp_proxy_get_object_path (account);
- DEBUG ("Storing account path '%s'", account_path);
-
- g_settings_set (gsettings, EMPATHY_PREFS_CHAT_ROOM_LAST_ACCOUNT,
- "o", account_path);
-}
-
-static void
-new_chatroom_dialog_join (EmpathyNewChatroomDialog *self)
-{
- EmpathyAccountChooser *account_chooser;
- TpAccount *account;
- const gchar *room;
- const gchar *server = NULL;
- gchar *room_name = NULL;
-
- room = gtk_entry_get_text (GTK_ENTRY (self->priv->entry_room));
- server = gtk_entry_get_text (GTK_ENTRY (self->priv->entry_server));
-
- account_chooser = EMPATHY_ACCOUNT_CHOOSER (self->priv->account_chooser);
- account = empathy_account_chooser_get_account (account_chooser);
-
- if (!TPAW_STR_EMPTY (server))
- room_name = g_strconcat (room, "@", server, NULL);
- else
- room_name = g_strdup (room);
-
- g_strstrip (room_name);
-
- DEBUG ("Requesting channel for '%s'", room_name);
-
- empathy_join_muc (account, room_name, empathy_get_current_action_time ());
-
- g_free (room_name);
-}
-
-static void
-empathy_new_chatroom_dialog_response (GtkDialog *dialog,
- gint response)
-{
- EmpathyNewChatroomDialog *self = EMPATHY_NEW_CHATROOM_DIALOG (dialog);
-
- if (response == GTK_RESPONSE_OK)
- {
- new_chatroom_dialog_join (self);
- new_chatroom_dialog_store_last_account (self->priv->gsettings,
- EMPATHY_ACCOUNT_CHOOSER (self->priv->account_chooser));
- }
-
- gtk_widget_destroy (GTK_WIDGET (dialog));
-}
-
-static void
-new_chatroom_dialog_model_add_columns (EmpathyNewChatroomDialog *self)
-{
- GtkTreeView *view;
- GtkTreeViewColumn *column;
- GtkCellRenderer *cell;
- gint width, height;
-
- gtk_icon_size_lookup (GTK_ICON_SIZE_MENU, &width, &height);
-
- view = GTK_TREE_VIEW (self->priv->treeview);
-
- cell = gtk_cell_renderer_pixbuf_new ();
- g_object_set (cell,
- "width", width,
- "height", height,
- "stock-size", GTK_ICON_SIZE_MENU,
- NULL);
-
- column = gtk_tree_view_column_new_with_attributes (NULL, cell,
- "stock-id", COL_INVITE_ONLY, NULL);
-
- gtk_tree_view_column_set_sort_column_id (column, COL_INVITE_ONLY);
- gtk_tree_view_append_column (view, column);
-
- column = gtk_tree_view_column_new_with_attributes (NULL, cell,
- "stock-id", COL_NEED_PASSWORD, NULL);
-
- gtk_tree_view_column_set_sort_column_id (column, COL_NEED_PASSWORD);
- gtk_tree_view_append_column (view, column);
-
- cell = gtk_cell_renderer_text_new ();
- g_object_set (cell,
- "xpad", (guint) 4,
- "ypad", (guint) 2,
- "ellipsize", PANGO_ELLIPSIZE_END,
- NULL);
-
- column = gtk_tree_view_column_new_with_attributes (_("Chat Room"), cell,
- "text", COL_NAME, NULL);
-
- gtk_tree_view_column_set_sort_column_id (column, COL_NAME);
- gtk_tree_view_column_set_expand (column, TRUE);
- gtk_tree_view_append_column (view, column);
-
- cell = gtk_cell_renderer_text_new ();
- g_object_set (cell,
- "xpad", (guint) 4,
- "ypad", (guint) 2,
- "ellipsize", PANGO_ELLIPSIZE_END,
- "alignment", PANGO_ALIGN_RIGHT,
- NULL);
-
- column = gtk_tree_view_column_new_with_attributes (_("Members"), cell,
- "text", COL_MEMBERS, NULL);
-
- gtk_tree_view_column_set_sort_column_id (column, COL_MEMBERS_INT);
- gtk_tree_view_append_column (view, column);
-}
-
-static void
-new_chatroom_dialog_model_row_activated_cb (GtkTreeView *tree_view,
- GtkTreePath *path,
- GtkTreeViewColumn *column,
- EmpathyNewChatroomDialog *self)
-{
- gtk_widget_activate (self->priv->button_join);
-}
-
-static void
-new_chatroom_dialog_model_selection_changed (GtkTreeSelection *selection,
- EmpathyNewChatroomDialog *self)
-{
- GtkTreeModel *model;
- GtkTreeIter iter;
- gchar *room = NULL;
- gchar *server = NULL;
-
- if (!gtk_tree_selection_get_selected (selection, &model, &iter))
- return;
-
- gtk_tree_model_get (model, &iter, COL_ROOM, &room, -1);
- server = strstr (room, "@");
- if (server)
- {
- *server = '\0';
- server++;
- }
-
- gtk_entry_set_text (GTK_ENTRY (self->priv->entry_server),
- server ? server : "");
- gtk_entry_set_text (GTK_ENTRY (self->priv->entry_room), room ? room : "");
-
- g_free (room);
-}
-
-static void
-new_chatroom_dialog_model_setup (EmpathyNewChatroomDialog *self)
-{
- GtkTreeView *view;
- GtkListStore *store;
- GtkTreeSelection *selection;
-
- /* View */
- view = GTK_TREE_VIEW (self->priv->treeview);
-
- g_signal_connect (view, "row-activated",
- G_CALLBACK (new_chatroom_dialog_model_row_activated_cb), self);
-
- /* Store/Model */
- store = gtk_list_store_new (COL_COUNT,
- G_TYPE_STRING, /* Need password */
- G_TYPE_STRING, /* Invite only */
- G_TYPE_STRING, /* Name */
- G_TYPE_STRING, /* Room */
- G_TYPE_STRING, /* Member count */
- G_TYPE_INT, /* Member count int */
- G_TYPE_STRING); /* Tool tip */
-
- self->priv->model = GTK_TREE_MODEL (store);
- gtk_tree_view_set_model (view, self->priv->model);
- gtk_tree_view_set_tooltip_column (view, COL_TOOLTIP);
- gtk_tree_view_set_search_column (view, COL_NAME);
-
- /* Selection */
- selection = gtk_tree_view_get_selection (view);
- gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (store),
- COL_NAME, GTK_SORT_ASCENDING);
-
- g_signal_connect (selection, "changed",
- G_CALLBACK (new_chatroom_dialog_model_selection_changed), self);
-
- /* Columns */
- new_chatroom_dialog_model_add_columns (self);
-}
-
-static void
-update_join_button_sensitivity (EmpathyNewChatroomDialog *self)
-{
- const gchar *room;
- const gchar *protocol;
- gboolean sensitive = FALSE;
-
- room = gtk_entry_get_text (GTK_ENTRY (self->priv->entry_room));
- protocol = tp_account_get_protocol_name (self->priv->account);
- if (TPAW_STR_EMPTY (room))
- goto out;
-
- if (!tp_strdiff (protocol, "irc") &&
- (!tp_strdiff (room, "#") || !tp_strdiff (room, "&")))
- goto out;
-
- if (self->priv->account == NULL)
- goto out;
-
- if (tp_account_get_connection_status (self->priv->account, NULL) !=
- TP_CONNECTION_STATUS_CONNECTED)
- goto out;
-
- sensitive = TRUE;
-
-out:
- gtk_widget_set_sensitive (self->priv->button_join, sensitive);
-}
-
-static void
-new_chatroom_dialog_update_widgets (EmpathyNewChatroomDialog *self)
-{
- const gchar *protocol;
-
- if (self->priv->account == NULL)
- return;
-
- protocol = tp_account_get_protocol_name (self->priv->account);
-
- gtk_entry_set_text (GTK_ENTRY (self->priv->entry_server), "");
-
- /* hardcode here known protocols */
- if (strcmp (protocol, "jabber") == 0)
- gtk_widget_set_sensitive (self->priv->entry_server, TRUE);
- else if (strcmp (protocol, "local-xmpp") == 0)
- gtk_widget_set_sensitive (self->priv->entry_server, FALSE);
- else if (strcmp (protocol, "irc") == 0)
- gtk_widget_set_sensitive (self->priv->entry_server, FALSE);
- else
- gtk_widget_set_sensitive (self->priv->entry_server, TRUE);
-
- if (!tp_strdiff (protocol, "irc"))
- gtk_entry_set_text (GTK_ENTRY (self->priv->entry_room), "#");
- else
- gtk_entry_set_text (GTK_ENTRY (self->priv->entry_room), "");
-
- update_join_button_sensitivity (self);
-
- /* Final set up of the dialog */
- gtk_widget_grab_focus (self->priv->entry_room);
- gtk_editable_set_position (GTK_EDITABLE (self->priv->entry_room), -1);
-}
-
-static void
-account_status_changed_cb (TpAccount *account,
- guint old_status,
- guint new_status,
- guint reason,
- gchar *dbus_error_name,
- GHashTable *details,
- EmpathyNewChatroomDialog *self)
-{
- update_join_button_sensitivity (self);
-}
-
-static void
-new_chatroom_dialog_select_last_account (GSettings *gsettings,
- EmpathyAccountChooser *account_chooser)
-{
- const gchar *account_path;
- TpAccountManager *manager;
- TpSimpleClientFactory *factory;
- TpAccount *account;
- TpConnectionStatus status;
-
- account_path = g_settings_get_string (gsettings,
- EMPATHY_PREFS_CHAT_ROOM_LAST_ACCOUNT);
- DEBUG ("Selecting account path '%s'", account_path);
-
- manager = tp_account_manager_dup ();
- factory = tp_proxy_get_factory (manager);
- account = tp_simple_client_factory_ensure_account (factory, account_path,
- NULL, NULL);
-
- if (account != NULL)
- {
- status = tp_account_get_connection_status (account, NULL);
- if (status == TP_CONNECTION_STATUS_CONNECTED)
- empathy_account_chooser_set_account (account_chooser, account);
- g_object_unref (account);
- }
-
- g_object_unref (manager);
-}
-
-static void
-new_chatroom_dialog_account_ready_cb (EmpathyAccountChooser *combobox,
- EmpathyNewChatroomDialog *self)
-{
- new_chatroom_dialog_select_last_account (self->priv->gsettings, combobox);
-}
-
-static void
-listing_failed_cb (TpRoomList *room_list,
- GError *error,
- EmpathyNewChatroomDialog *self)
-{
- gtk_label_set_text (GTK_LABEL (self->priv->label_error_message),
- _("Failed to list rooms"));
- gtk_widget_show_all (self->priv->viewport_error);
- gtk_widget_set_sensitive (self->priv->treeview, FALSE);
-}
-
-static void
-new_chatroom_dialog_got_room_cb (TpRoomList *room_list,
- TpRoomInfo *room,
- EmpathyNewChatroomDialog *self)
-{
- GtkListStore *store;
- gchar *members;
- gchar *tooltip;
- const gchar *need_password;
- const gchar *invite_only;
- gchar *tmp;
-
- if (tp_str_empty (tp_room_info_get_handle_name (room)))
- {
- DEBUG ("Room handle name is empty - Broken CM");
- return;
- }
-
- DEBUG ("New room listed: %s (%s)", tp_room_info_get_name (room),
- tp_room_info_get_handle_name (room));
-
- /* Add to model */
- store = GTK_LIST_STORE (self->priv->model);
- members = g_strdup_printf ("%d", tp_room_info_get_members_count (
- room, NULL));
- tmp = g_strdup_printf ("<b>%s</b>", tp_room_info_get_name (room));
-
- /* Translators: Room/Join's roomlist tooltip. Parameters are a channel name,
- yes/no, yes/no and a number. */
- tooltip = g_strdup_printf (
- _("%s\nInvite required: %s\nPassword required: %s\nMembers: %s"),
- tmp,
- tp_room_info_get_invite_only (room, NULL) ? _("Yes") : _("No"),
- tp_room_info_get_requires_password (room, NULL) ? _("Yes") : _("No"),
- members);
- g_free (tmp);
-
- invite_only = (tp_room_info_get_invite_only (room, NULL) ?
- GTK_STOCK_INDEX : NULL);
- need_password = (tp_room_info_get_requires_password (room, NULL) ?
- GTK_STOCK_DIALOG_AUTHENTICATION : NULL);
-
- gtk_list_store_insert_with_values (store, NULL, -1,
- COL_NEED_PASSWORD, need_password,
- COL_INVITE_ONLY, invite_only,
- COL_NAME, tp_room_info_get_name (room),
- COL_ROOM, tp_room_info_get_handle_name (room),
- COL_MEMBERS, members,
- COL_MEMBERS_INT, tp_room_info_get_members_count (room, NULL),
- COL_TOOLTIP, tooltip,
- -1);
-
- g_free (members);
- g_free (tooltip);
-}
-
-static void
-new_chatroom_dialog_listing_cb (TpRoomList *room_list,
- GParamSpec *spec,
- EmpathyNewChatroomDialog *self)
-{
- /* Update the throbber */
- if (tp_room_list_is_listing (room_list))
- {
- gtk_spinner_start (GTK_SPINNER (self->priv->throbber));
- gtk_widget_show (self->priv->throbber);
- }
- else
- {
- gtk_spinner_stop (GTK_SPINNER (self->priv->throbber));
- gtk_widget_hide (self->priv->throbber);
- }
-}
-
-static void
-new_chatroom_dialog_model_clear (EmpathyNewChatroomDialog *self)
-{
- GtkListStore *store;
-
- store = GTK_LIST_STORE (self->priv->model);
- gtk_list_store_clear (store);
-}
-
-static void
-new_chatroom_dialog_browse_start (EmpathyNewChatroomDialog *self)
-{
- new_chatroom_dialog_model_clear (self);
-
- if (self->priv->room_list != NULL)
- tp_room_list_start (self->priv->room_list);
-}
-
-static void
-new_room_list_cb (GObject *source,
- GAsyncResult *result,
- gpointer user_data)
-{
- EmpathyNewChatroomDialog *self = user_data;
- TpRoomList *room_list;
- GError *error = NULL;
-
- room_list = tp_room_list_new_finish (result, &error);
- if (room_list == NULL)
- {
- DEBUG ("Failed to create TpRoomList: %s\n", error->message);
- g_error_free (error);
- return;
- }
-
- if (tp_room_list_get_account (room_list) != self->priv->account)
- {
- /* Account changed while we were creating this TpRoomList */
- g_object_unref (room_list);
- return;
- }
-
- self->priv->room_list = room_list;
-
- tp_g_signal_connect_object (self->priv->room_list, "got-room",
- G_CALLBACK (new_chatroom_dialog_got_room_cb), self, 0);
- tp_g_signal_connect_object (self->priv->room_list, "failed",
- G_CALLBACK (listing_failed_cb), self, 0);
- tp_g_signal_connect_object (self->priv->room_list, "notify::listing",
- G_CALLBACK (new_chatroom_dialog_listing_cb), self, 0);
-
- if (gtk_expander_get_expanded (GTK_EXPANDER (self->priv->expander_browse)))
- {
- gtk_widget_hide (self->priv->viewport_error);
- gtk_widget_set_sensitive (self->priv->treeview, TRUE);
- new_chatroom_dialog_browse_start (self);
- }
-
- if (tp_room_list_is_listing (self->priv->room_list))
- {
- gtk_spinner_start (GTK_SPINNER (self->priv->throbber));
- gtk_widget_show (self->priv->throbber);
- }
-
- gtk_widget_set_sensitive (self->priv->expander_browse, TRUE);
-
- new_chatroom_dialog_update_widgets (self);
-}
-
-static void
-new_chatroom_dialog_account_changed_cb (GtkComboBox *combobox,
- EmpathyNewChatroomDialog *self)
-{
- EmpathyAccountChooser *account_chooser;
- TpConnection *connection;
- TpCapabilities *caps;
-
- g_clear_object (&self->priv->room_list);
-
- gtk_spinner_stop (GTK_SPINNER (self->priv->throbber));
- gtk_widget_hide (self->priv->throbber);
- new_chatroom_dialog_model_clear (self);
-
- if (self->priv->account != NULL)
- {
- g_signal_handler_disconnect (self->priv->account,
- self->priv->status_changed_id);
- g_object_unref (self->priv->account);
- }
-
- account_chooser = EMPATHY_ACCOUNT_CHOOSER (self->priv->account_chooser);
- self->priv->account = empathy_account_chooser_dup_account (account_chooser);
- connection = empathy_account_chooser_get_connection (account_chooser);
- if (self->priv->account == NULL)
- goto out;
-
- self->priv->status_changed_id = g_signal_connect (self->priv->account,
- "status-changed", G_CALLBACK (account_status_changed_cb), self);
-
- /* empathy_account_chooser_filter_supports_chatrooms ensures that the
- * account has a connection and CAPABILITIES has been prepared. */
- g_assert (connection != NULL);
- g_assert (tp_proxy_is_prepared (connection,
- TP_CONNECTION_FEATURE_CAPABILITIES));
- caps = tp_connection_get_capabilities (connection);
-
- if (tp_capabilities_supports_room_list (caps, NULL))
- {
- /* Roomlist channels are supported */
- tp_room_list_new_async (self->priv->account, NULL, new_room_list_cb,
- self);
- }
-
- gtk_widget_set_sensitive (self->priv->expander_browse, FALSE);
-
-out:
- new_chatroom_dialog_update_widgets (self);
-}
-
-static void
-new_chatroom_dialog_button_close_error_clicked_cb (GtkButton *button,
- EmpathyNewChatroomDialog *self)
-{
- gtk_widget_hide (self->priv->viewport_error);
-}
-
-static void
-new_chatroom_dialog_entry_changed_cb (GtkWidget *entry,
- EmpathyNewChatroomDialog *self)
-{
- if (entry == self->priv->entry_room)
- {
- update_join_button_sensitivity (self);
-
- /* FIXME: Select the room in the list */
- }
-}
-
-static void
-new_chatroom_dialog_entry_server_activate_cb (GtkWidget *widget,
- EmpathyNewChatroomDialog *self)
-{
- new_chatroom_dialog_browse_start (self);
-}
-
-static void
-new_chatroom_dialog_expander_browse_activate_cb (GtkWidget *widget,
- EmpathyNewChatroomDialog *self)
-{
- gboolean expanded;
-
- expanded = gtk_expander_get_expanded (GTK_EXPANDER (widget));
- if (expanded)
- {
- gtk_window_set_resizable (GTK_WINDOW (self), FALSE);
- }
- else
- {
- gtk_widget_hide (self->priv->viewport_error);
- gtk_widget_set_sensitive (self->priv->treeview, TRUE);
- new_chatroom_dialog_browse_start (self);
- gtk_window_set_resizable (GTK_WINDOW (self), TRUE);
- }
-}
-
-static gboolean
-new_chatroom_dialog_entry_server_focus_out_cb (GtkWidget *widget,
- GdkEventFocus *event,
- EmpathyNewChatroomDialog *self)
-{
- gboolean expanded;
-
- expanded = gtk_expander_get_expanded (
- GTK_EXPANDER (self->priv->expander_browse));
- if (expanded)
- new_chatroom_dialog_browse_start (self);
-
- return FALSE;
-}
-
-static GObject *
-empathy_new_chatroom_dialog_constructor (GType type,
- guint n_props,
- GObjectConstructParam *props)
-{
- GObject *retval;
-
- if (dialog_p)
- {
- retval = G_OBJECT (dialog_p);
- g_object_ref (retval);
- }
- else
- {
- retval = G_OBJECT_CLASS (
- empathy_new_chatroom_dialog_parent_class)->constructor (type,
- n_props, props);
-
- dialog_p = EMPATHY_NEW_CHATROOM_DIALOG (retval);
- g_object_add_weak_pointer (retval, (gpointer) &dialog_p);
- }
-
- return retval;
-}
-
-GtkWidget *
-empathy_new_chatroom_dialog_show (GtkWindow *parent)
-{
- GtkWidget *dialog;
-
- dialog = g_object_new (EMPATHY_TYPE_NEW_CHATROOM_DIALOG, NULL);
-
- if (parent != NULL)
- {
- gtk_window_set_transient_for (GTK_WINDOW (dialog),
- GTK_WINDOW (parent));
- }
-
- gtk_window_present (GTK_WINDOW (dialog));
- return dialog;
-}
-
-static void
-empathy_new_chatroom_dialog_dispose (GObject *object)
-{
- EmpathyNewChatroomDialog *self = EMPATHY_NEW_CHATROOM_DIALOG (object);
- void (*chain_up) (GObject *) =
- ((GObjectClass *) empathy_new_chatroom_dialog_parent_class)->dispose;
-
- g_clear_object (&self->priv->room_list);
- g_clear_object (&self->priv->model);
-
- if (self->priv->account != NULL)
- {
- g_signal_handler_disconnect (self->priv->account,
- self->priv->status_changed_id);
- g_clear_object (&self->priv->account);
- }
-
- g_clear_object (&self->priv->gsettings);
-
- if (chain_up != NULL)
- chain_up (object);
-}
-
-static void
-empathy_new_chatroom_dialog_class_init (EmpathyNewChatroomDialogClass *klass)
-{
- GObjectClass *oclass = G_OBJECT_CLASS (klass);
- GtkDialogClass *dialog_class = GTK_DIALOG_CLASS (klass);
-
- oclass->constructor = empathy_new_chatroom_dialog_constructor;
- oclass->dispose = empathy_new_chatroom_dialog_dispose;
-
- dialog_class->response = empathy_new_chatroom_dialog_response;
-
- g_type_class_add_private (klass, sizeof (EmpathyNewChatroomDialogPriv));
-}
-
-static void
-empathy_new_chatroom_dialog_init (EmpathyNewChatroomDialog *self)
-{
- GtkBuilder *gui;
- GtkSizeGroup *size_group;
- gchar *filename;
- GtkWidget *vbox, *content;
-
- self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self,
- EMPATHY_TYPE_NEW_CHATROOM_DIALOG, EmpathyNewChatroomDialogPriv);
-
- filename = empathy_file_lookup ("empathy-new-chatroom-dialog.ui", "src");
- gui = tpaw_builder_get_file (filename,
- "vbox_new_chatroom", &vbox,
- "table_grid", &self->priv->table_grid,
- "label_account", &self->priv->label_account,
- "label_server", &self->priv->label_server,
- "label_room", &self->priv->label_room,
- "entry_server", &self->priv->entry_server,
- "entry_room", &self->priv->entry_room,
- "treeview", &self->priv->treeview,
- "expander_browse", &self->priv->expander_browse,
- "hbox_expander", &self->priv->hbox_expander,
- "label_error_message", &self->priv->label_error_message,
- "viewport_error", &self->priv->viewport_error,
- NULL);
- g_free (filename);
-
- tpaw_builder_connect (gui, self,
- "entry_server", "changed", new_chatroom_dialog_entry_changed_cb,
- "entry_server", "activate", new_chatroom_dialog_entry_server_activate_cb,
- "entry_server", "focus-out-event",
- new_chatroom_dialog_entry_server_focus_out_cb,
- "entry_room", "changed", new_chatroom_dialog_entry_changed_cb,
- "expander_browse", "activate",
- new_chatroom_dialog_expander_browse_activate_cb,
- "button_close_error", "clicked",
- new_chatroom_dialog_button_close_error_clicked_cb,
- NULL);
-
- /* Create dialog */
- content = gtk_dialog_get_content_area (GTK_DIALOG (self));
- gtk_container_add (GTK_CONTAINER (content), vbox);
-
- gtk_dialog_add_button (GTK_DIALOG (self), GTK_STOCK_CANCEL,
- GTK_RESPONSE_CANCEL);
- self->priv->button_join = gtk_dialog_add_button (GTK_DIALOG (self),
- _("Join"), GTK_RESPONSE_OK);
-
- gtk_dialog_set_default_response (GTK_DIALOG (self), GTK_RESPONSE_OK);
-
- gtk_window_set_title (GTK_WINDOW (self), _("Join Room"));
- gtk_window_set_role (GTK_WINDOW (self), "join_new_chatroom");
-
- g_object_unref (gui);
-
- /* Label alignment */
- size_group = gtk_size_group_new (GTK_SIZE_GROUP_HORIZONTAL);
-
- gtk_size_group_add_widget (size_group, self->priv->label_account);
- gtk_size_group_add_widget (size_group, self->priv->label_server);
- gtk_size_group_add_widget (size_group, self->priv->label_room);
-
- g_object_unref (size_group);
-
- /* Set up chatrooms treeview */
- new_chatroom_dialog_model_setup (self);
-
- /* Add throbber */
- self->priv->throbber = gtk_spinner_new ();
- gtk_box_pack_start (GTK_BOX (self->priv->hbox_expander), self->priv->throbber,
- TRUE, TRUE, 0);
-
- self->priv->gsettings = g_settings_new (EMPATHY_PREFS_CHAT_SCHEMA);
-
- /* Account chooser for custom */
- self->priv->account_chooser = empathy_account_chooser_new ();
- empathy_account_chooser_set_filter (
- EMPATHY_ACCOUNT_CHOOSER (self->priv->account_chooser),
- empathy_account_chooser_filter_supports_chatrooms, NULL);
- gtk_grid_attach (GTK_GRID (self->priv->table_grid),
- self->priv->account_chooser, 1, 0, 1, 1);
- gtk_widget_show (self->priv->account_chooser);
-
- g_signal_connect (EMPATHY_ACCOUNT_CHOOSER (self->priv->account_chooser),
- "ready", G_CALLBACK (new_chatroom_dialog_account_ready_cb), self);
- g_signal_connect (GTK_COMBO_BOX (self->priv->account_chooser), "changed",
- G_CALLBACK (new_chatroom_dialog_account_changed_cb), self);
- new_chatroom_dialog_account_changed_cb (
- GTK_COMBO_BOX (self->priv->account_chooser), self);
-}
diff --git a/src/empathy-new-chatroom-dialog.h b/src/empathy-new-chatroom-dialog.h
deleted file mode 100644
index 31212cb5..00000000
--- a/src/empathy-new-chatroom-dialog.h
+++ /dev/null
@@ -1,76 +0,0 @@
-/*
- * Copyright (C) 2006-2007 Imendio AB
- * Copyright (C) 2007-2011 Collabora Ltd.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301 USA
- *
- * Authors: Martyn Russell <martyn@imendio.com>
- * Xavier Claessens <xclaesse@gmail.com>
- */
-
-#ifndef __EMPATHY_NEW_CHATROOM_DIALOG_H__
-#define __EMPATHY_NEW_CHATROOM_DIALOG_H__
-
-#include <gtk/gtk.h>
-
-G_BEGIN_DECLS
-
-typedef struct _EmpathyNewChatroomDialog EmpathyNewChatroomDialog;
-typedef struct _EmpathyNewChatroomDialogClass EmpathyNewChatroomDialogClass;
-typedef struct _EmpathyNewChatroomDialogPriv EmpathyNewChatroomDialogPriv;
-
-struct _EmpathyNewChatroomDialogClass
-{
- /*<private>*/
- GtkDialogClass parent_class;
-};
-
-struct _EmpathyNewChatroomDialog
-{
- /*<private>*/
- GtkDialog parent;
- EmpathyNewChatroomDialogPriv *priv;
-};
-
-GType empathy_new_chatroom_dialog_get_type (void);
-
-/* TYPE MACROS */
-#define EMPATHY_TYPE_NEW_CHATROOM_DIALOG \
- (empathy_new_chatroom_dialog_get_type ())
-#define EMPATHY_NEW_CHATROOM_DIALOG(obj) \
- (G_TYPE_CHECK_INSTANCE_CAST((obj), \
- EMPATHY_TYPE_NEW_CHATROOM_DIALOG, \
- EmpathyNewChatroomDialog))
-#define EMPATHY_NEW_CHATROOM_DIALOG_CLASS(klass) \
- (G_TYPE_CHECK_CLASS_CAST((klass), \
- EMPATHY_TYPE_NEW_CHATROOM_DIALOG, \
- EmpathyNewChatroomDialogClass))
-#define EMPATHY_IS_NEW_CHATROOM_DIALOG(obj) \
- (G_TYPE_CHECK_INSTANCE_TYPE((obj), \
- EMPATHY_TYPE_NEW_CHATROOM_DIALOG))
-#define EMPATHY_IS_NEW_CHATROOM_DIALOG_CLASS(klass) \
- (G_TYPE_CHECK_CLASS_TYPE((klass), \
- EMPATHY_TYPE_NEW_CHATROOM_DIALOG))
-#define EMPATHY_NEW_CHATROOM_DIALOG_GET_CLASS(obj) \
- (G_TYPE_INSTANCE_GET_CLASS ((obj), \
- EMPATHY_TYPE_NEW_CHATROOM_DIALOG, \
- EmpathyNewChatroomDialogClass))
-
-GtkWidget * empathy_new_chatroom_dialog_show (GtkWindow *parent);
-
-G_END_DECLS
-
-#endif /* #ifndef __EMPATHY_NEW_CHATROOM_DIALOG_H__*/
diff --git a/src/empathy-new-chatroom-dialog.ui b/src/empathy-new-chatroom-dialog.ui
deleted file mode 100644
index ee2d74bd..00000000
--- a/src/empathy-new-chatroom-dialog.ui
+++ /dev/null
@@ -1,235 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<interface>
- <!-- interface-requires gtk+ 3.0 -->
- <object class="GtkVBox" id="vbox_new_chatroom">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="border_width">5</property>
- <property name="spacing">5</property>
- <child>
- <object class="GtkGrid" id="table_grid">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="row_spacing">5</property>
- <property name="column_spacing">5</property>
- <child>
- <object class="GtkEntry" id="entry_room">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="has_tooltip">True</property>
- <property name="tooltip_markup" translatable="yes">Enter the room name to join here or click on one or more rooms in the list.</property>
- <property name="tooltip_text" translatable="yes">Enter the room name to join here or click on one or more rooms in the list.</property>
- <property name="activates_default">True</property>
- <property name="width_chars">25</property>
- </object>
- <packing>
- <property name="left_attach">1</property>
- <property name="top_attach">1</property>
- <property name="width">1</property>
- <property name="height">1</property>
- </packing>
- </child>
- <child>
- <object class="GtkLabel" id="label_room">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="xalign">0</property>
- <property name="label" translatable="yes">_Room:</property>
- <property name="use_underline">True</property>
- <property name="mnemonic_widget">entry_room</property>
- </object>
- <packing>
- <property name="left_attach">0</property>
- <property name="top_attach">1</property>
- <property name="width">1</property>
- <property name="height">1</property>
- </packing>
- </child>
- <child>
- <object class="GtkEntry" id="entry_server">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="has_tooltip">True</property>
- <property name="tooltip_markup" translatable="yes">Enter the server which hosts the room, or leave it empty if the room is on the current account&amp;apos;s server</property>
- <property name="tooltip_text" translatable="yes">Enter the server which hosts the room, or leave it empty if the room is on the current account's server</property>
- <property name="width_chars">25</property>
- </object>
- <packing>
- <property name="left_attach">1</property>
- <property name="top_attach">2</property>
- <property name="width">1</property>
- <property name="height">1</property>
- </packing>
- </child>
- <child>
- <object class="GtkLabel" id="label_server">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="xalign">0</property>
- <property name="label" translatable="yes">_Server:</property>
- <property name="use_underline">True</property>
- <property name="mnemonic_widget">entry_server</property>
- </object>
- <packing>
- <property name="left_attach">0</property>
- <property name="top_attach">2</property>
- <property name="width">1</property>
- <property name="height">1</property>
- </packing>
- </child>
- <child>
- <object class="GtkLabel" id="label_account">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="xalign">0</property>
- <property name="label" translatable="yes">Account:</property>
- </object>
- <packing>
- <property name="left_attach">0</property>
- <property name="top_attach">0</property>
- <property name="width">1</property>
- <property name="height">1</property>
- </packing>
- </child>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkExpander" id="expander_browse">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <child>
- <object class="GtkVBox" id="vbox1">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="spacing">2</property>
- <child>
- <object class="GtkViewport" id="viewport_error">
- <property name="can_focus">False</property>
- <property name="resize_mode">queue</property>
- <child>
- <object class="GtkHBox" id="hbox1">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <child>
- <object class="GtkImage" id="image1">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="stock">gtk-dialog-error</property>
- <property name="icon-size">1</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="padding">5</property>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkLabel" id="label_error_message">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="xalign">0</property>
- <property name="xpad">10</property>
- <property name="label" translatable="yes">Couldn't load room list</property>
- </object>
- <packing>
- <property name="expand">True</property>
- <property name="fill">True</property>
- <property name="position">1</property>
- </packing>
- </child>
- <child>
- <object class="GtkButton" id="button_close_error">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="receives_default">True</property>
- <property name="use_action_appearance">False</property>
- <property name="relief">none</property>
- <child>
- <object class="GtkImage" id="image2">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="stock">gtk-close</property>
- <property name="icon-size">1</property>
- </object>
- </child>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">2</property>
- </packing>
- </child>
- </object>
- </child>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkScrolledWindow" id="scrolledwindow2">
- <property name="width_request">350</property>
- <property name="height_request">150</property>
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="hscrollbar_policy">never</property>
- <property name="shadow_type">in</property>
- <child>
- <object class="GtkTreeView" id="treeview">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="search_column">0</property>
- <property name="show_expanders">False</property>
- <child internal-child="selection">
- <object class="GtkTreeSelection" id="treeview-selection"/>
- </child>
- </object>
- </child>
- </object>
- <packing>
- <property name="expand">True</property>
- <property name="fill">True</property>
- <property name="position">1</property>
- </packing>
- </child>
- </object>
- </child>
- <child type="label">
- <object class="GtkHBox" id="hbox_expander">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="spacing">6</property>
- <child>
- <object class="GtkLabel" id="label1">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="label" translatable="yes">Room List</property>
- </object>
- <packing>
- <property name="expand">True</property>
- <property name="fill">True</property>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <placeholder/>
- </child>
- </object>
- </child>
- </object>
- <packing>
- <property name="expand">True</property>
- <property name="fill">True</property>
- <property name="position">1</property>
- </packing>
- </child>
- </object>
-</interface>
diff --git a/src/empathy-notifications-approver.c b/src/empathy-notifications-approver.c
deleted file mode 100644
index fb36f2ac..00000000
--- a/src/empathy-notifications-approver.c
+++ /dev/null
@@ -1,448 +0,0 @@
-/* * Copyright (C) 2009 Collabora Ltd.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- *
- * Authors: Guillaume Desmottes <guillaume.desmottes@collabora.co.uk>
- */
-
-#include "config.h"
-#include "empathy-notifications-approver.h"
-
-#include <glib/gi18n.h>
-
-#include "empathy-call-utils.h"
-#include "empathy-event-manager.h"
-#include "empathy-notify-manager.h"
-
-#define DEBUG_FLAG EMPATHY_DEBUG_OTHER
-#include "empathy-debug.h"
-
-struct _EmpathyNotificationsApproverPrivate
-{
- EmpathyEventManager *event_mgr;
- EmpathyNotifyManager *notify_mgr;
-
- NotifyNotification *notification;
- EmpathyEvent *event;
-};
-
-G_DEFINE_TYPE (EmpathyNotificationsApprover, empathy_notifications_approver,
- G_TYPE_OBJECT);
-
-static EmpathyNotificationsApprover *notifications_approver = NULL;
-
-static GObject *
-notifications_approver_constructor (GType type,
- guint n_construct_params,
- GObjectConstructParam *construct_params)
-{
- GObject *retval;
-
- if (notifications_approver != NULL)
- return g_object_ref (notifications_approver);
-
- retval = G_OBJECT_CLASS (empathy_notifications_approver_parent_class)->
- constructor (type, n_construct_params, construct_params);
-
- notifications_approver = EMPATHY_NOTIFICATIONS_APPROVER (retval);
- g_object_add_weak_pointer (retval, (gpointer) &notifications_approver);
-
- return retval;
-}
-
-static void
-notifications_approver_dispose (GObject *object)
-{
- EmpathyNotificationsApprover *self = (EmpathyNotificationsApprover *) object;
-
- tp_clear_object (&self->priv->event_mgr);
- tp_clear_object (&self->priv->notify_mgr);
-
- if (self->priv->notification != NULL)
- {
- notify_notification_close (self->priv->notification, NULL);
- tp_clear_object (&self->priv->notification);
- }
-
- G_OBJECT_CLASS (empathy_notifications_approver_parent_class)->dispose (
- object);
-}
-
-static void
-empathy_notifications_approver_class_init (
- EmpathyNotificationsApproverClass *klass)
-{
- GObjectClass *object_class = G_OBJECT_CLASS (klass);
-
- object_class->dispose = notifications_approver_dispose;
- object_class->constructor = notifications_approver_constructor;
-
- g_type_class_add_private (object_class,
- sizeof (EmpathyNotificationsApproverPrivate));
-}
-
-static void
-notification_closed_cb (NotifyNotification *notification,
- EmpathyNotificationsApprover *self)
-{
- if (self->priv->notification == notification)
- tp_clear_object (&self->priv->notification);
-}
-
-static void
-notification_close_helper (EmpathyNotificationsApprover *self)
-{
- if (self->priv->notification != NULL)
- {
- notify_notification_close (self->priv->notification, NULL);
- tp_clear_object (&self->priv->notification);
- }
-}
-
-static void
-notification_approve_no_video_cb (NotifyNotification *notification,
- gchar *action,
- EmpathyNotificationsApprover *self)
-{
- if (self->priv->event)
- {
- empathy_call_channel_send_video (
- TP_CALL_CHANNEL (self->priv->event->handler_instance),
- FALSE);
- empathy_event_approve (self->priv->event);
- }
-}
-
-static void
-notification_approve_cb (NotifyNotification *notification,
- gchar *action,
- EmpathyNotificationsApprover *self)
-{
- if (self->priv->event != NULL)
- empathy_event_approve (self->priv->event);
-}
-
-static void
-notification_decline_cb (NotifyNotification *notification,
- gchar *action,
- EmpathyNotificationsApprover *self)
-{
- if (self->priv->event != NULL)
- empathy_event_decline (self->priv->event);
-}
-
-static void
-notification_decline_subscription_cb (NotifyNotification *notification,
- gchar *action,
- EmpathyNotificationsApprover *self)
-{
- if (self->priv->event == NULL)
- return;
-
- empathy_contact_remove_from_contact_list (self->priv->event->contact);
-
- empathy_event_remove (self->priv->event);
-}
-
-static void
-notification_accept_subscription_cb (NotifyNotification *notification,
- gchar *action,
- EmpathyNotificationsApprover *self)
-{
- if (self->priv->event == NULL)
- return;
-
- empathy_contact_add_to_contact_list (self->priv->event->contact, "");
-
- empathy_event_remove (self->priv->event);
-}
-
-static void
-add_notification_actions (EmpathyNotificationsApprover *self,
- NotifyNotification *notification)
-{
- gboolean video;
-
- switch (self->priv->event->type) {
- case EMPATHY_EVENT_TYPE_CHAT:
- case EMPATHY_EVENT_TYPE_MENTIONED:
- notify_notification_add_action (notification,
- "respond", _("Respond"), (NotifyActionCallback) notification_approve_cb,
- self, NULL);
- break;
-
- case EMPATHY_EVENT_TYPE_CALL:
- video = tp_call_channel_has_initial_video (
- TP_CALL_CHANNEL (self->priv->event->handler_instance), NULL);
-
- notify_notification_add_action (notification,
- "reject", _("Reject"), (NotifyActionCallback) notification_decline_cb,
- self, NULL);
-
- if (video && self->priv->event->type == EMPATHY_EVENT_TYPE_CALL)
- notify_notification_add_action (notification,
- "answer-no-video", _("Answer"),
- (NotifyActionCallback) notification_approve_no_video_cb,
- self, NULL);
-
- notify_notification_add_action (notification,
- "answer", video ? _("Answer with video") : _("Answer"),
- (NotifyActionCallback) notification_approve_cb,
- self, NULL);
- break;
-
- case EMPATHY_EVENT_TYPE_TRANSFER:
- case EMPATHY_EVENT_TYPE_INVITATION:
- notify_notification_add_action (notification,
- "decline", _("Decline"), (NotifyActionCallback) notification_decline_cb,
- self, NULL);
-
- notify_notification_add_action (notification,
- "accept", _("Accept"), (NotifyActionCallback) notification_approve_cb,
- self, NULL);
- break;
-
- case EMPATHY_EVENT_TYPE_SUBSCRIPTION:
- notify_notification_add_action (notification,
- "decline", _("Decline"),
- (NotifyActionCallback) notification_decline_subscription_cb,
- self, NULL);
-
- notify_notification_add_action (notification,
- "accept", _("Accept"),
- (NotifyActionCallback) notification_accept_subscription_cb,
- self, NULL);
- break;
-
- case EMPATHY_EVENT_TYPE_AUTH:
- notify_notification_add_action (notification,
- /* translators: the 'Provide' button is displayed in a notification
- * bubble when Empathy is asking for an account password; clicking on it
- * brings the password popup. */
- "provide", _("Provide"), (NotifyActionCallback) notification_approve_cb,
- self, NULL);
- break;
-
- default:
- break;
- }
-}
-
-static gboolean
-notification_is_urgent (EmpathyNotificationsApprover *self,
- NotifyNotification *notification)
-{
- /* Mark as urgent all the notifications with which user should
- * interact ASAP */
- switch (self->priv->event->type) {
- case EMPATHY_EVENT_TYPE_CHAT:
- case EMPATHY_EVENT_TYPE_CALL:
- case EMPATHY_EVENT_TYPE_TRANSFER:
- case EMPATHY_EVENT_TYPE_INVITATION:
- case EMPATHY_EVENT_TYPE_AUTH:
- case EMPATHY_EVENT_TYPE_MENTIONED:
- return TRUE;
-
- case EMPATHY_EVENT_TYPE_SUBSCRIPTION:
- case EMPATHY_EVENT_TYPE_PRESENCE_ONLINE:
- case EMPATHY_EVENT_TYPE_PRESENCE_OFFLINE:
- return FALSE;
- }
-
- return FALSE;
-}
-
-static const gchar *
-get_category_for_event_type (EmpathyEventType type)
-{
-#define CASE(x) \
- case EMPATHY_EVENT_TYPE_##x: \
- return EMPATHY_NOTIFICATION_CATEGORY_##x;
- switch (type) {
- CASE(CHAT)
- CASE(PRESENCE_ONLINE)
- CASE(PRESENCE_OFFLINE)
- CASE(CALL)
- CASE(TRANSFER)
- CASE(INVITATION)
- CASE(AUTH)
- CASE(SUBSCRIPTION)
- CASE(MENTIONED)
- }
-#undef CASE
-
- return NULL;
-}
-
-static void
-update_notification (EmpathyNotificationsApprover *self)
-{
- GdkPixbuf *pixbuf = NULL;
- gchar *message_esc = NULL;
- gboolean has_x_canonical_append;
- NotifyNotification *notification;
-
- if (!empathy_notify_manager_notification_is_enabled (self->priv->notify_mgr))
- {
- /* always close the notification if this happens */
- notification_close_helper (self);
- return;
- }
-
- if (self->priv->event == NULL)
- {
- notification_close_helper (self);
- return;
- }
-
- if (self->priv->event->message != NULL)
- message_esc = g_markup_escape_text (self->priv->event->message, -1);
-
- has_x_canonical_append = empathy_notify_manager_has_capability (
- self->priv->notify_mgr, EMPATHY_NOTIFY_MANAGER_CAP_X_CANONICAL_APPEND);
-
- if (self->priv->notification != NULL && ! has_x_canonical_append)
- {
- /* if the notification server does NOT supports x-canonical-append, it is
- * better to not use notify_notification_update to avoid
- * overwriting the current notification message */
- notification = g_object_ref (self->priv->notification);
-
- notify_notification_update (notification,
- self->priv->event->header, message_esc, NULL);
- }
- else
- {
- const gchar *category;
-
- /* if the notification server supports x-canonical-append,
- * the hint will be added, so that the message from the
- * just created notification will be automatically appended
- * to an existing notification with the same title.
- * In this way the previous message will not be lost: the new
- * message will appear below it, in the same notification */
- notification = empathy_notify_manager_create_notification (
- self->priv->event->header, message_esc, NULL);
-
- if (self->priv->notification == NULL)
- {
- self->priv->notification = g_object_ref (notification);
-
- g_signal_connect (notification, "closed",
- G_CALLBACK (notification_closed_cb), self);
- }
-
- if (has_x_canonical_append)
- {
- notify_notification_set_hint (notification,
- EMPATHY_NOTIFY_MANAGER_CAP_X_CANONICAL_APPEND,
- g_variant_new_boolean (TRUE));
- }
-
- if (empathy_notify_manager_has_capability (self->priv->notify_mgr,
- EMPATHY_NOTIFY_MANAGER_CAP_ACTIONS))
- add_notification_actions (self, notification);
-
- if (notification_is_urgent (self, notification))
- notify_notification_set_urgency (notification, NOTIFY_URGENCY_CRITICAL);
-
- category = get_category_for_event_type (self->priv->event->type);
- if (category != NULL)
- {
- notify_notification_set_hint (notification,
- EMPATHY_NOTIFY_MANAGER_CAP_CATEGORY,
- g_variant_new_string (category));
- }
- }
-
- pixbuf = empathy_notify_manager_get_pixbuf_for_notification (
- self->priv->notify_mgr, self->priv->event->contact,
- self->priv->event->icon_name);
-
- if (pixbuf != NULL)
- {
- notify_notification_set_image_from_pixbuf (notification, pixbuf);
- g_object_unref (pixbuf);
- }
-
- notify_notification_show (notification, NULL);
-
- g_free (message_esc);
- g_object_unref (notification);
-}
-
-static void
-event_added_cb (EmpathyEventManager *manager,
- EmpathyEvent *event,
- EmpathyNotificationsApprover *self)
-{
- if (self->priv->event != NULL)
- return;
-
- self->priv->event = event;
-
- update_notification (self);
-}
-
-static void
-event_removed_cb (EmpathyEventManager *manager,
- EmpathyEvent *event,
- EmpathyNotificationsApprover *self)
-{
- if (event != self->priv->event)
- return;
-
- self->priv->event = empathy_event_manager_get_top_event (
- self->priv->event_mgr);
-
- update_notification (self);
-}
-
-static void
-event_updated_cb (EmpathyEventManager *manager,
- EmpathyEvent *event,
- EmpathyNotificationsApprover *self)
-{
- if (event != self->priv->event)
- return;
-
- if (empathy_notify_manager_notification_is_enabled (self->priv->notify_mgr))
- update_notification (self);
-}
-
-static void
-empathy_notifications_approver_init (EmpathyNotificationsApprover *self)
-{
- EmpathyNotificationsApproverPrivate *priv = G_TYPE_INSTANCE_GET_PRIVATE (self,
- EMPATHY_TYPE_NOTIFICATIONS_APPROVER, EmpathyNotificationsApproverPrivate);
-
- self->priv = priv;
-
- self->priv->event_mgr = empathy_event_manager_dup_singleton ();
- self->priv->notify_mgr = empathy_notify_manager_dup_singleton ();
-
- tp_g_signal_connect_object (self->priv->event_mgr, "event-added",
- G_CALLBACK (event_added_cb), self, 0);
- tp_g_signal_connect_object (priv->event_mgr, "event-removed",
- G_CALLBACK (event_removed_cb), self, 0);
- tp_g_signal_connect_object (priv->event_mgr, "event-updated",
- G_CALLBACK (event_updated_cb), self, 0);
-}
-
-EmpathyNotificationsApprover *
-empathy_notifications_approver_dup_singleton (void)
-{
- return g_object_new (EMPATHY_TYPE_NOTIFICATIONS_APPROVER, NULL);
-}
diff --git a/src/empathy-notifications-approver.h b/src/empathy-notifications-approver.h
deleted file mode 100644
index c247c899..00000000
--- a/src/empathy-notifications-approver.h
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- * Copyright (C) 2009 Collabora Ltd.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- *
- * Authors: Guillaume Desmottes <guillaume.desmottes@collabora.co.uk>
- */
-
-#ifndef __EMPATHY_NOTIFICATIONS_APPROVER_H__
-#define __EMPATHY_NOTIFICATIONS_APPROVER_H__
-
-#include <glib-object.h>
-
-G_BEGIN_DECLS
-
-#define EMPATHY_TYPE_NOTIFICATIONS_APPROVER (empathy_notifications_approver_get_type ())
-#define EMPATHY_NOTIFICATIONS_APPROVER(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), EMPATHY_TYPE_NOTIFICATIONS_APPROVER, EmpathyNotificationsApprover))
-#define EMPATHY_NOTIFICATIONS_APPROVER_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), EMPATHY_TYPE_NOTIFICATIONS_APPROVER, EmpathyNotificationsApproverClass))
-#define EMPATHY_IS_NOTIFICATIONS_APPROVER(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), EMPATHY_TYPE_NOTIFICATIONS_APPROVER))
-#define EMPATHY_IS_NOTIFICATIONS_APPROVER_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), EMPATHY_TYPE_NOTIFICATIONS_APPROVER))
-#define EMPATHY_NOTIFICATIONS_APPROVER_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), EMPATHY_TYPE_NOTIFICATIONS_APPROVER, EmpathyNotificationsApproverClass))
-
-typedef struct _EmpathyNotificationsApprover EmpathyNotificationsApprover;
-typedef struct _EmpathyNotificationsApproverClass EmpathyNotificationsApproverClass;
-typedef struct _EmpathyNotificationsApproverPrivate EmpathyNotificationsApproverPrivate;
-
-struct _EmpathyNotificationsApprover
-{
- GObject parent;
- EmpathyNotificationsApproverPrivate *priv;
-};
-
-struct _EmpathyNotificationsApproverClass
-{
- GObjectClass parent_class;
-};
-
-GType empathy_notifications_approver_get_type (void) G_GNUC_CONST;
-
-/* Get the notifications_approver singleton */
-EmpathyNotificationsApprover * empathy_notifications_approver_dup_singleton (
- void);
-
-G_END_DECLS
-
-#endif /* __EMPATHY_NOTIFICATIONS_APPROVER_H__ */
diff --git a/src/empathy-preferences.c b/src/empathy-preferences.c
deleted file mode 100644
index e37bc747..00000000
--- a/src/empathy-preferences.c
+++ /dev/null
@@ -1,1164 +0,0 @@
-/* -*- 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., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301 USA
- *
- * Authors: Mikael Hallendal <micke@imendio.com>
- * Richard Hult <richard@imendio.com>
- * Martyn Russell <martyn@imendio.com>
- * Danielle Madeley <danielle.madeley@collabora.co.uk>
- */
-
-#include "config.h"
-#include "empathy-preferences.h"
-
-#include <glib/gi18n.h>
-#include <tp-account-widgets/tpaw-builder.h>
-
-#include "empathy-client-factory.h"
-#include "empathy-gsettings.h"
-#include "empathy-spell.h"
-#include "empathy-theme-manager.h"
-#include "empathy-ui-utils.h"
-#include "empathy-utils.h"
-
-#define DEBUG_FLAG EMPATHY_DEBUG_OTHER
-#include "empathy-debug.h"
-
-G_DEFINE_TYPE (EmpathyPreferences, empathy_preferences, GTK_TYPE_DIALOG);
-
-#define GET_PRIV(self) ((EmpathyPreferencesPriv *)((EmpathyPreferences *) self)->priv)
-
-static const gchar * empathy_preferences_tabs[] =
-{
- "general",
- "notifications",
- "sounds",
- "calls",
- "location",
- "spell",
- "themes",
-};
-
-struct _EmpathyPreferencesPriv {
- GtkWidget *notebook;
-
- GtkWidget *label_general_behavior;
- GtkWidget *checkbutton_events_notif_area;
- GtkWidget *checkbutton_autoconnect;
-
- GtkWidget *treeview_sounds;
- GtkWidget *treeview_spell_checker;
-
- GtkWidget *vbox_chat_theme;
- GtkWidget *combobox_chat_theme;
- GtkWidget *combobox_chat_theme_variant;
- GtkWidget *hbox_chat_theme_variant;
- GtkWidget *sw_chat_theme_preview;
- EmpathyThemeAdium *chat_theme_preview;
- EmpathyThemeManager *theme_manager;
-
- GSettings *gsettings;
- GSettings *gsettings_chat;
- GSettings *gsettings_call;
- GSettings *gsettings_loc;
- GSettings *gsettings_notify;
- GSettings *gsettings_sound;
- GSettings *gsettings_ui;
- GSettings *gsettings_logger;
-};
-
-static void preferences_setup_widgets (EmpathyPreferences *preferences,
- GtkBuilder *gui);
-static void preferences_languages_setup (EmpathyPreferences *preferences);
-static void preferences_languages_add (EmpathyPreferences *preferences);
-static void preferences_languages_save (EmpathyPreferences *preferences);
-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,
- GList *languages);
-static void preferences_languages_cell_toggled_cb (GtkCellRendererToggle *cell,
- gchar *path_string,
- EmpathyPreferences *preferences);
-
-enum {
- COL_LANG_ENABLED,
- COL_LANG_CODE,
- COL_LANG_NAME,
- COL_LANG_COUNT
-};
-
-enum {
- COL_THEME_VISIBLE_NAME,
- COL_THEME_ADIUM_NAME,
- COL_THEME_ADIUM_INFO,
- COL_THEME_COUNT
-};
-
-enum {
- COL_VARIANT_NAME,
- COL_VARIANT_DEFAULT,
- COL_VARIANT_COUNT
-};
-
-enum {
- COL_SOUND_ENABLED,
- COL_SOUND_NAME,
- COL_SOUND_KEY,
- COL_SOUND_COUNT
-};
-
-typedef struct {
- const char *name;
- const char *key;
-} SoundEventEntry;
-
-/* TODO: add phone related sounds also? */
-static SoundEventEntry sound_entries [] = {
- { N_("Message received"), EMPATHY_PREFS_SOUNDS_INCOMING_MESSAGE },
- { N_("Message sent"), EMPATHY_PREFS_SOUNDS_OUTGOING_MESSAGE },
- { N_("New conversation"), EMPATHY_PREFS_SOUNDS_NEW_CONVERSATION },
- { N_("Contact comes online"), EMPATHY_PREFS_SOUNDS_CONTACT_LOGIN },
- { N_("Contact goes offline"), EMPATHY_PREFS_SOUNDS_CONTACT_LOGOUT },
- { N_("Account connected"), EMPATHY_PREFS_SOUNDS_SERVICE_LOGIN },
- { N_("Account disconnected"), EMPATHY_PREFS_SOUNDS_SERVICE_LOGOUT }
-};
-
-static void
-preferences_setup_widgets (EmpathyPreferences *preferences,
- GtkBuilder *gui)
-{
- EmpathyPreferencesPriv *priv = GET_PRIV (preferences);
-#define BIND_ACTIVE(schema, key, widget) \
- g_settings_bind (priv->gsettings_##schema, EMPATHY_PREFS_##key, \
- gtk_builder_get_object (gui, widget), "active", \
- G_SETTINGS_BIND_DEFAULT);
-
- BIND_ACTIVE (notify, NOTIFICATIONS_ENABLED,
- "checkbutton_notifications_enabled");
- BIND_ACTIVE (notify, NOTIFICATIONS_DISABLED_AWAY,
- "checkbutton_notifications_disabled_away");
- BIND_ACTIVE (notify, NOTIFICATIONS_FOCUS,
- "checkbutton_notifications_focus");
- BIND_ACTIVE (notify, NOTIFICATIONS_CONTACT_SIGNIN,
- "checkbutton_notifications_contact_signin");
- BIND_ACTIVE (notify, NOTIFICATIONS_CONTACT_SIGNOUT,
- "checkbutton_notifications_contact_signout");
-
- BIND_ACTIVE (sound, SOUNDS_ENABLED,
- "checkbutton_sounds_enabled");
- BIND_ACTIVE (sound, SOUNDS_DISABLED_AWAY,
- "checkbutton_sounds_disabled_away");
-
- BIND_ACTIVE (ui, UI_SHOW_OFFLINE,
- "checkbutton_show_offline");
- BIND_ACTIVE (ui, UI_SHOW_GROUPS,
- "checkbutton_show_groups");
- BIND_ACTIVE (ui, UI_SEPARATE_CHAT_WINDOWS,
- "radiobutton_chats_new_windows");
- BIND_ACTIVE (ui, UI_EVENTS_NOTIFY_AREA,
- "checkbutton_events_notif_area");
- BIND_ACTIVE (ui, UI_SHOW_BALANCES,
- "checkbutton_show_balances");
-
- BIND_ACTIVE (chat, CHAT_SHOW_SMILEYS,
- "checkbutton_show_smileys");
- BIND_ACTIVE (chat, CHAT_SHOW_CONTACTS_IN_ROOMS,
- "checkbutton_show_contacts_in_rooms");
-
- BIND_ACTIVE (call, CALL_ECHO_CANCELLATION,
- "call_echo_cancellation");
-
- BIND_ACTIVE (loc, LOCATION_PUBLISH,
- "checkbutton_location_publish");
- BIND_ACTIVE (loc, LOCATION_RESOURCE_NETWORK,
- "checkbutton_location_resource_network");
- BIND_ACTIVE (loc, LOCATION_RESOURCE_CELL,
- "checkbutton_location_resource_cell");
- BIND_ACTIVE (loc, LOCATION_RESOURCE_GPS,
- "checkbutton_location_resource_gps");
- BIND_ACTIVE (loc, LOCATION_REDUCE_ACCURACY,
- "checkbutton_location_reduce_accuracy");
-
- BIND_ACTIVE (logger, LOGGER_ENABLED,
- "checkbutton_logging");
-
-#undef BIND_ACTIVE
-
-#define BIND_SENSITIVE(schema, key, widget) \
- g_settings_bind (priv->gsettings_##schema, EMPATHY_PREFS_##key, \
- gtk_builder_get_object (gui, widget), "sensitive", \
- G_SETTINGS_BIND_GET);
- /* N.B. BIND_SENSITIVE() is in addition to the sensitivity setting of
- * BIND_ACTIVE() */
- BIND_SENSITIVE (notify, NOTIFICATIONS_ENABLED,
- "checkbutton_notifications_disabled_away");
- BIND_SENSITIVE (notify, NOTIFICATIONS_ENABLED,
- "checkbutton_notifications_focus");
- BIND_SENSITIVE (notify, NOTIFICATIONS_ENABLED,
- "checkbutton_notifications_contact_signin");
- BIND_SENSITIVE (notify, NOTIFICATIONS_ENABLED,
- "checkbutton_notifications_contact_signout");
-
- BIND_SENSITIVE (sound, SOUNDS_ENABLED,
- "checkbutton_sounds_disabled_away");
- BIND_SENSITIVE (sound, SOUNDS_ENABLED,
- "treeview_sounds");
-
- BIND_SENSITIVE (loc, LOCATION_PUBLISH,
- "checkbutton_location_resource_network");
- BIND_SENSITIVE (loc, LOCATION_PUBLISH,
- "checkbutton_location_resource_cell");
- BIND_SENSITIVE (loc, LOCATION_PUBLISH,
- "checkbutton_location_resource_gps");
- BIND_SENSITIVE (loc, LOCATION_PUBLISH,
- "checkbutton_location_reduce_accuracy");
-
-#undef BIND_SENSITIVE
-
- g_settings_bind (priv->gsettings,
- EMPATHY_PREFS_AUTOCONNECT,
- gtk_builder_get_object (gui,
- "checkbutton_autoconnect"),
- "active",
- G_SETTINGS_BIND_DEFAULT);
-}
-
-static void
-preferences_sound_cell_toggled_cb (GtkCellRendererToggle *toggle,
- char *path_string,
- EmpathyPreferences *preferences)
-{
- EmpathyPreferencesPriv *priv = GET_PRIV (preferences);
- GtkTreePath *path;
- gboolean instore;
- GtkTreeIter iter;
- GtkTreeView *view;
- GtkTreeModel *model;
- char *key;
-
- view = GTK_TREE_VIEW (priv->treeview_sounds);
- model = gtk_tree_view_get_model (view);
-
- path = gtk_tree_path_new_from_string (path_string);
-
- gtk_tree_model_get_iter (model, &iter, path);
- gtk_tree_model_get (model, &iter, COL_SOUND_KEY, &key,
- COL_SOUND_ENABLED, &instore, -1);
-
- instore ^= 1;
-
- gtk_list_store_set (GTK_LIST_STORE (model), &iter,
- COL_SOUND_ENABLED, instore, -1);
-
- g_settings_set_boolean (priv->gsettings_sound, key, instore);
-
- g_free (key);
- gtk_tree_path_free (path);
-}
-
-static void
-preferences_sound_load (EmpathyPreferences *preferences)
-{
- EmpathyPreferencesPriv *priv = GET_PRIV (preferences);
- guint i;
- GtkTreeView *view;
- GtkListStore *store;
- GtkTreeIter iter;
- gboolean set;
-
- view = GTK_TREE_VIEW (priv->treeview_sounds);
- store = GTK_LIST_STORE (gtk_tree_view_get_model (view));
-
- for (i = 0; i < G_N_ELEMENTS (sound_entries); i++) {
- set = g_settings_get_boolean (priv->gsettings_sound,
- sound_entries[i].key);
-
- gtk_list_store_insert_with_values (store, &iter, i,
- COL_SOUND_NAME, gettext (sound_entries[i].name),
- COL_SOUND_KEY, sound_entries[i].key,
- COL_SOUND_ENABLED, set, -1);
- }
-}
-
-static void
-preferences_sound_setup (EmpathyPreferences *preferences)
-{
- EmpathyPreferencesPriv *priv = GET_PRIV (preferences);
- GtkTreeView *view;
- GtkListStore *store;
- GtkCellRenderer *renderer;
- GtkTreeViewColumn *column;
-
- view = GTK_TREE_VIEW (priv->treeview_sounds);
-
- store = gtk_list_store_new (COL_SOUND_COUNT,
- G_TYPE_BOOLEAN, /* enabled */
- G_TYPE_STRING, /* name */
- G_TYPE_STRING); /* key */
-
- gtk_tree_view_set_model (view, GTK_TREE_MODEL (store));
-
- renderer = gtk_cell_renderer_toggle_new ();
- g_signal_connect (renderer, "toggled",
- G_CALLBACK (preferences_sound_cell_toggled_cb),
- preferences);
-
- column = gtk_tree_view_column_new ();
- gtk_tree_view_column_pack_start (column, renderer, FALSE);
- gtk_tree_view_column_add_attribute (column, renderer,
- "active", COL_SOUND_ENABLED);
-
- renderer = gtk_cell_renderer_text_new ();
- gtk_tree_view_column_pack_start (column, renderer, FALSE);
- gtk_tree_view_column_add_attribute (column, renderer,
- "text", COL_SOUND_NAME);
-
- gtk_tree_view_append_column (view, column);
-
- 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_setup (EmpathyPreferences *preferences)
-{
- EmpathyPreferencesPriv *priv = GET_PRIV (preferences);
- GtkTreeView *view;
- GtkListStore *store;
- GtkTreeSelection *selection;
- GtkTreeViewColumn *column;
- GtkCellRenderer *renderer;
- guint col_offset;
-
- view = GTK_TREE_VIEW (priv->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);
-
- 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)
-{
- EmpathyPreferencesPriv *priv = GET_PRIV (preferences);
- GtkTreeView *view;
- GtkListStore *store;
- GList *codes, *l;
-
- view = GTK_TREE_VIEW (priv->treeview_spell_checker);
- store = GTK_LIST_STORE (gtk_tree_view_get_model (view));
-
- codes = empathy_spell_get_language_codes ();
-
- if (!codes) {
- gtk_widget_set_sensitive (priv->treeview_spell_checker, FALSE);
- }
-
- for (l = codes; l; l = l->next) {
- const gchar *code;
- const gchar *name;
-
- code = l->data;
- name = empathy_spell_get_language_name (code);
- if (!name) {
- continue;
- }
-
- gtk_list_store_insert_with_values (store, NULL, -1,
- COL_LANG_CODE, code,
- COL_LANG_NAME, name,
- -1);
- }
-
- empathy_spell_free_language_codes (codes);
-}
-
-static void
-preferences_languages_save (EmpathyPreferences *preferences)
-{
- EmpathyPreferencesPriv *priv = GET_PRIV (preferences);
- GtkTreeView *view;
- GtkTreeModel *model;
-
- gchar *languages = NULL;
-
- view = GTK_TREE_VIEW (priv->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 */
- g_settings_set_boolean (priv->gsettings_chat,
- EMPATHY_PREFS_CHAT_SPELL_CHECKER_ENABLED,
- languages != NULL);
-
- g_settings_set_string (priv->gsettings_chat,
- EMPATHY_PREFS_CHAT_SPELL_CHECKER_LANGUAGES,
- languages != NULL ? 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)
-{
- EmpathyPreferencesPriv *priv = GET_PRIV (preferences);
- GtkTreeView *view;
- GtkTreeModel *model;
- GList *enabled_codes;
-
- enabled_codes = empathy_spell_get_enabled_language_codes ();
-
- g_settings_set_boolean (priv->gsettings_chat,
- EMPATHY_PREFS_CHAT_SPELL_CHECKER_ENABLED,
- enabled_codes != NULL);
-
- if (enabled_codes == NULL)
- return;
-
- view = GTK_TREE_VIEW (priv->treeview_spell_checker);
- model = gtk_tree_view_get_model (view);
-
- gtk_tree_model_foreach (model,
- (GtkTreeModelForeachFunc) preferences_languages_load_foreach,
- enabled_codes);
-
- g_list_free (enabled_codes);
-}
-
-static gboolean
-preferences_languages_load_foreach (GtkTreeModel *model,
- GtkTreePath *path,
- GtkTreeIter *iter,
- GList *languages)
-{
- gchar *code;
- gboolean found = FALSE;
-
- if (!languages) {
- return TRUE;
- }
-
- gtk_tree_model_get (model, iter, COL_LANG_CODE, &code, -1);
- if (!code) {
- return FALSE;
- }
-
- if (g_list_find_custom (languages, code, (GCompareFunc) strcmp)) {
- found = TRUE;
- }
-
- g_free (code);
- 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)
-{
- EmpathyPreferencesPriv *priv = GET_PRIV (preferences);
- GtkTreeView *view;
- GtkTreeModel *model;
- GtkListStore *store;
- GtkTreePath *path;
- GtkTreeIter iter;
- gboolean enabled;
-
- view = GTK_TREE_VIEW (priv->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_preview_theme_append_message (EmpathyThemeAdium *view,
- EmpathyContact *sender,
- EmpathyContact *receiver,
- const gchar *text,
- gboolean should_highlight)
-{
- EmpathyMessage *message;
-
- message = g_object_new (EMPATHY_TYPE_MESSAGE,
- "sender", sender,
- "receiver", receiver,
- "body", text,
- NULL);
-
- empathy_theme_adium_append_message (view, message, should_highlight);
- g_object_unref (message);
-}
-
-static void
-preferences_preview_theme_changed_cb (EmpathyThemeManager *manager,
- EmpathyPreferences *preferences)
-{
- EmpathyPreferencesPriv *priv = GET_PRIV (preferences);
- EmpathyClientFactory *factory;
- TpAccount *account;
- EmpathyContact *juliet;
- EmpathyContact *romeo;
-
- DEBUG ("Theme changed, update preview widget");
-
- if (priv->chat_theme_preview != NULL) {
- gtk_widget_destroy (GTK_WIDGET (priv->chat_theme_preview));
- }
- priv->chat_theme_preview = empathy_theme_manager_create_view (manager);
- gtk_container_add (GTK_CONTAINER (priv->sw_chat_theme_preview),
- GTK_WIDGET (priv->chat_theme_preview));
- gtk_widget_show (GTK_WIDGET (priv->chat_theme_preview));
-
- /* FIXME: It is ugly to add a fake conversation like that.
- * Would be cool if we could request a TplLogManager for a fake
- * conversation */
- factory = empathy_client_factory_dup ();
-
- account = tp_simple_client_factory_ensure_account (
- TP_SIMPLE_CLIENT_FACTORY (factory),
- TP_ACCOUNT_OBJECT_PATH_BASE "cm/jabber/account", NULL, NULL);
- juliet = g_object_new (EMPATHY_TYPE_CONTACT,
- "account", account,
- "id", "juliet",
- /* translators: Contact name for the chat theme preview */
- "alias", _("Juliet"),
- "is-user", FALSE,
- NULL);
- romeo = g_object_new (EMPATHY_TYPE_CONTACT,
- "account", account,
- "id", "romeo",
- /* translators: Contact name for the chat theme preview */
- "alias", _("Romeo"),
- "is-user", TRUE,
- NULL);
-
- preferences_preview_theme_append_message (priv->chat_theme_preview,
- /* translators: Quote from Romeo & Julier, for chat theme preview */
- juliet, romeo, _("O Romeo, Romeo, wherefore art thou Romeo?"),
- TRUE /* this message mentions Romeo */);
- preferences_preview_theme_append_message (priv->chat_theme_preview,
- /* translators: Quote from Romeo & Julier, for chat theme preview */
- juliet, romeo, _("Deny thy father and refuse thy name;"), FALSE);
- preferences_preview_theme_append_message (priv->chat_theme_preview,
- /* translators: Quote from Romeo & Julier, for chat theme preview */
- juliet, romeo, _("Or if thou wilt not, be but sworn my love"), FALSE);
- preferences_preview_theme_append_message (priv->chat_theme_preview,
- /* translators: Quote from Romeo & Julier, for chat theme preview */
- juliet, romeo, _("And I'll no longer be a Capulet."), FALSE);
- preferences_preview_theme_append_message (priv->chat_theme_preview,
- /* translators: Quote from Romeo & Julier, for chat theme preview */
- romeo, juliet, _("Shall I hear more, or shall I speak at this?"), FALSE);
-
- /* translators: Quote from Romeo & Julier, for chat theme preview */
- empathy_theme_adium_append_event (priv->chat_theme_preview, _("Juliet has disconnected"));
-
- g_object_unref (juliet);
- g_object_unref (romeo);
- g_object_unref (account);
- g_object_unref (factory);
-}
-
-static void
-preferences_theme_variant_changed_cb (GtkComboBox *combo,
- EmpathyPreferences *preferences)
-{
- EmpathyPreferencesPriv *priv = GET_PRIV (preferences);
- GtkTreeIter iter;
-
- if (gtk_combo_box_get_active_iter (combo, &iter)) {
- GtkTreeModel *model;
- gchar *name;
-
- model = gtk_combo_box_get_model (combo);
- gtk_tree_model_get (model, &iter,
- COL_VARIANT_NAME, &name,
- -1);
-
- g_settings_set_string (priv->gsettings_chat,
- EMPATHY_PREFS_CHAT_THEME_VARIANT,
- name);
-
- g_free (name);
- }
-}
-
-static void
-preferences_theme_variant_notify_cb (GSettings *gsettings,
- const gchar *key,
- gpointer user_data)
-{
- EmpathyPreferences *preferences = user_data;
- EmpathyPreferencesPriv *priv = GET_PRIV (preferences);
- GtkComboBox *combo;
- gchar *conf_name;
- GtkTreeModel *model;
- GtkTreeIter iter;
- GtkTreeIter default_iter;
- gboolean found_default = FALSE;
- gboolean found = FALSE;
- gboolean ok;
-
- conf_name = g_settings_get_string (gsettings, EMPATHY_PREFS_CHAT_THEME_VARIANT);
- combo = GTK_COMBO_BOX (priv->combobox_chat_theme_variant);
- model = gtk_combo_box_get_model (combo);
-
- for (ok = gtk_tree_model_get_iter_first (model, &iter);
- ok && !found;
- ok = gtk_tree_model_iter_next (model, &iter)) {
- gchar *name;
- gboolean is_default;
-
- gtk_tree_model_get (model, &iter,
- COL_VARIANT_NAME, &name,
- COL_VARIANT_DEFAULT, &is_default,
- -1);
-
- if (!tp_strdiff (name, conf_name)) {
- found = TRUE;
- gtk_combo_box_set_active_iter (combo, &iter);
- }
- if (is_default) {
- found_default = TRUE;
- default_iter = iter;
- }
-
- g_free (name);
- }
-
- /* Fallback to the first one. */
- if (!found) {
- if (found_default) {
- gtk_combo_box_set_active_iter (combo, &default_iter);
- } else if (gtk_tree_model_get_iter_first (model, &iter)) {
- gtk_combo_box_set_active_iter (combo, &iter);
- }
- }
-
- g_free (conf_name);
-}
-
-/* return TRUE if we added at least one variant */
-static gboolean
-preferences_theme_variants_fill (EmpathyPreferences *preferences,
- GHashTable *info)
-{
- EmpathyPreferencesPriv *priv = GET_PRIV (preferences);
- GtkTreeModel *model;
- GtkListStore *store;
- GPtrArray *variants;
- const gchar *default_variant;
- guint i;
- gboolean result = FALSE;
-
- model = gtk_combo_box_get_model (GTK_COMBO_BOX (priv->combobox_chat_theme_variant));
- store = GTK_LIST_STORE (model);
- gtk_list_store_clear (store);
-
- variants = empathy_adium_info_get_available_variants (info);
- default_variant = empathy_adium_info_get_default_variant (info);
- for (i = 0; i < variants->len; i++) {
- gchar *name = g_ptr_array_index (variants, i);
-
- gtk_list_store_insert_with_values (store, NULL, -1,
- COL_VARIANT_NAME, name,
- COL_VARIANT_DEFAULT, !tp_strdiff (name, default_variant),
- -1);
-
- result = TRUE;
- }
-
- /* Select the variant from the GSetting key */
- preferences_theme_variant_notify_cb (priv->gsettings_chat,
- EMPATHY_PREFS_CHAT_THEME_VARIANT,
- preferences);
-
- return result;
-}
-
-static void
-preferences_theme_variants_setup (EmpathyPreferences *preferences)
-{
- EmpathyPreferencesPriv *priv = GET_PRIV (preferences);
- GtkComboBox *combo;
- GtkCellLayout *cell_layout;
- GtkCellRenderer *renderer;
- GtkListStore *store;
-
- combo = GTK_COMBO_BOX (priv->combobox_chat_theme_variant);
- cell_layout = GTK_CELL_LAYOUT (combo);
-
- /* Create the model */
- store = gtk_list_store_new (COL_VARIANT_COUNT,
- G_TYPE_STRING, /* name */
- G_TYPE_BOOLEAN); /* is default */
- gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (store),
- COL_VARIANT_NAME, GTK_SORT_ASCENDING);
-
- /* Add cell renderer */
- renderer = gtk_cell_renderer_text_new ();
- gtk_cell_layout_pack_start (cell_layout, renderer, TRUE);
- gtk_cell_layout_set_attributes (cell_layout, renderer,
- "text", COL_VARIANT_NAME, NULL);
-
- gtk_combo_box_set_model (combo, GTK_TREE_MODEL (store));
- g_object_unref (store);
-
- g_signal_connect (combo, "changed",
- G_CALLBACK (preferences_theme_variant_changed_cb),
- preferences);
-
- /* Track changes of the GSetting key */
- g_signal_connect (priv->gsettings_chat,
- "changed::" EMPATHY_PREFS_CHAT_THEME_VARIANT,
- G_CALLBACK (preferences_theme_variant_notify_cb),
- preferences);
-}
-
-static void
-preferences_theme_changed_cb (GtkComboBox *combo,
- EmpathyPreferences *preferences)
-{
- EmpathyPreferencesPriv *priv = GET_PRIV (preferences);
- GtkTreeIter iter;
-
- if (gtk_combo_box_get_active_iter (combo, &iter)) {
- GtkTreeModel *model;
- gchar *name;
- GHashTable *info;
- gboolean variant;
-
- model = gtk_combo_box_get_model (combo);
- gtk_tree_model_get (model, &iter,
- COL_THEME_ADIUM_NAME, &name,
- COL_THEME_ADIUM_INFO, &info,
- -1);
-
- g_settings_set_string (priv->gsettings_chat,
- EMPATHY_PREFS_CHAT_THEME,
- name);
-
- variant = preferences_theme_variants_fill (preferences, info);
- gtk_widget_set_visible (priv->hbox_chat_theme_variant, variant);
-
- g_free (name);
- tp_clear_pointer (&info, g_hash_table_unref);
- }
-}
-
-static void
-preferences_theme_notify_cb (GSettings *gsettings,
- const gchar *key,
- gpointer user_data)
-{
- EmpathyPreferences *preferences = user_data;
- EmpathyPreferencesPriv *priv = GET_PRIV (preferences);
- GtkComboBox *combo;
- gchar *theme;
- GtkTreeModel *model;
- GtkTreeIter iter;
- gboolean found = FALSE;
- gboolean ok;
-
- theme = g_settings_get_string (gsettings, key);
-
- combo = GTK_COMBO_BOX (priv->combobox_chat_theme);
- model = gtk_combo_box_get_model (combo);
- for (ok = gtk_tree_model_get_iter_first (model, &iter);
- ok && !found;
- ok = gtk_tree_model_iter_next (model, &iter)) {
- gchar *name;
-
- gtk_tree_model_get (model, &iter,
- COL_THEME_ADIUM_NAME, &name,
- -1);
-
- if (!tp_strdiff (name, theme)) {
- found = TRUE;
- gtk_combo_box_set_active_iter (combo, &iter);
- }
-
- g_free (name);
- }
-
- /* Fallback to the first one. */
- if (!found) {
- if (gtk_tree_model_get_iter_first (model, &iter)) {
- gtk_combo_box_set_active_iter (combo, &iter);
- }
- }
-
- g_free (theme);
-}
-
-static void
-preferences_themes_setup (EmpathyPreferences *preferences)
-{
- EmpathyPreferencesPriv *priv = GET_PRIV (preferences);
- GtkComboBox *combo;
- GtkCellLayout *cell_layout;
- GtkCellRenderer *renderer;
- GtkListStore *store;
- GList *adium_themes;
-
- preferences_theme_variants_setup (preferences);
-
- combo = GTK_COMBO_BOX (priv->combobox_chat_theme);
- cell_layout = GTK_CELL_LAYOUT (combo);
-
- /* Create the model */
- store = gtk_list_store_new (COL_THEME_COUNT,
- G_TYPE_STRING, /* Display name */
- G_TYPE_STRING, /* Adium theme path */
- G_TYPE_HASH_TABLE); /* Adium theme info */
- gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (store),
- COL_THEME_VISIBLE_NAME, GTK_SORT_ASCENDING);
-
- /* Fill the model */
- adium_themes = empathy_theme_manager_get_adium_themes ();
- while (adium_themes != NULL) {
- GHashTable *info;
- const gchar *visible_name;
- gchar *name;
-
- info = adium_themes->data;
- visible_name = tp_asv_get_string (info, "CFBundleName");
- name = empathy_theme_manager_dup_theme_name_from_path (
- tp_asv_get_string (info, "path"));
-
- if (visible_name != NULL && name != NULL) {
- gtk_list_store_insert_with_values (store, NULL, -1,
- COL_THEME_VISIBLE_NAME, visible_name,
- COL_THEME_ADIUM_NAME, name,
- COL_THEME_ADIUM_INFO, info,
- -1);
- }
- g_hash_table_unref (info);
- g_free (name);
- adium_themes = g_list_delete_link (adium_themes, adium_themes);
- }
-
- /* Add cell renderer */
- renderer = gtk_cell_renderer_text_new ();
- gtk_cell_layout_pack_start (cell_layout, renderer, TRUE);
- gtk_cell_layout_set_attributes (cell_layout, renderer,
- "text", COL_THEME_VISIBLE_NAME, NULL);
-
- gtk_combo_box_set_model (combo, GTK_TREE_MODEL (store));
- g_object_unref (store);
-
- g_signal_connect (combo, "changed",
- G_CALLBACK (preferences_theme_changed_cb),
- preferences);
-
- /* Select the theme from the GSetting key and track changes */
- preferences_theme_notify_cb (priv->gsettings_chat,
- EMPATHY_PREFS_CHAT_THEME,
- preferences);
-
- g_signal_connect (priv->gsettings_chat,
- "changed::" EMPATHY_PREFS_CHAT_THEME,
- G_CALLBACK (preferences_theme_notify_cb),
- preferences);
-}
-
-static void
-empathy_preferences_response (GtkDialog *widget,
- gint response)
-{
- gtk_widget_destroy (GTK_WIDGET (widget));
-}
-
-static void
-empathy_preferences_finalize (GObject *self)
-{
- EmpathyPreferencesPriv *priv = GET_PRIV (self);
-
- g_object_unref (priv->theme_manager);
-
- g_object_unref (priv->gsettings);
- g_object_unref (priv->gsettings_chat);
- g_object_unref (priv->gsettings_call);
- g_object_unref (priv->gsettings_loc);
- g_object_unref (priv->gsettings_notify);
- g_object_unref (priv->gsettings_sound);
- g_object_unref (priv->gsettings_ui);
- g_object_unref (priv->gsettings_logger);
-
- G_OBJECT_CLASS (empathy_preferences_parent_class)->finalize (self);
-}
-
-static void
-empathy_preferences_class_init (EmpathyPreferencesClass *klass)
-{
- GtkDialogClass *dialog_class = GTK_DIALOG_CLASS (klass);
- GObjectClass *object_class = G_OBJECT_CLASS (klass);
-
- dialog_class->response = empathy_preferences_response;
-
- object_class->finalize = empathy_preferences_finalize;
-
- g_type_class_add_private (object_class,
- sizeof (EmpathyPreferencesPriv));
-}
-
-static void
-empathy_preferences_init (EmpathyPreferences *preferences)
-{
- EmpathyPreferencesPriv *priv;
- GtkBuilder *gui;
- gchar *filename;
- GtkWidget *page;
-
- priv = preferences->priv = G_TYPE_INSTANCE_GET_PRIVATE (preferences,
- EMPATHY_TYPE_PREFERENCES, EmpathyPreferencesPriv);
-
- gtk_dialog_add_button (GTK_DIALOG (preferences),
- GTK_STOCK_CLOSE, GTK_RESPONSE_CLOSE);
-
- gtk_container_set_border_width (GTK_CONTAINER (preferences), 5);
- gtk_window_set_title (GTK_WINDOW (preferences), _("Preferences"));
- gtk_window_set_role (GTK_WINDOW (preferences), "preferences");
- gtk_window_set_position (GTK_WINDOW (preferences),
- GTK_WIN_POS_CENTER_ON_PARENT);
- gtk_window_set_icon_name (GTK_WINDOW (preferences), "preferences-desktop");
-
- filename = empathy_file_lookup ("empathy-preferences.ui", "src");
- gui = tpaw_builder_get_file (filename,
- "notebook", &priv->notebook,
- "vbox_chat_theme", &priv->vbox_chat_theme,
- "combobox_chat_theme", &priv->combobox_chat_theme,
- "combobox_chat_theme_variant", &priv->combobox_chat_theme_variant,
- "hbox_chat_theme_variant", &priv->hbox_chat_theme_variant,
- "sw_chat_theme_preview", &priv->sw_chat_theme_preview,
- "treeview_sounds", &priv->treeview_sounds,
- "treeview_spell_checker", &priv->treeview_spell_checker,
- "label_general_behavior", &priv->label_general_behavior,
- "checkbutton_events_notif_area", &priv->checkbutton_events_notif_area,
- "checkbutton_autoconnect", &priv->checkbutton_autoconnect,
- NULL);
- g_free (filename);
-
- gtk_container_add (GTK_CONTAINER (gtk_dialog_get_content_area (GTK_DIALOG (preferences))), priv->notebook);
- gtk_widget_show (priv->notebook);
-
- priv->gsettings = g_settings_new (EMPATHY_PREFS_SCHEMA);
- priv->gsettings_chat = g_settings_new (EMPATHY_PREFS_CHAT_SCHEMA);
- priv->gsettings_call = g_settings_new (EMPATHY_PREFS_CALL_SCHEMA);
- priv->gsettings_loc = g_settings_new (EMPATHY_PREFS_LOCATION_SCHEMA);
- priv->gsettings_notify = g_settings_new (EMPATHY_PREFS_NOTIFICATIONS_SCHEMA);
- priv->gsettings_sound = g_settings_new (EMPATHY_PREFS_SOUNDS_SCHEMA);
- priv->gsettings_ui = g_settings_new (EMPATHY_PREFS_UI_SCHEMA);
- priv->gsettings_logger = g_settings_new (EMPATHY_PREFS_LOGGER_SCHEMA);
-
- /* Create chat theme preview, and track changes */
- priv->theme_manager = empathy_theme_manager_dup_singleton ();
- tp_g_signal_connect_object (priv->theme_manager, "theme-changed",
- G_CALLBACK (preferences_preview_theme_changed_cb),
- preferences, 0);
- preferences_preview_theme_changed_cb (priv->theme_manager, preferences);
-
- preferences_themes_setup (preferences);
-
- preferences_setup_widgets (preferences, gui);
-
- preferences_languages_setup (preferences);
- preferences_languages_add (preferences);
- preferences_languages_load (preferences);
-
- preferences_sound_setup (preferences);
- preferences_sound_load (preferences);
-
- g_object_unref (gui);
-
- if (empathy_spell_supported ()) {
- page = gtk_notebook_get_nth_page (GTK_NOTEBOOK (priv->notebook), EMPATHY_PREFERENCES_TAB_SPELL);
- gtk_widget_show (page);
- }
-
- page = gtk_notebook_get_nth_page (GTK_NOTEBOOK (priv->notebook), EMPATHY_PREFERENCES_TAB_LOCATION);
-#ifdef HAVE_GEOCLUE
- gtk_widget_show (page);
-#else
- gtk_widget_hide (page);
-#endif
-}
-
-static EmpathyPreferencesTab
-empathy_preferences_tab_from_string (const gchar *str)
-{
- guint i;
-
- for (i = 0; i < G_N_ELEMENTS (empathy_preferences_tabs); i++)
- {
- if (!tp_strdiff (str, empathy_preferences_tabs[i]))
- return i;
- }
-
- g_warn_if_reached ();
- return -1;
-}
-
-const gchar *
-empathy_preferences_tab_to_string (EmpathyPreferencesTab tab)
-{
- g_return_val_if_fail (tab < G_N_ELEMENTS (empathy_preferences_tabs), NULL);
-
- return empathy_preferences_tabs[tab];
-}
-
-GtkWidget *
-empathy_preferences_new (GtkWindow *parent,
- gboolean shell_running)
-{
- GtkWidget *self;
- EmpathyPreferencesPriv *priv;
- GtkWidget *notif_page;
-
- g_return_val_if_fail (parent == NULL || GTK_IS_WINDOW (parent), NULL);
-
- self = g_object_new (EMPATHY_TYPE_PREFERENCES, NULL);
-
- if (parent != NULL) {
- gtk_window_set_transient_for (GTK_WINDOW (self),
- parent);
- }
-
- /* when running in Gnome Shell we must hide these options since they
- * are meaningless in that context:
- * - General->Behavior label
- * - 'Display incoming events in the notification area' (General->Behavior)
- * - 'Automatically connect at startup' (General->Behavior)
- * - 'Notifications' tab
- */
- priv = GET_PRIV (self);
- if (shell_running) {
- /* Behavior */
- gtk_widget_hide (priv->label_general_behavior);
- gtk_widget_hide (priv->checkbutton_events_notif_area);
- gtk_widget_hide (priv->checkbutton_autoconnect);
-
- /* Notifications tab */
- notif_page = gtk_notebook_get_nth_page (GTK_NOTEBOOK (priv->notebook),
- EMPATHY_PREFERENCES_TAB_NOTIFICATIONS);
- gtk_widget_hide (notif_page);
- }
-
- return self;
-}
-
-void
-empathy_preferences_show_tab (EmpathyPreferences *self,
- const gchar *page)
-{
- EmpathyPreferencesPriv *priv = GET_PRIV (self);
-
- gtk_notebook_set_current_page (GTK_NOTEBOOK (priv->notebook),
- empathy_preferences_tab_from_string (page));
-}
diff --git a/src/empathy-preferences.h b/src/empathy-preferences.h
deleted file mode 100644
index b8b126bd..00000000
--- a/src/empathy-preferences.h
+++ /dev/null
@@ -1,78 +0,0 @@
-/* -*- 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., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301 USA
- *
- * Authors: Mikael Hallendal <micke@imendio.com>
- * Richard Hult <richard@imendio.com>
- * Martyn Russell <martyn@imendio.com>
- * Danielle Madeley <danielle.madeley@collabora.co.uk>
- */
-
-#ifndef __EMPATHY_PREFERENCES_H__
-#define __EMPATHY_PREFERENCES_H__
-
-#include <gtk/gtk.h>
-
-G_BEGIN_DECLS
-
-#define EMPATHY_TYPE_PREFERENCES (empathy_preferences_get_type ())
-#define EMPATHY_PREFERENCES(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), EMPATHY_TYPE_PREFERENCES, EmpathyPreferences))
-#define EMPATHY_PREFERENCES_CLASS(k) (G_TYPE_CHECK_CLASS_CAST ((k), EMPATHY_TYPE_PREFERENCES, EmpathyPreferencesClass))
-#define EMPATHY_IS_PREFERENCES(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), EMPATHY_TYPE_PREFERENCES))
-#define EMPATHY_IS_PREFERENCES_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), EMPATHY_TYPE_PREFERENCES))
-#define EMPATHY_PREFERENCES_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), EMPATHY_TYPE_PREFERENCES, EmpathyPreferencesClass))
-
-typedef struct _EmpathyPreferences EmpathyPreferences;
-typedef struct _EmpathyPreferencesClass EmpathyPreferencesClass;
-typedef struct _EmpathyPreferencesPriv EmpathyPreferencesPriv;
-
-struct _EmpathyPreferences {
- GtkDialog parent;
- gpointer priv;
-};
-
-struct _EmpathyPreferencesClass {
- GtkDialogClass parent_class;
-};
-
-/* Keep this enum and the array in empathy-preferences.c in sync */
-typedef enum
-{
- EMPATHY_PREFERENCES_TAB_GENERAL,
- EMPATHY_PREFERENCES_TAB_NOTIFICATIONS,
- EMPATHY_PREFERENCES_TAB_SOUNDS,
- EMPATHY_PREFERENCES_TAB_CALLS,
- EMPATHY_PREFERENCES_TAB_LOCATION,
- EMPATHY_PREFERENCES_TAB_SPELL,
- EMPATHY_PREFERENCES_TAB_THEMES,
-} EmpathyPreferencesTab;
-
-GType empathy_preferences_get_type (void);
-
-GtkWidget *empathy_preferences_new (GtkWindow *parent,
- gboolean shell_running);
-
-void empathy_preferences_show_tab (EmpathyPreferences *self,
- const gchar *tab);
-
-const gchar *
-empathy_preferences_tab_to_string (EmpathyPreferencesTab tab);
-
-G_END_DECLS
-
-#endif /* __EMPATHY_PREFERENCES_H__ */
diff --git a/src/empathy-preferences.ui b/src/empathy-preferences.ui
deleted file mode 100644
index 6e146d35..00000000
--- a/src/empathy-preferences.ui
+++ /dev/null
@@ -1,1181 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<interface>
- <requires lib="gtk+" version="2.16"/>
- <object class="GtkNotebook" id="notebook">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="border_width">5</property>
- <child>
- <object class="GtkBox" id="vbox197">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="border_width">12</property>
- <property name="orientation">vertical</property>
- <property name="spacing">18</property>
- <child>
- <object class="GtkFrame" id="frame6">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="label_xalign">0</property>
- <property name="shadow_type">none</property>
- <child>
- <object class="GtkAlignment" id="alignment5">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="left_padding">12</property>
- <child>
- <object class="GtkBox" id="box2">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="orientation">vertical</property>
- <child>
- <object class="GtkCheckButton" id="checkbutton_show_offline">
- <property name="label" translatable="yes">Show offline contacts</property>
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="receives_default">False</property>
- <property name="use_action_appearance">False</property>
- <property name="xalign">0</property>
- <property name="draw_indicator">True</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkCheckButton" id="checkbutton_show_groups">
- <property name="label" translatable="yes">Show groups</property>
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="receives_default">False</property>
- <property name="use_action_appearance">False</property>
- <property name="xalign">0</property>
- <property name="draw_indicator">True</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="position">2</property>
- </packing>
- </child>
- <child>
- <object class="GtkCheckButton" id="checkbutton_show_balances">
- <property name="label" translatable="yes">Show account balances</property>
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="receives_default">False</property>
- <property name="use_action_appearance">False</property>
- <property name="xalign">0</property>
- <property name="draw_indicator">True</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="position">2</property>
- </packing>
- </child>
- </object>
- </child>
- </object>
- </child>
- <child type="label">
- <object class="GtkLabel" id="label8">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="label" translatable="yes">Contact List</property>
- <property name="use_markup">True</property>
- <attributes>
- <attribute name="weight" value="bold"/>
- </attributes>
- </object>
- </child>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkFrame" id="frame3">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="label_xalign">0</property>
- <property name="shadow_type">none</property>
- <child>
- <object class="GtkAlignment" id="alignment11">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="top_padding">6</property>
- <property name="left_padding">12</property>
- <child>
- <object class="GtkBox" id="vbox199">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="orientation">vertical</property>
- <child>
- <object class="GtkBox" id="vbox2180">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="spacing">3</property>
- <child>
- <object class="GtkLabel" id="label1000">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="label" translatable="yes">Start chats in:</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkRadioButton" id="radiobutton_chats_new_tabs">
- <property name="label" translatable="yes">new ta_bs</property>
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="receives_default">False</property>
- <property name="use_action_appearance">False</property>
- <property name="use_underline">True</property>
- <property name="xalign">0</property>
- <property name="active">True</property>
- <property name="draw_indicator">True</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="position">1</property>
- </packing>
- </child>
- <child>
- <object class="GtkRadioButton" id="radiobutton_chats_new_windows">
- <property name="label" translatable="yes">new _windows</property>
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="receives_default">False</property>
- <property name="use_action_appearance">False</property>
- <property name="use_underline">True</property>
- <property name="xalign">0</property>
- <property name="draw_indicator">True</property>
- <property name="group">radiobutton_chats_new_tabs</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="position">2</property>
- </packing>
- </child>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkCheckButton" id="checkbutton_show_smileys">
- <property name="label" translatable="yes">Show _smileys as images</property>
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="receives_default">False</property>
- <property name="use_action_appearance">False</property>
- <property name="use_underline">True</property>
- <property name="active">True</property>
- <property name="draw_indicator">True</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="position">1</property>
- </packing>
- </child>
- <child>
- <object class="GtkCheckButton" id="checkbutton_show_contacts_in_rooms">
- <property name="label" translatable="yes">Show contact _list in rooms</property>
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="receives_default">False</property>
- <property name="use_action_appearance">False</property>
- <property name="use_underline">True</property>
- <property name="active">True</property>
- <property name="draw_indicator">True</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="position">2</property>
- </packing>
- </child>
- <child>
- <object class="GtkCheckButton" id="checkbutton_logging">
- <property name="label" translatable="yes">Log conversations</property>
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="receives_default">False</property>
- <property name="use_action_appearance">False</property>
- <property name="use_underline">True</property>
- <property name="xalign">0</property>
- <property name="active">True</property>
- <property name="draw_indicator">True</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="position">3</property>
- </packing>
- </child>
- </object>
- </child>
- </object>
- </child>
- <child type="label">
- <object class="GtkLabel" id="label611">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="label" translatable="yes">Chat</property>
- <attributes>
- <attribute name="weight" value="bold"/>
- </attributes>
- </object>
- </child>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">1</property>
- </packing>
- </child>
- <child>
- <object class="GtkFrame" id="frame4">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="label_xalign">0</property>
- <property name="shadow_type">none</property>
- <child>
- <object class="GtkAlignment" id="alignment12">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="top_padding">6</property>
- <property name="left_padding">12</property>
- <child>
- <object class="GtkBox" id="vbox218">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="orientation">vertical</property>
- <child>
- <object class="GtkCheckButton" id="checkbutton_events_notif_area">
- <property name="label" translatable="yes">Display incoming events in the notification area</property>
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="receives_default">False</property>
- <property name="use_action_appearance">False</property>
- <property name="use_underline">True</property>
- <property name="draw_indicator">True</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkCheckButton" id="checkbutton_autoconnect">
- <property name="label" translatable="yes">_Automatically connect on startup</property>
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="receives_default">False</property>
- <property name="use_action_appearance">False</property>
- <property name="use_underline">True</property>
- <property name="active">True</property>
- <property name="draw_indicator">True</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="position">1</property>
- </packing>
- </child>
- </object>
- </child>
- </object>
- </child>
- <child type="label">
- <object class="GtkLabel" id="label_general_behavior">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="label" translatable="yes">Behavior</property>
- <attributes>
- <attribute name="weight" value="bold"/>
- </attributes>
- </object>
- </child>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">2</property>
- </packing>
- </child>
- </object>
- </child>
- <child type="tab">
- <object class="GtkLabel" id="label602">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="label" translatable="yes">General</property>
- </object>
- <packing>
- <property name="tab_fill">False</property>
- </packing>
- </child>
- <child>
- <object class="GtkBox" id="vbox2">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="border_width">12</property>
- <property name="orientation">vertical</property>
- <property name="spacing">6</property>
- <child>
- <object class="GtkCheckButton" id="checkbutton_notifications_enabled">
- <property name="label" translatable="yes">_Enable bubble notifications</property>
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="receives_default">False</property>
- <property name="use_action_appearance">False</property>
- <property name="use_underline">True</property>
- <property name="draw_indicator">True</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkAlignment" id="alignment1">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="left_padding">12</property>
- <child>
- <object class="GtkBox" id="vbox3">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="orientation">vertical</property>
- <property name="spacing">6</property>
- <child>
- <object class="GtkCheckButton" id="checkbutton_notifications_disabled_away">
- <property name="label" translatable="yes">Disable notifications when _away or busy</property>
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="receives_default">False</property>
- <property name="use_action_appearance">False</property>
- <property name="use_underline">True</property>
- <property name="draw_indicator">True</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkCheckButton" id="checkbutton_notifications_focus">
- <property name="label" translatable="yes">Enable notifications when the _chat is not focused</property>
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="receives_default">False</property>
- <property name="use_action_appearance">False</property>
- <property name="use_underline">True</property>
- <property name="draw_indicator">True</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="position">1</property>
- </packing>
- </child>
- <child>
- <object class="GtkCheckButton" id="checkbutton_notifications_contact_signin">
- <property name="label" translatable="yes">Enable notifications when a contact comes online</property>
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="receives_default">False</property>
- <property name="use_action_appearance">False</property>
- <property name="use_underline">True</property>
- <property name="draw_indicator">True</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="position">2</property>
- </packing>
- </child>
- <child>
- <object class="GtkCheckButton" id="checkbutton_notifications_contact_signout">
- <property name="label" translatable="yes">Enable notifications when a contact goes offline</property>
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="receives_default">False</property>
- <property name="use_action_appearance">False</property>
- <property name="use_underline">True</property>
- <property name="draw_indicator">True</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="position">3</property>
- </packing>
- </child>
- </object>
- </child>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="position">1</property>
- </packing>
- </child>
- </object>
- <packing>
- <property name="position">1</property>
- </packing>
- </child>
- <child type="tab">
- <object class="GtkLabel" id="label1">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="label" translatable="yes">Notifications</property>
- </object>
- <packing>
- <property name="position">1</property>
- <property name="tab_fill">False</property>
- </packing>
- </child>
- <child>
- <object class="GtkBox" id="outer_vbox">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="border_width">12</property>
- <property name="orientation">vertical</property>
- <property name="spacing">18</property>
- <child>
- <object class="GtkBox" id="vbox219">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="orientation">vertical</property>
- <property name="spacing">6</property>
- <child>
- <object class="GtkCheckButton" id="checkbutton_sounds_enabled">
- <property name="label" translatable="yes">_Enable sound notifications</property>
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="receives_default">False</property>
- <property name="use_action_appearance">False</property>
- <property name="use_underline">True</property>
- <property name="draw_indicator">True</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkAlignment" id="alignment32">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="left_padding">12</property>
- <child>
- <object class="GtkCheckButton" id="checkbutton_sounds_disabled_away">
- <property name="label" translatable="yes">Disable sounds when _away or busy</property>
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="receives_default">False</property>
- <property name="use_action_appearance">False</property>
- <property name="use_underline">True</property>
- <property name="draw_indicator">True</property>
- </object>
- </child>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="position">1</property>
- </packing>
- </child>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkBox" id="vbox221">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="orientation">vertical</property>
- <property name="spacing">6</property>
- <child>
- <object class="GtkLabel" id="label645">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="xalign">0</property>
- <property name="label" translatable="yes">Play sound for events</property>
- <attributes>
- <attribute name="weight" value="bold"/>
- </attributes>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkAlignment" id="alignment33">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="left_padding">12</property>
- <child>
- <object class="GtkScrolledWindow" id="scrolledwindow19">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="shadow_type">in</property>
- <child>
- <object class="GtkTreeView" id="treeview_sounds">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="headers_visible">False</property>
- <child internal-child="selection">
- <object class="GtkTreeSelection" id="treeview-selection1"/>
- </child>
- </object>
- </child>
- </object>
- </child>
- </object>
- <packing>
- <property name="expand">True</property>
- <property name="fill">True</property>
- <property name="position">1</property>
- </packing>
- </child>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="position">1</property>
- </packing>
- </child>
- </object>
- <packing>
- <property name="position">2</property>
- </packing>
- </child>
- <child type="tab">
- <object class="GtkLabel" id="label607">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="label" translatable="yes">Sounds</property>
- </object>
- <packing>
- <property name="position">2</property>
- <property name="tab_fill">False</property>
- </packing>
- </child>
- <child>
- <object class="GtkBox" id="vbox6">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="border_width">12</property>
- <property name="orientation">vertical</property>
- <property name="spacing">18</property>
- <child>
- <object class="GtkFrame" id="frame2">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="label_xalign">0</property>
- <property name="shadow_type">none</property>
- <child>
- <object class="GtkAlignment" id="alignment3">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="left_padding">12</property>
- <child>
- <object class="GtkBox" id="box4">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="orientation">vertical</property>
- <property name="spacing">6</property>
- <child>
- <object class="GtkCheckButton" id="call_echo_cancellation">
- <property name="label" translatable="yes">Use _echo cancellation to improve call quality</property>
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="receives_default">False</property>
- <property name="use_action_appearance">False</property>
- <property name="use_underline">True</property>
- <property name="draw_indicator">True</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="position">2</property>
- </packing>
- </child>
- <child>
- <object class="GtkBox" id="box1">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="spacing">6</property>
- <child>
- <object class="GtkImage" id="image2">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="stock">gtk-dialog-info</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkLabel" id="label7">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="xalign">0</property>
- <property name="label" translatable="yes">Echo cancellation helps to make your voice sound clearer to the other person, but may cause problems on some computers. If you or the other person hear strange noises or glitches during calls, try turning echo cancellation off and restarting the call.</property>
- <property name="wrap">True</property>
- <attributes>
- <attribute name="scale" value="0.80000000000000004"/>
- </attributes>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="position">1</property>
- </packing>
- </child>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="position">3</property>
- </packing>
- </child>
- </object>
- </child>
- </object>
- </child>
- <child type="label">
- <object class="GtkLabel" id="label10">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="xalign">0</property>
- <property name="label" translatable="yes">Audio</property>
- <attributes>
- <attribute name="weight" value="bold"/>
- </attributes>
- </object>
- </child>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <placeholder/>
- </child>
- <child>
- <placeholder/>
- </child>
- </object>
- <packing>
- <property name="position">3</property>
- </packing>
- </child>
- <child type="tab">
- <object class="GtkLabel" id="label608">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="label" translatable="yes">Calls</property>
- </object>
- <packing>
- <property name="position">3</property>
- <property name="tab_fill">False</property>
- </packing>
- </child>
- <child>
- <object class="GtkBox" id="vbox1">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="border_width">12</property>
- <property name="orientation">vertical</property>
- <property name="spacing">18</property>
- <child>
- <object class="GtkCheckButton" id="checkbutton_location_publish">
- <property name="label" translatable="yes">_Publish location to my contacts</property>
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="receives_default">False</property>
- <property name="use_action_appearance">False</property>
- <property name="use_underline">True</property>
- <property name="draw_indicator">True</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkFrame" id="frame1">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="label_xalign">0</property>
- <property name="shadow_type">none</property>
- <child>
- <object class="GtkAlignment" id="alignment2">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="top_padding">6</property>
- <property name="left_padding">12</property>
- <child>
- <object class="GtkBox" id="vbox4">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="orientation">vertical</property>
- <property name="spacing">6</property>
- <child>
- <object class="GtkBox" id="hbox1">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="spacing">6</property>
- <child>
- <object class="GtkImage" id="image1">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="yalign">0</property>
- <property name="stock">gtk-dialog-info</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkLabel" id="label6">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="xalign">0</property>
- <property name="label" translatable="yes">Reduced location accuracy means that nothing more precise than your city, state and country will be published. GPS coordinates will be accurate to 1 decimal place.</property>
- <property name="wrap">True</property>
- <attributes>
- <attribute name="scale" value="0.80000000000000004"/>
- </attributes>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="position">1</property>
- </packing>
- </child>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkCheckButton" id="checkbutton_location_reduce_accuracy">
- <property name="label" translatable="yes" comments="To translators: The longitude and latitude are rounded to closest 0,1 degrees, so for example 146,2345° is rounded to round(146,2345*10)/10 = 146,2 degrees.">_Reduce location accuracy</property>
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="receives_default">False</property>
- <property name="use_action_appearance">False</property>
- <property name="use_underline">True</property>
- <property name="active">True</property>
- <property name="draw_indicator">True</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">1</property>
- </packing>
- </child>
- </object>
- </child>
- </object>
- </child>
- <child type="label">
- <object class="GtkLabel" id="label3">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="label" translatable="yes">Privacy</property>
- <attributes>
- <attribute name="weight" value="bold"/>
- </attributes>
- </object>
- </child>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">1</property>
- </packing>
- </child>
- <child>
- <object class="GtkFrame" id="frame5">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="label_xalign">0</property>
- <property name="shadow_type">none</property>
- <child>
- <object class="GtkAlignment" id="alignment4">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="top_padding">6</property>
- <property name="left_padding">12</property>
- <child>
- <object class="GtkBox" id="vbox5">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="orientation">vertical</property>
- <child>
- <object class="GtkCheckButton" id="checkbutton_location_resource_gps">
- <property name="label" translatable="yes">_GPS</property>
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="receives_default">False</property>
- <property name="use_action_appearance">False</property>
- <property name="use_underline">True</property>
- <property name="draw_indicator">True</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkCheckButton" id="checkbutton_location_resource_cell">
- <property name="label" translatable="yes">_Cellphone</property>
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="receives_default">False</property>
- <property name="use_action_appearance">False</property>
- <property name="use_underline">True</property>
- <property name="active">True</property>
- <property name="draw_indicator">True</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">1</property>
- </packing>
- </child>
- <child>
- <object class="GtkCheckButton" id="checkbutton_location_resource_network">
- <property name="label" translatable="yes">_Network (IP, Wi-Fi)</property>
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="receives_default">False</property>
- <property name="use_action_appearance">False</property>
- <property name="use_underline">True</property>
- <property name="active">True</property>
- <property name="draw_indicator">True</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">2</property>
- </packing>
- </child>
- </object>
- </child>
- </object>
- </child>
- <child type="label">
- <object class="GtkLabel" id="label5">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="label" translatable="yes">Location sources:</property>
- <attributes>
- <attribute name="weight" value="bold"/>
- </attributes>
- </object>
- </child>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="position">2</property>
- </packing>
- </child>
- </object>
- <packing>
- <property name="position">4</property>
- </packing>
- </child>
- <child type="tab">
- <object class="GtkLabel" id="label2">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="label" translatable="yes">Location</property>
- </object>
- <packing>
- <property name="position">4</property>
- <property name="tab_fill">False</property>
- </packing>
- </child>
- <child>
- <object class="GtkBox" id="vbox168">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="border_width">12</property>
- <property name="orientation">vertical</property>
- <property name="spacing">18</property>
- <child>
- <object class="GtkFrame" id="frame7">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="label_xalign">0</property>
- <property name="shadow_type">none</property>
- <child>
- <object class="GtkAlignment" id="alignment15">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="top_padding">6</property>
- <property name="left_padding">12</property>
- <child>
- <object class="GtkBox" id="vbox201">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="orientation">vertical</property>
- <property name="spacing">6</property>
- <child>
- <object class="GtkScrolledWindow" id="scrolledwindow18">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="shadow_type">in</property>
- <child>
- <object class="GtkTreeView" id="treeview_spell_checker">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="headers_visible">False</property>
- <child internal-child="selection">
- <object class="GtkTreeSelection" id="treeview-selection2"/>
- </child>
- </object>
- </child>
- </object>
- <packing>
- <property name="expand">True</property>
- <property name="fill">True</property>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkBox" id="hbox155">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="spacing">6</property>
- <child>
- <object class="GtkImage" id="image422">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="yalign">0</property>
- <property name="stock">gtk-dialog-info</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkLabel" id="label616">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="xalign">0</property>
- <property name="label" translatable="yes">The list of languages reflects only the languages for which you have a dictionary installed.</property>
- <property name="wrap">True</property>
- <attributes>
- <attribute name="scale" value="0.80000000000000004"/>
- </attributes>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="position">1</property>
- </packing>
- </child>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="position">1</property>
- </packing>
- </child>
- </object>
- </child>
- </object>
- </child>
- <child type="label">
- <object class="GtkLabel" id="label615">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="label" translatable="yes">Enable spell checking for languages:</property>
- <attributes>
- <attribute name="weight" value="bold"/>
- </attributes>
- </object>
- </child>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <placeholder/>
- </child>
- </object>
- <packing>
- <property name="position">5</property>
- </packing>
- </child>
- <child type="tab">
- <object class="GtkLabel" id="label567">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="label" translatable="yes">Spell Checking</property>
- </object>
- <packing>
- <property name="position">5</property>
- <property name="tab_fill">False</property>
- </packing>
- </child>
- <child>
- <object class="GtkBox" id="vbox_chat_theme">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="border_width">12</property>
- <property name="orientation">vertical</property>
- <property name="spacing">6</property>
- <child>
- <object class="GtkBox" id="hbox139">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="spacing">12</property>
- <child>
- <object class="GtkLabel" id="label586">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="label" translatable="yes">Chat Th_eme:</property>
- <property name="use_underline">True</property>
- <property name="mnemonic_widget">combobox_chat_theme</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkComboBox" id="combobox_chat_theme">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">1</property>
- </packing>
- </child>
- <child>
- <object class="GtkBox" id="hbox_chat_theme_variant">
- <property name="can_focus">False</property>
- <property name="spacing">12</property>
- <child>
- <object class="GtkLabel" id="label4">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="label" translatable="yes">Variant:</property>
- <property name="use_underline">True</property>
- <property name="mnemonic_widget">combobox_chat_theme_variant</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkComboBox" id="combobox_chat_theme_variant">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">1</property>
- </packing>
- </child>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="position">2</property>
- </packing>
- </child>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkScrolledWindow" id="sw_chat_theme_preview">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="shadow_type">in</property>
- <child>
- <placeholder/>
- </child>
- </object>
- <packing>
- <property name="expand">True</property>
- <property name="fill">True</property>
- <property name="position">1</property>
- </packing>
- </child>
- </object>
- <packing>
- <property name="position">6</property>
- </packing>
- </child>
- <child type="tab">
- <object class="GtkLabel" id="label624">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="label" translatable="yes">Themes</property>
- </object>
- <packing>
- <property name="position">6</property>
- <property name="tab_fill">False</property>
- </packing>
- </child>
- </object>
-</interface>
diff --git a/src/empathy-roster-window-menubar.ui b/src/empathy-roster-window-menubar.ui
deleted file mode 100644
index 2d0b9abb..00000000
--- a/src/empathy-roster-window-menubar.ui
+++ /dev/null
@@ -1,99 +0,0 @@
-<?xml version="1.0"?>
-<!--*- mode: xml -*-->
-<interface>
- <menu id="appmenu">
- <section>
- <item>
- <attribute translatable="yes" name="label">_New Conversation...</attribute>
- <attribute name="action">win.chat_new_message</attribute>
- <attribute name="accel">&lt;Primary&gt;n</attribute>
- </item>
- <item>
- <attribute translatable="yes" name="label">New _Call...</attribute>
- <attribute name="action">win.chat_new_call</attribute>
- <attribute name="accel">&lt;Primary&gt;m</attribute>
- </item>
- </section>
- <submenu>
- <attribute translatable="yes" name="label">Contacts</attribute>
- <section>
- <item>
- <attribute translatable="yes" name="label">_Add Contacts...</attribute>
- <attribute name="action">win.chat_add_contact</attribute>
- </item>
- <item>
- <attribute translatable="yes" name="label">_Search for Contacts...</attribute>
- <attribute name="action">win.chat_search_contacts</attribute>
- </item>
- </section>
- <section>
- <item>
- <attribute translatable="yes" name="label">_Blocked Contacts</attribute>
- <attribute name="action">win.edit_blocked_contacts</attribute>
- </item>
- </section>
- </submenu>
- <submenu>
- <attribute translatable="yes" name="label">_Rooms</attribute>
- <section>
- <item>
- <attribute translatable="yes" name="label">_Join...</attribute>
- <attribute name="action">win.room_join_new</attribute>
- <attribute name="accel">&lt;Primary&gt;j</attribute>
- </item>
- <item>
- <attribute translatable="yes" name="label">Join _Favorites</attribute>
- <attribute name="action">win.room_join_favorites</attribute>
- <attribute name="accel">F5</attribute>
- </item>
- </section>
- <item>
- <link name="section" id="rooms"/>
- </item>
- <section>
- <item>
- <attribute translatable="yes" name="label">_Manage Favorites</attribute>
- <attribute name="action">win.room_manage_favorites</attribute>
- </item>
- </section>
- </submenu>
- <section>
- <item>
- <attribute translatable="yes" name="label">_Previous Conversations</attribute>
- <attribute name="action">win.view_history</attribute>
- <attribute name="accel">F3</attribute>
- </item>
- <item>
- <attribute translatable="yes" name="label">_File Transfers</attribute>
- <attribute name="action">win.view_show_ft_manager</attribute>
- </item>
- </section>
- <section>
- <item>
- <attribute translatable="yes" name="label">_Accounts</attribute>
- <attribute name="action">win.edit_accounts</attribute>
- <attribute name="accel">F4</attribute>
- </item>
- <item>
- <attribute translatable="yes" name="label">P_references</attribute>
- <attribute name="action">win.edit_preferences</attribute>
- </item>
- </section>
- <section>
- <item>
- <attribute translatable="yes" name="label">Help</attribute>
- <attribute name="action">win.help_contents</attribute>
- <attribute name="accel">F1</attribute>
- </item>
- <item>
- <attribute translatable="yes" name="label">About Empathy</attribute>
- <attribute name="action">win.help_about</attribute>
- </item>
- <item>
- <attribute translatable="yes" name="label">_Quit</attribute>
- <attribute name="action">win.chat_quit</attribute>
- <attribute name="accel">&lt;Primary&gt;q</attribute>
- </item>
- </section>
- </menu>
-</interface>
diff --git a/src/empathy-roster-window.c b/src/empathy-roster-window.c
deleted file mode 100644
index 600d1961..00000000
--- a/src/empathy-roster-window.c
+++ /dev/null
@@ -1,2448 +0,0 @@
-/*
- * Copyright (C) 2002-2007 Imendio AB
- * Copyright (C) 2007-2010 Collabora Ltd.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301 USA
- *
- * Authors: Xavier Claessens <xclaesse@gmail.com>
- * Danielle Madeley <danielle.madeley@collabora.co.uk>
- */
-
-#include "config.h"
-#include "empathy-roster-window.h"
-
-#include <sys/stat.h>
-#include <glib/gi18n.h>
-#include <tp-account-widgets/tpaw-builder.h>
-
-#include "empathy-about-dialog.h"
-#include "empathy-accounts-dialog.h"
-#include "empathy-call-observer.h"
-#include "empathy-chat-manager.h"
-#include "empathy-chatroom-manager.h"
-#include "empathy-chatrooms-window.h"
-#include "empathy-contact-blocking-dialog.h"
-#include "empathy-contact-search-dialog.h"
-#include "empathy-event-manager.h"
-#include "empathy-ft-manager.h"
-#include "empathy-geometry.h"
-#include "empathy-gsettings.h"
-#include "empathy-gsettings.h"
-#include "empathy-gtk-enum-types.h"
-#include "empathy-individual-dialogs.h"
-#include "empathy-log-window.h"
-#include "empathy-new-call-dialog.h"
-#include "empathy-new-chatroom-dialog.h"
-#include "empathy-new-message-dialog.h"
-#include "empathy-preferences.h"
-#include "empathy-presence-chooser.h"
-#include "empathy-presence-manager.h"
-#include "empathy-request-util.h"
-#include "empathy-roster-model-manager.h"
-#include "empathy-roster-view.h"
-#include "empathy-status-presets.h"
-#include "empathy-ui-utils.h"
-#include "empathy-utils.h"
-
-#define DEBUG_FLAG EMPATHY_DEBUG_OTHER
-#include "empathy-debug.h"
-
-/* Flashing delay for icons (milliseconds). */
-#define FLASH_TIMEOUT 500
-
-/* 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 "roster-window"
-
-enum
-{
- PAGE_CONTACT_LIST = 0,
- PAGE_MESSAGE
-};
-
-enum
-{
- PROP_0,
- PROP_SHELL_RUNNING
-};
-
-G_DEFINE_TYPE (EmpathyRosterWindow, empathy_roster_window, GTK_TYPE_APPLICATION_WINDOW)
-
-struct _EmpathyRosterWindowPriv {
- EmpathyRosterView *view;
- TpAccountManager *account_manager;
- EmpathyChatroomManager *chatroom_manager;
- EmpathyEventManager *event_manager;
- EmpathySoundManager *sound_mgr;
- EmpathyCallObserver *call_observer;
- EmpathyIndividualManager *individual_manager;
- guint flash_timeout_id;
- gboolean flash_on;
-
- GSettings *gsettings_ui;
-
- GtkWidget *preferences;
- GtkWidget *main_vbox;
- GtkWidget *throbber;
- GtkWidget *presence_toolbar;
- GtkWidget *presence_chooser;
- GtkWidget *errors_vbox;
- GtkWidget *auth_vbox;
- GtkWidget *search_bar;
- GtkWidget *notebook;
- GtkWidget *no_entry_label;
- GtkWidget *button_account_settings;
- GtkWidget *button_online;
- GtkWidget *button_show_offline;
- GtkWidget *button_add_contact;
- GtkWidget *spinner_loading;
- GtkWidget *tooltip_widget;
-
- GMenu *menumodel;
- GMenu *rooms_section;
-
- GtkWidget *balance_vbox;
-
- guint size_timeout_id;
-
- /* reffed TpAccount* => visible GtkInfoBar* */
- GHashTable *errors;
-
- /* EmpathyEvent* => visible GtkInfoBar* */
- GHashTable *auths;
-
- /* stores a mapping from TpAccount to Handler ID to prevent
- * to listen more than once to the status-changed signal */
- GHashTable *status_changed_handlers;
-
- /* Actions that are enabled when there are connected accounts */
- GList *actions_connected;
-
- gboolean shell_running;
-};
-
-static void
-roster_window_remove_auth (EmpathyRosterWindow *self,
- EmpathyEvent *event)
-{
- GtkWidget *error_widget;
-
- error_widget = g_hash_table_lookup (self->priv->auths, event);
- if (error_widget != NULL)
- {
- gtk_widget_destroy (error_widget);
- g_hash_table_remove (self->priv->auths, event);
- }
-}
-
-static void
-roster_window_auth_add_clicked_cb (GtkButton *button,
- EmpathyRosterWindow *self)
-{
- EmpathyEvent *event;
-
- event = g_object_get_data (G_OBJECT (button), "event");
-
- empathy_event_approve (event);
-
- roster_window_remove_auth (self, event);
-}
-
-static void
-roster_window_auth_close_clicked_cb (GtkButton *button,
- EmpathyRosterWindow *self)
-{
- EmpathyEvent *event;
-
- event = g_object_get_data (G_OBJECT (button), "event");
-
- empathy_event_decline (event);
- roster_window_remove_auth (self, event);
-}
-
-static void
-roster_window_auth_display (EmpathyRosterWindow *self,
- EmpathyEvent *event)
-{
- TpAccount *account = event->account;
- GtkWidget *info_bar;
- GtkWidget *content_area;
- GtkWidget *image;
- GtkWidget *label;
- GtkWidget *add_button;
- GtkWidget *close_button;
- GtkWidget *action_area;
- GtkWidget *action_grid;
- const gchar *icon_name;
- gchar *str;
-
- if (g_hash_table_lookup (self->priv->auths, event) != NULL)
- return;
-
- info_bar = gtk_info_bar_new ();
- gtk_info_bar_set_message_type (GTK_INFO_BAR (info_bar), GTK_MESSAGE_QUESTION);
-
- gtk_widget_set_no_show_all (info_bar, TRUE);
- gtk_box_pack_start (GTK_BOX (self->priv->auth_vbox), info_bar, FALSE, TRUE, 0);
- gtk_widget_show (info_bar);
-
- icon_name = tp_account_get_icon_name (account);
- image = gtk_image_new_from_icon_name (icon_name, GTK_ICON_SIZE_SMALL_TOOLBAR);
- gtk_widget_show (image);
-
- str = g_markup_printf_escaped ("<b>%s</b>\n%s",
- tp_account_get_display_name (account),
- _("Password required"));
-
- label = gtk_label_new (str);
- gtk_label_set_use_markup (GTK_LABEL (label), TRUE);
- gtk_label_set_ellipsize (GTK_LABEL (label), PANGO_ELLIPSIZE_END);
- gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
- gtk_widget_show (label);
-
- g_free (str);
-
- content_area = gtk_info_bar_get_content_area (GTK_INFO_BAR (info_bar));
- gtk_box_pack_start (GTK_BOX (content_area), image, FALSE, FALSE, 0);
- gtk_box_pack_start (GTK_BOX (content_area), label, TRUE, TRUE, 0);
-
- image = gtk_image_new_from_stock (GTK_STOCK_ADD, GTK_ICON_SIZE_BUTTON);
- add_button = gtk_button_new ();
- gtk_button_set_image (GTK_BUTTON (add_button), image);
- gtk_widget_set_tooltip_text (add_button, _("Provide Password"));
- gtk_widget_show (add_button);
-
- image = gtk_image_new_from_stock (GTK_STOCK_CLOSE, GTK_ICON_SIZE_BUTTON);
- close_button = gtk_button_new ();
- gtk_button_set_image (GTK_BUTTON (close_button), image);
- gtk_widget_set_tooltip_text (close_button, _("Disconnect"));
- gtk_widget_show (close_button);
-
- action_grid = gtk_grid_new ();
- gtk_grid_set_column_spacing (GTK_GRID (action_grid), 6);
- gtk_widget_show (action_grid);
-
- action_area = gtk_info_bar_get_action_area (GTK_INFO_BAR (info_bar));
- gtk_box_pack_start (GTK_BOX (action_area), action_grid, FALSE, FALSE, 0);
-
- gtk_grid_attach (GTK_GRID (action_grid), add_button, 0, 0, 1, 1);
- gtk_grid_attach (GTK_GRID (action_grid), close_button, 1, 0, 1, 1);
-
- g_object_set_data_full (G_OBJECT (info_bar),
- "event", event, NULL);
- g_object_set_data_full (G_OBJECT (add_button),
- "event", event, NULL);
- g_object_set_data_full (G_OBJECT (close_button),
- "event", event, NULL);
-
- g_signal_connect (add_button, "clicked",
- G_CALLBACK (roster_window_auth_add_clicked_cb), self);
- g_signal_connect (close_button, "clicked",
- G_CALLBACK (roster_window_auth_close_clicked_cb), self);
-
- gtk_widget_show (self->priv->auth_vbox);
-
- g_hash_table_insert (self->priv->auths, event, info_bar);
-}
-
-static FolksIndividual *
-ensure_individual_for_event (EmpathyEvent *event)
-{
- TpContact *contact;
-
- contact = empathy_contact_get_tp_contact (event->contact);
- if (contact == NULL)
- return NULL;
-
- return empathy_ensure_individual_from_tp_contact (contact);
-}
-
-static void
-roster_window_event_added_cb (EmpathyEventManager *manager,
- EmpathyEvent *event,
- EmpathyRosterWindow *self)
-{
- if (event->contact)
- {
- FolksIndividual *individual;
-
- individual = ensure_individual_for_event (event);
- if (individual == NULL)
- return;
-
- event->roster_view_id = empathy_roster_view_add_event (self->priv->view,
- individual, event->icon_name, event);
-
- g_object_unref (individual);
- }
- else if (event->type == EMPATHY_EVENT_TYPE_AUTH)
- {
- roster_window_auth_display (self, event);
- }
-}
-
-static void
-roster_window_event_removed_cb (EmpathyEventManager *manager,
- EmpathyEvent *event,
- EmpathyRosterWindow *self)
-{
- if (event->type == EMPATHY_EVENT_TYPE_AUTH)
- {
- roster_window_remove_auth (self, event);
- return;
- }
-
- empathy_roster_view_remove_event (self->priv->view, event->roster_view_id);
-}
-
-static gboolean
-roster_window_load_events_idle_cb (gpointer user_data)
-{
- EmpathyRosterWindow *self = user_data;
- GSList *l;
-
- l = empathy_event_manager_get_events (self->priv->event_manager);
- while (l != NULL)
- {
- roster_window_event_added_cb (self->priv->event_manager, l->data,
- self);
- l = l->next;
- }
-
- return FALSE;
-}
-
-static void
-individual_activated_cb (EmpathyRosterView *self,
- FolksIndividual *individual,
- gpointer user_data)
-{
- EmpathyContact *contact;
-
- contact = empathy_contact_dup_best_for_action (individual,
- EMPATHY_ACTION_CHAT);
-
- if (contact == NULL)
- return;
-
- DEBUG ("Starting a chat");
-
- empathy_chat_with_contact (contact, gtk_get_current_event_time ());
-
- g_object_unref (contact);
-}
-
-static void
-event_activated_cb (EmpathyRosterView *self,
- FolksIndividual *individual,
- EmpathyEvent *event,
- gpointer user_data)
-{
- empathy_event_activate (event);
-}
-
-static void
-button_account_settings_clicked_cb (GtkButton *button,
- EmpathyRosterWindow *self)
-{
- empathy_accounts_dialog_show_application (gdk_screen_get_default (),
- NULL, FALSE, FALSE);
-}
-
-static void
-button_online_clicked_cb (GtkButton *button,
- EmpathyRosterWindow *self)
-{
- EmpathyPresenceManager *mgr;
-
- mgr = empathy_presence_manager_dup_singleton ();
-
- empathy_presence_manager_set_state (mgr,
- TP_CONNECTION_PRESENCE_TYPE_AVAILABLE);
-
- g_object_unref (mgr);
-}
-
-static void
-button_show_offline_clicked_cb (GtkButton *button,
- EmpathyRosterWindow *self)
-{
- g_settings_set_boolean (self->priv->gsettings_ui,
- EMPATHY_PREFS_UI_SHOW_OFFLINE, TRUE);
-}
-
-static void
-button_add_contact_clicked_cb (GtkButton *button,
- EmpathyRosterWindow *self)
-{
- empathy_new_individual_dialog_show (GTK_WINDOW (self));
-}
-
-typedef enum
-{
- PAGE_MESSAGE_FLAG_NONE = 0,
- PAGE_MESSAGE_FLAG_ACCOUNTS = 1 << 0,
- PAGE_MESSAGE_FLAG_SPINNER = 1 << 2,
- PAGE_MESSAGE_FLAG_ONLINE = 1 << 3,
- PAGE_MESSAGE_FLAG_SHOW_OFFLINE = 1 << 4,
- PAGE_MESSAGE_FLAG_ADD_CONTACT = 1 << 5,
-} PageMessageFlags;
-
-static gboolean
-can_add_contact (EmpathyRosterWindow *self)
-{
- GList *accounts, *l;
- gboolean result = FALSE;
-
- accounts = tp_account_manager_dup_valid_accounts (
- self->priv->account_manager);
- for (l = accounts; l != NULL && !result; l = g_list_next (l))
- {
- TpAccount *account = TP_ACCOUNT (l->data);
- TpConnection *conn;
-
- conn = tp_account_get_connection (account);
- if (conn == NULL)
- continue;
-
- if (tp_connection_get_can_change_contact_list (conn))
- result = TRUE;
- }
-
- g_list_free_full (accounts, g_object_unref);
- return result;
-}
-
-static void
-display_page_message (EmpathyRosterWindow *self,
- const gchar *msg,
- PageMessageFlags flags)
-{
- if (msg != NULL)
- {
- gchar *tmp;
-
- tmp = g_strdup_printf ("<b><span size='xx-large'>%s</span></b>", msg);
-
- gtk_label_set_markup (GTK_LABEL (self->priv->no_entry_label), tmp);
- g_free (tmp);
-
- gtk_label_set_line_wrap (GTK_LABEL (self->priv->no_entry_label), TRUE);
- gtk_widget_show (self->priv->no_entry_label);
- }
- else
- {
- gtk_widget_hide (self->priv->no_entry_label);
- }
-
- gtk_widget_set_visible (self->priv->button_account_settings,
- (flags & PAGE_MESSAGE_FLAG_ACCOUNTS) != 0);
- gtk_widget_set_visible (self->priv->spinner_loading,
- (flags & PAGE_MESSAGE_FLAG_SPINNER) != 0);
- gtk_widget_set_visible (self->priv->button_online,
- (flags & PAGE_MESSAGE_FLAG_ONLINE) != 0);
- gtk_widget_set_visible (self->priv->button_show_offline,
- (flags & PAGE_MESSAGE_FLAG_SHOW_OFFLINE) != 0);
- gtk_widget_set_visible (self->priv->button_add_contact,
- (flags & PAGE_MESSAGE_FLAG_ADD_CONTACT) != 0);
-
- if ((flags & PAGE_MESSAGE_FLAG_ADD_CONTACT) != 0)
- gtk_widget_set_sensitive (self->priv->button_add_contact,
- can_add_contact (self));
-
- gtk_notebook_set_current_page (GTK_NOTEBOOK (self->priv->notebook),
- PAGE_MESSAGE);
-}
-
-static void
-display_page_no_account (EmpathyRosterWindow *self)
-{
- display_page_message (self,
- _("You need to set up an account to see contacts here."),
- PAGE_MESSAGE_FLAG_ACCOUNTS);
-}
-
-static void
-display_page_contact_list (EmpathyRosterWindow *self)
-{
- if (!empathy_individual_manager_get_contacts_loaded (
- self->priv->individual_manager))
- /* We'll display the contact list once we're done loading */
- return;
-
- gtk_notebook_set_current_page (GTK_NOTEBOOK (self->priv->notebook),
- PAGE_CONTACT_LIST);
-}
-
-static void
-roster_window_remove_error (EmpathyRosterWindow *self,
- TpAccount *account)
-{
- GtkWidget *error_widget;
-
- error_widget = g_hash_table_lookup (self->priv->errors, account);
- if (error_widget != NULL)
- {
- gtk_widget_destroy (error_widget);
- g_hash_table_remove (self->priv->errors, account);
- }
-}
-
-static void
-roster_window_account_disabled_cb (TpAccountManager *manager,
- TpAccount *account,
- EmpathyRosterWindow *self)
-{
- roster_window_remove_error (self, account);
-}
-
-typedef enum
-{
- ERROR_RESPONSE_RETRY,
- ERROR_RESPONSE_EDIT,
- ERROR_RESPONSE_CLOSE,
- ERROR_RESPONSE_UPGRADE,
-} ErrorResponse;
-
-static void
-roster_window_error_response_cb (GtkInfoBar *infobar,
- gint response_id,
- EmpathyRosterWindow *self)
-{
- TpAccount *account;
-
- account = g_object_get_data (G_OBJECT (infobar), "account");
-
- switch (response_id)
- {
- case ERROR_RESPONSE_RETRY:
- tp_account_reconnect_async (account, NULL, NULL);
- break;
-
- case ERROR_RESPONSE_EDIT:
- empathy_accounts_dialog_show_application (
- gtk_widget_get_screen (GTK_WIDGET (infobar)),
- account, FALSE, FALSE);
- break;
-
- case ERROR_RESPONSE_CLOSE:
- break;
-
- case ERROR_RESPONSE_UPGRADE:
- {
- GtkWidget *dialog;
-
- dialog = gtk_message_dialog_new (GTK_WINDOW (self),
- GTK_DIALOG_MODAL, GTK_MESSAGE_ERROR, GTK_BUTTONS_OK,
- _("Sorry, %s accounts can’t be used until your %s software is updated."),
- tp_account_get_protocol_name (account),
- tp_account_get_protocol_name (account));
-
- g_signal_connect_swapped (dialog, "response",
- G_CALLBACK (gtk_widget_destroy),
- dialog);
-
- gtk_widget_show (dialog);
- }
- }
-
- roster_window_remove_error (self, account);
-}
-
-static GtkWidget *
-roster_window_error_create_info_bar (EmpathyRosterWindow *self,
- TpAccount *account,
- GtkMessageType message_type,
- const gchar *message_markup)
-{
- GtkWidget *info_bar;
- GtkWidget *content_area;
- GtkWidget *action_area;
- GtkWidget *label;
- GtkWidget *image;
- const gchar *icon_name;
-
- /* If there are other errors, remove them */
- roster_window_remove_error (self, account);
-
- info_bar = gtk_info_bar_new ();
- gtk_info_bar_set_message_type (GTK_INFO_BAR (info_bar), message_type);
-
- gtk_widget_set_no_show_all (info_bar, TRUE);
- gtk_box_pack_start (GTK_BOX (self->priv->errors_vbox), info_bar, FALSE, TRUE, 0);
- gtk_widget_show (info_bar);
-
- icon_name = tp_account_get_icon_name (account);
- image = gtk_image_new_from_icon_name (icon_name, GTK_ICON_SIZE_SMALL_TOOLBAR);
- gtk_widget_show (image);
-
- label = gtk_label_new (message_markup);
- gtk_label_set_use_markup (GTK_LABEL (label), TRUE);
- gtk_label_set_line_wrap (GTK_LABEL (label), TRUE);
- gtk_label_set_ellipsize (GTK_LABEL (label), PANGO_ELLIPSIZE_END);
- gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
- gtk_widget_show (label);
-
- content_area = gtk_info_bar_get_content_area (GTK_INFO_BAR (info_bar));
- gtk_box_pack_start (GTK_BOX (content_area), image, FALSE, FALSE, 0);
- gtk_box_pack_start (GTK_BOX (content_area), label, TRUE, TRUE, 0);
-
- action_area = gtk_info_bar_get_action_area (GTK_INFO_BAR (info_bar));
- gtk_orientable_set_orientation (GTK_ORIENTABLE (action_area),
- GTK_ORIENTATION_HORIZONTAL);
- gtk_style_context_add_class (gtk_widget_get_style_context (action_area),
- "empathy-roster-window-error-button");
-
- g_object_set_data_full (G_OBJECT (info_bar),
- "account", g_object_ref (account),
- g_object_unref);
-
- g_signal_connect (info_bar, "response",
- G_CALLBACK (roster_window_error_response_cb), self);
-
- gtk_widget_show (self->priv->errors_vbox);
-
- g_hash_table_insert (self->priv->errors, g_object_ref (account), info_bar);
-
- return info_bar;
-}
-
-static void
-roster_window_error_add_stock_button (GtkInfoBar *info_bar,
- const gchar *stock_id,
- const gchar *tooltip,
- ErrorResponse response_id)
-{
- GtkWidget *image;
- GtkWidget *button;
-
- image = gtk_image_new_from_stock (stock_id, GTK_ICON_SIZE_BUTTON);
- button = gtk_button_new ();
- gtk_button_set_image (GTK_BUTTON (button), image);
- gtk_widget_set_tooltip_text (button, tooltip);
- gtk_widget_show (button);
-
- gtk_info_bar_add_action_widget (info_bar, button, response_id);
-}
-
-#ifdef HAVE_UOA
-static const gchar *
-uoa_account_display_string (TpAccount *account)
-{
- const gchar *service;
-
- service = tp_account_get_service (account);
-
- /* Use well known service name, if available */
- if (!tp_strdiff (service, "windows-live"))
- return _("Windows Live");
- else if (!tp_strdiff (service, "google-talk"))
- return _("Google Talk");
- else if (!tp_strdiff (service, "facebook"))
- return _("Facebook");
-
- return tp_account_get_display_name (account);
-}
-
-static void
-roster_window_uoa_auth_error (EmpathyRosterWindow *self,
- TpAccount *account)
-{
- GtkWidget *info_bar;
- GtkWidget *image;
- GtkWidget *button;
- gchar *str;
-
- /* translators: %s is an account name like 'Facebook' or 'Google Talk' */
- str = g_strdup_printf (_("%s account requires authorisation"),
- uoa_account_display_string (account));
-
- info_bar = roster_window_error_create_info_bar (self, account,
- GTK_MESSAGE_OTHER, str);
- g_free (str);
-
- image = gtk_image_new_from_icon_name ("credentials-preferences",
- GTK_ICON_SIZE_BUTTON);
- button = gtk_button_new ();
- gtk_button_set_image (GTK_BUTTON (button), image);
- gtk_widget_set_tooltip_text (button, _("Online Accounts"));
- gtk_widget_show (button);
-
- gtk_info_bar_add_action_widget (GTK_INFO_BAR (info_bar), button,
- ERROR_RESPONSE_EDIT);
-}
-#endif
-
-static void
-roster_window_error_display (EmpathyRosterWindow *self,
- TpAccount *account)
-{
- const gchar *error_message;
- gboolean user_requested;
- GtkWidget *info_bar;
- gchar *str;
-
- error_message =
- empathy_account_get_error_message (account, &user_requested);
-
- if (user_requested)
- return;
-
-#ifdef HAVE_UOA
- if (!tp_strdiff (TP_ERROR_STR_AUTHENTICATION_FAILED,
- tp_account_get_detailed_error (account, NULL)) &&
- !tp_strdiff (tp_account_get_storage_provider (account),
- EMPATHY_UOA_PROVIDER))
- {
- roster_window_uoa_auth_error (self, account);
- return;
- }
-#endif
-
- str = g_markup_printf_escaped ("<b>%s</b>\n%s",
- tp_account_get_display_name (account), error_message);
-
- info_bar = roster_window_error_create_info_bar (self, account,
- GTK_MESSAGE_ERROR, str);
- g_free (str);
-
- gtk_widget_set_tooltip_text (self->priv->errors_vbox, error_message);
-
- if (!tp_strdiff (TP_ERROR_STR_SOFTWARE_UPGRADE_REQUIRED,
- tp_account_get_detailed_error (account, NULL)))
- {
- roster_window_error_add_stock_button (GTK_INFO_BAR (info_bar),
- GTK_STOCK_REFRESH, _("Update software..."),
- ERROR_RESPONSE_RETRY);
- }
- else
- {
- roster_window_error_add_stock_button (GTK_INFO_BAR (info_bar),
- GTK_STOCK_REFRESH, _("Reconnect"),
- ERROR_RESPONSE_RETRY);
-
- roster_window_error_add_stock_button (GTK_INFO_BAR (info_bar),
- GTK_STOCK_EDIT, _("Edit Account"),
- ERROR_RESPONSE_EDIT);
- }
-
- roster_window_error_add_stock_button (GTK_INFO_BAR (info_bar),
- GTK_STOCK_CLOSE, _("Close"),
- ERROR_RESPONSE_CLOSE);
-}
-
-static void
-roster_window_update_status (EmpathyRosterWindow *self)
-{
- gboolean connected, connecting;
- GList *l;
- GAction *action;
-
- connected = empathy_account_manager_get_accounts_connected (&connecting);
-
- /* Update the spinner state */
- if (connecting)
- {
- gtk_spinner_start (GTK_SPINNER (self->priv->throbber));
- gtk_widget_show (self->priv->throbber);
- }
- else
- {
- gtk_spinner_stop (GTK_SPINNER (self->priv->throbber));
- gtk_widget_hide (self->priv->throbber);
- }
-
- /* Update widgets sensibility */
- for (l = self->priv->actions_connected; l; l = l->next)
- g_simple_action_set_enabled (l->data, connected);
-
- action = g_action_map_lookup_action (G_ACTION_MAP (self), "chat_add_contact");
- if (!can_add_contact (self))
- g_simple_action_set_enabled (G_SIMPLE_ACTION (action), FALSE);
-}
-
-static void
-roster_window_balance_update_balance (EmpathyRosterWindow *self,
- TpAccount *account)
-{
- TpConnection *conn;
- GtkWidget *label;
- int amount = 0;
- guint scale = G_MAXINT32;
- const gchar *currency = "";
- char *money;
-
- conn = tp_account_get_connection (account);
- if (conn == NULL)
- return;
-
- if (!tp_connection_get_balance (conn, &amount, &scale, &currency))
- return;
-
- if (amount == 0 &&
- scale == G_MAXINT32 &&
- tp_str_empty (currency))
- {
- /* unknown balance */
- money = g_strdup ("--");
- }
- else
- {
- char *tmp = empathy_format_currency (amount, scale, currency);
-
- money = g_strdup_printf ("%s %s", currency, tmp);
- g_free (tmp);
- }
-
- /* update the money label in the roster */
- label = g_object_get_data (G_OBJECT (account), "balance-money-label");
-
- gtk_label_set_text (GTK_LABEL (label), money);
- g_free (money);
-}
-
-static void
-roster_window_balance_changed_cb (TpConnection *conn,
- guint balance,
- guint scale,
- const gchar *currency,
- EmpathyRosterWindow *self)
-{
- TpAccount *account;
-
- account = tp_connection_get_account (conn);
- if (account == NULL)
- return;
-
- roster_window_balance_update_balance (self, account);
-}
-
-static void
-roster_window_setup_balance (EmpathyRosterWindow *self,
- TpAccount *account)
-{
- TpConnection *conn = tp_account_get_connection (account);
- GtkWidget *hbox, *image, *label;
- const gchar *uri;
-
- if (conn == NULL)
- return;
-
- if (!tp_proxy_is_prepared (conn, TP_CONNECTION_FEATURE_BALANCE))
- return;
-
- DEBUG ("Setting up balance for acct: %s",
- tp_account_get_display_name (account));
-
- /* create the display widget */
- hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 3);
- gtk_container_set_border_width (GTK_CONTAINER (hbox), 3);
-
- /* protocol icon */
- image = gtk_image_new ();
- gtk_box_pack_start (GTK_BOX (hbox), image, FALSE, TRUE, 0);
- g_object_bind_property (account, "icon-name", image, "icon-name",
- G_BINDING_SYNC_CREATE);
-
- /* account name label */
- label = gtk_label_new ("");
- gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
- gtk_label_set_ellipsize (GTK_LABEL (label), PANGO_ELLIPSIZE_END);
- gtk_box_pack_start (GTK_BOX (hbox), label, TRUE, TRUE, 0);
- g_object_bind_property (account, "display-name", label, "label",
- G_BINDING_SYNC_CREATE);
-
- /* balance label */
- label = gtk_label_new ("");
- gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
- gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 0);
-
- /* top up button */
- uri = tp_connection_get_balance_uri (conn);
-
- if (!tp_str_empty (uri))
- {
- GtkWidget *button;
-
- button = gtk_button_new ();
- gtk_container_add (GTK_CONTAINER (button),
- gtk_image_new_from_icon_name ("emblem-symbolic-link",
- GTK_ICON_SIZE_SMALL_TOOLBAR));
- gtk_button_set_relief (GTK_BUTTON (button), GTK_RELIEF_NONE);
- gtk_widget_set_tooltip_text (button, _("Top up account"));
- gtk_box_pack_start (GTK_BOX (hbox), button, FALSE, TRUE, 0);
-
- g_signal_connect_data (button, "clicked",
- G_CALLBACK (empathy_url_show),
- g_strdup (uri), (GClosureNotify) g_free,
- 0);
- }
-
- gtk_box_pack_start (GTK_BOX (self->priv->balance_vbox), hbox, FALSE, TRUE, 0);
- gtk_widget_show_all (hbox);
-
- g_object_set_data (G_OBJECT (account), "balance-money-label", label);
- g_object_set_data (G_OBJECT (account), "balance-money-hbox", hbox);
-
- roster_window_balance_update_balance (self, account);
-
- g_signal_connect (conn, "balance-changed",
- G_CALLBACK (roster_window_balance_changed_cb), self);
-}
-
-static void
-roster_window_remove_balance_action (EmpathyRosterWindow *self,
- TpAccount *account)
-{
- GtkWidget *hbox =
- g_object_get_data (G_OBJECT (account), "balance-money-hbox");
-
- if (hbox == NULL)
- return;
-
- g_return_if_fail (GTK_IS_BOX (hbox));
-
- gtk_widget_destroy (hbox);
-}
-
-static void set_notebook_page (EmpathyRosterWindow *self);
-
-static void
-roster_window_connection_changed_cb (TpAccount *account,
- guint old_status,
- guint current,
- guint reason,
- gchar *dbus_error_name,
- GHashTable *details,
- EmpathyRosterWindow *self)
-{
- roster_window_update_status (self);
- set_notebook_page (self);
-
- if (current == TP_CONNECTION_STATUS_DISCONNECTED &&
- reason != TP_CONNECTION_STATUS_REASON_REQUESTED)
- {
- roster_window_error_display (self, account);
- }
-
- if (current == TP_CONNECTION_STATUS_DISCONNECTED)
- {
- empathy_sound_manager_play (self->priv->sound_mgr, GTK_WIDGET (self),
- EMPATHY_SOUND_ACCOUNT_DISCONNECTED);
- }
-
- if (current == TP_CONNECTION_STATUS_CONNECTED)
- {
- empathy_sound_manager_play (self->priv->sound_mgr, GTK_WIDGET (self),
- EMPATHY_SOUND_ACCOUNT_CONNECTED);
-
- /* Account connected without error, remove error message if any */
- roster_window_remove_error (self, account);
- }
-}
-
-static void
-roster_window_accels_load (void)
-{
- gchar *filename;
-
- filename = g_build_filename (g_get_user_config_dir (),
- 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
-roster_window_accels_save (void)
-{
- gchar *dir;
- gchar *file_with_path;
-
- dir = g_build_filename (g_get_user_config_dir (), 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
-empathy_roster_window_finalize (GObject *window)
-{
- EmpathyRosterWindow *self = EMPATHY_ROSTER_WINDOW (window);
- GHashTableIter iter;
- gpointer key, value;
-
- /* Save user-defined accelerators. */
- roster_window_accels_save ();
-
- g_list_free (self->priv->actions_connected);
-
- g_object_unref (self->priv->account_manager);
- g_object_unref (self->priv->sound_mgr);
- g_hash_table_unref (self->priv->errors);
- g_hash_table_unref (self->priv->auths);
-
- /* disconnect all handlers of status-changed signal */
- g_hash_table_iter_init (&iter, self->priv->status_changed_handlers);
- while (g_hash_table_iter_next (&iter, &key, &value))
- g_signal_handler_disconnect (TP_ACCOUNT (key), GPOINTER_TO_UINT (value));
-
- g_hash_table_unref (self->priv->status_changed_handlers);
-
- g_object_unref (self->priv->call_observer);
- g_object_unref (self->priv->event_manager);
- g_object_unref (self->priv->chatroom_manager);
-
- g_object_unref (self->priv->gsettings_ui);
- g_object_unref (self->priv->individual_manager);
-
- g_object_unref (self->priv->menumodel);
- g_object_unref (self->priv->rooms_section);
-
- g_clear_object (&self->priv->tooltip_widget);
-
- G_OBJECT_CLASS (empathy_roster_window_parent_class)->finalize (window);
-}
-
-static gboolean
-roster_window_key_press_event_cb (GtkWidget *window,
- GdkEventKey *event,
- EmpathyRosterWindow *self)
-{
- if (event->keyval == GDK_KEY_T
- && event->state & GDK_SHIFT_MASK
- && event->state & GDK_CONTROL_MASK)
- empathy_chat_manager_call_undo_closed_chat ();
-
- if (event->keyval == GDK_KEY_f
- && event->state & GDK_CONTROL_MASK)
- gtk_widget_show (self->priv->search_bar);
-
- return FALSE;
-}
-
-static void
-unprepare_cb (GObject *source,
- GAsyncResult *result,
- gpointer user_data)
-{
- GtkWidget *self = user_data;
-
- gtk_widget_destroy (self);
-}
-
-static void
-roster_window_chat_quit_cb (GSimpleAction *action,
- GVariant *parameter,
- gpointer user_data)
-{
- EmpathyRosterWindow *self = user_data;
-
- /* Destroying the window will make us leave the main loop and so exit the
- * process. Before doing so we want to unprepare the individual manager.
- * Just hide the window now and actually destroy it once Folks is done.
- */
- gtk_widget_hide (GTK_WIDGET (self));
-
- empathy_individual_manager_unprepare_async (self->priv->individual_manager,
- unprepare_cb, self);
-}
-
-static void
-roster_window_view_history_cb (GSimpleAction *action,
- GVariant *parameter,
- gpointer user_data)
-{
- EmpathyRosterWindow *self = user_data;
-
- empathy_log_window_show (NULL, NULL, FALSE, GTK_WINDOW (self));
-}
-
-static void
-roster_window_chat_new_message_cb (GSimpleAction *action,
- GVariant *parameter,
- gpointer user_data)
-{
- EmpathyRosterWindow *self = user_data;
-
- empathy_new_message_dialog_show (GTK_WINDOW (self));
-}
-
-static void
-roster_window_chat_new_call_cb (GSimpleAction *action,
- GVariant *parameter,
- gpointer user_data)
-{
- EmpathyRosterWindow *self = user_data;
-
- empathy_new_call_dialog_show (GTK_WINDOW (self));
-}
-
-static void
-roster_window_chat_add_contact_cb (GSimpleAction *action,
- GVariant *parameter,
- gpointer user_data)
-{
- EmpathyRosterWindow *self = user_data;
-
- empathy_new_individual_dialog_show (GTK_WINDOW (self));
-}
-
-static void
-roster_window_chat_search_contacts_cb (GSimpleAction *action,
- GVariant *parameter,
- gpointer user_data)
-{
- EmpathyRosterWindow *self = user_data;
- GtkWidget *dialog;
-
- dialog = empathy_contact_search_dialog_new (
- GTK_WINDOW (self));
-
- gtk_widget_show (dialog);
-}
-
-static void
-roster_window_view_show_ft_manager (GSimpleAction *action,
- GVariant *parameter,
- gpointer user_data)
-{
- empathy_ft_manager_show ();
-}
-
-static void
-join_chatroom (EmpathyChatroom *chatroom,
- gint64 timestamp)
-{
- TpAccount *account;
- const gchar *room;
-
- account = empathy_chatroom_get_account (chatroom);
- room = empathy_chatroom_get_room (chatroom);
-
- DEBUG ("Requesting channel for '%s'", room);
- empathy_join_muc (account, room, timestamp);
-}
-
-typedef struct
-{
- TpAccount *account;
- EmpathyChatroom *chatroom;
- gint64 timestamp;
- glong sig_id;
- guint timeout;
-} join_fav_account_sig_ctx;
-
-static join_fav_account_sig_ctx *
-join_fav_account_sig_ctx_new (TpAccount *account,
- EmpathyChatroom *chatroom,
- gint64 timestamp)
-{
- join_fav_account_sig_ctx *ctx = g_slice_new0 (
- join_fav_account_sig_ctx);
-
- ctx->account = g_object_ref (account);
- ctx->chatroom = g_object_ref (chatroom);
- ctx->timestamp = timestamp;
- return ctx;
-}
-
-static void
-join_fav_account_sig_ctx_free (join_fav_account_sig_ctx *ctx)
-{
- g_object_unref (ctx->account);
- g_object_unref (ctx->chatroom);
- g_slice_free (join_fav_account_sig_ctx, ctx);
-}
-
-static void
-account_status_changed_cb (TpAccount *account,
- TpConnectionStatus old_status,
- TpConnectionStatus new_status,
- guint reason,
- gchar *dbus_error_name,
- GHashTable *details,
- gpointer user_data)
-{
- join_fav_account_sig_ctx *ctx = user_data;
-
- switch (new_status)
- {
- case TP_CONNECTION_STATUS_DISCONNECTED:
- /* Don't wait any longer */
- goto finally;
- break;
-
- case TP_CONNECTION_STATUS_CONNECTING:
- /* Wait a bit */
- return;
-
- case TP_CONNECTION_STATUS_CONNECTED:
- /* We can join the room */
- break;
-
- default:
- g_assert_not_reached ();
- }
-
- join_chatroom (ctx->chatroom, ctx->timestamp);
-
-finally:
- g_source_remove (ctx->timeout);
- g_signal_handler_disconnect (account, ctx->sig_id);
-}
-
-#define JOIN_FAVORITE_TIMEOUT 5
-
-static gboolean
-join_favorite_timeout_cb (gpointer data)
-{
- join_fav_account_sig_ctx *ctx = data;
-
- /* stop waiting for joining the favorite room */
- g_signal_handler_disconnect (ctx->account, ctx->sig_id);
- return FALSE;
-}
-
-static void
-roster_window_favorite_chatroom_join (EmpathyChatroom *chatroom)
-{
- TpAccount *account;
-
- account = empathy_chatroom_get_account (chatroom);
- if (tp_account_get_connection_status (account, NULL) !=
- TP_CONNECTION_STATUS_CONNECTED)
- {
- join_fav_account_sig_ctx *ctx;
-
- ctx = join_fav_account_sig_ctx_new (account, chatroom,
- empathy_get_current_action_time ());
-
- ctx->sig_id = g_signal_connect_data (account, "status-changed",
- G_CALLBACK (account_status_changed_cb), ctx,
- (GClosureNotify) join_fav_account_sig_ctx_free, 0);
-
- ctx->timeout = g_timeout_add_seconds (JOIN_FAVORITE_TIMEOUT,
- join_favorite_timeout_cb, ctx);
- return;
- }
-
- join_chatroom (chatroom, empathy_get_current_action_time ());
-}
-
-static void
-roster_window_favorite_chatroom_menu_activate_cb (GAction *action,
- GVariant *parameter,
- EmpathyChatroom *chatroom)
-{
- roster_window_favorite_chatroom_join (chatroom);
-}
-
-static gchar *
-dup_join_action_name (EmpathyChatroom *chatroom,
- gboolean prefix)
-{
- return g_strconcat (prefix ? "win." : "", "join-",
- empathy_chatroom_get_name (chatroom), NULL);
-}
-
-static void
-roster_window_favorite_chatroom_menu_add (EmpathyRosterWindow *self,
- EmpathyChatroom *chatroom)
-{
- GMenuItem *item;
- const gchar *name, *account_name;
- gchar *label, *action_name;
- GAction *action;
-
- name = empathy_chatroom_get_name (chatroom);
- account_name = tp_account_get_display_name (
- empathy_chatroom_get_account (chatroom));
-
- label = g_strdup_printf ("%s (%s)", name, account_name);
- action_name = dup_join_action_name (chatroom, FALSE);
-
- action = (GAction *) g_simple_action_new (action_name, NULL);
- g_free (action_name);
-
- g_signal_connect (action, "activate",
- G_CALLBACK (roster_window_favorite_chatroom_menu_activate_cb),
- chatroom);
-
- g_action_map_add_action (G_ACTION_MAP (self), action);
-
- action_name = dup_join_action_name (chatroom, TRUE);
-
- item = g_menu_item_new (label, action_name);
- g_menu_item_set_attribute (item, "room-name", "s", name);
- g_menu_append_item (self->priv->rooms_section, item);
-
- g_free (label);
- g_free (action_name);
- g_object_unref (action);
-}
-
-static void
-roster_window_favorite_chatroom_menu_added_cb (EmpathyChatroomManager *manager,
- EmpathyChatroom *chatroom,
- EmpathyRosterWindow *self)
-{
- roster_window_favorite_chatroom_menu_add (self, chatroom);
-}
-
-static void
-roster_window_favorite_chatroom_menu_removed_cb (
- EmpathyChatroomManager *manager,
- EmpathyChatroom *chatroom,
- EmpathyRosterWindow *self)
-{
- GList *chatrooms;
- gchar *act;
- gint i;
-
- act = dup_join_action_name (chatroom, TRUE);
-
- g_action_map_remove_action (G_ACTION_MAP (self), act);
-
- for (i = 0; i < g_menu_model_get_n_items (
- G_MENU_MODEL (self->priv->rooms_section)); i++)
- {
- const gchar *name;
-
- if (g_menu_model_get_item_attribute (
- G_MENU_MODEL (self->priv->rooms_section), i, "room-name",
- "s", &name)
- && !tp_strdiff (name, empathy_chatroom_get_name (chatroom)))
- {
- g_menu_remove (self->priv->rooms_section, i);
- break;
- }
- }
-
- chatrooms = empathy_chatroom_manager_get_chatrooms (
- self->priv->chatroom_manager, NULL);
-
- g_list_free (chatrooms);
-}
-
-static void
-roster_window_favorite_chatroom_menu_setup (EmpathyRosterWindow *self)
-{
- GList *chatrooms, *l;
-
- self->priv->chatroom_manager = empathy_chatroom_manager_dup_singleton (NULL);
-
- chatrooms = empathy_chatroom_manager_get_chatrooms (
- self->priv->chatroom_manager, NULL);
-
- for (l = chatrooms; l; l = l->next)
- roster_window_favorite_chatroom_menu_add (self, l->data);
-
- g_signal_connect (self->priv->chatroom_manager, "chatroom-added",
- G_CALLBACK (roster_window_favorite_chatroom_menu_added_cb),
- self);
-
- g_signal_connect (self->priv->chatroom_manager, "chatroom-removed",
- G_CALLBACK (roster_window_favorite_chatroom_menu_removed_cb),
- self);
-
- g_list_free (chatrooms);
-}
-
-static void
-roster_window_room_join_new_cb (GSimpleAction *action,
- GVariant *parameter,
- gpointer user_data)
-{
- EmpathyRosterWindow *self = user_data;
-
- empathy_new_chatroom_dialog_show (GTK_WINDOW (self));
-}
-
-static void
-roster_window_room_join_favorites_cb (GSimpleAction *action,
- GVariant *parameter,
- gpointer user_data)
-{
- EmpathyRosterWindow *self = user_data;
- GList *chatrooms, *l;
-
- chatrooms = empathy_chatroom_manager_get_chatrooms (self->priv->chatroom_manager,
- NULL);
-
- for (l = chatrooms; l; l = l->next)
- roster_window_favorite_chatroom_join (l->data);
-
- g_list_free (chatrooms);
-}
-
-static void
-roster_window_room_manage_favorites_cb (GSimpleAction *action,
- GVariant *parameter,
- gpointer user_data)
-{
- EmpathyRosterWindow *self = user_data;
-
- empathy_chatrooms_window_show (GTK_WINDOW (self));
-}
-
-static void
-roster_window_edit_accounts_cb (GSimpleAction *action,
- GVariant *parameter,
- gpointer user_data)
-{
- empathy_accounts_dialog_show_application (gdk_screen_get_default (),
- NULL, FALSE, FALSE);
-}
-
-static void
-roster_window_edit_blocked_contacts_cb (GSimpleAction *action,
- GVariant *parameter,
- gpointer user_data)
-{
- EmpathyRosterWindow *self = user_data;
- GtkWidget *dialog;
-
- dialog = empathy_contact_blocking_dialog_new (GTK_WINDOW (self));
- gtk_widget_show (dialog);
-
- g_signal_connect (dialog, "response",
- G_CALLBACK (gtk_widget_destroy), NULL);
-}
-
-void
-empathy_roster_window_show_preferences (EmpathyRosterWindow *self,
- const gchar *tab)
-{
- if (self->priv->preferences == NULL)
- {
- self->priv->preferences = empathy_preferences_new (GTK_WINDOW (self),
- self->priv->shell_running);
- g_object_add_weak_pointer (G_OBJECT (self->priv->preferences),
- (gpointer) &self->priv->preferences);
-
- gtk_widget_show (self->priv->preferences);
- }
- else
- {
- gtk_window_present (GTK_WINDOW (self->priv->preferences));
- }
-
- if (tab != NULL)
- empathy_preferences_show_tab (
- EMPATHY_PREFERENCES (self->priv->preferences), tab);
-}
-
-static void
-roster_window_edit_preferences_cb (GSimpleAction *action,
- GVariant *parameter,
- gpointer user_data)
-{
- EmpathyRosterWindow *self = user_data;
-
- empathy_roster_window_show_preferences (self, NULL);
-}
-
-static void
-roster_window_help_about_cb (GSimpleAction *action,
- GVariant *parameter,
- gpointer user_data)
-{
- EmpathyRosterWindow *self = user_data;
-
- empathy_about_dialog_new (GTK_WINDOW (self));
-}
-
-static void
-roster_window_help_contents_cb (GSimpleAction *action,
- GVariant *parameter,
- gpointer user_data)
-{
- EmpathyRosterWindow *self = user_data;
-
- empathy_url_show (GTK_WIDGET (self), "help:empathy");
-}
-
-static gboolean
-roster_window_throbber_button_press_event_cb (GtkWidget *throbber,
- GdkEventButton *event,
- EmpathyRosterWindow *self)
-{
- if (event->type != GDK_BUTTON_PRESS ||
- event->button != 1)
- return FALSE;
-
- empathy_accounts_dialog_show_application (
- gtk_widget_get_screen (GTK_WIDGET (throbber)),
- NULL, FALSE, FALSE);
-
- return FALSE;
-}
-
-static void
-roster_window_account_removed_cb (TpAccountManager *manager,
- TpAccount *account,
- EmpathyRosterWindow *self)
-{
- /* remove errors if any */
- roster_window_remove_error (self, account);
-
- /* remove the balance action if required */
- roster_window_remove_balance_action (self, account);
-}
-
-static void
-account_connection_notify_cb (TpAccount *account,
- GParamSpec *spec,
- EmpathyRosterWindow *self)
-{
- TpConnection *conn;
-
- conn = tp_account_get_connection (account);
-
- if (conn != NULL)
- {
- roster_window_setup_balance (self, account);
- }
- else
- {
- /* remove balance action if required */
- roster_window_remove_balance_action (self, account);
- }
-}
-
-static void
-add_account (EmpathyRosterWindow *self,
- TpAccount *account)
-{
- gulong handler_id;
-
- handler_id = GPOINTER_TO_UINT (g_hash_table_lookup (
- self->priv->status_changed_handlers, account));
-
- /* connect signal only if it was not connected yet */
- if (handler_id != 0)
- return;
-
- handler_id = g_signal_connect (account, "status-changed",
- G_CALLBACK (roster_window_connection_changed_cb), self);
-
- g_hash_table_insert (self->priv->status_changed_handlers,
- account, GUINT_TO_POINTER (handler_id));
-
- /* roster_window_setup_balance() relies on the TpConnection to be ready on
- * the TpAccount so we connect this signal as well. */
- tp_g_signal_connect_object (account, "notify::connection",
- G_CALLBACK (account_connection_notify_cb), self, 0);
-
- roster_window_setup_balance (self, account);
-}
-
-/* @account: if not %NULL, the only account which can be enabled */
-static void
-display_page_account_not_enabled (EmpathyRosterWindow *self,
- TpAccount *account)
-{
- if (account == NULL)
- {
- display_page_message (self,
- _("You need to enable one of your accounts to see contacts here."),
- PAGE_MESSAGE_FLAG_ACCOUNTS);
- }
- else
- {
- gchar *tmp;
-
- /* translators: argument is an account name */
- tmp = g_strdup_printf (_("You need to enable %s to see contacts here."),
- tp_account_get_display_name (account));
-
- display_page_message (self, tmp, PAGE_MESSAGE_FLAG_ACCOUNTS);
- g_free (tmp);
- }
-}
-static gboolean
-has_enabled_account (GList *accounts)
-{
- GList *l;
-
- for (l = accounts; l != NULL; l = g_list_next (l))
- {
- TpAccount *account = l->data;
-
- if (tp_account_is_enabled (account))
- return TRUE;
- }
-
- return FALSE;
-}
-
-static void
-set_notebook_page (EmpathyRosterWindow *self)
-{
- GList *accounts;
- guint len;
- TpConnectionPresenceType presence;
- gboolean connected, connecting;
-
- connected = empathy_account_manager_get_accounts_connected (&connecting);
-
- /* Display the loading page if either:
- * - We are fetching contacts from Folks (startup)
- * - There is no account connected but at least one is connecting
- */
- if (!empathy_individual_manager_get_contacts_loaded (
- self->priv->individual_manager) ||
- (!connected && connecting))
- {
- display_page_message (self, NULL, PAGE_MESSAGE_FLAG_SPINNER);
- gtk_spinner_start (GTK_SPINNER (self->priv->spinner_loading));
- return;
- }
-
- gtk_spinner_stop (GTK_SPINNER (self->priv->spinner_loading));
-
- accounts = tp_account_manager_dup_valid_accounts (
- self->priv->account_manager);
-
- len = g_list_length (accounts);
-
- if (len == 0)
- {
- /* No account */
- display_page_no_account (self);
- goto out;
- }
-
- if (!has_enabled_account (accounts))
- {
- TpAccount *account = NULL;
-
- /* Pass the account if there is only one which can be enabled */
- if (len == 1)
- account = accounts->data;
-
- display_page_account_not_enabled (self, account);
- goto out;
- }
-
- presence = tp_account_manager_get_most_available_presence (
- self->priv->account_manager, NULL, NULL);
-
- if (presence == TP_CONNECTION_PRESENCE_TYPE_OFFLINE)
- {
- display_page_message (self,
- _("Change your presence to see contacts here"),
- PAGE_MESSAGE_FLAG_ONLINE);
- goto out;
- }
-
- if (empathy_roster_view_is_empty (self->priv->view))
- {
- if (empathy_roster_view_is_searching (self->priv->view))
- {
- display_page_message (self, _("No match found"),
- PAGE_MESSAGE_FLAG_NONE);
- }
- else
- {
- if (g_settings_get_boolean (self->priv->gsettings_ui,
- EMPATHY_PREFS_UI_SHOW_OFFLINE))
- display_page_message (self, _("You haven't added any contact yet"),
- PAGE_MESSAGE_FLAG_ADD_CONTACT);
- else
- display_page_message (self, _("No online contacts"),
- PAGE_MESSAGE_FLAG_SHOW_OFFLINE);
- }
- goto out;
- }
-
- display_page_contact_list (self);
-
-out:
- g_list_free_full (accounts, g_object_unref);
-}
-
-static void
-roster_window_account_validity_changed_cb (TpAccountManager *manager,
- TpAccount *account,
- gboolean valid,
- EmpathyRosterWindow *self)
-{
- if (valid)
- add_account (self, account);
- else
- roster_window_account_removed_cb (manager, account, self);
-
- set_notebook_page (self);
-}
-
-static void
-roster_window_connection_items_setup (EmpathyRosterWindow *self)
-{
- guint i;
- const gchar *actions_connected[] = {
- "room_join_new",
- "room_join_favorites",
- "chat_new_message",
- "chat_new_call",
- "chat_search_contacts",
- "chat_add_contact",
- "edit_blocked_contacts",
- };
-
- for (i = 0; i < G_N_ELEMENTS (actions_connected); i++)
- {
- GAction *action;
-
- action = g_action_map_lookup_action (G_ACTION_MAP (self),
- actions_connected[i]);
-
- self->priv->actions_connected = g_list_prepend (
- self->priv->actions_connected, action);
- }
-}
-
-static void
-account_enabled_cb (TpAccountManager *manager,
- TpAccount *account,
- EmpathyRosterWindow *self)
-{
- set_notebook_page (self);
-}
-
-static void
-account_disabled_cb (TpAccountManager *manager,
- TpAccount *account,
- EmpathyRosterWindow *self)
-{
- set_notebook_page (self);
-}
-
-static void
-account_removed_cb (TpAccountManager *manager,
- TpAccount *account,
- EmpathyRosterWindow *self)
-{
- set_notebook_page (self);
-}
-
-static void
-account_manager_prepared_cb (GObject *source_object,
- GAsyncResult *result,
- gpointer user_data)
-{
- GList *accounts, *j;
- TpAccountManager *manager = TP_ACCOUNT_MANAGER (source_object);
- EmpathyRosterWindow *self = user_data;
- GError *error = NULL;
-
- if (!tp_proxy_prepare_finish (manager, result, &error))
- {
- DEBUG ("Failed to prepare account manager: %s", error->message);
- g_error_free (error);
- return;
- }
-
- accounts = tp_account_manager_dup_valid_accounts (
- self->priv->account_manager);
- for (j = accounts; j != NULL; j = j->next)
- {
- TpAccount *account = TP_ACCOUNT (j->data);
-
- add_account (self, account);
- }
-
- g_signal_connect (manager, "account-validity-changed",
- G_CALLBACK (roster_window_account_validity_changed_cb), self);
- tp_g_signal_connect_object (manager, "account-removed",
- G_CALLBACK (account_removed_cb), self, 0);
- tp_g_signal_connect_object (manager, "account-disabled",
- G_CALLBACK (account_disabled_cb), self, 0);
- tp_g_signal_connect_object (manager, "account-enabled",
- G_CALLBACK (account_enabled_cb), self, 0);
-
- roster_window_update_status (self);
-
- set_notebook_page (self);
-
- g_list_free_full (accounts, g_object_unref);
-}
-
-void
-empathy_roster_window_set_shell_running (EmpathyRosterWindow *self,
- gboolean shell_running)
-{
- if (self->priv->shell_running == shell_running)
- return;
-
- self->priv->shell_running = shell_running;
- g_object_notify (G_OBJECT (self), "shell-running");
-}
-
-static GObject *
-empathy_roster_window_constructor (GType type,
- guint n_construct_params,
- GObjectConstructParam *construct_params)
-{
- static GObject *window = NULL;
-
- if (window != NULL)
- return g_object_ref (window);
-
- window = G_OBJECT_CLASS (empathy_roster_window_parent_class)->constructor (
- type, n_construct_params, construct_params);
-
- g_object_add_weak_pointer (window, (gpointer) &window);
-
- return window;
-}
-
-static GActionEntry menubar_entries[] = {
- { "chat_new_message", roster_window_chat_new_message_cb, NULL, NULL, NULL },
- { "chat_new_call", roster_window_chat_new_call_cb, NULL, NULL, NULL },
- { "chat_add_contact", roster_window_chat_add_contact_cb, NULL, NULL, NULL },
- { "chat_search_contacts", roster_window_chat_search_contacts_cb, NULL, NULL, NULL },
- { "chat_quit", roster_window_chat_quit_cb, NULL, NULL, NULL },
-
- { "edit_accounts", roster_window_edit_accounts_cb, NULL, NULL, NULL },
- { "edit_blocked_contacts", roster_window_edit_blocked_contacts_cb, NULL, NULL, NULL },
- { "edit_preferences", roster_window_edit_preferences_cb, NULL, NULL, NULL },
-
- { "view_history", roster_window_view_history_cb, NULL, NULL, NULL },
- { "view_show_ft_manager", roster_window_view_show_ft_manager, NULL, NULL, NULL },
-
- { "room_join_new", roster_window_room_join_new_cb, NULL, NULL, NULL },
- { "room_join_favorites", roster_window_room_join_favorites_cb, NULL, NULL, NULL },
- { "room_manage_favorites", roster_window_room_manage_favorites_cb, NULL, NULL, NULL },
-
- { "help_contents", roster_window_help_contents_cb, NULL, NULL, NULL },
- { "help_about", roster_window_help_about_cb, NULL, NULL, NULL },
-};
-
-static void
-empathy_roster_window_set_property (GObject *object,
- guint property_id,
- const GValue *value,
- GParamSpec *pspec)
-{
- EmpathyRosterWindow *self = EMPATHY_ROSTER_WINDOW (object);
-
- switch (property_id)
- {
- case PROP_SHELL_RUNNING:
- self->priv->shell_running = g_value_get_boolean (value);
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
- break;
- }
-}
-
-static void
-empathy_roster_window_get_property (GObject *object,
- guint property_id,
- GValue *value,
- GParamSpec *pspec)
-{
- EmpathyRosterWindow *self = EMPATHY_ROSTER_WINDOW (object);
-
- switch (property_id)
- {
- case PROP_SHELL_RUNNING:
- g_value_set_boolean (value, self->priv->shell_running);
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
- break;
- }
-}
-
-static void
-empathy_roster_window_constructed (GObject *self)
-{
- G_OBJECT_CLASS (empathy_roster_window_parent_class)->constructed (self);
-}
-
-static void
-empathy_roster_window_class_init (EmpathyRosterWindowClass *klass)
-{
- GObjectClass *object_class = G_OBJECT_CLASS (klass);
- GParamSpec *pspec;
-
- object_class->finalize = empathy_roster_window_finalize;
- object_class->constructor = empathy_roster_window_constructor;
- object_class->constructed = empathy_roster_window_constructed;
-
- object_class->set_property = empathy_roster_window_set_property;
- object_class->get_property = empathy_roster_window_get_property;
-
- pspec = g_param_spec_boolean ("shell-running",
- "Shell running",
- "Whether the Shell is running or not",
- FALSE,
- G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
- g_object_class_install_property (object_class, PROP_SHELL_RUNNING, pspec);
-
- g_type_class_add_private (object_class, sizeof (EmpathyRosterWindowPriv));
-}
-
-static void
-contacts_loaded_cb (EmpathyIndividualManager *manager,
- EmpathyRosterWindow *self)
-{
- set_notebook_page (self);
-}
-
-static void
-roster_window_setup_actions (EmpathyRosterWindow *self)
-{
- GAction *action;
-
-#define ADD_GSETTINGS_ACTION(schema, key) \
- action = g_settings_create_action (self->priv->gsettings_##schema, \
- EMPATHY_PREFS_##key); \
- g_action_map_add_action (G_ACTION_MAP (self), action); \
- g_object_unref (action);
-
- ADD_GSETTINGS_ACTION (ui, UI_SHOW_OFFLINE);
-
-#undef ADD_GSETTINGS_ACTION
-}
-
-static void
-menu_deactivate_cb (GtkMenuShell *menushell,
- gpointer user_data)
-{
- /* FIXME: we shouldn't have to disconnect the signal (bgo #641327) */
- g_signal_handlers_disconnect_by_func (menushell,
- menu_deactivate_cb, user_data);
-
- gtk_menu_detach (GTK_MENU (menushell));
-}
-
-static void
-popup_individual_menu_cb (EmpathyRosterView *view,
- const gchar *active_group,
- FolksIndividual *individual,
- guint button,
- guint time,
- gpointer user_data)
-{
- GtkWidget *menu;
- EmpathyIndividualFeatureFlags features = EMPATHY_INDIVIDUAL_FEATURE_CHAT |
- EMPATHY_INDIVIDUAL_FEATURE_CALL |
- EMPATHY_INDIVIDUAL_FEATURE_EDIT |
- EMPATHY_INDIVIDUAL_FEATURE_INFO |
- EMPATHY_INDIVIDUAL_FEATURE_LOG |
- EMPATHY_INDIVIDUAL_FEATURE_SMS |
- EMPATHY_INDIVIDUAL_FEATURE_CALL_PHONE |
- EMPATHY_INDIVIDUAL_FEATURE_REMOVE |
- EMPATHY_INDIVIDUAL_FEATURE_FILE_TRANSFER;
-
- menu = empathy_individual_menu_new (individual, active_group,
- features, NULL);
-
- /* menu is initially unowned but gtk_menu_attach_to_widget() takes its
- * floating ref. We can either wait for the view to release its ref
- * when it is destroyed (when leaving Empathy) or explicitly
- * detach the menu when it's not displayed any more.
- * We go for the latter as we don't want to keep useless menus in memory
- * during the whole lifetime of Empathy. */
- g_signal_connect (menu, "deactivate", G_CALLBACK (menu_deactivate_cb),
- NULL);
-
- gtk_menu_attach_to_widget (GTK_MENU (menu), GTK_WIDGET (view), NULL);
- gtk_menu_popup (GTK_MENU (menu), NULL, NULL, NULL, NULL, button, time);
-}
-
-static void
-view_empty_cb (EmpathyRosterView *view,
- GParamSpec *spec,
- EmpathyRosterWindow *self)
-{
- set_notebook_page (self);
-
- if (!empathy_roster_view_is_empty (view))
- {
- gtk_widget_grab_focus (GTK_WIDGET (self->priv->view));
-
- /* The store is being filled, it will be done after an idle cb.
- * So we can then get events. If we do that too soon, event's
- * contact is not yet in the store and it won't get marked as
- * having events. */
- g_idle_add (roster_window_load_events_idle_cb, self);
- }
-}
-
-static void
-tooltip_destroy_cb (GtkWidget *widget,
- EmpathyRosterWindow *self)
-{
- g_clear_object (&self->priv->tooltip_widget);
-}
-
-static gboolean
-individual_tooltip_cb (EmpathyRosterView *view,
- FolksIndividual *individual,
- gboolean keyboard_mode,
- GtkTooltip *tooltip,
- EmpathyRosterWindow *self)
-{
- if (self->priv->tooltip_widget == NULL)
- {
- self->priv->tooltip_widget = empathy_individual_widget_new (individual,
- EMPATHY_INDIVIDUAL_WIDGET_FOR_TOOLTIP |
- EMPATHY_INDIVIDUAL_WIDGET_SHOW_LOCATION |
- EMPATHY_INDIVIDUAL_WIDGET_SHOW_CLIENT_TYPES);
-
- gtk_container_set_border_width (
- GTK_CONTAINER (self->priv->tooltip_widget), 8);
-
- g_object_ref (self->priv->tooltip_widget);
-
- tp_g_signal_connect_object (self->priv->tooltip_widget, "destroy",
- G_CALLBACK (tooltip_destroy_cb), self, 0);
-
- gtk_widget_show (self->priv->tooltip_widget);
- }
- else
- {
- empathy_individual_widget_set_individual (
- EMPATHY_INDIVIDUAL_WIDGET (self->priv->tooltip_widget), individual);
- }
-
- gtk_tooltip_set_custom (tooltip, self->priv->tooltip_widget);
-
- return TRUE;
-}
-
-typedef enum
-{
- DND_DRAG_TYPE_INVALID = -1,
- DND_DRAG_TYPE_URI_LIST,
-} DndDragType;
-
-#define DRAG_TYPE(T,I) \
- { (gchar *) T, 0, I }
-
-static const GtkTargetEntry drag_types_dest[] = {
- DRAG_TYPE ("text/path-list", DND_DRAG_TYPE_URI_LIST),
- DRAG_TYPE ("text/uri-list", DND_DRAG_TYPE_URI_LIST),
-};
-
-static GdkAtom drag_atoms_dest[G_N_ELEMENTS (drag_types_dest)];
-
-static DndDragType
-get_drag_type (GtkWidget *widget,
- GdkDragContext *context)
-{
- GdkAtom target;
- guint i;
-
- target = gtk_drag_dest_find_target (widget, context, NULL);
-
- for (i = 0; i < G_N_ELEMENTS (drag_atoms_dest); i++)
- {
- if (target == drag_atoms_dest[i])
- return drag_types_dest[i].info;
- }
-
- return DND_DRAG_TYPE_INVALID;
-}
-
-static gboolean
-individual_supports_ft (FolksIndividual *individual)
-{
- EmpathyContact *contact;
- EmpathyCapabilities caps;
- gboolean result;
-
- contact = empathy_contact_dup_from_folks_individual (individual);
- if (contact == NULL)
- return FALSE;
-
- caps = empathy_contact_get_capabilities (contact);
- result = (caps & EMPATHY_CAPABILITIES_FT);
-
- g_object_unref (contact);
- return result;
-}
-
-static gboolean
-view_drag_motion_cb (GtkWidget *widget,
- GdkDragContext *context,
- gint x,
- gint y,
- guint time_,
- EmpathyRosterWindow *self)
-{
- DndDragType type;
-
- type = get_drag_type (widget, context);
-
- if (type == DND_DRAG_TYPE_URI_LIST)
- {
- /* Check if contact supports FT */
- FolksIndividual *individual;
- GtkWidget *child;
-
- individual = empathy_roster_view_get_individual_at_y (self->priv->view,
- y, &child);
- if (individual == NULL)
- goto no_hl;
-
- if (!individual_supports_ft (individual))
- goto no_hl;
-
- egg_list_box_drag_highlight_widget (EGG_LIST_BOX (widget), child);
- return FALSE;
- }
-
-no_hl:
- egg_list_box_drag_unhighlight_widget (EGG_LIST_BOX (widget));
- return FALSE;
-}
-
-static gboolean
-view_drag_drop_cb (GtkWidget *widget,
- GdkDragContext *context,
- gint x,
- gint y,
- guint time_,
- EmpathyRosterWindow *self)
-{
- DndDragType type;
- FolksIndividual *individual;
-
- type = get_drag_type (widget, context);
- if (type == DND_DRAG_TYPE_INVALID)
- return FALSE;
-
- individual = empathy_roster_view_get_individual_at_y (self->priv->view, y,
- NULL);
- if (individual == NULL)
- return FALSE;
-
- if (!individual_supports_ft (individual))
- return FALSE;
-
- gtk_drag_get_data (widget, context,
- gtk_drag_dest_find_target (widget, context, NULL), time_);
-
- return TRUE;
-}
-
-static void
-view_drag_data_received_cb (GtkWidget *widget,
- GdkDragContext *context,
- gint x,
- gint y,
- GtkSelectionData *selection,
- guint info,
- guint time_,
- EmpathyRosterWindow *self)
-{
- gboolean success = FALSE;
-
- if (selection == NULL)
- goto out;
-
- if (info == DND_DRAG_TYPE_URI_LIST)
- {
- const gchar *path;
- FolksIndividual *individual;
- EmpathyContact *contact;
-
- individual = empathy_roster_view_get_individual_at_y (self->priv->view,
- y, NULL);
- g_return_if_fail (individual != NULL);
-
- path = (const gchar *) gtk_selection_data_get_data (selection);
-
- contact = empathy_contact_dup_from_folks_individual (individual);
- empathy_send_file_from_uri_list (contact, path);
-
- g_object_unref (contact);
-
- success = TRUE;
- }
-
-out:
- gtk_drag_finish (context, success, FALSE, time_);
-}
-
-static void
-roster_window_most_available_presence_changed_cb (TpAccountManager *manager,
- TpConnectionPresenceType presence,
- const gchar *status,
- const gchar *message,
- EmpathyRosterWindow *self)
-{
- set_notebook_page (self);
-}
-
-static void
-show_offline_changed_cb (GSettings *settings,
- const gchar *key,
- EmpathyRosterWindow *self)
-{
- set_notebook_page (self);
-}
-
-static void
-empathy_roster_window_init (EmpathyRosterWindow *self)
-{
- GtkBuilder *gui;
- GtkWidget *sw;
- gchar *filename;
- GtkWidget *search_vbox;
- guint i;
- EmpathyRosterModel *model;
-
- self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self,
- EMPATHY_TYPE_ROSTER_WINDOW, EmpathyRosterWindowPriv);
-
- empathy_set_css_provider (GTK_WIDGET (self));
-
- self->priv->gsettings_ui = g_settings_new (EMPATHY_PREFS_UI_SCHEMA);
-
- self->priv->sound_mgr = empathy_sound_manager_dup_singleton ();
-
- gtk_window_set_title (GTK_WINDOW (self), _("Contact List"));
- gtk_window_set_role (GTK_WINDOW (self), "contact_list");
- gtk_window_set_default_size (GTK_WINDOW (self), 225, 325);
-
- /* don't finalize the widget on delete-event, just hide it */
- g_signal_connect (self, "delete-event",
- G_CALLBACK (gtk_widget_hide_on_delete), NULL);
-
- /* Set up interface */
- filename = empathy_file_lookup ("empathy-roster-window.ui", "src");
- gui = tpaw_builder_get_file (filename,
- "main_vbox", &self->priv->main_vbox,
- "balance_vbox", &self->priv->balance_vbox,
- "errors_vbox", &self->priv->errors_vbox,
- "auth_vbox", &self->priv->auth_vbox,
- "search_vbox", &search_vbox,
- "presence_toolbar", &self->priv->presence_toolbar,
- "notebook", &self->priv->notebook,
- "no_entry_label", &self->priv->no_entry_label,
- "roster_scrolledwindow", &sw,
- "button_account_settings", &self->priv->button_account_settings,
- "button_online", &self->priv->button_online,
- "button_show_offline", &self->priv->button_show_offline,
- "button_add_contact", &self->priv->button_add_contact,
- "spinner_loading", &self->priv->spinner_loading,
- NULL);
- g_free (filename);
-
- gtk_container_add (GTK_CONTAINER (self), self->priv->main_vbox);
- gtk_widget_show (self->priv->main_vbox);
-
- g_signal_connect (self, "key-press-event",
- G_CALLBACK (roster_window_key_press_event_cb), self);
-
- g_object_unref (gui);
-
- self->priv->account_manager = tp_account_manager_dup ();
-
- tp_proxy_prepare_async (self->priv->account_manager, NULL,
- account_manager_prepared_cb, self);
-
- self->priv->errors = g_hash_table_new_full (g_direct_hash, g_direct_equal,
- g_object_unref, NULL);
-
- self->priv->auths = g_hash_table_new (NULL, NULL);
-
- self->priv->status_changed_handlers = g_hash_table_new_full (g_direct_hash,
- g_direct_equal, NULL, NULL);
-
- /* set up menus */
- g_action_map_add_action_entries (G_ACTION_MAP (self),
- menubar_entries, G_N_ELEMENTS (menubar_entries), self);
- roster_window_setup_actions (self);
-
- filename = empathy_file_lookup ("empathy-roster-window-menubar.ui", "src");
- gui = tpaw_builder_get_file (filename,
- "appmenu", &self->priv->menumodel,
- "rooms", &self->priv->rooms_section,
- NULL);
- g_free (filename);
-
- g_object_ref (self->priv->menumodel);
- g_object_ref (self->priv->rooms_section);
-
- /* Set up connection related actions. */
- roster_window_connection_items_setup (self);
- roster_window_favorite_chatroom_menu_setup (self);
-
- g_object_unref (gui);
-
- /* Set up contact list. */
- empathy_status_presets_get_all ();
-
- /* Set up presence chooser */
- self->priv->presence_chooser = empathy_presence_chooser_new ();
- gtk_widget_show (self->priv->presence_chooser);
- gtk_box_pack_start (GTK_BOX (self->priv->presence_toolbar),
- self->priv->presence_chooser,
- TRUE, TRUE, 0);
-
- /* Set up the throbber */
- self->priv->throbber = gtk_spinner_new ();
- gtk_widget_set_size_request (self->priv->throbber, 16, -1);
- gtk_widget_set_events (self->priv->throbber, GDK_BUTTON_PRESS_MASK);
- g_signal_connect (self->priv->throbber, "button-press-event",
- G_CALLBACK (roster_window_throbber_button_press_event_cb),
- self);
- gtk_box_pack_start (GTK_BOX (self->priv->presence_toolbar),
- self->priv->throbber,
- FALSE, TRUE, 0);
-
- self->priv->individual_manager = empathy_individual_manager_dup_singleton ();
-
- model = EMPATHY_ROSTER_MODEL (empathy_roster_model_manager_new (self->priv->individual_manager));
-
- tp_g_signal_connect_object (self->priv->individual_manager,
- "contacts-loaded", G_CALLBACK (contacts_loaded_cb), self, 0);
-
- self->priv->view = EMPATHY_ROSTER_VIEW (
- empathy_roster_view_new (model));
-
- g_object_unref (model);
-
- gtk_widget_show (GTK_WIDGET (self->priv->view));
-
- egg_list_box_add_to_scrolled (EGG_LIST_BOX (self->priv->view),
- GTK_SCROLLED_WINDOW (sw));
-
- g_signal_connect (self->priv->view, "individual-activated",
- G_CALLBACK (individual_activated_cb), self);
- g_signal_connect (self->priv->view, "event-activated",
- G_CALLBACK (event_activated_cb), self);
- g_signal_connect (self->priv->view, "popup-individual-menu",
- G_CALLBACK (popup_individual_menu_cb), self);
- g_signal_connect (self->priv->view, "notify::empty",
- G_CALLBACK (view_empty_cb), self);
- g_signal_connect (self->priv->view, "individual-tooltip",
- G_CALLBACK (individual_tooltip_cb), self);
-
- /* DnD - destination */
- gtk_drag_dest_set (GTK_WIDGET (self->priv->view), GTK_DEST_DEFAULT_MOTION,
- drag_types_dest, G_N_ELEMENTS (drag_types_dest), GDK_ACTION_COPY);
-
- for (i = 0; i < G_N_ELEMENTS (drag_types_dest); ++i)
- drag_atoms_dest[i] = gdk_atom_intern (drag_types_dest[i].target, FALSE);
-
- g_signal_connect (self->priv->view, "drag-motion",
- G_CALLBACK (view_drag_motion_cb), self);
- g_signal_connect (self->priv->view, "drag-drop",
- G_CALLBACK (view_drag_drop_cb), self);
- g_signal_connect (self->priv->view, "drag-data-received",
- G_CALLBACK (view_drag_data_received_cb), self);
-
- gtk_widget_set_has_tooltip (GTK_WIDGET (self->priv->view), TRUE);
-
- /* Set up search bar */
- self->priv->search_bar = tpaw_live_search_new (
- GTK_WIDGET (self->priv->view));
- empathy_roster_view_set_live_search (self->priv->view,
- TPAW_LIVE_SEARCH (self->priv->search_bar));
- gtk_box_pack_start (GTK_BOX (search_vbox), self->priv->search_bar,
- FALSE, TRUE, 0);
-
- g_signal_connect_swapped (self, "map",
- G_CALLBACK (gtk_widget_grab_focus), self->priv->view);
-
- /* Load user-defined accelerators. */
- roster_window_accels_load ();
-
- gtk_window_set_default_size (GTK_WINDOW (self), -1, 600);
- /* Set window size. */
- empathy_geometry_bind (GTK_WINDOW (self), GEOMETRY_NAME);
-
- /* Enable event handling */
- self->priv->call_observer = empathy_call_observer_dup_singleton ();
- self->priv->event_manager = empathy_event_manager_dup_singleton ();
-
- tp_g_signal_connect_object (self->priv->event_manager, "event-added",
- G_CALLBACK (roster_window_event_added_cb), self, 0);
- tp_g_signal_connect_object (self->priv->event_manager, "event-removed",
- G_CALLBACK (roster_window_event_removed_cb), self, 0);
-
- g_signal_connect (self->priv->account_manager, "account-validity-changed",
- G_CALLBACK (roster_window_account_validity_changed_cb), self);
- g_signal_connect (self->priv->account_manager, "account-removed",
- G_CALLBACK (roster_window_account_removed_cb), self);
- g_signal_connect (self->priv->account_manager, "account-disabled",
- G_CALLBACK (roster_window_account_disabled_cb), self);
- g_signal_connect (self->priv->account_manager,
- "most-available-presence-changed",
- G_CALLBACK (roster_window_most_available_presence_changed_cb), self);
-
- g_settings_bind (self->priv->gsettings_ui, EMPATHY_PREFS_UI_SHOW_OFFLINE,
- self->priv->view, "show-offline",
- G_SETTINGS_BIND_GET);
- tp_g_signal_connect_object (self->priv->gsettings_ui,
- "changed::" EMPATHY_PREFS_UI_SHOW_OFFLINE,
- G_CALLBACK (show_offline_changed_cb), self, 0);
- g_settings_bind (self->priv->gsettings_ui, EMPATHY_PREFS_UI_SHOW_GROUPS,
- self->priv->view, "show-groups",
- G_SETTINGS_BIND_GET);
- g_settings_bind (self->priv->gsettings_ui, "show-balance-in-roster",
- self->priv->balance_vbox, "visible",
- G_SETTINGS_BIND_GET);
-
- g_signal_connect (self->priv->button_account_settings, "clicked",
- G_CALLBACK (button_account_settings_clicked_cb), self);
- g_signal_connect (self->priv->button_online, "clicked",
- G_CALLBACK (button_online_clicked_cb), self);
- g_signal_connect (self->priv->button_show_offline, "clicked",
- G_CALLBACK (button_show_offline_clicked_cb), self);
- g_signal_connect (self->priv->button_add_contact, "clicked",
- G_CALLBACK (button_add_contact_clicked_cb), self);
-}
-
-GtkWidget *
-empathy_roster_window_new (GtkApplication *app)
-{
- return g_object_new (EMPATHY_TYPE_ROSTER_WINDOW,
- "application", app,
- NULL);
-}
-
-GMenuModel *
-empathy_roster_window_get_menu_model (EmpathyRosterWindow *self)
-{
- g_return_val_if_fail (EMPATHY_IS_ROSTER_WINDOW (self), NULL);
-
- return G_MENU_MODEL (self->priv->menumodel);
-}
diff --git a/src/empathy-roster-window.h b/src/empathy-roster-window.h
deleted file mode 100644
index 4620a998..00000000
--- a/src/empathy-roster-window.h
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
- * 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., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301 USA
- *
- * Authors: Xavier Claessens <xclaesse@gmail.com>
- * Danielle Madeley <danielle.madeley@collabora.co.uk>
- */
-
-#ifndef __EMPATHY_ROSTER_WINDOW_H__
-#define __EMPATHY_ROSTER_WINDOW_H__
-
-#include <gtk/gtk.h>
-
-G_BEGIN_DECLS
-
-#define EMPATHY_TYPE_ROSTER_WINDOW (empathy_roster_window_get_type ())
-#define EMPATHY_ROSTER_WINDOW(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), EMPATHY_TYPE_ROSTER_WINDOW, EmpathyRosterWindow))
-#define EMPATHY_ROSTER_WINDOW_CLASS(k) (G_TYPE_CHECK_CLASS_CAST ((k), EMPATHY_TYPE_ROSTER_WINDOW, EmpathyRosterWindowClass))
-#define EMPATHY_IS_ROSTER_WINDOW(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), EMPATHY_TYPE_ROSTER_WINDOW))
-#define EMPATHY_IS_ROSTER_WINDOW_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), EMPATHY_TYPE_ROSTER_WINDOW))
-#define EMPATHY_ROSTER_WINDOW_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), EMPATHY_TYPE_ROSTER_WINDOW, EmpathyRosterWindowClass))
-
-typedef struct _EmpathyRosterWindow EmpathyRosterWindow;
-typedef struct _EmpathyRosterWindowClass EmpathyRosterWindowClass;
-typedef struct _EmpathyRosterWindowPriv EmpathyRosterWindowPriv;
-
-struct _EmpathyRosterWindow
-{
- GtkApplicationWindow parent;
- EmpathyRosterWindowPriv *priv;
-};
-
-struct _EmpathyRosterWindowClass
-{
- GtkApplicationWindowClass parent_class;
-};
-
-GType empathy_roster_window_get_type (void);
-
-GtkWidget * empathy_roster_window_new (GtkApplication *app);
-
-void empathy_roster_window_show_preferences (EmpathyRosterWindow *self,
- const gchar *tab);
-
-void empathy_roster_window_set_shell_running (EmpathyRosterWindow *self,
- gboolean shell_running);
-
-GMenuModel *empathy_roster_window_get_menu_model (EmpathyRosterWindow *self);
-
-G_END_DECLS
-
-#endif /* __EMPATHY_ROSTER_WINDOW_H__ */
diff --git a/src/empathy-roster-window.ui b/src/empathy-roster-window.ui
deleted file mode 100644
index 25156d5f..00000000
--- a/src/empathy-roster-window.ui
+++ /dev/null
@@ -1,259 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<interface>
- <!-- interface-requires gtk+ 2.12 -->
- <object class="GtkVBox" id="main_vbox">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <child>
- <object class="GtkHBox" id="presence_toolbar">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="spacing">3</property>
- <property name="border-width">3</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">1</property>
- </packing>
- </child>
- <child>
- <object class="GtkVBox" id="balance_vbox">
- <property name="can_focus">False</property>
- <property name="spacing">3</property>
- <child>
- <placeholder/>
- </child>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">2</property>
- </packing>
- </child>
- <child>
- <object class="GtkVBox" id="errors_vbox">
- <property name="can_focus">False</property>
- <child>
- <placeholder/>
- </child>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">3</property>
- </packing>
- </child>
- <child>
- <object class="GtkVBox" id="auth_vbox">
- <property name="can_focus">False</property>
- <child>
- <placeholder/>
- </child>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">4</property>
- </packing>
- </child>
- <child>
- <object class="GtkVBox" id="search_vbox">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <child>
- <placeholder/>
- </child>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">5</property>
- </packing>
- </child>
- <child>
- <object class="GtkNotebook" id="notebook">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="show_tabs">False</property>
- <property name="show_border">False</property>
- <child>
- <object 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">never</property>
- <child>
- <placeholder/>
- </child>
- </object>
- </child>
- <child>
- <object class="GtkBox" id="box1">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="orientation">vertical</property>
- <child>
- <object class="GtkImage" id="image1">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="yalign">1</property>
- <property name="ypad">1</property>
- <property name="icon_name">avatar-default-symbolic</property>
- <property name="icon-size">6</property>
- </object>
- <packing>
- <property name="expand">True</property>
- <property name="fill">True</property>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkLabel" id="no_entry_label">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="yalign">0.30000001192092896</property>
- </object>
- <packing>
- <property name="expand">True</property>
- <property name="fill">True</property>
- <property name="position">1</property>
- </packing>
- </child>
- <child>
- <object class="GtkAlignment" id="alignment1">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="yalign">0</property>
- <property name="xscale">0</property>
- <property name="yscale">0</property>
- <child>
- <object class="GtkButton" id="button_account_settings">
- <property name="label" translatable="yes">Account settings</property>
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="receives_default">True</property>
- <property name="margin_left">6</property>
- <property name="margin_right">6</property>
- <property name="use_action_appearance">False</property>
- </object>
- </child>
- </object>
- <packing>
- <property name="expand">True</property>
- <property name="fill">True</property>
- <property name="position">2</property>
- </packing>
- </child>
- <child>
- <object class="GtkAlignment" id="alignment2">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="yalign">0</property>
- <property name="xscale">0</property>
- <property name="yscale">0</property>
- <child>
- <object class="GtkSpinner" id="spinner_loading">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- </object>
- </child>
- </object>
- <packing>
- <property name="expand">True</property>
- <property name="fill">True</property>
- <property name="position">2</property>
- </packing>
- </child>
- <child>
- <object class="GtkAlignment" id="alignment3">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="yalign">0</property>
- <property name="xscale">0</property>
- <property name="yscale">0</property>
- <child>
- <object class="GtkButton" id="button_online">
- <property name="label" translatable="yes">Go _Online</property>
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="receives_default">True</property>
- <property name="margin_left">6</property>
- <property name="margin_right">6</property>
- <property name="use_action_appearance">False</property>
- <property name="use_underline">True</property>
- </object>
- </child>
- </object>
- <packing>
- <property name="expand">True</property>
- <property name="fill">True</property>
- <property name="position">2</property>
- </packing>
- </child>
- <child>
- <object class="GtkAlignment" id="alignment4">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="yalign">0</property>
- <property name="xscale">0</property>
- <property name="yscale">0</property>
- <child>
- <object class="GtkButton" id="button_show_offline">
- <property name="label" translatable="yes">Show _Offline Contacts</property>
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="receives_default">True</property>
- <property name="margin_left">6</property>
- <property name="margin_right">6</property>
- <property name="use_action_appearance">False</property>
- <property name="use_underline">True</property>
- </object>
- </child>
- </object>
- <packing>
- <property name="expand">True</property>
- <property name="fill">True</property>
- <property name="position">2</property>
- </packing>
- </child>
- <child>
- <object class="GtkAlignment" id="alignment5">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="yalign">0</property>
- <property name="xscale">0</property>
- <property name="yscale">0</property>
- <child>
- <object class="GtkButton" id="button_add_contact">
- <property name="label" translatable="yes">_Add Contact...</property>
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="receives_default">True</property>
- <property name="margin_left">6</property>
- <property name="margin_right">6</property>
- <property name="use_action_appearance">False</property>
- <property name="use_underline">True</property>
- </object>
- </child>
- </object>
- <packing>
- <property name="expand">True</property>
- <property name="fill">True</property>
- <property name="position">2</property>
- </packing>
- </child>
- </object>
- <packing>
- <property name="position">1</property>
- </packing>
- </child>
- </object>
- <packing>
- <property name="expand">True</property>
- <property name="fill">True</property>
- <property name="position">6</property>
- </packing>
- </child>
- </object>
-</interface>
diff --git a/src/empathy-rounded-actor.c b/src/empathy-rounded-actor.c
deleted file mode 100644
index 89e3144c..00000000
--- a/src/empathy-rounded-actor.c
+++ /dev/null
@@ -1,82 +0,0 @@
-/*
- * empathy-rounded-actor.c - Source for EmpathyRoundedActor
- * Copyright (C) 2011 Collabora Ltd.
- * @author Emilio Pozuelo Monfort <emilio.pozuelo@collabora.co.uk>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-#include "config.h"
-#include "empathy-rounded-actor.h"
-
-G_DEFINE_TYPE(EmpathyRoundedActor, empathy_rounded_actor, GTK_CLUTTER_TYPE_ACTOR)
-
-struct _EmpathyRoundedActorPriv
-{
- guint round_factor;
-};
-
-static void
-empathy_rounded_actor_paint (ClutterActor *actor)
-{
- EmpathyRoundedActor *self = EMPATHY_ROUNDED_ACTOR (actor);
- ClutterActorBox allocation = { 0, };
- gfloat width, height;
-
- clutter_actor_get_allocation_box (actor, &allocation);
- clutter_actor_box_get_size (&allocation, &width, &height);
-
- cogl_path_new ();
-
- /* create and store a path describing a rounded rectangle */
- cogl_path_round_rectangle (0, 0, width, height,
- height / self->priv->round_factor, 0.1);
-
- cogl_clip_push_from_path ();
-
- CLUTTER_ACTOR_CLASS (empathy_rounded_actor_parent_class)->paint (actor);
-
- cogl_clip_pop ();
-}
-
-static void
-empathy_rounded_actor_init (EmpathyRoundedActor *self)
-{
- self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self,
- EMPATHY_TYPE_ROUNDED_ACTOR, EmpathyRoundedActorPriv);
-
- self->priv->round_factor = 2;
-}
-
-static void
-empathy_rounded_actor_class_init (EmpathyRoundedActorClass *klass)
-{
- ClutterActorClass *actor_class = CLUTTER_ACTOR_CLASS (klass);
-
- actor_class->paint = empathy_rounded_actor_paint;
-
- g_type_class_add_private (klass, sizeof (EmpathyRoundedActorPriv));
-}
-
-ClutterActor *
-empathy_rounded_actor_new (guint round_factor)
-{
- EmpathyRoundedActor *self = EMPATHY_ROUNDED_ACTOR (
- g_object_new (EMPATHY_TYPE_ROUNDED_ACTOR, NULL));
-
- self->priv->round_factor = round_factor;
-
- return CLUTTER_ACTOR (self);
-}
diff --git a/src/empathy-rounded-actor.h b/src/empathy-rounded-actor.h
deleted file mode 100644
index 29a7797a..00000000
--- a/src/empathy-rounded-actor.h
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- * empathy-rounded-actor.h - Header for EmpathyRoundedActor
- * Copyright (C) 2011 Collabora Ltd.
- * @author Emilio Pozuelo Monfort <emilio.pozuelo@collabora.co.uk>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-#ifndef __EMPATHY_ROUNDED_ACTOR_H__
-#define __EMPATHY_ROUNDED_ACTOR_H__
-
-#include <clutter-gtk/clutter-gtk.h>
-
-G_BEGIN_DECLS
-
-typedef struct _EmpathyRoundedActor EmpathyRoundedActor;
-typedef struct _EmpathyRoundedActorPriv EmpathyRoundedActorPriv;
-typedef struct _EmpathyRoundedActorClass EmpathyRoundedActorClass;
-
-struct _EmpathyRoundedActorClass {
- GtkClutterActorClass parent_class;
-};
-
-struct _EmpathyRoundedActor {
- GtkClutterActor parent;
-
- EmpathyRoundedActorPriv *priv;
-};
-
-GType empathy_rounded_actor_get_type (void);
-
-/* TYPE MACROS */
-#define EMPATHY_TYPE_ROUNDED_ACTOR \
- (empathy_rounded_actor_get_type ())
-#define EMPATHY_ROUNDED_ACTOR(obj) \
- (G_TYPE_CHECK_INSTANCE_CAST((obj), EMPATHY_TYPE_ROUNDED_ACTOR, \
- EmpathyRoundedActor))
-#define EMPATHY_ROUNDED_ACTOR_CLASS(klass) \
- (G_TYPE_CHECK_CLASS_CAST((klass), EMPATHY_TYPE_ROUNDED_ACTOR, \
- EmpathyRoundedActorClass))
-#define EMPATHY_IS_ROUNDED_ACTOR(obj) \
- (G_TYPE_CHECK_INSTANCE_TYPE((obj), EMPATHY_TYPE_ROUNDED_ACTOR))
-#define EMPATHY_IS_ROUNDED_ACTOR_CLASS(klass) \
- (G_TYPE_CHECK_CLASS_TYPE((klass), EMPATHY_TYPE_ROUNDED_ACTOR))
-#define EMPATHY_ROUNDED_ACTOR_GET_CLASS(obj) \
- (G_TYPE_INSTANCE_GET_CLASS ((obj), EMPATHY_TYPE_ROUNDED_ACTOR, \
- EmpathyRoundedActorClass))
-
-ClutterActor *empathy_rounded_actor_new (guint round_factor);
-
-G_END_DECLS
-
-#endif /* #ifndef __EMPATHY_ROUNDED_ACTOR_H__*/
diff --git a/src/empathy-rounded-rectangle.c b/src/empathy-rounded-rectangle.c
deleted file mode 100644
index 810fa0df..00000000
--- a/src/empathy-rounded-rectangle.c
+++ /dev/null
@@ -1,161 +0,0 @@
-/*
- * empathy-rounded-rectangle.c - Source for EmpathyRoundedRectangle
- * Copyright (C) 2011 Collabora Ltd.
- * @author Emilio Pozuelo Monfort <emilio.pozuelo@collabora.co.uk>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-#include "config.h"
-#include "empathy-rounded-rectangle.h"
-
-#include <math.h>
-
-G_DEFINE_TYPE (EmpathyRoundedRectangle,
- empathy_rounded_rectangle,
- CLUTTER_TYPE_CAIRO_TEXTURE)
-
-struct _EmpathyRoundedRectanglePriv
-{
- guint width, height;
- ClutterColor border_color;
- guint border_width;
- guint round_factor;
-};
-
-static gboolean
-draw_cb (ClutterCairoTexture *canvas,
- cairo_t *cr)
-{
- EmpathyRoundedRectangle *self = EMPATHY_ROUNDED_RECTANGLE (canvas);
- guint width, height;
- guint border_width;
- gdouble tmp_alpha;
- gdouble radius;
-
- width = self->priv->width;
- height = self->priv->height;
- radius = self->priv->height / self->priv->round_factor;
- border_width = self->priv->border_width;
-
- /* compute the composited opacity of the actor taking into
- * account the opacity of the color set by the user */
- tmp_alpha = (clutter_actor_get_paint_opacity (CLUTTER_ACTOR (self))
- * self->priv->border_color.alpha) / 255.;
-
- cairo_set_source_rgba (cr,
- self->priv->border_color.red / 255.,
- self->priv->border_color.green / 255.,
- self->priv->border_color.blue / 255.,
- tmp_alpha);
-
- cairo_set_line_width (cr, border_width);
-
- cairo_set_operator (cr, CAIRO_OPERATOR_CLEAR);
- cairo_paint (cr);
- cairo_set_operator (cr, CAIRO_OPERATOR_OVER);
-
- /* make room for the portion of the border drawn on the outside */
- cairo_translate (cr, border_width/2.0, border_width/2.0);
-
- cairo_new_sub_path (cr);
- cairo_arc (cr, width - radius, radius, radius,
- -M_PI/2.0, 0);
- cairo_arc (cr, width - radius, height - radius, radius,
- 0, M_PI/2.0);
- cairo_arc (cr, radius, height - radius, radius,
- M_PI/2.0, M_PI);
- cairo_arc (cr, radius, radius, radius,
- M_PI, -M_PI/2.0);
- cairo_close_path (cr);
-
- cairo_stroke (cr);
-
- return TRUE;
-}
-
-static void
-empathy_rounded_rectangle_init (EmpathyRoundedRectangle *self)
-{
- self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self,
- EMPATHY_TYPE_ROUNDED_RECTANGLE, EmpathyRoundedRectanglePriv);
-
- self->priv->border_width = 1;
- self->priv->round_factor = 2;
-}
-
-static void
-empathy_rounded_rectangle_finalize (GObject *object)
-{
- G_OBJECT_CLASS (empathy_rounded_rectangle_parent_class)->finalize (object);
-}
-
-static void
-empathy_rounded_rectangle_class_init (EmpathyRoundedRectangleClass *klass)
-{
- GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
-
- gobject_class->finalize = empathy_rounded_rectangle_finalize;
-
- g_type_class_add_private (klass, sizeof (EmpathyRoundedRectanglePriv));
-}
-
-static void
-empathy_rounded_rectangle_update_surface_size (EmpathyRoundedRectangle *self)
-{
- clutter_cairo_texture_set_surface_size (CLUTTER_CAIRO_TEXTURE (self),
- self->priv->width + self->priv->border_width,
- self->priv->height + self->priv->border_width);
-}
-
-EmpathyRoundedRectangle *
-empathy_rounded_rectangle_new (guint width,
- guint height,
- guint round_factor)
-{
- EmpathyRoundedRectangle *self;
-
- self = EMPATHY_ROUNDED_RECTANGLE (g_object_new (EMPATHY_TYPE_ROUNDED_RECTANGLE, NULL));
-
- self->priv->width = width;
- self->priv->height = height;
- self->priv->round_factor = round_factor;
-
- g_signal_connect (self, "draw", G_CALLBACK (draw_cb), NULL);
-
- empathy_rounded_rectangle_update_surface_size (self);
- clutter_cairo_texture_invalidate (CLUTTER_CAIRO_TEXTURE (self));
-
- return self;
-}
-
-void
-empathy_rounded_rectangle_set_border_width (EmpathyRoundedRectangle *self,
- guint border_width)
-{
- self->priv->border_width = border_width;
-
- empathy_rounded_rectangle_update_surface_size (self);
- clutter_cairo_texture_invalidate (CLUTTER_CAIRO_TEXTURE (self));
-}
-
-void
-empathy_rounded_rectangle_set_border_color (EmpathyRoundedRectangle *self,
- const ClutterColor *color)
-{
- self->priv->border_color = *color;
-
- clutter_cairo_texture_invalidate (CLUTTER_CAIRO_TEXTURE (self));
-}
diff --git a/src/empathy-rounded-rectangle.h b/src/empathy-rounded-rectangle.h
deleted file mode 100644
index b9988d53..00000000
--- a/src/empathy-rounded-rectangle.h
+++ /dev/null
@@ -1,75 +0,0 @@
-/*
- * empathy-rounded-rectangle.h - Header for EmpathyRoundedRectangle
- * Copyright (C) 2011 Collabora Ltd.
- * @author Emilio Pozuelo Monfort <emilio.pozuelo@collabora.co.uk>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-#ifndef __EMPATHY_ROUNDED_RECTANGLE_H__
-#define __EMPATHY_ROUNDED_RECTANGLE_H__
-
-#include <clutter/clutter.h>
-
-G_BEGIN_DECLS
-
-typedef struct _EmpathyRoundedRectangle EmpathyRoundedRectangle;
-typedef struct _EmpathyRoundedRectanglePriv EmpathyRoundedRectanglePriv;
-typedef struct _EmpathyRoundedRectangleClass EmpathyRoundedRectangleClass;
-
-struct _EmpathyRoundedRectangleClass {
- ClutterCairoTextureClass parent_class;
-};
-
-struct _EmpathyRoundedRectangle {
- ClutterCairoTexture parent;
-
- EmpathyRoundedRectanglePriv *priv;
-};
-
-GType empathy_rounded_rectangle_get_type (void);
-
-/* TYPE MACROS */
-#define EMPATHY_TYPE_ROUNDED_RECTANGLE \
- (empathy_rounded_rectangle_get_type ())
-#define EMPATHY_ROUNDED_RECTANGLE(obj) \
- (G_TYPE_CHECK_INSTANCE_CAST((obj), EMPATHY_TYPE_ROUNDED_RECTANGLE, \
- EmpathyRoundedRectangle))
-#define EMPATHY_ROUNDED_RECTANGLE_CLASS(klass) \
- (G_TYPE_CHECK_CLASS_CAST((klass), EMPATHY_TYPE_ROUNDED_RECTANGLE, \
- EmpathyRoundedRectangleClass))
-#define EMPATHY_IS_ROUNDED_RECTANGLE(obj) \
- (G_TYPE_CHECK_INSTANCE_TYPE((obj), EMPATHY_TYPE_ROUNDED_RECTANGLE))
-#define EMPATHY_IS_ROUNDED_RECTANGLE_CLASS(klass) \
- (G_TYPE_CHECK_CLASS_TYPE((klass), EMPATHY_TYPE_ROUNDED_RECTANGLE))
-#define EMPATHY_ROUNDED_RECTANGLE_GET_CLASS(obj) \
- (G_TYPE_INSTANCE_GET_CLASS ((obj), EMPATHY_TYPE_ROUNDED_RECTANGLE, \
- EmpathyRoundedRectangleClass))
-
-EmpathyRoundedRectangle *empathy_rounded_rectangle_new (guint width,
- guint height,
- guint round_factor);
-
-void
-empathy_rounded_rectangle_set_border_width (EmpathyRoundedRectangle *self,
- guint border_width);
-
-void
-empathy_rounded_rectangle_set_border_color (EmpathyRoundedRectangle *self,
- const ClutterColor *color);
-
-G_END_DECLS
-
-#endif /* #ifndef __EMPATHY_ROUNDED_RECTANGLE_H__*/
diff --git a/src/empathy-rounded-texture.c b/src/empathy-rounded-texture.c
deleted file mode 100644
index 46c0b213..00000000
--- a/src/empathy-rounded-texture.c
+++ /dev/null
@@ -1,71 +0,0 @@
-/*
- * empathy-rounded-texture.c - Source for EmpathyRoundedTexture
- * Copyright (C) 2011 Collabora Ltd.
- * @author Emilio Pozuelo Monfort <emilio.pozuelo@collabora.co.uk>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-#include "config.h"
-#include "empathy-rounded-texture.h"
-
-G_DEFINE_TYPE (EmpathyRoundedTexture,
- empathy_rounded_texture,
- CLUTTER_TYPE_TEXTURE)
-
-static void
-empathy_rounded_texture_paint (ClutterActor *texture)
-{
- ClutterActorBox allocation = { 0, };
- gfloat width, height;
-
- clutter_actor_get_allocation_box (texture, &allocation);
- clutter_actor_box_get_size (&allocation, &width, &height);
-
- cogl_path_new ();
-
- /* create and store a path describing a rounded rectangle */
- cogl_path_round_rectangle (0, 0, width, height, height / 16., 0.1);
-
- cogl_clip_push_from_path ();
-
- CLUTTER_ACTOR_CLASS (empathy_rounded_texture_parent_class)->paint (texture);
-
- /* Flip */
- cogl_rectangle_with_texture_coords (0, 0, width, height,
- 1., 0., 0., 1.);
-
- cogl_clip_pop ();
-}
-
-static void
-empathy_rounded_texture_init (EmpathyRoundedTexture *self)
-{
-}
-
-static void
-empathy_rounded_texture_class_init (EmpathyRoundedTextureClass *klass)
-{
- ClutterActorClass *actor_class = CLUTTER_ACTOR_CLASS (klass);
-
- actor_class->paint = empathy_rounded_texture_paint;
-}
-
-ClutterActor *
-empathy_rounded_texture_new (void)
-{
- return CLUTTER_ACTOR (
- g_object_new (EMPATHY_TYPE_ROUNDED_TEXTURE, NULL));
-}
diff --git a/src/empathy-rounded-texture.h b/src/empathy-rounded-texture.h
deleted file mode 100644
index c5d870d0..00000000
--- a/src/empathy-rounded-texture.h
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- * empathy-rounded-texture.h - Header for EmpathyRoundedTexture
- * Copyright (C) 2011 Collabora Ltd.
- * @author Emilio Pozuelo Monfort <emilio.pozuelo@collabora.co.uk>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-#ifndef __EMPATHY_ROUNDED_TEXTURE_H__
-#define __EMPATHY_ROUNDED_TEXTURE_H__
-
-#include <clutter/clutter.h>
-
-G_BEGIN_DECLS
-
-typedef struct _EmpathyRoundedTexture EmpathyRoundedTexture;
-typedef struct _EmpathyRoundedTextureClass EmpathyRoundedTextureClass;
-
-struct _EmpathyRoundedTextureClass {
- ClutterTextureClass parent_class;
-};
-
-struct _EmpathyRoundedTexture {
- ClutterTexture parent;
-};
-
-GType empathy_rounded_texture_get_type (void);
-
-/* TYPE MACROS */
-#define EMPATHY_TYPE_ROUNDED_TEXTURE \
- (empathy_rounded_texture_get_type ())
-#define EMPATHY_ROUNDED_TEXTURE(obj) \
- (G_TYPE_CHECK_INSTANCE_CAST((obj), EMPATHY_TYPE_ROUNDED_TEXTURE, \
- EmpathyRoundedTexture))
-#define EMPATHY_ROUNDED_TEXTURE_CLASS(klass) \
- (G_TYPE_CHECK_CLASS_CAST((klass), EMPATHY_TYPE_ROUNDED_TEXTURE, \
- EmpathyRoundedTextureClass))
-#define EMPATHY_IS_ROUNDED_TEXTURE(obj) \
- (G_TYPE_CHECK_INSTANCE_TYPE((obj), EMPATHY_TYPE_ROUNDED_TEXTURE))
-#define EMPATHY_IS_ROUNDED_TEXTURE_CLASS(klass) \
- (G_TYPE_CHECK_CLASS_TYPE((klass), EMPATHY_TYPE_ROUNDED_TEXTURE))
-#define EMPATHY_ROUNDED_TEXTURE_GET_CLASS(obj) \
- (G_TYPE_INSTANCE_GET_CLASS ((obj), EMPATHY_TYPE_ROUNDED_TEXTURE, \
- EmpathyRoundedTextureClass))
-
-ClutterActor *empathy_rounded_texture_new (void);
-
-G_END_DECLS
-
-#endif /* #ifndef __EMPATHY_ROUNDED_TEXTURE_H__*/
diff --git a/src/empathy-sanity-cleaning.c b/src/empathy-sanity-cleaning.c
deleted file mode 100644
index 6ad0990a..00000000
--- a/src/empathy-sanity-cleaning.c
+++ /dev/null
@@ -1,653 +0,0 @@
-/*
- * empathy-sanity-cleaning.c
- * Code automatically called when starting a specific version of Empathy for
- * the first time doing misc cleaning.
- *
- * Copyright (C) 2012 Collabora Ltd.
- * @author Guillaume Desmottes <guillaume.desmottes@collabora.co.uk>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-#include "config.h"
-#include "empathy-sanity-cleaning.h"
-
-#ifdef HAVE_UOA
-#include <libaccounts-glib/ag-account-service.h>
-#include <libaccounts-glib/ag-manager.h>
-#include <libaccounts-glib/ag-service.h>
-#include <tp-account-widgets/tpaw-keyring.h>
-
-#include "empathy-pkg-kit.h"
-#include "empathy-uoa-utils.h"
-#endif
-
-#include "empathy-gsettings.h"
-#include "empathy-theme-manager.h"
-
-#define DEBUG_FLAG EMPATHY_DEBUG_OTHER
-#include "empathy-debug.h"
-
-/*
- * This number has to be increased each time a new task is added or modified.
- *
- * If the number stored in gsettings is lower than it, all the tasks will
- * be executed.
- */
-#define SANITY_CLEANING_NUMBER 4
-
-typedef struct
-{
- TpAccountManager *am;
- GSimpleAsyncResult *result;
-
- gint ref_count;
-} SanityCtx;
-
-static SanityCtx *
-sanity_ctx_new (TpAccountManager *am,
- GSimpleAsyncResult *result)
-{
- SanityCtx *ctx = g_slice_new0 (SanityCtx);
-
- ctx->am = g_object_ref (am);
- ctx->result = g_object_ref (result);
-
- ctx->ref_count = 1;
- return ctx;
-}
-
-#ifdef HAVE_UOA
-static SanityCtx *
-sanity_ctx_ref (SanityCtx *ctx)
-{
- ctx->ref_count++;
-
- return ctx;
-}
-#endif
-
-static void
-sanity_ctx_unref (SanityCtx *ctx)
-{
- ctx->ref_count--;
-
- if (ctx->ref_count != 0)
- return;
-
- g_simple_async_result_complete_in_idle (ctx->result);
-
- g_object_unref (ctx->am);
- g_object_unref (ctx->result);
-
- g_slice_free (SanityCtx, ctx);
-}
-
-static void
-account_update_parameters_cb (GObject *source,
- GAsyncResult *result,
- gpointer user_data)
-{
- GError *error = NULL;
- TpAccount *account = TP_ACCOUNT (source);
-
- if (!tp_account_update_parameters_finish (account, result, NULL, &error))
- {
- DEBUG ("Failed to update parameters of account '%s': %s",
- tp_account_get_path_suffix (account), error->message);
-
- g_error_free (error);
- return;
- }
-
- tp_account_reconnect_async (account, NULL, NULL);
-}
-
-/* Make sure XMPP accounts don't have a negative priority (bgo #671452) */
-static void
-fix_xmpp_account_priority (TpAccountManager *am)
-{
- GList *accounts, *l;
-
- accounts = tp_account_manager_dup_valid_accounts (am);
- for (l = accounts; l != NULL; l = g_list_next (l))
- {
- TpAccount *account = l->data;
- GHashTable *params;
- gint priority;
-
- if (tp_strdiff (tp_account_get_protocol_name (account), "jabber"))
- continue;
-
- params = (GHashTable *) tp_account_get_parameters (account);
- if (params == NULL)
- continue;
-
- priority = tp_asv_get_int32 (params, "priority", NULL);
- if (priority >= 0)
- continue;
-
- DEBUG ("Resetting XMPP priority of account '%s' to 0",
- tp_account_get_path_suffix (account));
-
- params = tp_asv_new (
- "priority", G_TYPE_INT, 0,
- NULL);
-
- tp_account_update_parameters_async (account, params, NULL,
- account_update_parameters_cb, NULL);
-
- g_hash_table_unref (params);
- }
-
- g_list_free_full (accounts, g_object_unref);
-}
-
-static void
-set_facebook_account_fallback_server (TpAccountManager *am)
-{
- GList *accounts, *l;
-
- accounts = tp_account_manager_dup_valid_accounts (am);
- for (l = accounts; l != NULL; l = g_list_next (l))
- {
- TpAccount *account = l->data;
- GHashTable *params;
- gchar *fallback_servers[] = {
- "chat.facebook.com:443",
- NULL };
-
- if (tp_strdiff (tp_account_get_service (account), "facebook"))
- continue;
-
- params = (GHashTable *) tp_account_get_parameters (account);
- if (params == NULL)
- continue;
-
- if (tp_asv_get_strv (params, "fallback-servers") != NULL)
- continue;
-
- DEBUG ("Setting chat.facebook.com:443 as a fallback on account '%s'",
- tp_account_get_path_suffix (account));
-
- params = tp_asv_new (
- "fallback-servers", G_TYPE_STRV, fallback_servers,
- NULL);
-
- tp_account_update_parameters_async (account, params, NULL,
- account_update_parameters_cb, NULL);
-
- g_hash_table_unref (params);
- }
-
- g_list_free_full (accounts, g_object_unref);
-}
-
-static void
-upgrade_chat_theme_settings (void)
-{
- GSettings *gsettings_chat;
- gchar *theme, *new_theme = NULL;
- const char *variant = "";
-
- gsettings_chat = g_settings_new (EMPATHY_PREFS_CHAT_SCHEMA);
-
- theme = g_settings_get_string (gsettings_chat,
- EMPATHY_PREFS_CHAT_THEME);
-
- if (!tp_strdiff (theme, "adium")) {
- gchar *path;
-
- path = g_settings_get_string (gsettings_chat,
- EMPATHY_PREFS_CHAT_ADIUM_PATH);
-
- new_theme = empathy_theme_manager_dup_theme_name_from_path (path);
- if (new_theme == NULL)
- {
- /* Use the Classic theme as fallback */
- new_theme = g_strdup ("Classic");
- }
-
- g_free (path);
- } else if (!tp_strdiff (theme, "gnome")) {
- new_theme = g_strdup ("PlanetGNOME");
- } else if (!tp_strdiff (theme, "simple")) {
- new_theme = g_strdup ("Boxes");
- variant = "Simple";
- } else if (!tp_strdiff (theme, "clean")) {
- new_theme = g_strdup ("Boxes");
- variant = "Clean";
- } else if (!tp_strdiff (theme, "blue")) {
- new_theme = g_strdup ("Boxes");
- variant = "Blue";
- } else {
- /* Assume that's an Adium theme name. The theme manager will fallback to
- * 'Classic' if it can't find it. */
- goto finally;
- }
-
- DEBUG ("Migrating to '%s' variant '%s'", new_theme, variant);
-
- g_settings_set_string (gsettings_chat,
- EMPATHY_PREFS_CHAT_THEME, new_theme);
- g_settings_set_string (gsettings_chat,
- EMPATHY_PREFS_CHAT_THEME_VARIANT, variant);
-
-finally:
- g_free (theme);
- g_free (new_theme);
- g_object_unref (gsettings_chat);
-}
-
-#ifdef HAVE_UOA
-typedef struct
-{
- TpAccount *new_account;
- TpAccount *old_account;
- gboolean enabled;
-} UoaMigrationData;
-
-static UoaMigrationData *
-uoa_migration_data_new (TpAccount *account)
-{
- UoaMigrationData *data;
-
- data = g_slice_new0 (UoaMigrationData);
- data->old_account = g_object_ref (account);
- data->enabled = tp_account_is_enabled (account);
-
- return data;
-}
-
-static void
-uoa_migration_data_free (UoaMigrationData *data)
-{
- g_clear_object (&data->new_account);
- g_clear_object (&data->old_account);
- g_slice_free (UoaMigrationData, data);
-}
-
-#define DATA_SANITY_CTX "data-sanity-ctx"
-
-static void
-uoa_account_remove_cb (GObject *source,
- GAsyncResult *result,
- gpointer user_data)
-{
- TpAccount *account = TP_ACCOUNT (source);
- GError *error = NULL;
-
- if (!tp_account_remove_finish (account, result, &error))
- {
- DEBUG ("Failed to remove account '%s': %s",
- tp_account_get_path_suffix (account), error->message);
- g_error_free (error);
- }
-
- g_object_set_data (G_OBJECT (account), DATA_SANITY_CTX, NULL);
-}
-
-static void
-uoa_migration_done (UoaMigrationData *data)
-{
- tp_account_remove_async (data->old_account, uoa_account_remove_cb, NULL);
-
- if (data->new_account != NULL)
- tp_account_set_enabled_async (data->new_account, data->enabled, NULL, NULL);
-
- uoa_migration_data_free (data);
-}
-
-static void
-uoa_set_account_password_cb (GObject *source,
- GAsyncResult *result,
- gpointer user_data)
-{
- UoaMigrationData *data = user_data;
- GError *error = NULL;
-
- if (!tpaw_keyring_set_account_password_finish (data->new_account, result,
- &error))
- {
- DEBUG ("Error setting old account's password on the new one: %s\n",
- error->message);
- g_clear_error (&error);
- }
-
- uoa_migration_done (data);
-}
-
-static void
-uoa_get_account_password_cb (GObject *source,
- GAsyncResult *result,
- gpointer user_data)
-{
- UoaMigrationData *data = user_data;
- const gchar *password;
- GError *error = NULL;
-
- password = tpaw_keyring_get_account_password_finish (data->old_account,
- result, &error);
- if (password == NULL)
- {
- DEBUG ("Error getting old account's password: %s\n", error->message);
- g_clear_error (&error);
-
- uoa_migration_done (data);
- }
- else
- {
- tpaw_keyring_set_account_password_async (data->new_account, password,
- TRUE, uoa_set_account_password_cb, data);
- }
-}
-
-static void
-uoa_account_created_cb (GObject *source,
- GAsyncResult *result,
- gpointer user_data)
-{
- TpAccountRequest *ar = (TpAccountRequest *) source;
- UoaMigrationData *data = user_data;
- GError *error = NULL;
-
- data->new_account = tp_account_request_create_account_finish (ar, result,
- &error);
- if (data->new_account == NULL)
- {
- DEBUG ("Failed to migrate account '%s' to UOA: %s",
- tp_account_get_path_suffix (data->old_account), error->message);
- g_clear_error (&error);
-
- uoa_migration_done (data);
- }
- else
- {
- DEBUG ("New account %s created to superseed %s",
- tp_account_get_path_suffix (data->new_account),
- tp_account_get_path_suffix (data->old_account));
-
- /* Migrate password as well */
- tpaw_keyring_get_account_password_async (data->old_account,
- uoa_get_account_password_cb, data);
- }
-}
-
-static void
-migrate_account_to_uoa (TpAccountManager *am,
- TpAccount *account)
-{
- TpAccountRequest *ar;
- GVariant *params;
- GVariant *param;
- GVariantIter iter;
- const gchar * const *supersedes;
- guint i;
- UoaMigrationData *data;
-
- DEBUG ("Migrating account %s to UOA storage\n",
- tp_account_get_path_suffix (account));
-
- ar = tp_account_request_new (am,
- tp_account_get_cm_name (account),
- tp_account_get_protocol_name (account),
- tp_account_get_display_name (account));
- tp_account_request_set_storage_provider (ar, EMPATHY_UOA_PROVIDER);
- tp_account_request_set_icon_name (ar,
- tp_account_get_icon_name (account));
- tp_account_request_set_nickname (ar,
- tp_account_get_nickname (account));
- tp_account_request_set_service (ar,
- tp_account_get_service (account));
-
- /* Do not enable the new account until we imported the password as well */
- tp_account_request_set_enabled (ar, FALSE);
-
- supersedes = tp_account_get_supersedes (account);
-
- for (i = 0; supersedes[i] != NULL; i++)
- tp_account_request_add_supersedes (ar, supersedes[i]);
-
- tp_account_request_add_supersedes (ar,
- tp_proxy_get_object_path (account));
-
- params = tp_account_dup_parameters_vardict (account);
- g_variant_iter_init (&iter, params);
- while ((param = g_variant_iter_next_value (&iter)))
- {
- GVariant *k, *v;
- const gchar *key;
-
- k = g_variant_get_child_value (param, 0);
- key = g_variant_get_string (k, NULL);
- v = g_variant_get_child_value (param, 1);
-
- tp_account_request_set_parameter (ar, key,
- g_variant_get_variant (v));
-
- g_variant_unref (k);
- g_variant_unref (v);
- }
-
- data = uoa_migration_data_new (account);
- tp_account_set_enabled_async (account, FALSE, NULL, NULL);
- tp_account_request_create_account_async (ar, uoa_account_created_cb,
- data);
-
- g_variant_unref (params);
- g_object_unref (ar);
-}
-
-static void
-uoa_plugin_install_cb (GObject *source,
- GAsyncResult *result,
- gpointer user_data)
-{
- TpAccount *account = user_data;
- GError *error = NULL;
- TpAccountManager *am;
-
- if (!empathy_pkg_kit_install_packages_finish (result, &error))
- {
- DEBUG ("Failed to install plugin for account '%s' (%s); remove it",
- tp_account_get_path_suffix (account), error->message);
-
- g_error_free (error);
-
- tp_account_remove_async (account, uoa_account_remove_cb, NULL);
- goto out;
- }
-
- DEBUG ("Plugin for account '%s' has been installed; migrate account",
- tp_account_get_path_suffix (account));
-
- am = tp_account_manager_dup ();
- migrate_account_to_uoa (am, account);
- g_object_unref (am);
-
-out:
- g_object_unref (account);
-}
-
-static gchar *
-dup_plugin_name_for_protocol (const gchar *protocol)
-{
- if (!tp_strdiff (protocol, "local-xmpp"))
- return g_strdup ("account-plugin-salut");
-
- return g_strdup_printf ("account-plugin-%s", protocol);
-}
-
-static gboolean
-uoa_plugin_installed (AgManager *manager,
- TpAccount *account)
-{
- AgAccount *ag_account;
- const gchar *protocol;
- GList *l;
-
- protocol = tp_account_get_protocol_name (account);
- ag_account = ag_manager_create_account (manager, protocol);
-
- l = ag_account_list_services_by_type (ag_account, EMPATHY_UOA_SERVICE_TYPE);
- if (l == NULL)
- {
- const gchar *packages[2];
- gchar *pkg;
-
- pkg = dup_plugin_name_for_protocol (protocol);
-
- DEBUG ("%s is not installed; try to install it", pkg);
-
- packages[0] = pkg;
- packages[1] = NULL;
-
- empathy_pkg_kit_install_packages_async (0, packages, NULL,
- NULL, uoa_plugin_install_cb, g_object_ref (account));
-
- g_free (pkg);
- g_object_unref (ag_account);
- return FALSE;
- }
-
- ag_service_list_free (l);
-
- g_object_unref (ag_account);
- return TRUE;
-}
-
-static void
-migrate_accounts_to_uoa (SanityCtx *ctx)
-{
- GList *accounts, *l;
- AgManager *manager;
-
- DEBUG ("Start migrating accounts to UOA");
-
- manager = empathy_uoa_manager_dup ();
-
- accounts = tp_account_manager_dup_valid_accounts (ctx->am);
- for (l = accounts; l != NULL; l = g_list_next (l))
- {
- TpAccount *account = l->data;
-
- /* If account is already in a specific storage (like UOA or GOA),
- * don't migrate it.
- * Note that we cannot migrate GOA accounts anyway, since we can't delete
- * them it would create duplicated accounts. */
- if (!tp_str_empty (tp_account_get_storage_provider (account)))
- continue;
-
- g_object_set_data_full (G_OBJECT (account), DATA_SANITY_CTX,
- sanity_ctx_ref (ctx), (GDestroyNotify) sanity_ctx_unref);
-
- /* Try to install the plugin if it's missing */
- if (!uoa_plugin_installed (manager, account))
- continue;
-
- migrate_account_to_uoa (ctx->am, account);
- }
-
- g_list_free_full (accounts, g_object_unref);
-
- g_object_unref (manager);
-}
-#endif
-
-static void
-run_sanity_cleaning_tasks (SanityCtx *ctx)
-{
- DEBUG ("Starting sanity cleaning tasks");
-
- fix_xmpp_account_priority (ctx->am);
- set_facebook_account_fallback_server (ctx->am);
- upgrade_chat_theme_settings ();
-#ifdef HAVE_UOA
- migrate_accounts_to_uoa (ctx);
-#endif
-}
-
-static void
-am_prepare_cb (GObject *source,
- GAsyncResult *result,
- gpointer user_data)
-{
- GError *error = NULL;
- TpAccountManager *am = TP_ACCOUNT_MANAGER (source);
- SanityCtx *ctx = user_data;
-
- if (!tp_proxy_prepare_finish (am, result, &error))
- {
- DEBUG ("Failed to prepare account manager: %s", error->message);
- g_simple_async_result_take_error (ctx->result, error);
- goto out;
- }
-
- run_sanity_cleaning_tasks (ctx);
-
-out:
- sanity_ctx_unref (ctx);
-}
-
-void
-empathy_sanity_checking_run_async (GAsyncReadyCallback callback,
- gpointer user_data)
-{
- GSettings *settings;
- guint number;
- TpAccountManager *am;
- GSimpleAsyncResult *result;
- SanityCtx *ctx;
-
- result = g_simple_async_result_new (NULL, callback, user_data,
- empathy_sanity_checking_run_async);
-
- settings = g_settings_new (EMPATHY_PREFS_SCHEMA);
- number = g_settings_get_uint (settings, EMPATHY_PREFS_SANITY_CLEANING_NUMBER);
-
- if (number == SANITY_CLEANING_NUMBER)
- {
- g_simple_async_result_complete_in_idle (result);
- goto out;
- }
-
- am = tp_account_manager_dup ();
-
- ctx = sanity_ctx_new (am, result);
- tp_proxy_prepare_async (am, NULL, am_prepare_cb, ctx);
-
- g_settings_set_uint (settings, EMPATHY_PREFS_SANITY_CLEANING_NUMBER,
- SANITY_CLEANING_NUMBER);
-
- g_object_unref (am);
-
-out:
- g_object_unref (settings);
- g_object_unref (result);
-}
-
-gboolean
-empathy_sanity_checking_run_finish (GAsyncResult *result,
- GError **error)
-{
- g_return_val_if_fail (g_simple_async_result_is_valid (result, NULL,
- empathy_sanity_checking_run_async), FALSE);
-
- if (g_simple_async_result_propagate_error (G_SIMPLE_ASYNC_RESULT (result),
- error))
- return FALSE;
-
- return TRUE;
-}
diff --git a/src/empathy-sanity-cleaning.h b/src/empathy-sanity-cleaning.h
deleted file mode 100644
index f7299325..00000000
--- a/src/empathy-sanity-cleaning.h
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * empathy-sanity-cleaning.h
- *
- * Copyright (C) 2012 Collabora Ltd.
- * @author Guillaume Desmottes <guillaume.desmottes@collabora.co.uk>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-#ifndef __EMPATHY_SANITY_CLEANING_H__
-#define __EMPATHY_SANITY_CLEANING_H__
-
-#include <gio/gio.h>
-
-G_BEGIN_DECLS
-
-void empathy_sanity_checking_run_async (GAsyncReadyCallback callback,
- gpointer user_data);
-
-gboolean empathy_sanity_checking_run_finish (GAsyncResult *result,
- GError **error);
-
-G_END_DECLS
-
-#endif
diff --git a/src/empathy-status-icon.c b/src/empathy-status-icon.c
deleted file mode 100644
index 2f71fa13..00000000
--- a/src/empathy-status-icon.c
+++ /dev/null
@@ -1,523 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * Copyright (C) 2007-2008 Collabora Ltd.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- *
- * Authors: Xavier Claessens <xclaesse@gmail.com>
- */
-
-#include "config.h"
-#include "empathy-status-icon.h"
-
-#include <tp-account-widgets/tpaw-builder.h>
-#include <tp-account-widgets/tpaw-utils.h>
-
-#include "empathy-event-manager.h"
-#include "empathy-gsettings.h"
-#include "empathy-new-call-dialog.h"
-#include "empathy-new-message-dialog.h"
-#include "empathy-presence-chooser.h"
-#include "empathy-ui-utils.h"
-#include "empathy-utils.h"
-
-#define DEBUG_FLAG EMPATHY_DEBUG_DISPATCHER
-#include "empathy-debug.h"
-
-/* Number of ms to wait when blinking */
-#define BLINK_TIMEOUT 500
-
-#define GET_PRIV(obj) EMPATHY_GET_PRIV (obj, EmpathyStatusIcon)
-typedef struct {
- GtkStatusIcon *icon;
- TpAccountManager *account_manager;
- gboolean showing_event_icon;
- guint blink_timeout;
- EmpathyEventManager *event_manager;
- EmpathyEvent *event;
- GSettings *gsettings_ui;
-
- GtkWidget *window;
- GtkUIManager *ui_manager;
- GtkWidget *popup_menu;
- GtkAction *show_window_item;
- GtkAction *new_message_item;
- GtkAction *status_item;
-} EmpathyStatusIconPriv;
-
-G_DEFINE_TYPE (EmpathyStatusIcon, empathy_status_icon, G_TYPE_OBJECT);
-
-static void
-status_icon_update_tooltip (EmpathyStatusIcon *icon)
-{
- EmpathyStatusIconPriv *priv = GET_PRIV (icon);
-
- if (priv->event) {
- gchar *tooltip = NULL;
-
- if (priv->event->message != NULL)
- tooltip = g_markup_printf_escaped ("<i>%s</i>\n%s",
- priv->event->header,
- priv->event->message);
- else
- tooltip = g_markup_printf_escaped ("<i>%s</i>",
- priv->event->header);
- gtk_status_icon_set_tooltip_markup (priv->icon, tooltip);
- g_free (tooltip);
- } else {
- TpConnectionPresenceType type;
- gchar *msg;
-
- type = tp_account_manager_get_most_available_presence (
- priv->account_manager, NULL, &msg);
-
- if (!TPAW_STR_EMPTY (msg)) {
- gtk_status_icon_set_tooltip_text (priv->icon, msg);
- }
- else {
- gtk_status_icon_set_tooltip_text (priv->icon,
- empathy_presence_get_default_message (type));
- }
-
- g_free (msg);
- }
-}
-
-static void
-status_icon_update_icon (EmpathyStatusIcon *icon)
-{
- EmpathyStatusIconPriv *priv = GET_PRIV (icon);
- const gchar *icon_name;
-
- if (priv->event && priv->showing_event_icon) {
- icon_name = priv->event->icon_name;
- } else {
- TpConnectionPresenceType state;
-
- state = tp_account_manager_get_most_available_presence (
- priv->account_manager, NULL, NULL);
-
- /* An unset presence type here doesn't make sense. Force it
- * to be offline. */
- if (state == TP_CONNECTION_PRESENCE_TYPE_UNSET) {
- state = TP_CONNECTION_PRESENCE_TYPE_OFFLINE;
- }
-
- icon_name = empathy_icon_name_for_presence (state);
- }
-
- if (icon_name != NULL)
- gtk_status_icon_set_from_icon_name (priv->icon, icon_name);
-}
-
-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_added_cb (EmpathyEventManager *manager,
- EmpathyEvent *event,
- EmpathyStatusIcon *icon)
-{
- EmpathyStatusIconPriv *priv = GET_PRIV (icon);
-
- if (priv->event) {
- return;
- }
-
- DEBUG ("New event %p", event);
-
- priv->event = event;
- if (event->must_ack || event->type == EMPATHY_EVENT_TYPE_AUTH) {
- priv->showing_event_icon = TRUE;
- status_icon_update_icon (icon);
- status_icon_update_tooltip (icon);
- }
-
- if (!priv->blink_timeout && priv->showing_event_icon) {
- priv->blink_timeout = g_timeout_add (BLINK_TIMEOUT,
- (GSourceFunc) status_icon_blink_timeout_cb,
- icon);
- }
-}
-
-static void
-status_icon_event_removed_cb (EmpathyEventManager *manager,
- EmpathyEvent *event,
- EmpathyStatusIcon *icon)
-{
- EmpathyStatusIconPriv *priv = GET_PRIV (icon);
-
- if (event != priv->event) {
- return;
- }
-
- priv->event = empathy_event_manager_get_top_event (priv->event_manager);
-
- status_icon_update_tooltip (icon);
- status_icon_update_icon (icon);
-
- if (!priv->event && priv->blink_timeout) {
- g_source_remove (priv->blink_timeout);
- priv->blink_timeout = 0;
- }
-}
-
-static void
-status_icon_event_updated_cb (EmpathyEventManager *manager,
- EmpathyEvent *event,
- EmpathyStatusIcon *icon)
-{
- EmpathyStatusIconPriv *priv = GET_PRIV (icon);
-
- if (event != priv->event) {
- return;
- }
-
- status_icon_update_tooltip (icon);
-}
-
-static void
-status_icon_set_visibility (EmpathyStatusIcon *icon,
- gboolean visible,
- gboolean store)
-{
- EmpathyStatusIconPriv *priv = GET_PRIV (icon);
-
- if (store) {
- g_settings_set_boolean (priv->gsettings_ui,
- EMPATHY_PREFS_UI_MAIN_WINDOW_HIDDEN,
- !visible);
- }
-
- if (!visible) {
- gtk_widget_hide (priv->window);
- } else {
- tpaw_window_present (GTK_WINDOW (priv->window));
- }
-}
-
-static void
-status_icon_notify_visibility_cb (GSettings *gsettings,
- const gchar *key,
- gpointer user_data)
-{
- EmpathyStatusIcon *icon = user_data;
- gboolean hidden = FALSE;
-
- hidden = g_settings_get_boolean (gsettings, key);
- 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 (GTK_WINDOW (priv->window));
- status_icon_set_visibility (icon, !visible, TRUE);
-}
-
-static void
-status_icon_presence_changed_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 gboolean
-status_icon_key_press_event_cb (GtkWidget *window,
- GdkEventKey *event,
- EmpathyStatusIcon *icon)
-{
- if (event->keyval == GDK_KEY_Escape) {
- status_icon_set_visibility (icon, FALSE, TRUE);
- }
- return FALSE;
-}
-
-static void
-status_icon_activate_cb (GtkStatusIcon *status_icon,
- EmpathyStatusIcon *icon)
-{
- EmpathyStatusIconPriv *priv = GET_PRIV (icon);
-
- DEBUG ("%s", priv->event ? "event" : "toggle");
-
- if (priv->event) {
- empathy_event_activate (priv->event);
- } else {
- status_icon_toggle_visibility (icon);
- }
-}
-
-static void
-status_icon_show_hide_window_cb (GtkToggleAction *action,
- EmpathyStatusIcon *icon)
-{
- gboolean visible;
-
- visible = gtk_toggle_action_get_active (action);
- status_icon_set_visibility (icon, visible, TRUE);
-}
-
-static void
-status_icon_new_message_cb (GtkAction *action,
- EmpathyStatusIcon *icon)
-{
- empathy_new_message_dialog_show (NULL);
-}
-
-static void
-status_icon_new_call_cb (GtkAction *action,
- EmpathyStatusIcon *icon)
-{
- empathy_new_call_dialog_show (NULL);
-}
-
-static void
-status_icon_quit_cb (GtkAction *action,
- EmpathyStatusIcon *icon)
-{
- EmpathyStatusIconPriv *priv = GET_PRIV (icon);
-
- gtk_widget_destroy (priv->window);
-}
-
-static void
-status_icon_popup_menu_cb (GtkStatusIcon *status_icon,
- guint button,
- guint activate_time,
- EmpathyStatusIcon *icon)
-{
- EmpathyStatusIconPriv *priv = GET_PRIV (icon);
- GtkWidget *menu_item;
- GtkWidget *submenu;
- gboolean show;
-
- show = gtk_widget_get_visible (priv->window);
-
- g_signal_handlers_block_by_func (priv->show_window_item,
- status_icon_show_hide_window_cb,
- icon);
- gtk_toggle_action_set_active (GTK_TOGGLE_ACTION (priv->show_window_item),
- show);
- g_signal_handlers_unblock_by_func (priv->show_window_item,
- status_icon_show_hide_window_cb,
- icon);
-
- menu_item = gtk_ui_manager_get_widget (priv->ui_manager, "/menu/status");
- submenu = empathy_presence_chooser_create_menu ();
- gtk_menu_item_set_submenu (GTK_MENU_ITEM (menu_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);
- GtkBuilder *gui;
- gchar *filename;
-
- filename = empathy_file_lookup ("empathy-status-icon.ui", "src");
- gui = tpaw_builder_get_file (filename,
- "ui_manager", &priv->ui_manager,
- "menu", &priv->popup_menu,
- "show_list", &priv->show_window_item,
- "new_message", &priv->new_message_item,
- "status", &priv->status_item,
- NULL);
- g_free (filename);
-
- tpaw_builder_connect (gui, icon,
- "show_list", "toggled", status_icon_show_hide_window_cb,
- "new_message", "activate", status_icon_new_message_cb,
- "new_call", "activate", status_icon_new_call_cb,
- "quit", "activate", status_icon_quit_cb,
- NULL);
-
- g_object_ref (priv->ui_manager);
- g_object_unref (gui);
-}
-
-static void
-status_icon_status_changed_cb (TpAccount *account,
- TpConnectionStatus current,
- TpConnectionStatus previous,
- TpConnectionStatusReason reason,
- gchar *dbus_error_name,
- GHashTable *details,
- EmpathyStatusIcon *icon)
-{
- EmpathyStatusIconPriv *priv = GET_PRIV (icon);
-
- gtk_action_set_sensitive (priv->new_message_item,
- empathy_account_manager_get_accounts_connected (NULL));
-}
-
-static void
-status_icon_finalize (GObject *object)
-{
- EmpathyStatusIconPriv *priv = GET_PRIV (object);
-
- if (priv->blink_timeout) {
- g_source_remove (priv->blink_timeout);
- }
-
- g_object_unref (priv->icon);
- g_object_unref (priv->account_manager);
- g_object_unref (priv->event_manager);
- g_object_unref (priv->ui_manager);
- g_object_unref (priv->gsettings_ui);
- g_object_unref (priv->window);
-}
-
-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
-account_manager_prepared_cb (GObject *source_object,
- GAsyncResult *result,
- gpointer user_data)
-{
- GList *list, *l;
- TpAccountManager *account_manager = TP_ACCOUNT_MANAGER (source_object);
- EmpathyStatusIcon *icon = user_data;
- GError *error = NULL;
-
- if (!tp_proxy_prepare_finish (account_manager, result, &error)) {
- DEBUG ("Failed to prepare account manager: %s", error->message);
- g_error_free (error);
- return;
- }
-
- list = tp_account_manager_dup_valid_accounts (account_manager);
- for (l = list; l != NULL; l = l->next) {
- tp_g_signal_connect_object (l->data, "status-changed",
- G_CALLBACK (status_icon_status_changed_cb),
- icon, 0);
- }
- g_list_free_full (list, g_object_unref);
-
- status_icon_presence_changed_cb (icon);
-}
-
-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->account_manager = tp_account_manager_dup ();
- priv->event_manager = empathy_event_manager_dup_singleton ();
-
- tp_proxy_prepare_async (priv->account_manager, NULL,
- account_manager_prepared_cb, icon);
-
- /* make icon listen and respond to MAIN_WINDOW_HIDDEN changes */
- priv->gsettings_ui = g_settings_new (EMPATHY_PREFS_UI_SCHEMA);
- g_signal_connect (priv->gsettings_ui,
- "changed::" EMPATHY_PREFS_UI_MAIN_WINDOW_HIDDEN,
- G_CALLBACK (status_icon_notify_visibility_cb),
- icon);
-
- status_icon_create_menu (icon);
-
- g_signal_connect_swapped (priv->account_manager,
- "most-available-presence-changed",
- G_CALLBACK (status_icon_presence_changed_cb),
- icon);
- g_signal_connect (priv->event_manager, "event-added",
- G_CALLBACK (status_icon_event_added_cb),
- icon);
- g_signal_connect (priv->event_manager, "event-removed",
- G_CALLBACK (status_icon_event_removed_cb),
- icon);
- g_signal_connect (priv->event_manager, "event-updated",
- G_CALLBACK (status_icon_event_updated_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, gboolean hide_contact_list)
-{
- 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_after (priv->window, "key-press-event",
- G_CALLBACK (status_icon_key_press_event_cb),
- icon);
-
- g_signal_connect (priv->window, "delete-event",
- G_CALLBACK (status_icon_delete_event_cb),
- icon);
-
- if (!hide_contact_list) {
- should_hide = g_settings_get_boolean (priv->gsettings_ui,
- EMPATHY_PREFS_UI_MAIN_WINDOW_HIDDEN);
- } else {
- should_hide = TRUE;
- }
-
- status_icon_set_visibility (icon, !should_hide, FALSE);
-
- return icon;
-}
-
diff --git a/src/empathy-status-icon.h b/src/empathy-status-icon.h
deleted file mode 100644
index 586e651e..00000000
--- a/src/empathy-status-icon.h
+++ /dev/null
@@ -1,54 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * Copyright (C) 2007-2008 Collabora Ltd.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- *
- * Authors: Xavier Claessens <xclaesse@gmail.com>
- */
-
-#ifndef __EMPATHY_STATUS_ICON_H__
-#define __EMPATHY_STATUS_ICON_H__
-
-#include <gtk/gtk.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,
- gboolean hide_contact_list);
-
-G_END_DECLS
-
-#endif /* __EMPATHY_STATUS_ICON_H__ */
diff --git a/src/empathy-status-icon.ui b/src/empathy-status-icon.ui
deleted file mode 100644
index 155193e4..00000000
--- a/src/empathy-status-icon.ui
+++ /dev/null
@@ -1,62 +0,0 @@
-<?xml version="1.0"?>
-<!--*- mode: xml -*-->
-<interface>
- <object class="GtkUIManager" id="ui_manager">
- <child>
- <object class="GtkActionGroup" id="action_group">
- <child>
- <object class="GtkToggleAction" id="show_list">
- <property name="name">show_list</property>
- <property name="label" translatable="yes">_Show Contact List</property>
- </object>
- </child>
- <child>
- <object class="GtkAction" id="new_message">
- <property name="icon-name">im-message-new</property>
- <property name="name">new_message</property>
- <property name="label" translatable="yes">_New Conversation…</property>
- </object>
- </child>
- <child>
- <object class="GtkAction" id="new_call">
- <property name="icon-name">audio-input-microphone</property>
- <property name="name">new_call</property>
- <property name="label" translatable="yes">New _Call…</property>
- </object>
- </child>
- <child>
- <object class="GtkAction" id="status">
- <property name="name">status</property>
- <property name="label" translatable="yes">Status</property>
- </object>
- </child>
- <child>
- <object class="GtkAction" id="quit">
- <property name="stock_id">gtk-quit</property>
- <property name="name">quit</property>
- <property name="label" translatable="yes">_Quit</property>
- </object>
- </child>
- </object>
- </child>
- <ui>
- <popup name="menu">
- <menuitem action="show_list"/>
- <separator/>
- <menuitem action="new_message"/>
- <menuitem action="new_call"/>
- <menuitem action="status"/>
- <separator/>
- <menuitem action="quit"/>
- </popup>
- </ui>
- </object>
- <object class="GtkMenu" constructor="ui_manager" id="menu">
-
-
-
-
-
-
- </object>
-</interface>
diff --git a/src/empathy-video-src.c b/src/empathy-video-src.c
deleted file mode 100644
index 9856efed..00000000
--- a/src/empathy-video-src.c
+++ /dev/null
@@ -1,512 +0,0 @@
-/*
- * empathy-gst-video-src.c - Source for EmpathyGstVideoSrc
- * Copyright (C) 2008 Collabora Ltd.
- * @author Sjoerd Simons <sjoerd.simons@collabora.co.uk>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-#include "config.h"
-#include "empathy-video-src.h"
-
-#ifdef HAVE_GST1
-#include <gst/video/colorbalance.h>
-#else
-#include <gst/interfaces/colorbalance.h>
-#endif
-
-#define DEBUG_FLAG EMPATHY_DEBUG_VOIP
-#include "empathy-debug.h"
-
-G_DEFINE_TYPE(EmpathyGstVideoSrc, empathy_video_src, GST_TYPE_BIN)
-
-/* Keep in sync with EmpathyGstVideoSrcChannel */
-static const gchar *channel_names[NR_EMPATHY_GST_VIDEO_SRC_CHANNELS] = {
- "contrast", "brightness", "gamma" };
-
-/* signal enum */
-#if 0
-enum
-{
- LAST_SIGNAL
-};
-
-static guint signals[LAST_SIGNAL] = {0};
-#endif
-
-/* private structure */
-typedef struct _EmpathyGstVideoSrcPrivate EmpathyGstVideoSrcPrivate;
-
-struct _EmpathyGstVideoSrcPrivate
-{
- gboolean dispose_has_run;
- GstElement *src;
- /* Element implementing a ColorBalance interface */
- GstElement *balance;
- /* Elements for resolution and framerate adjustment */
- GstElement *capsfilter;
- GstElement *videorate;
- guint width;
- guint height;
- guint framerate;
-};
-
-#define EMPATHY_GST_VIDEO_SRC_GET_PRIVATE(o) \
- (G_TYPE_INSTANCE_GET_PRIVATE ((o), EMPATHY_TYPE_GST_VIDEO_SRC, \
- EmpathyGstVideoSrcPrivate))
-/**
- * empathy_gst_add_to_bin - create a new gst element, add to bin and link it.
- * @bin - bin to add the new element to.
- * @src - src element for the new element (may be NULL).
- * @name - name of the factory for the new element
- *
- * Returns: The newly created element ot %NULL on failure
- */
-static GstElement *
-empathy_gst_add_to_bin (GstBin *bin,
- GstElement *src,
- const gchar *factoryname)
-{
- GstElement *ret;
-
- if ((ret = gst_element_factory_make (factoryname, NULL)) == NULL)
- {
- g_message ("Element factory \"%s\" not found.", factoryname);
- goto error;
- }
-
- if (!gst_bin_add (bin, ret))
- {
- g_warning ("Couldn't add \"%s\" to bin.", factoryname);
- goto error;
- }
-
- /* do not link if src == NULL, just exit here */
- if (src == NULL)
- return ret;
-
- if (!gst_element_link (src, ret))
- {
- g_warning ("Failed to link \"%s\".", factoryname);
- gst_bin_remove (bin, ret);
- goto error;
- }
-
- return ret;
-
-error:
- if (ret != NULL)
- gst_object_unref (ret);
- return NULL;
-}
-
-#ifdef HAVE_GST1
-static GstPadProbeReturn
-empathy_video_src_drop_eos (GstPad *pad,
- GstPadProbeInfo *info,
- gpointer user_data)
-{
- if (GST_EVENT_TYPE (GST_PAD_PROBE_INFO_EVENT (info)) == GST_EVENT_EOS)
- return GST_PAD_PROBE_DROP;
-
- return GST_PAD_PROBE_OK;
-}
-#else
-static gboolean
-empathy_video_src_drop_eos (GstPad *pad, GstEvent *event, gpointer user_data)
-{
- return GST_EVENT_TYPE (event) != GST_EVENT_EOS;
-}
-#endif
-
-static void
-empathy_video_src_init (EmpathyGstVideoSrc *obj)
-{
- EmpathyGstVideoSrcPrivate *priv = EMPATHY_GST_VIDEO_SRC_GET_PRIVATE (obj);
- GstElement *element, *element_back;
- GstPad *ghost, *src;
- GstCaps *caps;
- gchar *str;
-
- /* allocate caps here, so we can update it by optional elements */
-#ifdef HAVE_GST1
- caps = gst_caps_new_simple ("video/x-raw",
-#else
- caps = gst_caps_new_simple ("video/x-raw-yuv",
-#endif
- "width", G_TYPE_INT, 320,
- "height", G_TYPE_INT, 240,
- NULL);
-
- /* allocate any data required by the object here */
- if ((element = empathy_gst_add_to_bin (GST_BIN (obj),
- NULL, "v4l2src")) == NULL)
- g_error ("Couldn't add \"v4l2src\" (gst-plugins-good missing?)");
-
- /* we need to save our source to priv->src */
- priv->src = element;
-
- /* Drop EOS events, so that our sinks don't get confused when we restart the
- * source (triggering an EOS) */
- src = gst_element_get_static_pad (element, "src");
-
-#ifdef HAVE_GST1
- gst_pad_add_probe (src, GST_PAD_PROBE_TYPE_EVENT_DOWNSTREAM,
- empathy_video_src_drop_eos, NULL, NULL);
-#else
- gst_pad_add_event_probe (src, G_CALLBACK (empathy_video_src_drop_eos), NULL);
-#endif
-
- gst_object_unref (src);
-
- /* videorate with the required properties optional as it needs a currently
- * unreleased gst-plugins-base 0.10.36 */
- element_back = element;
- element = empathy_gst_add_to_bin (GST_BIN (obj), element, "videorate");
-
- if (element != NULL && g_object_class_find_property (
- G_OBJECT_GET_CLASS (element), "max-rate") != NULL)
- {
- priv->videorate = element;
- g_object_set (G_OBJECT (element),
- "drop-only", TRUE,
- "average-period", GST_SECOND/2,
- NULL);
- }
- else
- {
- g_message ("videorate missing or doesn't have max-rate property, not"
- "doing dynamic framerate changes (Needs gst-plugins-base >= 0.10.36)");
- /* Refcount owned by the bin */
- gst_bin_remove (GST_BIN (obj), element);
- element = element_back;
- }
-
- gst_caps_set_simple (caps,
- "framerate", GST_TYPE_FRACTION_RANGE, 1, 1, 30, 1,
- NULL);
-
- str = gst_caps_to_string (caps);
- DEBUG ("Current video src caps are : %s", str);
- g_free (str);
-
-#ifdef HAVE_GST1
- if ((element = empathy_gst_add_to_bin (GST_BIN (obj),
- element, "videoconvert")) == NULL)
- g_error ("Failed to add \"videoconvert\" (gst-plugins-base missing?)");
-#else
- if ((element = empathy_gst_add_to_bin (GST_BIN (obj),
- element, "ffmpegcolorspace")) == NULL)
- g_error ("Failed to add \"ffmpegcolorspace\" (gst-plugins-base missing?)");
-#endif
-
- if ((element = empathy_gst_add_to_bin (GST_BIN (obj),
- element, "videoscale")) == NULL)
- g_error ("Failed to add \"videoscale\", (gst-plugins-base missing?)");
-
- if ((element = empathy_gst_add_to_bin (GST_BIN (obj),
- element, "capsfilter")) == NULL)
- g_error (
- "Failed to add \"capsfilter\" (gstreamer core elements missing?)");
-
- priv->capsfilter = element;
- g_object_set (G_OBJECT (element), "caps", caps, NULL);
-
-
- /* optionally add postproc_tmpnoise to improve the performance of encoders */
- element_back = element;
- if ((element = empathy_gst_add_to_bin (GST_BIN (obj),
- element, "postproc_tmpnoise")) == NULL)
- {
- g_message ("Failed to add \"postproc_tmpnoise\" (gst-ffmpeg missing?)");
- element = element_back;
- }
-
- src = gst_element_get_static_pad (element, "src");
- g_assert (src != NULL);
-
- ghost = gst_ghost_pad_new ("src", src);
- if (ghost == NULL)
- g_error ("Unable to create ghost pad for the videosrc");
-
- if (!gst_element_add_pad (GST_ELEMENT (obj), ghost))
- g_error ("pad with the same name already existed or "
- "the pad already had another parent.");
-
- gst_object_unref (G_OBJECT (src));
-}
-
-static void empathy_video_src_dispose (GObject *object);
-static void empathy_video_src_finalize (GObject *object);
-
-static void
-empathy_video_src_class_init (EmpathyGstVideoSrcClass *empathy_video_src_class)
-{
- GObjectClass *object_class = G_OBJECT_CLASS (empathy_video_src_class);
-
- g_type_class_add_private (empathy_video_src_class,
- sizeof (EmpathyGstVideoSrcPrivate));
-
- object_class->dispose = empathy_video_src_dispose;
- object_class->finalize = empathy_video_src_finalize;
-}
-
-void
-empathy_video_src_dispose (GObject *object)
-{
- EmpathyGstVideoSrc *self = EMPATHY_GST_VIDEO_SRC (object);
- EmpathyGstVideoSrcPrivate *priv = EMPATHY_GST_VIDEO_SRC_GET_PRIVATE (self);
-
- if (priv->dispose_has_run)
- return;
-
- priv->dispose_has_run = TRUE;
-
- /* release any references held by the object here */
-
- if (G_OBJECT_CLASS (empathy_video_src_parent_class)->dispose)
- G_OBJECT_CLASS (empathy_video_src_parent_class)->dispose (object);
-}
-
-void
-empathy_video_src_finalize (GObject *object)
-{
- //EmpathyGstVideoSrc *self = EMPATHY_GST_VIDEO_SRC (object);
- //EmpathyGstVideoSrcPrivate *priv = EMPATHY_GST_VIDEO_SRC_GET_PRIVATE (self);
-
- /* free any data held directly by the object here */
-
- G_OBJECT_CLASS (empathy_video_src_parent_class)->finalize (object);
-}
-
-GstElement *
-empathy_video_src_new (void)
-{
- static gboolean registered = FALSE;
-
- if (!registered) {
- if (!gst_element_register (NULL, "empathyvideosrc",
- GST_RANK_NONE, EMPATHY_TYPE_GST_VIDEO_SRC))
- return NULL;
- registered = TRUE;
- }
- return gst_element_factory_make ("empathyvideosrc", NULL);
-}
-
-static GstColorBalance *
-dup_color_balance (GstElement *src)
-{
- GstElement *color;
-
- /* Find something supporting GstColorBalance */
- color = gst_bin_get_by_interface (GST_BIN (src), GST_TYPE_COLOR_BALANCE);
-
- if (color == NULL)
- return NULL;
-
- /* colorbalance is wrapped by GstImplementsInterface, we
- * need to check if it is actually supported for this instance
- * in its current state before trying to use it */
- if (!GST_IS_COLOR_BALANCE (color))
- {
- g_object_unref (color);
- return NULL;
- }
-
- return GST_COLOR_BALANCE (color);
-}
-
-void
-empathy_video_src_set_channel (GstElement *src,
- EmpathyGstVideoSrcChannel channel, guint percent)
-{
- GstColorBalance *balance;
- const GList *channels;
- GList *l;
-
- balance = dup_color_balance (src);
- if (balance == NULL)
- return;
-
- channels = gst_color_balance_list_channels (balance);
-
- for (l = (GList *) channels; l != NULL; l = g_list_next (l))
- {
- GstColorBalanceChannel *c = GST_COLOR_BALANCE_CHANNEL (l->data);
-
- if (g_ascii_strcasecmp (c->label, channel_names[channel]) == 0)
- {
- gst_color_balance_set_value (balance, c,
- ((c->max_value - c->min_value) * percent)/100
- + c->min_value);
- break;
- }
- }
-
- g_object_unref (balance);
-}
-
-guint
-empathy_video_src_get_channel (GstElement *src,
- EmpathyGstVideoSrcChannel channel)
-{
- GstColorBalance *balance;
- const GList *channels;
- GList *l;
- guint percent = 0;
-
- balance = dup_color_balance (src);
- if (balance == NULL)
- return percent;
-
- channels = gst_color_balance_list_channels (balance);
-
- for (l = (GList *) channels; l != NULL; l = g_list_next (l))
- {
- GstColorBalanceChannel *c = GST_COLOR_BALANCE_CHANNEL (l->data);
-
- if (g_ascii_strcasecmp (c->label, channel_names[channel]) == 0)
- {
- percent =
- ((gst_color_balance_get_value (balance, c)
- - c->min_value) * 100) /
- (c->max_value - c->min_value);
-
- break;
- }
- }
-
- g_object_unref (balance);
-
- return percent;
-}
-
-
-guint
-empathy_video_src_get_supported_channels (GstElement *src)
-{
- GstColorBalance *balance;
- const GList *channels;
- GList *l;
- guint result = 0;
-
- balance = dup_color_balance (src);
- if (balance == NULL)
- goto out;
-
- channels = gst_color_balance_list_channels (balance);
-
- for (l = (GList *) channels; l != NULL; l = g_list_next (l))
- {
- GstColorBalanceChannel *channel = GST_COLOR_BALANCE_CHANNEL (l->data);
- int i;
-
- for (i = 0; i < NR_EMPATHY_GST_VIDEO_SRC_CHANNELS; i++)
- {
- if (g_ascii_strcasecmp (channel->label, channel_names[i]) == 0)
- {
- result |= (1 << i);
- break;
- }
- }
- }
-
- g_object_unref (balance);
-
-out:
- return result;
-}
-
-void
-empathy_video_src_change_device (EmpathyGstVideoSrc *self,
- const gchar *device)
-{
- EmpathyGstVideoSrcPrivate *priv = EMPATHY_GST_VIDEO_SRC_GET_PRIVATE (self);
- GstState state;
-
- gst_element_get_state (priv->src, &state, NULL, 0);
-
- g_return_if_fail (state == GST_STATE_NULL);
-
- g_object_set (priv->src, "device", device, NULL);
-}
-
-gchar *
-empathy_video_src_dup_device (EmpathyGstVideoSrc *self)
-{
- EmpathyGstVideoSrcPrivate *priv = EMPATHY_GST_VIDEO_SRC_GET_PRIVATE (self);
- gchar *device;
-
- g_object_get (priv->src, "device", &device, NULL);
-
- return device;
-}
-
-void
-empathy_video_src_set_framerate (GstElement *src,
- guint framerate)
-{
- EmpathyGstVideoSrcPrivate *priv = EMPATHY_GST_VIDEO_SRC_GET_PRIVATE (src);
-
- if (priv->videorate)
- {
- g_object_set (G_OBJECT (priv->videorate), "max-rate", framerate, NULL);
- }
-}
-
-void
-empathy_video_src_set_resolution (GstElement *src,
- guint width,
- guint height)
-{
- EmpathyGstVideoSrcPrivate *priv = EMPATHY_GST_VIDEO_SRC_GET_PRIVATE (src);
- GstCaps *caps;
- GstPad *srcpad, *peer;
-
- g_return_if_fail (priv->capsfilter != NULL);
-
- gst_element_set_locked_state (priv->src, TRUE);
- gst_element_set_state (priv->src, GST_STATE_NULL);
-
- srcpad = gst_element_get_static_pad (priv->src, "src");
- peer = gst_pad_get_peer (srcpad);
-
- /* Keep a ref as removing it from the bin will loose our reference */
- gst_object_ref (priv->src);
- gst_bin_remove (GST_BIN (src), priv->src);
-
- g_object_get (priv->capsfilter, "caps", &caps, NULL);
- caps = gst_caps_make_writable (caps);
-
- gst_caps_set_simple (caps,
- "width", G_TYPE_INT, width,
- "height", G_TYPE_INT, height,
- NULL);
-
- g_object_set (priv->capsfilter, "caps", caps, NULL);
- gst_caps_unref (caps);
-
- gst_bin_add (GST_BIN (src), priv->src);
- /* We as the bin own the source again, so drop the temporary ref */
- gst_object_unref (priv->src);
-
- gst_pad_link (srcpad, peer);
-
- gst_element_set_locked_state (priv->src, FALSE);
- gst_element_sync_state_with_parent (priv->src);
-
- gst_object_unref (srcpad);
- gst_object_unref (peer);
-}
diff --git a/src/empathy-video-src.h b/src/empathy-video-src.h
deleted file mode 100644
index 60127ba2..00000000
--- a/src/empathy-video-src.h
+++ /dev/null
@@ -1,95 +0,0 @@
-/*
- * empathy-gst-video-src.h - Header for EmpathyGstVideoSrc
- * Copyright (C) 2008 Collabora Ltd.
- * @author Sjoerd Simons <sjoerd.simons@collabora.co.uk>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-#ifndef __EMPATHY_GST_VIDEO_SRC_H__
-#define __EMPATHY_GST_VIDEO_SRC_H__
-
-#include <gst/gst.h>
-
-G_BEGIN_DECLS
-
-typedef struct _EmpathyGstVideoSrc EmpathyGstVideoSrc;
-typedef struct _EmpathyGstVideoSrcClass EmpathyGstVideoSrcClass;
-
-typedef enum {
- EMPATHY_GST_VIDEO_SRC_CHANNEL_CONTRAST = 0,
- EMPATHY_GST_VIDEO_SRC_CHANNEL_BRIGHTNESS = 1,
- EMPATHY_GST_VIDEO_SRC_CHANNEL_GAMMA = 2,
- NR_EMPATHY_GST_VIDEO_SRC_CHANNELS
-} EmpathyGstVideoSrcChannel;
-
-#define EMPATHY_GST_VIDEO_SRC_SUPPORTS_CONTRAST \
- (1 << EMPATHY_GST_VIDEO_SRC_CHANNEL_CONTRAST)
-#define EMPATHY_GST_VIDEO_SRC_SUPPORTS_BRIGHTNESS \
- (1 << EMPATHY_GST_VIDEO_SRC_CHANNEL_BRIGHTNESS)
-#define EMPATHY_GST_VIDEO_SRC_SUPPORTS_GAMMA \
- (1 << EMPATHY_GST_VIDEO_SRC_CHANNEL_GAMMA)
-
-struct _EmpathyGstVideoSrcClass {
- GstBinClass parent_class;
-};
-
-struct _EmpathyGstVideoSrc {
- GstBin parent;
-};
-
-GType empathy_video_src_get_type (void);
-
-/* TYPE MACROS */
-#define EMPATHY_TYPE_GST_VIDEO_SRC \
- (empathy_video_src_get_type ())
-#define EMPATHY_GST_VIDEO_SRC(obj) \
- (G_TYPE_CHECK_INSTANCE_CAST((obj), EMPATHY_TYPE_GST_VIDEO_SRC, \
- EmpathyGstVideoSrc))
-#define EMPATHY_GST_VIDEO_SRC_CLASS(klass) \
- (G_TYPE_CHECK_CLASS_CAST((klass), EMPATHY_TYPE_GST_VIDEO_SRC, \
- EmpathyGstVideoSrcClass))
-#define EMPATHY_IS_GST_VIDEO_SRC(obj) \
- (G_TYPE_CHECK_INSTANCE_TYPE((obj), EMPATHY_TYPE_GST_VIDEO_SRC))
-#define EMPATHY_IS_GST_VIDEO_SRC_CLASS(klass) \
- (G_TYPE_CHECK_CLASS_TYPE((klass), EMPATHY_TYPE_GST_VIDEO_SRC))
-#define EMPATHY_GST_VIDEO_SRC_GET_CLASS(obj) \
- (G_TYPE_INSTANCE_GET_CLASS ((obj), EMPATHY_TYPE_GST_VIDEO_SRC, \
- EmpathyGstVideoSrcClass))
-
-GstElement *empathy_video_src_new (void);
-
-guint
-empathy_video_src_get_supported_channels (GstElement *src);
-
-void empathy_video_src_set_channel (GstElement *src,
- EmpathyGstVideoSrcChannel channel, guint percent);
-
-guint empathy_video_src_get_channel (GstElement *src,
- EmpathyGstVideoSrcChannel channel);
-
-void empathy_video_src_change_device (EmpathyGstVideoSrc *self,
- const gchar *device);
-gchar * empathy_video_src_dup_device (EmpathyGstVideoSrc *self);
-
-void empathy_video_src_set_framerate (GstElement *src,
- guint framerate);
-
-void empathy_video_src_set_resolution (GstElement *src,
- guint width, guint height);
-
-G_END_DECLS
-
-#endif /* #ifndef __EMPATHY_GST_VIDEO_SRC_H__*/
diff --git a/src/empathy.1 b/src/empathy.1
deleted file mode 100644
index b8b8d632..00000000
--- a/src/empathy.1
+++ /dev/null
@@ -1,46 +0,0 @@
-.TH EMPATHY "1" "February 2010" "Telepathy project" "User Commands"
-.SH NAME
-empathy \- GNOME multi-protocol chat and call client
-.SH SYNOPSIS
-empathy
-.SH DESCRIPTION
-GNOME multi-protocol chat and call client
-Instant messaging program supporting text, voice, video, file transfers
-and inter-application communication over many different protocols,
-including: AIM, MSN, Google Talk (Jabber/XMPP), Facebook, Yahoo!, Salut,
-Gadu-Gadu, Groupwise, ICQ and QQ.
-.PP
-The main user interface consists of a contact list window and an icon in the
-notification area.
-.SH OPTIONS
-.TP
-.BR \-n ,\ \-\-no\-connect
-Don't connect on startup
-.TP
-.BR \-h ,\ \-\-start\-hidden
-Don't display the contact list or any other dialogs on startup
-.TP
-.BR \-v ,\ \-\-version
-Show version
-.SH ENVIRONMENT
-.TP
-.BI EMPATHY_LOGFILE= filename
-If set, debug output will go to the given file rather than to stderr.
-.TP
-.BI EMPATHY_DEBUG= type
-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 AUTHOR
-This manual page was written by
-.MT bigon@debian.org
-Laurent Bigonville
-.ME ,
-for the Debian GNU/Linux system (but may be used by others).
-.SH SEE ALSO
-.BR empathy-accounts (1),
-.UR http://telepathy.freedesktop.org/
-The Telepathy project
-.UE ,
-.UR http://live.gnome.org/Empathy
-The Empathy project
-.UE .
diff --git a/src/empathy.c b/src/empathy.c
deleted file mode 100644
index 4a36da61..00000000
--- a/src/empathy.c
+++ /dev/null
@@ -1,851 +0,0 @@
-/*
- * Copyright (C) 2007-2009 Collabora Ltd.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301 USA
- *
- * Authors: Xavier Claessens <xclaesse@gmail.com>
- */
-
-#include "config.h"
-
-#include <glib/gstdio.h>
-#include <glib/gi18n.h>
-#include <libnotify/notify.h>
-#include <tp-account-widgets/tpaw-utils.h>
-
-#ifdef HAVE_LIBCHAMPLAIN
-#include <clutter-gtk/clutter-gtk.h>
-#endif
-
-#include "empathy-accounts-common.h"
-#include "empathy-accounts-dialog.h"
-#include "empathy-chatroom-manager.h"
-#include "empathy-client-factory.h"
-#include "empathy-connection-aggregator.h"
-#include "empathy-ft-factory.h"
-#include "empathy-ft-manager.h"
-#include "empathy-gsettings.h"
-#include "empathy-location-manager.h"
-#include "empathy-notifications-approver.h"
-#include "empathy-presence-manager.h"
-#include "empathy-request-util.h"
-#include "empathy-roster-window.h"
-#include "empathy-status-icon.h"
-#include "empathy-ui-utils.h"
-#include "empathy-utils.h"
-
-#define DEBUG_FLAG EMPATHY_DEBUG_OTHER
-#include "empathy-debug.h"
-
-#define EMPATHY_DBUS_NAME "org.gnome.Empathy"
-
-#define EMPATHY_TYPE_APP (empathy_app_get_type ())
-#define EMPATHY_APP(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), EMPATHY_TYPE_APP, EmpathyApp))
-#define EMPATHY_APP_CLASS(obj) (G_TYPE_CHECK_CLASS_CAST ((obj), EMPATHY_TYPE_APP, EmpathyAppClass))
-#define EMPATHY_IS_EMPATHY_APP(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), EMPATHY_TYPE_APP))
-#define EMPATHY_IS_EMPATHY_APP_CLASS(obj) (G_TYPE_CHECK_CLASS_TYPE ((obj), EMPATHY_TYPE_APP))
-#define EMPATHY_APP_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), EMPATHY_TYPE_APP, EmpathyAppClass))
-
-typedef struct _EmpathyApp EmpathyApp;
-typedef struct _EmpathyAppClass EmpathyAppClass;
-
-enum
-{
- PROP_NO_CONNECT = 1,
- PROP_START_HIDDEN
-};
-
-GType empathy_app_get_type (void);
-
-struct _EmpathyAppClass
-{
- GtkApplicationClass parent_class;
-};
-
-struct _EmpathyApp
-{
- GtkApplication parent;
-
- /* Properties */
- gboolean no_connect;
- gboolean start_hidden;
- gboolean show_preferences;
- gchar *preferences_tab;
-
- gboolean activated;
-
- GtkWidget *window;
- EmpathyStatusIcon *icon;
- TpAccountManager *account_manager;
- TplLogManager *log_manager;
- EmpathyChatroomManager *chatroom_manager;
- EmpathyFTFactory *ft_factory;
- EmpathyPresenceManager *presence_mgr;
- GSettings *gsettings;
- EmpathyNotificationsApprover *notifications_approver;
- EmpathyConnectionAggregator *conn_aggregator;
-#ifdef HAVE_GEOCLUE
- EmpathyLocationManager *location_manager;
-#endif
-#ifdef ENABLE_DEBUG
- TpDebugSender *debug_sender;
-#endif
-
- gboolean shell_running;
-};
-
-
-G_DEFINE_TYPE(EmpathyApp, empathy_app, GTK_TYPE_APPLICATION)
-
-static void
-empathy_app_dispose (GObject *object)
-{
- EmpathyApp *self = EMPATHY_APP (object);
- void (*dispose) (GObject *) =
- G_OBJECT_CLASS (empathy_app_parent_class)->dispose;
-
- /* Only set our presence to offline when exiting if GNOME Shell is not
- * running */
- if (self->presence_mgr != NULL &&
- !self->shell_running)
- {
- empathy_presence_manager_set_state (self->presence_mgr,
- TP_CONNECTION_PRESENCE_TYPE_OFFLINE);
- }
-
-#ifdef ENABLE_DEBUG
- tp_clear_object (&self->debug_sender);
-#endif
-
- tp_clear_object (&self->presence_mgr);
- tp_clear_object (&self->icon);
- tp_clear_object (&self->account_manager);
- tp_clear_object (&self->log_manager);
- tp_clear_object (&self->chatroom_manager);
-#ifdef HAVE_GEOCLUE
- tp_clear_object (&self->location_manager);
-#endif
- tp_clear_object (&self->ft_factory);
- tp_clear_object (&self->gsettings);
- tp_clear_object (&self->notifications_approver);
- tp_clear_object (&self->conn_aggregator);
-
- if (dispose != NULL)
- dispose (object);
-}
-
-static void
-empathy_app_finalize (GObject *object)
-{
- EmpathyApp *self = EMPATHY_APP (object);
- void (*finalize) (GObject *) =
- G_OBJECT_CLASS (empathy_app_parent_class)->finalize;
-
- g_free (self->preferences_tab);
-
- if (finalize != NULL)
- finalize (object);
-}
-
-static void account_manager_ready_cb (GObject *source_object,
- GAsyncResult *result,
- gpointer user_data);
-
-static void
-empathy_app_set_property (GObject *object,
- guint prop_id,
- const GValue *value,
- GParamSpec *pspec)
-{
- EmpathyApp *self = EMPATHY_APP (object);
-
- switch (prop_id)
- {
- case PROP_NO_CONNECT:
- self->no_connect = g_value_get_boolean (value);
- break;
- case PROP_START_HIDDEN:
- self->start_hidden = g_value_get_boolean (value);
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
- break;
- }
-}
-
-static void
-new_incoming_transfer_cb (EmpathyFTFactory *factory,
- EmpathyFTHandler *handler,
- GError *error,
- gpointer user_data)
-{
- if (error)
- empathy_ft_manager_display_error (handler, error);
- else
- empathy_receive_file_with_file_chooser (handler);
-}
-
-static void
-new_ft_handler_cb (EmpathyFTFactory *factory,
- EmpathyFTHandler *handler,
- GError *error,
- gpointer user_data)
-{
- if (error)
- empathy_ft_manager_display_error (handler, error);
- else
- empathy_ft_manager_add_handler (handler);
-
- g_object_unref (handler);
-}
-
-static void
-empathy_presence_manager_set_auto_away_cb (GSettings *gsettings,
- const gchar *key,
- gpointer user_data)
-{
- EmpathyPresenceManager *presence_mgr = user_data;
-
- empathy_presence_manager_set_auto_away (presence_mgr,
- g_settings_get_boolean (gsettings, key));
-}
-
-#define GNOME_SHELL_BUS_NAME "org.gnome.Shell"
-
-static void
-list_names_cb (TpDBusDaemon *bus_daemon,
- const gchar * const *names,
- const GError *error,
- gpointer user_data,
- GObject *weak_object)
-{
- EmpathyApp *self = (EmpathyApp *) weak_object;
- guint i;
-
- if (error != NULL)
- goto out;
-
- for (i = 0; names[i] != NULL; i++)
- {
- if (!tp_strdiff (names[i], GNOME_SHELL_BUS_NAME))
- {
- self->shell_running = TRUE;
- break;
- }
- }
-
-out:
- if (self->shell_running)
- {
- DEBUG ("GNOME Shell is running, don't create status icon");
-
- /* Rely on GNOME Shell to watch session state */
- empathy_presence_manager_set_auto_away (self->presence_mgr, FALSE);
-
- empathy_roster_window_set_shell_running (
- EMPATHY_ROSTER_WINDOW (self->window), TRUE);
- }
- else
- {
- gboolean autoaway;
-
- self->icon = empathy_status_icon_new (GTK_WINDOW (self->window),
- self->start_hidden);
-
- /* Allow Empathy to watch session state */
- autoaway = g_settings_get_boolean (self->gsettings,
- EMPATHY_PREFS_AUTOAWAY);
-
- g_signal_connect (self->gsettings,
- "changed::" EMPATHY_PREFS_AUTOAWAY,
- G_CALLBACK (empathy_presence_manager_set_auto_away_cb),
- self->presence_mgr);
-
- empathy_presence_manager_set_auto_away (self->presence_mgr, autoaway);
- }
-}
-
-static void
-empathy_app_activate (GApplication *app)
-{
- EmpathyApp *self = (EmpathyApp *) app;
-
- if (!self->activated)
- {
- GError *error = NULL;
- TpDBusDaemon *dbus;
-
- empathy_gtk_init ();
-
- /* Create the FT factory */
- self->ft_factory = empathy_ft_factory_dup_singleton ();
- g_signal_connect (self->ft_factory, "new-ft-handler",
- G_CALLBACK (new_ft_handler_cb), NULL);
- g_signal_connect (self->ft_factory, "new-incoming-transfer",
- G_CALLBACK (new_incoming_transfer_cb), NULL);
-
- if (!empathy_ft_factory_register (self->ft_factory, &error))
- {
- g_warning ("Failed to register FileTransfer handler: %s",
- error->message);
- g_error_free (error);
- }
-
- self->activated = TRUE;
-
- /* Setting up UI */
- self->window = empathy_roster_window_new (GTK_APPLICATION (app));
- gtk_application_set_app_menu (GTK_APPLICATION (self),
- empathy_roster_window_get_menu_model (
- EMPATHY_ROSTER_WINDOW (self->window)));
-
- gtk_application_add_window (GTK_APPLICATION (app),
- GTK_WINDOW (self->window));
- gtk_application_add_accelerator (GTK_APPLICATION (app),
- "<Primary>h",
- "win." EMPATHY_PREFS_UI_SHOW_OFFLINE,
- NULL);
-
- /* check if Shell is running */
- dbus = tp_dbus_daemon_dup (&error);
- g_assert_no_error (error);
-
- tp_dbus_daemon_list_names (dbus, -1, list_names_cb,
- self, NULL, G_OBJECT (self));
-
- g_object_unref (dbus);
-
- self->notifications_approver =
- empathy_notifications_approver_dup_singleton ();
- }
-
- if (self->show_preferences)
- {
- empathy_roster_window_show_preferences (
- EMPATHY_ROSTER_WINDOW (self->window),
- tp_str_empty (self->preferences_tab) ? NULL : self->preferences_tab);
-
- self->show_preferences = FALSE;
- }
- else
- {
- if (!self->start_hidden)
- tpaw_window_present (GTK_WINDOW (self->window));
- }
-
- /* Display the accounts dialog if needed */
- tp_proxy_prepare_async (self->account_manager, NULL,
- account_manager_ready_cb, self);
-}
-
-static gboolean
-preferences_cb (const char *option_name,
- const char *value,
- gpointer data,
- GError **error)
-{
- EmpathyApp *self = data;
-
- self->show_preferences = TRUE;
-
- g_free (self->preferences_tab);
- self->preferences_tab = g_strdup (value);
-
- return TRUE;
-}
-
-static gboolean
-show_version_cb (const char *option_name,
- const char *value,
- gpointer data,
- GError **error);
-
-static void
-open_preference_action_cb (GAction *action,
- GVariant *parameter,
- gpointer data)
-{
- EmpathyApp *self = EMPATHY_APP (data);
-
- self->show_preferences = TRUE;
-
- g_free (self->preferences_tab);
- self->preferences_tab = g_variant_dup_string (parameter, NULL);
-}
-
-static gboolean
-empathy_app_local_command_line (GApplication *app,
- gchar ***arguments,
- gint *exit_status)
-{
- EmpathyApp *self = (EmpathyApp *) app;
- GSimpleAction *action;
- gint i;
- gchar **argv;
- gint argc = 0;
- gboolean retval = TRUE;
- GError *error = NULL;
- gboolean no_connect = FALSE, start_hidden = FALSE;
-
- GOptionContext *optcontext;
- GOptionGroup *group;
- GOptionEntry options[] = {
- { "no-connect", 'n',
- 0, G_OPTION_ARG_NONE, &no_connect,
- N_("Don't connect on startup"),
- NULL },
- { "start-hidden", 'h',
- 0, G_OPTION_ARG_NONE, &start_hidden,
- N_("Don't display the contact list or any other dialogs on startup"),
- NULL },
- { "show-preferences", 'p',
- G_OPTION_FLAG_OPTIONAL_ARG, G_OPTION_ARG_CALLBACK, &preferences_cb,
- NULL, NULL },
- { "version", 'v',
- G_OPTION_FLAG_NO_ARG, G_OPTION_ARG_CALLBACK, show_version_cb,
- NULL, NULL },
- { NULL }
- };
-
- if (!g_application_register (app, NULL, &error))
- {
- g_warning("Impossible to register empathy: %s", error->message);
- g_clear_error (&error);
- *exit_status = EXIT_FAILURE;
- return retval;
- }
-
- action = g_simple_action_new ("open-preferences", G_VARIANT_TYPE_STRING);
- g_signal_connect (action, "activate", G_CALLBACK (open_preference_action_cb), app);
- g_action_map_add_action (G_ACTION_MAP (app), G_ACTION (action));
- g_object_unref (action);
-
- /* We create a group so that GOptionArgFuncs get the user data */
- group = g_option_group_new ("empathy", NULL, NULL, app, NULL);
- g_option_group_set_translation_domain (group, GETTEXT_PACKAGE);
- g_option_group_add_entries (group, options);
-
- optcontext = g_option_context_new (N_("- Empathy IM Client"));
- g_option_context_add_group (optcontext, gtk_get_option_group (FALSE));
- g_option_context_set_main_group (optcontext, group);
- g_option_context_set_translation_domain (optcontext, GETTEXT_PACKAGE);
-
- argc = g_strv_length (*arguments);
-
- /* We dup the args because g_option_context_parse() sets things to NULL,
- * but we want to parse all the command line to the primary instance
- * if necessary. */
- argv = g_new (gchar*, argc + 1);
- for (i = 0; i <= argc; i++)
- argv[i] = (*arguments)[i];
-
- if (!g_option_context_parse (optcontext, &argc, &argv, &error))
- {
- g_print ("%s\nRun '%s --help' to see a full list of available command "
- "line options.\n",
- error->message, argv[0]);
- g_warning ("Error in empathy init: %s", error->message);
- g_clear_error (&error);
-
- *exit_status = EXIT_FAILURE;
- }
- else
- {
- self->no_connect = no_connect;
- self->start_hidden = start_hidden;
-
- if (self->show_preferences)
- {
- GVariant *parameter;
- parameter = g_variant_new_string (self->preferences_tab ? self->preferences_tab : "");
- g_action_group_activate_action (G_ACTION_GROUP (app), "open-preferences", parameter);
- }
-
- g_application_activate (app);
- }
-
- g_free (argv);
- g_option_context_free (optcontext);
-
- return retval;
-}
-
-static void empathy_app_constructed (GObject *object);
-
-static void
-empathy_app_class_init (EmpathyAppClass *klass)
-{
- GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
- GApplicationClass *g_app_class = G_APPLICATION_CLASS (klass);
- GParamSpec *spec;
-
- gobject_class->set_property = empathy_app_set_property;
- gobject_class->constructed = empathy_app_constructed;
- gobject_class->dispose = empathy_app_dispose;
- gobject_class->finalize = empathy_app_finalize;
-
- g_app_class->local_command_line = empathy_app_local_command_line;
- g_app_class->activate = empathy_app_activate;
-
- spec = g_param_spec_boolean ("no-connect", "no connect",
- "Don't connect on startup",
- FALSE,
- G_PARAM_STATIC_STRINGS | G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY);
- g_object_class_install_property (gobject_class, PROP_NO_CONNECT, spec);
-
- spec = g_param_spec_boolean ("start-hidden", "start hidden",
- "Don't display the contact list or any other dialogs on startup",
- FALSE,
- G_PARAM_STATIC_STRINGS | G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY);
- g_object_class_install_property (gobject_class, PROP_START_HIDDEN, spec);
-}
-
-static void
-empathy_app_init (EmpathyApp *self)
-{
-}
-
-static void
-migrate_config_to_xdg_dir (void)
-{
- gchar *xdg_dir, *old_dir, *xdg_filename, *old_filename;
- int i;
- GFile *xdg_file, *old_file;
- static const gchar* filenames[] = {
- "geometry.ini",
- "irc-networks.xml",
- "chatrooms.xml",
- "contact-groups.xml",
- "status-presets.xml",
- "accels.txt",
- NULL
- };
-
- xdg_dir = g_build_filename (g_get_user_config_dir (), PACKAGE_NAME, NULL);
- if (g_file_test (xdg_dir, G_FILE_TEST_EXISTS | G_FILE_TEST_IS_DIR))
- {
- /* xdg config dir already exists */
- g_free (xdg_dir);
- return;
- }
-
- old_dir = g_build_filename (g_get_home_dir (), ".gnome2",
- PACKAGE_NAME, NULL);
- if (!g_file_test (old_dir, G_FILE_TEST_EXISTS | G_FILE_TEST_IS_DIR))
- {
- /* old config dir didn't exist */
- g_free (xdg_dir);
- g_free (old_dir);
- return;
- }
-
- if (g_mkdir_with_parents (xdg_dir, (S_IRUSR | S_IWUSR | S_IXUSR)) == -1)
- {
- DEBUG ("Failed to create configuration directory; aborting migration");
- g_free (xdg_dir);
- g_free (old_dir);
- return;
- }
-
- for (i = 0; filenames[i]; i++)
- {
- old_filename = g_build_filename (old_dir, filenames[i], NULL);
- if (!g_file_test (old_filename, G_FILE_TEST_EXISTS))
- {
- g_free (old_filename);
- continue;
- }
- xdg_filename = g_build_filename (xdg_dir, filenames[i], NULL);
- old_file = g_file_new_for_path (old_filename);
- xdg_file = g_file_new_for_path (xdg_filename);
-
- if (!g_file_move (old_file, xdg_file, G_FILE_COPY_NONE,
- NULL, NULL, NULL, NULL))
- DEBUG ("Failed to migrate %s", filenames[i]);
-
- g_free (old_filename);
- g_free (xdg_filename);
- g_object_unref (old_file);
- g_object_unref (xdg_file);
- }
-
- g_free (xdg_dir);
- g_free (old_dir);
-}
-
-static void
-show_accounts_ui (EmpathyApp *self,
- GdkScreen *screen,
- gboolean if_needed)
-{
- empathy_accounts_dialog_show_application (screen,
- NULL, if_needed, self->start_hidden);
-}
-
-static gboolean
-show_version_cb (const char *option_name,
- const char *value,
- gpointer data,
- GError **error)
-{
- g_print ("%s\n", PACKAGE_STRING);
-
- exit (EXIT_SUCCESS);
-}
-
-static void
-account_manager_ready_cb (GObject *source_object,
- GAsyncResult *result,
- gpointer user_data)
-{
- TpAccountManager *manager = TP_ACCOUNT_MANAGER (source_object);
- EmpathyApp *self = user_data;
- GError *error = NULL;
- TpConnectionPresenceType presence;
-
- if (!tp_proxy_prepare_finish (manager, result, &error))
- {
- GtkWidget *dialog;
-
- DEBUG ("Failed to prepare account manager: %s", error->message);
-
- dialog = gtk_message_dialog_new (NULL, GTK_DIALOG_MODAL,
- GTK_MESSAGE_ERROR, GTK_BUTTONS_OK,
- _("Error contacting the Account Manager"));
- gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (dialog),
- _("There was an error while trying to connect to the Telepathy "
- "Account Manager. The error was:\n\n%s"),
- error->message);
-
- gtk_dialog_run (GTK_DIALOG (dialog));
- gtk_widget_destroy (dialog);
-
- g_error_free (error);
- return;
- }
-
- /* Autoconnect */
- presence = tp_account_manager_get_most_available_presence (manager, NULL,
- NULL);
-
- if (g_settings_get_boolean (self->gsettings, EMPATHY_PREFS_AUTOCONNECT) &&
- !self->no_connect &&
- tp_connection_presence_type_cmp_availability
- (presence, TP_CONNECTION_PRESENCE_TYPE_OFFLINE)
- <= 0)
- /* if current state is Offline, then put it online */
- empathy_presence_manager_set_state (self->presence_mgr,
- TP_CONNECTION_PRESENCE_TYPE_AVAILABLE);
-
- /* Pop up the accounts dialog if we don't have any account */
- if (!empathy_accounts_has_accounts (manager))
- show_accounts_ui (self, gdk_screen_get_default (), TRUE);
-}
-
-static void
-account_join_chatrooms (TpAccount *account,
- EmpathyChatroomManager *chatroom_manager)
-{
- TpConnection *conn;
- GList *chatrooms, *p;
-
- /* Wait if we are not connected or the TpConnection is not prepared yet */
- conn = tp_account_get_connection (account);
- if (conn == NULL)
- return;
-
- chatrooms = empathy_chatroom_manager_get_chatrooms (
- chatroom_manager, account);
-
- for (p = chatrooms; p != NULL; p = p->next)
- {
- EmpathyChatroom *room = EMPATHY_CHATROOM (p->data);
-
- if (!empathy_chatroom_get_auto_connect (room))
- continue;
-
- empathy_join_muc (account, empathy_chatroom_get_room (room),
- TP_USER_ACTION_TIME_NOT_USER_ACTION);
- }
- g_list_free (chatrooms);
-}
-
-static void
-account_connection_changed_cb (TpAccount *account,
- GParamSpec *spec,
- EmpathyChatroomManager *manager)
-{
- account_join_chatrooms (account, manager);
-}
-
-static void
-account_manager_chatroom_ready_cb (GObject *source_object,
- GAsyncResult *result,
- gpointer user_data)
-{
- TpAccountManager *account_manager = TP_ACCOUNT_MANAGER (source_object);
- EmpathyChatroomManager *chatroom_manager = user_data;
- GList *accounts, *l;
- GError *error = NULL;
-
- if (!tp_proxy_prepare_finish (account_manager, result, &error))
- {
- DEBUG ("Failed to prepare account manager: %s", error->message);
- g_error_free (error);
- return;
- }
-
- accounts = tp_account_manager_dup_valid_accounts (account_manager);
-
- for (l = accounts; l != NULL; l = g_list_next (l))
- {
- TpAccount *account = TP_ACCOUNT (l->data);
-
- /* Try to join all rooms if we're connected */
- account_join_chatrooms (account, chatroom_manager);
-
- /* And/or join them on (re)connection */
- tp_g_signal_connect_object (account, "notify::connection",
- G_CALLBACK (account_connection_changed_cb), chatroom_manager, 0);
- }
- g_list_free_full (accounts, g_object_unref);
-}
-
-static void
-chatroom_manager_ready_cb (EmpathyChatroomManager *chatroom_manager,
- GParamSpec *pspec,
- gpointer user_data)
-{
- TpAccountManager *account_manager = user_data;
-
- tp_proxy_prepare_async (account_manager, NULL,
- account_manager_chatroom_ready_cb, chatroom_manager);
-}
-
-static void
-empathy_app_constructed (GObject *object)
-{
- EmpathyApp *self = (EmpathyApp *) object;
- gboolean chatroom_manager_ready;
-
- textdomain (GETTEXT_PACKAGE);
- g_set_application_name (_(PACKAGE_NAME));
-
- gtk_window_set_default_icon_name ("empathy");
-
-#ifdef ENABLE_DEBUG
- /* Set up debug sender */
- self->debug_sender = tp_debug_sender_dup ();
- g_log_set_default_handler (tp_debug_sender_log_handler, G_LOG_DOMAIN);
-#endif
-
- notify_init (_(PACKAGE_NAME));
-
- /* Setting up Idle */
- self->presence_mgr = empathy_presence_manager_dup_singleton ();
-
- self->gsettings = g_settings_new (EMPATHY_PREFS_SCHEMA);
-
- /* account management */
- self->account_manager = tp_account_manager_dup ();
- tp_proxy_prepare_async (self->account_manager, NULL,
- account_manager_ready_cb, self);
-
- tp_account_manager_enable_restart (self->account_manager);
-
- migrate_config_to_xdg_dir ();
-
- /* Logging */
- self->log_manager = tpl_log_manager_dup_singleton ();
-
- self->chatroom_manager = empathy_chatroom_manager_dup_singleton (NULL);
-
- g_object_get (self->chatroom_manager, "ready", &chatroom_manager_ready, NULL);
- if (!chatroom_manager_ready)
- {
- g_signal_connect (G_OBJECT (self->chatroom_manager), "notify::ready",
- G_CALLBACK (chatroom_manager_ready_cb), self->account_manager);
- }
- else
- {
- chatroom_manager_ready_cb (self->chatroom_manager, NULL,
- self->account_manager);
- }
-
- /* Location mananger */
-#ifdef HAVE_GEOCLUE
- self->location_manager = empathy_location_manager_dup_singleton ();
-#endif
-
- self->conn_aggregator = empathy_connection_aggregator_dup_singleton ();
-
- self->activated = FALSE;
- self->ft_factory = NULL;
- self->window = NULL;
-}
-
-static void
-add_empathy_features (void)
-{
- /* Add 'empathy' specific feature before doing any preparation */
- EmpathyClientFactory *factory;
-
- factory = empathy_client_factory_dup ();
-
- tp_simple_client_factory_add_connection_features_varargs (
- TP_SIMPLE_CLIENT_FACTORY (factory),
- /* empathy_connection_aggregator_get_all_groups(), used by
- * EmpathyGroupsWidget relies on it */
- TP_CONNECTION_FEATURE_CONTACT_GROUPS,
- /* empathy_connection_aggregator_dup_all_contacts(), used by
- * EmpathyEventManager relies on it */
- TP_CONNECTION_FEATURE_CONTACT_LIST,
- NULL);
-
- g_object_unref (factory);
-}
-
-int
-main (int argc, char *argv[])
-{
- EmpathyApp *app;
- gint retval;
-
- g_type_init ();
-
-#ifdef HAVE_LIBCHAMPLAIN
- g_return_val_if_fail (gtk_clutter_init (&argc, &argv) ==
- CLUTTER_INIT_SUCCESS, 1);
-#endif
-
- g_type_init ();
- empathy_init ();
-
- add_empathy_features ();
-
- app = g_object_new (EMPATHY_TYPE_APP,
- "application-id", EMPATHY_DBUS_NAME,
- NULL);
-
- retval = g_application_run (G_APPLICATION (app), argc, argv);
-
- notify_uninit ();
- xmlCleanupParser ();
-
- g_object_unref (app);
-
- return retval;
-}
diff --git a/tests/.gitignore b/tests/.gitignore
deleted file mode 100644
index b0798123..00000000
--- a/tests/.gitignore
+++ /dev/null
@@ -1,11 +0,0 @@
-*.log
-empathy-utils-test
-empathy-irc-server-test
-empathy-irc-network-test
-empathy-irc-network-manager-test
-empathy-chatroom-test
-empathy-chatroom-manager-test
-empathy-parser-test
-empathy-live-search-test
-empathy-tls-test
-test-report.xml
diff --git a/tests/Makefile.am b/tests/Makefile.am
deleted file mode 100644
index 679aa55e..00000000
--- a/tests/Makefile.am
+++ /dev/null
@@ -1,88 +0,0 @@
-SUBDIRS = interactive xml certificates
-
-CLEANFILES=
-
-SUPPRESSIONS=tp-glib.supp dlopen.supp
-
-EXTRA_DIST = \
- test.manager \
- test.profile
-
-AM_CPPFLAGS = \
- $(ERROR_CFLAGS) \
- -I$(top_srcdir)/tp-account-widgets \
- -I$(top_srcdir)/libempathy \
- -I$(top_srcdir)/libempathy-gtk \
- -DPKGDATADIR=\""$(pkgdatadir)"\" \
- -DGCR_API_SUBJECT_TO_CHANGE \
- $(EMPATHY_CFLAGS) \
- $(WARN_CFLAGS) \
- $(DISABLE_DEPRECATED) \
- -DSRCDIR=\""$(abs_srcdir)"\" \
- $(NULL)
-
-LDADD = \
- $(top_builddir)/tp-account-widgets/libtp-account-widgets.la \
- $(top_builddir)/libempathy-gtk/libempathy-gtk.la \
- $(top_builddir)/libempathy/libempathy.la \
- $(EMPATHY_LIBS) \
- $(NULL)
-
-tests_list = \
- empathy-irc-server-test \
- empathy-irc-network-test \
- empathy-irc-network-manager-test \
- empathy-chatroom-test \
- empathy-chatroom-manager-test \
- empathy-parser-test \
- empathy-live-search-test \
- empathy-tls-test
-
-noinst_PROGRAMS = $(tests_list)
-TESTS = $(tests_list)
-
-empathy_tls_test_SOURCES = empathy-tls-test.c \
- test-helper.c test-helper.h \
- mock-pkcs11.c mock-pkcs11.h
-
-empathy_irc_server_test_SOURCES = empathy-irc-server-test.c \
- test-helper.c test-helper.h \
- test-irc-helper.h test-irc-helper.c
-
-empathy_irc_network_test_SOURCES = empathy-irc-network-test.c \
- test-helper.c test-helper.h \
- test-irc-helper.h test-irc-helper.c
-
-empathy_irc_network_manager_test_SOURCES = empathy-irc-network-manager-test.c \
- test-helper.c test-helper.h \
- test-irc-helper.h test-irc-helper.c
-
-empathy_chatroom_test_SOURCES = empathy-chatroom-test.c \
- test-helper.c test-helper.h
-
-empathy_chatroom_manager_test_SOURCES = empathy-chatroom-manager-test.c \
- test-helper.c test-helper.h
-
-empathy_parser_test_SOURCES = empathy-parser-test.c \
- test-helper.c test-helper.h
-
-empathy_live_search_test_SOURCES = empathy-live-search-test.c \
- test-helper.c test-helper.h
-
-TESTS_ENVIRONMENT = EMPATHY_SRCDIR=@abs_top_srcdir@ \
- MC_PROFILE_DIR=@abs_top_srcdir@/tests \
- MC_MANAGER_DIR=@abs_top_srcdir@/tests
-
-test-report: test-report.xml
- gtester-report $(top_builddir)/tests/$@.xml > \
- $(top_builddir)/tests/$@.html
-
-test-report.xml: ${TESTS} test
-
-test: ${TESTS}
- gtester -o test-report.xml -k --verbose ${TESTS}
-
-test-%: empathy-%-test
- gtester -o $@-report.xml -k --verbose $<
-
-.PHONY: test test-report
diff --git a/tests/certificates/Makefile.am b/tests/certificates/Makefile.am
deleted file mode 100644
index 65e71b9b..00000000
--- a/tests/certificates/Makefile.am
+++ /dev/null
@@ -1,23 +0,0 @@
-EXTRA_DIST = \
- certificate-authority.cer \
- server-cert.cer
-
-# Not part of the build, but so we can easily repeat the process
-# of generating the testing certificates
-rebuild-certs:
- openssl req -new -x509 -out certificate-authority.pem \
- -newkey rsa -keyout certificate-authority.key -nodes \
- -subj /CN=test-ca.empathy.gnome.org -days 2000 \
- -config cert-openssl.conf -set_serial 1 -extensions test_ca
- openssl x509 -in certificate-authority.pem -outform DER \
- -out certificate-authority.cer
- openssl req -new -outform PEM -out server-cert.req \
- -newkey rsa -keyout /dev/null -nodes \
- -subj /CN=test-server.empathy.gnome.org \
- -config cert-openssl.conf -extensions test_server
- openssl x509 -req -in server-cert.req -days 2000 \
- -CA certificate-authority.pem -CAkey certificate-authority.key \
- -set_serial 888 -out server-cert.cer -outform DER
- rm certificate-authority.key
- rm certificate-authority.pem
- rm server-cert.req \ No newline at end of file
diff --git a/tests/certificates/cert-openssl.conf b/tests/certificates/cert-openssl.conf
deleted file mode 100644
index 18bd0d79..00000000
--- a/tests/certificates/cert-openssl.conf
+++ /dev/null
@@ -1,16 +0,0 @@
-[ req ]
-default_bits = 1024
-distinguished_name = req_distinguished_name
-x509_extensions = v3_ca
-dirstring_type = nobmp
-
-[ req_distinguished_name ]
-commonName = Common Name
-commonName_max = 64
-
-[ test_ca ]
-basicConstraints=CA:TRUE
-
-[ test_server ]
-basicConstraints=CA:FALSE
-extendedKeyUsage=serverAuth \ No newline at end of file
diff --git a/tests/certificates/certificate-authority.cer b/tests/certificates/certificate-authority.cer
deleted file mode 100644
index 3cb8c733..00000000
--- a/tests/certificates/certificate-authority.cer
+++ /dev/null
Binary files differ
diff --git a/tests/certificates/server-cert.cer b/tests/certificates/server-cert.cer
deleted file mode 100644
index a54ac888..00000000
--- a/tests/certificates/server-cert.cer
+++ /dev/null
Binary files differ
diff --git a/tests/dlopen.supp b/tests/dlopen.supp
deleted file mode 100644
index f6300a3a..00000000
--- a/tests/dlopen.supp
+++ /dev/null
@@ -1,127 +0,0 @@
-{
- <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/tests/empathy-chatroom-manager-test.c b/tests/empathy-chatroom-manager-test.c
deleted file mode 100644
index 7ebf8780..00000000
--- a/tests/empathy-chatroom-manager-test.c
+++ /dev/null
@@ -1,399 +0,0 @@
-#include "empathy-chatroom-manager.h"
-#include "test-helper.h"
-
-#define CHATROOM_SAMPLE "chatrooms-sample.xml"
-#define CHATROOM_FILE "chatrooms.xml"
-
-#if 0
-static void
-check_chatroom (EmpathyChatroom *chatroom,
- const gchar *name,
- const gchar *room,
- gboolean auto_connect,
- gboolean favorite)
-{
- gboolean _favorite;
-
- fail_if (tp_strdiff (empathy_chatroom_get_name (chatroom), name));
- fail_if (tp_strdiff (empathy_chatroom_get_room (chatroom), room));
- fail_if (empathy_chatroom_get_auto_connect (chatroom) != auto_connect);
- g_object_get (chatroom, "favorite", &_favorite, NULL);
- fail_if (favorite != _favorite);
-}
-
-struct chatroom_t
-{
- gchar *name;
- gchar *room;
- gboolean auto_connect;
- gboolean favorite;
-};
-
-static void
-check_chatrooms_list (EmpathyChatroomManager *mgr,
- EmpathyAccount *account,
- struct chatroom_t *_chatrooms,
- guint nb_chatrooms)
-{
- GList *chatrooms, *l;
- guint i;
- GHashTable *found;
-
- fail_if (empathy_chatroom_manager_get_count (mgr, account) != nb_chatrooms);
-
- found = g_hash_table_new (g_str_hash, g_str_equal);
- for (i = 0; i < nb_chatrooms; i++)
- {
- g_hash_table_insert (found, _chatrooms[i].room, &_chatrooms[i]);
- }
-
- chatrooms = empathy_chatroom_manager_get_chatrooms (mgr, account);
- fail_if (g_list_length (chatrooms) != nb_chatrooms);
-
- for (l = chatrooms; l != NULL; l = g_list_next (l))
- {
- EmpathyChatroom *chatroom = l->data;
- struct chatroom_t *tmp;
-
- tmp = g_hash_table_lookup (found, empathy_chatroom_get_room (chatroom));
- fail_if (tmp == NULL);
-
- check_chatroom (chatroom, tmp->name, tmp->room, tmp->auto_connect,
- tmp->favorite);
-
- g_hash_table_remove (found, empathy_chatroom_get_room (chatroom));
- }
-
- fail_if (g_hash_table_size (found) != 0);
-
- g_list_free (chatrooms);
- g_hash_table_unref (found);
-}
-
-static gboolean
-change_account_name_in_file (EmpathyAccount *account,
- const gchar *file)
-{
- gchar *cmd;
-
- cmd = g_strdup_printf ("sed -i 's/CHANGE_ME/%s/' %s",
- empathy_account_get_unique_name (account), file);
-
- if (system (cmd) == -1)
- {
- g_print ("'%s' call failed\n", cmd);
- g_free (cmd);
- return FALSE;
- }
-
- g_free (cmd);
- return TRUE;
-}
-
-START_TEST (test_empathy_chatroom_manager_dup_singleton)
-{
- EmpathyChatroomManager *mgr;
- gchar *file;
- EmpathyAccount *account;
- EmpathyAccountManager *account_manager;
- struct chatroom_t chatrooms[] = {
- { "name1", "room1", TRUE, TRUE },
- { "name2", "room2", FALSE, TRUE }};
-
- account_manager = tp_account_manager_dup ();
- account = get_test_account ();
-
- copy_xml_file (CHATROOM_SAMPLE, CHATROOM_FILE);
-
- file = get_user_xml_file (CHATROOM_FILE);
-
- /* change the chatrooms XML file to use the account we just created */
- if (!change_account_name_in_file (account, file))
- return;
-
- mgr = empathy_chatroom_manager_dup_singleton (file);
- check_chatrooms_list (mgr, account, chatrooms, 2);
-
- g_free (file);
- g_object_unref (mgr);
- g_object_unref (account_manager);
- g_object_unref (account);
-}
-END_TEST
-
-START_TEST (test_empathy_chatroom_manager_add)
-{
- EmpathyChatroomManager *mgr;
- gchar *file;
- EmpathyAccount *account;
- EmpathyAccountManager *account_manager;
- struct chatroom_t chatrooms[] = {
- { "name1", "room1", TRUE, TRUE },
- { "name2", "room2", FALSE, TRUE },
- { "name3", "room3", FALSE, TRUE },
- { "name4", "room4", FALSE, FALSE }};
- EmpathyChatroom *chatroom;
-
- account_manager = tp_account_manager_dup ();
-
- account = get_test_account ();
-
- copy_xml_file (CHATROOM_SAMPLE, CHATROOM_FILE);
-
- file = get_user_xml_file (CHATROOM_FILE);
-
- /* change the chatrooms XML file to use the account we just created */
- fail_unless (change_account_name_in_file (account, file));
-
- mgr = empathy_chatroom_manager_dup_singleton (file);
-
- /* add a favorite chatroom */
- chatroom = empathy_chatroom_new_full (account, "room3", "name3", FALSE);
- g_object_set (chatroom, "favorite", TRUE, NULL);
- empathy_chatroom_manager_add (mgr, chatroom);
- g_object_unref (chatroom);
-
- check_chatrooms_list (mgr, account, chatrooms, 3);
-
- /* reload chatrooms file */
- g_object_unref (mgr);
- mgr = empathy_chatroom_manager_dup_singleton (file);
-
- /* chatroom has been added to the XML file as it's a favorite */
- check_chatrooms_list (mgr, account, chatrooms, 3);
-
- /* add a non favorite chatroom */
- chatroom = empathy_chatroom_new_full (account, "room4", "name4", FALSE);
- g_object_set (chatroom, "favorite", FALSE, NULL);
- empathy_chatroom_manager_add (mgr, chatroom);
- g_object_unref (chatroom);
-
- check_chatrooms_list (mgr, account, chatrooms, 4);
-
- /* reload chatrooms file */
- g_object_unref (mgr);
- mgr = empathy_chatroom_manager_dup_singleton (file);
-
- /* chatrooms has not been added to the XML file */
- check_chatrooms_list (mgr, account, chatrooms, 3);
-
- g_object_unref (mgr);
- g_free (file);
- g_object_unref (account_manager);
- g_object_unref (account);
-}
-END_TEST
-
-START_TEST (test_empathy_chatroom_manager_remove)
-{
- EmpathyChatroomManager *mgr;
- gchar *file;
- EmpathyAccount *account;
- struct chatroom_t chatrooms[] = {
- { "name2", "room2", FALSE, TRUE }};
- EmpathyChatroom *chatroom;
- EmpathyAccountManager *account_mgr;
-
- account_mgr = tp_account_manager_dup ();
- account = get_test_account ();
-
- copy_xml_file (CHATROOM_SAMPLE, CHATROOM_FILE);
-
- file = get_user_xml_file (CHATROOM_FILE);
-
- /* change the chatrooms XML file to use the account we just created */
- fail_unless (change_account_name_in_file (account, file));
-
- mgr = empathy_chatroom_manager_dup_singleton (file);
-
- /* remove room1 */
- chatroom = empathy_chatroom_manager_find (mgr, account, "room1");
- fail_if (chatroom == NULL);
- empathy_chatroom_manager_remove (mgr, chatroom);
-
- check_chatrooms_list (mgr, account, chatrooms, 1);
-
- /* reload chatrooms file */
- g_object_unref (mgr);
- mgr = empathy_chatroom_manager_dup_singleton (file);
-
- check_chatrooms_list (mgr, account, chatrooms, 1);
-
- /* remove room1 */
- chatroom = empathy_chatroom_manager_find (mgr, account, "room2");
- fail_if (chatroom == NULL);
-
- empathy_chatroom_manager_remove (mgr, chatroom);
-
- check_chatrooms_list (mgr, account, chatrooms, 0);
-
- /* reload chatrooms file */
- g_object_unref (mgr);
- mgr = empathy_chatroom_manager_dup_singleton (file);
-
- check_chatrooms_list (mgr, account, chatrooms, 0);
-
- g_object_unref (mgr);
- g_free (file);
- g_object_unref (account);
- g_object_unref (account_mgr);
-}
-END_TEST
-
-START_TEST (test_empathy_chatroom_manager_change_favorite)
-{
- EmpathyChatroomManager *mgr;
- gchar *file;
- EmpathyAccount *account;
- EmpathyAccountManager *account_manager;
- struct chatroom_t chatrooms[] = {
- { "name1", "room1", TRUE, TRUE },
- { "name2", "room2", FALSE, FALSE }};
- EmpathyChatroom *chatroom;
-
- account_manager = tp_account_manager_dup ();
- account = get_test_account ();
-
- copy_xml_file (CHATROOM_SAMPLE, CHATROOM_FILE);
-
- file = get_user_xml_file (CHATROOM_FILE);
-
- /* change the chatrooms XML file to use the account we just created */
- fail_unless (change_account_name_in_file (account, file));
-
- mgr = empathy_chatroom_manager_dup_singleton (file);
-
- /* room2 is not favorite anymore */
- chatroom = empathy_chatroom_manager_find (mgr, account, "room2");
- fail_if (chatroom == NULL);
- g_object_set (chatroom, "favorite", FALSE, NULL);
-
- check_chatrooms_list (mgr, account, chatrooms, 2);
-
- /* reload chatrooms file */
- g_object_unref (mgr);
- mgr = empathy_chatroom_manager_dup_singleton (file);
-
- /* room2 is not present in the XML file anymore as it's not a favorite */
- check_chatrooms_list (mgr, account, chatrooms, 1);
-
- /* re-add room2 */
- chatroom = empathy_chatroom_new_full (account, "room2", "name2", FALSE);
- empathy_chatroom_manager_add (mgr, chatroom);
-
- check_chatrooms_list (mgr, account, chatrooms, 2);
-
- /* set room2 as favorite */
- g_object_set (chatroom, "favorite", TRUE, NULL);
-
- chatrooms[1].favorite = TRUE;
- check_chatrooms_list (mgr, account, chatrooms, 2);
-
- /* reload chatrooms file */
- g_object_unref (mgr);
- mgr = empathy_chatroom_manager_dup_singleton (file);
-
- /* room2 is back in the XML file now */
- check_chatrooms_list (mgr, account, chatrooms, 2);
-
- g_object_unref (mgr);
- g_object_unref (chatroom);
- g_free (file);
- g_object_unref (account_manager);
- g_object_unref (account);
-}
-END_TEST
-
-START_TEST (test_empathy_chatroom_manager_change_chatroom)
-{
- EmpathyChatroomManager *mgr;
- gchar *file;
- EmpathyAccount *account;
- EmpathyAccountManager *account_manager;
- struct chatroom_t chatrooms[] = {
- { "name1", "room1", TRUE, TRUE },
- { "name2", "room2", FALSE, TRUE }};
- EmpathyChatroom *chatroom;
-
- account_manager = tp_account_manager_dup ();
- account = get_test_account ();
-
- copy_xml_file (CHATROOM_SAMPLE, "foo.xml");
-
- file = get_user_xml_file ("foo.xml");
-
- /* change the chatrooms XML file to use the account we just created */
- fail_unless (change_account_name_in_file (account, file));
-
- mgr = empathy_chatroom_manager_dup_singleton (file);
-
- check_chatrooms_list (mgr, account, chatrooms, 2);
-
- /* change room2 name */
- chatroom = empathy_chatroom_manager_find (mgr, account, "room2");
- fail_if (chatroom == NULL);
- empathy_chatroom_set_name (chatroom, "new_name");
-
- /* reload chatrooms file */
- g_object_unref (mgr);
- mgr = empathy_chatroom_manager_dup_singleton (file);
-
- chatrooms[1].name = "new_name";
- check_chatrooms_list (mgr, account, chatrooms, 2);
-
- /* change room2 auto-connect status */
- chatroom = empathy_chatroom_manager_find (mgr, account, "room2");
- fail_if (chatroom == NULL);
- empathy_chatroom_set_auto_connect (chatroom, TRUE);
-
- /* reload chatrooms file */
- g_object_unref (mgr);
- mgr = empathy_chatroom_manager_dup_singleton (file);
-
- chatrooms[1].auto_connect = TRUE;
- check_chatrooms_list (mgr, account, chatrooms, 2);
-
- /* change room2 room */
- chatroom = empathy_chatroom_manager_find (mgr, account, "room2");
- fail_if (chatroom == NULL);
- empathy_chatroom_set_room (chatroom, "new_room");
-
- /* reload chatrooms file */
- g_object_unref (mgr);
- mgr = empathy_chatroom_manager_dup_singleton (file);
-
- chatrooms[1].room = "new_room";
- check_chatrooms_list (mgr, account, chatrooms, 2);
-
- g_object_unref (mgr);
- g_free (file);
- g_object_unref (account);
- g_object_unref (account_manager);
-}
-END_TEST
-#endif
-
-int
-main (int argc,
- char **argv)
-{
- int result;
-
- test_init (argc, argv);
-
-#if 0
- g_test_add_func ("/chatroom-manager/dup-singleton",
- test_empathy_chatroom_manager_dup_singleton);
- g_test_add_func ("/chatroom-manager/add", test_empathy_chatroom_manager_add);
- g_test_add_func ("/chatroom-manager/remove",
- test_empathy_chatroom_manager_remove);
- g_test_add_func ("/chatroom-manager/change-favorite",
- test_empathy_chatroom_manager_change_favorite);
- g_test_add_func ("/chatroom-manager/change-chatroom",
- test_empathy_chatroom_manager_change_chatroom);
-#endif
-
- result = g_test_run ();
- test_deinit ();
- return result;
-}
diff --git a/tests/empathy-chatroom-test.c b/tests/empathy-chatroom-test.c
deleted file mode 100644
index a64fd2ce..00000000
--- a/tests/empathy-chatroom-test.c
+++ /dev/null
@@ -1,163 +0,0 @@
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-
-#include "test-helper.h"
-#include "empathy-chatroom.h"
-
-#if 0
-static EmpathyChatroom *
-create_chatroom (void)
-{
- EmpathyAccount *account;
- EmpathyChatroom *chatroom;
-
- account = get_test_account ();
- chatroom = empathy_chatroom_new (account);
- fail_if (chatroom == NULL);
-
- return chatroom;
-}
-
-START_TEST (test_empathy_chatroom_new)
-{
- EmpathyChatroom *chatroom;
- gboolean auto_connect, favorite;
-
- chatroom = create_chatroom ();
- fail_if (empathy_chatroom_get_auto_connect (chatroom));
- g_object_get (chatroom,
- "auto_connect", &auto_connect,
- "favorite", &favorite,
- NULL);
- fail_if (auto_connect);
- fail_if (favorite);
-
- g_object_unref (empathy_chatroom_get_account (chatroom));
- g_object_unref (chatroom);
-}
-END_TEST
-
-START_TEST (test_favorite_and_auto_connect)
-{
- /* auto connect implies favorite */
- EmpathyChatroom *chatroom;
- gboolean auto_connect, favorite;
-
- chatroom = create_chatroom ();
-
- /* set auto_connect so favorite as a side effect */
- empathy_chatroom_set_auto_connect (chatroom, TRUE);
- fail_if (!empathy_chatroom_get_auto_connect (chatroom));
- g_object_get (chatroom,
- "auto_connect", &auto_connect,
- "favorite", &favorite,
- NULL);
- fail_if (!auto_connect);
- fail_if (!favorite);
-
- /* Remove auto_connect. Chatroom is still favorite */
- empathy_chatroom_set_auto_connect (chatroom, FALSE);
- fail_if (empathy_chatroom_get_auto_connect (chatroom));
- g_object_get (chatroom,
- "auto_connect", &auto_connect,
- "favorite", &favorite,
- NULL);
- fail_if (auto_connect);
- fail_if (!favorite);
-
- /* Remove favorite too now */
- g_object_set (chatroom, "favorite", FALSE, NULL);
- fail_if (empathy_chatroom_get_auto_connect (chatroom));
- g_object_get (chatroom,
- "auto_connect", &auto_connect,
- "favorite", &favorite,
- NULL);
- fail_if (auto_connect);
- fail_if (favorite);
-
- /* Just add favorite but not auto-connect */
- g_object_set (chatroom, "favorite", TRUE, NULL);
- fail_if (empathy_chatroom_get_auto_connect (chatroom));
- g_object_get (chatroom,
- "auto_connect", &auto_connect,
- "favorite", &favorite,
- NULL);
- fail_if (auto_connect);
- fail_if (!favorite);
-
- /* ... and re-add auto_connect */
- g_object_set (chatroom, "auto_connect", TRUE, NULL);
- fail_if (!empathy_chatroom_get_auto_connect (chatroom));
- g_object_get (chatroom,
- "auto_connect", &auto_connect,
- "favorite", &favorite,
- NULL);
- fail_if (!auto_connect);
- fail_if (!favorite);
-
- /* Remove favorite remove auto_connect too */
- g_object_set (chatroom, "favorite", FALSE, NULL);
- fail_if (empathy_chatroom_get_auto_connect (chatroom));
- g_object_get (chatroom,
- "auto_connect", &auto_connect,
- "favorite", &favorite,
- NULL);
- fail_if (auto_connect);
- fail_if (favorite);
-
- g_object_unref (empathy_chatroom_get_account (chatroom));
- g_object_unref (chatroom);
-}
-END_TEST
-
-static void
-favorite_changed (EmpathyChatroom *chatroom,
- GParamSpec *spec,
- gboolean *changed)
-{
- *changed = TRUE;
-}
-
-START_TEST (test_change_favorite)
-{
- EmpathyChatroom *chatroom;
- gboolean changed = FALSE;
-
- chatroom = create_chatroom ();
-
- g_signal_connect (chatroom, "notify::favorite", G_CALLBACK (favorite_changed),
- &changed);
-
- /* change favorite to TRUE */
- g_object_set (chatroom, "favorite", TRUE, NULL);
- fail_if (!changed);
-
- changed = FALSE;
-
- /* change favorite to FALSE */
- g_object_set (chatroom, "favorite", FALSE, NULL);
- fail_if (!changed);
-}
-END_TEST
-#endif
-
-int
-main (int argc,
- char **argv)
-{
- int result;
-
- test_init (argc, argv);
-
-#if 0
- g_test_add_func ("/chatroom/new", test_empathy_chatroom_new);
- g_test_add_func ("/chatroom/favorite-and-auto-connect",
- test_favorite_and_auto_connect);
- g_test_add_func ("/chatroom/change-favorite", test_change_favorite);
-#endif
-
- result = g_test_run ();
- test_deinit ();
- return result;
-}
diff --git a/tests/empathy-irc-network-manager-test.c b/tests/empathy-irc-network-manager-test.c
deleted file mode 100644
index 7b7e7a42..00000000
--- a/tests/empathy-irc-network-manager-test.c
+++ /dev/null
@@ -1,848 +0,0 @@
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-#include <glib/gstdio.h>
-#include <tp-account-widgets/tpaw-irc-network-manager.h>
-
-#include "test-helper.h"
-#include "test-irc-helper.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 void
-test_tpaw_irc_network_manager_add (void)
-{
- TpawIrcNetworkManager *mgr;
- TpawIrcNetwork *network;
- GSList *networks;
- gchar *name;
-
- mgr = tpaw_irc_network_manager_new (NULL, NULL);
- g_assert (mgr != NULL);
-
- networks = tpaw_irc_network_manager_get_networks (mgr);
- g_assert (networks == NULL);
-
- /* add a network */
- network = tpaw_irc_network_new ("My Network");
- g_assert (network != NULL);
- tpaw_irc_network_manager_add (mgr, network);
- g_object_unref (network);
-
- networks = tpaw_irc_network_manager_get_networks (mgr);
- g_assert_cmpuint (g_slist_length (networks), ==, 1);
- g_object_get (networks->data, "name", &name, NULL);
- g_assert_cmpstr (name, ==, "My Network");
- g_free (name);
- g_slist_foreach (networks, (GFunc) g_object_unref, NULL);
- g_slist_free (networks);
-
- /* add another network having the same name */
- network = tpaw_irc_network_new ("My Network");
- g_assert (network != NULL);
- tpaw_irc_network_manager_add (mgr, network);
- g_object_unref (network);
-
- networks = tpaw_irc_network_manager_get_networks (mgr);
- g_assert_cmpuint (g_slist_length (networks), ==, 2);
- g_object_get (networks->data, "name", &name, NULL);
- g_assert_cmpstr (name, ==, "My Network");
- g_free (name);
- g_object_get (g_slist_next (networks)->data, "name", &name, NULL);
- g_assert_cmpstr (name, ==, "My Network");
- g_free (name);
- g_slist_foreach (networks, (GFunc) g_object_unref, NULL);
- g_slist_free (networks);
-
- g_object_unref (mgr);
-}
-
-static void
-test_load_global_file (void)
-{
- TpawIrcNetworkManager *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 = tpaw_irc_network_manager_new (global_file_orig, NULL);
-
- g_object_get (mgr,
- "global-file", &global_file,
- "user-file", &user_file,
- NULL);
- g_assert_cmpstr (global_file, ==, global_file_orig);
- g_free (global_file);
- g_free (global_file_orig);
- g_free (user_file);
-
- networks = tpaw_irc_network_manager_get_networks (mgr);
- g_assert_cmpuint (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);
- g_assert (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
- {
- g_assert_not_reached ();
- }
-
- g_free (name);
- }
- g_assert (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);
-}
-
-static gboolean
-remove_network_named (TpawIrcNetworkManager *mgr,
- const gchar *network_name)
-{
- GSList *networks, *l;
- gboolean removed = FALSE;
-
- networks = tpaw_irc_network_manager_get_networks (mgr);
-
- /* check networks and servers */
- for (l = networks; l != NULL && !removed; l = g_slist_next (l))
- {
- TpawIrcNetwork *network = l->data;
- gchar *name;
-
- g_object_get (network, "name", &name, NULL);
- g_assert (name != NULL);
-
- if (strcmp (name, network_name) == 0)
- {
- tpaw_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;
-}
-
-static void
-test_tpaw_irc_network_manager_remove (void)
-{
- TpawIrcNetworkManager *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 = tpaw_irc_network_manager_new (global_file_orig, NULL);
- g_free (global_file_orig);
-
- result = remove_network_named (mgr, "GIMPNet");
- g_assert (result);
-
- networks = tpaw_irc_network_manager_get_networks (mgr);
- g_assert_cmpuint (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);
- g_assert (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
- {
- g_assert_not_reached ();
- }
-
- g_free (name);
- }
- g_assert (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);
-}
-
-static void
-test_load_user_file (void)
-{
- TpawIrcNetworkManager *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_xml_file (USER_SAMPLE, USER_FILE);
- user_file_orig = get_user_xml_file (USER_FILE);
- mgr = tpaw_irc_network_manager_new (NULL, user_file_orig);
-
- g_object_get (mgr,
- "global-file", &global_file,
- "user-file", &user_file,
- NULL);
- g_assert (global_file == NULL);
- g_assert_cmpstr (user_file, ==, user_file_orig);
- g_free (global_file);
- g_free (user_file);
- g_free (user_file_orig);
-
- networks = tpaw_irc_network_manager_get_networks (mgr);
- g_assert_cmpuint (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);
- g_assert (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
- {
- g_assert_not_reached ();
- }
-
- g_free (name);
- }
- g_assert (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);
-}
-
-static void
-test_load_both_files (void)
-{
- TpawIrcNetworkManager *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 = tpaw_irc_network_manager_new (global_file_orig, user_file_orig);
-
- g_object_get (mgr,
- "global-file", &global_file,
- "user-file", &user_file,
- NULL);
- g_assert_cmpstr (global_file, ==, global_file_orig);
- g_assert_cmpstr (user_file, ==, user_file_orig);
- g_free (global_file);
- g_free (global_file_orig);
- g_free (user_file);
- g_free (user_file_orig);
-
- networks = tpaw_irc_network_manager_get_networks (mgr);
- g_assert_cmpuint (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);
- g_assert (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
- {
- g_assert_not_reached ();
- }
-
- g_free (name);
- }
- g_assert (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);
-}
-
-static void
-test_modify_user_file (void)
-{
- TpawIrcNetworkManager *mgr;
- TpawIrcNetwork *network;
- TpawIrcServer *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_xml_file (USER_SAMPLE, USER_FILE);
- user_file_orig = get_user_xml_file (USER_FILE);
- mgr = tpaw_irc_network_manager_new (NULL, user_file_orig);
-
- g_object_get (mgr,
- "global-file", &global_file,
- "user-file", &user_file,
- NULL);
- g_assert (global_file == NULL);
- g_assert_cmpstr (user_file, ==, user_file_orig);
- g_free (global_file);
- g_free (user_file);
-
- networks = tpaw_irc_network_manager_get_networks (mgr);
- g_assert_cmpuint (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))
- {
- gchar *name;
-
- network = l->data;
- g_object_get (network, "name", &name, NULL);
- g_assert (name != NULL);
-
- if (strcmp (name, "GIMPNet") == 0)
- {
- GSList *servers, *ll;
-
- /* change charset */
- g_object_set (network, "charset", "ISO-8859-1", NULL);
-
- servers = tpaw_irc_network_get_servers (network);
- for (ll = servers; ll != NULL; ll = g_slist_next (ll))
- {
- 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 */
- tpaw_irc_network_remove_server (network, server);
- }
- else
- {
- g_assert_not_reached ();
- }
-
- 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 */
- tpaw_irc_network_manager_remove (mgr, network);
- network_modified[1] = TRUE;
- }
- else if (strcmp (name, "Another Server") == 0)
- {
- /* Don't change this one */
- }
- else
- {
- g_assert_not_reached ();
- }
-
- g_free (name);
- }
- g_assert (network_modified[0] && network_modified[1]);
-
- /* Add a new network */
- network = tpaw_irc_network_new ("Great Server");
- server = tpaw_irc_server_new ("irc.greatserver.com", 7873, TRUE);
- tpaw_irc_network_append_server (network, server);
- tpaw_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 = tpaw_irc_network_manager_new (NULL, user_file_orig);
- g_free (user_file_orig);
-
- networks = tpaw_irc_network_manager_get_networks (mgr);
- g_assert_cmpuint (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);
- g_assert (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
- {
- g_assert_not_reached ();
- }
-
- g_free (name);
- }
- g_assert (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);
-}
-
-static void
-test_modify_both_files (void)
-{
- TpawIrcNetworkManager *mgr;
- TpawIrcNetwork *network;
- TpawIrcServer *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_xml_file (USER_SAMPLE, USER_FILE);
- global_file_orig = get_xml_file (GLOBAL_SAMPLE);
- user_file_orig = get_user_xml_file (USER_FILE);
- mgr = tpaw_irc_network_manager_new (global_file_orig, user_file_orig);
-
- g_object_get (mgr,
- "global-file", &global_file,
- "user-file", &user_file,
- NULL);
- g_assert_cmpstr (global_file, ==, global_file_orig);
- g_assert_cmpstr (user_file, ==, user_file_orig);
- g_free (global_file);
- g_free (global_file_orig);
- g_free (user_file);
- g_free (user_file_orig);
-
- networks = tpaw_irc_network_manager_get_networks (mgr);
- g_assert_cmpuint (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))
- {
- gchar *name;
-
- network = l->data;
- g_object_get (network, "name", &name, NULL);
- g_assert (name != NULL);
-
- if (strcmp (name, "GIMPNet") == 0)
- {
- /* Modify user network */
- GSList *servers, *ll;
-
- servers = tpaw_irc_network_get_servers (network);
- for (ll = servers; ll != NULL; ll = g_slist_next (ll))
- {
- 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 */
- tpaw_irc_network_remove_server (network, server);
- }
- else
- {
- g_assert_not_reached ();
- }
-
- 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 */
- tpaw_irc_network_manager_remove (mgr, network);
- network_modified[1] = TRUE;
- }
- else if (strcmp (name, "Freenode") == 0)
- {
- /* remove global network */
- tpaw_irc_network_manager_remove (mgr, network);
- network_modified[2] = TRUE;
- }
- else if (strcmp (name, "Undernet") == 0)
- {
- /* modify global network */
- server = tpaw_irc_server_new ("us.undernet.org", 6667, FALSE);
- tpaw_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
- {
- g_assert_not_reached ();
- }
-
- g_free (name);
- }
- g_assert (network_modified[0] && network_modified[1] && network_modified[2]
- && network_modified[3]);
-
- /* Add a new network */
- network = tpaw_irc_network_new ("Great Server");
- server = tpaw_irc_server_new ("irc.greatserver.com", 7873, TRUE);
- tpaw_irc_network_append_server (network, server);
- tpaw_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 = tpaw_irc_network_manager_new (global_file_orig, user_file_orig);
- g_free (global_file_orig);
- g_free (user_file_orig);
-
- networks = tpaw_irc_network_manager_get_networks (mgr);
- g_assert_cmpuint (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);
- g_assert (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
- {
- g_assert_not_reached ();
- }
-
- g_free (name);
- }
- g_assert (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);
-}
-
-static void
-test_tpaw_irc_network_manager_find_network_by_address (void)
-{
- TpawIrcNetworkManager *mgr;
- TpawIrcNetwork *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 = tpaw_irc_network_manager_new (global_file_orig, NULL);
- g_free (global_file_orig);
-
- network = tpaw_irc_network_manager_find_network_by_address (mgr,
- "irc.freenode.net");
- g_assert (network != NULL);
- check_network (network, "Freenode", "UTF-8", freenode_servers, 2);
-
- network = tpaw_irc_network_manager_find_network_by_address (mgr,
- "irc.eu.freenode.net");
- g_assert (network != NULL);
- check_network (network, "Freenode", "UTF-8", freenode_servers, 2);
-
- network = tpaw_irc_network_manager_find_network_by_address (mgr,
- "unknown");
- g_assert (network == NULL);
-
- g_object_unref (mgr);
-}
-
-static void
-test_no_modify_with_empty_user_file (void)
-{
- TpawIrcNetworkManager *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 = tpaw_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 = tpaw_irc_network_manager_new (NULL, user_file_orig);
- g_free (user_file_orig);
-
- networks = tpaw_irc_network_manager_get_networks (mgr);
- g_assert_cmpuint (g_slist_length (networks), ==, 0);
-
- g_slist_foreach (networks, (GFunc) g_object_unref, NULL);
- g_slist_free (networks);
- g_object_unref (mgr);
-}
-
-int
-main (int argc,
- char **argv)
-{
- int result;
-
- test_init (argc, argv);
-
- g_test_add_func ("/irc-network-manager/add",
- test_tpaw_irc_network_manager_add);
- g_test_add_func ("/irc-network-manager/load-global-file",
- test_load_global_file);
- g_test_add_func ("/irc-network-manager/remove",
- test_tpaw_irc_network_manager_remove);
- g_test_add_func ("/irc-network-manager/load-user-file", test_load_user_file);
- g_test_add_func ("/irc-network-manager/load-both-files",
- test_load_both_files);
- g_test_add_func ("/irc-network-manager/modify-user-file",
- test_modify_user_file);
- g_test_add_func ("/irc-network-manager/modify-both-files",
- test_modify_both_files);
- g_test_add_func ("/irc-network-manager/find-network-by-address",
- test_tpaw_irc_network_manager_find_network_by_address);
- g_test_add_func ("/irc-network-manager/no-modify-with-empty-user-file",
- test_no_modify_with_empty_user_file);
-
- result = g_test_run ();
- test_deinit ();
- return result;
-}
diff --git a/tests/empathy-irc-network-test.c b/tests/empathy-irc-network-test.c
deleted file mode 100644
index c784641f..00000000
--- a/tests/empathy-irc-network-test.c
+++ /dev/null
@@ -1,246 +0,0 @@
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-#include <tp-account-widgets/tpaw-irc-network.h>
-
-#include "test-helper.h"
-#include "test-irc-helper.h"
-
-static void
-test_tpaw_irc_network_new (void)
-{
- TpawIrcNetwork *network;
-
- network = tpaw_irc_network_new ("Network1");
- check_network (network, "Network1", "UTF-8", NULL, 0);
-
- g_object_unref (network);
-}
-
-static void
-test_property_change (void)
-{
- TpawIrcNetwork *network;
-
- network = tpaw_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);
-
-}
-
-static gboolean modified;
-
-static void
-modified_cb (TpawIrcNetwork *network,
- gpointer unused)
-{
- modified = TRUE;
-}
-
-static void
-test_modified_signal (void)
-{
- TpawIrcNetwork *network;
-
- network = tpaw_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);
- g_assert (modified);
- modified = FALSE;
- g_object_set (network, "name", "Network2", NULL);
- g_assert (!modified);
-
- g_object_unref (network);
-}
-
-static void
-add_servers (TpawIrcNetwork *network,
- struct server_t *servers,
- guint nb_servers)
-{
- guint i;
-
- for (i = 0; i < nb_servers; i ++)
- {
- TpawIrcServer *server;
-
- server = tpaw_irc_server_new (servers[i].address,
- servers[i].port, servers[i].ssl);
- modified = FALSE;
- tpaw_irc_network_append_server (network, server);
- g_assert (modified);
- g_object_unref (server);
- }
-}
-
-static void
-test_add_server (void)
-{
- TpawIrcNetwork *network;
- TpawIrcServer *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 = tpaw_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 = tpaw_irc_network_get_servers (network);
- l = g_slist_nth (servers, 2);
- g_assert (l != NULL);
- server = l->data;
- modified = FALSE;
- tpaw_irc_network_remove_server (network, server);
- g_assert (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);
-}
-
-static void
-test_modified_signal_because_of_server (void)
-{
- TpawIrcNetwork *network;
- TpawIrcServer *server;
-
- network = tpaw_irc_network_new ("Network1");
- check_network (network, "Network1", "UTF-8", NULL, 0);
-
- g_signal_connect (network, "modified", G_CALLBACK (modified_cb), NULL);
-
- server = tpaw_irc_server_new ("server1", 6667, FALSE);
- tpaw_irc_network_append_server (network, server);
-
- /* Change server properties */
- modified = FALSE;
- g_object_set (server, "address", "server2", NULL);
- g_assert (modified);
- modified = FALSE;
- g_object_set (server, "port", 6668, NULL);
- g_assert (modified);
- modified = FALSE;
- g_object_set (server, "ssl", TRUE, NULL);
- g_assert (modified);
-
- tpaw_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 */
- g_assert (!modified);
-
- g_object_unref (network);
-}
-
-static void
-test_tpaw_irc_network_set_server_position (void)
-{
- TpawIrcNetwork *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 = tpaw_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 = tpaw_irc_network_get_servers (network);
- g_assert (g_slist_length (servers) == 4);
- modified = FALSE;
-
- /* server1 go to the last position */
- tpaw_irc_network_set_server_position (network, servers->data, -1);
-
- /* server2 go to the first position */
- l = servers->next;
- tpaw_irc_network_set_server_position (network, l->data, 0);
-
- /* server3 go to the third position */
- l = l->next;
- tpaw_irc_network_set_server_position (network, l->data, 2);
-
- /* server4 go to the second position*/
- l = l->next;
- tpaw_irc_network_set_server_position (network, l->data, 1);
-
- g_assert (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);
-}
-
-int
-main (int argc,
- char **argv)
-{
- int result;
-
- test_init (argc, argv);
-
- g_test_add_func ("/irc-network/new", test_tpaw_irc_network_new);
- g_test_add_func ("/irc-network/property-change", test_property_change);
- g_test_add_func ("/irc-network/modified-signal", test_modified_signal);
- g_test_add_func ("/irc-network/add-server", test_add_server);
- g_test_add_func ("/irc-network/modified-signal-because-of-server",
- test_modified_signal_because_of_server);
- g_test_add_func ("/irc-network/set-server-position",
- test_tpaw_irc_network_set_server_position);
-
- result = g_test_run ();
- test_deinit ();
- return result;
-}
diff --git a/tests/empathy-irc-server-test.c b/tests/empathy-irc-server-test.c
deleted file mode 100644
index fc0eb5b1..00000000
--- a/tests/empathy-irc-server-test.c
+++ /dev/null
@@ -1,97 +0,0 @@
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-#include <tp-account-widgets/tpaw-irc-server.h>
-
-#include "test-helper.h"
-#include "test-irc-helper.h"
-
-static void
-test_tpaw_irc_server_new (void)
-{
- TpawIrcServer *server;
-
- server = tpaw_irc_server_new ("test.localhost", 6667, TRUE);
- check_server (server, "test.localhost", 6667, TRUE);
-
- g_object_unref (server);
-}
-
-static void
-test_property_change (void)
-{
- TpawIrcServer *server;
-
- server = tpaw_irc_server_new ("test.localhost", 6667, TRUE);
- g_assert (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);
-}
-
-static gboolean modified = FALSE;
-
-static void
-modified_cb (TpawIrcServer *server,
- gpointer unused)
-{
- modified = TRUE;
-}
-
-static void
-test_modified_signal (void)
-{
- TpawIrcServer *server;
-
- server = tpaw_irc_server_new ("test.localhost", 6667, TRUE);
- g_assert (server != NULL);
-
- g_signal_connect (server, "modified", G_CALLBACK (modified_cb), NULL);
-
- /* address */
- g_object_set (server, "address", "test2.localhost", NULL);
- g_assert (modified);
- modified = FALSE;
- g_object_set (server, "address", "test2.localhost", NULL);
- g_assert (!modified);
-
- /* port */
- g_object_set (server, "port", 6668, NULL);
- g_assert (modified);
- modified = FALSE;
- g_object_set (server, "port", 6668, NULL);
- g_assert (!modified);
-
- /* ssl */
- g_object_set (server, "ssl", FALSE, NULL);
- g_assert (modified);
- modified = FALSE;
- g_object_set (server, "ssl", FALSE, NULL);
- g_assert (!modified);
-
- g_object_unref (server);
-}
-
-int
-main (int argc,
- char **argv)
-{
- int result;
-
- test_init (argc, argv);
-
- g_test_add_func ("/irc-server/new", test_tpaw_irc_server_new);
- g_test_add_func ("/irc-server/property-change", test_property_change);
- g_test_add_func ("/irc-server/modified-signal", test_modified_signal);
-
- result = g_test_run ();
- test_deinit ();
- return result;
-}
diff --git a/tests/empathy-live-search-test.c b/tests/empathy-live-search-test.c
deleted file mode 100644
index 2fb3e48d..00000000
--- a/tests/empathy-live-search-test.c
+++ /dev/null
@@ -1,85 +0,0 @@
-#include "config.h"
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-#include <tp-account-widgets/tpaw-live-search.h>
-
-#include "test-helper.h"
-
-#define DEBUG_FLAG EMPATHY_DEBUG_TESTS
-#include "empathy-debug.h"
-
-typedef struct
-{
- const gchar *string;
- const gchar *prefix;
- gboolean should_match;
-} LiveSearchTest;
-
-static void
-test_live_search (void)
-{
- LiveSearchTest tests[] =
- {
- /* Test word separators and case */
- { "Hello World", "he", TRUE },
- { "Hello World", "wo", TRUE },
- { "Hello World", "lo", FALSE },
- { "Hello World", "ld", FALSE },
- { "Hello-World", "wo", TRUE },
- { "HelloWorld", "wo", FALSE },
-
- /* Test composed chars (accentued letters) */
- { "Jörgen", "jor", TRUE },
- { "Gaëtan", "gaetan", TRUE },
- { "élève", "ele", TRUE },
- { "Azais", "AzaÏs", TRUE },
-
- /* Test decomposed chars, they looks the same, but are actually
- * composed of multiple unicodes */
- { "Jorgen", "Jör", TRUE },
- { "Jörgen", "jor", TRUE },
-
- /* Multi words */
- { "Xavier Claessens", "Xav Cla", TRUE },
- { "Xavier Claessens", "Cla Xav", TRUE },
- { "Foo Bar Baz", " b ", TRUE },
- { "Foo Bar Baz", "bar bazz", FALSE },
-
- { NULL, NULL, FALSE }
- };
- guint i;
-
- DEBUG ("Started");
- for (i = 0; tests[i].string != NULL; i ++)
- {
- gboolean match;
- gboolean ok;
-
- match = tpaw_live_search_match_string (tests[i].string, tests[i].prefix);
- ok = (match == tests[i].should_match);
-
- DEBUG ("'%s' - '%s' %s: %s", tests[i].string, tests[i].prefix,
- tests[i].should_match ? "should match" : "should NOT match",
- ok ? "OK" : "FAILED");
-
- g_assert (ok);
- }
-}
-
-int
-main (int argc,
- char **argv)
-{
- int result;
-
- test_init (argc, argv);
-
- g_test_add_func ("/live-search", test_live_search);
-
- result = g_test_run ();
- test_deinit ();
-
- return result;
-}
diff --git a/tests/empathy-parser-test.c b/tests/empathy-parser-test.c
deleted file mode 100644
index 843bf368..00000000
--- a/tests/empathy-parser-test.c
+++ /dev/null
@@ -1,139 +0,0 @@
-#include "config.h"
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-#include <telepathy-glib/telepathy-glib.h>
-#include <tp-account-widgets/tpaw-string-parser.h>
-
-#include "empathy-string-parser.h"
-#include "test-helper.h"
-
-#define DEBUG_FLAG EMPATHY_DEBUG_TESTS
-#include "empathy-debug.h"
-
-static void
-test_replace_match (const gchar *text,
- gssize len,
- gpointer match_data,
- gpointer user_data)
-{
- GString *string = user_data;
-
- g_string_append_c (string, '[');
- g_string_append_len (string, text, len);
- g_string_append_c (string, ']');
-}
-
-static void
-test_parsers (void)
-{
- gchar *tests[] =
- {
- /* Basic link matches */
- "http://foo.com", "[http://foo.com]",
- "http://foo.com\nhttp://bar.com", "[http://foo.com]\n[http://bar.com]",
- "http://foo.com/test?id=bar?", "[http://foo.com/test?id=bar]?",
- "git://foo.com", "[git://foo.com]",
- "git+ssh://foo.com", "[git+ssh://foo.com]",
- "mailto:user@server.com", "[mailto:user@server.com]",
- "www.foo.com", "[www.foo.com]",
- "ftp.foo.com", "[ftp.foo.com]",
- "user@server.com", "[user@server.com]",
- "first.last@server.com", "[first.last@server.com]",
- "http://foo.com. bar", "[http://foo.com]. bar",
- "http://foo.com; bar", "[http://foo.com]; bar",
- "http://foo.com: bar", "[http://foo.com]: bar",
- "http://foo.com:bar", "[http://foo.com:bar]",
- "http://apos'foo.com", "[http://apos'foo.com]",
- "mailto:bar'?user@server.com", "[mailto:bar'?user@server.com]",
-
- /* They are not links! */
- "http://", "http[:/]/", /* Hm... */
- "www.", "www.",
- "w.foo.com", "w.foo.com",
- "@server.com", "@server.com",
- "mailto:user@", "mailto:user@",
- "mailto:user@.com", "mailto:user@.com",
- "user@.com", "user@.com",
-
- /* Links inside (), {}, [], <>, "" or '' */
- /* FIXME: How to test if the ending ] is matched or not? */
- "Foo (www.foo.com)", "Foo ([www.foo.com])",
- "Foo {www.foo.com}", "Foo {[www.foo.com]}",
- "Foo [www.foo.com]", "Foo [[www.foo.com]]",
- "Foo <www.foo.com>", "Foo &lt;[www.foo.com]&gt;",
- "Foo \"www.foo.com\"", "Foo &quot;[www.foo.com]&quot;",
- "Foo (www.foo.com/bar(123)baz)", "Foo ([www.foo.com/bar(123)baz])",
- "<a href=\"http://foo.com\">bar</a>", "&lt;a href=&quot;[http://foo.com]&quot;&gt;bar&lt;/a&gt;",
- "Foo (user@server.com)", "Foo ([user@server.com])",
- "Foo {user@server.com}", "Foo {[user@server.com]}",
- "Foo [user@server.com]", "Foo [[user@server.com]]",
- "Foo <user@server.com>", "Foo &lt;[user@server.com]&gt;",
- "Foo \"user@server.com\"", "Foo &quot;[user@server.com]&quot;",
- "<a href='http://apos'foo.com'>bar</a>", "&lt;a href=&apos;[http://apos'foo.com]&apos;&gt;bar&lt;/a&gt;",
- "Foo 'bar'?user@server.com'", "Foo &apos;[bar'?user@server.com]&apos;",
-
- /* Basic smileys */
- "a:)b", "a[:)]b",
- ">:)", "[>:)]",
- ">:(", "&gt;[:(]",
-
- /* Smileys and links mixed */
- ":)http://foo.com", "[:)][http://foo.com]",
- "a :) b http://foo.com c :( d www.test.com e", "a [:)] b [http://foo.com] c [:(] d [www.test.com] e",
-
- /* '\r' should be stripped */
- "badger\n\rmushroom", "badger\nmushroom",
- "badger\r\nmushroom", "badger\nmushroom",
-
- /* FIXME: Known issue: Brackets should be counted by the parser */
- //"Foo www.bar.com/test(123)", "Foo [www.bar.com/test(123)]",
- //"Foo (www.bar.com/test(123))", "Foo ([www.bar.com/test(123)])",
- //"Foo www.bar.com/test{123}", "Foo [www.bar.com/test{123}]",
- //"Foo (:))", "Foo ([:)])",
- //"Foo <a href=\"http://foo.com\">:)</a>", "Foo <a href=\"[http://foo.com]\">[:)]</a>",
-
- NULL, NULL
- };
- TpawStringParser parsers[] =
- {
- {tpaw_string_match_link, test_replace_match},
- {empathy_string_match_smiley, test_replace_match},
- {tpaw_string_match_all, tpaw_string_replace_escaped},
- {NULL, NULL}
- };
- guint i;
-
- DEBUG ("Started");
- for (i = 0; tests[i] != NULL; i += 2)
- {
- GString *string;
- gboolean ok;
-
- string = g_string_new (NULL);
- tpaw_string_parser_substr (tests[i], -1, parsers, string);
-
- ok = !tp_strdiff (tests[i + 1], string->str);
- DEBUG ("'%s' => '%s': %s", tests[i], string->str, ok ? "OK" : "FAILED");
- g_assert (ok);
-
- g_string_free (string, TRUE);
- }
-}
-
-int
-main (int argc,
- char **argv)
-{
- int result;
-
- test_init (argc, argv);
-
- g_test_add_func ("/parsers", test_parsers);
-
- result = g_test_run ();
- test_deinit ();
-
- return result;
-}
diff --git a/tests/empathy-tls-test.c b/tests/empathy-tls-test.c
deleted file mode 100644
index 2155c68b..00000000
--- a/tests/empathy-tls-test.c
+++ /dev/null
@@ -1,745 +0,0 @@
-#include <gnutls/gnutls.h>
-#include <telepathy-glib/svc-tls.h>
-
-#include "empathy-tls-verifier.h"
-#include "mock-pkcs11.h"
-#include "test-helper.h"
-
-#define MOCK_TLS_CERTIFICATE_PATH "/mock/certificate"
-
-/* Forward decl */
-GType mock_tls_certificate_get_type (void);
-
-#define MOCK_TLS_CERTIFICATE(obj) \
- (G_TYPE_CHECK_INSTANCE_CAST((obj), mock_tls_certificate_get_type (), \
- MockTLSCertificate))
-
-typedef struct _MockTLSCertificate {
- GObject parent;
- guint state;
- GPtrArray *rejections;
- gchar *cert_type;
- GPtrArray *cert_data;
-} MockTLSCertificate;
-
-typedef struct _MockTLSCertificateClass {
- GObjectClass parent;
- TpDBusPropertiesMixinClass dbus_props_class;
-} MockTLSCertificateClass;
-
-enum {
- PROP_0,
- PROP_STATE,
- PROP_REJECTIONS,
- PROP_CERTIFICATE_TYPE,
- PROP_CERTIFICATE_CHAIN_DATA
-};
-
-static void mock_tls_certificate_iface_init (gpointer, gpointer);
-
-G_DEFINE_TYPE_WITH_CODE(MockTLSCertificate, mock_tls_certificate, G_TYPE_OBJECT,
- G_IMPLEMENT_INTERFACE (TP_TYPE_SVC_AUTHENTICATION_TLS_CERTIFICATE,
- mock_tls_certificate_iface_init)
- G_IMPLEMENT_INTERFACE (TP_TYPE_SVC_DBUS_PROPERTIES,
- tp_dbus_properties_mixin_iface_init)
-)
-
-static void
-mock_tls_certificate_init (MockTLSCertificate *self)
-{
- self->state = TP_TLS_CERTIFICATE_STATE_PENDING;
- self->cert_type = g_strdup ("x509");
- self->cert_data = g_ptr_array_new_with_free_func((GDestroyNotify) g_array_unref);
- self->rejections = g_ptr_array_new ();
-}
-
-static void
-mock_tls_certificate_get_property (GObject *object,
- guint property_id,
- GValue *value,
- GParamSpec *pspec)
-{
- MockTLSCertificate *self = MOCK_TLS_CERTIFICATE (object);
-
- switch (property_id)
- {
- case PROP_STATE:
- g_value_set_uint (value, self->state);
- break;
- case PROP_REJECTIONS:
- g_value_set_boxed (value, self->rejections);
- break;
- case PROP_CERTIFICATE_TYPE:
- g_value_set_string (value, self->cert_type);
- break;
- case PROP_CERTIFICATE_CHAIN_DATA:
- g_value_set_boxed (value, self->cert_data);
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
- break;
- }
-}
-
-static void
-mock_tls_certificate_finalize (GObject *object)
-{
- MockTLSCertificate *self = MOCK_TLS_CERTIFICATE (object);
-
- tp_clear_boxed (TP_ARRAY_TYPE_TLS_CERTIFICATE_REJECTION_LIST,
- &self->rejections);
- g_free (self->cert_type);
- self->cert_type = NULL;
- g_ptr_array_unref (self->cert_data);
- self->cert_data = NULL;
-
- G_OBJECT_CLASS (mock_tls_certificate_parent_class)->finalize (object);
-}
-
-static void
-mock_tls_certificate_class_init (MockTLSCertificateClass *klass)
-{
- GObjectClass *oclass = G_OBJECT_CLASS (klass);
- GParamSpec *pspec;
-
- static TpDBusPropertiesMixinPropImpl object_props[] = {
- { "State", "state", NULL },
- { "Rejections", "rejections", NULL },
- { "CertificateType", "certificate-type", NULL },
- { "CertificateChainData", "certificate-chain-data", NULL },
- { NULL }
- };
-
- static TpDBusPropertiesMixinIfaceImpl prop_interfaces[] = {
- { TP_IFACE_AUTHENTICATION_TLS_CERTIFICATE,
- tp_dbus_properties_mixin_getter_gobject_properties,
- NULL,
- object_props,
- },
- { NULL }
- };
-
- oclass->get_property = mock_tls_certificate_get_property;
- oclass->finalize = mock_tls_certificate_finalize;
-
- pspec = g_param_spec_uint ("state",
- "State of this certificate",
- "The state of this TLS certificate.",
- 0, NUM_TP_TLS_CERTIFICATE_STATES - 1,
- TP_TLS_CERTIFICATE_STATE_PENDING,
- G_PARAM_READABLE | G_PARAM_STATIC_STRINGS);
- g_object_class_install_property (oclass, PROP_STATE, pspec);
-
- pspec = g_param_spec_boxed ("rejections",
- "The reject reasons",
- "The reasons why this TLS certificate has been rejected",
- TP_ARRAY_TYPE_TLS_CERTIFICATE_REJECTION_LIST,
- G_PARAM_READABLE | G_PARAM_STATIC_STRINGS);
- g_object_class_install_property (oclass, PROP_REJECTIONS, pspec);
-
- pspec = g_param_spec_string ("certificate-type",
- "The certificate type",
- "The type of this certificate.",
- NULL,
- G_PARAM_READABLE | G_PARAM_STATIC_STRINGS);
- g_object_class_install_property (oclass, PROP_CERTIFICATE_TYPE, pspec);
-
- pspec = g_param_spec_boxed ("certificate-chain-data",
- "The certificate chain data",
- "The raw PEM-encoded trust chain of this certificate.",
- TP_ARRAY_TYPE_UCHAR_ARRAY_LIST,
- G_PARAM_READABLE | G_PARAM_STATIC_STRINGS);
- g_object_class_install_property (oclass, PROP_CERTIFICATE_CHAIN_DATA, pspec);
-
- klass->dbus_props_class.interfaces = prop_interfaces;
- tp_dbus_properties_mixin_class_init (oclass,
- G_STRUCT_OFFSET (MockTLSCertificateClass, dbus_props_class));
-}
-
-static void
-mock_tls_certificate_accept (TpSvcAuthenticationTLSCertificate *base,
- DBusGMethodInvocation *context)
-{
- MockTLSCertificate *self = MOCK_TLS_CERTIFICATE (base);
- self->state = TP_TLS_CERTIFICATE_STATE_ACCEPTED;
- tp_svc_authentication_tls_certificate_emit_accepted (self);
- tp_svc_authentication_tls_certificate_return_from_accept (context);
-}
-
-static void
-mock_tls_certificate_reject (TpSvcAuthenticationTLSCertificate *base,
- const GPtrArray *in_Rejections,
- DBusGMethodInvocation *context)
-{
- MockTLSCertificate *self = MOCK_TLS_CERTIFICATE (base);
- self->state = TP_TLS_CERTIFICATE_STATE_REJECTED;
- tp_svc_authentication_tls_certificate_emit_rejected (self, in_Rejections);
- tp_svc_authentication_tls_certificate_return_from_reject (context);
-}
-
-static void
-mock_tls_certificate_iface_init (gpointer g_iface,
- gpointer iface_data)
-{
- TpSvcAuthenticationTLSCertificateClass *klass =
- (TpSvcAuthenticationTLSCertificateClass*)g_iface;
-
- tp_svc_authentication_tls_certificate_implement_accept (klass,
- mock_tls_certificate_accept);
- tp_svc_authentication_tls_certificate_implement_reject (klass,
- mock_tls_certificate_reject);
-}
-
-#if 0
-static void
-mock_tls_certificate_assert_rejected (MockTLSCertificate *self,
- TpTLSCertificateRejectReason reason)
-{
- GValueArray *rejection;
- TpTLSCertificateRejectReason rejection_reason;
- gchar *rejection_error;
- GHashTable *rejection_details;
- guint i;
-
- g_assert (self->state == TP_TLS_CERTIFICATE_STATE_REJECTED);
- g_assert (self->rejections);
- g_assert (self->rejections->len > 0);
-
- for (i = 0; i < self->rejections->len; ++i)
- {
- rejection = g_ptr_array_index (self->rejections, i);
- tp_value_array_unpack (rejection, 3,
- G_TYPE_UINT, &rejection_reason,
- G_TYPE_STRING, &rejection_error,
- TP_HASH_TYPE_STRING_VARIANT_MAP, &rejection_details,
- NULL);
- g_free (rejection_error);
- g_hash_table_unref (rejection_details);
-
- if (rejection_reason == reason)
- return;
- }
-
- g_assert ("Certificate was not rejected for right reason" && 0);
-}
-#endif
-
-static MockTLSCertificate*
-mock_tls_certificate_new_and_register (TpDBusDaemon *dbus,
- const gchar *path,
- ...)
-{
- MockTLSCertificate *cert;
- GError *error = NULL;
- gchar *filename, *contents;
- GArray *der;
- gsize length;
- va_list va;
-
- cert = g_object_new (mock_tls_certificate_get_type (), NULL);
-
- va_start (va, path);
- while (path != NULL) {
- filename = g_build_filename (g_getenv ("EMPATHY_SRCDIR"),
- "tests", "certificates", path, NULL);
- g_file_get_contents (filename, &contents, &length, &error);
- g_assert_no_error (error);
-
- der = g_array_sized_new (TRUE, TRUE, sizeof (guchar), length);
- g_array_append_vals (der, contents, length);
- g_ptr_array_add (cert->cert_data, der);
-
- g_free (contents);
- g_free (filename);
-
- path = va_arg (va, gchar*);
- }
- va_end (va);
-
- tp_dbus_daemon_register_object (dbus, MOCK_TLS_CERTIFICATE_PATH, cert);
- return cert;
-}
-
-/* ----------------------------------------------------------------------------
- * TESTS
- */
-
-typedef struct {
- GMainLoop *loop;
- TpDBusDaemon *dbus;
- const gchar *dbus_name;
- MockTLSCertificate *mock;
- TpTLSCertificate *cert;
- GAsyncResult *result;
-} Test;
-
-static void
-setup (Test *test, gconstpointer data)
-{
- GError *error = NULL;
- GckModule *module;
- const gchar *trust_uris[2] = { MOCK_SLOT_ONE_URI, NULL };
-
- test->loop = g_main_loop_new (NULL, FALSE);
-
- test->dbus = tp_dbus_daemon_dup (&error);
- g_assert_no_error (error);
-
- test->dbus_name = tp_dbus_daemon_get_unique_name (test->dbus);
-
- test->result = NULL;
- test->cert = NULL;
-
- /* Add our mock module as the only PKCS#11 module */
- module = gck_module_new (&mock_default_functions);
- mock_C_Initialize (NULL);
-
- gcr_pkcs11_set_modules (NULL);
- gcr_pkcs11_add_module (module);
- gcr_pkcs11_set_trust_lookup_uris (trust_uris);
-}
-
-static void
-teardown (Test *test, gconstpointer data)
-{
- mock_C_Finalize (NULL);
-
- test->dbus_name = NULL;
-
- if (test->mock)
- {
- tp_dbus_daemon_unregister_object (test->dbus, test->mock);
- g_object_unref (test->mock);
- test->mock = NULL;
- }
-
- if (test->result)
- g_object_unref (test->result);
- test->result = NULL;
-
- if (test->cert)
- g_object_unref (test->cert);
- test->cert = NULL;
-
- g_main_loop_unref (test->loop);
- test->loop = NULL;
-
- g_object_unref (test->dbus);
- test->dbus = NULL;
-}
-
-static void
-add_certificate_to_mock (Test *test,
- const gchar *certificate,
- const gchar *peer)
-{
- GError *error = NULL;
- GcrCertificate *cert;
- gchar *contents;
- gsize length;
- gchar *path;
-
- path = g_build_filename (g_getenv ("EMPATHY_SRCDIR"),
- "tests", "certificates", certificate, NULL);
-
- g_file_get_contents (path, &contents, &length, &error);
- g_assert_no_error (error);
-
- cert = gcr_simple_certificate_new ((const guchar *)contents, length);
- mock_module_add_certificate (cert);
- mock_module_add_assertion (cert,
- peer ? CKT_X_PINNED_CERTIFICATE : CKT_X_ANCHORED_CERTIFICATE,
- GCR_PURPOSE_SERVER_AUTH, peer);
- g_object_unref (cert);
-
- g_free (contents);
- g_free (path);
-}
-
-static void
-fetch_callback_result (GObject *object,
- GAsyncResult *res,
- gpointer user_data)
-{
- Test *test = user_data;
- g_assert (!test->result);
- test->result = g_object_ref (res);
- g_main_loop_quit (test->loop);
-}
-
-static void
-ensure_certificate_proxy (Test *test)
-{
- GError *error = NULL;
- GQuark features[] = { TP_TLS_CERTIFICATE_FEATURE_CORE, 0 };
-
- if (test->cert)
- return;
-
- /* Create and prepare a certificate */
- /* We don't use tp_tls_certificate_new() as we don't pass a parent */
- test->cert = g_object_new (TP_TYPE_TLS_CERTIFICATE,
- "dbus-daemon", test->dbus,
- "bus-name", test->dbus_name,
- "object-path", MOCK_TLS_CERTIFICATE_PATH,
- NULL);
-
- tp_proxy_prepare_async (test->cert, features, fetch_callback_result, test);
- g_main_loop_run (test->loop);
- tp_proxy_prepare_finish (test->cert, test->result, &error);
- g_assert_no_error (error);
-
- /* Clear for any future async stuff */
- g_object_unref (test->result);
- test->result = NULL;
-}
-
-/* A simple test to make sure the test infrastructure is working */
-static void
-test_certificate_mock_basics (Test *test,
- gconstpointer data G_GNUC_UNUSED)
-{
- GError *error = NULL;
-
- test->mock = mock_tls_certificate_new_and_register (test->dbus,
- "server-cert.cer", NULL);
-
- ensure_certificate_proxy (test);
-
- tp_tls_certificate_accept_async (test->cert, fetch_callback_result, test);
- g_main_loop_run (test->loop);
- tp_tls_certificate_accept_finish (test->cert, test->result, &error);
- g_assert_no_error (error);
-
- g_assert (test->mock->state == TP_TLS_CERTIFICATE_STATE_ACCEPTED);
-}
-
-static void
-test_certificate_verify_success_with_pkcs11_lookup (Test *test,
- gconstpointer data G_GNUC_UNUSED)
-{
- TpTLSCertificateRejectReason reason = 0;
- GError *error = NULL;
- EmpathyTLSVerifier *verifier;
- const gchar *reference_identities[] = {
- "test-server.empathy.gnome.org",
- NULL
- };
-
- /*
- * In this test the mock TLS connection only has one certificate
- * not a full certificat echain. The root anchor certificate is
- * retrieved from PKCS#11 storage.
- */
-
- test->mock = mock_tls_certificate_new_and_register (test->dbus,
- "server-cert.cer", NULL);
-
- /* We add the collabora directory with the collabora root */
- add_certificate_to_mock (test, "certificate-authority.cer", NULL);
-
- ensure_certificate_proxy (test);
-
- verifier = empathy_tls_verifier_new (test->cert, "test-server.empathy.gnome.org",
- reference_identities);
- empathy_tls_verifier_verify_async (verifier, fetch_callback_result, test);
- g_main_loop_run (test->loop);
-
- empathy_tls_verifier_verify_finish (verifier, test->result, &reason,
- NULL, &error);
- g_assert_no_error (error);
-
- /* Yay the verification was a success! */
-
- g_clear_error (&error);
- g_object_unref (verifier);
-}
-
-static void
-test_certificate_verify_success_with_full_chain (Test *test,
- gconstpointer data G_GNUC_UNUSED)
-{
- TpTLSCertificateRejectReason reason = 0;
- GError *error = NULL;
- EmpathyTLSVerifier *verifier;
- const gchar *reference_identities[] = {
- "test-server.empathy.gnome.org",
- NULL
- };
-
- /*
- * In this test the mock TLS connection has a full certificate
- * chain. We look for an anchor certificate in the chain.
- */
-
- test->mock = mock_tls_certificate_new_and_register (test->dbus,
- "server-cert.cer", "certificate-authority.cer", NULL);
-
- /* We add the collabora directory with the collabora root */
- add_certificate_to_mock (test, "certificate-authority.cer", NULL);
-
- ensure_certificate_proxy (test);
-
- verifier = empathy_tls_verifier_new (test->cert, "test-server.empathy.gnome.org",
- reference_identities);
- empathy_tls_verifier_verify_async (verifier, fetch_callback_result, test);
- g_main_loop_run (test->loop);
- empathy_tls_verifier_verify_finish (verifier, test->result, &reason,
- NULL, &error);
- g_assert_no_error (error);
-
- /* Yay the verification was a success! */
-
- g_clear_error (&error);
- g_object_unref (verifier);
-}
-
-static void
-test_certificate_verify_root_not_found (Test *test,
- gconstpointer data G_GNUC_UNUSED)
-{
- TpTLSCertificateRejectReason reason = 0;
- GError *error = NULL;
- EmpathyTLSVerifier *verifier;
- const gchar *reference_identities[] = {
- "test-server.empathy.gnome.org",
- NULL
- };
-
- test->mock = mock_tls_certificate_new_and_register (test->dbus,
- "server-cert.cer", NULL);
-
- /* Note that we're not adding any place to find root certs */
-
- ensure_certificate_proxy (test);
-
- verifier = empathy_tls_verifier_new (test->cert, "test-server.empathy.gnome.org",
- reference_identities);
- empathy_tls_verifier_verify_async (verifier, fetch_callback_result, test);
- g_main_loop_run (test->loop);
-
- empathy_tls_verifier_verify_finish (verifier, test->result, &reason,
- NULL, &error);
-
- /* And it should say we're self-signed (oddly enough) */
- g_assert_error (error, G_IO_ERROR,
- TP_TLS_CERTIFICATE_REJECT_REASON_SELF_SIGNED);
-
- g_clear_error (&error);
- g_object_unref (verifier);
-}
-
-static void
-test_certificate_verify_root_not_anchored (Test *test,
- gconstpointer data G_GNUC_UNUSED)
-{
- TpTLSCertificateRejectReason reason = 0;
- GError *error = NULL;
- EmpathyTLSVerifier *verifier;
- const gchar *reference_identities[] = {
- "test-server.empathy.gnome.org",
- NULL
- };
-
- test->mock = mock_tls_certificate_new_and_register (test->dbus,
- "server-cert.cer", "certificate-authority.cer", NULL);
-
- /* Note that we're not adding any place to find root certs */
-
- ensure_certificate_proxy (test);
-
- verifier = empathy_tls_verifier_new (test->cert, "test-server.empathy.gnome.org",
- reference_identities);
- empathy_tls_verifier_verify_async (verifier, fetch_callback_result, test);
- g_main_loop_run (test->loop);
-
- empathy_tls_verifier_verify_finish (verifier, test->result, &reason,
- NULL, &error);
-
- /* And it should say we're self-signed (oddly enough) */
- g_assert_error (error, G_IO_ERROR,
- TP_TLS_CERTIFICATE_REJECT_REASON_SELF_SIGNED);
-
- g_clear_error (&error);
- g_object_unref (verifier);
-}
-
-static void
-test_certificate_verify_identities_invalid (Test *test,
- gconstpointer data G_GNUC_UNUSED)
-{
- TpTLSCertificateRejectReason reason = 0;
- GError *error = NULL;
- EmpathyTLSVerifier *verifier;
- const gchar *reference_identities[] = {
- "invalid.host.name",
- NULL
- };
-
- test->mock = mock_tls_certificate_new_and_register (test->dbus,
- "server-cert.cer", "certificate-authority.cer", NULL);
-
- /* We add the collabora directory with the collabora root */
- add_certificate_to_mock (test, "certificate-authority.cer", NULL);
-
- ensure_certificate_proxy (test);
-
- verifier = empathy_tls_verifier_new (test->cert, "invalid.host.name",
- reference_identities);
- empathy_tls_verifier_verify_async (verifier, fetch_callback_result, test);
- g_main_loop_run (test->loop);
-
- empathy_tls_verifier_verify_finish (verifier, test->result, &reason,
- NULL, &error);
-
- /* And it should say we're self-signed (oddly enough) */
- g_assert_error (error, G_IO_ERROR,
- TP_TLS_CERTIFICATE_REJECT_REASON_HOSTNAME_MISMATCH);
-
- g_clear_error (&error);
- g_object_unref (verifier);
-}
-
-static void
-test_certificate_verify_uses_reference_identities (Test *test,
- gconstpointer data G_GNUC_UNUSED)
-{
- TpTLSCertificateRejectReason reason = 0;
- GError *error = NULL;
- EmpathyTLSVerifier *verifier;
- const gchar *reference_identities[] = {
- "invalid.host.name",
- NULL
- };
-
- test->mock = mock_tls_certificate_new_and_register (test->dbus,
- "server-cert.cer", "certificate-authority.cer", NULL);
-
- /* We add the collabora directory with the collabora root */
- add_certificate_to_mock (test, "certificate-authority.cer", NULL);
-
- ensure_certificate_proxy (test);
-
- /* Should be using the reference_identities and not host name for checks */
- verifier = empathy_tls_verifier_new (test->cert, "test-server.empathy.gnome.org",
- reference_identities);
- empathy_tls_verifier_verify_async (verifier, fetch_callback_result, test);
- g_main_loop_run (test->loop);
-
- empathy_tls_verifier_verify_finish (verifier, test->result, &reason,
- NULL, &error);
-
- /* And it should say we're self-signed (oddly enough) */
- g_assert_error (error, G_IO_ERROR,
- TP_TLS_CERTIFICATE_REJECT_REASON_HOSTNAME_MISMATCH);
-
- g_clear_error (&error);
- g_object_unref (verifier);
-}
-
-static void
-test_certificate_verify_success_with_pinned (Test *test,
- gconstpointer data G_GNUC_UNUSED)
-{
- TpTLSCertificateRejectReason reason = 0;
- GError *error = NULL;
- EmpathyTLSVerifier *verifier;
- const gchar *reference_identities[] = {
- "test-server.empathy.gnome.org",
- NULL
- };
-
- /*
- * In this test the mock TLS connection has a full certificate
- * chain. We look for an anchor certificate in the chain.
- */
-
- test->mock = mock_tls_certificate_new_and_register (test->dbus,
- "server-cert.cer", NULL);
-
- /* We add the collabora directory with the collabora root */
- add_certificate_to_mock (test, "server-cert.cer", "test-server.empathy.gnome.org");
-
- ensure_certificate_proxy (test);
-
- verifier = empathy_tls_verifier_new (test->cert, "test-server.empathy.gnome.org",
- reference_identities);
- empathy_tls_verifier_verify_async (verifier, fetch_callback_result, test);
- g_main_loop_run (test->loop);
- empathy_tls_verifier_verify_finish (verifier, test->result, &reason,
- NULL, &error);
- g_assert_no_error (error);
-
- /* Yay the verification was a success! */
-
- g_clear_error (&error);
- g_object_unref (verifier);
-}
-
-static void
-test_certificate_verify_pinned_wrong_host (Test *test,
- gconstpointer data G_GNUC_UNUSED)
-{
- TpTLSCertificateRejectReason reason = 0;
- GError *error = NULL;
- EmpathyTLSVerifier *verifier;
- const gchar *reference_identities[] = {
- "test-server.empathy.gnome.org",
- NULL
- };
-
- test->mock = mock_tls_certificate_new_and_register (test->dbus,
- "server-cert.cer", NULL);
-
- /* Note that we're not adding any place to find root certs */
-
- ensure_certificate_proxy (test);
-
- verifier = empathy_tls_verifier_new (test->cert, "another.gnome.org",
- reference_identities);
- empathy_tls_verifier_verify_async (verifier, fetch_callback_result, test);
- g_main_loop_run (test->loop);
-
- empathy_tls_verifier_verify_finish (verifier, test->result, &reason,
- NULL, &error);
-
- /* And it should say we're self-signed */
- g_assert_error (error, G_IO_ERROR,
- TP_TLS_CERTIFICATE_REJECT_REASON_SELF_SIGNED);
-
- g_clear_error (&error);
- g_object_unref (verifier);
-}
-
-int
-main (int argc,
- char **argv)
-{
- int result;
-
- test_init (argc, argv);
- gnutls_global_init ();
-
- g_test_add ("/tls/certificate_basics", Test, NULL,
- setup, test_certificate_mock_basics, teardown);
- g_test_add ("/tls/certificate_verify_success_with_pkcs11_lookup", Test, NULL,
- setup, test_certificate_verify_success_with_pkcs11_lookup, teardown);
- g_test_add ("/tls/certificate_verify_success_with_full_chain", Test, NULL,
- setup, test_certificate_verify_success_with_full_chain, teardown);
- g_test_add ("/tls/certificate_verify_root_not_found", Test, NULL,
- setup, test_certificate_verify_root_not_found, teardown);
- g_test_add ("/tls/certificate_verify_root_not_anchored", Test, NULL,
- setup, test_certificate_verify_root_not_anchored, teardown);
- g_test_add ("/tls/certificate_verify_identities_invalid", Test, NULL,
- setup, test_certificate_verify_identities_invalid, teardown);
- g_test_add ("/tls/certificate_verify_uses_reference_identities", Test, NULL,
- setup, test_certificate_verify_uses_reference_identities, teardown);
- g_test_add ("/tls/certificate_verify_success_with_pinned", Test, NULL,
- setup, test_certificate_verify_success_with_pinned, teardown);
- g_test_add ("/tls/certificate_verify_pinned_wrong_host", Test, NULL,
- setup, test_certificate_verify_pinned_wrong_host, teardown);
-
- result = g_test_run ();
- test_deinit ();
- return result;
-}
diff --git a/tests/interactive/.gitignore b/tests/interactive/.gitignore
deleted file mode 100644
index 0558c209..00000000
--- a/tests/interactive/.gitignore
+++ /dev/null
@@ -1,15 +0,0 @@
-contact-manager
-empathy-logs
-contact-run-until-ready
-contact-run-until-ready-2
-empetit
-test-empathy-account-assistant
-test-empathy-contact-blocking-dialog
-test-empathy-presence-chooser
-test-empathy-status-preset-dialog
-test-empathy-protocol-chooser
-test-empathy-account-chooser
-test-empathy-calendar-button
-test-empathy-roster-view
-test-empathy-dual-roster-view
-test-empathy-roster-model-aggregator
diff --git a/tests/interactive/Makefile.am b/tests/interactive/Makefile.am
deleted file mode 100644
index 86d8fe1c..00000000
--- a/tests/interactive/Makefile.am
+++ /dev/null
@@ -1,38 +0,0 @@
-AM_CPPFLAGS = \
- $(ERROR_CFLAGS) \
- -I$(top_srcdir)/tp-account-widgets \
- -I$(top_srcdir)/libempathy \
- -I$(top_srcdir)/libempathy-gtk \
- -DPKGDATADIR=\""$(pkgdatadir)"\" \
- $(EMPATHY_CFLAGS) \
- $(WARN_CFLAGS) \
- $(DISABLE_DEPRECATED)
-
-LDADD = \
- $(top_builddir)/tp-account-widgets/libtp-account-widgets.la \
- $(top_builddir)/libempathy-gtk/libempathy-gtk.la \
- $(top_builddir)/libempathy/libempathy.la \
- $(EMPATHY_LIBS)
-
-noinst_PROGRAMS = \
- empathy-logs \
- test-empathy-contact-blocking-dialog \
- test-empathy-presence-chooser \
- test-empathy-status-preset-dialog \
- test-empathy-protocol-chooser \
- test-empathy-account-chooser \
- test-empathy-calendar-button \
- test-empathy-roster-view \
- test-empathy-dual-roster-view \
- test-empathy-roster-model-aggregator
-
-empathy_logs_SOURCES = empathy-logs.c
-test_empathy_contact_blocking_dialog_SOURCES = test-empathy-contact-blocking-dialog.c
-test_empathy_presence_chooser_SOURCES = test-empathy-presence-chooser.c
-test_empathy_status_preset_dialog_SOURCES = test-empathy-status-preset-dialog.c
-test_empathy_protocol_chooser_SOURCES = test-empathy-protocol-chooser.c
-test_empathy_account_chooser_SOURCES = test-empathy-account-chooser.c
-test_empathy_calendar_button_SOURCES = test-empathy-calendar-button.c
-test_empathy_roster_view_SOURCES = test-empathy-roster-view.c
-test_empathy_dual_roster_view_SOURCES = test-empathy-dual-roster-view.c
-test_empathy_roster_model_aggregator_SOURCES = test-empathy-roster-model-aggregator.c
diff --git a/tests/interactive/empathy-logs.c b/tests/interactive/empathy-logs.c
deleted file mode 100644
index 613bf751..00000000
--- a/tests/interactive/empathy-logs.c
+++ /dev/null
@@ -1,76 +0,0 @@
-/*
- * 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., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301 USA
- *
- * Authors: Xavier Claessens <xclaesse@gmail.com>
- */
-
-#include "config.h"
-
-#include <stdlib.h>
-#include <glib.h>
-#include <gtk/gtk.h>
-
-#include "empathy-debug.h"
-#include "empathy-log-window.h"
-#include "empathy-ui-utils.h"
-#include "empathy-utils.h"
-
-static void
-destroy_cb (GtkWidget *dialog,
- gpointer user_data)
-{
- gtk_main_quit ();
-}
-
-static void
-account_manager_prepare_cb (GObject *source,
- GAsyncResult *result,
- gpointer user_data)
-{
- GError *error = NULL;
- GtkWidget *window;
-
- tp_proxy_prepare_finish (source, result, &error);
- g_assert_no_error (error);
-
- window = empathy_log_window_show (NULL, NULL, FALSE, NULL);
-
- g_signal_connect (window, "destroy", G_CALLBACK (destroy_cb), NULL);
-}
-
-int
-main (int argc,
- char *argv[])
-{
- TpAccountManager *mgr;
-
- gtk_init (&argc, &argv);
- empathy_gtk_init ();
- g_set_application_name (PACKAGE_NAME);
- gtk_window_set_default_icon_name ("empathy");
-
- mgr = tp_account_manager_dup ();
-
- tp_proxy_prepare_async (mgr, NULL, account_manager_prepare_cb, NULL);
-
- gtk_main ();
-
- g_object_unref (mgr);
-
- return EXIT_SUCCESS;
-}
diff --git a/tests/interactive/test-empathy-account-chooser.c b/tests/interactive/test-empathy-account-chooser.c
deleted file mode 100644
index 159f8fcf..00000000
--- a/tests/interactive/test-empathy-account-chooser.c
+++ /dev/null
@@ -1,47 +0,0 @@
-#include "config.h"
-
-#include <gtk/gtk.h>
-
-#include "empathy-account-chooser.h"
-#include "empathy-ui-utils.h"
-
-static void
-filter_func (TpAccount *account,
- EmpathyAccountChooserFilterResultCallback callback,
- gpointer callback_data,
- gpointer user_data)
-{
- g_assert (TP_IS_ACCOUNT (account));
- callback (TRUE, callback_data);
-}
-
-int
-main (int argc,
- char **argv)
-{
- GtkWidget *window, *c;
-
- gtk_init (&argc, &argv);
- empathy_gtk_init ();
-
- window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
- c = empathy_account_chooser_new ();
-
- empathy_account_chooser_set_has_all_option (EMPATHY_ACCOUNT_CHOOSER (c),
- TRUE);
-
- empathy_account_chooser_set_filter (EMPATHY_ACCOUNT_CHOOSER (c),
- filter_func, NULL);
-
- gtk_container_add (GTK_CONTAINER (window), c);
-
- /* gtk_window_set_default_size (GTK_WINDOW (window), 150, -1);*/
- gtk_widget_show_all (window);
-
- g_signal_connect_swapped (window, "destroy",
- G_CALLBACK (gtk_main_quit), NULL);
-
- gtk_main ();
-
- return 0;
-}
diff --git a/tests/interactive/test-empathy-calendar-button.c b/tests/interactive/test-empathy-calendar-button.c
deleted file mode 100644
index a3207eed..00000000
--- a/tests/interactive/test-empathy-calendar-button.c
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
- * Copyright (C) 2012 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: Danielle Madeley <danielle.madeley@collabora.co.uk>
- */
-
-#include "config.h"
-
-#include <tp-account-widgets/tpaw-calendar-button.h>
-
-static void
-date_changed_cb (TpawCalendarButton *button,
- GDate *date,
- gpointer user_data)
-{
- if (date == NULL)
- {
- g_print ("date changed: none\n");
- }
- else
- {
- gchar buffer[128];
-
- g_date_strftime (buffer, 128, "%x", date);
- g_print ("date changed: %s\n", buffer);
- }
-}
-
-int
-main (int argc,
- char **argv)
-{
- GtkWidget *win, *button;
- GDate *date;
-
- gtk_init (&argc, &argv);
-
- win = gtk_window_new (GTK_WINDOW_TOPLEVEL);
-
- g_signal_connect_swapped (win, "destroy",
- G_CALLBACK (gtk_main_quit), NULL);
-
- button = tpaw_calendar_button_new ();
-
- date = g_date_new_dmy (30, 11, 1984);
- tpaw_calendar_button_set_date (TPAW_CALENDAR_BUTTON (button), date);
- g_date_free (date);
-
- g_signal_connect (button, "date-changed",
- G_CALLBACK (date_changed_cb), NULL);
-
- gtk_container_add (GTK_CONTAINER (win), button);
- gtk_widget_show_all (win);
-
- gtk_main ();
- return 0;
-}
diff --git a/tests/interactive/test-empathy-contact-blocking-dialog.c b/tests/interactive/test-empathy-contact-blocking-dialog.c
deleted file mode 100644
index 185f4e95..00000000
--- a/tests/interactive/test-empathy-contact-blocking-dialog.c
+++ /dev/null
@@ -1,75 +0,0 @@
-/*
- * Copyright (C) 2011 Collabora Ltd.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * 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: Danielle Madeley <danielle.madeley@collabora.co.uk>
- */
-
-#include "config.h"
-
-#include <gtk/gtk.h>
-
-#include "empathy-client-factory.h"
-#include "empathy-contact-blocking-dialog.h"
-#include "empathy-ui-utils.h"
-
-static void
-am_prepare_cb (GObject *source,
- GAsyncResult *result,
- gpointer user_data)
-{
- GMainLoop *loop = user_data;
- GtkWidget *dialog;
-
- dialog = empathy_contact_blocking_dialog_new (NULL);
-
- gtk_dialog_run (GTK_DIALOG (dialog));
-
- g_main_loop_quit (loop);
-}
-
-int
-main (int argc,
- char **argv)
- {
- EmpathyClientFactory *factory;
- TpAccountManager *am;
- GMainLoop *loop;
-
- gtk_init (&argc, &argv);
- empathy_gtk_init ();
-
- /* The blocking dialog needs the contact list for the contacts completion
- * so we prepare it first. */
- factory = empathy_client_factory_dup ();
-
- tp_simple_client_factory_add_connection_features_varargs (
- TP_SIMPLE_CLIENT_FACTORY (factory),
- TP_CONNECTION_FEATURE_CONTACT_LIST,
- NULL);
-
- am = tp_account_manager_dup ();
-
- loop = g_main_loop_new (NULL, FALSE);
-
- tp_proxy_prepare_async (am, NULL, am_prepare_cb, loop);
-
- g_main_loop_run (loop);
-
- g_object_unref (am);
- return 0;
- }
diff --git a/tests/interactive/test-empathy-dual-roster-view.c b/tests/interactive/test-empathy-dual-roster-view.c
deleted file mode 100644
index 5d2dfdc5..00000000
--- a/tests/interactive/test-empathy-dual-roster-view.c
+++ /dev/null
@@ -1,153 +0,0 @@
-#include "config.h"
-
-#include "empathy-roster-model.h"
-#include "empathy-roster-model-manager.h"
-#include "empathy-roster-view.h"
-#include "empathy-ui-utils.h"
-
-static void
-individual_activated_cb (EmpathyRosterView *self,
- FolksIndividual *individual,
- gpointer user_data)
-{
- g_assert (FOLKS_IS_INDIVIDUAL (individual));
-
- g_print ("'%s' activated\n",
- folks_alias_details_get_alias (FOLKS_ALIAS_DETAILS (individual)));
-}
-
-static void
-popup_individual_menu_cb (EmpathyRosterView *self,
- FolksIndividual *individual,
- guint button,
- guint time,
- gpointer user_data)
-{
- GtkWidget *menu, *item;
-
- g_print ("'%s' popup menu\n",
- folks_alias_details_get_alias (FOLKS_ALIAS_DETAILS (individual)));
-
- menu = gtk_menu_new ();
-
- g_signal_connect (menu, "deactivate",
- G_CALLBACK (gtk_widget_destroy), NULL);
-
- item = gtk_menu_item_new_with_label (folks_alias_details_get_alias (
- FOLKS_ALIAS_DETAILS (individual)));
- gtk_widget_show (item);
-
- gtk_menu_shell_append (GTK_MENU_SHELL (menu), item);
-
- gtk_menu_attach_to_widget (GTK_MENU (menu), GTK_WIDGET (self), NULL);
-
- gtk_menu_popup (GTK_MENU (menu), NULL, NULL, NULL, NULL, button, time);
-}
-
-static gboolean
-individual_tooltip_cb (EmpathyRosterView *view,
- FolksIndividual *individual,
- gboolean keyboard_mode,
- GtkTooltip *tooltip,
- gpointer user_data)
-{
- gtk_tooltip_set_text (tooltip,
- folks_alias_details_get_alias (FOLKS_ALIAS_DETAILS (individual)));
-
- return TRUE;
-}
-
-static void
-empty_cb (EmpathyRosterView *view,
- GParamSpec *spec,
- gpointer user_data)
-{
- if (empathy_roster_view_is_empty (view))
- g_print ("view is now empty\n");
- else
- g_print ("view is no longer empty\n");
-}
-
-static GtkWidget *
-create_view_box (EmpathyRosterModel *model,
- gboolean show_offline,
- gboolean show_groups)
-{
- GtkWidget *view, *scrolled, *box, *search;
-
- box = gtk_box_new (GTK_ORIENTATION_VERTICAL, 8);
-
- view = empathy_roster_view_new (model);
-
- g_signal_connect (view, "individual-activated",
- G_CALLBACK (individual_activated_cb), NULL);
- g_signal_connect (view, "popup-individual-menu",
- G_CALLBACK (popup_individual_menu_cb), NULL);
- g_signal_connect (view, "notify::empty",
- G_CALLBACK (empty_cb), NULL);
- g_signal_connect (view, "individual-tooltip",
- G_CALLBACK (individual_tooltip_cb), NULL);
-
- gtk_widget_set_has_tooltip (view, TRUE);
-
- empathy_roster_view_show_offline (EMPATHY_ROSTER_VIEW (view), show_offline);
- empathy_roster_view_show_groups (EMPATHY_ROSTER_VIEW (view), show_groups);
-
- search = tpaw_live_search_new (view);
- empathy_roster_view_set_live_search (EMPATHY_ROSTER_VIEW (view),
- TPAW_LIVE_SEARCH (search));
-
- scrolled = gtk_scrolled_window_new (NULL, NULL);
- gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled),
- GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC);
-
- egg_list_box_add_to_scrolled (EGG_LIST_BOX (view),
- GTK_SCROLLED_WINDOW (scrolled));
-
- gtk_box_pack_start (GTK_BOX (box), search, FALSE, TRUE, 0);
- gtk_box_pack_start (GTK_BOX (box), scrolled, TRUE, TRUE, 0);
-
- return box;
-}
-
-int
-main (int argc,
- char **argv)
-{
- GtkWidget *window, *view1, *view2, *box_horiz;
- EmpathyIndividualManager *mgr;
- EmpathyRosterModel *model;
-
- gtk_init (&argc, &argv);
- empathy_gtk_init ();
-
- window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
-
- empathy_set_css_provider (window);
-
- box_horiz = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 8);
-
- mgr = empathy_individual_manager_dup_singleton ();
-
- model = EMPATHY_ROSTER_MODEL (empathy_roster_model_manager_new (mgr));
-
- view1 = create_view_box (model, TRUE, TRUE);
- view2 = create_view_box (model, FALSE, FALSE);
-
- g_object_unref (model);
- g_object_unref (mgr);
-
- gtk_box_pack_start (GTK_BOX (box_horiz), view1, FALSE, TRUE, 0);
- gtk_box_pack_start (GTK_BOX (box_horiz), view2, FALSE, TRUE, 0);
- gtk_container_add (GTK_CONTAINER (window), box_horiz);
-
- gtk_window_set_default_size (GTK_WINDOW (window), 600, 600);
- gtk_widget_show_all (window);
-
- g_signal_connect_swapped (window, "destroy",
- G_CALLBACK (gtk_main_quit), NULL);
-
- gtk_main ();
-
- return 0;
-}
diff --git a/tests/interactive/test-empathy-presence-chooser.c b/tests/interactive/test-empathy-presence-chooser.c
deleted file mode 100644
index 208c9a12..00000000
--- a/tests/interactive/test-empathy-presence-chooser.c
+++ /dev/null
@@ -1,55 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * Copyright (C) 2009 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: Davyd Madeley <davyd.madeley@collabora.co.uk>
- */
-
-#include "config.h"
-
-#include <gtk/gtk.h>
-
-#include "empathy-presence-chooser.h"
-#include "empathy-status-presets.h"
-#include "empathy-ui-utils.h"
-
-int
-main (int argc, char **argv)
-{
- GtkWidget *window;
- GtkWidget *chooser;
-
- gtk_init (&argc, &argv);
- empathy_gtk_init ();
-
- empathy_status_presets_get_all ();
-
- window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
- chooser = empathy_presence_chooser_new ();
- gtk_container_add (GTK_CONTAINER (window), chooser);
-
- gtk_window_set_default_size (GTK_WINDOW (window), 150, -1);
- gtk_widget_show_all (window);
-
- g_signal_connect_swapped (window, "destroy",
- G_CALLBACK (gtk_main_quit), NULL);
-
- gtk_main ();
-
- return 0;
-}
diff --git a/tests/interactive/test-empathy-protocol-chooser.c b/tests/interactive/test-empathy-protocol-chooser.c
deleted file mode 100644
index ca548a85..00000000
--- a/tests/interactive/test-empathy-protocol-chooser.c
+++ /dev/null
@@ -1,31 +0,0 @@
-#include "config.h"
-
-#include <gtk/gtk.h>
-
-#include "empathy-protocol-chooser.h"
-#include "empathy-ui-utils.h"
-
-int
-main (int argc,
- char **argv)
-{
- GtkWidget *window, *c;
-
- gtk_init (&argc, &argv);
- empathy_gtk_init ();
-
- window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
- c = empathy_protocol_chooser_new ();
-
- gtk_container_add (GTK_CONTAINER (window), c);
-
- /* gtk_window_set_default_size (GTK_WINDOW (window), 150, -1);*/
- gtk_widget_show_all (window);
-
- g_signal_connect_swapped (window, "destroy",
- G_CALLBACK (gtk_main_quit), NULL);
-
- gtk_main ();
-
- return 0;
-}
diff --git a/tests/interactive/test-empathy-roster-model-aggregator.c b/tests/interactive/test-empathy-roster-model-aggregator.c
deleted file mode 100644
index b5584315..00000000
--- a/tests/interactive/test-empathy-roster-model-aggregator.c
+++ /dev/null
@@ -1,163 +0,0 @@
-#include "config.h"
-
-#include "empathy-roster-model-aggregator.h"
-#include "empathy-roster-model.h"
-#include "empathy-roster-view.h"
-#include "empathy-ui-utils.h"
-
-static gboolean show_offline = FALSE;
-static gboolean show_groups = FALSE;
-
-static GOptionEntry entries[] =
- {
- { "offline", 0, 0, G_OPTION_ARG_NONE, &show_offline, "Show offline contacts", NULL },
- { "groups", 0, 0, G_OPTION_ARG_NONE, &show_groups, "Show groups", NULL },
- { NULL }
- };
-
-static void
-individual_activated_cb (EmpathyRosterView *self,
- FolksIndividual *individual,
- gpointer user_data)
-{
- g_assert (FOLKS_IS_INDIVIDUAL (individual));
-
- g_print ("'%s' activated\n",
- folks_alias_details_get_alias (FOLKS_ALIAS_DETAILS (individual)));
-}
-
-static void
-popup_individual_menu_cb (EmpathyRosterView *self,
- FolksIndividual *individual,
- guint button,
- guint time,
- gpointer user_data)
-{
- GtkWidget *menu, *item;
-
- g_print ("'%s' popup menu\n",
- folks_alias_details_get_alias (FOLKS_ALIAS_DETAILS (individual)));
-
- menu = gtk_menu_new ();
-
- g_signal_connect (menu, "deactivate",
- G_CALLBACK (gtk_widget_destroy), NULL);
-
- item = gtk_menu_item_new_with_label (folks_alias_details_get_alias (
- FOLKS_ALIAS_DETAILS (individual)));
- gtk_widget_show (item);
-
- gtk_menu_shell_append (GTK_MENU_SHELL (menu), item);
-
- gtk_menu_attach_to_widget (GTK_MENU (menu), GTK_WIDGET (self), NULL);
-
- gtk_menu_popup (GTK_MENU (menu), NULL, NULL, NULL, NULL, button, time);
-}
-
-static gboolean
-individual_tooltip_cb (EmpathyRosterView *view,
- FolksIndividual *individual,
- gboolean keyboard_mode,
- GtkTooltip *tooltip,
- gpointer user_data)
-{
- gtk_tooltip_set_text (tooltip,
- folks_alias_details_get_alias (FOLKS_ALIAS_DETAILS (individual)));
-
- return TRUE;
-}
-
-static void
-empty_cb (EmpathyRosterView *view,
- GParamSpec *spec,
- gpointer user_data)
-{
- if (empathy_roster_view_is_empty (view))
- g_print ("view is now empty\n");
- else
- g_print ("view is no longer empty\n");
-}
-
-static gboolean
-filter (EmpathyRosterModel *model,
- FolksIndividual *individual,
- gpointer user_data)
-{
- if (folks_avatar_details_get_avatar (FOLKS_AVATAR_DETAILS (individual))
- == NULL)
- return FALSE;
-
- return TRUE;
-}
-
-int
-main (int argc,
- char **argv)
-{
- GtkWidget *window, *view, *scrolled, *box, *search;
- GError *error = NULL;
- GOptionContext *context;
- EmpathyRosterModel *model;
-
- gtk_init (&argc, &argv);
- empathy_gtk_init ();
-
- context = g_option_context_new ("- test tree model performance");
- g_option_context_add_main_entries (context, entries, GETTEXT_PACKAGE);
- g_option_context_add_group (context, gtk_get_option_group (TRUE));
- if (!g_option_context_parse (context, &argc, &argv, &error))
- {
- g_print ("option parsing failed: %s\n", error->message);
- return 1;
- }
-
- window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
-
- empathy_set_css_provider (window);
-
- box = gtk_box_new (GTK_ORIENTATION_VERTICAL, 8);
-
- model = EMPATHY_ROSTER_MODEL (empathy_roster_model_aggregator_new (
- filter, NULL));
- view = empathy_roster_view_new (model);
-
- g_object_unref (model);
- g_signal_connect (view, "individual-activated",
- G_CALLBACK (individual_activated_cb), NULL);
- g_signal_connect (view, "popup-individual-menu",
- G_CALLBACK (popup_individual_menu_cb), NULL);
- g_signal_connect (view, "notify::empty",
- G_CALLBACK (empty_cb), NULL);
- g_signal_connect (view, "individual-tooltip",
- G_CALLBACK (individual_tooltip_cb), NULL);
-
- gtk_widget_set_has_tooltip (view, TRUE);
-
- empathy_roster_view_show_offline (EMPATHY_ROSTER_VIEW (view), show_offline);
- empathy_roster_view_show_groups (EMPATHY_ROSTER_VIEW (view), show_groups);
-
- search = tpaw_live_search_new (view);
- empathy_roster_view_set_live_search (EMPATHY_ROSTER_VIEW (view),
- TPAW_LIVE_SEARCH (search));
-
- scrolled = gtk_scrolled_window_new (NULL, NULL);
- gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled),
- GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC);
-
- egg_list_box_add_to_scrolled (EGG_LIST_BOX (view),
- GTK_SCROLLED_WINDOW (scrolled));
-
- gtk_box_pack_start (GTK_BOX (box), search, FALSE, TRUE, 0);
- gtk_box_pack_start (GTK_BOX (box), scrolled, TRUE, TRUE, 0);
- gtk_container_add (GTK_CONTAINER (window), box);
-
- gtk_window_set_default_size (GTK_WINDOW (window), 300, 600);
- gtk_widget_show_all (window);
-
- g_signal_connect_swapped (window, "destroy",
- G_CALLBACK (gtk_main_quit), NULL);
-
- gtk_main ();
-
- return 0;
-}
diff --git a/tests/interactive/test-empathy-roster-view.c b/tests/interactive/test-empathy-roster-view.c
deleted file mode 100644
index eb5cf6c6..00000000
--- a/tests/interactive/test-empathy-roster-view.c
+++ /dev/null
@@ -1,155 +0,0 @@
-#include "config.h"
-
-#include "empathy-roster-model.h"
-#include "empathy-roster-model-manager.h"
-#include "empathy-roster-view.h"
-#include "empathy-ui-utils.h"
-
-static gboolean show_offline = FALSE;
-static gboolean show_groups = FALSE;
-
-static GOptionEntry entries[] =
-{
- { "offline", 0, 0, G_OPTION_ARG_NONE, &show_offline, "Show offline contacts", NULL },
- { "groups", 0, 0, G_OPTION_ARG_NONE, &show_groups, "Show groups", NULL },
- { NULL }
-};
-
-static void
-individual_activated_cb (EmpathyRosterView *self,
- FolksIndividual *individual,
- gpointer user_data)
-{
- g_assert (FOLKS_IS_INDIVIDUAL (individual));
-
- g_print ("'%s' activated\n",
- folks_alias_details_get_alias (FOLKS_ALIAS_DETAILS (individual)));
-}
-
-static void
-popup_individual_menu_cb (EmpathyRosterView *self,
- FolksIndividual *individual,
- guint button,
- guint time,
- gpointer user_data)
-{
- GtkWidget *menu, *item;
-
- g_print ("'%s' popup menu\n",
- folks_alias_details_get_alias (FOLKS_ALIAS_DETAILS (individual)));
-
- menu = gtk_menu_new ();
-
- g_signal_connect (menu, "deactivate",
- G_CALLBACK (gtk_widget_destroy), NULL);
-
- item = gtk_menu_item_new_with_label (folks_alias_details_get_alias (
- FOLKS_ALIAS_DETAILS (individual)));
- gtk_widget_show (item);
-
- gtk_menu_shell_append (GTK_MENU_SHELL (menu), item);
-
- gtk_menu_attach_to_widget (GTK_MENU (menu), GTK_WIDGET (self), NULL);
-
- gtk_menu_popup (GTK_MENU (menu), NULL, NULL, NULL, NULL, button, time);
-}
-
-static gboolean
-individual_tooltip_cb (EmpathyRosterView *view,
- FolksIndividual *individual,
- gboolean keyboard_mode,
- GtkTooltip *tooltip,
- gpointer user_data)
-{
- gtk_tooltip_set_text (tooltip,
- folks_alias_details_get_alias (FOLKS_ALIAS_DETAILS (individual)));
-
- return TRUE;
-}
-
-static void
-empty_cb (EmpathyRosterView *view,
- GParamSpec *spec,
- gpointer user_data)
-{
- if (empathy_roster_view_is_empty (view))
- g_print ("view is now empty\n");
- else
- g_print ("view is no longer empty\n");
-}
-
-int
-main (int argc,
- char **argv)
-{
- GtkWidget *window, *view, *scrolled, *box, *search;
- EmpathyIndividualManager *mgr;
- GError *error = NULL;
- GOptionContext *context;
- EmpathyRosterModel *model;
-
- gtk_init (&argc, &argv);
- empathy_gtk_init ();
-
- context = g_option_context_new ("- test tree model performance");
- g_option_context_add_main_entries (context, entries, GETTEXT_PACKAGE);
- g_option_context_add_group (context, gtk_get_option_group (TRUE));
- if (!g_option_context_parse (context, &argc, &argv, &error))
- {
- g_print ("option parsing failed: %s\n", error->message);
- return 1;
- }
-
- window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
-
- empathy_set_css_provider (window);
-
- box = gtk_box_new (GTK_ORIENTATION_VERTICAL, 8);
-
- mgr = empathy_individual_manager_dup_singleton ();
-
- model = EMPATHY_ROSTER_MODEL (empathy_roster_model_manager_new (mgr));
- view = empathy_roster_view_new (model);
-
- g_object_unref (model);
- g_signal_connect (view, "individual-activated",
- G_CALLBACK (individual_activated_cb), NULL);
- g_signal_connect (view, "popup-individual-menu",
- G_CALLBACK (popup_individual_menu_cb), NULL);
- g_signal_connect (view, "notify::empty",
- G_CALLBACK (empty_cb), NULL);
- g_signal_connect (view, "individual-tooltip",
- G_CALLBACK (individual_tooltip_cb), NULL);
-
- gtk_widget_set_has_tooltip (view, TRUE);
-
- empathy_roster_view_show_offline (EMPATHY_ROSTER_VIEW (view), show_offline);
- empathy_roster_view_show_groups (EMPATHY_ROSTER_VIEW (view), show_groups);
-
- g_object_unref (mgr);
-
- search = tpaw_live_search_new (view);
- empathy_roster_view_set_live_search (EMPATHY_ROSTER_VIEW (view),
- TPAW_LIVE_SEARCH (search));
-
- scrolled = gtk_scrolled_window_new (NULL, NULL);
- gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled),
- GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC);
-
- egg_list_box_add_to_scrolled (EGG_LIST_BOX (view),
- GTK_SCROLLED_WINDOW (scrolled));
-
- gtk_box_pack_start (GTK_BOX (box), search, FALSE, TRUE, 0);
- gtk_box_pack_start (GTK_BOX (box), scrolled, TRUE, TRUE, 0);
- gtk_container_add (GTK_CONTAINER (window), box);
-
- gtk_window_set_default_size (GTK_WINDOW (window), 300, 600);
- gtk_widget_show_all (window);
-
- g_signal_connect_swapped (window, "destroy",
- G_CALLBACK (gtk_main_quit), NULL);
-
- gtk_main ();
-
- return 0;
-}
diff --git a/tests/interactive/test-empathy-status-preset-dialog.c b/tests/interactive/test-empathy-status-preset-dialog.c
deleted file mode 100644
index 2494d78b..00000000
--- a/tests/interactive/test-empathy-status-preset-dialog.c
+++ /dev/null
@@ -1,47 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * Copyright (C) 2009 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:
- * Danielle Madeley <danielle.madeley@collabora.co.uk>
- * Will Thompson <will.thompson@collabora.co.uk>
- */
-
-#include "config.h"
-
-#include <gtk/gtk.h>
-
-#include "empathy-status-preset-dialog.h"
-#include "empathy-status-presets.h"
-#include "empathy-ui-utils.h"
-
-int
-main (int argc, char **argv)
-{
- GtkWidget *dialog;
-
- gtk_init (&argc, &argv);
- empathy_gtk_init ();
-
- empathy_status_presets_get_all ();
-
- dialog = empathy_status_preset_dialog_new (NULL);
- gtk_dialog_run (GTK_DIALOG (dialog));
-
- return 0;
-}
diff --git a/tests/mock-pkcs11.c b/tests/mock-pkcs11.c
deleted file mode 100644
index 572221ac..00000000
--- a/tests/mock-pkcs11.c
+++ /dev/null
@@ -1,1346 +0,0 @@
-/*
- * Copyright (C) 2010 Stefan Walter
- * Copyright (C) 2011 Collabora Ltd.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General License as
- * published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General License for more details.
- *
- * You should have received a copy of the GNU Lesser General
- * License along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- */
-
-#include "config.h"
-#include "mock-pkcs11.h"
-
-#include <string.h>
-
-/*
- * This is *NOT* how you'd want to implement a PKCS#11 module. This
- * fake module simply provides enough for gnutls-pkcs11 backend to test against.
- * It doesn't pass any tests, or behave as expected from a PKCS#11 module.
- */
-
-static gboolean initialized = FALSE;
-
-typedef enum {
- OP_FIND = 1,
-} Operation;
-
-static CK_OBJECT_HANDLE unique_identifier = 100;
-static GHashTable *the_sessions = NULL;
-static GHashTable *the_certificates = NULL;
-static GHashTable *the_assertions = NULL;
-
-typedef struct {
- GcrCertificate *cert;
- CK_ULONG assertion_type;
- gchar *purpose;
- gchar *peer;
-} Assertion;
-
-static void
-free_assertion (gpointer data)
-{
- Assertion *assertion = data;
- g_clear_object (&assertion->cert);
- g_free (assertion->purpose);
- g_free (assertion->peer);
- g_free (assertion);
-}
-
-typedef struct {
- CK_SESSION_HANDLE handle;
- CK_SESSION_INFO info;
-
- Operation operation;
-
- /* For find operations */
- GList *matches;
-} Session;
-
-static void
-free_session (gpointer data)
-{
- Session *sess = (Session*)data;
- g_list_free (sess->matches);
- g_free (sess);
-}
-
-CK_OBJECT_HANDLE
-mock_module_add_certificate (GcrCertificate *cert)
-{
- CK_OBJECT_HANDLE handle;
-
- g_return_val_if_fail (GCR_IS_CERTIFICATE (cert), 0);
-
- handle = unique_identifier++;
- g_hash_table_insert (the_certificates, GUINT_TO_POINTER (handle), g_object_ref (cert));
- return handle;
-}
-
-CK_OBJECT_HANDLE
-mock_module_add_assertion (GcrCertificate *cert,
- CK_X_ASSERTION_TYPE assertion_type,
- const gchar *purpose,
- const gchar *peer)
-{
- Assertion *assertion;
- CK_OBJECT_HANDLE handle;
-
- g_return_val_if_fail (GCR_IS_CERTIFICATE (cert), 0);
-
- assertion = g_new0 (Assertion, 1);
- assertion->cert = g_object_ref (cert);
- assertion->assertion_type = assertion_type;
- assertion->purpose = g_strdup (purpose);
- assertion->peer = g_strdup (peer);
-
- handle = unique_identifier++;
- g_hash_table_insert (the_assertions, GUINT_TO_POINTER (handle), assertion);
- return handle;
-}
-
-CK_RV
-mock_C_Initialize (CK_VOID_PTR init_args)
-{
- CK_C_INITIALIZE_ARGS_PTR args;
-
- g_return_val_if_fail (initialized == FALSE, CKR_CRYPTOKI_ALREADY_INITIALIZED);
-
- args = (CK_C_INITIALIZE_ARGS_PTR)init_args;
- if (args)
- {
- g_return_val_if_fail(
- (args->CreateMutex == NULL && args->DestroyMutex == NULL &&
- args->LockMutex == NULL && args->UnlockMutex == NULL) ||
- (args->CreateMutex != NULL && args->DestroyMutex != NULL &&
- args->LockMutex != NULL && args->UnlockMutex != NULL),
- CKR_ARGUMENTS_BAD);
-
- /* Flags should allow OS locking and os threads */
- g_return_val_if_fail ((args->flags & CKF_OS_LOCKING_OK), CKR_CANT_LOCK);
- g_return_val_if_fail ((args->flags & CKF_LIBRARY_CANT_CREATE_OS_THREADS) == 0, CKR_NEED_TO_CREATE_THREADS);
- }
-
- the_sessions = g_hash_table_new_full (g_direct_hash, g_direct_equal, NULL, free_session);
- the_certificates = g_hash_table_new_full (g_direct_hash, g_direct_equal, NULL, (GDestroyNotify)g_object_unref);
- the_assertions = g_hash_table_new_full (g_direct_hash, g_direct_equal, NULL, free_assertion);
-
- initialized = TRUE;
- return CKR_OK;
-}
-
-CK_RV
-mock_C_Finalize (CK_VOID_PTR reserved)
-{
- g_return_val_if_fail (reserved == NULL, CKR_ARGUMENTS_BAD);
- g_return_val_if_fail (initialized == TRUE, CKR_CRYPTOKI_NOT_INITIALIZED);
-
- initialized = FALSE;
-
- g_hash_table_destroy (the_certificates);
- the_certificates = NULL;
-
- g_hash_table_destroy (the_assertions);
- the_assertions = NULL;
-
- g_hash_table_destroy (the_sessions);
- the_sessions = NULL;
-
- return CKR_OK;
-}
-
-static const CK_INFO TEST_INFO = {
- { CRYPTOKI_VERSION_MAJOR, CRYPTOKI_VERSION_MINOR },
- "TEST MANUFACTURER ",
- 0,
- "TEST LIBRARY ",
- { 45, 145 }
-};
-
-CK_RV
-mock_C_GetInfo (CK_INFO_PTR info)
-{
- g_return_val_if_fail (info, CKR_ARGUMENTS_BAD);
- memcpy (info, &TEST_INFO, sizeof (*info));
- return CKR_OK;
-}
-
-CK_RV
-mock_C_GetFunctionList (CK_FUNCTION_LIST_PTR_PTR list)
-{
- g_return_val_if_fail (list, CKR_ARGUMENTS_BAD);
- *list = &mock_default_functions;
- return CKR_OK;
-}
-
-CK_RV
-mock_C_GetSlotList (CK_BBOOL token_present,
- CK_SLOT_ID_PTR slot_list,
- CK_ULONG_PTR count)
-{
- CK_ULONG num = 1;
-
- g_return_val_if_fail (count, CKR_ARGUMENTS_BAD);
-
- /* Application only wants to know the number of slots. */
- if (slot_list == NULL)
- {
- *count = num;
- return CKR_OK;
- }
-
- if (*count < num)
- g_return_val_if_reached (CKR_BUFFER_TOO_SMALL);
-
- *count = num;
- slot_list[0] = MOCK_SLOT_ONE_ID;
- return CKR_OK;
-}
-
-/* Update mock-pkcs11.h URIs when updating this */
-
-static const CK_SLOT_INFO MOCK_INFO_ONE = {
- "MOCK SLOT ",
- "MOCK MANUFACTURER ",
- CKF_TOKEN_PRESENT | CKF_REMOVABLE_DEVICE,
- { 55, 155 },
- { 65, 165 },
-};
-
-CK_RV
-mock_C_GetSlotInfo (CK_SLOT_ID slot_id,
- CK_SLOT_INFO_PTR info)
-{
- g_return_val_if_fail (info, CKR_ARGUMENTS_BAD);
-
- if (slot_id == MOCK_SLOT_ONE_ID)
- {
- memcpy (info, &MOCK_INFO_ONE, sizeof (*info));
- return CKR_OK;
- }
- else
- {
- g_return_val_if_reached (CKR_SLOT_ID_INVALID);
- }
-}
-
-/* Update mock-pkcs11.h URIs when updating this */
-
-static const CK_TOKEN_INFO MOCK_TOKEN_ONE = {
- "MOCK LABEL ",
- "MOCK MANUFACTURER ",
- "MOCK MODEL ",
- "MOCK SERIAL ",
- CKF_TOKEN_INITIALIZED | CKF_WRITE_PROTECTED,
- 1,
- 2,
- 3,
- 4,
- 5,
- 6,
- 7,
- 8,
- 9,
- 10,
- { 75, 175 },
- { 85, 185 },
- { '1', '9', '9', '9', '0', '5', '2', '5', '0', '9', '1', '9', '5', '9', '0', '0' }
-};
-
-CK_RV
-mock_C_GetTokenInfo (CK_SLOT_ID slot_id,
- CK_TOKEN_INFO_PTR info)
-{
- g_return_val_if_fail (info != NULL, CKR_ARGUMENTS_BAD);
-
- if (slot_id == MOCK_SLOT_ONE_ID)
- {
- memcpy (info, &MOCK_TOKEN_ONE, sizeof (*info));
- return CKR_OK;
- }
- else
- {
- g_return_val_if_reached (CKR_SLOT_ID_INVALID);
- }
-}
-
-CK_RV
-mock_C_GetMechanismList (CK_SLOT_ID slot_id,
- CK_MECHANISM_TYPE_PTR mechanism_list,
- CK_ULONG_PTR count)
-{
- g_return_val_if_fail (slot_id == MOCK_SLOT_ONE_ID, CKR_SLOT_ID_INVALID);
- g_return_val_if_fail (count, CKR_ARGUMENTS_BAD);
-
- /* Application only wants to know the number of slots. */
- if (mechanism_list == NULL)
- {
- *count = 0;
- return CKR_OK;
- }
-
- return CKR_OK;
-}
-
-CK_RV
-mock_C_GetMechanismInfo (CK_SLOT_ID slot_id,
- CK_MECHANISM_TYPE type,
- CK_MECHANISM_INFO_PTR info)
-{
- g_return_val_if_fail (slot_id == MOCK_SLOT_ONE_ID, CKR_SLOT_ID_INVALID);
- g_return_val_if_fail (info, CKR_ARGUMENTS_BAD);
-
- g_return_val_if_reached (CKR_MECHANISM_INVALID);
-}
-
-CK_RV
-mock_unsupported_C_InitToken (CK_SLOT_ID slot_id,
- CK_UTF8CHAR_PTR pin,
- CK_ULONG pin_len,
- CK_UTF8CHAR_PTR label)
-{
- g_return_val_if_fail (slot_id == MOCK_SLOT_ONE_ID, CKR_SLOT_ID_INVALID);
- return CKR_FUNCTION_NOT_SUPPORTED;
-}
-
-CK_RV
-mock_unsupported_C_WaitForSlotEvent (CK_FLAGS flags,
- CK_SLOT_ID_PTR slot_id,
- CK_VOID_PTR reserved)
-{
- return CKR_FUNCTION_NOT_SUPPORTED;
-}
-
-CK_RV
-mock_C_OpenSession (CK_SLOT_ID slot_id,
- CK_FLAGS flags,
- CK_VOID_PTR application,
- CK_NOTIFY notify,
- CK_SESSION_HANDLE_PTR session)
-{
- Session *sess;
-
- g_return_val_if_fail (slot_id == MOCK_SLOT_ONE_ID, CKR_SLOT_ID_INVALID);
- g_return_val_if_fail (session != NULL, CKR_ARGUMENTS_BAD);
- g_return_val_if_fail ((flags & CKF_SERIAL_SESSION) == CKF_SERIAL_SESSION, CKR_SESSION_PARALLEL_NOT_SUPPORTED);
-
- if (flags & CKF_RW_SESSION)
- return CKR_TOKEN_WRITE_PROTECTED;
-
- sess = g_new0 (Session, 1);
- sess->handle = ++unique_identifier;
- sess->info.flags = flags;
- sess->info.slotID = slot_id;
- sess->info.state = CKS_RO_PUBLIC_SESSION;
- sess->info.ulDeviceError = 0;
- *session = sess->handle;
-
- g_hash_table_replace (the_sessions, GUINT_TO_POINTER (sess->handle), sess);
- return CKR_OK;
-}
-
-CK_RV
-mock_C_CloseSession (CK_SESSION_HANDLE session)
-{
- Session *sess;
-
- sess = g_hash_table_lookup (the_sessions, GUINT_TO_POINTER (session));
- g_return_val_if_fail (sess != NULL, CKR_SESSION_HANDLE_INVALID);
-
- g_hash_table_remove (the_sessions, GUINT_TO_POINTER (sess));
- return CKR_OK;
-}
-
-CK_RV
-mock_C_CloseAllSessions (CK_SLOT_ID slot_id)
-{
- g_return_val_if_fail (slot_id == MOCK_SLOT_ONE_ID, CKR_SLOT_ID_INVALID);
-
- g_hash_table_remove_all (the_sessions);
- return CKR_OK;
-}
-
-CK_RV
-mock_C_GetFunctionStatus (CK_SESSION_HANDLE session)
-{
- return CKR_FUNCTION_NOT_PARALLEL;
-}
-
-CK_RV
-mock_C_CancelFunction (CK_SESSION_HANDLE session)
-{
- return CKR_FUNCTION_NOT_PARALLEL;
-}
-
-CK_RV
-mock_C_GetSessionInfo (CK_SESSION_HANDLE session,
- CK_SESSION_INFO_PTR info)
-{
- Session *sess;
-
- g_return_val_if_fail (info != NULL, CKR_ARGUMENTS_BAD);
-
- sess = g_hash_table_lookup (the_sessions, GUINT_TO_POINTER (session));
- g_return_val_if_fail (sess != NULL, CKR_SESSION_HANDLE_INVALID);
-
- memcpy (info, &sess->info, sizeof (*info));
- return CKR_OK;
-}
-
-CK_RV
-mock_unsupported_C_InitPIN (CK_SESSION_HANDLE session,
- CK_UTF8CHAR_PTR pin,
- CK_ULONG pin_len)
-{
- return CKR_FUNCTION_NOT_SUPPORTED;
-}
-
-CK_RV
-mock_unsupported_C_SetPIN (CK_SESSION_HANDLE session,
- CK_UTF8CHAR_PTR old_pin,
- CK_ULONG old_len,
- CK_UTF8CHAR_PTR new_pin,
- CK_ULONG new_len)
-{
- return CKR_FUNCTION_NOT_SUPPORTED;
-}
-
-CK_RV
-mock_unsupported_C_GetOperationState (CK_SESSION_HANDLE session,
- CK_BYTE_PTR operation_state,
- CK_ULONG_PTR operation_state_len)
-{
- return CKR_FUNCTION_NOT_SUPPORTED;
-}
-
-CK_RV
-mock_unsupported_C_SetOperationState (CK_SESSION_HANDLE session,
- CK_BYTE_PTR operation_state,
- CK_ULONG operation_state_len,
- CK_OBJECT_HANDLE encryption_key,
- CK_OBJECT_HANDLE authentication_key)
-{
- return CKR_FUNCTION_NOT_SUPPORTED;
-}
-
-CK_RV
-mock_unsupported_C_Login (CK_SESSION_HANDLE session,
- CK_USER_TYPE user_type,
- CK_UTF8CHAR_PTR pin,
- CK_ULONG pin_len)
-{
- return CKR_FUNCTION_NOT_SUPPORTED;
-}
-
-CK_RV
-mock_unsupported_C_Logout (CK_SESSION_HANDLE session)
-{
- return CKR_FUNCTION_NOT_SUPPORTED;
-}
-
-CK_RV
-mock_readonly_C_CreateObject (CK_SESSION_HANDLE session,
- CK_ATTRIBUTE_PTR template,
- CK_ULONG count,
- CK_OBJECT_HANDLE_PTR object)
-{
- Session *sess;
-
- g_return_val_if_fail (object, CKR_ARGUMENTS_BAD);
-
- sess = g_hash_table_lookup (the_sessions, GUINT_TO_POINTER (session));
- g_return_val_if_fail (sess != NULL, CKR_SESSION_HANDLE_INVALID);
-
- return CKR_TOKEN_WRITE_PROTECTED;
-}
-
-CK_RV
-mock_unsupported_C_CopyObject (CK_SESSION_HANDLE session,
- CK_OBJECT_HANDLE object,
- CK_ATTRIBUTE_PTR template,
- CK_ULONG count,
- CK_OBJECT_HANDLE_PTR new_object)
-{
- return CKR_FUNCTION_NOT_SUPPORTED;
-}
-
-CK_RV
-mock_readonly_C_DestroyObject (CK_SESSION_HANDLE session,
- CK_OBJECT_HANDLE object)
-{
- Session *sess;
-
- g_return_val_if_fail (object, CKR_ARGUMENTS_BAD);
-
- sess = g_hash_table_lookup (the_sessions, GUINT_TO_POINTER (session));
- g_return_val_if_fail (sess != NULL, CKR_SESSION_HANDLE_INVALID);
-
- return CKR_TOKEN_WRITE_PROTECTED;
-}
-
-CK_RV
-mock_unsupported_C_GetObjectSize (CK_SESSION_HANDLE session,
- CK_OBJECT_HANDLE object,
- CK_ULONG_PTR pulSize)
-{
- return CKR_FUNCTION_NOT_SUPPORTED;
-}
-
-static CK_RV
-fill_data_attribute (CK_ATTRIBUTE *attr,
- gconstpointer data,
- gsize length)
-{
- if (!attr->pValue) {
- attr->ulValueLen = length;
- return CKR_OK;
- } else if (attr->ulValueLen < length) {
- attr->ulValueLen = length;
- return CKR_BUFFER_TOO_SMALL;
- } else {
- memcpy (attr->pValue, data, length);
- attr->ulValueLen = length;
- return CKR_OK;
- }
-}
-
-static CK_RV
-fill_check_value_attribute (CK_ATTRIBUTE *attr,
- GcrCertificate *cert)
-{
- guchar *data;
- gsize length;
- CK_RV rv;
-
- data = gcr_certificate_get_fingerprint (cert, G_CHECKSUM_SHA1, &length);
- rv = fill_data_attribute (attr, data, 3);
- g_free (data);
-
- return rv;
-}
-
-static CK_RV
-fill_subject_attribute (CK_ATTRIBUTE *attr,
- GcrCertificate *cert)
-{
- guchar *data;
- gsize length;
- CK_RV rv;
-
- data = gcr_certificate_get_subject_raw (cert, &length);
- rv = fill_data_attribute (attr, data, length);
- g_free (data);
-
- return rv;
-}
-
-static CK_RV
-fill_issuer_attribute (CK_ATTRIBUTE *attr,
- GcrCertificate *cert)
-{
- guchar *data;
- gsize length;
- CK_RV rv;
-
- data = gcr_certificate_get_issuer_raw (cert, &length);
- rv = fill_data_attribute (attr, data, length);
- g_free (data);
-
- return rv;
-}
-
-static CK_RV
-fill_serial_attribute (CK_ATTRIBUTE *attr,
- GcrCertificate *cert)
-{
- guchar *data;
- gsize length;
- CK_RV rv;
-
- data = gcr_certificate_get_serial_number (cert, &length);
- rv = fill_data_attribute (attr, data, length);
- g_free (data);
-
- return rv;
-}
-
-static CK_RV
-fill_string_attribute (CK_ATTRIBUTE *attr,
- const gchar *data)
-{
- return fill_data_attribute (attr, data, strlen (data));
-}
-
-static CK_RV
-fill_id_attribute (CK_ATTRIBUTE *attr,
- GcrCertificate *cert)
-{
- gchar *data;
- CK_RV rv;
-
- data = g_strdup_printf ("%p", cert);
- rv = fill_string_attribute (attr, data);
- g_free (data);
-
- return rv;
-}
-
-static CK_RV
-fill_value_attribute (CK_ATTRIBUTE *attr,
- GcrCertificate *cert)
-{
- const guchar *data;
- gsize length;
-
- data = gcr_certificate_get_der_data (cert, &length);
- return fill_data_attribute (attr, data, length);
-}
-
-static CK_RV
-fill_ulong_attribute (CK_ATTRIBUTE *attr,
- CK_ULONG value)
-{
- return fill_data_attribute (attr, &value, sizeof (value));
-}
-
-static CK_RV
-fill_bool_attribute (CK_ATTRIBUTE *attr,
- CK_BBOOL value)
-{
- return fill_data_attribute (attr, &value, sizeof (value));
-}
-
-static CK_RV
-fill_certificate_attribute (CK_ATTRIBUTE *attr,
- GcrCertificate *cert)
-{
- switch (attr->type)
- {
- case CKA_CLASS:
- return fill_ulong_attribute (attr, CKO_CERTIFICATE);
- case CKA_TOKEN:
- return fill_bool_attribute (attr, CK_TRUE);
- case CKA_PRIVATE:
- case CKA_MODIFIABLE:
- case CKA_TRUSTED:
- return fill_bool_attribute (attr, CK_FALSE);
- case CKA_LABEL:
- return fill_string_attribute (attr, "Certificate");
- case CKA_CERTIFICATE_TYPE:
- return fill_ulong_attribute (attr, CKC_X_509);
- case CKA_CERTIFICATE_CATEGORY:
- return fill_ulong_attribute (attr, 2);
- case CKA_CHECK_VALUE:
- return fill_check_value_attribute (attr, cert);
- case CKA_START_DATE:
- case CKA_END_DATE:
- return fill_data_attribute (attr, "", 0);
- case CKA_SUBJECT:
- return fill_subject_attribute (attr, cert);
- case CKA_ID:
- return fill_id_attribute (attr, cert);
- case CKA_ISSUER:
- return fill_issuer_attribute (attr, cert);
- case CKA_SERIAL_NUMBER:
- return fill_serial_attribute (attr, cert);
- case CKA_VALUE:
- return fill_value_attribute (attr, cert);
- case CKA_URL:
- case CKA_HASH_OF_SUBJECT_PUBLIC_KEY:
- case CKA_HASH_OF_ISSUER_PUBLIC_KEY:
- case CKA_JAVA_MIDP_SECURITY_DOMAIN:
- default:
- return CKR_ATTRIBUTE_TYPE_INVALID;
- }
-}
-
-static CK_RV
-fill_assertion_attribute (CK_ATTRIBUTE *attr,
- Assertion *assertion)
-{
- CK_RV rv;
-
- switch (attr->type)
- {
- case CKA_CLASS:
- return fill_ulong_attribute (attr, CKO_X_TRUST_ASSERTION);
- case CKA_TOKEN:
- return fill_bool_attribute (attr, CK_TRUE);
- case CKA_PRIVATE:
- case CKA_MODIFIABLE:
- case CKA_TRUSTED:
- return fill_bool_attribute (attr, CK_FALSE);
- case CKA_LABEL:
- return fill_string_attribute (attr, "Assertion");
- case CKA_X_ASSERTION_TYPE:
- return fill_ulong_attribute (attr, assertion->assertion_type);
- case CKA_X_PURPOSE:
- return fill_string_attribute (attr, assertion->purpose);
- case CKA_X_PEER:
- if (!assertion->peer)
- return CKR_ATTRIBUTE_TYPE_INVALID;
- return fill_string_attribute (attr, assertion->peer);
- case CKA_SERIAL_NUMBER:
- case CKA_ISSUER:
- return fill_certificate_attribute (attr, assertion->cert);
- case CKA_X_CERTIFICATE_VALUE:
- attr->type = CKA_VALUE;
- rv = fill_certificate_attribute (attr, assertion->cert);
- attr->type = CKA_X_CERTIFICATE_VALUE;
- return rv;
-
- default:
- return CKR_ATTRIBUTE_TYPE_INVALID;
- }
-}
-
-CK_RV
-mock_C_GetAttributeValue (CK_SESSION_HANDLE session,
- CK_OBJECT_HANDLE object,
- CK_ATTRIBUTE_PTR template,
- CK_ULONG count)
-{
- CK_RV rv, ret = CKR_OK;
- GcrCertificate *cert;
- Assertion *assertion;
- Session *sess;
- CK_ULONG i;
-
- sess = g_hash_table_lookup (the_sessions, GUINT_TO_POINTER (session));
- g_return_val_if_fail (sess != NULL, CKR_SESSION_HANDLE_INVALID);
-
- cert = g_hash_table_lookup (the_certificates, GUINT_TO_POINTER (object));
- assertion = g_hash_table_lookup (the_assertions, GUINT_TO_POINTER (object));
-
- if (cert != NULL) {
- for (i = 0; i < count; i++) {
- rv = fill_certificate_attribute (template + i, cert);
- if (rv != CKR_OK)
- template[i].ulValueLen = (CK_ULONG)-1;
- if (ret != CKR_OK)
- ret = rv;
- }
- } else if (assertion != NULL) {
- for (i = 0; i < count; i++) {
- rv = fill_assertion_attribute (template + i, assertion);
- if (rv != CKR_OK)
- template[i].ulValueLen = (CK_ULONG)-1;
- if (ret != CKR_OK)
- ret = rv;
- }
- } else {
- ret = CKR_OBJECT_HANDLE_INVALID;
- }
-
- return ret;
-}
-
-CK_RV
-mock_readonly_C_SetAttributeValue (CK_SESSION_HANDLE session,
- CK_OBJECT_HANDLE object,
- CK_ATTRIBUTE_PTR template,
- CK_ULONG count)
-{
- Session *sess;
-
- sess = g_hash_table_lookup (the_sessions, GUINT_TO_POINTER (session));
- g_return_val_if_fail (sess, CKR_SESSION_HANDLE_INVALID);
-
- return CKR_TOKEN_WRITE_PROTECTED;
-}
-
-static gboolean
-match_object_attributes (CK_SESSION_HANDLE session,
- CK_ULONG object,
- CK_ATTRIBUTE_PTR template,
- CK_ULONG count)
-{
- CK_ATTRIBUTE_PTR values;
- gboolean mismatch = FALSE;
- CK_RV rv;
- CK_ULONG i;
-
- values = g_new0 (CK_ATTRIBUTE, count);
- for (i = 0; i < count; i++) {
- values[i].type = template[i].type;
- if (template[i].ulValueLen != 0 &&
- template[i].ulValueLen != (CK_ULONG)-1)
- values[i].pValue = g_malloc (template[i].ulValueLen);
- values[i].ulValueLen = template[i].ulValueLen;
- }
-
- rv = mock_C_GetAttributeValue (session, object, values, count);
-
- if (rv == CKR_OK) {
- for (i = 0; i < count; i++) {
- if (gcr_comparable_memcmp (values[i].pValue, values[i].ulValueLen,
- template[i].pValue, template[i].ulValueLen) != 0) {
- mismatch = TRUE;
- break;
- }
- }
- }
-
- for (i = 0; i < count; i++)
- g_free (values[i].pValue);
- g_free (values);
-
- if (rv != CKR_OK)
- return FALSE;
-
- return !mismatch;
-}
-
-CK_RV
-mock_C_FindObjectsInit (CK_SESSION_HANDLE session,
- CK_ATTRIBUTE_PTR template,
- CK_ULONG count)
-{
- GList *objects = NULL, *l;
- Session *sess;
-
- sess = g_hash_table_lookup (the_sessions, GUINT_TO_POINTER (session));
- g_return_val_if_fail (sess != NULL, CKR_SESSION_HANDLE_INVALID);
-
- /* Starting an operation, cancels any previous one */
- if (sess->operation != 0)
- sess->operation = 0;
-
- sess->operation = OP_FIND;
- g_list_free (sess->matches);
- sess->matches = NULL;
-
- objects = g_list_concat (objects, g_hash_table_get_keys (the_certificates));
- objects = g_list_concat (objects, g_hash_table_get_keys (the_assertions));
-
- for (l = objects; l != NULL; l = g_list_next (l)) {
- if (match_object_attributes (session, GPOINTER_TO_UINT (l->data), template, count))
- sess->matches = g_list_prepend (sess->matches, l->data);
- }
-
- g_list_free (objects);
- return CKR_OK;
-}
-
-CK_RV
-mock_C_FindObjects (CK_SESSION_HANDLE session,
- CK_OBJECT_HANDLE_PTR object,
- CK_ULONG max_object_count,
- CK_ULONG_PTR object_count)
-{
- Session *sess;
-
- g_return_val_if_fail (object, CKR_ARGUMENTS_BAD);
- g_return_val_if_fail (object_count, CKR_ARGUMENTS_BAD);
- g_return_val_if_fail (max_object_count != 0, CKR_ARGUMENTS_BAD);
-
- sess = g_hash_table_lookup (the_sessions, GUINT_TO_POINTER (session));
- g_return_val_if_fail (sess != NULL, CKR_SESSION_HANDLE_INVALID);
- g_return_val_if_fail (sess->operation == OP_FIND, CKR_OPERATION_NOT_INITIALIZED);
-
- *object_count = 0;
- while (max_object_count > 0 && sess->matches)
- {
- *object = GPOINTER_TO_UINT (sess->matches->data);
- ++object;
- --max_object_count;
- ++(*object_count);
- sess->matches = g_list_remove (sess->matches, sess->matches->data);
- }
-
- return CKR_OK;
-}
-
-CK_RV
-mock_C_FindObjectsFinal (CK_SESSION_HANDLE session)
-{
- Session *sess;
-
- sess = g_hash_table_lookup (the_sessions, GUINT_TO_POINTER (session));
- g_return_val_if_fail (sess != NULL, CKR_SESSION_HANDLE_INVALID);
- g_return_val_if_fail (sess->operation == OP_FIND, CKR_OPERATION_NOT_INITIALIZED);
-
- sess->operation = 0;
- g_list_free (sess->matches);
- sess->matches = NULL;
-
- return CKR_OK;
-}
-
-CK_RV
-mock_no_mechanisms_C_EncryptInit (CK_SESSION_HANDLE session,
- CK_MECHANISM_PTR mechanism,
- CK_OBJECT_HANDLE key)
-{
- Session *sess;
-
- sess = g_hash_table_lookup (the_sessions, GUINT_TO_POINTER (session));
- g_return_val_if_fail (sess != NULL, CKR_SESSION_HANDLE_INVALID);
-
- return CKR_MECHANISM_INVALID;
-}
-
-CK_RV
-mock_not_initialized_C_Encrypt (CK_SESSION_HANDLE session,
- CK_BYTE_PTR data,
- CK_ULONG data_len,
- CK_BYTE_PTR encrypted_data,
- CK_ULONG_PTR encrypted_data_len)
-{
- return CKR_OPERATION_NOT_INITIALIZED;
-}
-
-CK_RV
-mock_unsupported_C_EncryptUpdate (CK_SESSION_HANDLE session,
- CK_BYTE_PTR part,
- CK_ULONG part_len,
- CK_BYTE_PTR encrypted_part,
- CK_ULONG_PTR encrypted_part_len)
-{
- return CKR_FUNCTION_NOT_SUPPORTED;
-}
-
-CK_RV
-mock_unsupported_C_EncryptFinal (CK_SESSION_HANDLE session,
- CK_BYTE_PTR last_encrypted_part,
- CK_ULONG_PTR last_encrypted_part_len)
-{
- return CKR_FUNCTION_NOT_SUPPORTED;
-}
-
-CK_RV
-mock_no_mechanisms_C_DecryptInit (CK_SESSION_HANDLE session,
- CK_MECHANISM_PTR mechanism,
- CK_OBJECT_HANDLE key)
-{
- Session *sess;
-
- sess = g_hash_table_lookup (the_sessions, GUINT_TO_POINTER (session));
- g_return_val_if_fail (sess != NULL, CKR_SESSION_HANDLE_INVALID);
-
- return CKR_MECHANISM_INVALID;
-}
-
-CK_RV
-mock_not_initialized_C_Decrypt (CK_SESSION_HANDLE session,
- CK_BYTE_PTR encrypted_data,
- CK_ULONG encrypted_data_len,
- CK_BYTE_PTR data,
- CK_ULONG_PTR data_len)
-{
- return CKR_OPERATION_NOT_INITIALIZED;
-}
-
-CK_RV
-mock_unsupported_C_DecryptUpdate (CK_SESSION_HANDLE session,
- CK_BYTE_PTR encrypted_part,
- CK_ULONG encrypted_key_len,
- CK_BYTE_PTR part,
- CK_ULONG_PTR part_len)
-{
- return CKR_FUNCTION_NOT_SUPPORTED;
-}
-
-CK_RV
-mock_unsupported_C_DecryptFinal (CK_SESSION_HANDLE session,
- CK_BYTE_PTR last_part,
- CK_ULONG_PTR last_part_len)
-{
- return CKR_FUNCTION_NOT_SUPPORTED;
-}
-
-CK_RV
-mock_unsupported_C_DigestInit (CK_SESSION_HANDLE session,
- CK_MECHANISM_PTR mechanism)
-{
- return CKR_FUNCTION_NOT_SUPPORTED;
-}
-
-CK_RV
-mock_unsupported_C_Digest (CK_SESSION_HANDLE session,
- CK_BYTE_PTR data,
- CK_ULONG data_len,
- CK_BYTE_PTR digest,
- CK_ULONG_PTR digest_len)
-{
- return CKR_FUNCTION_NOT_SUPPORTED;
-}
-
-CK_RV
-mock_unsupported_C_DigestUpdate (CK_SESSION_HANDLE session,
- CK_BYTE_PTR part,
- CK_ULONG part_len)
-{
- return CKR_FUNCTION_NOT_SUPPORTED;
-}
-
-CK_RV
-mock_unsupported_C_DigestKey (CK_SESSION_HANDLE session,
- CK_OBJECT_HANDLE key)
-{
- return CKR_FUNCTION_NOT_SUPPORTED;
-}
-
-CK_RV
-mock_unsupported_C_DigestFinal (CK_SESSION_HANDLE session,
- CK_BYTE_PTR digest,
- CK_ULONG_PTR digest_len)
-{
- return CKR_FUNCTION_NOT_SUPPORTED;
-}
-
-CK_RV
-mock_no_mechanisms_C_SignInit (CK_SESSION_HANDLE session,
- CK_MECHANISM_PTR mechanism,
- CK_OBJECT_HANDLE key)
-{
- Session *sess;
-
- sess = g_hash_table_lookup (the_sessions, GUINT_TO_POINTER (session));
- g_return_val_if_fail (sess != NULL, CKR_SESSION_HANDLE_INVALID);
-
- return CKR_MECHANISM_INVALID;
-}
-
-CK_RV
-mock_not_initialized_C_Sign (CK_SESSION_HANDLE session,
- CK_BYTE_PTR data,
- CK_ULONG data_len,
- CK_BYTE_PTR signature,
- CK_ULONG_PTR signature_len)
-{
- return CKR_OPERATION_NOT_INITIALIZED;
-}
-
-CK_RV
-mock_unsupported_C_SignUpdate (CK_SESSION_HANDLE session,
- CK_BYTE_PTR part,
- CK_ULONG part_len)
-{
- return CKR_FUNCTION_NOT_SUPPORTED;
-}
-
-CK_RV
-mock_unsupported_C_SignFinal (CK_SESSION_HANDLE session,
- CK_BYTE_PTR signature,
- CK_ULONG_PTR signature_len)
-{
- return CKR_FUNCTION_NOT_SUPPORTED;
-}
-
-CK_RV
-mock_unsupported_C_SignRecoverInit (CK_SESSION_HANDLE session,
- CK_MECHANISM_PTR mechanism,
- CK_OBJECT_HANDLE key)
-{
- return CKR_FUNCTION_NOT_SUPPORTED;
-}
-
-CK_RV
-mock_unsupported_C_SignRecover (CK_SESSION_HANDLE session,
- CK_BYTE_PTR data,
- CK_ULONG data_len,
- CK_BYTE_PTR signature,
- CK_ULONG_PTR signature_len)
-{
- return CKR_FUNCTION_NOT_SUPPORTED;
-}
-
-CK_RV
-mock_no_mechanisms_C_VerifyInit (CK_SESSION_HANDLE session,
- CK_MECHANISM_PTR mechanism,
- CK_OBJECT_HANDLE key)
-{
- Session *sess;
-
- sess = g_hash_table_lookup (the_sessions, GUINT_TO_POINTER (session));
- g_return_val_if_fail (sess != NULL, CKR_SESSION_HANDLE_INVALID);
-
- return CKR_MECHANISM_INVALID;
-}
-
-CK_RV
-mock_not_initialized_C_Verify (CK_SESSION_HANDLE session,
- CK_BYTE_PTR data,
- CK_ULONG data_len,
- CK_BYTE_PTR signature,
- CK_ULONG signature_len)
-{
- return CKR_OPERATION_NOT_INITIALIZED;
-}
-
-CK_RV
-mock_unsupported_C_VerifyUpdate (CK_SESSION_HANDLE session,
- CK_BYTE_PTR part,
- CK_ULONG part_len)
-{
- return CKR_FUNCTION_NOT_SUPPORTED;
-}
-
-CK_RV
-mock_unsupported_C_VerifyFinal (CK_SESSION_HANDLE session,
- CK_BYTE_PTR signature,
- CK_ULONG signature_len)
-{
- return CKR_FUNCTION_NOT_SUPPORTED;
-}
-
-CK_RV
-mock_unsupported_C_VerifyRecoverInit (CK_SESSION_HANDLE session,
- CK_MECHANISM_PTR mechanism,
- CK_OBJECT_HANDLE key)
-{
- return CKR_FUNCTION_NOT_SUPPORTED;
-}
-
-CK_RV
-mock_unsupported_C_VerifyRecover (CK_SESSION_HANDLE session,
- CK_BYTE_PTR signature,
- CK_ULONG signature_len,
- CK_BYTE_PTR data,
- CK_ULONG_PTR data_len)
-{
- return CKR_FUNCTION_NOT_SUPPORTED;
-}
-
-CK_RV
-mock_unsupported_C_DigestEncryptUpdate (CK_SESSION_HANDLE session,
- CK_BYTE_PTR part,
- CK_ULONG part_len,
- CK_BYTE_PTR encrypted_part,
- CK_ULONG_PTR encrypted_key_len)
-{
- return CKR_FUNCTION_NOT_SUPPORTED;
-}
-
-CK_RV
-mock_unsupported_C_DecryptDigestUpdate (CK_SESSION_HANDLE session,
- CK_BYTE_PTR encrypted_part,
- CK_ULONG encrypted_key_len,
- CK_BYTE_PTR part,
- CK_ULONG_PTR part_len)
-{
- return CKR_FUNCTION_NOT_SUPPORTED;
-}
-
-CK_RV
-mock_unsupported_C_SignEncryptUpdate (CK_SESSION_HANDLE session,
- CK_BYTE_PTR part,
- CK_ULONG part_len,
- CK_BYTE_PTR encrypted_part,
- CK_ULONG_PTR encrypted_key_len)
-{
- return CKR_FUNCTION_NOT_SUPPORTED;
-}
-
-CK_RV
-mock_unsupported_C_DecryptVerifyUpdate (CK_SESSION_HANDLE session,
- CK_BYTE_PTR encrypted_part,
- CK_ULONG encrypted_key_len,
- CK_BYTE_PTR part,
- CK_ULONG_PTR part_len)
-{
- return CKR_FUNCTION_NOT_SUPPORTED;
-}
-
-CK_RV
-mock_unsupported_C_GenerateKey (CK_SESSION_HANDLE session,
- CK_MECHANISM_PTR mechanism,
- CK_ATTRIBUTE_PTR template,
- CK_ULONG count,
- CK_OBJECT_HANDLE_PTR key)
-{
- return CKR_FUNCTION_NOT_SUPPORTED;
-}
-
-CK_RV
-mock_no_mechanisms_C_GenerateKeyPair (CK_SESSION_HANDLE session,
- CK_MECHANISM_PTR mechanism,
- CK_ATTRIBUTE_PTR public_key_template,
- CK_ULONG public_key_attribute_count,
- CK_ATTRIBUTE_PTR private_key_template,
- CK_ULONG private_key_attribute_count,
- CK_OBJECT_HANDLE_PTR public_key,
- CK_OBJECT_HANDLE_PTR private_key)
-{
- Session *sess;
-
- g_return_val_if_fail (mechanism, CKR_MECHANISM_INVALID);
- g_return_val_if_fail (public_key_template, CKR_TEMPLATE_INCOMPLETE);
- g_return_val_if_fail (public_key_attribute_count, CKR_TEMPLATE_INCOMPLETE);
- g_return_val_if_fail (private_key_template, CKR_TEMPLATE_INCOMPLETE);
- g_return_val_if_fail (private_key_attribute_count, CKR_TEMPLATE_INCOMPLETE);
- g_return_val_if_fail (public_key, CKR_ARGUMENTS_BAD);
- g_return_val_if_fail (private_key, CKR_ARGUMENTS_BAD);
-
- sess = g_hash_table_lookup (the_sessions, GUINT_TO_POINTER (session));
- g_return_val_if_fail (sess != NULL, CKR_SESSION_HANDLE_INVALID);
-
- return CKR_MECHANISM_INVALID;
-}
-
-CK_RV
-mock_no_mechanisms_C_WrapKey (CK_SESSION_HANDLE session,
- CK_MECHANISM_PTR mechanism,
- CK_OBJECT_HANDLE wrapping_key,
- CK_OBJECT_HANDLE key,
- CK_BYTE_PTR wrapped_key,
- CK_ULONG_PTR wrapped_key_len)
-{
- Session *sess;
-
- g_return_val_if_fail (mechanism, CKR_MECHANISM_INVALID);
- g_return_val_if_fail (wrapping_key, CKR_OBJECT_HANDLE_INVALID);
- g_return_val_if_fail (key, CKR_OBJECT_HANDLE_INVALID);
- g_return_val_if_fail (wrapped_key_len, CKR_WRAPPED_KEY_LEN_RANGE);
-
- sess = g_hash_table_lookup (the_sessions, GUINT_TO_POINTER (session));
- g_return_val_if_fail (sess != NULL, CKR_SESSION_HANDLE_INVALID);
-
- return CKR_MECHANISM_INVALID;
-}
-
-CK_RV
-mock_no_mechanisms_C_UnwrapKey (CK_SESSION_HANDLE session,
- CK_MECHANISM_PTR mechanism,
- CK_OBJECT_HANDLE unwrapping_key,
- CK_BYTE_PTR wrapped_key,
- CK_ULONG wrapped_key_len,
- CK_ATTRIBUTE_PTR template,
- CK_ULONG count,
- CK_OBJECT_HANDLE_PTR key)
-{
- Session *sess;
-
- g_return_val_if_fail (mechanism, CKR_MECHANISM_INVALID);
- g_return_val_if_fail (unwrapping_key, CKR_WRAPPING_KEY_HANDLE_INVALID);
- g_return_val_if_fail (wrapped_key, CKR_WRAPPED_KEY_INVALID);
- g_return_val_if_fail (wrapped_key_len, CKR_WRAPPED_KEY_LEN_RANGE);
- g_return_val_if_fail (key, CKR_ARGUMENTS_BAD);
- g_return_val_if_fail (template, CKR_TEMPLATE_INCOMPLETE);
- g_return_val_if_fail (count, CKR_TEMPLATE_INCONSISTENT);
-
- sess = g_hash_table_lookup (the_sessions, GUINT_TO_POINTER (session));
- g_return_val_if_fail (sess != NULL, CKR_SESSION_HANDLE_INVALID);
-
- return CKR_MECHANISM_INVALID;
-}
-
-CK_RV
-mock_no_mechanisms_C_DeriveKey (CK_SESSION_HANDLE session,
- CK_MECHANISM_PTR mechanism,
- CK_OBJECT_HANDLE base_key,
- CK_ATTRIBUTE_PTR template,
- CK_ULONG count,
- CK_OBJECT_HANDLE_PTR key)
-{
- Session *sess;
-
- g_return_val_if_fail (mechanism, CKR_MECHANISM_INVALID);
- g_return_val_if_fail (count, CKR_TEMPLATE_INCOMPLETE);
- g_return_val_if_fail (template, CKR_TEMPLATE_INCOMPLETE);
- g_return_val_if_fail (key, CKR_ARGUMENTS_BAD);
-
- sess = g_hash_table_lookup (the_sessions, GUINT_TO_POINTER (session));
- g_return_val_if_fail (sess != NULL, CKR_SESSION_HANDLE_INVALID);
-
- return CKR_MECHANISM_INVALID;
-}
-
-CK_RV
-mock_unsupported_C_SeedRandom (CK_SESSION_HANDLE session,
- CK_BYTE_PTR pSeed,
- CK_ULONG seed_len)
-{
- return CKR_FUNCTION_NOT_SUPPORTED;
-}
-
-CK_RV
-mock_unsupported_C_GenerateRandom (CK_SESSION_HANDLE session,
- CK_BYTE_PTR random_data,
- CK_ULONG random_len)
-{
- return CKR_FUNCTION_NOT_SUPPORTED;
-}
-
-CK_FUNCTION_LIST mock_default_functions = {
- { 2, 11 }, /* version */
- mock_C_Initialize,
- mock_C_Finalize,
- mock_C_GetInfo,
- mock_C_GetFunctionList,
- mock_C_GetSlotList,
- mock_C_GetSlotInfo,
- mock_C_GetTokenInfo,
- mock_C_GetMechanismList,
- mock_C_GetMechanismInfo,
- mock_unsupported_C_InitToken,
- mock_unsupported_C_InitPIN,
- mock_unsupported_C_SetPIN,
- mock_C_OpenSession,
- mock_C_CloseSession,
- mock_C_CloseAllSessions,
- mock_C_GetSessionInfo,
- mock_unsupported_C_GetOperationState,
- mock_unsupported_C_SetOperationState,
- mock_unsupported_C_Login,
- mock_unsupported_C_Logout,
- mock_readonly_C_CreateObject,
- mock_unsupported_C_CopyObject,
- mock_readonly_C_DestroyObject,
- mock_unsupported_C_GetObjectSize,
- mock_C_GetAttributeValue,
- mock_readonly_C_SetAttributeValue,
- mock_C_FindObjectsInit,
- mock_C_FindObjects,
- mock_C_FindObjectsFinal,
- mock_no_mechanisms_C_EncryptInit,
- mock_not_initialized_C_Encrypt,
- mock_unsupported_C_EncryptUpdate,
- mock_unsupported_C_EncryptFinal,
- mock_no_mechanisms_C_DecryptInit,
- mock_not_initialized_C_Decrypt,
- mock_unsupported_C_DecryptUpdate,
- mock_unsupported_C_DecryptFinal,
- mock_unsupported_C_DigestInit,
- mock_unsupported_C_Digest,
- mock_unsupported_C_DigestUpdate,
- mock_unsupported_C_DigestKey,
- mock_unsupported_C_DigestFinal,
- mock_no_mechanisms_C_SignInit,
- mock_not_initialized_C_Sign,
- mock_unsupported_C_SignUpdate,
- mock_unsupported_C_SignFinal,
- mock_unsupported_C_SignRecoverInit,
- mock_unsupported_C_SignRecover,
- mock_no_mechanisms_C_VerifyInit,
- mock_not_initialized_C_Verify,
- mock_unsupported_C_VerifyUpdate,
- mock_unsupported_C_VerifyFinal,
- mock_unsupported_C_VerifyRecoverInit,
- mock_unsupported_C_VerifyRecover,
- mock_unsupported_C_DigestEncryptUpdate,
- mock_unsupported_C_DecryptDigestUpdate,
- mock_unsupported_C_SignEncryptUpdate,
- mock_unsupported_C_DecryptVerifyUpdate,
- mock_unsupported_C_GenerateKey,
- mock_no_mechanisms_C_GenerateKeyPair,
- mock_no_mechanisms_C_WrapKey,
- mock_no_mechanisms_C_UnwrapKey,
- mock_no_mechanisms_C_DeriveKey,
- mock_unsupported_C_SeedRandom,
- mock_unsupported_C_GenerateRandom,
- mock_C_GetFunctionStatus,
- mock_C_CancelFunction,
- mock_unsupported_C_WaitForSlotEvent
-};
diff --git a/tests/mock-pkcs11.h b/tests/mock-pkcs11.h
deleted file mode 100644
index aa024fcc..00000000
--- a/tests/mock-pkcs11.h
+++ /dev/null
@@ -1,348 +0,0 @@
-/*
- * Copyright (C) 2010-2012 Stefan Walter
- * Copyright (C) 2011 Collabora Ltd.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License as
- * published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
- * 02111-1307, USA.
- */
-
-#include <gck/pkcs11x.h>
-#include <gcr/gcr.h>
-
-#ifndef MOCK_MODULE_H
-#define MOCK_MODULE_H
-
-extern CK_FUNCTION_LIST mock_default_functions;
-
-CK_RV mock_C_Initialize (CK_VOID_PTR pInitArgs);
-
-CK_RV mock_C_Finalize (CK_VOID_PTR pReserved);
-
-CK_RV mock_C_GetInfo (CK_INFO_PTR pInfo);
-
-CK_RV mock_C_GetFunctionList (CK_FUNCTION_LIST_PTR_PTR list);
-
-CK_RV mock_C_GetSlotList (CK_BBOOL tokenPresent,
- CK_SLOT_ID_PTR pSlotList,
- CK_ULONG_PTR pulCount);
-
-CK_RV mock_C_GetSlotInfo (CK_SLOT_ID slotID,
- CK_SLOT_INFO_PTR pInfo);
-
-CK_RV mock_C_GetTokenInfo (CK_SLOT_ID slotID,
- CK_TOKEN_INFO_PTR pInfo);
-
-CK_RV mock_C_GetMechanismList (CK_SLOT_ID slotID,
- CK_MECHANISM_TYPE_PTR pMechanismList,
- CK_ULONG_PTR pulCount);
-
-CK_RV mock_C_GetMechanismInfo (CK_SLOT_ID slotID,
- CK_MECHANISM_TYPE type,
- CK_MECHANISM_INFO_PTR pInfo);
-
-CK_RV mock_unsupported_C_InitToken (CK_SLOT_ID slotID,
- CK_UTF8CHAR_PTR pPin,
- CK_ULONG ulPinLen,
- CK_UTF8CHAR_PTR pLabel);
-
-CK_RV mock_unsupported_C_WaitForSlotEvent (CK_FLAGS flags,
- CK_SLOT_ID_PTR pSlot,
- CK_VOID_PTR pReserved);
-
-CK_RV mock_C_OpenSession (CK_SLOT_ID slotID,
- CK_FLAGS flags,
- CK_VOID_PTR pApplication,
- CK_NOTIFY Notify,
- CK_SESSION_HANDLE_PTR phSession);
-
-CK_RV mock_C_CloseSession (CK_SESSION_HANDLE hSession);
-
-CK_RV mock_C_CloseAllSessions (CK_SLOT_ID slotID);
-
-CK_RV mock_C_GetFunctionStatus (CK_SESSION_HANDLE hSession);
-
-CK_RV mock_C_CancelFunction (CK_SESSION_HANDLE hSession);
-
-CK_RV mock_C_GetSessionInfo (CK_SESSION_HANDLE hSession,
- CK_SESSION_INFO_PTR pInfo);
-
-CK_RV mock_unsupported_C_InitPIN (CK_SESSION_HANDLE hSession,
- CK_UTF8CHAR_PTR pPin,
- CK_ULONG ulPinLen);
-
-CK_RV mock_unsupported_C_SetPIN (CK_SESSION_HANDLE hSession,
- CK_UTF8CHAR_PTR pOldPin,
- CK_ULONG ulOldLen,
- CK_UTF8CHAR_PTR pNewPin,
- CK_ULONG ulNewLen);
-
-CK_RV mock_unsupported_C_GetOperationState (CK_SESSION_HANDLE hSession,
- CK_BYTE_PTR pOperationState,
- CK_ULONG_PTR pulOperationStateLen);
-
-CK_RV mock_unsupported_C_SetOperationState (CK_SESSION_HANDLE hSession,
- CK_BYTE_PTR pOperationState,
- CK_ULONG ulOperationStateLen,
- CK_OBJECT_HANDLE hEncryptionKey,
- CK_OBJECT_HANDLE hAuthenticationKey);
-
-CK_RV mock_unsupported_C_Login (CK_SESSION_HANDLE hSession,
- CK_USER_TYPE userType,
- CK_UTF8CHAR_PTR pPin,
- CK_ULONG pPinLen);
-
-CK_RV mock_unsupported_C_Logout (CK_SESSION_HANDLE hSession);
-
-CK_RV mock_readonly_C_CreateObject (CK_SESSION_HANDLE hSession,
- CK_ATTRIBUTE_PTR pTemplate,
- CK_ULONG ulCount,
- CK_OBJECT_HANDLE_PTR phObject);
-
-CK_RV mock_unsupported_C_CopyObject (CK_SESSION_HANDLE hSession,
- CK_OBJECT_HANDLE hObject,
- CK_ATTRIBUTE_PTR pTemplate,
- CK_ULONG ulCount,
- CK_OBJECT_HANDLE_PTR phNewObject);
-
-CK_RV mock_readonly_C_DestroyObject (CK_SESSION_HANDLE hSession,
- CK_OBJECT_HANDLE hObject);
-
-CK_RV mock_unsupported_C_GetObjectSize (CK_SESSION_HANDLE hSession,
- CK_OBJECT_HANDLE hObject,
- CK_ULONG_PTR pulSize);
-
-CK_RV mock_C_GetAttributeValue (CK_SESSION_HANDLE hSession,
- CK_OBJECT_HANDLE hObject,
- CK_ATTRIBUTE_PTR pTemplate,
- CK_ULONG ulCount);
-
-CK_RV mock_readonly_C_SetAttributeValue (CK_SESSION_HANDLE hSession,
- CK_OBJECT_HANDLE hObject,
- CK_ATTRIBUTE_PTR pTemplate,
- CK_ULONG ulCount);
-
-CK_RV mock_C_FindObjectsInit (CK_SESSION_HANDLE hSession,
- CK_ATTRIBUTE_PTR pTemplate,
- CK_ULONG ulCount);
-
-CK_RV mock_C_FindObjects (CK_SESSION_HANDLE hSession,
- CK_OBJECT_HANDLE_PTR phObject,
- CK_ULONG ulMaxObjectCount,
- CK_ULONG_PTR pulObjectCount);
-
-CK_RV mock_fail_C_FindObjects (CK_SESSION_HANDLE hSession,
- CK_OBJECT_HANDLE_PTR phObject,
- CK_ULONG ulMaxObjectCount,
- CK_ULONG_PTR pulObjectCount);
-
-CK_RV mock_C_FindObjectsFinal (CK_SESSION_HANDLE hSession);
-
-CK_RV mock_no_mechanisms_C_EncryptInit (CK_SESSION_HANDLE hSession,
- CK_MECHANISM_PTR pMechanism,
- CK_OBJECT_HANDLE hKey);
-
-CK_RV mock_not_initialized_C_Encrypt (CK_SESSION_HANDLE hSession,
- CK_BYTE_PTR pData,
- CK_ULONG ulDataLen,
- CK_BYTE_PTR pEncryptedData,
- CK_ULONG_PTR pulEncryptedDataLen);
-
-CK_RV mock_unsupported_C_EncryptUpdate (CK_SESSION_HANDLE hSession,
- CK_BYTE_PTR pPart,
- CK_ULONG ulPartLen,
- CK_BYTE_PTR pEncryptedPart,
- CK_ULONG_PTR pulEncryptedPartLen);
-
-CK_RV mock_unsupported_C_EncryptFinal (CK_SESSION_HANDLE hSession,
- CK_BYTE_PTR pLastEncryptedPart,
- CK_ULONG_PTR pulLastEncryptedPartLen);
-
-CK_RV mock_no_mechanisms_C_DecryptInit (CK_SESSION_HANDLE hSession,
- CK_MECHANISM_PTR pMechanism,
- CK_OBJECT_HANDLE hKey);
-
-CK_RV mock_not_initialized_C_Decrypt (CK_SESSION_HANDLE hSession,
- CK_BYTE_PTR pEncryptedData,
- CK_ULONG ulEncryptedDataLen,
- CK_BYTE_PTR pData,
- CK_ULONG_PTR pulDataLen);
-
-CK_RV mock_unsupported_C_DecryptUpdate (CK_SESSION_HANDLE hSession,
- CK_BYTE_PTR pEncryptedPart,
- CK_ULONG ulEncryptedPartLen,
- CK_BYTE_PTR pPart,
- CK_ULONG_PTR pulPartLen);
-
-CK_RV mock_unsupported_C_DecryptFinal (CK_SESSION_HANDLE hSession,
- CK_BYTE_PTR pLastPart,
- CK_ULONG_PTR pulLastPartLen);
-
-CK_RV mock_unsupported_C_DigestInit (CK_SESSION_HANDLE hSession,
- CK_MECHANISM_PTR pMechanism);
-
-CK_RV mock_unsupported_C_Digest (CK_SESSION_HANDLE hSession,
- CK_BYTE_PTR pData,
- CK_ULONG ulDataLen,
- CK_BYTE_PTR pDigest,
- CK_ULONG_PTR pulDigestLen);
-
-CK_RV mock_unsupported_C_DigestUpdate (CK_SESSION_HANDLE hSession,
- CK_BYTE_PTR pPart,
- CK_ULONG ulPartLen);
-
-CK_RV mock_unsupported_C_DigestKey (CK_SESSION_HANDLE hSession,
- CK_OBJECT_HANDLE hKey);
-
-CK_RV mock_unsupported_C_DigestFinal (CK_SESSION_HANDLE hSession,
- CK_BYTE_PTR pDigest,
- CK_ULONG_PTR pulDigestLen);
-
-CK_RV mock_no_mechanisms_C_SignInit (CK_SESSION_HANDLE hSession,
- CK_MECHANISM_PTR pMechanism,
- CK_OBJECT_HANDLE hKey);
-
-CK_RV mock_not_initialized_C_Sign (CK_SESSION_HANDLE hSession,
- CK_BYTE_PTR pData,
- CK_ULONG ulDataLen,
- CK_BYTE_PTR pSignature,
- CK_ULONG_PTR pulSignatureLen);
-
-CK_RV mock_unsupported_C_SignUpdate (CK_SESSION_HANDLE hSession,
- CK_BYTE_PTR pPart,
- CK_ULONG ulPartLen);
-
-CK_RV mock_unsupported_C_SignFinal (CK_SESSION_HANDLE hSession,
- CK_BYTE_PTR pSignature,
- CK_ULONG_PTR pulSignatureLen);
-
-CK_RV mock_unsupported_C_SignRecoverInit (CK_SESSION_HANDLE hSession,
- CK_MECHANISM_PTR pMechanism,
- CK_OBJECT_HANDLE hKey);
-
-CK_RV mock_unsupported_C_SignRecover (CK_SESSION_HANDLE hSession,
- CK_BYTE_PTR pData,
- CK_ULONG ulDataLen,
- CK_BYTE_PTR pSignature,
- CK_ULONG_PTR pulSignatureLen);
-
-CK_RV mock_no_mechanisms_C_VerifyInit (CK_SESSION_HANDLE hSession,
- CK_MECHANISM_PTR pMechanism,
- CK_OBJECT_HANDLE hKey);
-
-CK_RV mock_not_initialized_C_Verify (CK_SESSION_HANDLE hSession,
- CK_BYTE_PTR pData,
- CK_ULONG ulDataLen,
- CK_BYTE_PTR pSignature,
- CK_ULONG ulSignatureLen);
-
-CK_RV mock_unsupported_C_VerifyUpdate (CK_SESSION_HANDLE hSession,
- CK_BYTE_PTR pPart,
- CK_ULONG ulPartLen);
-
-CK_RV mock_unsupported_C_VerifyFinal (CK_SESSION_HANDLE hSession,
- CK_BYTE_PTR pSignature,
- CK_ULONG pulSignatureLen);
-
-CK_RV mock_unsupported_C_VerifyRecoverInit (CK_SESSION_HANDLE hSession,
- CK_MECHANISM_PTR pMechanism,
- CK_OBJECT_HANDLE hKey);
-
-CK_RV mock_unsupported_C_VerifyRecover (CK_SESSION_HANDLE hSession,
- CK_BYTE_PTR pSignature,
- CK_ULONG pulSignatureLen,
- CK_BYTE_PTR pData,
- CK_ULONG_PTR pulDataLen);
-
-CK_RV mock_unsupported_C_DigestEncryptUpdate (CK_SESSION_HANDLE hSession,
- CK_BYTE_PTR pPart,
- CK_ULONG ulPartLen,
- CK_BYTE_PTR pEncryptedPart,
- CK_ULONG_PTR ulEncryptedPartLen);
-
-CK_RV mock_unsupported_C_DecryptDigestUpdate (CK_SESSION_HANDLE hSession,
- CK_BYTE_PTR pEncryptedPart,
- CK_ULONG ulEncryptedPartLen,
- CK_BYTE_PTR pPart,
- CK_ULONG_PTR pulPartLen);
-
-CK_RV mock_unsupported_C_SignEncryptUpdate (CK_SESSION_HANDLE hSession,
- CK_BYTE_PTR pPart,
- CK_ULONG ulPartLen,
- CK_BYTE_PTR pEncryptedPart,
- CK_ULONG_PTR ulEncryptedPartLen);
-
-CK_RV mock_unsupported_C_DecryptVerifyUpdate (CK_SESSION_HANDLE hSession,
- CK_BYTE_PTR pEncryptedPart,
- CK_ULONG ulEncryptedPartLen,
- CK_BYTE_PTR pPart,
- CK_ULONG_PTR pulPartLen);
-
-CK_RV mock_unsupported_C_GenerateKey (CK_SESSION_HANDLE hSession,
- CK_MECHANISM_PTR pMechanism,
- CK_ATTRIBUTE_PTR pTemplate,
- CK_ULONG ulCount,
- CK_OBJECT_HANDLE_PTR phKey);
-
-CK_RV mock_no_mechanisms_C_GenerateKeyPair (CK_SESSION_HANDLE hSession,
- CK_MECHANISM_PTR pMechanism,
- CK_ATTRIBUTE_PTR pPublicKeyTemplate,
- CK_ULONG ulPublicKeyAttributeCount,
- CK_ATTRIBUTE_PTR pPrivateKeyTemplate,
- CK_ULONG ulPrivateKeyAttributeCount,
- CK_OBJECT_HANDLE_PTR phPublicKey,
- CK_OBJECT_HANDLE_PTR phPrivateKey);
-
-CK_RV mock_no_mechanisms_C_WrapKey (CK_SESSION_HANDLE hSession,
- CK_MECHANISM_PTR pMechanism,
- CK_OBJECT_HANDLE hWrappingKey,
- CK_OBJECT_HANDLE hKey,
- CK_BYTE_PTR pWrappedKey,
- CK_ULONG_PTR pulWrappedKeyLen);
-
-CK_RV mock_no_mechanisms_C_UnwrapKey (CK_SESSION_HANDLE hSession,
- CK_MECHANISM_PTR pMechanism,
- CK_OBJECT_HANDLE pUnwrappingKey,
- CK_BYTE_PTR pWrappedKey,
- CK_ULONG pulWrappedKeyLen,
- CK_ATTRIBUTE_PTR pTemplate,
- CK_ULONG ulCount,
- CK_OBJECT_HANDLE_PTR phKey);
-
-CK_RV mock_no_mechanisms_C_DeriveKey (CK_SESSION_HANDLE hSession,
- CK_MECHANISM_PTR pMechanism,
- CK_OBJECT_HANDLE hBaseKey,
- CK_ATTRIBUTE_PTR pTemplate,
- CK_ULONG ulCount,
- CK_OBJECT_HANDLE_PTR phKey);
-
-CK_RV mock_unsupported_C_SeedRandom (CK_SESSION_HANDLE hSession,
- CK_BYTE_PTR pSeed,
- CK_ULONG ulSeedLen);
-
-CK_RV mock_unsupported_C_GenerateRandom (CK_SESSION_HANDLE hSession,
- CK_BYTE_PTR pRandomData,
- CK_ULONG ulRandomLen);
-
-CK_OBJECT_HANDLE mock_module_add_certificate (GcrCertificate *cert);
-
-CK_OBJECT_HANDLE mock_module_add_assertion (GcrCertificate *cert,
- CK_X_ASSERTION_TYPE assertion_type,
- const gchar *purpose,
- const gchar *peer);
-
-#define MOCK_SLOT_ONE_ID 1
-#define MOCK_SLOT_ONE_URI "pkcs11:manufacturer=MOCK%20MANUFACTURER;serial=MOCK%20SERIAL"
-
-#endif /* MOCK_MODULE_H */
diff --git a/tests/test-helper.c b/tests/test-helper.c
deleted file mode 100644
index efe3e3fd..00000000
--- a/tests/test-helper.c
+++ /dev/null
@@ -1,75 +0,0 @@
-/*
- * test-helper.c - Source for some test helper functions
- * Copyright (C) 2007-2009 Collabora Ltd.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-#include "config.h"
-#include "test-helper.h"
-
-#include "empathy-ui-utils.h"
-
-void
-test_init (int argc,
- char **argv)
-{
- g_test_init (&argc, &argv, NULL);
- gtk_init (&argc, &argv);
- empathy_gtk_init ();
-}
-
-void
-test_deinit (void)
-{
- ;
-}
-
-gchar *
-get_xml_file (const gchar *filename)
-{
- return g_build_filename (g_getenv ("EMPATHY_SRCDIR"), "tests", "xml",
- filename, NULL);
-}
-
-gchar *
-get_user_xml_file (const gchar *filename)
-{
- return g_build_filename (g_get_tmp_dir (), filename, NULL);
-}
-
-void
-copy_xml_file (const gchar *orig,
- const gchar *dest)
-{
- gboolean result;
- gchar *buffer;
- gsize length;
- gchar *sample;
- gchar *file;
-
- sample = get_xml_file (orig);
- result = g_file_get_contents (sample, &buffer, &length, NULL);
- g_assert (result);
-
- file = get_user_xml_file (dest);
- result = g_file_set_contents (file, buffer, length, NULL);
- g_assert (result);
-
- g_free (sample);
- g_free (file);
- g_free (buffer);
-}
-
diff --git a/tests/test-helper.h b/tests/test-helper.h
deleted file mode 100644
index cacd18b5..00000000
--- a/tests/test-helper.h
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * test-helper.h - Header for some test helper functions
- * Copyright (C) 2007-2009 Collabora Ltd.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-#ifndef __TEST_HELPER_H__
-#define __TEST_HELPER_H__
-
-#include <telepathy-glib/telepathy-glib.h>
-
-void test_init (int argc,
- char **argv);
-
-void test_deinit (void);
-
-gchar * get_xml_file (const gchar *filename);
-gchar * get_user_xml_file (const gchar *filename);
-void copy_xml_file (const gchar *orig, const gchar *dest);
-TpAccount * get_test_account (void);
-void destroy_test_account (TpAccount *account);
-
-
-#endif
diff --git a/tests/test-irc-helper.c b/tests/test-irc-helper.c
deleted file mode 100644
index 82d933a7..00000000
--- a/tests/test-irc-helper.c
+++ /dev/null
@@ -1,81 +0,0 @@
-#include "config.h"
-#include "test-irc-helper.h"
-
-void
-check_server (TpawIrcServer *server,
- const gchar *_address,
- guint _port,
- gboolean _ssl)
-{
- gchar *address;
- guint port;
- gboolean ssl;
-
- g_assert (server != NULL);
-
- g_object_get (server,
- "address", &address,
- "port", &port,
- "ssl", &ssl,
- NULL);
-
- g_assert (address != NULL && strcmp (address, _address) == 0);
- g_assert (port == _port);
- g_assert (ssl == _ssl);
-
- g_free (address);
-}
-
-void
-check_network (TpawIrcNetwork *network,
- const gchar *_name,
- const gchar *_charset,
- struct server_t *_servers,
- guint nb_servers)
-{
- gchar *name, *charset;
- GSList *servers, *l;
- guint i;
-
- g_assert (network != NULL);
-
- g_object_get (network,
- "name", &name,
- "charset", &charset,
- NULL);
-
- g_assert (name != NULL && strcmp (name, _name) == 0);
- g_assert (charset != NULL && strcmp (charset, _charset) == 0);
-
- servers = tpaw_irc_network_get_servers (network);
- g_assert (g_slist_length (servers) == nb_servers);
-
- /* Is that the right servers ? */
- for (l = servers, i = 0; l != NULL; l = g_slist_next (l), i++)
- {
- TpawIrcServer *server;
- gchar *address;
- guint port;
- gboolean ssl;
-
- server = l->data;
-
- g_object_get (server,
- "address", &address,
- "port", &port,
- "ssl", &ssl,
- NULL);
-
- g_assert (address != NULL && strcmp (address, _servers[i].address)
- == 0);
- g_assert (port == _servers[i].port);
- g_assert (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/tests/test-irc-helper.h b/tests/test-irc-helper.h
deleted file mode 100644
index 02eda917..00000000
--- a/tests/test-irc-helper.h
+++ /dev/null
@@ -1,21 +0,0 @@
-#include <string.h>
-
-#include <tp-account-widgets/tpaw-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 (TpawIrcServer *server, const gchar *_address,
- guint _port, gboolean _ssl);
-
-void check_network (TpawIrcNetwork *network, const gchar *_name,
- const gchar *_charset, struct server_t *_servers, guint nb_servers);
-
-#endif /* __CHECK_IRC_HELPER_H__ */
diff --git a/tests/test.manager b/tests/test.manager
deleted file mode 100644
index 8a49c326..00000000
--- a/tests/test.manager
+++ /dev/null
@@ -1,5 +0,0 @@
-[ConnectionManager]
-BusName=org.freedesktop.Telepathy.ConnectionManager.test
-ObjectPath=/org/freedesktop/Telepathy/ConnectionManager/test
-
-[Protocol test]
diff --git a/tests/test.profile b/tests/test.profile
deleted file mode 100644
index 20e552a1..00000000
--- a/tests/test.profile
+++ /dev/null
@@ -1,4 +0,0 @@
-[Profile]
-Manager = test
-Protocol = test
-DisplayName = test
diff --git a/tests/tp-glib.supp b/tests/tp-glib.supp
deleted file mode 100644
index b92bfccc..00000000
--- a/tests/tp-glib.supp
+++ /dev/null
@@ -1,333 +0,0 @@
-# Valgrind error suppression file
-
-# ============================= libc ==================================
-
-{
- ld.so initialization + selinux
- Memcheck:Leak
- ...
- fun:_dl_init
- obj:/lib/ld-*.so
-}
-
-{
- dlopen initialization, triggered by handle-leak-debug code
- Memcheck:Leak
- ...
- fun:__libc_dlopen_mode
- fun:init
- fun:backtrace
- fun:handle_leak_debug_bt
- fun:dynamic_ensure_handle
- fun:tp_handle_ensure
-}
-
-{
- ld.so initialization on glibc 2.9
- Memcheck:Cond
- fun:_dl_relocate_object
- fun:dl_main
- fun:_dl_sysdep_start
- fun:_dl_start
- obj:/lib/ld-2.9.so
-}
-
-{
- ld.so initialization on glibc 2.9
- Memcheck:Cond
- fun:strlen
- fun:_dl_init_paths
- fun:dl_main
- fun:_dl_sysdep_start
- fun:_dl_start
- obj:/lib/ld-2.9.so
-}
-
-{
- selinux, we just don't know
- Memcheck:Leak
- fun:malloc
- fun:getdelim
- obj:/lib/libselinux.so.1
-}
-
-# ============================= GLib ==================================
-
-{
- g_set_prgname copies its argument
- Memcheck:Leak
- ...
- fun:g_set_prgname
-}
-
-{
- one g_get_charset per child^Wprocess
- Memcheck:Leak
- ...
- fun:g_get_charset
-}
-
-{
- GQuarks can't be freed
- Memcheck:Leak
- ...
- fun:g_quark_from_static_string
-}
-
-{
- GQuarks can't be freed
- Memcheck:Leak
- ...
- fun:g_quark_from_string
-}
-
-{
- interned strings can't be freed
- Memcheck:Leak
- ...
- fun:g_intern_string
-}
-
-{
- interned strings can't be freed
- Memcheck:Leak
- ...
- fun:g_intern_static_string
-}
-
-{
- shared global default g_main_context
- Memcheck:Leak
- ...
- fun:g_main_context_new
- fun:g_main_context_default
-}
-
-{
- GTest initialization
- Memcheck:Leak
- ...
- fun:g_test_init
- fun:main
-}
-
-{
- GTest admin
- Memcheck:Leak
- ...
- fun:g_test_add_vtable
-}
-
-{
- GTest pseudorandomness
- Memcheck:Leak
- ...
- fun:g_rand_new_with_seed_array
- fun:test_run_seed
- ...
- fun:g_test_run
-}
-
-{
- GSLice initialization
- Memcheck:Leak
- ...
- fun:g_malloc0
- fun:g_slice_init_nomessage
- fun:g_slice_alloc
-}
-
-# ============================= GObject ===============================
-
-{
- g_type_init
- Memcheck:Leak
- ...
- fun:g_type_init
-}
-
-{
- g_type_init_with_debug_flags
- Memcheck:Leak
- ...
- fun:g_type_init_with_debug_flags
-}
-
-{
- g_type_register_static
- Memcheck:Leak
- ...
- fun:g_type_register_static
-}
-
-{
- g_type_add_interface_static
- Memcheck:Leak
- ...
- fun:g_type_add_interface_static
-}
-
-# ============================= GIO ===================================
-
-{
- g_simple_async_result class
- Memcheck:Leak
- ...
- fun:g_type_class_ref
- ...
- fun:g_simple_async_result_new
-}
-
-# ============================= dbus-glib =============================
-
-{
- dbus-glib, https://bugs.freedesktop.org/show_bug.cgi?id=14125
- Memcheck:Addr4
- fun:g_hash_table_foreach
- obj:/usr/lib/libdbus-glib-1.so.2.1.0
- fun:g_object_run_dispose
-}
-
-{
- registering marshallers is permanent
- Memcheck:Leak
- ...
- fun:dbus_g_object_register_marshaller_array
- fun:dbus_g_object_register_marshaller
-}
-
-{
- dbus-glib specialized GTypes are permanent
- Memcheck:Leak
- ...
- fun:dbus_g_type_specialized_init
-}
-
-{
- libdbus shared connection
- Memcheck:Leak
- ...
- fun:dbus_g_bus_get
-}
-
-{
- dbus-gobject registrations aren't freed unless we fall off the bus
- Memcheck:Leak
- ...
- fun:g_slist_append
- fun:dbus_g_connection_register_g_object
-}
-
-{
- DBusGProxy slots aren't freed unless we fall off the bus
- Memcheck:Leak
- ...
- fun:dbus_connection_allocate_data_slot
- ...
- fun:dbus_g_proxy_constructor
-}
-
-{
- error registrations are for life, not just for Christmas
- Memcheck:Leak
- ...
- fun:dbus_g_error_domain_register
-}
-
-# ============================= telepathy-glib ========================
-
-{
- tp_dbus_daemon_constructor @daemons once per DBusConnection
- Memcheck:Leak
- ...
- fun:g_slice_alloc
- fun:tp_dbus_daemon_constructor
-}
-
-{
- tp_proxy_subclass_add_error_mapping refs the enum
- Memcheck:Leak
- ...
- fun:g_type_class_ref
- fun:tp_proxy_subclass_add_error_mapping
-}
-
-{
- tp_proxy_or_subclass_hook_on_interface_add never frees its list
- Memcheck:Leak
- ...
- fun:tp_proxy_or_subclass_hook_on_interface_add
-}
-
-{
- tp_dbus_daemon_constructor filter not freed til we fall off the bus
- Memcheck:Leak
- ...
- fun:dbus_connection_add_filter
- fun:tp_dbus_daemon_constructor
-}
-
-{
- tp_g_socket_address_from_variant reffing GNIO types
- Memcheck:Leak
- ...
- fun:g_type_class_ref
- ...
- fun:tp_g_socket_address_from_variant
-}
-
-{
- creating classes for DBusGProxy
- Memcheck:Leak
- ...
- fun:g_type_class_ref
- ...
- fun:g_object_new
- ...
- fun:tp_proxy_borrow_interface_by_id
-}
-
-{
- creating classes for tp_dbus_daemon_new
- Memcheck:Leak
- ...
- fun:g_type_class_ref
- ...
- fun:g_object_new
- ...
- fun:tp_dbus_daemon_new
-}
-
-{
- creating classes for TpCHannel
- Memcheck:Leak
- ...
- fun:g_type_class_ref
- ...
- fun:g_object_new
- ...
- fun:tp_channel_new
-}
-
-{
- creating a boxed type to use in TpCapabilities
- Memcheck:Leak
- ...
- fun:g_type_class_ref
- ...
- fun:g_param_spec_boxed
- fun:tp_capabilities_class_intern_init
-}
-
-# ============================= questionable ==========================
-
-{
- creating classes for instances (this is a pretty big hammer)
- Memcheck:Leak
- ...
- fun:g_type_class_ref
- ...
- fun:g_type_create_instance
- ...
- fun:g_param_spec_string
-}
diff --git a/tests/xml/.gitignore b/tests/xml/.gitignore
deleted file mode 100644
index 01af91dc..00000000
--- a/tests/xml/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-user-irc-networks.xml
diff --git a/tests/xml/Makefile.am b/tests/xml/Makefile.am
deleted file mode 100644
index a7cc0d7b..00000000
--- a/tests/xml/Makefile.am
+++ /dev/null
@@ -1,4 +0,0 @@
-EXTRA_DIST = \
- default-irc-networks-sample.xml \
- user-irc-networks-sample.xml \
- chatrooms-sample.xml
diff --git a/tests/xml/chatrooms-sample.xml b/tests/xml/chatrooms-sample.xml
deleted file mode 100644
index e06c43e5..00000000
--- a/tests/xml/chatrooms-sample.xml
+++ /dev/null
@@ -1,15 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<chatrooms>
- <chatroom>
- <name>name1</name>
- <room>room1</room>
- <account>CHANGE_ME</account>
- <auto_connect>yes</auto_connect>
- </chatroom>
- <chatroom>
- <name>name2</name>
- <room>room2</room>
- <account>CHANGE_ME</account>
- <auto_connect>no</auto_connect>
- </chatroom>
-</chatrooms>
diff --git a/tests/xml/default-irc-networks-sample.xml b/tests/xml/default-irc-networks-sample.xml
deleted file mode 100644
index 257919c2..00000000
--- a/tests/xml/default-irc-networks-sample.xml
+++ /dev/null
@@ -1,30 +0,0 @@
-<?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/tests/xml/user-irc-networks-sample.xml b/tests/xml/user-irc-networks-sample.xml
deleted file mode 100644
index 9e4f0869..00000000
--- a/tests/xml/user-irc-networks-sample.xml
+++ /dev/null
@@ -1,26 +0,0 @@
-<?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/ubuntu-online-accounts/.gitignore b/ubuntu-online-accounts/.gitignore
deleted file mode 100644
index 7c663173..00000000
--- a/ubuntu-online-accounts/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-empathy.application
diff --git a/ubuntu-online-accounts/Makefile.am b/ubuntu-online-accounts/Makefile.am
deleted file mode 100644
index 416bb112..00000000
--- a/ubuntu-online-accounts/Makefile.am
+++ /dev/null
@@ -1,12 +0,0 @@
-SUBDIRS = mc-plugin cc-plugins
-
-appdir = $(ACCOUNTS_APPLICATION_FILES_DIR)
-
-empathy.application: empathy.application.in
- $(AM_V_GEN)intltool-merge --no-translations -x -u $< $@
-
-app_DATA = empathy.application
-
-EXTRA_DIST = empathy.application.in
-
-DISTCLEANFILES = $(app_DATA)
diff --git a/ubuntu-online-accounts/cc-plugins/Makefile.am b/ubuntu-online-accounts/cc-plugins/Makefile.am
deleted file mode 100644
index c8c3ce09..00000000
--- a/ubuntu-online-accounts/cc-plugins/Makefile.am
+++ /dev/null
@@ -1 +0,0 @@
-SUBDIRS = account-plugins providers services app-plugin
diff --git a/ubuntu-online-accounts/cc-plugins/account-plugins/Makefile.am b/ubuntu-online-accounts/cc-plugins/account-plugins/Makefile.am
deleted file mode 100644
index 1271f6ec..00000000
--- a/ubuntu-online-accounts/cc-plugins/account-plugins/Makefile.am
+++ /dev/null
@@ -1,28 +0,0 @@
-plugindir = $(ACCOUNTS_PROVIDER_PLUGIN_DIR)
-
-INCLUDES = \
- -I$(top_builddir) \
- -I$(top_srcdir)/libempathy \
- -I$(top_srcdir)/libempathy-gtk \
- -DLOCALEDIR=\""$(datadir)/locale"\" \
- $(UOA_CFLAGS) \
- $(WARN_CFLAGS) \
- $(ERROR_CFLAGS) \
- $(DISABLE_DEPRECATED) \
- $(EMPATHY_CFLAGS)
-
-plugin_LTLIBRARIES = libempathy-accounts-plugin.la
-
-libempathy_accounts_plugin_la_LDFLAGS = \
- -module -avoid-version
-
-libempathy_accounts_plugin_la_SOURCES = \
- empathy-accounts-plugin.c \
- empathy-accounts-plugin.h \
- empathy-accounts-plugin-widget.c \
- empathy-accounts-plugin-widget.h
-
-libempathy_accounts_plugin_la_LIBADD = \
- $(UOA_LIBS) \
- $(top_builddir)/libempathy/libempathy.la \
- $(top_builddir)/libempathy-gtk/libempathy-gtk.la
diff --git a/ubuntu-online-accounts/cc-plugins/account-plugins/empathy-accounts-plugin-widget.c b/ubuntu-online-accounts/cc-plugins/account-plugins/empathy-accounts-plugin-widget.c
deleted file mode 100644
index c0f29e2c..00000000
--- a/ubuntu-online-accounts/cc-plugins/account-plugins/empathy-accounts-plugin-widget.c
+++ /dev/null
@@ -1,435 +0,0 @@
-/*
- * empathy-accounts-plugin-widget.c
- *
- * Copyright (C) 2012 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
- */
-
-
-#include "config.h"
-
-#include "tpaw-accounts-plugin-widget.h"
-
-#include <glib/gi18n-lib.h>
-
-#include <telepathy-glib/telepathy-glib.h>
-
-#include <libaccounts-glib/ag-service.h>
-#include <libaccounts-glib/ag-account-service.h>
-
-#include "tpaw-account-widget.h"
-
-G_DEFINE_TYPE (EmpathyAccountsPluginWidget, empathy_accounts_plugin_widget, GTK_TYPE_BOX)
-
-enum
-{
- PROP_ACCOUNT = 1,
- N_PROPS
-};
-
-enum
-{
- SIG_DONE,
- LAST_SIGNAL
-};
-
-static guint signals[LAST_SIGNAL];
-
-struct _EmpathyAccountsPluginWidgetPriv
-{
- AgAccount *account;
-
- EmpathyAccountSettings *settings;
-
- EmpathyAccountWidget *account_widget;
- GtkWidget *done_button;
-};
-
-static void
-empathy_accounts_plugin_widget_get_property (GObject *object,
- guint property_id,
- GValue *value,
- GParamSpec *pspec)
-{
- EmpathyAccountsPluginWidget *self = EMPATHY_ACCOUNTS_PLUGIN_WIDGET (object);
-
- switch (property_id)
- {
- case PROP_ACCOUNT:
- g_value_set_object (value, self->priv->account);
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
- break;
- }
-}
-
-static void
-empathy_accounts_plugin_widget_set_property (GObject *object,
- guint property_id,
- const GValue *value,
- GParamSpec *pspec)
-{
- EmpathyAccountsPluginWidget *self = EMPATHY_ACCOUNTS_PLUGIN_WIDGET (object);
-
- switch (property_id)
- {
- case PROP_ACCOUNT:
- self->priv->account = g_value_dup_object (value);
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
- break;
- }
-}
-
-static EmpathyAccountSettings *
-create_account_settings (AgAccount *account)
-{
- AgService *service;
- GList *services;
- AgAccountService *account_service;
- GVariant *v;
- gchar *manager = NULL, *protocol = NULL;
- EmpathyAccountSettings *settings;
-
- g_assert (account->id == 0);
-
- services = ag_account_list_services_by_type (account, "IM");
- g_return_val_if_fail (services != NULL, NULL);
- service = (AgService *) services->data;
-
- account_service = ag_account_service_new (account, service);
-
- v = ag_account_service_get_variant (account_service,
- "telepathy/manager", NULL);
- if (v != NULL)
- manager = g_variant_dup_string (v, NULL);
-
- v = ag_account_service_get_variant (account_service,
- "telepathy/protocol", NULL);
- if (v != NULL)
- protocol = g_variant_dup_string (v, NULL);
-
- g_return_val_if_fail (manager != NULL, NULL);
- g_return_val_if_fail (protocol != NULL, NULL);
-
- settings = empathy_account_settings_new (manager, protocol, NULL,
- ag_service_get_display_name (service));
-
- empathy_account_settings_set_storage_provider (settings,
- EMPATHY_UOA_PROVIDER);
-
- empathy_account_settings_set_icon_name_async (settings,
- ag_service_get_icon_name (service), NULL, NULL);
-
- g_free (manager);
- g_free (protocol);
-
- return settings;
-}
-
-static void
-response_cb (GtkWidget *widget,
- gint response,
- EmpathyAccountsPluginWidget *self)
-{
- if (!self->priv->account_widget)
- {
- // widget might not be ready yet
- g_signal_emit (self, signals[SIG_DONE], 0);
- return;
- }
- if (response == GTK_RESPONSE_OK)
- {
- empathy_account_widget_apply_and_log_in (self->priv->account_widget);
-
- /* Rely on account_widget_close_cb to fire the 'done' signal */
- }
- else
- {
- empathy_account_widget_discard_pending_changes (
- self->priv->account_widget);
-
- g_signal_emit (self, signals[SIG_DONE], 0);
- }
-}
-
-static GtkWidget *
-create_top_bar (EmpathyAccountsPluginWidget *self)
-{
- GtkWidget *bar, *content, *action, *label;
- GtkCssProvider *css;
- GError *error = NULL;
-
- bar = gtk_info_bar_new_with_buttons (
- GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
- NULL);
-
- self->priv->done_button = gtk_info_bar_add_button (GTK_INFO_BAR (bar),
- _("Done"), GTK_RESPONSE_OK);
-
- gtk_widget_set_hexpand (bar, TRUE);
- gtk_info_bar_set_message_type (GTK_INFO_BAR (bar), GTK_MESSAGE_QUESTION);
- action = gtk_info_bar_get_action_area (GTK_INFO_BAR (bar));
- gtk_orientable_set_orientation (GTK_ORIENTABLE (action),
- GTK_ORIENTATION_HORIZONTAL);
- gtk_widget_set_name (bar, "authorization-infobar");
- css = gtk_css_provider_new ();
- if (gtk_css_provider_load_from_data (css,
- "@define-color question_bg_color rgb (222, 222, 222);"
- "GtkInfoBar#authorization-infobar"
- "{"
- " color: @fg_color;"
- "}",
- -1, &error))
- {
- GtkStyleContext *context = gtk_widget_get_style_context (bar);
-
- gtk_style_context_add_provider (context, (GtkStyleProvider *) css,
- GTK_STYLE_PROVIDER_PRIORITY_APPLICATION);
- }
- else
- {
- g_warning ("Error processing CSS theme override: %s", error->message);
- g_clear_error (&error);
- }
- g_object_unref (css);
-
- content = gtk_info_bar_get_content_area (GTK_INFO_BAR (bar));
-
- label = gtk_label_new (_("Please enter your account details"));
- gtk_container_add (GTK_CONTAINER (content), label);
- gtk_widget_show (label);
-
- g_signal_connect (bar, "response",
- G_CALLBACK (response_cb), self);
-
- return bar;
-}
-
-static void
-account_widget_handle_apply_cb (EmpathyAccountWidget *widget,
- gboolean valid,
- EmpathyAccountsPluginWidget *self)
-{
- gtk_widget_set_sensitive (self->priv->done_button, valid);
-}
-
-static void
-account_widget_close_cb (EmpathyAccountWidget *widget,
- GtkResponseType response,
- EmpathyAccountsPluginWidget *self)
-{
- g_signal_emit (self, signals[SIG_DONE], 0);
-}
-
-static void
-add_account_widget (EmpathyAccountsPluginWidget *self)
-{
- GtkWidget *alig;
- gboolean simple;
-
- alig = gtk_alignment_new (0.5, 0, 0, 0);
-
- gtk_box_pack_start (GTK_BOX (self), alig, TRUE, TRUE, 0);
- gtk_widget_show (GTK_WIDGET (alig));
-
- /* Use the simple widget only when creating the account */
- simple = (self->priv->account->id == 0);
-
- self->priv->account_widget = empathy_account_widget_new_for_protocol (
- self->priv->settings, simple);
-
- empathy_account_widget_hide_buttons (self->priv->account_widget);
-
- gtk_widget_set_valign (GTK_WIDGET (self->priv->account_widget),
- GTK_ALIGN_CENTER);
-
- gtk_container_add (GTK_CONTAINER (alig),
- GTK_WIDGET (self->priv->account_widget));
- gtk_widget_show (GTK_WIDGET (self->priv->account_widget));
-
- if (!empathy_account_settings_is_valid (self->priv->settings))
- {
- gtk_widget_set_sensitive (self->priv->done_button, FALSE);
- }
-
- g_signal_connect (self->priv->account_widget, "handle-apply",
- G_CALLBACK (account_widget_handle_apply_cb), self);
- g_signal_connect (self->priv->account_widget, "close",
- G_CALLBACK (account_widget_close_cb), self);
-}
-
-static void
-maybe_add_account_widget (EmpathyAccountsPluginWidget *self)
-{
- g_return_if_fail (self->priv->settings != NULL);
-
- if (empathy_account_settings_is_ready (self->priv->settings))
- {
- add_account_widget (self);
- }
- else
- {
- tp_g_signal_connect_object (self->priv->settings, "notify::ready",
- G_CALLBACK (add_account_widget), self, G_CONNECT_SWAPPED);
- }
-}
-
-static void
-manager_prepared_cb (GObject *source,
- GAsyncResult *result,
- gpointer user_data)
-{
- TpWeakRef *wr = user_data;
- EmpathyAccountsPluginWidget *self = tp_weak_ref_dup_object (wr);
- TpAccountManager *manager = (TpAccountManager *) source;
- GList *accounts;
- GError *error = NULL;
-
- if (self == NULL)
- {
- tp_weak_ref_destroy (wr);
- return;
- }
-
- if (!tp_proxy_prepare_finish (manager, result, &error))
- {
- g_debug ("Error preparing Account Manager: %s", error->message);
- g_clear_error (&error);
- goto out;
- }
-
- accounts = tp_account_manager_dup_valid_accounts (manager);
- while (accounts != NULL)
- {
- TpAccount *account = accounts->data;
- const GValue *value;
-
- value = tp_account_get_storage_identifier (account);
- if (G_VALUE_HOLDS_UINT (value) &&
- g_value_get_uint (value) == self->priv->account->id)
- {
- self->priv->settings = empathy_account_settings_new_for_account (
- account);
- maybe_add_account_widget (self);
- break;
- }
-
- accounts = g_list_delete_link (accounts, accounts);
- }
- g_list_free_full (accounts, g_object_unref);
-
-out:
- tp_weak_ref_destroy (wr);
- g_object_unref (self);
-}
-
-static void
-empathy_accounts_plugin_widget_constructed (GObject *object)
-{
- EmpathyAccountsPluginWidget *self = EMPATHY_ACCOUNTS_PLUGIN_WIDGET (object);
- void (*chain_up) (GObject *) =
- ((GObjectClass *) empathy_accounts_plugin_widget_parent_class)->constructed;
- GtkWidget *top;
-
- if (chain_up != NULL)
- chain_up (object);
-
- g_return_if_fail (AG_IS_ACCOUNT (self->priv->account));
-
- /* Top bar */
- top = create_top_bar (self);
- gtk_widget_show (top);
- gtk_box_pack_start (GTK_BOX (self), top, FALSE, FALSE, 0);
-
- if (self->priv->account->id != 0)
- {
- TpAccountManager *manager;
-
- /* Prepare tp's account manager to find the TpAccount corresponding to our
- * AgAccount */
- manager = tp_account_manager_dup ();
-
- tp_proxy_prepare_async (manager, NULL,
- manager_prepared_cb, tp_weak_ref_new (self, NULL, NULL));
- g_object_unref (manager);
- return;
- }
-
- self->priv->settings = create_account_settings (self->priv->account);
- maybe_add_account_widget (self);
-}
-
-static void
-empathy_accounts_plugin_widget_dispose (GObject *object)
-{
- EmpathyAccountsPluginWidget *self = EMPATHY_ACCOUNTS_PLUGIN_WIDGET (object);
- void (*chain_up) (GObject *) =
- ((GObjectClass *) empathy_accounts_plugin_widget_parent_class)->dispose;
-
- g_clear_object (&self->priv->account);
- g_clear_object (&self->priv->settings);
-
- if (chain_up != NULL)
- chain_up (object);
-}
-
-static void
-empathy_accounts_plugin_widget_class_init (
- EmpathyAccountsPluginWidgetClass *klass)
-{
- GObjectClass *oclass = G_OBJECT_CLASS (klass);
- GParamSpec *spec;
-
- oclass->get_property = empathy_accounts_plugin_widget_get_property;
- oclass->set_property = empathy_accounts_plugin_widget_set_property;
- oclass->constructed = empathy_accounts_plugin_widget_constructed;
- oclass->dispose = empathy_accounts_plugin_widget_dispose;
-
- spec = g_param_spec_object ("account", "account",
- "AgAccount",
- AG_TYPE_ACCOUNT,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS);
- g_object_class_install_property (oclass, PROP_ACCOUNT, spec);
-
- signals[SIG_DONE] = g_signal_new ("done",
- G_OBJECT_CLASS_TYPE (klass),
- G_SIGNAL_RUN_LAST,
- 0, NULL, NULL, NULL,
- G_TYPE_NONE,
- 0);
-
- g_type_class_add_private (klass, sizeof (EmpathyAccountsPluginWidgetPriv));
-}
-
-static void
-empathy_accounts_plugin_widget_init (EmpathyAccountsPluginWidget *self)
-{
- self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self,
- EMPATHY_TYPE_ACCOUNTS_PLUGIN_WIDGET, EmpathyAccountsPluginWidgetPriv);
-}
-
-GtkWidget *
-empathy_accounts_plugin_widget_new (AgAccount *account)
-{
- return g_object_new (EMPATHY_TYPE_ACCOUNTS_PLUGIN_WIDGET,
- "account", account,
- "orientation", GTK_ORIENTATION_VERTICAL,
- "spacing", 10,
- NULL);
-}
diff --git a/ubuntu-online-accounts/cc-plugins/account-plugins/empathy-accounts-plugin-widget.h b/ubuntu-online-accounts/cc-plugins/account-plugins/empathy-accounts-plugin-widget.h
deleted file mode 100644
index 27d114c0..00000000
--- a/ubuntu-online-accounts/cc-plugins/account-plugins/empathy-accounts-plugin-widget.h
+++ /dev/null
@@ -1,74 +0,0 @@
-/*
- * empathy-accounts-plugin-widget.h
- *
- * Copyright (C) 2012 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
- */
-
-#ifndef __EMPATHY_ACCOUNTS_PLUGIN_WIDGET_H__
-#define __EMPATHY_ACCOUNTS_PLUGIN_WIDGET_H__
-
-#include <gtk/gtk.h>
-#include <libaccounts-glib/ag-account.h>
-
-G_BEGIN_DECLS
-
-typedef struct _EmpathyAccountsPluginWidget EmpathyAccountsPluginWidget;
-typedef struct _EmpathyAccountsPluginWidgetClass EmpathyAccountsPluginWidgetClass;
-typedef struct _EmpathyAccountsPluginWidgetPriv EmpathyAccountsPluginWidgetPriv;
-
-struct _EmpathyAccountsPluginWidgetClass
-{
- /*<private>*/
- GtkBoxClass parent_class;
-};
-
-struct _EmpathyAccountsPluginWidget
-{
- /*<private>*/
- GtkBox parent;
- EmpathyAccountsPluginWidgetPriv *priv;
-};
-
-GType empathy_accounts_plugin_widget_get_type (void);
-
-/* TYPE MACROS */
-#define EMPATHY_TYPE_ACCOUNTS_PLUGIN_WIDGET \
- (empathy_accounts_plugin_widget_get_type ())
-#define EMPATHY_ACCOUNTS_PLUGIN_WIDGET(obj) \
- (G_TYPE_CHECK_INSTANCE_CAST((obj), \
- EMPATHY_TYPE_ACCOUNTS_PLUGIN_WIDGET, \
- EmpathyAccountsPluginWidget))
-#define EMPATHY_ACCOUNTS_PLUGIN_WIDGET_CLASS(klass) \
- (G_TYPE_CHECK_CLASS_CAST((klass), \
- EMPATHY_TYPE_ACCOUNTS_PLUGIN_WIDGET, \
- EmpathyAccountsPluginWidgetClass))
-#define EMPATHY_IS_ACCOUNTS_PLUGIN_WIDGET(obj) \
- (G_TYPE_CHECK_INSTANCE_TYPE((obj), \
- EMPATHY_TYPE_ACCOUNTS_PLUGIN_WIDGET))
-#define EMPATHY_IS_ACCOUNTS_PLUGIN_WIDGET_CLASS(klass) \
- (G_TYPE_CHECK_CLASS_TYPE((klass), \
- EMPATHY_TYPE_ACCOUNTS_PLUGIN_WIDGET))
-#define EMPATHY_ACCOUNTS_PLUGIN_WIDGET_GET_CLASS(obj) \
- (G_TYPE_INSTANCE_GET_CLASS ((obj), \
- EMPATHY_TYPE_ACCOUNTS_PLUGIN_WIDGET, \
- EmpathyAccountsPluginWidgetClass))
-
-GtkWidget * empathy_accounts_plugin_widget_new (AgAccount *account);
-
-G_END_DECLS
-
-#endif /* #ifndef __EMPATHY_ACCOUNTS_PLUGIN_WIDGET_H__*/
diff --git a/ubuntu-online-accounts/cc-plugins/account-plugins/empathy-accounts-plugin.c b/ubuntu-online-accounts/cc-plugins/account-plugins/empathy-accounts-plugin.c
deleted file mode 100644
index 1f322ec5..00000000
--- a/ubuntu-online-accounts/cc-plugins/account-plugins/empathy-accounts-plugin.c
+++ /dev/null
@@ -1,131 +0,0 @@
-/*
- * empathy-accounts-plugin.c
- *
- * Copyright (C) 2012 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
- */
-
-#include "config.h"
-
-#include "empathy-accounts-plugin.h"
-
-#include "empathy-client-factory.h"
-#include "empathy-uoa-utils.h"
-
-#include "empathy-accounts-plugin-widget.h"
-
-G_DEFINE_TYPE (EmpathyAccountsPlugin, empathy_accounts_plugin, AP_TYPE_PLUGIN)
-
-static void
-widget_done_cb (EmpathyAccountsPluginWidget *widget,
- ApPlugin *plugin)
-{
- ap_plugin_emit_finished (plugin);
-}
-
-static GtkWidget *
-empathy_accounts_plugin_build_widget (ApPlugin *plugin)
-{
- AgAccount *account;
- GtkWidget *widget;
-
- account = ap_plugin_get_account (plugin);
- empathy_uoa_manager_set_default (ag_account_get_manager (account));
-
- widget = empathy_accounts_plugin_widget_new (account);
-
- g_signal_connect (widget, "done",
- G_CALLBACK (widget_done_cb), plugin);
-
- return widget;
-}
-
-static void
-store_delete_cb (AgAccount *account,
- const GError *error,
- gpointer user_data)
-{
- GSimpleAsyncResult *result = user_data;
-
- if (error != NULL)
- {
- g_debug ("Failed to delete account with ID '%u': %s",
- account->id, error->message);
-
- g_simple_async_result_set_from_error (result, error);
- }
-
- g_simple_async_result_complete (result);
- g_object_unref (result);
-}
-
-static void
-empathy_accounts_plugin_delete_account (ApPlugin *plugin,
- GAsyncReadyCallback callback,
- gpointer user_data)
-{
- AgAccount *account;
- GSimpleAsyncResult *result;
-
- result = g_simple_async_result_new (G_OBJECT (plugin),
- callback, user_data, ap_plugin_delete_account);
-
- account = ap_plugin_get_account (plugin);
-
- ag_account_delete (account);
- ag_account_store (account, store_delete_cb, result);
-}
-
-static void
-empathy_accounts_plugin_act_headless (ApPlugin *plugin)
-{
-}
-
-static void
-empathy_accounts_plugin_class_init (
- EmpathyAccountsPluginClass *klass)
-{
- ApPluginClass *pclass = AP_PLUGIN_CLASS (klass);
-
- pclass->build_widget = empathy_accounts_plugin_build_widget;
- pclass->delete_account = empathy_accounts_plugin_delete_account;
- pclass->act_headless = empathy_accounts_plugin_act_headless;
-}
-
-static void
-empathy_accounts_plugin_init (EmpathyAccountsPlugin *self)
-{
- if (tp_account_manager_can_set_default ())
- {
- EmpathyClientFactory *factory;
- TpAccountManager *am;
-
- factory = empathy_client_factory_dup ();
- am = tp_account_manager_new_with_factory (
- TP_SIMPLE_CLIENT_FACTORY (factory));
- tp_account_manager_set_default (am);
-
- g_object_unref (factory);
- g_object_unref (am);
- }
-
-}
-
-GType
-ap_module_get_object_type (void)
-{
- return EMPATHY_TYPE_ACCOUNTS_PLUGIN;
-}
diff --git a/ubuntu-online-accounts/cc-plugins/account-plugins/empathy-accounts-plugin.h b/ubuntu-online-accounts/cc-plugins/account-plugins/empathy-accounts-plugin.h
deleted file mode 100644
index 8f310259..00000000
--- a/ubuntu-online-accounts/cc-plugins/account-plugins/empathy-accounts-plugin.h
+++ /dev/null
@@ -1,71 +0,0 @@
-/*
- * empathy-accounts-plugin.h
- *
- * Copyright (C) 2012 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
- */
-
-#ifndef __EMPATHY_ACCOUNTS_PLUGIN_H__
-#define __EMPATHY_ACCOUNTS_PLUGIN_H__
-
-#include <libaccount-plugin/plugin.h>
-
-G_BEGIN_DECLS
-
-typedef struct _EmpathyAccountsPlugin EmpathyAccountsPlugin;
-typedef struct _EmpathyAccountsPluginClass EmpathyAccountsPluginClass;
-
-struct _EmpathyAccountsPluginClass
-{
- /*<private>*/
- ApPluginClass parent_class;
-};
-
-struct _EmpathyAccountsPlugin
-{
- /*<private>*/
- ApPlugin parent;
-};
-
-GType empathy_accounts_plugin_get_type (void);
-
-/* TYPE MACROS */
-#define EMPATHY_TYPE_ACCOUNTS_PLUGIN \
- (empathy_accounts_plugin_get_type ())
-#define EMPATHY_ACCOUNTS_PLUGIN(obj) \
- (G_TYPE_CHECK_INSTANCE_CAST((obj), \
- EMPATHY_TYPE_ACCOUNTS_PLUGIN, \
- EmpathyAccountsPlugin))
-#define EMPATHY_ACCOUNTS_PLUGIN_CLASS(klass) \
- (G_TYPE_CHECK_CLASS_CAST((klass), \
- EMPATHY_TYPE_ACCOUNTS_PLUGIN, \
- EmpathyAccountsPluginClass))
-#define EMPATHY_IS_ACCOUNTS_PLUGIN(obj) \
- (G_TYPE_CHECK_INSTANCE_TYPE((obj), \
- EMPATHY_TYPE_ACCOUNTS_PLUGIN))
-#define EMPATHY_IS_ACCOUNTS_PLUGIN_CLASS(klass) \
- (G_TYPE_CHECK_CLASS_TYPE((klass), \
- EMPATHY_TYPE_ACCOUNTS_PLUGIN))
-#define EMPATHY_ACCOUNTS_PLUGIN_GET_CLASS(obj) \
- (G_TYPE_INSTANCE_GET_CLASS ((obj), \
- EMPATHY_TYPE_ACCOUNTS_PLUGIN, \
- EmpathyAccountsPluginClass))
-
-GType ap_module_get_object_type (void);
-
-G_END_DECLS
-
-#endif /* #ifndef __EMPATHY_ACCOUNTS_PLUGIN_H__*/
diff --git a/ubuntu-online-accounts/cc-plugins/app-plugin/Makefile.am b/ubuntu-online-accounts/cc-plugins/app-plugin/Makefile.am
deleted file mode 100644
index 801c2d8a..00000000
--- a/ubuntu-online-accounts/cc-plugins/app-plugin/Makefile.am
+++ /dev/null
@@ -1,28 +0,0 @@
-plugindir = $(ACCOUNTS_APP_PLUGIN_DIR)
-
-INCLUDES = \
- -I$(top_builddir) \
- -I$(top_srcdir) \
- -I$(top_srcdir)/libempathy \
- -I$(top_srcdir)/libempathy-gtk \
- -DLOCALEDIR=\""$(datadir)/locale"\" \
- $(UOA_CFLAGS) \
- $(WARN_CFLAGS) \
- $(ERROR_CFLAGS) \
- $(DISABLE_DEPRECATED) \
- $(EMPATHY_CFLAGS)
-
-plugin_LTLIBRARIES = \
- libempathy.la\
- $(NULL)
-
-libempathy_la_SOURCES = \
- empathy-app-plugin.c \
- empathy-app-plugin.h \
- empathy-app-plugin-widget.c \
- empathy-app-plugin-widget.h
-libempathy_la_LDFLAGS = -module -avoid-version
-libempathy_la_LIBADD = \
- $(UOA_LIBS) \
- $(top_builddir)/libempathy/libempathy.la \
- $(top_builddir)/libempathy-gtk/libempathy-gtk.la
diff --git a/ubuntu-online-accounts/cc-plugins/app-plugin/empathy-app-plugin-widget.c b/ubuntu-online-accounts/cc-plugins/app-plugin/empathy-app-plugin-widget.c
deleted file mode 100644
index 6895a04d..00000000
--- a/ubuntu-online-accounts/cc-plugins/app-plugin/empathy-app-plugin-widget.c
+++ /dev/null
@@ -1,312 +0,0 @@
-/*
- * empathy-app-plugin-widget.c
- *
- * Copyright (C) 2012 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
- */
-
-#include "config.h"
-
-#include <glib/gi18n-lib.h>
-
-#include <telepathy-glib/telepathy-glib.h>
-
-#include <libaccounts-glib/ag-manager.h>
-#include <libaccounts-glib/ag-provider.h>
-
-#include "empathy-contact.h"
-#include "empathy-user-info.h"
-
-#include "empathy-app-plugin-widget.h"
-
-G_DEFINE_TYPE (EmpathyAppPluginWidget, empathy_app_plugin_widget, GTK_TYPE_BOX)
-
-enum
-{
- PROP_ACCOUNT = 1,
- N_PROPS
-};
-
-enum
-{
- SIG_DONE,
- LAST_SIGNAL
-};
-
-static guint signals[LAST_SIGNAL];
-
-struct _EmpathyAppPluginWidgetPriv
-{
- AgAccount *account;
-
- GtkWidget *user_info;
-};
-
-static void
-empathy_app_plugin_widget_get_property (GObject *object,
- guint property_id,
- GValue *value,
- GParamSpec *pspec)
-{
- EmpathyAppPluginWidget *self = EMPATHY_APP_PLUGIN_WIDGET (object);
-
- switch (property_id)
- {
- case PROP_ACCOUNT:
- g_value_set_object (value, self->priv->account);
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
- break;
- }
-}
-
-static void
-empathy_app_plugin_widget_set_property (GObject *object,
- guint property_id,
- const GValue *value,
- GParamSpec *pspec)
-{
- EmpathyAppPluginWidget *self = EMPATHY_APP_PLUGIN_WIDGET (object);
-
- switch (property_id)
- {
- case PROP_ACCOUNT:
- g_assert (self->priv->account == NULL); /* construct only */
- self->priv->account = g_value_dup_object (value);
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
- break;
- }
-}
-
-static void
-response_cb (GtkWidget *widget,
- gint response,
- EmpathyAppPluginWidget *self)
-{
- if (self->priv->user_info != NULL)
- {
- EmpathyUserInfo *user_info = (EmpathyUserInfo *) self->priv->user_info;
-
- if (response == GTK_RESPONSE_OK)
- empathy_user_info_apply_async (user_info, NULL, NULL);
- else
- empathy_user_info_discard (user_info);
- }
-
- g_signal_emit (self, signals[SIG_DONE], 0);
-}
-
-static GtkWidget *
-create_top_bar (EmpathyAppPluginWidget *self)
-{
- GtkWidget *bar, *content, *action, *label;
- GtkCssProvider *css;
- AgProvider *provider;
- gchar *str;
- GError *error = NULL;
-
- bar = gtk_info_bar_new_with_buttons (
- GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
- _("Done"), GTK_RESPONSE_OK,
- NULL);
- gtk_widget_set_hexpand (bar, TRUE);
- gtk_info_bar_set_message_type (GTK_INFO_BAR (bar), GTK_MESSAGE_QUESTION);
- action = gtk_info_bar_get_action_area (GTK_INFO_BAR (bar));
- gtk_orientable_set_orientation (GTK_ORIENTABLE (action),
- GTK_ORIENTATION_HORIZONTAL);
- gtk_widget_set_name (bar, "authorization-infobar");
- css = gtk_css_provider_new ();
- if (gtk_css_provider_load_from_data (css,
- "@define-color question_bg_color rgb (222, 222, 222);"
- "GtkInfoBar#authorization-infobar"
- "{"
- " color: @fg_color;"
- "}",
- -1, &error))
- {
- GtkStyleContext *context = gtk_widget_get_style_context (bar);
-
- gtk_style_context_add_provider (context, (GtkStyleProvider *) css,
- GTK_STYLE_PROVIDER_PRIORITY_APPLICATION);
- }
- else
- {
- g_warning ("Error processing CSS theme override: %s", error->message);
- g_clear_error (&error);
- }
- g_object_unref (css);
-
- content = gtk_info_bar_get_content_area (GTK_INFO_BAR (bar));
-
- provider = ag_manager_get_provider (
- ag_account_get_manager (self->priv->account),
- ag_account_get_provider_name (self->priv->account));
- str = g_strdup_printf (_("Edit %s account options"),
- ag_provider_get_display_name (provider));
- label = gtk_label_new (str);
- gtk_container_add (GTK_CONTAINER (content), label);
- gtk_widget_show (label);
- ag_provider_unref (provider);
- g_free (str);
-
- g_signal_connect (bar, "response",
- G_CALLBACK (response_cb), self);
-
- return bar;
-}
-
-static void
-manager_prepared_cb (GObject *source,
- GAsyncResult *result,
- gpointer user_data)
-{
- TpWeakRef *wr = user_data;
- EmpathyAppPluginWidget *self = tp_weak_ref_dup_object (wr);
- TpAccountManager *manager = (TpAccountManager *) source;
- GList *accounts;
- GError *error = NULL;
-
- if (self == NULL)
- {
- tp_weak_ref_destroy (wr);
- return;
- }
-
- if (!tp_proxy_prepare_finish (manager, result, &error))
- {
- g_debug ("Error preparing Account Manager: %s", error->message);
- g_clear_error (&error);
- goto out;
- }
-
- accounts = tp_account_manager_dup_valid_accounts (manager);
- while (accounts != NULL)
- {
- TpAccount *account = accounts->data;
- const GValue *value;
-
- value = tp_account_get_storage_identifier (account);
- if (G_VALUE_HOLDS_UINT (value) &&
- g_value_get_uint (value) == self->priv->account->id)
- {
- GtkWidget *alig;
-
- alig = gtk_alignment_new (0.5, 0, 0, 0);
- self->priv->user_info = empathy_user_info_new (account);
- gtk_container_add (GTK_CONTAINER (alig), self->priv->user_info);
- gtk_widget_show (self->priv->user_info);
-
- gtk_box_pack_start (GTK_BOX (self), alig, TRUE, TRUE, 0);
- gtk_widget_show (alig);
- break;
- }
-
- accounts = g_list_delete_link (accounts, accounts);
- }
- g_list_free_full (accounts, g_object_unref);
-
-out:
- tp_weak_ref_destroy (wr);
- g_object_unref (self);
-}
-
-static void
-empathy_app_plugin_widget_constructed (GObject *object)
-{
- EmpathyAppPluginWidget *self = EMPATHY_APP_PLUGIN_WIDGET (object);
- void (*chain_up) (GObject *) =
- ((GObjectClass *) empathy_app_plugin_widget_parent_class)->constructed;
- GtkWidget *top;
- TpAccountManager *manager;
-
- if (chain_up != NULL)
- chain_up (object);
-
- g_assert (AG_IS_ACCOUNT (self->priv->account));
-
- /* Top bar */
- top = create_top_bar (self);
- gtk_widget_show (top);
- gtk_box_pack_start (GTK_BOX (self), top, FALSE, FALSE, 0);
-
- /* Prepare tp's account manager to find the TpAccount corresponding to our
- * AgAccount */
- manager = tp_account_manager_dup ();
- tp_proxy_prepare_async (manager, NULL,
- manager_prepared_cb, tp_weak_ref_new (self, NULL, NULL));
- g_object_unref (manager);
-}
-
-static void
-empathy_app_plugin_widget_dispose (GObject *object)
-{
- EmpathyAppPluginWidget *self = EMPATHY_APP_PLUGIN_WIDGET (object);
- void (*chain_up) (GObject *) =
- ((GObjectClass *) empathy_app_plugin_widget_parent_class)->dispose;
-
- g_clear_object (&self->priv->account);
-
- if (chain_up != NULL)
- chain_up (object);
-}
-
-static void
-empathy_app_plugin_widget_class_init (
- EmpathyAppPluginWidgetClass *klass)
-{
- GObjectClass *oclass = G_OBJECT_CLASS (klass);
- GParamSpec *spec;
-
- oclass->get_property = empathy_app_plugin_widget_get_property;
- oclass->set_property = empathy_app_plugin_widget_set_property;
- oclass->constructed = empathy_app_plugin_widget_constructed;
- oclass->dispose = empathy_app_plugin_widget_dispose;
-
- spec = g_param_spec_object ("account", "account",
- "Account",
- AG_TYPE_ACCOUNT,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS);
- g_object_class_install_property (oclass, PROP_ACCOUNT, spec);
-
- signals[SIG_DONE] = g_signal_new ("done",
- G_OBJECT_CLASS_TYPE (klass),
- G_SIGNAL_RUN_LAST,
- 0, NULL, NULL, NULL,
- G_TYPE_NONE,
- 0);
-
- g_type_class_add_private (klass, sizeof (EmpathyAppPluginWidgetPriv));
-}
-
-static void
-empathy_app_plugin_widget_init (EmpathyAppPluginWidget *self)
-{
- self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self,
- EMPATHY_TYPE_APP_PLUGIN_WIDGET, EmpathyAppPluginWidgetPriv);
-}
-
-GtkWidget *
-empathy_app_plugin_widget_new (AgAccount *account)
-{
- return g_object_new (EMPATHY_TYPE_APP_PLUGIN_WIDGET,
- "account", account,
- "orientation", GTK_ORIENTATION_VERTICAL,
- "spacing", 10,
- NULL);
-}
diff --git a/ubuntu-online-accounts/cc-plugins/app-plugin/empathy-app-plugin-widget.h b/ubuntu-online-accounts/cc-plugins/app-plugin/empathy-app-plugin-widget.h
deleted file mode 100644
index aa9d3a20..00000000
--- a/ubuntu-online-accounts/cc-plugins/app-plugin/empathy-app-plugin-widget.h
+++ /dev/null
@@ -1,74 +0,0 @@
-/*
- * empathy-app-plugin-widget.h
- *
- * Copyright (C) 2012 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
- */
-
-#ifndef __EMPATHY_APP_PLUGIN_WIDGET_H__
-#define __EMPATHY_APP_PLUGIN_WIDGET_H__
-
-#include <gtk/gtk.h>
-#include <libaccounts-glib/ag-account.h>
-
-G_BEGIN_DECLS
-
-typedef struct _EmpathyAppPluginWidget EmpathyAppPluginWidget;
-typedef struct _EmpathyAppPluginWidgetClass EmpathyAppPluginWidgetClass;
-typedef struct _EmpathyAppPluginWidgetPriv EmpathyAppPluginWidgetPriv;
-
-struct _EmpathyAppPluginWidgetClass
-{
- /*<private>*/
- GtkBoxClass parent;
-};
-
-struct _EmpathyAppPluginWidget
-{
- /*<private>*/
- GtkBox parent_class;
- EmpathyAppPluginWidgetPriv *priv;
-};
-
-GType empathy_app_plugin_widget_get_type (void);
-
-/* TYPE MACROS */
-#define EMPATHY_TYPE_APP_PLUGIN_WIDGET \
- (empathy_app_plugin_widget_get_type ())
-#define EMPATHY_APP_PLUGIN_WIDGET(obj) \
- (G_TYPE_CHECK_INSTANCE_CAST((obj), \
- EMPATHY_TYPE_APP_PLUGIN_WIDGET, \
- EmpathyAppPluginWidget))
-#define EMPATHY_APP_PLUGIN_WIDGET_CLASS(klass) \
- (G_TYPE_CHECK_CLASS_CAST((klass), \
- EMPATHY_TYPE_APP_PLUGIN_WIDGET, \
- EmpathyAppPluginWidgetClass))
-#define EMPATHY_IS_APP_PLUGIN_WIDGET(obj) \
- (G_TYPE_CHECK_INSTANCE_TYPE((obj), \
- EMPATHY_TYPE_APP_PLUGIN_WIDGET))
-#define EMPATHY_IS_APP_PLUGIN_WIDGET_CLASS(klass) \
- (G_TYPE_CHECK_CLASS_TYPE((klass), \
- EMPATHY_TYPE_APP_PLUGIN_WIDGET))
-#define EMPATHY_APP_PLUGIN_WIDGET_GET_CLASS(obj) \
- (G_TYPE_INSTANCE_GET_CLASS ((obj), \
- EMPATHY_TYPE_APP_PLUGIN_WIDGET, \
- EmpathyAppPluginWidgetClass))
-
-GtkWidget * empathy_app_plugin_widget_new (AgAccount *account);
-
-G_END_DECLS
-
-#endif /* #ifndef __EMPATHY_APP_PLUGIN_WIDGET_H__*/
diff --git a/ubuntu-online-accounts/cc-plugins/app-plugin/empathy-app-plugin.c b/ubuntu-online-accounts/cc-plugins/app-plugin/empathy-app-plugin.c
deleted file mode 100644
index c22c6d59..00000000
--- a/ubuntu-online-accounts/cc-plugins/app-plugin/empathy-app-plugin.c
+++ /dev/null
@@ -1,84 +0,0 @@
-/*
- * empathy-app-plugin.c
- *
- * Copyright (C) 2012 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
- */
-
-#include "config.h"
-
-#include "empathy-app-plugin.h"
-
-#include "empathy-client-factory.h"
-
-#include "empathy-app-plugin-widget.h"
-
-G_DEFINE_TYPE (EmpathyAppPlugin, empathy_app_plugin, AP_TYPE_APPLICATION_PLUGIN)
-
-static void
-widget_done_cb (EmpathyAppPluginWidget *widget,
- ApApplicationPlugin *plugin)
-{
- ap_application_plugin_emit_finished (plugin);
-}
-
-static GtkWidget *
-empathy_app_plugin_build_widget (ApApplicationPlugin *plugin)
-{
- GtkWidget *widget;
-
- widget = empathy_app_plugin_widget_new (
- ap_application_plugin_get_account (plugin));
-
- g_signal_connect (widget, "done",
- G_CALLBACK (widget_done_cb), plugin);
-
- gtk_widget_show (widget);
-
- return widget;
-}
-
-static void
-empathy_app_plugin_class_init (EmpathyAppPluginClass *klass)
-{
- ApApplicationPluginClass *app_class = AP_APPLICATION_PLUGIN_CLASS (klass);
-
- app_class->build_widget = empathy_app_plugin_build_widget;
-}
-
-static void
-empathy_app_plugin_init (EmpathyAppPlugin *self)
-{
- if (tp_account_manager_can_set_default ())
- {
- EmpathyClientFactory *factory;
- TpAccountManager *am;
-
- factory = empathy_client_factory_dup ();
- am = tp_account_manager_new_with_factory (
- TP_SIMPLE_CLIENT_FACTORY (factory));
- tp_account_manager_set_default (am);
-
- g_object_unref (factory);
- g_object_unref (am);
- }
-}
-
-GType
-ap_module_get_object_type (void)
-{
- return EMPATHY_TYPE_APP_PLUGIN;
-}
diff --git a/ubuntu-online-accounts/cc-plugins/app-plugin/empathy-app-plugin.h b/ubuntu-online-accounts/cc-plugins/app-plugin/empathy-app-plugin.h
deleted file mode 100644
index 67963967..00000000
--- a/ubuntu-online-accounts/cc-plugins/app-plugin/empathy-app-plugin.h
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
- * empathy-app-plugin.h
- *
- * Copyright (C) 2012 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
- */
-
-#ifndef __EMPATHY_APP_PLUGIN_H__
-#define __EMPATHY_APP_PLUGIN_H__
-
-#include <glib-object.h>
-#include <libaccount-plugin/application-plugin.h>
-
-G_BEGIN_DECLS
-
-typedef struct _EmpathyAppPlugin EmpathyAppPlugin;
-typedef struct _EmpathyAppPluginClass EmpathyAppPluginClass;
-
-struct _EmpathyAppPluginClass
-{
- /*<private>*/
- ApApplicationPluginClass parent_class;
-};
-
-struct _EmpathyAppPlugin
-{
- /*<private>*/
- ApApplicationPlugin parent;
-};
-
-GType empathy_app_plugin_get_type (void);
-
-/* TYPE MACROS */
-#define EMPATHY_TYPE_APP_PLUGIN \
- (empathy_app_plugin_get_type ())
-#define EMPATHY_APP_PLUGIN(obj) \
- (G_TYPE_CHECK_INSTANCE_CAST((obj), \
- EMPATHY_TYPE_APP_PLUGIN, \
- EmpathyAppPlugin))
-#define EMPATHY_APP_PLUGIN_CLASS(klass) \
- (G_TYPE_CHECK_CLASS_CAST((klass), \
- EMPATHY_TYPE_APP_PLUGIN, \
- EmpathyAppPluginClass))
-#define EMPATHY_IS_APP_PLUGIN(obj) \
- (G_TYPE_CHECK_INSTANCE_TYPE((obj), \
- EMPATHY_TYPE_APP_PLUGIN))
-#define EMPATHY_IS_APP_PLUGIN_CLASS(klass) \
- (G_TYPE_CHECK_CLASS_TYPE((klass), \
- EMPATHY_TYPE_APP_PLUGIN))
-#define EMPATHY_APP_PLUGIN_GET_CLASS(obj) \
- (G_TYPE_INSTANCE_GET_CLASS ((obj), \
- EMPATHY_TYPE_APP_PLUGIN, \
- EmpathyAppPluginClass))
-
-GType ap_module_get_object_type (void);
-
-G_END_DECLS
-
-#endif /* #ifndef __EMPATHY_APP_PLUGIN_H__*/
diff --git a/ubuntu-online-accounts/cc-plugins/generate-plugins.py b/ubuntu-online-accounts/cc-plugins/generate-plugins.py
deleted file mode 100755
index 2845d363..00000000
--- a/ubuntu-online-accounts/cc-plugins/generate-plugins.py
+++ /dev/null
@@ -1,130 +0,0 @@
-#!/usr/bin/env python
-
-# (name, CM, protocol, icon)
-ALL = [
- ('AIM', 'haze', 'aim', 'aim'),
- ('GaduGadu', 'haze', 'gadugadu', 'gadugadu'),
- ('Groupwise', 'haze', 'groupwise', 'groupwise'),
- ('ICQ', 'haze', 'icq', 'icq'),
- ('IRC', 'idle', 'irc', 'irc'),
- ('Jabber', 'gabble', 'jabber', 'jabber'),
- ('Mxit', 'haze', 'mxit', 'mxit'),
- ('Myspace', 'haze', 'myspace', 'myspace'),
- ('SIP', 'sofiasip', 'sip', 'sip'),
- ('Salut', 'salut', 'local-xmpp', 'people-nearby'),
- ('Sametime', 'haze', 'sametime', 'sametime'),
- ('Yahoo Japan', 'haze', 'yahoojp', 'yahoo'),
- ('Yahoo!', 'haze', 'yahoo', 'yahoo'),
- ('Zephyr', 'haze', 'zephyr', 'zephyr'),
- ]
-
-class Plugin:
- def __init__(self, name, cm, protocol, icon):
- self.name = name
- self.cm = cm
- self.protocol = protocol
- self.icon = icon
-
-##### providers/ #####
-
-def generate_provider_file(p):
- f = open('providers/%s.provider' % p.protocol, 'w')
-
- f.write(
-'''<?xml version="1.0" encoding="UTF-8" ?>
-<!-- Generated using empathy/ubuntu-online-accounts/cc-plugins/generate-plugins.py
- Do NOT edit manually -->
-<provider id="%s">
- <name>%s</name>
- <icon>%s</icon>
- <plugin>empathy-accounts-plugin</plugin>
-</provider>
-''' % (p.protocol, p.name, p.icon))
-
-def generate_providers(plugins):
- '''generate providers/*.provider files and providers/Makefile.am'''
-
- providers = []
- for p in plugins:
- providers.append(' %s.provider' % p.protocol)
-
- generate_provider_file(p)
-
- # providers/Makefile.am
- f = open('providers/Makefile.am', 'w')
- f.write(
-'''# Generated using empathy/ubuntu-online-accounts/cc-plugins/generate-plugins.py
-# Do NOT edit manually
-providersdir = $(ACCOUNTS_PROVIDER_FILES_DIR)
-
-providers_DATA = \\
-%s \\
- $(NULL)
-
-EXTRA_DIST = $(providers_DATA)
-''' % ('\\\n'.join(providers)))
-
-##### services/ #####
-
-def generate_service_file(p):
- f = open('services/%s-im.service' % p.protocol, 'w')
-
- f.write(
-'''<?xml version="1.0" encoding="UTF-8" ?>
-<!-- Generated using empathy/ubuntu-online-accounts/cc-plugins/generate-plugins.py
- Do NOT edit manually -->
-<service id="%s-im">
- <type>IM</type>
- <name>%s</name>
- <icon>%s</icon>
- <provider>%s</provider>
-
- <!-- default settings (account settings have precedence over these) -->
- <template>
- <group name="telepathy">
- <setting name="manager">%s</setting>
- <setting name="protocol">%s</setting>
- </group>
- <group name="auth">
- <setting name="method">password</setting>
- <setting name="mechanism">password</setting>
- </group>
- </template>
-
-</service>
-''' % (p.protocol, p.name, p.icon, p.protocol, p.cm, p.protocol))
-
-def generate_services(plugins):
- '''generate services/*-im.service files and services/Makefile.am'''
-
- services = []
- for p in plugins:
- services.append(' %s-im.service' % p.protocol)
-
- generate_service_file(p)
-
- # providers/Makefile.am
- f = open('services/Makefile.am', 'w')
- f.write(
-'''# Generated using empathy/ubuntu-online-accounts/cc-plugins/generate-plugins.py
-# Do NOT edit manually
-servicesdir = $(ACCOUNTS_SERVICE_FILES_DIR)
-
-services_DATA = \\
-%s \\
- $(NULL)
-
-EXTRA_DIST = $(services_DATA)
-''' % ('\\\n'.join(services)))
-
-def generate_all():
- plugins = []
-
- for name, cm, protocol, icon in ALL:
- plugins.append(Plugin(name, cm, protocol, icon))
-
- generate_providers(plugins)
- generate_services(plugins)
-
-if __name__ == '__main__':
- generate_all()
diff --git a/ubuntu-online-accounts/cc-plugins/providers/Makefile.am b/ubuntu-online-accounts/cc-plugins/providers/Makefile.am
deleted file mode 100644
index 6a57b5ff..00000000
--- a/ubuntu-online-accounts/cc-plugins/providers/Makefile.am
+++ /dev/null
@@ -1,22 +0,0 @@
-# Generated using empathy/ubuntu-online-accounts/cc-plugins/generate-plugins.py
-# Do NOT edit manually
-providersdir = $(ACCOUNTS_PROVIDER_FILES_DIR)
-
-providers_DATA = \
- aim.provider\
- gadugadu.provider\
- groupwise.provider\
- icq.provider\
- irc.provider\
- jabber.provider\
- mxit.provider\
- myspace.provider\
- sip.provider\
- local-xmpp.provider\
- sametime.provider\
- yahoojp.provider\
- yahoo.provider\
- zephyr.provider \
- $(NULL)
-
-EXTRA_DIST = $(providers_DATA)
diff --git a/ubuntu-online-accounts/cc-plugins/providers/aim.provider b/ubuntu-online-accounts/cc-plugins/providers/aim.provider
deleted file mode 100644
index 7a7a0ff1..00000000
--- a/ubuntu-online-accounts/cc-plugins/providers/aim.provider
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!-- Generated using empathy/ubuntu-online-accounts/cc-plugins/generate-plugins.py
- Do NOT edit manually -->
-<provider id="aim">
- <name>AIM</name>
- <icon>aim</icon>
- <plugin>empathy-accounts-plugin</plugin>
-</provider>
diff --git a/ubuntu-online-accounts/cc-plugins/providers/gadugadu.provider b/ubuntu-online-accounts/cc-plugins/providers/gadugadu.provider
deleted file mode 100644
index 3f65c53d..00000000
--- a/ubuntu-online-accounts/cc-plugins/providers/gadugadu.provider
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!-- Generated using empathy/ubuntu-online-accounts/cc-plugins/generate-plugins.py
- Do NOT edit manually -->
-<provider id="gadugadu">
- <name>GaduGadu</name>
- <icon>gadugadu</icon>
- <plugin>empathy-accounts-plugin</plugin>
-</provider>
diff --git a/ubuntu-online-accounts/cc-plugins/providers/groupwise.provider b/ubuntu-online-accounts/cc-plugins/providers/groupwise.provider
deleted file mode 100644
index 284a5655..00000000
--- a/ubuntu-online-accounts/cc-plugins/providers/groupwise.provider
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!-- Generated using empathy/ubuntu-online-accounts/cc-plugins/generate-plugins.py
- Do NOT edit manually -->
-<provider id="groupwise">
- <name>Groupwise</name>
- <icon>groupwise</icon>
- <plugin>empathy-accounts-plugin</plugin>
-</provider>
diff --git a/ubuntu-online-accounts/cc-plugins/providers/icq.provider b/ubuntu-online-accounts/cc-plugins/providers/icq.provider
deleted file mode 100644
index 31c81f1c..00000000
--- a/ubuntu-online-accounts/cc-plugins/providers/icq.provider
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!-- Generated using empathy/ubuntu-online-accounts/cc-plugins/generate-plugins.py
- Do NOT edit manually -->
-<provider id="icq">
- <name>ICQ</name>
- <icon>icq</icon>
- <plugin>empathy-accounts-plugin</plugin>
-</provider>
diff --git a/ubuntu-online-accounts/cc-plugins/providers/irc.provider b/ubuntu-online-accounts/cc-plugins/providers/irc.provider
deleted file mode 100644
index 29d43421..00000000
--- a/ubuntu-online-accounts/cc-plugins/providers/irc.provider
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!-- Generated using empathy/ubuntu-online-accounts/cc-plugins/generate-plugins.py
- Do NOT edit manually -->
-<provider id="irc">
- <name>IRC</name>
- <icon>irc</icon>
- <plugin>empathy-accounts-plugin</plugin>
-</provider>
diff --git a/ubuntu-online-accounts/cc-plugins/providers/jabber.provider b/ubuntu-online-accounts/cc-plugins/providers/jabber.provider
deleted file mode 100644
index 83e9dd7e..00000000
--- a/ubuntu-online-accounts/cc-plugins/providers/jabber.provider
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!-- Generated using empathy/ubuntu-online-accounts/cc-plugins/generate-plugins.py
- Do NOT edit manually -->
-<provider id="jabber">
- <name>Jabber</name>
- <icon>jabber</icon>
- <plugin>empathy-accounts-plugin</plugin>
-</provider>
diff --git a/ubuntu-online-accounts/cc-plugins/providers/local-xmpp.provider b/ubuntu-online-accounts/cc-plugins/providers/local-xmpp.provider
deleted file mode 100644
index 23c5a64f..00000000
--- a/ubuntu-online-accounts/cc-plugins/providers/local-xmpp.provider
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!-- Generated using empathy/ubuntu-online-accounts/cc-plugins/generate-plugins.py
- Do NOT edit manually -->
-<provider id="local-xmpp">
- <name>Salut</name>
- <icon>people-nearby</icon>
- <plugin>empathy-accounts-plugin</plugin>
-</provider>
diff --git a/ubuntu-online-accounts/cc-plugins/providers/mxit.provider b/ubuntu-online-accounts/cc-plugins/providers/mxit.provider
deleted file mode 100644
index 5cc990d4..00000000
--- a/ubuntu-online-accounts/cc-plugins/providers/mxit.provider
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!-- Generated using empathy/ubuntu-online-accounts/cc-plugins/generate-plugins.py
- Do NOT edit manually -->
-<provider id="mxit">
- <name>Mxit</name>
- <icon>mxit</icon>
- <plugin>empathy-accounts-plugin</plugin>
-</provider>
diff --git a/ubuntu-online-accounts/cc-plugins/providers/myspace.provider b/ubuntu-online-accounts/cc-plugins/providers/myspace.provider
deleted file mode 100644
index 9c4b7559..00000000
--- a/ubuntu-online-accounts/cc-plugins/providers/myspace.provider
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!-- Generated using empathy/ubuntu-online-accounts/cc-plugins/generate-plugins.py
- Do NOT edit manually -->
-<provider id="myspace">
- <name>Myspace</name>
- <icon>myspace</icon>
- <plugin>empathy-accounts-plugin</plugin>
-</provider>
diff --git a/ubuntu-online-accounts/cc-plugins/providers/sametime.provider b/ubuntu-online-accounts/cc-plugins/providers/sametime.provider
deleted file mode 100644
index dd7235cd..00000000
--- a/ubuntu-online-accounts/cc-plugins/providers/sametime.provider
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!-- Generated using empathy/ubuntu-online-accounts/cc-plugins/generate-plugins.py
- Do NOT edit manually -->
-<provider id="sametime">
- <name>Sametime</name>
- <icon>sametime</icon>
- <plugin>empathy-accounts-plugin</plugin>
-</provider>
diff --git a/ubuntu-online-accounts/cc-plugins/providers/sip.provider b/ubuntu-online-accounts/cc-plugins/providers/sip.provider
deleted file mode 100644
index eeb87405..00000000
--- a/ubuntu-online-accounts/cc-plugins/providers/sip.provider
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!-- Generated using empathy/ubuntu-online-accounts/cc-plugins/generate-plugins.py
- Do NOT edit manually -->
-<provider id="sip">
- <name>SIP</name>
- <icon>sip</icon>
- <plugin>empathy-accounts-plugin</plugin>
-</provider>
diff --git a/ubuntu-online-accounts/cc-plugins/providers/yahoo.provider b/ubuntu-online-accounts/cc-plugins/providers/yahoo.provider
deleted file mode 100644
index 0af592c4..00000000
--- a/ubuntu-online-accounts/cc-plugins/providers/yahoo.provider
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!-- Generated using empathy/ubuntu-online-accounts/cc-plugins/generate-plugins.py
- Do NOT edit manually -->
-<provider id="yahoo">
- <name>Yahoo!</name>
- <icon>yahoo</icon>
- <plugin>empathy-accounts-plugin</plugin>
-</provider>
diff --git a/ubuntu-online-accounts/cc-plugins/providers/yahoojp.provider b/ubuntu-online-accounts/cc-plugins/providers/yahoojp.provider
deleted file mode 100644
index 4fd8e690..00000000
--- a/ubuntu-online-accounts/cc-plugins/providers/yahoojp.provider
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!-- Generated using empathy/ubuntu-online-accounts/cc-plugins/generate-plugins.py
- Do NOT edit manually -->
-<provider id="yahoojp">
- <name>Yahoo Japan</name>
- <icon>yahoo</icon>
- <plugin>empathy-accounts-plugin</plugin>
-</provider>
diff --git a/ubuntu-online-accounts/cc-plugins/providers/zephyr.provider b/ubuntu-online-accounts/cc-plugins/providers/zephyr.provider
deleted file mode 100644
index 2f716cbd..00000000
--- a/ubuntu-online-accounts/cc-plugins/providers/zephyr.provider
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!-- Generated using empathy/ubuntu-online-accounts/cc-plugins/generate-plugins.py
- Do NOT edit manually -->
-<provider id="zephyr">
- <name>Zephyr</name>
- <icon>zephyr</icon>
- <plugin>empathy-accounts-plugin</plugin>
-</provider>
diff --git a/ubuntu-online-accounts/cc-plugins/services/Makefile.am b/ubuntu-online-accounts/cc-plugins/services/Makefile.am
deleted file mode 100644
index 545c260b..00000000
--- a/ubuntu-online-accounts/cc-plugins/services/Makefile.am
+++ /dev/null
@@ -1,22 +0,0 @@
-# Generated using empathy/ubuntu-online-accounts/cc-plugins/generate-plugins.py
-# Do NOT edit manually
-servicesdir = $(ACCOUNTS_SERVICE_FILES_DIR)
-
-services_DATA = \
- aim-im.service\
- gadugadu-im.service\
- groupwise-im.service\
- icq-im.service\
- irc-im.service\
- jabber-im.service\
- mxit-im.service\
- myspace-im.service\
- sip-im.service\
- local-xmpp-im.service\
- sametime-im.service\
- yahoojp-im.service\
- yahoo-im.service\
- zephyr-im.service \
- $(NULL)
-
-EXTRA_DIST = $(services_DATA)
diff --git a/ubuntu-online-accounts/cc-plugins/services/aim-im.service b/ubuntu-online-accounts/cc-plugins/services/aim-im.service
deleted file mode 100644
index 5fcb0029..00000000
--- a/ubuntu-online-accounts/cc-plugins/services/aim-im.service
+++ /dev/null
@@ -1,22 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!-- Generated using empathy/ubuntu-online-accounts/cc-plugins/generate-plugins.py
- Do NOT edit manually -->
-<service id="aim-im">
- <type>IM</type>
- <name>AIM</name>
- <icon>aim</icon>
- <provider>aim</provider>
-
- <!-- default settings (account settings have precedence over these) -->
- <template>
- <group name="telepathy">
- <setting name="manager">haze</setting>
- <setting name="protocol">aim</setting>
- </group>
- <group name="auth">
- <setting name="method">password</setting>
- <setting name="mechanism">password</setting>
- </group>
- </template>
-
-</service>
diff --git a/ubuntu-online-accounts/cc-plugins/services/gadugadu-im.service b/ubuntu-online-accounts/cc-plugins/services/gadugadu-im.service
deleted file mode 100644
index 1f240232..00000000
--- a/ubuntu-online-accounts/cc-plugins/services/gadugadu-im.service
+++ /dev/null
@@ -1,22 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!-- Generated using empathy/ubuntu-online-accounts/cc-plugins/generate-plugins.py
- Do NOT edit manually -->
-<service id="gadugadu-im">
- <type>IM</type>
- <name>GaduGadu</name>
- <icon>gadugadu</icon>
- <provider>gadugadu</provider>
-
- <!-- default settings (account settings have precedence over these) -->
- <template>
- <group name="telepathy">
- <setting name="manager">haze</setting>
- <setting name="protocol">gadugadu</setting>
- </group>
- <group name="auth">
- <setting name="method">password</setting>
- <setting name="mechanism">password</setting>
- </group>
- </template>
-
-</service>
diff --git a/ubuntu-online-accounts/cc-plugins/services/groupwise-im.service b/ubuntu-online-accounts/cc-plugins/services/groupwise-im.service
deleted file mode 100644
index a3d9e9b0..00000000
--- a/ubuntu-online-accounts/cc-plugins/services/groupwise-im.service
+++ /dev/null
@@ -1,22 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!-- Generated using empathy/ubuntu-online-accounts/cc-plugins/generate-plugins.py
- Do NOT edit manually -->
-<service id="groupwise-im">
- <type>IM</type>
- <name>Groupwise</name>
- <icon>groupwise</icon>
- <provider>groupwise</provider>
-
- <!-- default settings (account settings have precedence over these) -->
- <template>
- <group name="telepathy">
- <setting name="manager">haze</setting>
- <setting name="protocol">groupwise</setting>
- </group>
- <group name="auth">
- <setting name="method">password</setting>
- <setting name="mechanism">password</setting>
- </group>
- </template>
-
-</service>
diff --git a/ubuntu-online-accounts/cc-plugins/services/icq-im.service b/ubuntu-online-accounts/cc-plugins/services/icq-im.service
deleted file mode 100644
index f52be180..00000000
--- a/ubuntu-online-accounts/cc-plugins/services/icq-im.service
+++ /dev/null
@@ -1,22 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!-- Generated using empathy/ubuntu-online-accounts/cc-plugins/generate-plugins.py
- Do NOT edit manually -->
-<service id="icq-im">
- <type>IM</type>
- <name>ICQ</name>
- <icon>icq</icon>
- <provider>icq</provider>
-
- <!-- default settings (account settings have precedence over these) -->
- <template>
- <group name="telepathy">
- <setting name="manager">haze</setting>
- <setting name="protocol">icq</setting>
- </group>
- <group name="auth">
- <setting name="method">password</setting>
- <setting name="mechanism">password</setting>
- </group>
- </template>
-
-</service>
diff --git a/ubuntu-online-accounts/cc-plugins/services/irc-im.service b/ubuntu-online-accounts/cc-plugins/services/irc-im.service
deleted file mode 100644
index 011d66b8..00000000
--- a/ubuntu-online-accounts/cc-plugins/services/irc-im.service
+++ /dev/null
@@ -1,22 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!-- Generated using empathy/ubuntu-online-accounts/cc-plugins/generate-plugins.py
- Do NOT edit manually -->
-<service id="irc-im">
- <type>IM</type>
- <name>IRC</name>
- <icon>irc</icon>
- <provider>irc</provider>
-
- <!-- default settings (account settings have precedence over these) -->
- <template>
- <group name="telepathy">
- <setting name="manager">idle</setting>
- <setting name="protocol">irc</setting>
- </group>
- <group name="auth">
- <setting name="method">password</setting>
- <setting name="mechanism">password</setting>
- </group>
- </template>
-
-</service>
diff --git a/ubuntu-online-accounts/cc-plugins/services/jabber-im.service b/ubuntu-online-accounts/cc-plugins/services/jabber-im.service
deleted file mode 100644
index b7cef60b..00000000
--- a/ubuntu-online-accounts/cc-plugins/services/jabber-im.service
+++ /dev/null
@@ -1,22 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!-- Generated using empathy/ubuntu-online-accounts/cc-plugins/generate-plugins.py
- Do NOT edit manually -->
-<service id="jabber-im">
- <type>IM</type>
- <name>Jabber</name>
- <icon>jabber</icon>
- <provider>jabber</provider>
-
- <!-- default settings (account settings have precedence over these) -->
- <template>
- <group name="telepathy">
- <setting name="manager">gabble</setting>
- <setting name="protocol">jabber</setting>
- </group>
- <group name="auth">
- <setting name="method">password</setting>
- <setting name="mechanism">password</setting>
- </group>
- </template>
-
-</service>
diff --git a/ubuntu-online-accounts/cc-plugins/services/local-xmpp-im.service b/ubuntu-online-accounts/cc-plugins/services/local-xmpp-im.service
deleted file mode 100644
index 836610a6..00000000
--- a/ubuntu-online-accounts/cc-plugins/services/local-xmpp-im.service
+++ /dev/null
@@ -1,22 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!-- Generated using empathy/ubuntu-online-accounts/cc-plugins/generate-plugins.py
- Do NOT edit manually -->
-<service id="local-xmpp-im">
- <type>IM</type>
- <name>Salut</name>
- <icon>people-nearby</icon>
- <provider>local-xmpp</provider>
-
- <!-- default settings (account settings have precedence over these) -->
- <template>
- <group name="telepathy">
- <setting name="manager">salut</setting>
- <setting name="protocol">local-xmpp</setting>
- </group>
- <group name="auth">
- <setting name="method">password</setting>
- <setting name="mechanism">password</setting>
- </group>
- </template>
-
-</service>
diff --git a/ubuntu-online-accounts/cc-plugins/services/mxit-im.service b/ubuntu-online-accounts/cc-plugins/services/mxit-im.service
deleted file mode 100644
index 705c73bc..00000000
--- a/ubuntu-online-accounts/cc-plugins/services/mxit-im.service
+++ /dev/null
@@ -1,22 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!-- Generated using empathy/ubuntu-online-accounts/cc-plugins/generate-plugins.py
- Do NOT edit manually -->
-<service id="mxit-im">
- <type>IM</type>
- <name>Mxit</name>
- <icon>mxit</icon>
- <provider>mxit</provider>
-
- <!-- default settings (account settings have precedence over these) -->
- <template>
- <group name="telepathy">
- <setting name="manager">haze</setting>
- <setting name="protocol">mxit</setting>
- </group>
- <group name="auth">
- <setting name="method">password</setting>
- <setting name="mechanism">password</setting>
- </group>
- </template>
-
-</service>
diff --git a/ubuntu-online-accounts/cc-plugins/services/myspace-im.service b/ubuntu-online-accounts/cc-plugins/services/myspace-im.service
deleted file mode 100644
index 04c038dd..00000000
--- a/ubuntu-online-accounts/cc-plugins/services/myspace-im.service
+++ /dev/null
@@ -1,22 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!-- Generated using empathy/ubuntu-online-accounts/cc-plugins/generate-plugins.py
- Do NOT edit manually -->
-<service id="myspace-im">
- <type>IM</type>
- <name>Myspace</name>
- <icon>myspace</icon>
- <provider>myspace</provider>
-
- <!-- default settings (account settings have precedence over these) -->
- <template>
- <group name="telepathy">
- <setting name="manager">haze</setting>
- <setting name="protocol">myspace</setting>
- </group>
- <group name="auth">
- <setting name="method">password</setting>
- <setting name="mechanism">password</setting>
- </group>
- </template>
-
-</service>
diff --git a/ubuntu-online-accounts/cc-plugins/services/sametime-im.service b/ubuntu-online-accounts/cc-plugins/services/sametime-im.service
deleted file mode 100644
index cb844c87..00000000
--- a/ubuntu-online-accounts/cc-plugins/services/sametime-im.service
+++ /dev/null
@@ -1,22 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!-- Generated using empathy/ubuntu-online-accounts/cc-plugins/generate-plugins.py
- Do NOT edit manually -->
-<service id="sametime-im">
- <type>IM</type>
- <name>Sametime</name>
- <icon>sametime</icon>
- <provider>sametime</provider>
-
- <!-- default settings (account settings have precedence over these) -->
- <template>
- <group name="telepathy">
- <setting name="manager">haze</setting>
- <setting name="protocol">sametime</setting>
- </group>
- <group name="auth">
- <setting name="method">password</setting>
- <setting name="mechanism">password</setting>
- </group>
- </template>
-
-</service>
diff --git a/ubuntu-online-accounts/cc-plugins/services/sip-im.service b/ubuntu-online-accounts/cc-plugins/services/sip-im.service
deleted file mode 100644
index 364b833d..00000000
--- a/ubuntu-online-accounts/cc-plugins/services/sip-im.service
+++ /dev/null
@@ -1,22 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!-- Generated using empathy/ubuntu-online-accounts/cc-plugins/generate-plugins.py
- Do NOT edit manually -->
-<service id="sip-im">
- <type>IM</type>
- <name>SIP</name>
- <icon>sip</icon>
- <provider>sip</provider>
-
- <!-- default settings (account settings have precedence over these) -->
- <template>
- <group name="telepathy">
- <setting name="manager">sofiasip</setting>
- <setting name="protocol">sip</setting>
- </group>
- <group name="auth">
- <setting name="method">password</setting>
- <setting name="mechanism">password</setting>
- </group>
- </template>
-
-</service>
diff --git a/ubuntu-online-accounts/cc-plugins/services/yahoo-im.service b/ubuntu-online-accounts/cc-plugins/services/yahoo-im.service
deleted file mode 100644
index 0f0b2d52..00000000
--- a/ubuntu-online-accounts/cc-plugins/services/yahoo-im.service
+++ /dev/null
@@ -1,22 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!-- Generated using empathy/ubuntu-online-accounts/cc-plugins/generate-plugins.py
- Do NOT edit manually -->
-<service id="yahoo-im">
- <type>IM</type>
- <name>Yahoo!</name>
- <icon>yahoo</icon>
- <provider>yahoo</provider>
-
- <!-- default settings (account settings have precedence over these) -->
- <template>
- <group name="telepathy">
- <setting name="manager">haze</setting>
- <setting name="protocol">yahoo</setting>
- </group>
- <group name="auth">
- <setting name="method">password</setting>
- <setting name="mechanism">password</setting>
- </group>
- </template>
-
-</service>
diff --git a/ubuntu-online-accounts/cc-plugins/services/yahoojp-im.service b/ubuntu-online-accounts/cc-plugins/services/yahoojp-im.service
deleted file mode 100644
index 4bb66c35..00000000
--- a/ubuntu-online-accounts/cc-plugins/services/yahoojp-im.service
+++ /dev/null
@@ -1,22 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!-- Generated using empathy/ubuntu-online-accounts/cc-plugins/generate-plugins.py
- Do NOT edit manually -->
-<service id="yahoojp-im">
- <type>IM</type>
- <name>Yahoo Japan</name>
- <icon>yahoo</icon>
- <provider>yahoojp</provider>
-
- <!-- default settings (account settings have precedence over these) -->
- <template>
- <group name="telepathy">
- <setting name="manager">haze</setting>
- <setting name="protocol">yahoojp</setting>
- </group>
- <group name="auth">
- <setting name="method">password</setting>
- <setting name="mechanism">password</setting>
- </group>
- </template>
-
-</service>
diff --git a/ubuntu-online-accounts/cc-plugins/services/zephyr-im.service b/ubuntu-online-accounts/cc-plugins/services/zephyr-im.service
deleted file mode 100644
index 12da3000..00000000
--- a/ubuntu-online-accounts/cc-plugins/services/zephyr-im.service
+++ /dev/null
@@ -1,22 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!-- Generated using empathy/ubuntu-online-accounts/cc-plugins/generate-plugins.py
- Do NOT edit manually -->
-<service id="zephyr-im">
- <type>IM</type>
- <name>Zephyr</name>
- <icon>zephyr</icon>
- <provider>zephyr</provider>
-
- <!-- default settings (account settings have precedence over these) -->
- <template>
- <group name="telepathy">
- <setting name="manager">haze</setting>
- <setting name="protocol">zephyr</setting>
- </group>
- <group name="auth">
- <setting name="method">password</setting>
- <setting name="mechanism">password</setting>
- </group>
- </template>
-
-</service>
diff --git a/ubuntu-online-accounts/empathy.application.in b/ubuntu-online-accounts/empathy.application.in
deleted file mode 100644
index 125d4dc5..00000000
--- a/ubuntu-online-accounts/empathy.application.in
+++ /dev/null
@@ -1,11 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<application id="empathy">
- <description>Empathy</description>
- <desktop-entry>empathy.desktop</desktop-entry>
- <translations>empathy</translations>
- <service-types>
- <service-type id="IM">
- <_description>Integrate your IM accounts</_description>
- </service-type>
- </service-types>
-</application>
diff --git a/ubuntu-online-accounts/mc-plugin/Makefile.am b/ubuntu-online-accounts/mc-plugin/Makefile.am
deleted file mode 100644
index ead47423..00000000
--- a/ubuntu-online-accounts/mc-plugin/Makefile.am
+++ /dev/null
@@ -1,20 +0,0 @@
-AM_CPPFLAGS = \
- $(UOA_CFLAGS) \
- $(ERROR_CFLAGS)
-
-pluginsdir = $(MISSION_CONTROL_PLUGINS_DIR)
-plugins_LTLIBRARIES = \
- mcp-account-manager-uoa.la
-
-mcp_account_manager_uoa_la_SOURCES = \
- mission-control-plugin.c \
- mcp-account-manager-uoa.c mcp-account-manager-uoa.h \
- empathy-webcredentials-monitor.c empathy-webcredentials-monitor.h \
- $(NULL)
-
-mcp_account_manager_uoa_la_LIBADD = \
- $(UOA_LIBS)
-
-mcp_account_manager_uoa_la_LDFLAGS = \
- -module \
- -avoid-version
diff --git a/ubuntu-online-accounts/mc-plugin/empathy-webcredentials-monitor.c b/ubuntu-online-accounts/mc-plugin/empathy-webcredentials-monitor.c
deleted file mode 100644
index 761e2215..00000000
--- a/ubuntu-online-accounts/mc-plugin/empathy-webcredentials-monitor.c
+++ /dev/null
@@ -1,280 +0,0 @@
-#include "config.h"
-#include "empathy-webcredentials-monitor.h"
-
-#include <gio/gio.h>
-#include <telepathy-glib/telepathy-glib.h>
-#include <libaccounts-glib/ag-account.h>
-
-G_DEFINE_TYPE (EmpathyWebcredentialsMonitor, empathy_webcredentials_monitor, G_TYPE_OBJECT)
-
-#define WEBCRED_BUS_NAME "com.canonical.indicators.webcredentials"
-#define WEBCRED_PATH "/com/canonical/indicators/webcredentials"
-#define WEBCRED_IFACE "com.canonical.indicators.webcredentials"
-
-#define FAILURES_PROP "Failures"
-
-enum
-{
- PROP_MANAGER = 1,
- N_PROPS
-};
-
-enum
-{
- SIG_FAILURE_ADDED,
- SIG_FAILURE_REMOVED,
- LAST_SIGNAL
-};
-
-static guint signals[LAST_SIGNAL];
-
-struct _EmpathyWebcredentialsMonitorPriv
-{
- AgManager *manager;
- GDBusProxy *proxy;
-
- /* array of owned AgAccount */
- GPtrArray *failures;
-};
-
-static void
-empathy_webcredentials_monitor_get_property (GObject *object,
- guint property_id,
- GValue *value,
- GParamSpec *pspec)
-{
- EmpathyWebcredentialsMonitor *self = EMPATHY_WEBCREDENTIALS_MONITOR (object);
-
- switch (property_id)
- {
- case PROP_MANAGER:
- g_value_set_object (value, self->priv->manager);
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
- break;
- }
-}
-
-static void
-empathy_webcredentials_monitor_set_property (GObject *object,
- guint property_id,
- const GValue *value,
- GParamSpec *pspec)
-{
- EmpathyWebcredentialsMonitor *self = EMPATHY_WEBCREDENTIALS_MONITOR (object);
-
- switch (property_id)
- {
- case PROP_MANAGER:
- g_assert (self->priv->manager == NULL); /* construct only */
- self->priv->manager = g_value_dup_object (value);
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
- break;
- }
-}
-
-static void
-empathy_webcredentials_monitor_constructed (GObject *object)
-{
- EmpathyWebcredentialsMonitor *self = EMPATHY_WEBCREDENTIALS_MONITOR (object);
- void (*chain_up) (GObject *) =
- ((GObjectClass *) empathy_webcredentials_monitor_parent_class)->constructed;
-
- chain_up (object);
-
- g_assert (AG_IS_MANAGER (self->priv->manager));
-}
-
-static void
-empathy_webcredentials_monitor_dispose (GObject *object)
-{
- EmpathyWebcredentialsMonitor *self = EMPATHY_WEBCREDENTIALS_MONITOR (object);
- void (*chain_up) (GObject *) =
- ((GObjectClass *) empathy_webcredentials_monitor_parent_class)->dispose;
-
- g_clear_object (&self->priv->manager);
- g_clear_object (&self->priv->proxy);
-
- chain_up (object);
-}
-
-static void
-empathy_webcredentials_monitor_finalize (GObject *object)
-{
- EmpathyWebcredentialsMonitor *self = EMPATHY_WEBCREDENTIALS_MONITOR (object);
- void (*chain_up) (GObject *) =
- ((GObjectClass *) empathy_webcredentials_monitor_parent_class)->finalize;
-
- g_ptr_array_unref (self->priv->failures);
-
- chain_up (object);
-}
-
-static void
-empathy_webcredentials_monitor_class_init (
- EmpathyWebcredentialsMonitorClass *klass)
-{
- GObjectClass *oclass = G_OBJECT_CLASS (klass);
- GParamSpec *spec;
-
- oclass->get_property = empathy_webcredentials_monitor_get_property;
- oclass->set_property = empathy_webcredentials_monitor_set_property;
- oclass->constructed = empathy_webcredentials_monitor_constructed;
- oclass->dispose = empathy_webcredentials_monitor_dispose;
- oclass->finalize = empathy_webcredentials_monitor_finalize;
-
- spec = g_param_spec_object ("manager", "Manager",
- "AgManager",
- AG_TYPE_MANAGER,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS);
- g_object_class_install_property (oclass, PROP_MANAGER, spec);
-
- signals[SIG_FAILURE_ADDED] = g_signal_new ("failure-added",
- G_OBJECT_CLASS_TYPE (klass),
- G_SIGNAL_RUN_LAST,
- 0, NULL, NULL, NULL,
- G_TYPE_NONE,
- 1, AG_TYPE_ACCOUNT);
-
- signals[SIG_FAILURE_REMOVED] = g_signal_new ("failure-removed",
- G_OBJECT_CLASS_TYPE (klass),
- G_SIGNAL_RUN_LAST,
- 0, NULL, NULL, NULL,
- G_TYPE_NONE,
- 1, AG_TYPE_ACCOUNT);
-
- g_type_class_add_private (klass, sizeof (EmpathyWebcredentialsMonitorPriv));
-}
-
-static void
-update_failures (EmpathyWebcredentialsMonitor *self)
-{
- GVariant *failures, *f;
- GVariantIter iter;
- GList *new_list = NULL;
- guint i;
-
- failures = g_dbus_proxy_get_cached_property (self->priv->proxy,
- FAILURES_PROP);
- if (failures == NULL)
- {
- g_debug ("Does not implement Failures property");
- return;
- }
-
- g_variant_iter_init (&iter, failures);
- while ((f = g_variant_iter_next_value (&iter)) != NULL)
- {
- guint32 id;
- AgAccount *account;
-
- id = g_variant_get_uint32 (f);
-
- account = ag_manager_get_account (self->priv->manager, id);
- if (account == NULL)
- continue;
-
- /* Pass ownership of 'account' to the list */
- new_list = g_list_append (new_list, account);
-
- if (!tp_g_ptr_array_contains (self->priv->failures, account))
- {
- g_ptr_array_add (self->priv->failures, g_object_ref (account));
-
- g_signal_emit (self, signals[SIG_FAILURE_ADDED], 0, account);
- }
-
- g_variant_unref (f);
- }
-
- g_variant_unref (failures);
-
- for (i = 0; i < self->priv->failures->len; i++)
- {
- AgAccount *account = g_ptr_array_index (self->priv->failures, i);
-
- if (g_list_find (new_list, account) == NULL)
- {
- g_object_ref (account);
- g_ptr_array_remove (self->priv->failures, account);
-
- g_signal_emit (self, signals[SIG_FAILURE_REMOVED], 0, account);
- g_object_unref (account);
- }
- }
-
- g_list_free_full (new_list, g_object_unref);
-}
-
-static void
-properties_changed_cb (GDBusProxy *proxy,
- GVariant *changed_properties,
- GStrv invalidated_properties,
- EmpathyWebcredentialsMonitor *self)
-{
- if (g_variant_lookup_value (changed_properties, FAILURES_PROP, NULL) == NULL)
- return;
-
- update_failures (self);
-}
-
-static void
-proxy_new_cb (GObject *source,
- GAsyncResult *result,
- gpointer user_data)
-{
- EmpathyWebcredentialsMonitor *self;
- TpWeakRef *wr = user_data;
- GError *error = NULL;
-
- self = tp_weak_ref_dup_object (wr);
- if (self == NULL)
- goto out;
-
- self->priv->proxy = g_dbus_proxy_new_for_bus_finish (result, &error);
- if (self->priv->proxy == NULL)
- {
- g_debug ("Failed to create webcredentials proxy: %s", error->message);
- g_error_free (error);
- goto out;
- }
-
- update_failures (self);
-
- g_signal_connect (self->priv->proxy, "g-properties-changed",
- G_CALLBACK (properties_changed_cb), self);
-
-out:
- tp_weak_ref_destroy (wr);
- g_clear_object (&self);
-}
-
-static void
-empathy_webcredentials_monitor_init (EmpathyWebcredentialsMonitor *self)
-{
- self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self,
- EMPATHY_TYPE_WEBCREDENTIALS_MONITOR, EmpathyWebcredentialsMonitorPriv);
-
- self->priv->failures = g_ptr_array_new_with_free_func (g_object_unref);
-
- g_dbus_proxy_new_for_bus (G_BUS_TYPE_SESSION, G_DBUS_PROXY_FLAGS_NONE, NULL,
- WEBCRED_BUS_NAME, WEBCRED_PATH, WEBCRED_IFACE,
- NULL, proxy_new_cb, tp_weak_ref_new (self, NULL, NULL));
-}
-
-EmpathyWebcredentialsMonitor *
-empathy_webcredentials_monitor_new (AgManager *manager)
-{
- return g_object_new (EMPATHY_TYPE_WEBCREDENTIALS_MONITOR,
- "manager", manager,
- NULL);
-}
-
-GPtrArray *
-empathy_webcredentials_get_failures (EmpathyWebcredentialsMonitor *self)
-{
- return self->priv->failures;
-}
diff --git a/ubuntu-online-accounts/mc-plugin/empathy-webcredentials-monitor.h b/ubuntu-online-accounts/mc-plugin/empathy-webcredentials-monitor.h
deleted file mode 100644
index 1c96f336..00000000
--- a/ubuntu-online-accounts/mc-plugin/empathy-webcredentials-monitor.h
+++ /dev/null
@@ -1,58 +0,0 @@
-#ifndef __EMPATHY_WEBCREDENTIALS_MONITOR_H__
-#define __EMPATHY_WEBCREDENTIALS_MONITOR_H__
-
-#include <glib-object.h>
-#include <libaccounts-glib/ag-manager.h>
-
-G_BEGIN_DECLS
-
-typedef struct _EmpathyWebcredentialsMonitor EmpathyWebcredentialsMonitor;
-typedef struct _EmpathyWebcredentialsMonitorClass EmpathyWebcredentialsMonitorClass;
-typedef struct _EmpathyWebcredentialsMonitorPriv EmpathyWebcredentialsMonitorPriv;
-
-struct _EmpathyWebcredentialsMonitorClass
-{
- /*<private>*/
- GObjectClass parent_class;
-};
-
-struct _EmpathyWebcredentialsMonitor
-{
- /*<private>*/
- GObject parent;
- EmpathyWebcredentialsMonitorPriv *priv;
-};
-
-GType empathy_webcredentials_monitor_get_type (void);
-
-/* TYPE MACROS */
-#define EMPATHY_TYPE_WEBCREDENTIALS_MONITOR \
- (empathy_webcredentials_monitor_get_type ())
-#define EMPATHY_WEBCREDENTIALS_MONITOR(obj) \
- (G_TYPE_CHECK_INSTANCE_CAST((obj), \
- EMPATHY_TYPE_WEBCREDENTIALS_MONITOR, \
- EmpathyWebcredentialsMonitor))
-#define EMPATHY_WEBCREDENTIALS_MONITOR_CLASS(klass) \
- (G_TYPE_CHECK_CLASS_CAST((klass), \
- EMPATHY_TYPE_WEBCREDENTIALS_MONITOR, \
- EmpathyWebcredentialsMonitorClass))
-#define EMPATHY_IS_WEBCREDENTIALS_MONITOR(obj) \
- (G_TYPE_CHECK_INSTANCE_TYPE((obj), \
- EMPATHY_TYPE_WEBCREDENTIALS_MONITOR))
-#define EMPATHY_IS_WEBCREDENTIALS_MONITOR_CLASS(klass) \
- (G_TYPE_CHECK_CLASS_TYPE((klass), \
- EMPATHY_TYPE_WEBCREDENTIALS_MONITOR))
-#define EMPATHY_WEBCREDENTIALS_MONITOR_GET_CLASS(obj) \
- (G_TYPE_INSTANCE_GET_CLASS ((obj), \
- EMPATHY_TYPE_WEBCREDENTIALS_MONITOR, \
- EmpathyWebcredentialsMonitorClass))
-
-EmpathyWebcredentialsMonitor * empathy_webcredentials_monitor_new (
- AgManager *manager);
-
-GPtrArray * empathy_webcredentials_get_failures (
- EmpathyWebcredentialsMonitor *self);
-
-G_END_DECLS
-
-#endif /* #ifndef __EMPATHY_WEBCREDENTIALS_MONITOR_H__*/
diff --git a/ubuntu-online-accounts/mc-plugin/mcp-account-manager-uoa.c b/ubuntu-online-accounts/mc-plugin/mcp-account-manager-uoa.c
deleted file mode 100644
index 0607b9e2..00000000
--- a/ubuntu-online-accounts/mc-plugin/mcp-account-manager-uoa.c
+++ /dev/null
@@ -1,827 +0,0 @@
-/*
- * Copyright © 2012 Collabora Ltd.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * 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 "mcp-account-manager-uoa.h"
-
-#include <telepathy-glib/telepathy-glib.h>
-#include <libaccounts-glib/ag-account.h>
-#include <libaccounts-glib/ag-account-service.h>
-#include <libaccounts-glib/ag-manager.h>
-#include <libaccounts-glib/ag-service.h>
-#include <string.h>
-#include <ctype.h>
-
-#include "empathy-webcredentials-monitor.h"
-
-#define PLUGIN_NAME "uoa"
-#define PLUGIN_PRIORITY (MCP_ACCOUNT_STORAGE_PLUGIN_PRIO_KEYRING + 10)
-#define PLUGIN_DESCRIPTION "Provide Telepathy Accounts from UOA via libaccounts-glib"
-#define PLUGIN_PROVIDER EMPATHY_UOA_PROVIDER
-
-#define DEBUG g_debug
-
-#define SERVICE_TYPE "IM"
-#define KEY_PREFIX "telepathy/"
-#define KEY_ACCOUNT_NAME "mc-account-name"
-#define KEY_READONLY_PARAMS "mc-readonly-params"
-
-static void account_storage_iface_init (McpAccountStorageIface *iface);
-
-G_DEFINE_TYPE_WITH_CODE (McpAccountManagerUoa, mcp_account_manager_uoa,
- G_TYPE_OBJECT,
- G_IMPLEMENT_INTERFACE (MCP_TYPE_ACCOUNT_STORAGE,
- account_storage_iface_init));
-
-struct _McpAccountManagerUoaPrivate
-{
- McpAccountManager *am;
-
- AgManager *manager;
- EmpathyWebcredentialsMonitor *monitor;
-
- /* alloc'ed string -> ref'ed AgAccountService
- * The key is the account_name, an MC unique identifier.
- * Note: There could be multiple services in this table having the same
- * AgAccount, even if unlikely. */
- GHashTable *accounts;
-
- /* Queue of owned DelayedSignalData */
- GQueue *pending_signals;
-
- gboolean loaded;
- gboolean ready;
-};
-
-typedef enum {
- DELAYED_CREATE,
- DELAYED_DELETE,
-} DelayedSignal;
-
-typedef struct {
- DelayedSignal signal;
- AgAccountId account_id;
-} DelayedSignalData;
-
-
-static gchar *
-_service_dup_tp_value (AgAccountService *service,
- const gchar *key)
-{
- gchar *real_key = g_strdup_printf (KEY_PREFIX "%s", key);
- GVariant *value;
-
- value = ag_account_service_get_variant (service, real_key, NULL);
- g_free (real_key);
- if (value == NULL)
- return NULL;
-
- return g_variant_dup_string (value, NULL);
-}
-
-static void
-_service_set_tp_value (AgAccountService *service,
- const gchar *key,
- const gchar *value)
-{
- gchar *real_key = g_strdup_printf (KEY_PREFIX "%s", key);
-
- if (value != NULL)
- {
- GVariant *gvariant = g_variant_new_string (value);
- ag_account_service_set_variant (service, real_key, gvariant);
- }
- else
- {
- ag_account_service_set_variant (service, real_key, NULL);
- }
- g_free (real_key);
-}
-
-/* Returns NULL if the account never has been imported into MC before */
-static gchar *
-_service_dup_tp_account_name (AgAccountService *service)
-{
- return _service_dup_tp_value (service, KEY_ACCOUNT_NAME);
-}
-
-static void
-_service_set_tp_account_name (AgAccountService *service,
- const gchar *account_name)
-{
- _service_set_tp_value (service, KEY_ACCOUNT_NAME, account_name);
-}
-
-static void
-_service_enabled_cb (AgAccountService *service,
- gboolean enabled,
- McpAccountManagerUoa *self)
-{
- gchar *account_name = _service_dup_tp_account_name (service);
-
- if (!self->priv->ready || account_name == NULL)
- return;
-
- DEBUG ("UOA account %s toggled: %s", account_name,
- enabled ? "enabled" : "disabled");
-
- g_signal_emit_by_name (self, "toggled", account_name, enabled);
-
- g_free (account_name);
-}
-
-static void
-_service_changed_cb (AgAccountService *service,
- McpAccountManagerUoa *self)
-{
- gchar *account_name = _service_dup_tp_account_name (service);
-
- if (!self->priv->ready || account_name == NULL)
- return;
-
- DEBUG ("UOA account %s changed", account_name);
-
- /* FIXME: Could use ag_account_service_get_changed_fields()
- * and emit "altered-one" */
- g_signal_emit_by_name (self, "altered", account_name);
-
- g_free (account_name);
-}
-
-static void
-_account_stored_cb (GObject *source_object,
- GAsyncResult *res,
- gpointer user_data)
-{
- AgAccount *account = AG_ACCOUNT(source_object);
- GError *error = NULL;
-
- if (!ag_account_store_finish (account, res, &error))
- {
- g_assert (error != NULL);
- DEBUG ("Error storing UOA account '%s': %s",
- ag_account_get_display_name (account),
- error->message);
- g_error_free (error);
- }
-}
-
-static gboolean
-_add_service (McpAccountManagerUoa *self,
- AgAccountService *service,
- const gchar *account_name)
-{
- DEBUG ("UOA account %s added", account_name);
-
- if (g_hash_table_contains (self->priv->accounts, account_name))
- {
- DEBUG ("Already exists, ignoring");
- return FALSE;
- }
-
- g_hash_table_insert (self->priv->accounts,
- g_strdup (account_name),
- g_object_ref (service));
-
- g_signal_connect (service, "enabled",
- G_CALLBACK (_service_enabled_cb), self);
- g_signal_connect (service, "changed",
- G_CALLBACK (_service_changed_cb), self);
-
- return TRUE;
-}
-
-static void
-_account_created_cb (AgManager *manager,
- AgAccountId id,
- McpAccountManagerUoa *self)
-{
- AgAccount *account;
- GList *l;
-
- if (!self->priv->ready)
- {
- DelayedSignalData *data = g_slice_new0 (DelayedSignalData);
-
- data->signal = DELAYED_CREATE;
- data->account_id = id;
-
- g_queue_push_tail (self->priv->pending_signals, data);
- return;
- }
-
- account = ag_manager_get_account (self->priv->manager, id);
-
- l = ag_account_list_services_by_type (account, SERVICE_TYPE);
- while (l != NULL)
- {
- AgAccountService *service = ag_account_service_new (account, l->data);
- gchar *account_name = _service_dup_tp_account_name (service);
-
- /* If this is the first time we see this service, we have to generate an
- * account_name for it. */
- if (account_name == NULL)
- {
- gchar *cm_name = NULL;
- gchar *protocol_name = NULL;
- gchar *account_param = NULL;
-
- cm_name = _service_dup_tp_value (service, "manager");
- protocol_name = _service_dup_tp_value (service, "protocol");
- account_param = _service_dup_tp_value (service, "param-account");
-
- if (!tp_str_empty (cm_name) &&
- !tp_str_empty (protocol_name) &&
- !tp_str_empty (account_param))
- {
- GHashTable *params;
-
- params = tp_asv_new (
- "account", G_TYPE_STRING, account_param,
- NULL);
-
- account_name = mcp_account_manager_get_unique_name (self->priv->am,
- cm_name, protocol_name, params);
- _service_set_tp_account_name (service, account_name);
-
- ag_account_store_async (account, NULL, _account_stored_cb, self);
-
- g_hash_table_unref (params);
- }
-
- g_free (cm_name);
- g_free (protocol_name);
- g_free (account_param);
- }
-
- if (account_name != NULL)
- {
- if (_add_service (self, service, account_name))
- g_signal_emit_by_name (self, "created", account_name);
- }
-
- g_free (account_name);
- g_object_unref (service);
- ag_service_unref (l->data);
- l = g_list_delete_link (l, l);
- }
-
- g_object_unref (account);
-}
-
-static void
-_account_deleted_cb (AgManager *manager,
- AgAccountId id,
- McpAccountManagerUoa *self)
-{
- GHashTableIter iter;
- gpointer value;
-
- if (!self->priv->ready)
- {
- DelayedSignalData *data = g_slice_new0 (DelayedSignalData);
-
- data->signal = DELAYED_DELETE;
- data->account_id = id;
-
- g_queue_push_tail (self->priv->pending_signals, data);
- return;
- }
-
- g_hash_table_iter_init (&iter, self->priv->accounts);
- while (g_hash_table_iter_next (&iter, NULL, &value))
- {
- AgAccountService *service = value;
- AgAccount *account = ag_account_service_get_account (service);
- gchar *account_name;
-
- if (account->id != id)
- continue;
-
- account_name = _service_dup_tp_account_name (service);
- if (account_name == NULL)
- continue;
-
- DEBUG ("UOA account %s deleted", account_name);
-
- g_hash_table_iter_remove (&iter);
- g_signal_emit_by_name (self, "deleted", account_name);
-
- g_free (account_name);
- }
-}
-
-static void
-mcp_account_manager_uoa_dispose (GObject *object)
-{
- McpAccountManagerUoa *self = (McpAccountManagerUoa *) object;
-
- tp_clear_object (&self->priv->am);
- tp_clear_object (&self->priv->manager);
- tp_clear_pointer (&self->priv->accounts, g_hash_table_unref);
- tp_clear_object (&self->priv->monitor);
-
- G_OBJECT_CLASS (mcp_account_manager_uoa_parent_class)->dispose (object);
-}
-
-static void
-mcp_account_manager_uoa_init (McpAccountManagerUoa *self)
-{
- DEBUG ("UOA MC plugin initialised");
-
- self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self,
- MCP_TYPE_ACCOUNT_MANAGER_UOA, McpAccountManagerUoaPrivate);
-
- self->priv->accounts = g_hash_table_new_full (g_str_hash, g_str_equal,
- g_free, g_object_unref);
- self->priv->pending_signals = g_queue_new ();
-
- self->priv->manager = ag_manager_new_for_service_type (SERVICE_TYPE);
- g_return_if_fail (self->priv->manager != NULL);
-
- g_signal_connect (self->priv->manager, "account-created",
- G_CALLBACK (_account_created_cb), self);
- g_signal_connect (self->priv->manager, "account-deleted",
- G_CALLBACK (_account_deleted_cb), self);
-
- self->priv->monitor = empathy_webcredentials_monitor_new (
- self->priv->manager);
-}
-
-static void
-mcp_account_manager_uoa_class_init (McpAccountManagerUoaClass *klass)
-{
- GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
-
- gobject_class->dispose = mcp_account_manager_uoa_dispose;
-
- g_type_class_add_private (gobject_class,
- sizeof (McpAccountManagerUoaPrivate));
-}
-
-static void
-_ensure_loaded (McpAccountManagerUoa *self)
-{
- GList *services;
-
- if (self->priv->loaded)
- return;
-
- self->priv->loaded = TRUE;
-
- g_assert (!self->priv->ready);
-
- services = ag_manager_get_account_services (self->priv->manager);
- while (services != NULL)
- {
- AgAccountService *service = services->data;
- AgAccount *account = ag_account_service_get_account (service);
- gchar *account_name = _service_dup_tp_account_name (service);
-
- if (account_name != NULL)
- {
- /* This service was already known, we can add it now */
- _add_service (self, service, account_name);
- g_free (account_name);
- }
- else
- {
- DelayedSignalData *data = g_slice_new0 (DelayedSignalData);
-
- /* This service was created while MC was not running, delay its
- * creation until MC is ready */
- data->signal = DELAYED_CREATE;
- data->account_id = account->id;
-
- g_queue_push_tail (self->priv->pending_signals, data);
- }
-
- g_object_unref (services->data);
- services = g_list_delete_link (services, services);
- }
-}
-
-static GList *
-account_manager_uoa_list (const McpAccountStorage *storage,
- const McpAccountManager *am)
-{
- McpAccountManagerUoa *self = (McpAccountManagerUoa *) storage;
- GList *accounts = NULL;
- GHashTableIter iter;
- gpointer key;
-
- DEBUG (G_STRFUNC);
-
- g_return_val_if_fail (self->priv->manager != NULL, NULL);
-
- _ensure_loaded (self);
-
- g_hash_table_iter_init (&iter, self->priv->accounts);
- while (g_hash_table_iter_next (&iter, &key, NULL))
- accounts = g_list_prepend (accounts, g_strdup (key));
-
- return accounts;
-}
-
-static const gchar *
-provider_to_tp_service_name (const gchar *provider_name)
-{
- /* Well known services are defined in Telepathy spec:
- * http://telepathy.freedesktop.org/spec/Account.html#Property:Service */
- if (!tp_strdiff (provider_name, "google"))
- return "google-talk";
-
- return provider_name;
-}
-
-static gboolean
-account_manager_uoa_get (const McpAccountStorage *storage,
- const McpAccountManager *am,
- const gchar *account_name,
- const gchar *key)
-{
- McpAccountManagerUoa *self = (McpAccountManagerUoa *) storage;
- AgAccountService *service;
- AgAccount *account;
- AgService *s;
- gboolean handled = FALSE;
-
- g_return_val_if_fail (self->priv->manager != NULL, FALSE);
-
- service = g_hash_table_lookup (self->priv->accounts, account_name);
- if (service == NULL)
- return FALSE;
-
- DEBUG ("%s: %s, %s", G_STRFUNC, account_name, key);
-
- account = ag_account_service_get_account (service);
- s = ag_account_service_get_service (service);
-
- /* NULL key means we want all settings */
- if (key == NULL)
- {
- AgAccountSettingIter iter;
- const gchar *k;
- GVariant *v;
-
- ag_account_service_settings_iter_init (service, &iter, KEY_PREFIX);
- while (ag_account_settings_iter_get_next (&iter, &k, &v))
- {
- if (!g_variant_is_of_type (v, G_VARIANT_TYPE_STRING))
- continue;
-
- mcp_account_manager_set_value (am, account_name,
- k, g_variant_get_string (v, NULL));
- }
- }
-
- /* Some special keys that are not stored in setting */
- if (key == NULL || !tp_strdiff (key, "Enabled"))
- {
- mcp_account_manager_set_value (am, account_name, "Enabled",
- ag_account_service_get_enabled (service) ? "true" : "false");
- handled = TRUE;
- }
-
- if (key == NULL || !tp_strdiff (key, "DisplayName"))
- {
- mcp_account_manager_set_value (am, account_name, "DisplayName",
- ag_account_get_display_name (account));
- handled = TRUE;
- }
-
- if (key == NULL || !tp_strdiff (key, "Service"))
- {
- mcp_account_manager_set_value (am, account_name, "Service",
- provider_to_tp_service_name (ag_account_get_provider_name (account)));
- handled = TRUE;
- }
-
- if (key == NULL || !tp_strdiff (key, "Icon"))
- {
- mcp_account_manager_set_value (am, account_name, "Icon",
- ag_service_get_icon_name (s));
- handled = TRUE;
- }
-
- /* If it was none of the above, then just lookup in service' settings */
- if (!handled)
- {
- gchar *value = _service_dup_tp_value (service, key);
-
- mcp_account_manager_set_value (am, account_name, key, value);
- g_free (value);
- }
-
- return TRUE;
-}
-
-static gboolean
-account_manager_uoa_set (const McpAccountStorage *storage,
- const McpAccountManager *am,
- const gchar *account_name,
- const gchar *key,
- const gchar *val)
-{
- McpAccountManagerUoa *self = (McpAccountManagerUoa *) storage;
- AgAccountService *service;
- AgAccount *account;
-
- g_return_val_if_fail (self->priv->manager != NULL, FALSE);
-
- service = g_hash_table_lookup (self->priv->accounts, account_name);
- if (service == NULL)
- return FALSE;
-
- account = ag_account_service_get_account (service);
-
- DEBUG ("%s: %s, %s, %s", G_STRFUNC, account_name, key, val);
-
- if (!tp_strdiff (key, "Enabled"))
- {
- /* Enabled is a global setting on the account, not per-services,
- * unfortunately */
- ag_account_select_service (account, NULL);
- ag_account_set_enabled (account, !tp_strdiff (val, "true"));
- }
- else if (!tp_strdiff (key, "DisplayName"))
- {
- ag_account_set_display_name (account, val);
- }
- else
- {
- _service_set_tp_value (service, key, val);
- }
-
- return TRUE;
-}
-
-static gchar *
-account_manager_uoa_create (const McpAccountStorage *storage,
- const McpAccountManager *am,
- const gchar *cm_name,
- const gchar *protocol_name,
- GHashTable *params,
- GError **error)
-{
- McpAccountManagerUoa *self = (McpAccountManagerUoa *) storage;
- gchar *account_name;
- AgAccount *account;
- AgAccountService *service;
- GList *l;
-
- g_return_val_if_fail (self->priv->manager != NULL, NULL);
-
- if (!self->priv->ready)
- {
- g_set_error (error, TP_ERROR, TP_ERROR_INVALID_ARGUMENT,
- "Cannot create account before being ready");
- return NULL;
- }
-
- DEBUG (G_STRFUNC);
-
- /* Create a new AgAccountService and keep it internally. This won't save it
- * into persistent storage until account_manager_uoa_commit() is called.
- * We assume there is only one IM service */
- account = ag_manager_create_account (self->priv->manager, protocol_name);
- l = ag_account_list_services_by_type (account, SERVICE_TYPE);
- if (l == NULL)
- {
- g_set_error (error, TP_ERROR, TP_ERROR_INVALID_ARGUMENT,
- "Cannot create a %s service for %s provider",
- SERVICE_TYPE, protocol_name);
- g_object_unref (account);
- return NULL;
- }
- service = ag_account_service_new (account, l->data);
- ag_service_list_free (l);
- g_object_unref (account);
-
- account_name = mcp_account_manager_get_unique_name (self->priv->am,
- cm_name, protocol_name, params);
- _service_set_tp_account_name (service, account_name);
- g_assert (_add_service (self, service, account_name));
-
- /* MC will set all params on the account and commit */
-
- return account_name;
-}
-
-static gboolean
-account_manager_uoa_delete (const McpAccountStorage *storage,
- const McpAccountManager *am,
- const gchar *account_name,
- const gchar *key)
-{
- McpAccountManagerUoa *self = (McpAccountManagerUoa *) storage;
- AgAccountService *service;
- AgAccount *account;
-
- g_return_val_if_fail (self->priv->manager != NULL, FALSE);
-
- service = g_hash_table_lookup (self->priv->accounts, account_name);
- if (service == NULL)
- return FALSE;
-
- account = ag_account_service_get_account (service);
-
- DEBUG ("%s: %s, %s", G_STRFUNC, account_name, key);
-
- if (key == NULL)
- {
- ag_account_delete (account);
- g_hash_table_remove (self->priv->accounts, account_name);
- }
- else
- {
- _service_set_tp_value (service, key, NULL);
- }
-
- return TRUE;
-}
-
-static gboolean
-account_manager_uoa_commit (const McpAccountStorage *storage,
- const McpAccountManager *am)
-{
- McpAccountManagerUoa *self = (McpAccountManagerUoa *) storage;
- GHashTableIter iter;
- gpointer value;
-
- DEBUG (G_STRFUNC);
-
- g_return_val_if_fail (self->priv->manager != NULL, FALSE);
-
- g_hash_table_iter_init (&iter, self->priv->accounts);
- while (g_hash_table_iter_next (&iter, NULL, &value))
- {
- AgAccountService *service = value;
- AgAccount *account = ag_account_service_get_account (service);
-
- ag_account_store_async (account, NULL, _account_stored_cb, self);
- }
-
- return TRUE;
-}
-
-static void
-failure_removed_cb (EmpathyWebcredentialsMonitor *monitor,
- AgAccount *account,
- McpAccountManagerUoa *self)
-{
- GList *l;
-
- DEBUG ("Account '%u' is not failing any more", account->id);
-
- l = ag_account_list_services_by_type (account, SERVICE_TYPE);
- while (l != NULL)
- {
- AgAccountService *service = ag_account_service_new (account, l->data);
- gchar *account_name = _service_dup_tp_account_name (service);
-
- if (account_name != NULL)
- {
- DEBUG ("Reconnect account %s", account_name);
-
- mcp_account_storage_emit_reconnect (MCP_ACCOUNT_STORAGE (self),
- account_name);
- }
-
- g_free (account_name);
- g_object_unref (service);
- ag_service_unref (l->data);
- l = g_list_delete_link (l, l);
- }
-}
-
-static void
-account_manager_uoa_ready (const McpAccountStorage *storage,
- const McpAccountManager *am)
-{
- McpAccountManagerUoa *self = (McpAccountManagerUoa *) storage;
- DelayedSignalData *data;
-
- g_return_if_fail (self->priv->manager != NULL);
-
- if (self->priv->ready)
- return;
-
- DEBUG (G_STRFUNC);
-
- self->priv->ready = TRUE;
- self->priv->am = g_object_ref (G_OBJECT (am));
-
- while ((data = g_queue_pop_head (self->priv->pending_signals)) != NULL)
- {
- switch (data->signal)
- {
- case DELAYED_CREATE:
- _account_created_cb (self->priv->manager, data->account_id, self);
- break;
- case DELAYED_DELETE:
- _account_deleted_cb (self->priv->manager, data->account_id, self);
- break;
- default:
- g_assert_not_reached ();
- }
-
- g_slice_free (DelayedSignalData, data);
- }
-
- g_queue_free (self->priv->pending_signals);
- self->priv->pending_signals = NULL;
-
- g_signal_connect (self->priv->monitor, "failure-removed",
- G_CALLBACK (failure_removed_cb), self);
-}
-
-static void
-account_manager_uoa_get_identifier (const McpAccountStorage *storage,
- const gchar *account_name,
- GValue *identifier)
-{
- McpAccountManagerUoa *self = (McpAccountManagerUoa *) storage;
- AgAccountService *service;
- AgAccount *account;
-
- g_return_if_fail (self->priv->manager != NULL);
-
- service = g_hash_table_lookup (self->priv->accounts, account_name);
- if (service == NULL)
- return;
-
- account = ag_account_service_get_account (service);
-
- g_value_init (identifier, G_TYPE_UINT);
- g_value_set_uint (identifier, account->id);
-}
-
-static guint
-account_manager_uoa_get_restrictions (const McpAccountStorage *storage,
- const gchar *account_name)
-{
- McpAccountManagerUoa *self = (McpAccountManagerUoa *) storage;
- AgAccountService *service;
- guint restrictions = TP_STORAGE_RESTRICTION_FLAG_CANNOT_SET_SERVICE;
- GVariant *value;
-
- g_return_val_if_fail (self->priv->manager != NULL, 0);
-
- /* If we don't know this account, we cannot do anything */
- service = g_hash_table_lookup (self->priv->accounts, account_name);
- if (service == NULL)
- return G_MAXUINT;
-
- value = ag_account_service_get_variant (service,
- KEY_PREFIX KEY_READONLY_PARAMS, NULL);
-
- if (value != NULL && g_variant_get_boolean (value))
- restrictions |= TP_STORAGE_RESTRICTION_FLAG_CANNOT_SET_PARAMETERS;
-
- /* FIXME: We can't set Icon either, but there is no flag for that */
- return restrictions;
-}
-
-static void
-account_storage_iface_init (McpAccountStorageIface *iface)
-{
- mcp_account_storage_iface_set_name (iface, PLUGIN_NAME);
- mcp_account_storage_iface_set_desc (iface, PLUGIN_DESCRIPTION);
- mcp_account_storage_iface_set_priority (iface, PLUGIN_PRIORITY);
- mcp_account_storage_iface_set_provider (iface, PLUGIN_PROVIDER);
-
-#define IMPLEMENT(x) mcp_account_storage_iface_implement_##x(iface, \
- account_manager_uoa_##x)
- IMPLEMENT (get);
- IMPLEMENT (list);
- IMPLEMENT (set);
- IMPLEMENT (create);
- IMPLEMENT (delete);
- IMPLEMENT (commit);
- IMPLEMENT (ready);
- IMPLEMENT (get_identifier);
- IMPLEMENT (get_restrictions);
-#undef IMPLEMENT
-}
-
-McpAccountManagerUoa *
-mcp_account_manager_uoa_new (void)
-{
- return g_object_new (MCP_TYPE_ACCOUNT_MANAGER_UOA, NULL);
-}
diff --git a/ubuntu-online-accounts/mc-plugin/mcp-account-manager-uoa.h b/ubuntu-online-accounts/mc-plugin/mcp-account-manager-uoa.h
deleted file mode 100644
index 291aeb88..00000000
--- a/ubuntu-online-accounts/mc-plugin/mcp-account-manager-uoa.h
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
- * Copyright © 2012 Collabora Ltd.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * 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 <mission-control-plugins/mission-control-plugins.h>
-
-#ifndef __MCP_ACCOUNT_MANAGER_UOA_H__
-#define __MCP_ACCOUNT_MANAGER_UOA_H__
-
-G_BEGIN_DECLS
-
-#define MCP_TYPE_ACCOUNT_MANAGER_UOA \
- (mcp_account_manager_uoa_get_type ())
-
-#define MCP_ACCOUNT_MANAGER_UOA(o) \
- (G_TYPE_CHECK_INSTANCE_CAST ((o), MCP_TYPE_ACCOUNT_MANAGER_UOA, \
- McpAccountManagerUoa))
-
-#define MCP_ACCOUNT_MANAGER_UOA_CLASS(k) \
- (G_TYPE_CHECK_CLASS_CAST((k), MCP_TYPE_ACCOUNT_MANAGER_UOA, \
- McpAccountManagerUoaClass))
-
-#define MCP_IS_ACCOUNT_MANAGER_UOA(o) \
- (G_TYPE_CHECK_INSTANCE_TYPE ((o), MCP_TYPE_ACCOUNT_MANAGER_UOA))
-
-#define MCP_IS_ACCOUNT_MANAGER_UOA_CLASS(k) \
- (G_TYPE_CHECK_CLASS_TYPE ((k), MCP_TYPE_ACCOUNT_MANAGER_UOA))
-
-#define MCP_ACCOUNT_MANAGER_UOA_GET_CLASS(o) \
- (G_TYPE_INSTANCE_GET_CLASS ((o), MCP_TYPE_ACCOUNT_MANAGER_UOA, \
- McpAccountManagerUoaClass))
-
-typedef struct _McpAccountManagerUoaPrivate McpAccountManagerUoaPrivate;
-
-typedef struct {
- GObject parent;
-
- McpAccountManagerUoaPrivate *priv;
-} _McpAccountManagerUoa;
-
-typedef struct {
- GObjectClass parent_class;
-} _McpAccountManagerUoaClass;
-
-typedef _McpAccountManagerUoa McpAccountManagerUoa;
-typedef _McpAccountManagerUoaClass McpAccountManagerUoaClass;
-
-GType mcp_account_manager_uoa_get_type (void) G_GNUC_CONST;
-
-McpAccountManagerUoa *mcp_account_manager_uoa_new (void);
-
-G_END_DECLS
-
-#endif
diff --git a/ubuntu-online-accounts/mc-plugin/mission-control-plugin.c b/ubuntu-online-accounts/mc-plugin/mission-control-plugin.c
deleted file mode 100644
index 3e61dc3b..00000000
--- a/ubuntu-online-accounts/mc-plugin/mission-control-plugin.c
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * mission-control-plugin.c
- *
- * A Mission Control plugin to expose Ubuntu Online Accounts with chat
- * capabilities (e.g. Facebook) to Mission Control
- *
- * Copyright (C) 2012 Collabora Ltd.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * 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, see <http://www.gnu.org/licenses/>.
- *
- * Authors: Xavier Claessens <xavier.claessens@collabora.co.uk>
- */
-
-#include "config.h"
-
-#include <mission-control-plugins/mission-control-plugins.h>
-
-#include "mcp-account-manager-uoa.h"
-
-GObject *
-mcp_plugin_ref_nth_object (guint n)
-{
- static void *plugin_0 = NULL;
-
- switch (n)
- {
- case 0:
- if (plugin_0 == NULL)
- plugin_0 = g_object_new (MCP_TYPE_ACCOUNT_MANAGER_UOA, NULL);
- else
- g_object_ref (plugin_0);
-
- return plugin_0;
-
- default:
- return NULL;
- }
-}