diff options
63 files changed, 5016 insertions, 3739 deletions
diff --git a/configure.ac b/configure.ac index 8a85a7525..c921c40cd 100644 --- a/configure.ac +++ b/configure.ac @@ -39,6 +39,7 @@ LIBCHAMPLAIN_REQUIRED=0.3.0 LIBCHAMPLAIN_GTK_REQUIRED=0.3.0 CLUTTER_GTK_REQUIRED=0.8.2 GEOCLUE_REQUIRED=0.11 +WEBKIT_REQUIRED=1.1.7 # Use --enable-maintainer-mode to disabled deprecated symbols GNOME_MAINTAINER_MODE_DEFINES @@ -156,6 +157,33 @@ AC_DEFINE_UNQUOTED(GETTEXT_PACKAGE,"$GETTEXT_PACKAGE",[Gettext package name]) AM_GLIB_GNU_GETTEXT # ----------------------------------------------------------- +# Webkit +# ----------------------------------------------------------- +AC_ARG_ENABLE(webkit, + AS_HELP_STRING([--enable-webkit=@<:@no/yes/auto@:>@], + [build with webkit support]), , + enable_webkit=auto) + +if test "x$enable_webkit" != "xno"; then + PKG_CHECK_MODULES(WEBKIT, + [ + webkit-1.0 >= $WEBKIT_REQUIRED + ], have_webkit="yes", have_webkit="no") + + if test "x$have_webkit" = "xyes"; then + AC_DEFINE(HAVE_WEBKIT, 1, [Define if you have libwebkitgtk]) + fi +else + have_webkit=no +fi + +if test "x$enable_webkit" = "xyes" -a "x$have_webkit" != "xyes"; then + AC_MSG_ERROR([Couldn't find webkit dependencies.]) +fi + +AM_CONDITIONAL(HAVE_WEBKIT, test "x$have_webkit" = "xyes") + +# ----------------------------------------------------------- # spellchecking checks: enchant and iso-codes # ----------------------------------------------------------- AC_ARG_ENABLE(spell, @@ -425,6 +453,7 @@ Configure summary: Spell checking (enchant)....: ${have_enchant} Display maps (libchamplain).: ${have_libchamplain} Location awareness (Geoclue): ${have_geoclue} + Adium themes (Webkit).......: ${have_webkit} Extras: Documentation...............: ${enable_gtk_doc} diff --git a/data/Makefile.am b/data/Makefile.am index 48cc350cc..52108fbe7 100644 --- a/data/Makefile.am +++ b/data/Makefile.am @@ -17,7 +17,8 @@ profile_DATA = \ sipphone.profile \ groupwise.profile \ gadugadu.profile \ - qq.profile + qq.profile \ + sametime.profile desktopdir = $(datadir)/applications desktop_in_files = empathy.desktop.in @@ -40,12 +41,16 @@ else install-data-local: endif +htmldir = $(datadir)/empathy +html_DATA = Template.html + EXTRA_DIST = \ $(profile_DATA) \ $(desktop_in_files) \ - $(desktop_DATA) \ + $(desktop_DATA) \ $(schemas_in_files) \ - $(schemas_DATA) + $(schemas_DATA) \ + $(html_DATA) DISTCLEANFILES = \ $(desktop_DATA) \ diff --git a/data/Template.html b/data/Template.html new file mode 100644 index 000000000..708e85bdb --- /dev/null +++ b/data/Template.html @@ -0,0 +1,159 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> +<html> +<head> + <meta http-equiv="content-type" content="text/html; charset=utf-8" /> + <base href="%@"> + <script type="text/ecmascript" defer="defer"> + + //Appending new content to the message view + function appendMessage(html) { + shouldScroll = nearBottom(); + + //Remove any existing insertion point + insert = document.getElementById("insert"); + if(insert) insert.parentNode.removeChild(insert); + + //Append the new message to the bottom of our chat block + chat = document.getElementById("Chat"); + range = document.createRange(); + range.selectNode(chat); + documentFragment = range.createContextualFragment(html); + chat.appendChild(documentFragment); + + alignChat(shouldScroll); + } + function appendMessageNoScroll(html) { + //Remove any existing insertion point + insert = document.getElementById("insert"); + if(insert) insert.parentNode.removeChild(insert); + + //Append the new message to the bottom of our chat block + chat = document.getElementById("Chat"); + range = document.createRange(); + range.selectNode(chat); + documentFragment = range.createContextualFragment(html); + chat.appendChild(documentFragment); + } + function appendNextMessage(html){ + shouldScroll = nearBottom(); + + //Locate the insertion point + insert = document.getElementById("insert"); + + //make new node + range = document.createRange(); + range.selectNode(insert.parentNode); + newNode = range.createContextualFragment(html); + + //swap + insert.parentNode.replaceChild(newNode,insert); + + alignChat(shouldScroll); + } + function appendNextMessageNoScroll(html){ + //Locate the insertion point + insert = document.getElementById("insert"); + + //make new node + range = document.createRange(); + range.selectNode(insert.parentNode); + newNode = range.createContextualFragment(html); + + //swap + insert.parentNode.replaceChild(newNode,insert); + } + + //Auto-scroll to bottom. Use nearBottom to determine if a scrollToBottom is desired. + function nearBottom() { + return ( document.body.scrollTop >= ( document.body.offsetHeight - ( window.innerHeight * 1.2 ) ) ); + } + function scrollToBottom() { + document.body.scrollTop = document.body.offsetHeight; + } + + //Dynamically exchange the active stylesheet + function setStylesheet( id, url ) { + code = "<style id=\"" + id + "\" type=\"text/css\" media=\"screen,print\">"; + if( url.length ) code += "@import url( \"" + url + "\" );"; + code += "</style>"; + range = document.createRange(); + head = document.getElementsByTagName( "head" ).item(0); + range.selectNode( head ); + documentFragment = range.createContextualFragment( code ); + head.removeChild( document.getElementById( id ) ); + head.appendChild( documentFragment ); + } + + //Swap an image with its alt-tag text on click, or expand/unexpand an attached image + document.onclick = imageCheck; + function imageCheck() { + node = event.target; + if(node.tagName == 'IMG' && !client.zoomImage(node) && node.alt) { + a = document.createElement('a'); + a.setAttribute('onclick', 'imageSwap(this)'); + a.setAttribute('src', node.getAttribute('src')); + a.className = node.className; + text = document.createTextNode(node.alt); + a.appendChild(text); + node.parentNode.replaceChild(a, node); + } + } + + function imageSwap(node) { + shouldScroll = nearBottom(); + + //Swap the image/text + img = document.createElement('img'); + img.setAttribute('src', node.getAttribute('src')); + img.setAttribute('alt', node.firstChild.nodeValue); + img.className = node.className; + node.parentNode.replaceChild(img, node); + + alignChat(shouldScroll); + } + + //Align our chat to the bottom of the window. If true is passed, view will also be scrolled down + function alignChat(shouldScroll) { + var windowHeight = window.innerHeight; + + if (windowHeight > 0) { + var contentElement = document.getElementById('Chat'); + var contentHeight = contentElement.offsetHeight; + if (windowHeight - contentHeight > 0) { + contentElement.style.position = 'relative'; + contentElement.style.top = (windowHeight - contentHeight) + 'px'; + } else { + contentElement.style.position = 'static'; + } + } + + if (shouldScroll) scrollToBottom(); + } + + function windowDidResize(){ + alignChat(true/*nearBottom()*/); //nearBottom buggy with inactive tabs + } + + window.onresize = windowDidResize; + </script> + + <!-- This style is shared by all variants. !--> + <style id="baseStyle" type="text/css" media="screen,print"> + %@ + *{ word-wrap:break-word; } + img.scaledToFitImage { height:auto; width:100%; } + </style> + + <!-- Although we call this mainStyle for legacy reasons, it's actually the variant style !--> + <style id="mainStyle" type="text/css" media="screen,print"> + @import url( "%@" ); + </style> + +</head> +<body onload="alignChat(true);" style="==bodyBackground=="> +%@ +<div id="Chat"> +</div> +%@ +</body> +</html> diff --git a/data/empathy.schemas.in b/data/empathy.schemas.in index 572eb8871..81ea5e864 100644 --- a/data/empathy.schemas.in +++ b/data/empathy.schemas.in @@ -304,6 +304,20 @@ </schema> <schema> + <key>/schemas/apps/empathy/conversation/adium_path</key> + <applyto>/apps/empathy/conversation/adium_path</applyto> + <owner>empathy</owner> + <type>string</type> + <default></default> + <locale name="C"> + <short>Path of the adium theme to use</short> + <long> + Path of the adium theme to use if the theme used for chat is adium. + </long> + </locale> + </schema> + + <schema> <key>/schemas/apps/empathy/conversation/theme_chat_room</key> <applyto>/apps/empathy/conversation/theme_chat_room</applyto> <owner>empathy</owner> diff --git a/data/icons/Makefile.am b/data/icons/Makefile.am index 81aa8446a..cbd022d84 100644 --- a/data/icons/Makefile.am +++ b/data/icons/Makefile.am @@ -33,6 +33,7 @@ private_icons = \ hicolor_apps_16x16_im-local-xmpp.png \ hicolor_apps_16x16_im-gadugadu.png \ hicolor_apps_16x16_im-qq.png \ + hicolor_apps_16x16_im-meanwhile.png \ hicolor_apps_16x16_empathy-starred.png \ hicolor_apps_16x16_empathy-unstarred.png \ hicolor_apps_22x22_im-ekiga.png \ @@ -45,6 +46,7 @@ private_icons = \ hicolor_apps_22x22_im-local-xmpp.png \ hicolor_apps_22x22_im-gadugadu.png \ hicolor_apps_22x22_im-qq.png \ + hicolor_apps_22x22_im-meanwhile.png \ hicolor_apps_22x22_empathy-starred.png \ hicolor_apps_22x22_empathy-unstarred.png \ hicolor_apps_24x24_im-ekiga.png \ @@ -81,6 +83,7 @@ private_icons = \ hicolor_apps_48x48_im-local-xmpp.png \ hicolor_apps_48x48_im-gadugadu.png \ hicolor_apps_48x48_im-qq.png \ + hicolor_apps_48x48_im-meanwhile.png \ hicolor_apps_48x48_empathy-starred.png \ hicolor_apps_48x48_empathy-unstarred.png \ hicolor_apps_scalable_im-ekiga.svg \ @@ -93,6 +96,7 @@ private_icons = \ hicolor_apps_scalable_im-local-xmpp.svg \ hicolor_apps_scalable_im-gadugadu.svg \ hicolor_apps_scalable_im-qq.svg \ + hicolor_apps_scalable_im-meanwhile.svg \ hicolor_status_16x16_empathy-available.png \ hicolor_status_16x16_empathy-away.png \ hicolor_status_16x16_empathy-busy.png \ diff --git a/data/icons/hicolor_apps_16x16_im-meanwhile.png b/data/icons/hicolor_apps_16x16_im-meanwhile.png Binary files differnew file mode 100644 index 000000000..99d172250 --- /dev/null +++ b/data/icons/hicolor_apps_16x16_im-meanwhile.png diff --git a/data/icons/hicolor_apps_22x22_im-meanwhile.png b/data/icons/hicolor_apps_22x22_im-meanwhile.png Binary files differnew file mode 100644 index 000000000..d6da49461 --- /dev/null +++ b/data/icons/hicolor_apps_22x22_im-meanwhile.png diff --git a/data/icons/hicolor_apps_48x48_im-meanwhile.png b/data/icons/hicolor_apps_48x48_im-meanwhile.png Binary files differnew file mode 100644 index 000000000..f747a5600 --- /dev/null +++ b/data/icons/hicolor_apps_48x48_im-meanwhile.png diff --git a/data/icons/hicolor_apps_scalable_im-meanwhile.svg b/data/icons/hicolor_apps_scalable_im-meanwhile.svg new file mode 100644 index 000000000..92244096a --- /dev/null +++ b/data/icons/hicolor_apps_scalable_im-meanwhile.svg @@ -0,0 +1,174 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:xlink="http://www.w3.org/1999/xlink" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + width="48" + height="48" + id="svg2" + sodipodi:version="0.32" + inkscape:version="0.46" + version="1.0" + sodipodi:docbase="/home/hbons/Desktop/Gaim Refresh/protocols/48" + sodipodi:docname="meanwhile.svg" + inkscape:export-filename="/home/hbons/Desktop/Gaim Refresh/protocols/48/meanwhile.png" + inkscape:export-xdpi="90" + inkscape:export-ydpi="90" + inkscape:output_extension="org.inkscape.output.svg.inkscape"> + <defs + id="defs4"> + <linearGradient + inkscape:collect="always" + id="linearGradient2195"> + <stop + style="stop-color:#ffffff;stop-opacity:1;" + offset="0" + id="stop2197" /> + <stop + style="stop-color:#ffffff;stop-opacity:0;" + offset="1" + id="stop2199" /> + </linearGradient> + <linearGradient + inkscape:collect="always" + id="linearGradient2230"> + <stop + style="stop-color:#ffffff;stop-opacity:1;" + offset="0" + id="stop2232" /> + <stop + style="stop-color:#ffffff;stop-opacity:0;" + offset="1" + id="stop2234" /> + </linearGradient> + <linearGradient + inkscape:collect="always" + id="linearGradient3150"> + <stop + style="stop-color:#2e3436;stop-opacity:1;" + offset="0" + id="stop3152" /> + <stop + style="stop-color:#2e3436;stop-opacity:0;" + offset="1" + id="stop3154" /> + </linearGradient> + <radialGradient + inkscape:collect="always" + xlink:href="#linearGradient3150" + id="radialGradient4330" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(-0.842757,5.698892e-16,-4.565819e-9,-0.35721,19.80716,14.19321)" + cx="10.748654" + cy="10.457643" + fx="10.748654" + fy="10.457643" + r="6.6449099" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient2230" + id="linearGradient2236" + x1="10.177145" + y1="-1.3535745" + x2="10.177145" + y2="8.1371298" + gradientUnits="userSpaceOnUse" /> + <radialGradient + inkscape:collect="always" + xlink:href="#linearGradient2195" + id="radialGradient2211" + cx="30.5625" + cy="23.172834" + fx="30.5625" + fy="23.172834" + r="23.5" + gradientTransform="matrix(1.330958,-1.200379e-32,1.144509e-32,1.269011,-10.11491,-9.053927)" + gradientUnits="userSpaceOnUse" /> + </defs> + <sodipodi:namedview + id="base" + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1.0" + inkscape:pageopacity="0.0" + inkscape:pageshadow="2" + inkscape:zoom="16.976026" + inkscape:cx="38.972041" + inkscape:cy="25.781032" + inkscape:document-units="px" + inkscape:current-layer="layer1" + showgrid="true" + fill="#f57900" + showguides="true" + inkscape:guide-bbox="true" + inkscape:window-width="1268" + inkscape:window-height="971" + inkscape:window-x="6" + inkscape:window-y="21" /> + <metadata + id="metadata7"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + </cc:Work> + </rdf:RDF> + </metadata> + <g + inkscape:label="Layer 1" + inkscape:groupmode="layer" + id="layer1"> + <path + sodipodi:type="arc" + style="opacity:0.3;fill:url(#radialGradient4330);fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + id="path3140" + sodipodi:cx="10.748654" + sodipodi:cy="10.457643" + sodipodi:rx="6.6449099" + sodipodi:ry="2.3675451" + d="M 17.393564 10.457643 A 6.6449099 2.3675451 0 1 1 4.1037445,10.457643 A 6.6449099 2.3675451 0 1 1 17.393564 10.457643 z" + transform="matrix(3.583369,0,0,3.000545,-14.70523,9.779617)" /> + <path + sodipodi:type="arc" + style="opacity:1;fill:#f57900;fill-opacity:1;stroke:#ce5c00;stroke-width:0.67679459;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + id="path4302" + sodipodi:cx="10.555883" + sodipodi:cy="4.0385542" + sodipodi:rx="5.074944" + sodipodi:ry="5.074944" + d="M 15.630827 4.0385542 A 5.074944 5.074944 0 1 1 5.4809394,4.0385542 A 5.074944 5.074944 0 1 1 15.630827 4.0385542 z" + transform="matrix(1.477556,0,0,1.477551,8.403577,4.033323)" /> + <path + sodipodi:type="arc" + style="opacity:0.6;fill:url(#linearGradient2236);fill-opacity:1;stroke:#ffffff;stroke-width:0.78084576;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + id="path4273" + sodipodi:cx="10.555883" + sodipodi:cy="4.0385542" + sodipodi:rx="5.074944" + sodipodi:ry="5.074944" + d="M 15.630827 4.0385542 A 5.074944 5.074944 0 1 1 5.4809394,4.0385542 A 5.074944 5.074944 0 1 1 15.630827 4.0385542 z" + transform="matrix(1.280662,0,0,1.280662,10.48149,4.827989)" /> + <path + style="fill:#f57900;fill-opacity:1;stroke:#ce5c00;stroke-width:1.00000119;stroke-miterlimit:4;stroke-opacity:1" + d="M 34.49131,8.6205284 C 34.49131,13.938683 32.849731,20.518688 23.898198,20.518688 C 15.00451,20.518688 13.526711,13.679495 13.526711,8.6600767 L 5.4949228,9.8762415 C 5.4949228,23.237275 17.664236,26.553794 17.664236,26.553794 C 17.664236,26.553794 9.1712538,34.298165 9.1712538,44.405547 L 19.237281,44.498262 C 19.237281,44.498262 21.456328,35.564348 25.010569,35.564348 C 28.652494,35.564348 30.6887,44.471546 30.6887,44.471546 L 40.362294,44.503507 C 40.362294,33.010164 30.381957,26.578174 30.381957,26.578174 C 30.381957,26.578174 42.614757,23.170121 42.614757,9.5035195 L 34.49131,8.6205284 z " + id="rect2213" + sodipodi:nodetypes="czccccczccccc" /> + <path + sodipodi:type="inkscape:offset" + inkscape:radius="-0.9525249" + inkscape:original="M 34.5 8.625 C 34.5 13.943155 32.857783 20.53125 23.90625 20.53125 C 15.012563 20.53125 13.53125 13.675668 13.53125 8.65625 L 5.5 9.875 C 5.5000002 23.236033 17.65625 26.5625 17.65625 26.5625 C 17.65625 26.562499 9.15625 34.298868 9.15625 44.40625 L 19.25 44.5 C 19.249999 44.500002 21.445759 35.5625 25 35.5625 C 28.641925 35.562502 30.6875 44.46875 30.6875 44.46875 L 40.375 44.5 C 40.375001 33.006658 30.375 26.59375 30.375 26.59375 C 30.375001 26.593749 42.625 23.166602 42.625 9.5 L 34.5 8.625 z " + xlink:href="#rect2213" + style="opacity:0.6;fill:url(#radialGradient2211);fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + id="path2220" + inkscape:href="#rect2213" + d="M 45.40625,11.75 C 45.26383,14.467634 44.656918,17.754917 42.6875,20.65625 C 40.459732,23.938183 36.552927,26.5 30.5,26.5 C 24.488156,26.5 20.637234,23.994802 18.4375,20.75 C 16.4845,17.869153 15.883719,14.581533 15.75,11.84375 L 7.5625,13.15625 C 7.8022289,20.855399 11.189172,25.378007 14.65625,28.03125 C 18.250337,30.781689 21.8125,31.5 21.8125,31.5 C 22.153479,31.568346 22.430121,31.817069 22.53422,32.148884 C 22.638319,32.4807 22.553332,32.842875 22.3125,33.09375 C 22.3125,33.09375 12.834342,43.464627 12.34375,55.4375 L 23.625,55.5625 C 23.775583,54.968024 24.284703,52.850143 25.46875,50.125 C 26.139238,48.581838 26.957479,47.047605 27.96875,45.8125 C 28.980021,44.577395 30.249533,43.59375 31.8125,43.59375 C 33.392834,43.59375 34.682884,44.544922 35.6875,45.78125 C 36.692116,47.017578 37.481015,48.583576 38.125,50.125 C 39.262583,52.847886 39.73782,54.93884 39.875,55.53125 L 50.59375,55.5625 C 49.991815,42.90975 37.8125,33.21875 37.8125,33.21875 C 37.516383,32.984647 37.386427,32.597781 37.481159,32.232384 C 37.575892,31.866987 37.877442,31.591993 38.25,31.53125 C 38.25,31.53125 42.11079,30.902899 45.96875,28.21875 C 49.692789,25.627775 53.310428,21.149688 53.5625,13.28125 L 45.40625,11.75 z " /> + </g> +</svg> diff --git a/data/sametime.profile b/data/sametime.profile new file mode 100644 index 000000000..aec798925 --- /dev/null +++ b/data/sametime.profile @@ -0,0 +1,11 @@ +[Profile] +Manager=haze +Protocol=sametime +IconName = im-meanwhile +DisplayName = Sametime +ConfigurationUI = sametime +Capabilities = chat-p2p, supports-alias, supports-roster +VCardDefault = 1 +VCardField = X-Sametime +SupportedPresences = away,hidden,do-not-disturb + diff --git a/docs/libempathy-gtk/libempathy-gtk-docs.sgml b/docs/libempathy-gtk/libempathy-gtk-docs.sgml index c7b630b14..71f8ed3b6 100644 --- a/docs/libempathy-gtk/libempathy-gtk-docs.sgml +++ b/docs/libempathy-gtk/libempathy-gtk-docs.sgml @@ -49,6 +49,7 @@ <xi:include href="xml/empathy-smiley-manager.xml"/> <xi:include href="xml/empathy-spell.xml"/> <xi:include href="xml/empathy-status-preset-dialog.xml"/> + <xi:include href="xml/empathy-theme-adium.xml"/> <xi:include href="xml/empathy-theme-boxes.xml"/> <xi:include href="xml/empathy-theme-irc.xml"/> <xi:include href="xml/empathy-theme-manager.xml"/> diff --git a/docs/libempathy-gtk/libempathy-gtk.types b/docs/libempathy-gtk/libempathy-gtk.types index 347cbba90..7672cc983 100644 --- a/docs/libempathy-gtk/libempathy-gtk.types +++ b/docs/libempathy-gtk/libempathy-gtk.types @@ -21,8 +21,10 @@ empathy_contact_widget_flags_get_type empathy_gst_video_src_channel_get_type empathy_sound_get_type empathy_presence_chooser_get_type +empathy_profile_chooser_get_type empathy_smiley_manager_get_type empathy_status_preset_dialog_get_type +empathy_theme_adium_get_type empathy_theme_boxes_get_type empathy_theme_irc_get_type empathy_theme_manager_get_type diff --git a/docs/libempathy/libempathy-docs.sgml b/docs/libempathy/libempathy-docs.sgml index 5c6c3ca4e..41c7add8d 100644 --- a/docs/libempathy/libempathy-docs.sgml +++ b/docs/libempathy/libempathy-docs.sgml @@ -50,7 +50,6 @@ <xi:include href="xml/empathy-tp-contact-list.xml"/> <xi:include href="xml/empathy-tp-file.xml"/> <xi:include href="xml/empathy-tp-roomlist.xml"/> - <xi:include href="xml/empathy-tp-tube.xml"/> <xi:include href="xml/empathy-tube-handler.xml"/> <xi:include href="xml/empathy-types.xml"/> <xi:include href="xml/empathy-utils.xml"/> diff --git a/docs/libempathy/libempathy.types b/docs/libempathy/libempathy.types index 9da0bbe18..878e68033 100644 --- a/docs/libempathy/libempathy.types +++ b/docs/libempathy/libempathy.types @@ -31,6 +31,5 @@ empathy_tp_contact_factory_get_type empathy_tp_contact_list_get_type empathy_tp_file_get_type empathy_tp_roomlist_get_type -empathy_tp_tube_get_type empathy_tube_handler_get_type diff --git a/libempathy-gtk/Makefile.am b/libempathy-gtk/Makefile.am index 80c9a792d..2a4438e57 100644 --- a/libempathy-gtk/Makefile.am +++ b/libempathy-gtk/Makefile.am @@ -10,6 +10,7 @@ AM_CPPFLAGS = \ $(ENCHANT_CFLAGS) \ $(LIBCHAMPLAIN_CFLAGS) \ $(GEOCLUE_CFLAGS) \ + $(WEBKIT_CFLAGS) \ $(WARN_CFLAGS) \ $(DISABLE_DEPRECATED) @@ -73,6 +74,7 @@ libempathy_gtk_la_LIBADD = \ $(ENCHANT_LIBS) \ $(LIBCHAMPLAIN_LIBS) \ $(GEOCLUE_LIBS) \ + $(WEBKIT_LIBS) \ $(top_builddir)/libempathy/libempathy.la libempathy_gtk_la_LDFLAGS = \ @@ -118,14 +120,6 @@ libempathy_gtk_headers = \ empathy-theme-manager.h \ empathy-ui-utils.h -if HAVE_GEOCLUE -libempathy_gtk_handwritten_source += \ - empathy-location-manager.c - -libempathy_gtk_headers += \ - empathy-location-manager.h -endif - check_c_sources = \ $(libempathy_gtk_handwritten_source) \ $(libempathy_gtk_headers) @@ -218,6 +212,29 @@ pkgconfig_DATA = libempathy-gtk.pc EXTRA_DIST = \ $(ui_DATA) +if HAVE_GEOCLUE +libempathy_gtk_handwritten_source += \ + empathy-location-manager.c + +libempathy_gtk_headers += \ + empathy-location-manager.h +else +EXTRA_DIST += \ + empathy-location-manager.c \ + empathy-location-manager.h +endif + +if HAVE_WEBKIT +libempathy_gtk_handwritten_source += \ + empathy-theme-adium.c +libempathy_gtk_headers += \ + empathy-theme-adium.h +else +EXTRA_DIST += \ + empathy-theme-adium.c \ + empathy-theme-adium.h +endif + CLEANFILES = \ $(BUILT_SOURCES) \ stamp-empathy-gtk-enum-types.h diff --git a/libempathy-gtk/empathy-avatar-chooser.c b/libempathy-gtk/empathy-avatar-chooser.c index 0f4311e07..8c005a029 100644 --- a/libempathy-gtk/empathy-avatar-chooser.c +++ b/libempathy-gtk/empathy-avatar-chooser.c @@ -555,7 +555,7 @@ avatar_chooser_maybe_convert_and_scale (EmpathyAvatarChooser *chooser, /* Takes ownership of new_mime_type and converted_image_data */ avatar = empathy_avatar_new (converted_image_data, - converted_image_size, new_mime_type, NULL); + converted_image_size, new_mime_type, NULL, NULL); return avatar; } @@ -598,7 +598,7 @@ avatar_chooser_set_image_from_data (EmpathyAvatarChooser *chooser, } /* avatar takes ownership of data and mime_type */ - avatar = empathy_avatar_new (data, size, mime_type, NULL); + avatar = empathy_avatar_new (data, size, mime_type, NULL, NULL); avatar_chooser_set_image (chooser, avatar, pixbuf, set_locally); } diff --git a/libempathy-gtk/empathy-chat-text-view.c b/libempathy-gtk/empathy-chat-text-view.c index 8874b7ace..95e67b714 100644 --- a/libempathy-gtk/empathy-chat-text-view.c +++ b/libempathy-gtk/empathy-chat-text-view.c @@ -231,12 +231,6 @@ chat_text_view_notify_system_font_cb (EmpathyConf *conf, } static void -chat_text_view_clear_view_cb (GtkMenuItem *menuitem, EmpathyChatTextView *view) -{ - empathy_chat_view_clear (EMPATHY_CHAT_VIEW (view)); -} - -static void chat_text_view_open_address_cb (GtkMenuItem *menuitem, const gchar *url) { empathy_url_show (GTK_WIDGET (menuitem), url); @@ -256,8 +250,8 @@ chat_text_view_copy_address_cb (GtkMenuItem *menuitem, const gchar *url) static void chat_text_view_populate_popup (EmpathyChatTextView *view, - GtkMenu *menu, - gpointer user_data) + GtkMenu *menu, + gpointer user_data) { EmpathyChatTextViewPriv *priv; GtkTextTagTable *table; @@ -271,7 +265,7 @@ chat_text_view_populate_popup (EmpathyChatTextView *view, /* Clear menu item */ if (gtk_text_buffer_get_char_count (priv->buffer) > 0) { - item = gtk_menu_item_new (); + item = gtk_separator_menu_item_new (); gtk_menu_shell_prepend (GTK_MENU_SHELL (menu), item); gtk_widget_show (item); @@ -279,10 +273,9 @@ chat_text_view_populate_popup (EmpathyChatTextView *view, gtk_menu_shell_prepend (GTK_MENU_SHELL (menu), item); gtk_widget_show (item); - g_signal_connect (item, - "activate", - G_CALLBACK (chat_text_view_clear_view_cb), - view); + g_signal_connect_swapped (item, "activate", + G_CALLBACK (empathy_chat_view_clear), + view); } /* Link context menu items */ @@ -316,21 +309,19 @@ chat_text_view_populate_popup (EmpathyChatTextView *view, "url", str, (GDestroyNotify) g_free); - item = gtk_menu_item_new (); + item = gtk_separator_menu_item_new (); gtk_menu_shell_prepend (GTK_MENU_SHELL (menu), item); gtk_widget_show (item); item = gtk_menu_item_new_with_mnemonic (_("_Copy Link Address")); - g_signal_connect (item, - "activate", + g_signal_connect (item, "activate", G_CALLBACK (chat_text_view_copy_address_cb), str); gtk_menu_shell_prepend (GTK_MENU_SHELL (menu), item); gtk_widget_show (item); item = gtk_menu_item_new_with_mnemonic (_("_Open Link")); - g_signal_connect (item, - "activate", + g_signal_connect (item, "activate", G_CALLBACK (chat_text_view_open_address_cb), str); gtk_menu_shell_prepend (GTK_MENU_SHELL (menu), item); @@ -576,6 +567,7 @@ chat_text_view_finalize (GObject *object) if (priv->scroll_timeout) { g_source_remove (priv->scroll_timeout); } + g_object_unref (priv->smiley_manager); G_OBJECT_CLASS (empathy_chat_text_view_parent_class)->finalize (object); } diff --git a/libempathy-gtk/empathy-chat.c b/libempathy-gtk/empathy-chat.c index 248fd116d..0fb77f24c 100644 --- a/libempathy-gtk/empathy-chat.c +++ b/libempathy-gtk/empathy-chat.c @@ -1217,7 +1217,7 @@ chat_set_show_contacts (EmpathyChat *chat, gboolean show) store = empathy_contact_list_store_new (EMPATHY_CONTACT_LIST (priv->tp_chat)); priv->contact_list_view = GTK_WIDGET (empathy_contact_list_view_new (store, - EMPATHY_CONTACT_LIST_FEATURE_NONE, + EMPATHY_CONTACT_LIST_FEATURE_CONTACT_TOOLTIP, EMPATHY_CONTACT_FEATURE_CHAT | EMPATHY_CONTACT_FEATURE_CALL | EMPATHY_CONTACT_FEATURE_LOG | diff --git a/libempathy-gtk/empathy-conf.h b/libempathy-gtk/empathy-conf.h index 07026df5c..47949139e 100644 --- a/libempathy-gtk/empathy-conf.h +++ b/libempathy-gtk/empathy-conf.h @@ -60,6 +60,7 @@ struct _EmpathyConfClass { #define EMPATHY_PREFS_POPUPS_WHEN_AVAILABLE EMPATHY_PREFS_PATH "/notifications/popups_when_available" #define EMPATHY_PREFS_CHAT_SHOW_SMILEYS EMPATHY_PREFS_PATH "/conversation/graphical_smileys" #define EMPATHY_PREFS_CHAT_THEME EMPATHY_PREFS_PATH "/conversation/theme" +#define EMPATHY_PREFS_CHAT_ADIUM_PATH EMPATHY_PREFS_PATH "/conversation/adium_path" #define EMPATHY_PREFS_CHAT_SPELL_CHECKER_LANGUAGES EMPATHY_PREFS_PATH "/conversation/spell_checker_languages" #define EMPATHY_PREFS_CHAT_SPELL_CHECKER_ENABLED EMPATHY_PREFS_PATH "/conversation/spell_checker_enabled" #define EMPATHY_PREFS_CHAT_NICK_COMPLETION_CHAR EMPATHY_PREFS_PATH "/conversation/nick_completion_char" diff --git a/libempathy-gtk/empathy-location-manager.c b/libempathy-gtk/empathy-location-manager.c index fb804315c..1b76e2e1d 100644 --- a/libempathy-gtk/empathy-location-manager.c +++ b/libempathy-gtk/empathy-location-manager.c @@ -302,7 +302,10 @@ address_changed_cb (GeoclueAddress *address, g_hash_table_remove (priv->location, EMPATHY_LOCATION_POSTAL_CODE); if (g_hash_table_size (details) == 0) - return; + { + DEBUG ("\t - (Empty)"); + return; + } g_hash_table_iter_init (&iter, details); while (g_hash_table_iter_next (&iter, &key, &value)) @@ -449,8 +452,11 @@ update_resources (EmpathyLocationManager *location_manager) DEBUG ("Updating resources %d", priv->resources); + /* As per Geoclue bug #15126, using NONE results in no address + * being found as geoclue-manual report an empty address with + * accuracy = NONE */ if (!geoclue_master_client_set_requirements (priv->gc_client, - GEOCLUE_ACCURACY_LEVEL_NONE, 0, TRUE, priv->resources, + GEOCLUE_ACCURACY_LEVEL_COUNTRY, 0, TRUE, priv->resources, NULL)) { DEBUG ("set_requirements failed"); diff --git a/libempathy-gtk/empathy-profile-chooser.c b/libempathy-gtk/empathy-profile-chooser.c index 14965741c..b3cbf90d0 100644 --- a/libempathy-gtk/empathy-profile-chooser.c +++ b/libempathy-gtk/empathy-profile-chooser.c @@ -1,6 +1,6 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ +/* -*- Mode: C; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2; -*- */ /* - * Copyright (C) 2007-2008 Collabora Ltd. + * 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 @@ -17,6 +17,7 @@ * 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> @@ -27,6 +28,8 @@ #include <libmissioncontrol/mc-profile.h> #include <libmissioncontrol/mc-protocol.h> +#include <libempathy/empathy-utils.h> + #include "empathy-profile-chooser.h" #include "empathy-ui-utils.h" @@ -34,112 +37,277 @@ * SECTION:empathy-profile-chooser * @title: EmpathyProfileChooser * @short_description: A widget used to choose from a list of profiles - * @include: libempathy-gtk/empathy-account-chooser.h + * @include: libempathy-gtk/empathy-profile-chooser.h * - * #EmpathyProfileChooser is a widget which provides a chooser of available + * #EmpathyProfileChooser is a widget which extends #GtkComboBox to provides a + * chooser of available profiles. + */ + +/** + * EmpathyProfileChooser: + * @parent: parent object + * + * Widget which extends #GtkComboBox to provide a chooser of available * profiles. */ -enum { - COL_ICON, - COL_LABEL, - COL_PROFILE, - COL_COUNT +#define GET_PRIV(obj) EMPATHY_GET_PRIV (obj, EmpathyProfileChooser) +typedef struct +{ + GtkListStore *store; + gboolean dispose_run; +} EmpathyProfileChooserPriv; + +enum +{ + COL_ICON, + COL_LABEL, + COL_PROFILE, + COL_COUNT }; +G_DEFINE_TYPE (EmpathyProfileChooser, empathy_profile_chooser, + GTK_TYPE_COMBO_BOX); + +static gint +profile_chooser_sort_profile_value (McProfile *profile) +{ + guint i; + const gchar *profile_name; + const gchar *names[] = { + "jabber", + "salut", + "gtalk", + NULL + }; + + profile_name = mc_profile_get_unique_name (profile); + + for (i = 0 ; names[i]; i++) + { + if (strcmp (profile_name, names[i]) == 0) + return i; + } + + return i; +} + +static gint +profile_chooser_sort_func (GtkTreeModel *model, + GtkTreeIter *iter_a, + GtkTreeIter *iter_b, + gpointer user_data) +{ + McProfile *profile_a; + McProfile *profile_b; + gint cmp; + + gtk_tree_model_get (model, iter_a, + COL_PROFILE, &profile_a, + -1); + gtk_tree_model_get (model, iter_b, + COL_PROFILE, &profile_b, + -1); + + cmp = profile_chooser_sort_profile_value (profile_a); + cmp -= profile_chooser_sort_profile_value (profile_b); + if (cmp == 0) + { + cmp = strcmp (mc_profile_get_display_name (profile_a), + mc_profile_get_display_name (profile_b)); + } + + g_object_unref (profile_a); + g_object_unref (profile_b); + + return cmp; +} + +static void +profile_chooser_constructed (GObject *object) +{ + EmpathyProfileChooser *profile_chooser; + EmpathyProfileChooserPriv *priv; + + GList *profiles, *l, *seen; + GtkCellRenderer *renderer; + GtkTreeIter iter; + gboolean iter_set = FALSE; + McManager *btf_cm; + + priv = GET_PRIV (object); + profile_chooser = EMPATHY_PROFILE_CHOOSER (object); + + /* set up combo box with new store */ + priv->store = gtk_list_store_new (COL_COUNT, + G_TYPE_STRING, /* Icon name */ + G_TYPE_STRING, /* Label */ + MC_TYPE_PROFILE); /* Profile */ + + 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, + "icon-name", COL_ICON, + NULL); + g_object_set (renderer, "stock-size", GTK_ICON_SIZE_BUTTON, NULL); + + renderer = gtk_cell_renderer_text_new (); + gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (object), renderer, TRUE); + gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (object), renderer, + "text", COL_LABEL, + NULL); + + btf_cm = mc_manager_lookup ("butterfly"); + profiles = mc_profiles_list (); + seen = NULL; + for (l = profiles; l; l = g_list_next (l)) + { + McProfile *profile; + McProtocol *protocol; + const gchar *unique_name; + + profile = l->data; + + /* Check if the CM is installed, otherwise skip that profile. + * Workaround SF bug #1688779 */ + protocol = mc_profile_get_protocol (profile); + if (!protocol) + continue; + + g_object_unref (protocol); + + /* Skip MSN-Haze if we have butterfly */ + unique_name = mc_profile_get_unique_name (profile); + if (btf_cm && strcmp (unique_name, "msn-haze") == 0) + continue; + + if (g_list_find_custom (seen, unique_name, (GCompareFunc) strcmp)) + continue; + + seen = g_list_append (seen, (char *) unique_name); + + gtk_list_store_insert_with_values (priv->store, &iter, 0, + COL_ICON, mc_profile_get_icon_name (profile), + COL_LABEL, mc_profile_get_display_name (profile), + COL_PROFILE, profile, + -1); + iter_set = TRUE; + } + + g_list_free (seen); + + if (btf_cm) + g_object_unref (btf_cm); + + /* Set the profile sort function */ + gtk_tree_sortable_set_sort_func (GTK_TREE_SORTABLE (priv->store), + COL_PROFILE, + profile_chooser_sort_func, + NULL, NULL); + gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (priv->store), + COL_PROFILE, + GTK_SORT_ASCENDING); + + if (iter_set) + gtk_combo_box_set_active_iter (GTK_COMBO_BOX (object), &iter); + + mc_profiles_free_list (profiles); + + if (G_OBJECT_CLASS (empathy_profile_chooser_parent_class)->constructed) + G_OBJECT_CLASS (empathy_profile_chooser_parent_class)->constructed (object); +} + +static void +empathy_profile_chooser_init (EmpathyProfileChooser *profile_chooser) +{ + EmpathyProfileChooserPriv *priv = + G_TYPE_INSTANCE_GET_PRIVATE (profile_chooser, + EMPATHY_TYPE_PROFILE_CHOOSER, EmpathyProfileChooserPriv); + + priv->dispose_run = FALSE; + + profile_chooser->priv = priv; +} + +static void +profile_chooser_dispose (GObject *object) +{ + EmpathyProfileChooser *profile_chooser = EMPATHY_PROFILE_CHOOSER (object); + EmpathyProfileChooserPriv *priv = GET_PRIV (profile_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_profile_chooser_parent_class)->dispose) (object); +} + +static void +empathy_profile_chooser_class_init (EmpathyProfileChooserClass *klass) +{ + GObjectClass *object_class = G_OBJECT_CLASS (klass); + + object_class->constructed = profile_chooser_constructed; + object_class->dispose = profile_chooser_dispose; + + g_type_class_add_private (object_class, sizeof (EmpathyProfileChooserPriv)); +} + /** * empathy_profile_chooser_dup_selected: - * @widget: an #EmpathyProfileChooser + * @profile_chooser: an #EmpathyProfileChooser * - * Returns a new reference to the selected #McProfile in @widget. The returned - * #McProfile should be unrefed with g_object_unref() when finished with. + * Returns a new reference to the selected #McProfile in @profile_chooser. The + * returned #McProfile should be unrefed with g_object_unref() when finished + * with. * * Return value: a new reference to the selected #McProfile */ McProfile * -empathy_profile_chooser_dup_selected (GtkWidget *widget) +empathy_profile_chooser_dup_selected (EmpathyProfileChooser *profile_chooser) { - GtkTreeModel *model; - GtkTreeIter iter; - McProfile *profile = NULL; - - model = gtk_combo_box_get_model (GTK_COMBO_BOX (widget)); - if (gtk_combo_box_get_active_iter (GTK_COMBO_BOX (widget), &iter)) { - gtk_tree_model_get (model, &iter, - COL_PROFILE, &profile, - -1); - } - - return profile; + EmpathyProfileChooserPriv *priv = GET_PRIV (profile_chooser); + GtkTreeIter iter; + McProfile *profile = NULL; + + g_return_val_if_fail (EMPATHY_IS_PROFILE_CHOOSER (profile_chooser), NULL); + + if (gtk_combo_box_get_active_iter (GTK_COMBO_BOX (profile_chooser), &iter)) + { + gtk_tree_model_get (GTK_TREE_MODEL (priv->store), &iter, + COL_PROFILE, &profile, + -1); + } + + return profile; } /** * empathy_profile_chooser_n_profiles: - * @widget: an #EmpathyProfileChooser + * @profile_chooser: an #EmpathyProfileChooser * - * Returns the number of profiles in @widget. + * Returns the number of profiles in @profile_chooser. * - * Return value: the number of profiles in @widget + * Return value: the number of profiles in @profile_chooser */ gint -empathy_profile_chooser_n_profiles (GtkWidget *widget) +empathy_profile_chooser_n_profiles (EmpathyProfileChooser *profile_chooser) { - GtkTreeModel *model; + EmpathyProfileChooserPriv *priv = GET_PRIV (profile_chooser); - model = gtk_combo_box_get_model (GTK_COMBO_BOX (widget)); - - return gtk_tree_model_iter_n_children (model, NULL); -} + g_return_val_if_fail (EMPATHY_IS_PROFILE_CHOOSER (profile_chooser), 0); -static gint -profile_chooser_sort_profile_value (McProfile *profile) -{ - guint i; - const gchar *profile_name; - const gchar *names[] = {"jabber", - "salut", - "gtalk", - NULL}; - - profile_name = mc_profile_get_unique_name (profile); - - for (i = 0 ; names[i]; i++) { - if (strcmp (profile_name, names[i]) == 0) { - return i; - } - } - - return i; -} - -static gint -profile_chooser_sort_func (GtkTreeModel *model, - GtkTreeIter *iter_a, - GtkTreeIter *iter_b, - gpointer user_data) -{ - McProfile *profile_a; - McProfile *profile_b; - gint cmp; - - gtk_tree_model_get (model, iter_a, - COL_PROFILE, &profile_a, - -1); - gtk_tree_model_get (model, iter_b, - COL_PROFILE, &profile_b, - -1); - - cmp = profile_chooser_sort_profile_value (profile_a); - cmp -= profile_chooser_sort_profile_value (profile_b); - if (cmp == 0) { - cmp = strcmp (mc_profile_get_display_name (profile_a), - mc_profile_get_display_name (profile_b)); - } - - g_object_unref (profile_a); - g_object_unref (profile_b); - - return cmp; + return gtk_tree_model_iter_n_children (GTK_TREE_MODEL (priv->store), NULL); } /** @@ -152,94 +320,5 @@ profile_chooser_sort_func (GtkTreeModel *model, GtkWidget * empathy_profile_chooser_new (void) { - GList *profiles, *l, *seen; - GtkListStore *store; - GtkCellRenderer *renderer; - GtkWidget *combo_box; - GtkTreeIter iter; - gboolean iter_set = FALSE; - McManager *btf_cm; - - /* set up combo box with new store */ - store = gtk_list_store_new (COL_COUNT, - G_TYPE_STRING, /* Icon name */ - G_TYPE_STRING, /* Label */ - MC_TYPE_PROFILE); /* Profile */ - combo_box = gtk_combo_box_new_with_model (GTK_TREE_MODEL (store)); - - - renderer = gtk_cell_renderer_pixbuf_new (); - gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (combo_box), renderer, FALSE); - gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (combo_box), renderer, - "icon-name", COL_ICON, - NULL); - g_object_set (renderer, "stock-size", GTK_ICON_SIZE_BUTTON, NULL); - - renderer = gtk_cell_renderer_text_new (); - gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (combo_box), renderer, TRUE); - gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (combo_box), renderer, - "text", COL_LABEL, - NULL); - - btf_cm = mc_manager_lookup ("butterfly"); - profiles = mc_profiles_list (); - seen = NULL; - for (l = profiles; l; l = l->next) { - McProfile *profile; - McProtocol *protocol; - const gchar *unique_name; - - profile = l->data; - - /* Check if the CM is installed, otherwise skip that profile. - * Workaround SF bug #1688779 */ - protocol = mc_profile_get_protocol (profile); - if (!protocol) { - continue; - } - g_object_unref (protocol); - - /* Skip MSN-Haze if we have butterfly */ - unique_name = mc_profile_get_unique_name (profile); - if (btf_cm && strcmp (unique_name, "msn-haze") == 0) { - continue; - } - - if (g_list_find_custom (seen, unique_name, (GCompareFunc) strcmp)) { - continue; - } - seen = g_list_append (seen, (char *) unique_name); - - gtk_list_store_insert_with_values (store, &iter, 0, - COL_ICON, mc_profile_get_icon_name (profile), - COL_LABEL, mc_profile_get_display_name (profile), - COL_PROFILE, profile, - -1); - iter_set = TRUE; - } - - g_list_free (seen); - - if (btf_cm) { - g_object_unref (btf_cm); - } - - /* Set the profile sort function */ - gtk_tree_sortable_set_sort_func (GTK_TREE_SORTABLE (store), - COL_PROFILE, - profile_chooser_sort_func, - NULL, NULL); - gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (store), - COL_PROFILE, - GTK_SORT_ASCENDING); - - if (iter_set) { - gtk_combo_box_set_active_iter (GTK_COMBO_BOX (combo_box), &iter); - } - - mc_profiles_free_list (profiles); - g_object_unref (store); - - return combo_box; + return GTK_WIDGET (g_object_new (EMPATHY_TYPE_PROFILE_CHOOSER, NULL)); } - diff --git a/libempathy-gtk/empathy-profile-chooser.h b/libempathy-gtk/empathy-profile-chooser.h index 74c761cc4..37d7241a9 100644 --- a/libempathy-gtk/empathy-profile-chooser.h +++ b/libempathy-gtk/empathy-profile-chooser.h @@ -1,6 +1,6 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ +/* -*- Mode: C; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2; -*- */ /* - * Copyright (C) 2007-2008 Collabora Ltd. + * 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 @@ -17,18 +17,53 @@ * 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__ +#ifndef __EMPATHY_PROFILE_CHOOSER_H__ +#define __EMPATHY_PROFILE_CHOOSER_H__ + +#include <glib-object.h> +#include <gtk/gtk.h> #include <libmissioncontrol/mc-profile.h> G_BEGIN_DECLS -GtkWidget * empathy_profile_chooser_new (void); -McProfile * empathy_profile_chooser_dup_selected (GtkWidget *widget); -gint empathy_profile_chooser_n_profiles (GtkWidget *widget); +#define EMPATHY_TYPE_PROFILE_CHOOSER (empathy_profile_chooser_get_type ()) +#define EMPATHY_PROFILE_CHOOSER(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), \ + EMPATHY_TYPE_PROFILE_CHOOSER, EmpathyProfileChooser)) +#define EMPATHY_PROFILE_CHOOSER_CLASS(k) (G_TYPE_CHECK_CLASS_CAST ((k), \ + EMPATHY_TYPE_PROFILE_CHOOSER, EmpathyProfileChooserClass)) +#define EMPATHY_IS_PROFILE_CHOOSER(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), \ + EMPATHY_TYPE_PROFILE_CHOOSER)) +#define EMPATHY_IS_PROFILE_CHOOSER_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), \ + EMPATHY_TYPE_PROFILE_CHOOSER)) +#define EMPATHY_PROFILE_CHOOSER_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), \ + EMPATHY_TYPE_PROFILE_CHOOSER, EmpathyProfileChooserClass)) + +typedef struct _EmpathyProfileChooser EmpathyProfileChooser; +typedef struct _EmpathyProfileChooserClass EmpathyProfileChooserClass; + +struct _EmpathyProfileChooser +{ + GtkComboBox parent; + + /*<private>*/ + gpointer priv; +}; + +struct _EmpathyProfileChooserClass +{ + GtkComboBoxClass parent_class; +}; + +GType empathy_profile_chooser_get_type (void) G_GNUC_CONST; +GtkWidget * empathy_profile_chooser_new (void); +McProfile * empathy_profile_chooser_dup_selected ( + EmpathyProfileChooser *profile_chooser); +gint empathy_profile_chooser_n_profiles ( + EmpathyProfileChooser *profile_chooser); G_END_DECLS -#endif /* __EMPATHY_PROTOCOL_CHOOSER_H__ */ +#endif /* __EMPATHY_PROFILE_CHOOSER_H__ */ diff --git a/libempathy-gtk/empathy-smiley-manager.c b/libempathy-gtk/empathy-smiley-manager.c index a729a2929..c504d4cdb 100644 --- a/libempathy-gtk/empathy-smiley-manager.c +++ b/libempathy-gtk/empathy-smiley-manager.c @@ -37,9 +37,10 @@ typedef struct { } EmpathySmileyManagerPriv; struct _SmileyManagerTree { - gunichar c; - GdkPixbuf *pixbuf; - GSList *childrens; + gunichar c; + GdkPixbuf *pixbuf; + const gchar *path; + GSList *childrens; }; G_DEFINE_TYPE (EmpathySmileyManager, empathy_smiley_manager, G_TYPE_OBJECT); @@ -55,6 +56,7 @@ smiley_manager_tree_new (gunichar c) tree->c = c; tree->pixbuf = NULL; tree->childrens = NULL; + tree->path = NULL; return tree; } @@ -81,7 +83,7 @@ smiley_manager_tree_free (SmileyManagerTree *tree) /* Note: This function takes the ownership of str */ static EmpathySmiley * -smiley_new (GdkPixbuf *pixbuf, gchar *str) +smiley_new (GdkPixbuf *pixbuf, gchar *str, const gchar *path) { EmpathySmiley *smiley; @@ -90,6 +92,7 @@ smiley_new (GdkPixbuf *pixbuf, gchar *str) smiley->pixbuf = g_object_ref (pixbuf); } smiley->str = str; + smiley->path = path; return smiley; } @@ -112,9 +115,16 @@ static void smiley_manager_finalize (GObject *object) { EmpathySmileyManagerPriv *priv = GET_PRIV (object); + GSList *l; smiley_manager_tree_free (priv->tree); - g_slist_foreach (priv->smileys, (GFunc) empathy_smiley_free, NULL); + for (l = priv->smileys; l; l = l->next) { + EmpathySmiley *smiley = l->data; + + /* The smiley got the ownership of the path */ + g_free ((gchar*) smiley->path); + empathy_smiley_free (smiley); + } g_slist_free (priv->smileys); } @@ -201,8 +211,9 @@ smiley_manager_tree_find_or_insert_child (SmileyManagerTree *tree, gunichar c) static void smiley_manager_tree_insert (SmileyManagerTree *tree, - GdkPixbuf *smiley, - const gchar *str) + GdkPixbuf *pixbuf, + const gchar *str, + const gchar *path) { SmileyManagerTree *child; @@ -210,28 +221,32 @@ smiley_manager_tree_insert (SmileyManagerTree *tree, str = g_utf8_next_char (str); if (*str) { - smiley_manager_tree_insert (child, smiley, str); + smiley_manager_tree_insert (child, pixbuf, str, path); return; } - child->pixbuf = g_object_ref (smiley); + child->pixbuf = g_object_ref (pixbuf); + child->path = path; } static void smiley_manager_add_valist (EmpathySmileyManager *manager, - GdkPixbuf *smiley, + GdkPixbuf *pixbuf, + gchar *path, const gchar *first_str, va_list var_args) { EmpathySmileyManagerPriv *priv = GET_PRIV (manager); const gchar *str; + EmpathySmiley *smiley; for (str = first_str; str; str = va_arg (var_args, gchar*)) { - smiley_manager_tree_insert (priv->tree, smiley, str); + smiley_manager_tree_insert (priv->tree, pixbuf, str, path); } - priv->smileys = g_slist_prepend (priv->smileys, - smiley_new (smiley, g_strdup (first_str))); + /* We give the ownership of path to the smiley */ + smiley = smiley_new (pixbuf, g_strdup (first_str), path); + priv->smileys = g_slist_prepend (priv->smileys, smiley); } void @@ -240,40 +255,26 @@ empathy_smiley_manager_add (EmpathySmileyManager *manager, const gchar *first_str, ...) { - GdkPixbuf *smiley; + GdkPixbuf *pixbuf; va_list var_args; g_return_if_fail (EMPATHY_IS_SMILEY_MANAGER (manager)); g_return_if_fail (!EMP_STR_EMPTY (icon_name)); g_return_if_fail (!EMP_STR_EMPTY (first_str)); - smiley = empathy_pixbuf_from_icon_name (icon_name, GTK_ICON_SIZE_MENU); - if (smiley) { + pixbuf = empathy_pixbuf_from_icon_name (icon_name, GTK_ICON_SIZE_MENU); + if (pixbuf) { + gchar *path; + va_start (var_args, first_str); - smiley_manager_add_valist (manager, smiley, first_str, var_args); + path = empathy_filename_from_icon_name (icon_name, GTK_ICON_SIZE_MENU); + smiley_manager_add_valist (manager, pixbuf, path, first_str, var_args); va_end (var_args); - g_object_unref (smiley); + g_object_unref (pixbuf); } } void -empathy_smiley_manager_add_from_pixbuf (EmpathySmileyManager *manager, - GdkPixbuf *smiley, - const gchar *first_str, - ...) -{ - va_list var_args; - - g_return_if_fail (EMPATHY_IS_SMILEY_MANAGER (manager)); - g_return_if_fail (GDK_IS_PIXBUF (smiley)); - g_return_if_fail (!EMP_STR_EMPTY (first_str)); - - va_start (var_args, first_str); - smiley_manager_add_valist (manager, smiley, first_str, var_args); - va_end (var_args); -} - -void empathy_smiley_manager_load (EmpathySmileyManager *manager) { g_return_if_fail (EMPATHY_IS_SMILEY_MANAGER (manager)); @@ -320,7 +321,9 @@ empathy_smiley_manager_parse (EmpathySmileyManager *manager, if (cur_tree == priv->tree) { if (child) { if (t > cur_str) { - smiley = smiley_new (NULL, g_strndup (cur_str, t - cur_str)); + smiley = smiley_new (NULL, + g_strndup (cur_str, t - cur_str), + NULL); smileys = g_slist_prepend (smileys, smiley); } cur_str = t; @@ -335,7 +338,9 @@ empathy_smiley_manager_parse (EmpathySmileyManager *manager, continue; } - smiley = smiley_new (cur_tree->pixbuf, g_strndup (cur_str, t - cur_str)); + smiley = smiley_new (cur_tree->pixbuf, + g_strndup (cur_str, t - cur_str), + cur_tree->path); smileys = g_slist_prepend (smileys, smiley); if (cur_tree->pixbuf) { cur_str = t; @@ -350,7 +355,9 @@ empathy_smiley_manager_parse (EmpathySmileyManager *manager, } } - smiley = smiley_new (cur_tree->pixbuf, g_strndup (cur_str, t - cur_str)); + smiley = smiley_new (cur_tree->pixbuf, + g_strndup (cur_str, t - cur_str), + cur_tree->path); smileys = g_slist_prepend (smileys, smiley); return g_slist_reverse (smileys); diff --git a/libempathy-gtk/empathy-smiley-manager.h b/libempathy-gtk/empathy-smiley-manager.h index 5eaf4b283..dc7428c3b 100644 --- a/libempathy-gtk/empathy-smiley-manager.h +++ b/libempathy-gtk/empathy-smiley-manager.h @@ -48,8 +48,9 @@ struct _EmpathySmileyManagerClass { }; typedef struct { - GdkPixbuf *pixbuf; - gchar *str; + GdkPixbuf *pixbuf; + gchar *str; + const gchar *path; } EmpathySmiley; typedef void (*EmpathySmileyMenuFunc) (EmpathySmileyManager *manager, @@ -63,10 +64,6 @@ void empathy_smiley_manager_add (EmpathySmileyManag const gchar *icon_name, const gchar *first_str, ...); -void empathy_smiley_manager_add_from_pixbuf (EmpathySmileyManager *manager, - GdkPixbuf *smiley, - const gchar *first_str, - ...); GSList * empathy_smiley_manager_get_all (EmpathySmileyManager *manager); GSList * empathy_smiley_manager_parse (EmpathySmileyManager *manager, const gchar *text); diff --git a/libempathy-gtk/empathy-theme-adium.c b/libempathy-gtk/empathy-theme-adium.c new file mode 100644 index 000000000..1f0c043aa --- /dev/null +++ b/libempathy-gtk/empathy-theme-adium.c @@ -0,0 +1,831 @@ +/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ +/* + * Copyright (C) 2008-2009 Collabora Ltd. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + * + * Authors: Xavier Claessens <xclaesse@gmail.com> + */ + +#include "config.h" + +#include <string.h> +#include <glib/gi18n.h> + +#include <webkit/webkitnetworkrequest.h> + +#include <libempathy/empathy-time.h> +#include <libempathy/empathy-utils.h> + +#include "empathy-theme-adium.h" +#include "empathy-smiley-manager.h" +#include "empathy-conf.h" +#include "empathy-ui-utils.h" + +#define DEBUG_FLAG EMPATHY_DEBUG_CHAT +#include <libempathy/empathy-debug.h> + +#define GET_PRIV(obj) EMPATHY_GET_PRIV (obj, EmpathyThemeAdium) + +typedef struct { + EmpathySmileyManager *smiley_manager; + EmpathyContact *last_contact; + gboolean page_loaded; + GList *message_queue; + gchar *path; + gchar *default_avatar_filename; + gchar *template_html; + gchar *basedir; + gchar *in_content_html; + gsize in_content_len; + gchar *in_nextcontent_html; + gsize in_nextcontent_len; + gchar *out_content_html; + gsize out_content_len; + gchar *out_nextcontent_html; + gsize out_nextcontent_len; + gchar *status_html; + gsize status_len; +} EmpathyThemeAdiumPriv; + +static void theme_adium_iface_init (EmpathyChatViewIface *iface); + +enum { + PROP_0, + PROP_PATH, +}; + +G_DEFINE_TYPE_WITH_CODE (EmpathyThemeAdium, empathy_theme_adium, + WEBKIT_TYPE_WEB_VIEW, + G_IMPLEMENT_INTERFACE (EMPATHY_TYPE_CHAT_VIEW, + theme_adium_iface_init)); + +static void +theme_adium_load (EmpathyThemeAdium *theme) +{ + EmpathyThemeAdiumPriv *priv = GET_PRIV (theme); + gchar *file; + gchar *template_html = NULL; + gsize template_len; + GString *string; + gchar **strv = NULL; + gchar *css_path; + guint len = 0; + guint i = 0; + gchar *basedir_uri; + + priv->basedir = g_strconcat (priv->path, G_DIR_SEPARATOR_S "Contents" G_DIR_SEPARATOR_S "Resources" G_DIR_SEPARATOR_S, NULL); + basedir_uri = g_strconcat ("file://", priv->basedir, NULL); + + /* Load html files */ + file = g_build_filename (priv->basedir, "Incoming", "Content.html", NULL); + g_file_get_contents (file, &priv->in_content_html, &priv->in_content_len, NULL); + g_free (file); + + file = g_build_filename (priv->basedir, "Incoming", "NextContent.html", NULL); + g_file_get_contents (file, &priv->in_nextcontent_html, &priv->in_nextcontent_len, NULL); + g_free (file); + + file = g_build_filename (priv->basedir, "Outgoing", "Content.html", NULL); + g_file_get_contents (file, &priv->out_content_html, &priv->out_content_len, NULL); + g_free (file); + + file = g_build_filename (priv->basedir, "Outgoing", "NextContent.html", NULL); + g_file_get_contents (file, &priv->out_nextcontent_html, &priv->out_nextcontent_len, NULL); + g_free (file); + + file = g_build_filename (priv->basedir, "Status.html", NULL); + g_file_get_contents (file, &priv->status_html, &priv->status_len, NULL); + g_free (file); + + css_path = g_build_filename (priv->basedir, "main.css", NULL); + + /* There is 2 formats for Template.html: The old one has 4 parameters, + * the new one has 5 parameters. */ + file = g_build_filename (priv->basedir, "Template.html", NULL); + if (g_file_get_contents (file, &template_html, &template_len, NULL)) { + strv = g_strsplit (template_html, "%@", -1); + len = g_strv_length (strv); + } + g_free (file); + + if (len != 5 && len != 6) { + /* Either the theme has no template or it don't have the good + * number of parameters. Fallback to use our own template. */ + g_free (template_html); + g_strfreev (strv); + + file = empathy_file_lookup ("Template.html", "data"); + g_file_get_contents (file, &template_html, &template_len, NULL); + g_free (file); + strv = g_strsplit (template_html, "%@", -1); + len = g_strv_length (strv); + } + + /* Replace %@ with the needed information in the template html. */ + string = g_string_sized_new (template_len); + g_string_append (string, strv[i++]); + g_string_append (string, priv->basedir); + g_string_append (string, strv[i++]); + if (len == 6) { + /* We include main.css by default */ + g_string_append_printf (string, "@import url(\"%s\");", css_path); + g_string_append (string, strv[i++]); + /* FIXME: We should set the variant css here */ + g_string_append (string, ""); + } else { + /* FIXME: We should set main.css OR the variant css */ + g_string_append (string, css_path); + } + g_string_append (string, strv[i++]); + g_string_append (string, ""); /* We don't want header */ + g_string_append (string, strv[i++]); + g_string_append (string, ""); /* FIXME: We don't support footer yet */ + g_string_append (string, strv[i++]); + priv->template_html = g_string_free (string, FALSE); + + /* Load the template */ + webkit_web_view_load_html_string (WEBKIT_WEB_VIEW (theme), + priv->template_html, basedir_uri); + + g_free (basedir_uri); + g_free (template_html); + g_free (css_path); + g_strfreev (strv); +} + +static WebKitNavigationResponse +theme_adium_navigation_requested_cb (WebKitWebView *view, + WebKitWebFrame *frame, + WebKitNetworkRequest *request, + gpointer user_data) +{ + const gchar *uri; + + uri = webkit_network_request_get_uri (request); + empathy_url_show (GTK_WIDGET (view), uri); + + return WEBKIT_NAVIGATION_RESPONSE_IGNORE; +} + +static void +theme_adium_populate_popup_cb (WebKitWebView *view, + GtkMenu *menu, + gpointer user_data) +{ + GtkWidget *item; + + /* Remove default menu items */ + gtk_container_foreach (GTK_CONTAINER (menu), + (GtkCallback) gtk_widget_destroy, NULL); + + /* Select all item */ + item = gtk_image_menu_item_new_from_stock (GTK_STOCK_SELECT_ALL, NULL); + gtk_menu_shell_prepend (GTK_MENU_SHELL (menu), item); + gtk_widget_show (item); + + g_signal_connect_swapped (item, "activate", + G_CALLBACK (webkit_web_view_select_all), + view); + + /* Copy menu item */ + if (webkit_web_view_can_copy_clipboard (view)) { + item = gtk_image_menu_item_new_from_stock (GTK_STOCK_COPY, NULL); + gtk_menu_shell_prepend (GTK_MENU_SHELL (menu), item); + gtk_widget_show (item); + + g_signal_connect_swapped (item, "activate", + G_CALLBACK (webkit_web_view_copy_clipboard), + view); + } + + /* Clear menu item */ + item = gtk_separator_menu_item_new (); + gtk_menu_shell_prepend (GTK_MENU_SHELL (menu), item); + gtk_widget_show (item); + + item = gtk_image_menu_item_new_from_stock (GTK_STOCK_CLEAR, NULL); + gtk_menu_shell_prepend (GTK_MENU_SHELL (menu), item); + gtk_widget_show (item); + + g_signal_connect_swapped (item, "activate", + G_CALLBACK (empathy_chat_view_clear), + view); + + /* FIXME: Add open_link and copy_link when those bugs are fixed: + * https://bugs.webkit.org/show_bug.cgi?id=16092 + * https://bugs.webkit.org/show_bug.cgi?id=16562 + */ +} + +static gchar * +theme_adium_parse_body (EmpathyThemeAdium *theme, + const gchar *text) +{ + EmpathyThemeAdiumPriv *priv = GET_PRIV (theme); + gboolean use_smileys = FALSE; + GSList *smileys, *l; + GString *string; + gint i; + GRegex *uri_regex; + GMatchInfo *match_info; + gboolean match; + gchar *ret = NULL; + gint prev; + + empathy_conf_get_bool (empathy_conf_get (), + EMPATHY_PREFS_CHAT_SHOW_SMILEYS, + &use_smileys); + + if (use_smileys) { + /* Replace smileys by a <img/> tag */ + string = g_string_sized_new (strlen (text)); + smileys = empathy_smiley_manager_parse (priv->smiley_manager, text); + for (l = smileys; l; l = l->next) { + EmpathySmiley *smiley; + + smiley = l->data; + if (smiley->path) { + g_string_append_printf (string, + "<abbr title='%s'><img src=\"%s\"/ alt=\"%s\"/></abbr>", + smiley->str, smiley->path, smiley->str); + } else { + gchar *str; + + str = g_markup_escape_text (smiley->str, -1); + g_string_append (string, str); + g_free (str); + } + empathy_smiley_free (smiley); + } + g_slist_free (smileys); + + g_free (ret); + text = ret = g_string_free (string, FALSE); + } + + /* Add <a href></a> arround links */ + uri_regex = empathy_uri_regex_dup_singleton (); + match = g_regex_match (uri_regex, text, 0, &match_info); + if (match) { + gint last = 0; + gint s = 0, e = 0; + + string = g_string_sized_new (strlen (text)); + do { + g_match_info_fetch_pos (match_info, 0, &s, &e); + + if (s > last) { + /* Append the text between last link (or the + * start of the message) and this link */ + g_string_append_len (string, text + last, s - last); + } + + /* Append the link inside <a href=""></a> tag */ + g_string_append (string, "<a href=\""); + g_string_append_len (string, text + s, e - s); + g_string_append (string, "\">"); + g_string_append_len (string, text + s, e - s); + g_string_append (string, "</a>"); + + last = e; + } while (g_match_info_next (match_info, NULL)); + + if (e < strlen (text)) { + /* Append the text after the last link */ + g_string_append_len (string, text + e, strlen (text) - e); + } + + g_free (ret); + text = ret = g_string_free (string, FALSE); + } + g_match_info_free (match_info); + g_regex_unref (uri_regex); + + /* Replace \n by <br/> */ + string = NULL; + prev = 0; + for (i = 0; text[i] != '\0'; i++) { + if (text[i] == '\n') { + if (!string ) { + string = g_string_sized_new (strlen (text)); + } + g_string_append_len (string, text + prev, i - prev); + g_string_append (string, "<br/>"); + prev = i + 1; + } + } + if (string) { + g_string_append (string, text + prev); + g_free (ret); + text = ret = g_string_free (string, FALSE); + } + + return ret; +} + +static void +escape_and_append_len (GString *string, const gchar *str, gint len) +{ + while (*str != '\0' && len != 0) { + switch (*str) { + case '\\': + /* \ becomes \\ */ + g_string_append (string, "\\\\"); + break; + case '\"': + /* " becomes \" */ + g_string_append (string, "\\\""); + break; + case '\n': + /* Remove end of lines */ + break; + default: + g_string_append_c (string, *str); + } + + str++; + len--; + } +} + +static gboolean +theme_adium_match (const gchar **str, const gchar *match) +{ + gint len; + + len = strlen (match); + if (strncmp (*str, match, len) == 0) { + *str += len - 1; + return TRUE; + } + + return FALSE; +} + +static void +theme_adium_append_html (EmpathyThemeAdium *theme, + const gchar *func, + const gchar *html, gsize len, + const gchar *message, + const gchar *avatar_filename, + const gchar *name, + time_t timestamp) +{ + GString *string; + const gchar *cur = NULL; + gchar *script; + + /* Make some search-and-replace in the html code */ + string = g_string_sized_new (len + strlen (message)); + g_string_append_printf (string, "%s(\"", func); + for (cur = html; *cur != '\0'; cur++) { + const gchar *replace = NULL; + gchar *dup_replace = NULL; + + if (theme_adium_match (&cur, "%message%")) { + replace = message; + } else if (theme_adium_match (&cur, "%userIconPath%")) { + replace = avatar_filename; + } else if (theme_adium_match (&cur, "%sender%")) { + replace = name; + } else if (theme_adium_match (&cur, "%time")) { + gchar *format = NULL; + gchar *end; + + /* Time can be in 2 formats: + * %time% or %time{strftime format}% + * Extract the time format if provided. */ + if (cur[1] == '{') { + cur += 2; + end = strstr (cur, "}%"); + if (!end) { + /* Invalid string */ + continue; + } + format = g_strndup (cur, end - cur); + cur = end + 1; + } else { + cur++; + } + + dup_replace = empathy_time_to_string_local (timestamp, + format ? format : EMPATHY_TIME_FORMAT_DISPLAY_SHORT); + replace = dup_replace; + g_free (format); + } else { + escape_and_append_len (string, cur, 1); + continue; + } + + /* Here we have a replacement to make */ + escape_and_append_len (string, replace, -1); + g_free (dup_replace); + } + g_string_append (string, "\")"); + + script = g_string_free (string, FALSE); + webkit_web_view_execute_script (WEBKIT_WEB_VIEW (theme), script); + g_free (script); +} + +static void +theme_adium_append_message (EmpathyChatView *view, + EmpathyMessage *msg) +{ + EmpathyThemeAdium *theme = EMPATHY_THEME_ADIUM (view); + EmpathyThemeAdiumPriv *priv = GET_PRIV (theme); + EmpathyContact *sender; + gchar *dup_body = NULL; + const gchar *body; + const gchar *name; + EmpathyAvatar *avatar; + const gchar *avatar_filename = NULL; + time_t timestamp; + gchar *html = NULL; + gsize len = 0; + const gchar *func; + + if (!priv->page_loaded) { + priv->message_queue = g_list_prepend (priv->message_queue, + g_object_ref (msg)); + return; + } + + /* Get information */ + sender = empathy_message_get_sender (msg); + timestamp = empathy_message_get_timestamp (msg); + body = empathy_message_get_body (msg); + dup_body = theme_adium_parse_body (theme, body); + if (dup_body) { + body = dup_body; + } + name = empathy_contact_get_name (sender); + + /* If this is a /me, append an event */ + if (empathy_message_get_tptype(msg) == TP_CHANNEL_TEXT_MESSAGE_TYPE_ACTION) { + gchar *str; + + str = g_strdup_printf ("%s %s", name, body); + empathy_chat_view_append_event (view, str); + g_free (str); + g_free (dup_body); + return; + } + + /* Get the avatar filename, or a fallback */ + avatar = empathy_contact_get_avatar (sender); + if (avatar) { + avatar_filename = avatar->filename; + } + if (!avatar_filename) { + if (!priv->default_avatar_filename) { + priv->default_avatar_filename = + empathy_filename_from_icon_name ("stock_person", + GTK_ICON_SIZE_DIALOG); + } + avatar_filename = priv->default_avatar_filename; + } + + /* Get the right html/func to add the message */ + if (priv->last_contact == sender) { + func = "appendNextMessage"; + if (empathy_contact_is_user (sender)) { + html = priv->out_nextcontent_html; + len = priv->out_nextcontent_len; + } + if (!html) { + html = priv->in_nextcontent_html; + len = priv->in_nextcontent_len; + } + } + if (!html) { + func = "appendMessage"; + if (empathy_contact_is_user (sender)) { + html = priv->out_content_html; + len = priv->out_content_len; + } + if (!html) { + html = priv->in_content_html; + len = priv->in_content_len; + } + } + + theme_adium_append_html (theme, func, html, len, body, avatar_filename, + name, timestamp); + + /* Keep the sender of the last displayed message */ + if (priv->last_contact) { + g_object_unref (priv->last_contact); + } + priv->last_contact = g_object_ref (sender); + + g_free (dup_body); +} + +static void +theme_adium_append_event (EmpathyChatView *view, + const gchar *str) +{ + EmpathyThemeAdium *theme = EMPATHY_THEME_ADIUM (view); + EmpathyThemeAdiumPriv *priv = GET_PRIV (theme); + + if (priv->status_html) { + theme_adium_append_html (theme, "appendMessage", + priv->status_html, priv->status_len, + str, NULL, NULL, + empathy_time_get_current ()); + } + + /* There is no last contact */ + if (priv->last_contact) { + g_object_unref (priv->last_contact); + priv->last_contact = NULL; + } +} + +static void +theme_adium_scroll (EmpathyChatView *view, + gboolean allow_scrolling) +{ + /* FIXME: Is it possible? I guess we need a js function, but I don't + * see any... */ +} + +static void +theme_adium_scroll_down (EmpathyChatView *view) +{ + webkit_web_view_execute_script (WEBKIT_WEB_VIEW (view), "scrollToBottom()"); +} + +static gboolean +theme_adium_get_has_selection (EmpathyChatView *view) +{ + return webkit_web_view_has_selection (WEBKIT_WEB_VIEW (view)); +} + +static void +theme_adium_clear (EmpathyChatView *view) +{ + EmpathyThemeAdiumPriv *priv = GET_PRIV (view); + gchar *basedir_uri; + + priv->page_loaded = FALSE; + basedir_uri = g_strconcat ("file://", priv->basedir, NULL); + webkit_web_view_load_html_string (WEBKIT_WEB_VIEW (view), + priv->template_html, basedir_uri); + g_free (basedir_uri); +} + +static gboolean +theme_adium_find_previous (EmpathyChatView *view, + const gchar *search_criteria, + gboolean new_search) +{ + return webkit_web_view_search_text (WEBKIT_WEB_VIEW (view), + search_criteria, FALSE, + FALSE, TRUE); +} + +static gboolean +theme_adium_find_next (EmpathyChatView *view, + const gchar *search_criteria, + gboolean new_search) +{ + return webkit_web_view_search_text (WEBKIT_WEB_VIEW (view), + search_criteria, FALSE, + TRUE, TRUE); +} + +static void +theme_adium_find_abilities (EmpathyChatView *view, + const gchar *search_criteria, + gboolean *can_do_previous, + gboolean *can_do_next) +{ + /* FIXME: Does webkit provide an API for that? We have wrap=true in + * find_next and find_previous to work around this problem. */ + if (can_do_previous) + *can_do_previous = TRUE; + if (can_do_next) + *can_do_next = TRUE; +} + +static void +theme_adium_highlight (EmpathyChatView *view, + const gchar *text) +{ + webkit_web_view_unmark_text_matches (WEBKIT_WEB_VIEW (view)); + webkit_web_view_mark_text_matches (WEBKIT_WEB_VIEW (view), + text, FALSE, 0); + webkit_web_view_set_highlight_text_matches (WEBKIT_WEB_VIEW (view), + TRUE); +} + +static void +theme_adium_copy_clipboard (EmpathyChatView *view) +{ + webkit_web_view_copy_clipboard (WEBKIT_WEB_VIEW (view)); +} + +static void +theme_adium_iface_init (EmpathyChatViewIface *iface) +{ + iface->append_message = theme_adium_append_message; + iface->append_event = theme_adium_append_event; + iface->scroll = theme_adium_scroll; + iface->scroll_down = theme_adium_scroll_down; + iface->get_has_selection = theme_adium_get_has_selection; + iface->clear = theme_adium_clear; + iface->find_previous = theme_adium_find_previous; + iface->find_next = theme_adium_find_next; + iface->find_abilities = theme_adium_find_abilities; + iface->highlight = theme_adium_highlight; + iface->copy_clipboard = theme_adium_copy_clipboard; +} + +static void +theme_adium_load_finished_cb (WebKitWebView *view, + WebKitWebFrame *frame, + gpointer user_data) +{ + EmpathyThemeAdiumPriv *priv = GET_PRIV (view); + EmpathyChatView *chat_view = EMPATHY_CHAT_VIEW (view); + + DEBUG ("Page loaded"); + priv->page_loaded = TRUE; + + /* Display queued messages */ + priv->message_queue = g_list_reverse (priv->message_queue); + while (priv->message_queue) { + EmpathyMessage *message = priv->message_queue->data; + + theme_adium_append_message (chat_view, message); + priv->message_queue = g_list_remove (priv->message_queue, message); + g_object_unref (message); + } +} + +static void +theme_adium_finalize (GObject *object) +{ + EmpathyThemeAdiumPriv *priv = GET_PRIV (object); + + g_free (priv->basedir); + g_free (priv->template_html); + g_free (priv->in_content_html); + g_free (priv->in_nextcontent_html); + g_free (priv->out_content_html); + g_free (priv->out_nextcontent_html); + g_free (priv->default_avatar_filename); + g_free (priv->path); + + G_OBJECT_CLASS (empathy_theme_adium_parent_class)->finalize (object); +} + +static void +theme_adium_dispose (GObject *object) +{ + EmpathyThemeAdiumPriv *priv = GET_PRIV (object); + + if (priv->smiley_manager) { + g_object_unref (priv->smiley_manager); + priv->smiley_manager = NULL; + } + + if (priv->last_contact) { + g_object_unref (priv->last_contact); + priv->last_contact = NULL; + } + + G_OBJECT_CLASS (empathy_theme_adium_parent_class)->dispose (object); +} + +static void +theme_adium_constructed (GObject *object) +{ + theme_adium_load (EMPATHY_THEME_ADIUM (object)); +} + +static void +theme_adium_get_property (GObject *object, + guint param_id, + GValue *value, + GParamSpec *pspec) +{ + EmpathyThemeAdiumPriv *priv = GET_PRIV (object); + + switch (param_id) { + case PROP_PATH: + g_value_set_string (value, priv->path); + break; + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, pspec); + break; + }; +} + +static void +theme_adium_set_property (GObject *object, + guint param_id, + const GValue *value, + GParamSpec *pspec) +{ + EmpathyThemeAdiumPriv *priv = GET_PRIV (object); + + switch (param_id) { + case PROP_PATH: + g_free (priv->path); + priv->path = g_value_dup_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_PATH, + g_param_spec_string ("path", + "The theme path", + "Path to the adium theme", + g_get_home_dir (), + G_PARAM_CONSTRUCT_ONLY | + G_PARAM_READWRITE)); + + + g_type_class_add_private (object_class, sizeof (EmpathyThemeAdiumPriv)); +} + +static void +empathy_theme_adium_init (EmpathyThemeAdium *theme) +{ + EmpathyThemeAdiumPriv *priv = G_TYPE_INSTANCE_GET_PRIVATE (theme, + EMPATHY_TYPE_THEME_ADIUM, EmpathyThemeAdiumPriv); + + theme->priv = priv; + + priv->smiley_manager = empathy_smiley_manager_dup_singleton (); + + g_signal_connect (theme, "load-finished", + G_CALLBACK (theme_adium_load_finished_cb), + NULL); + g_signal_connect (theme, "navigation-requested", + G_CALLBACK (theme_adium_navigation_requested_cb), + NULL); + g_signal_connect (theme, "populate-popup", + G_CALLBACK (theme_adium_populate_popup_cb), + NULL); +} + +EmpathyThemeAdium * +empathy_theme_adium_new (const gchar *path) +{ + g_return_val_if_fail (empathy_theme_adium_is_valid (path), NULL); + + return g_object_new (EMPATHY_TYPE_THEME_ADIUM, + "path", path, + NULL); +} + +gboolean +empathy_theme_adium_is_valid (const gchar *path) +{ + gboolean ret; + gchar *file; + + /* We ship a default Template.html as fallback if there is any problem + * with the one inside the theme. The only other required file is + * Content.html for incoming messages (outgoing fallback to use + * incoming). */ + file = g_build_filename (path, "Contents", "Resources", "Incoming", + "Content.html", NULL); + ret = g_file_test (file, G_FILE_TEST_EXISTS); + g_free (file); + + return ret; +} + diff --git a/libempathy-gtk/empathy-theme-adium.h b/libempathy-gtk/empathy-theme-adium.h new file mode 100644 index 000000000..b62675680 --- /dev/null +++ b/libempathy-gtk/empathy-theme-adium.h @@ -0,0 +1,56 @@ +/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ +/* + * Copyright (C) 2008-2009 Collabora Ltd. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + * + * Authors: Xavier Claessens <xclaesse@gmail.com> + */ + +#ifndef __EMPATHY_THEME_ADIUM_H__ +#define __EMPATHY_THEME_ADIUM_H__ + +#include <webkit/webkitwebview.h> + +#include "empathy-chat-view.h" + +G_BEGIN_DECLS + +#define EMPATHY_TYPE_THEME_ADIUM (empathy_theme_adium_get_type ()) +#define EMPATHY_THEME_ADIUM(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), EMPATHY_TYPE_THEME_ADIUM, EmpathyThemeAdium)) +#define EMPATHY_THEME_ADIUM_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), EMPATHY_TYPE_THEME_ADIUM, EmpathyThemeAdiumClass)) +#define EMPATHY_IS_THEME_ADIUM(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), EMPATHY_TYPE_THEME_ADIUM)) +#define EMPATHY_IS_THEME_ADIUM_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), EMPATHY_TYPE_THEME_ADIUM)) +#define EMPATHY_THEME_ADIUM_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), EMPATHY_TYPE_THEME_ADIUM, EmpathyThemeAdiumClass)) + +typedef struct _EmpathyThemeAdium EmpathyThemeAdium; +typedef struct _EmpathyThemeAdiumClass EmpathyThemeAdiumClass; + +struct _EmpathyThemeAdium { + WebKitWebView parent; + gpointer priv; +}; + +struct _EmpathyThemeAdiumClass { + WebKitWebViewClass parent_class; +}; + +GType empathy_theme_adium_get_type (void) G_GNUC_CONST; +EmpathyThemeAdium *empathy_theme_adium_new (const gchar *path); +gboolean empathy_theme_adium_is_valid (const gchar *path); + +G_END_DECLS + +#endif /* __EMPATHY_THEME_ADIUM_H__ */ diff --git a/libempathy-gtk/empathy-theme-manager.c b/libempathy-gtk/empathy-theme-manager.c index 0186b5eb7..c6da8ea68 100644 --- a/libempathy-gtk/empathy-theme-manager.c +++ b/libempathy-gtk/empathy-theme-manager.c @@ -38,6 +38,10 @@ #include "empathy-theme-boxes.h" #include "empathy-theme-irc.h" +#ifdef HAVE_WEBKIT +#include "empathy-theme-adium.h" +#endif + #define DEBUG_FLAG EMPATHY_DEBUG_OTHER #include <libempathy/empathy-debug.h> @@ -45,6 +49,8 @@ typedef struct { gchar *name; guint name_notify_id; + gchar *adium_path; + guint adium_path_notify_id; GtkSettings *settings; GList *boxes_views; } EmpathyThemeManagerPriv; @@ -61,6 +67,9 @@ static const gchar *themes[] = { "simple", N_("Simple"), "clean", N_("Clean"), "blue", N_("Blue"), +#ifdef HAVE_WEBKIT + "adium", N_("Adium"), +#endif NULL }; @@ -198,7 +207,7 @@ theme_manager_update_boxes_tags (EmpathyThemeBoxes *theme, "pixels-above-lines", 4, NULL); TAG_SET ("paragraph-background", "paragraph-background-set", text_background); - TAG_SET ("foreground", "foreground-set",highlight_foreground); + TAG_SET ("foreground", "foreground-set", highlight_foreground); empathy_chat_text_view_tag_set (view, EMPATHY_CHAT_TEXT_VIEW_TAG_SPACING, "size", 3000, @@ -318,6 +327,17 @@ empathy_theme_manager_create_view (EmpathyThemeManager *manager) DEBUG ("Using theme %s", priv->name); +#ifdef HAVE_WEBKIT + if (strcmp (priv->name, "adium") == 0) { + if (empathy_theme_adium_is_valid (priv->adium_path)) { + return EMPATHY_CHAT_VIEW (empathy_theme_adium_new (priv->adium_path)); + } else { + /* The adium path is not valid, fallback to classic theme */ + return EMPATHY_CHAT_VIEW (theme_manager_create_irc_view (manager)); + } + } +#endif + if (strcmp (priv->name, "classic") == 0) { return EMPATHY_CHAT_VIEW (theme_manager_create_irc_view (manager)); } @@ -404,6 +424,27 @@ theme_manager_notify_name_cb (EmpathyConf *conf, } static void +theme_manager_notify_adium_path_cb (EmpathyConf *conf, + const gchar *key, + gpointer user_data) +{ + EmpathyThemeManager *manager = EMPATHY_THEME_MANAGER (user_data); + EmpathyThemeManagerPriv *priv = GET_PRIV (manager); + gchar *adium_path = NULL; + + if (!empathy_conf_get_string (conf, key, &adium_path) || + !tp_strdiff (priv->adium_path, adium_path)) { + g_free (adium_path); + return; + } + + g_free (priv->adium_path); + priv->adium_path = adium_path; + + g_signal_emit (manager, signals[THEME_CHANGED], 0, NULL); +} + +static void theme_manager_finalize (GObject *object) { EmpathyThemeManagerPriv *priv = GET_PRIV (object); @@ -411,6 +452,8 @@ theme_manager_finalize (GObject *object) empathy_conf_notify_remove (empathy_conf_get (), priv->name_notify_id); g_free (priv->name); + empathy_conf_notify_remove (empathy_conf_get (), priv->adium_path_notify_id); + g_free (priv->adium_path); for (l = priv->boxes_views; l; l = l->next) { g_object_weak_unref (G_OBJECT (l->data), @@ -460,6 +503,16 @@ empathy_theme_manager_init (EmpathyThemeManager *manager) EMPATHY_PREFS_CHAT_THEME, manager); + /* Take the adium path and track changes */ + priv->adium_path_notify_id = + empathy_conf_notify_add (empathy_conf_get (), + EMPATHY_PREFS_CHAT_ADIUM_PATH, + theme_manager_notify_adium_path_cb, + manager); + theme_manager_notify_adium_path_cb (empathy_conf_get (), + EMPATHY_PREFS_CHAT_ADIUM_PATH, + manager); + /* Track GTK color changes */ priv->settings = gtk_settings_get_default (); g_signal_connect_swapped (priv->settings, "notify::color-hash", diff --git a/libempathy-gtk/empathy-theme.c b/libempathy-gtk/empathy-theme.c deleted file mode 100644 index ca4f66663..000000000 --- a/libempathy-gtk/empathy-theme.c +++ /dev/null @@ -1,408 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ -/* - * Copyright (C) 2007 Imendio AB - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this program; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#include <config.h> - -#include <string.h> -#include <glib/gi18n-lib.h> -#include <gtk/gtk.h> - -#include <libempathy/empathy-utils.h> - -#include "empathy-chat.h" -#include "empathy-conf.h" -#include "empathy-theme.h" -#include "empathy-smiley-manager.h" - -/* Number of seconds between timestamps when using normal mode, 5 minutes. */ -#define TIMESTAMP_INTERVAL 300 - -#define SCHEMES "(https?|ftps?|nntp|news|javascript|about|ghelp|apt|telnet|"\ - "file|webcal|mailto)" -#define BODY "([^\\ ]+)" -#define END_BODY "([^\\ ]*[^,;\?><()\\ \"\\.])" -#define URI_REGEX "("SCHEMES"://"END_BODY")" \ - "|((mailto:)?"BODY"@"BODY"\\."END_BODY")"\ - "|((www|ftp)\\."END_BODY")" -static GRegex *uri_regex = NULL; - -#define GET_PRIV(obj) EMPATHY_GET_PRIV (obj, EmpathyTheme) - -typedef struct { - EmpathySmileyManager *smiley_manager; - gboolean show_avatars; -} EmpathyThemePriv; - -static void theme_finalize (GObject *object); -static void theme_get_property (GObject *object, - guint param_id, - GValue *value, - GParamSpec *pspec); -static void theme_set_property (GObject *object, - guint param_id, - const GValue *value, - GParamSpec *pspec); - - -G_DEFINE_TYPE (EmpathyTheme, empathy_theme, G_TYPE_OBJECT); - -enum { - PROP_0, - PROP_SHOW_AVATARS -}; - -static void -empathy_theme_class_init (EmpathyThemeClass *class) -{ - GObjectClass *object_class; - - object_class = G_OBJECT_CLASS (class); - - object_class->finalize = theme_finalize; - object_class->get_property = theme_get_property; - object_class->set_property = theme_set_property; - - class->update_view = NULL; - class->append_message = NULL; - class->append_event = NULL; - class->append_timestamp = NULL; - class->append_spacing = NULL; - - g_object_class_install_property (object_class, - PROP_SHOW_AVATARS, - g_param_spec_boolean ("show-avatars", - "", "", - TRUE, - G_PARAM_READWRITE)); - - g_type_class_add_private (object_class, sizeof (EmpathyThemePriv)); -} - -static void -empathy_theme_init (EmpathyTheme *theme) -{ - EmpathyThemePriv *priv = G_TYPE_INSTANCE_GET_PRIVATE (theme, - EMPATHY_TYPE_THEME, EmpathyThemePriv); - - theme->priv = priv; - priv->smiley_manager = empathy_smiley_manager_dup_singleton (); -} - -static void -theme_finalize (GObject *object) -{ - EmpathyThemePriv *priv; - - priv = GET_PRIV (object); - - if (priv->smiley_manager) { - g_object_unref (priv->smiley_manager); - } - - (G_OBJECT_CLASS (empathy_theme_parent_class)->finalize) (object); -} - -static void -theme_get_property (GObject *object, - guint param_id, - GValue *value, - GParamSpec *pspec) -{ - EmpathyThemePriv *priv; - - priv = GET_PRIV (object); - - switch (param_id) { - case PROP_SHOW_AVATARS: - g_value_set_boolean (value, priv->show_avatars); - break; - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, pspec); - break; - } -} - -static void -theme_set_property (GObject *object, - guint param_id, - const GValue *value, - GParamSpec *pspec) -{ - EmpathyThemePriv *priv; - - priv = GET_PRIV (object); - - switch (param_id) { - case PROP_SHOW_AVATARS: - empathy_theme_set_show_avatars (EMPATHY_THEME (object), - g_value_get_boolean (value)); - break; - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, pspec); - break; - } -} - -void -empathy_theme_maybe_append_date_and_time (EmpathyTheme *theme, - EmpathyChatView *view, - EmpathyMessage *message) -{ - time_t timestamp; - GDate *date, *last_date; - gboolean append_date, append_time; - - date = empathy_message_get_date_and_time (message, ×tamp); - - last_date = g_date_new (); - g_date_set_time_t (last_date, empathy_chat_view_get_last_timestamp (view)); - - append_date = FALSE; - append_time = FALSE; - - if (g_date_compare (date, last_date) > 0) { - append_date = TRUE; - append_time = TRUE; - } - - g_date_free (last_date); - g_date_free (date); - - if (empathy_chat_view_get_last_timestamp (view) + TIMESTAMP_INTERVAL < timestamp) { - append_time = TRUE; - } - - if (append_time || append_date) { - empathy_theme_append_timestamp (theme, view, message, - append_date, append_time); - } -} - -void -empathy_theme_update_view (EmpathyTheme *theme, - EmpathyChatView *view) -{ - if (!EMPATHY_THEME_GET_CLASS(theme)->update_view) { - g_error ("Theme must override update_view"); - } - - EMPATHY_THEME_GET_CLASS(theme)->update_view (theme, view); -} - -void -empathy_theme_append_message (EmpathyTheme *theme, - EmpathyChatView *view, - EmpathyMessage *message) -{ - if (!EMPATHY_THEME_GET_CLASS(theme)->append_message) { - g_warning ("Theme should override append_message"); - return; - } - - EMPATHY_THEME_GET_CLASS(theme)->append_message (theme, view, message); -} - -static void -theme_insert_text_with_emoticons (GtkTextBuffer *buf, - GtkTextIter *iter, - const gchar *str, - EmpathySmileyManager *smiley_manager) -{ - gboolean use_smileys = FALSE; - GSList *smileys, *l; - - empathy_conf_get_bool (empathy_conf_get (), - EMPATHY_PREFS_CHAT_SHOW_SMILEYS, - &use_smileys); - - if (!use_smileys) { - gtk_text_buffer_insert (buf, iter, str, -1); - return; - } - - smileys = empathy_smiley_manager_parse (smiley_manager, str); - for (l = smileys; l; l = l->next) { - EmpathySmiley *smiley; - - smiley = l->data; - if (smiley->pixbuf) { - gtk_text_buffer_insert_pixbuf (buf, iter, smiley->pixbuf); - } else { - gtk_text_buffer_insert (buf, iter, smiley->str, -1); - } - empathy_smiley_free (smiley); - } - g_slist_free (smileys); -} - -void -empathy_theme_append_text (EmpathyTheme *theme, - EmpathyChatView *view, - const gchar *body, - const gchar *tag, - const gchar *link_tag) -{ - EmpathyThemePriv *priv; - GtkTextBuffer *buffer; - GtkTextIter start_iter, end_iter; - GtkTextMark *mark; - GtkTextIter iter; - GMatchInfo *match_info; - gboolean match; - gint last = 0; - gint s = 0, e = 0; - gchar *tmp; - - priv = GET_PRIV (theme); - buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (view)); - - gtk_text_buffer_get_end_iter (buffer, &start_iter); - mark = gtk_text_buffer_create_mark (buffer, NULL, &start_iter, TRUE); - - if (!uri_regex) { - uri_regex = g_regex_new (URI_REGEX, 0, 0, NULL); - } - - for (match = g_regex_match (uri_regex, body, 0, &match_info); match; - match = g_match_info_next (match_info, NULL)) { - if (!g_match_info_fetch_pos (match_info, 0, &s, &e)) - continue; - - if (s > last) { - tmp = empathy_substring (body, last, s); - - gtk_text_buffer_get_end_iter (buffer, &iter); - theme_insert_text_with_emoticons (buffer, - &iter, - tmp, - priv->smiley_manager); - g_free (tmp); - } - - tmp = empathy_substring (body, s, e); - - gtk_text_buffer_get_end_iter (buffer, &iter); - if (!link_tag) { - gtk_text_buffer_insert (buffer, &iter, - tmp, -1); - } else { - gtk_text_buffer_insert_with_tags_by_name (buffer, - &iter, - tmp, - -1, - link_tag, - "link", - NULL); - } - - g_free (tmp); - last = e; - } - g_match_info_free (match_info); - - if (last < strlen (body)) { - gtk_text_buffer_get_end_iter (buffer, &iter); - theme_insert_text_with_emoticons (buffer, - &iter, - body + last, - priv->smiley_manager); - } - - gtk_text_buffer_get_end_iter (buffer, &iter); - gtk_text_buffer_insert (buffer, &iter, "\n", 1); - - /* Apply the style to the inserted text. */ - gtk_text_buffer_get_iter_at_mark (buffer, &start_iter, mark); - gtk_text_buffer_get_end_iter (buffer, &end_iter); - - gtk_text_buffer_apply_tag_by_name (buffer, - tag, - &start_iter, - &end_iter); - - gtk_text_buffer_delete_mark (buffer, mark); -} - -void -empathy_theme_append_event (EmpathyTheme *theme, - EmpathyChatView *view, - const gchar *str) -{ - if (!EMPATHY_THEME_GET_CLASS(theme)->append_event) { - return; - } - - EMPATHY_THEME_GET_CLASS(theme)->append_event (theme, view, str); -} - -void -empathy_theme_append_spacing (EmpathyTheme *theme, - EmpathyChatView *view) -{ - if (!EMPATHY_THEME_GET_CLASS(theme)->append_spacing) { - return; - } - - EMPATHY_THEME_GET_CLASS(theme)->append_spacing (theme, view); -} - - -void -empathy_theme_append_timestamp (EmpathyTheme *theme, - EmpathyChatView *view, - EmpathyMessage *message, - gboolean show_date, - gboolean show_time) -{ - if (!EMPATHY_THEME_GET_CLASS(theme)->append_timestamp) { - return; - } - - EMPATHY_THEME_GET_CLASS(theme)->append_timestamp (theme, view, - message, show_date, - show_time); -} - -gboolean -empathy_theme_get_show_avatars (EmpathyTheme *theme) -{ - EmpathyThemePriv *priv; - - g_return_val_if_fail (EMPATHY_IS_THEME (theme), FALSE); - - priv = GET_PRIV (theme); - - return priv->show_avatars; -} - -void -empathy_theme_set_show_avatars (EmpathyTheme *theme, gboolean show) -{ - EmpathyThemePriv *priv; - - g_return_if_fail (EMPATHY_IS_THEME (theme)); - - priv = GET_PRIV (theme); - - priv->show_avatars = show; - - g_object_notify (G_OBJECT (theme), "show-avatars"); -} - diff --git a/libempathy-gtk/empathy-ui-utils.c b/libempathy-gtk/empathy-ui-utils.c index f30c58aad..cf423de41 100644 --- a/libempathy-gtk/empathy-ui-utils.c +++ b/libempathy-gtk/empathy-ui-utils.c @@ -558,6 +558,29 @@ empathy_pixbuf_from_icon_name (const gchar *icon_name, return empathy_pixbuf_from_icon_name_sized (icon_name, size); } +gchar * +empathy_filename_from_icon_name (const gchar *icon_name, + GtkIconSize icon_size) +{ + GtkIconTheme *icon_theme; + GtkIconInfo *icon_info; + gint w, h; + gint size = 48; + gchar *ret; + + icon_theme = gtk_icon_theme_get_default (); + + if (gtk_icon_size_lookup (icon_size, &w, &h)) { + size = (w + h) / 2; + } + + icon_info = gtk_icon_theme_lookup_icon (icon_theme, icon_name, size, 0); + ret = g_strdup (gtk_icon_info_get_filename (icon_info)); + gtk_icon_info_free (icon_info); + + return ret; +} + /* Stolen from GtkSourceView, hence the weird intendation. Please keep it like * that to make it easier to apply changes from the original code. */ diff --git a/libempathy-gtk/empathy-ui-utils.h b/libempathy-gtk/empathy-ui-utils.h index 4d58fedcf..60d48f3c4 100644 --- a/libempathy-gtk/empathy-ui-utils.h +++ b/libempathy-gtk/empathy-ui-utils.h @@ -90,12 +90,15 @@ GdkPixbuf * empathy_pixbuf_from_avatar_scaled (EmpathyAvatar *avata GdkPixbuf * empathy_pixbuf_avatar_from_contact_scaled (EmpathyContact *contact, gint width, gint height); -GdkPixbuf * empathy_pixbuf_scale_down_if_necessary (GdkPixbuf *pixbuf, +GdkPixbuf * empathy_pixbuf_scale_down_if_necessary (GdkPixbuf *pixbuf, gint max_size); -GdkPixbuf * empathy_pixbuf_from_icon_name (const gchar *icon_name, +GdkPixbuf * empathy_pixbuf_from_icon_name (const gchar *icon_name, GtkIconSize icon_size); -GdkPixbuf * empathy_pixbuf_from_icon_name_sized (const gchar *icon_name, +GdkPixbuf * empathy_pixbuf_from_icon_name_sized (const gchar *icon_name, gint size); +gchar * empathy_filename_from_icon_name (const gchar *icon_name, + GtkIconSize icon_size); + /* Text view */ gboolean empathy_text_iter_forward_search (const GtkTextIter*iter, const gchar *str, diff --git a/libempathy/Makefile.am b/libempathy/Makefile.am index 3540c88bf..a07e863c1 100644 --- a/libempathy/Makefile.am +++ b/libempathy/Makefile.am @@ -53,7 +53,6 @@ libempathy_la_SOURCES = \ empathy-tp-contact-list.c \ empathy-tp-file.c \ empathy-tp-roomlist.c \ - empathy-tp-tube.c \ empathy-tube-handler.c \ empathy-utils.c @@ -103,7 +102,6 @@ libempathy_headers = \ empathy-tp-contact-list.h \ empathy-tp-file.h \ empathy-tp-roomlist.h \ - empathy-tp-tube.h \ empathy-tube-handler.h \ empathy-types.h \ empathy-utils.h diff --git a/libempathy/empathy-call-handler.c b/libempathy/empathy-call-handler.c index 8d70885b4..90df179bc 100644 --- a/libempathy/empathy-call-handler.c +++ b/libempathy/empathy-call-handler.c @@ -1,6 +1,6 @@ /* * empathy-call-handler.c - Source for EmpathyCallHandler - * Copyright (C) 2008 Collabora Ltd. + * Copyright (C) 2008-2009 Collabora Ltd. * @author Sjoerd Simons <sjoerd.simons@collabora.co.uk> * * This library is free software; you can redistribute it and/or @@ -577,3 +577,22 @@ empathy_call_handler_start_call (EmpathyCallHandler *handler) g_object_unref (dispatcher); } +/** + * empathy_call_handler_stop_call: + * @handler: an #EmpathyCallHandler + * + * Closes the #EmpathyCallHandler's call and frees its resources. + */ +void +empathy_call_handler_stop_call (EmpathyCallHandler *handler) +{ + EmpathyCallHandlerPriv *priv = GET_PRIV (handler); + + if (priv->call != NULL) + { + empathy_tp_call_close (priv->call); + g_object_unref (priv->call); + } + + priv->call = NULL; +}
\ No newline at end of file diff --git a/libempathy/empathy-call-handler.h b/libempathy/empathy-call-handler.h index 9a039f06a..112a3139a 100644 --- a/libempathy/empathy-call-handler.h +++ b/libempathy/empathy-call-handler.h @@ -1,6 +1,6 @@ /* * empathy-call-handler.h - Header for EmpathyCallHandler - * Copyright (C) 2008 Collabora Ltd. + * Copyright (C) 2008-2009 Collabora Ltd. * @author Sjoerd Simons <sjoerd.simons@collabora.co.uk> * * This library is free software; you can redistribute it and/or @@ -71,6 +71,7 @@ EmpathyCallHandler * empathy_call_handler_new_for_channel ( EmpathyTpCall *call); void empathy_call_handler_start_call (EmpathyCallHandler *handler); +void empathy_call_handler_stop_call (EmpathyCallHandler *handler); void empathy_call_handler_bus_message (EmpathyCallHandler *handler, GstBus *bus, GstMessage *message); diff --git a/libempathy/empathy-chatroom-manager.c b/libempathy/empathy-chatroom-manager.c index 3bdc5f154..44416670e 100644 --- a/libempathy/empathy-chatroom-manager.c +++ b/libempathy/empathy-chatroom-manager.c @@ -506,6 +506,27 @@ empathy_chatroom_manager_add (EmpathyChatroomManager *manager, return FALSE; } +static void +chatroom_manager_remove_link (EmpathyChatroomManager *manager, + GList *l) +{ + EmpathyChatroomManagerPriv *priv; + EmpathyChatroom *chatroom; + + priv = GET_PRIV (manager); + + chatroom = l->data; + + if (empathy_chatroom_is_favorite (chatroom)) + reset_save_timeout (manager); + + g_signal_emit (manager, signals[CHATROOM_REMOVED], 0, chatroom); + g_signal_handlers_disconnect_by_func (chatroom, chatroom_changed_cb, manager); + + priv->chatrooms = g_list_delete_link (priv->chatrooms, l); + g_object_unref (chatroom); +} + void empathy_chatroom_manager_remove (EmpathyChatroomManager *manager, EmpathyChatroom *chatroom) @@ -527,15 +548,7 @@ empathy_chatroom_manager_remove (EmpathyChatroomManager *manager, if (this_chatroom == chatroom || empathy_chatroom_equal (chatroom, this_chatroom)) { - priv->chatrooms = g_list_delete_link (priv->chatrooms, l); - if (empathy_chatroom_is_favorite (chatroom)) - reset_save_timeout (manager); - - g_signal_emit (manager, signals[CHATROOM_REMOVED], 0, this_chatroom); - g_signal_handlers_disconnect_by_func (chatroom, chatroom_changed_cb, - manager); - - g_object_unref (this_chatroom); + chatroom_manager_remove_link (manager, l); break; } } @@ -649,13 +662,16 @@ chatroom_manager_chat_destroyed_cb (EmpathyTpChat *chat, continue; empathy_chatroom_set_tp_chat (chatroom, NULL); + if (!empathy_chatroom_is_favorite (chatroom)) { /* Remove the chatroom from the list, unless it's in the list of * favourites.. * FIXME this policy should probably not be in libempathy */ - empathy_chatroom_manager_remove (manager, chatroom); + chatroom_manager_remove_link (manager, l); } + + break; } } diff --git a/libempathy/empathy-contact.c b/libempathy/empathy-contact.c index 03ce8d28a..8e07fb9f6 100644 --- a/libempathy/empathy-contact.c +++ b/libempathy/empathy-contact.c @@ -830,17 +830,16 @@ static gchar * contact_get_avatar_filename (EmpathyContact *contact, const gchar *token) { - EmpathyContactPriv *priv = GET_PRIV (contact); McAccount *account; gchar *avatar_path; gchar *avatar_file; gchar *token_escaped; gchar *contact_escaped; - if (EMP_STR_EMPTY (priv->id)) + if (EMP_STR_EMPTY (empathy_contact_get_id (contact))) return NULL; - contact_escaped = tp_escape_as_identifier (priv->id); + contact_escaped = tp_escape_as_identifier (empathy_contact_get_id (contact)); token_escaped = tp_escape_as_identifier (token); account = empathy_contact_get_account (contact); @@ -864,7 +863,7 @@ contact_get_avatar_filename (EmpathyContact *contact, void empathy_contact_load_avatar_data (EmpathyContact *contact, - const guchar *data, + const guchar *data, const gsize len, const gchar *format, const gchar *token) @@ -880,13 +879,13 @@ empathy_contact_load_avatar_data (EmpathyContact *contact, g_return_if_fail (!EMP_STR_EMPTY (token)); /* Load and set the avatar */ + filename = contact_get_avatar_filename (contact, token); avatar = empathy_avatar_new (g_memdup (data, len), len, g_strdup (format), - g_strdup (token)); + g_strdup (token), filename); empathy_contact_set_avatar (contact, avatar); empathy_avatar_unref (avatar); /* Save to cache if not yet in it */ - filename = contact_get_avatar_filename (contact, token); if (filename && !g_file_test (filename, G_FILE_TEST_EXISTS)) { if (!empathy_avatar_save_to_file (avatar, filename, &error)) @@ -898,7 +897,6 @@ empathy_contact_load_avatar_data (EmpathyContact *contact, else DEBUG ("Avatar saved to %s", filename); } - g_free (filename); } gboolean @@ -929,13 +927,11 @@ empathy_contact_load_avatar_cache (EmpathyContact *contact, if (data) { DEBUG ("Avatar loaded from %s", filename); - avatar = empathy_avatar_new (data, len, NULL, g_strdup (token)); + avatar = empathy_avatar_new (data, len, NULL, g_strdup (token), filename); empathy_contact_set_avatar (contact, avatar); empathy_avatar_unref (avatar); } - g_free (filename); - return data != NULL; } @@ -954,11 +950,25 @@ empathy_avatar_get_type (void) return type_id; } +/** + * empathy_avatar_new: + * @data: the avatar data + * @len: the size of avatar data + * @format: the mime type of the avatar image + * @token: the token of the avatar + * @filename: the filename where the avatar is stored in cache + * + * Create a #EmpathyAvatar from the provided data. This function takes the + * ownership of @data, @format, @token and @filename. + * + * Returns: a new #EmpathyAvatar + */ EmpathyAvatar * empathy_avatar_new (guchar *data, gsize len, gchar *format, - gchar *token) + gchar *token, + gchar *filename) { EmpathyAvatar *avatar; @@ -967,6 +977,7 @@ empathy_avatar_new (guchar *data, avatar->len = len; avatar->format = format; avatar->token = token; + avatar->filename = filename; avatar->refcount = 1; return avatar; diff --git a/libempathy/empathy-contact.h b/libempathy/empathy-contact.h index ff8d426e2..f4418768e 100644 --- a/libempathy/empathy-contact.h +++ b/libempathy/empathy-contact.h @@ -55,6 +55,7 @@ typedef struct { gsize len; gchar *format; gchar *token; + gchar *filename; guint refcount; } EmpathyAvatar; @@ -114,7 +115,8 @@ GType empathy_avatar_get_type (void) G_GNUC_CONST; EmpathyAvatar * empathy_avatar_new (guchar *data, gsize len, gchar *format, - gchar *token); + gchar *token, + gchar *filename); EmpathyAvatar * empathy_avatar_ref (EmpathyAvatar *avatar); void empathy_avatar_unref (EmpathyAvatar *avatar); diff --git a/libempathy/empathy-dispatcher.c b/libempathy/empathy-dispatcher.c index f46d15f80..b51df95fa 100644 --- a/libempathy/empathy-dispatcher.c +++ b/libempathy/empathy-dispatcher.c @@ -112,7 +112,16 @@ typedef struct GHashTable *dispatched_channels; /* ObjectPath -> EmpathyDispatchOperations */ GHashTable *dispatching_channels; - /* ObjectPath -> EmpathyDispatchOperations */ + + /* ObjectPath -> EmpathyDispatchOperations + * + * This holds channels which were announced with NewChannel while we have an + * outstanding channel request for a channel of this type. On the Requests + * interface, CreateChannel and EnsureChannel are guaranteed by the spec to + * return before NewChannels is emitted, but there was no guarantee of the + * ordering of RequestChannel vs. NewChannel. So if necessary, channels are + * held in limbo here until we know whether they were requested. + */ GHashTable *outstanding_channels; /* List of DispatcherRequestData */ GList *outstanding_requests; @@ -523,8 +532,8 @@ dispatcher_flush_outstanding_operations (EmpathyDispatcher *self, if (dispatcher_operation_can_start (self, operation, cd)) { - dispatcher_start_dispatching (dispatcher, operation, cd); g_hash_table_iter_remove (&iter); + dispatcher_start_dispatching (dispatcher, operation, cd); } } } diff --git a/libempathy/empathy-tp-contact-list.c b/libempathy/empathy-tp-contact-list.c index 116b8cf71..58cb89cbe 100644 --- a/libempathy/empathy-tp-contact-list.c +++ b/libempathy/empathy-tp-contact-list.c @@ -70,11 +70,8 @@ G_DEFINE_TYPE_WITH_CODE (EmpathyTpContactList, empathy_tp_contact_list, G_TYPE_O tp_contact_list_iface_init)); static void -tp_contact_list_group_invalidated_cb (TpChannel *channel, - guint domain, - gint code, - gchar *message, - EmpathyTpContactList *list) +tp_contact_list_forget_group (EmpathyTpContactList *list, + TpChannel *channel) { EmpathyTpContactListPriv *priv = GET_PRIV (list); const TpIntSet *members; @@ -82,7 +79,6 @@ tp_contact_list_group_invalidated_cb (TpChannel *channel, const gchar *group_name; group_name = tp_channel_get_identifier (channel); - DEBUG ("Group %s invalidated. Message: %s", group_name, message); /* Signal that all members are not in that group anymore */ members = tp_channel_group_get_members (channel); @@ -103,6 +99,22 @@ tp_contact_list_group_invalidated_cb (TpChannel *channel, group_name, FALSE); } +} + +static void +tp_contact_list_group_invalidated_cb (TpChannel *channel, + guint domain, + gint code, + gchar *message, + EmpathyTpContactList *list) +{ + EmpathyTpContactListPriv *priv = GET_PRIV (list); + const gchar *group_name; + + group_name = tp_channel_get_identifier (channel); + DEBUG ("Group %s invalidated. Message: %s", group_name, message); + + tp_contact_list_forget_group (list, channel); g_hash_table_remove (priv->groups, group_name); } @@ -113,6 +125,7 @@ tp_contact_list_group_ready_cb (TpChannel *channel, gpointer list) { EmpathyTpContactListPriv *priv = GET_PRIV (list); + TpChannel *old_group; const gchar *group_name; if (error) { @@ -120,8 +133,25 @@ tp_contact_list_group_ready_cb (TpChannel *channel, g_object_unref (channel); return; } - + group_name = tp_channel_get_identifier (channel); + + /* If there's already a group with this name in the table, we can't + * just let it be replaced. Replacing it causes it to be unreffed, + * which causes it to be invalidated (see + * <https://bugs.freedesktop.org/show_bug.cgi?id=22119>), which causes + * it to be removed from the hash table again, which causes it to be + * unreffed again. + */ + old_group = g_hash_table_lookup (priv->groups, group_name); + + if (old_group != NULL) { + DEBUG ("Discarding old group %s (%p)", group_name, old_group); + g_hash_table_steal (priv->groups, group_name); + tp_contact_list_forget_group (list, old_group); + g_object_unref (old_group); + } + g_hash_table_insert (priv->groups, (gpointer) group_name, channel); DEBUG ("Group %s added", group_name); diff --git a/libempathy/empathy-tp-file.c b/libempathy/empathy-tp-file.c index 76882022a..e60b2999d 100644 --- a/libempathy/empathy-tp-file.c +++ b/libempathy/empathy-tp-file.c @@ -505,13 +505,14 @@ ft_operation_provide_or_accept_file_cb (TpChannel *proxy, * report the method error. */ g_clear_error (&myerr); - myerr = g_error_copy (error); } + + myerr = g_error_copy (error); } if (myerr != NULL) { - DEBUG ("Error: %s", error->message); + DEBUG ("Error: %s", myerr->message); ft_operation_close_with_error (tp_file, myerr); g_clear_error (&myerr); return; diff --git a/libempathy/empathy-tp-tube.c b/libempathy/empathy-tp-tube.c deleted file mode 100644 index 7b9b1889e..000000000 --- a/libempathy/empathy-tp-tube.c +++ /dev/null @@ -1,669 +0,0 @@ -/* - * Copyright (C) 2008 Collabora Ltd. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - * - * Authors: Guillaume Desmottes <guillaume.desmottes@collabora.co.uk> - * Elliot Fairweather <elliot.fairweather@collabora.co.uk> - */ - -#include <config.h> - -#include <telepathy-glib/connection.h> -#include <telepathy-glib/proxy.h> -#include <telepathy-glib/util.h> -#include <extensions/extensions.h> - -#include "empathy-enum-types.h" -#include "empathy-tp-tube.h" -#include "empathy-utils.h" - -#define DEBUG_FLAG EMPATHY_DEBUG_TP -#include "empathy-debug.h" - -typedef struct { - TpSocketAddressType type; - EmpathyTpTubeAcceptStreamTubeCb *callback; - gpointer user_data; -} EmpathyTpTubeAcceptData; - -static EmpathyTpTubeAcceptData * -new_empathy_tp_tube_accept_data (TpSocketAddressType type, - EmpathyTpTubeAcceptStreamTubeCb *callback, - gpointer user_data) -{ - EmpathyTpTubeAcceptData *r; - - r = g_slice_new0 (EmpathyTpTubeAcceptData); - r->type = type; - r->callback = callback; - r->user_data = user_data; - - return r; -} - -static void -free_empathy_tp_tube_accept_data (gpointer data) -{ - g_slice_free (EmpathyTpTubeAcceptData, data); -} - - -typedef struct { - EmpathyTpTubeReadyCb *callback; - gpointer user_data; - GDestroyNotify destroy; - GObject *weak_object; -} ReadyCbData; - -/** - * SECTION:empathy-tp-tube - * @title:EmpathyTpTube - * @short_description: A wrapper around a Telepathy tube channel - * @include: libempathy/empathy-tp-tube.h - * - * #EmpathyTpTube is a convenient object wrapping a Telepathy tube channel. - */ - -/** - * EmpathyTpTube: - * @parent: parent object - * - * An object wrapping a Telepathy tube channel. - */ - -#define GET_PRIV(obj) EMPATHY_GET_PRIV (obj, EmpathyTpTube) -typedef struct -{ - TpChannel *channel; - TpTubeChannelState state; - gboolean ready; - GSList *ready_callbacks; -} EmpathyTpTubePriv; - -enum -{ - PROP_0, - PROP_CHANNEL, - PROP_STATE, -}; - -enum -{ - DESTROY, - LAST_SIGNAL -}; - -static guint signals[LAST_SIGNAL]; - -G_DEFINE_TYPE (EmpathyTpTube, empathy_tp_tube, G_TYPE_OBJECT) - -static void -tp_tube_state_changed_cb (TpChannel *channel, - TpTubeChannelState state, - gpointer user_data, - GObject *tube) -{ - EmpathyTpTubePriv *priv = GET_PRIV (tube); - - if (!priv->ready) - /* We didn't get the state yet */ - return; - - DEBUG ("Tube state changed"); - - priv->state = state; - g_object_notify (tube, "state"); -} - -static void -tp_tube_invalidated_cb (TpChannel *channel, - GQuark domain, - gint code, - gchar *message, - EmpathyTpTube *tube) -{ - DEBUG ("Channel invalidated: %s", message); - g_signal_emit (tube, signals[DESTROY], 0); -} - -static void -tp_tube_async_cb (TpChannel *channel, - const GError *error, - gpointer user_data, - GObject *tube) -{ - if (error) - DEBUG ("Error %s: %s", (gchar *) user_data, error->message); -} - -static void -tp_tube_set_property (GObject *object, - guint prop_id, - const GValue *value, - GParamSpec *pspec) -{ - EmpathyTpTubePriv *priv = GET_PRIV (object); - - switch (prop_id) - { - case PROP_CHANNEL: - priv->channel = g_value_dup_object (value); - break; - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); - break; - } -} - -static void -tp_tube_get_property (GObject *object, - guint prop_id, - GValue *value, - GParamSpec *pspec) -{ - EmpathyTpTubePriv *priv = GET_PRIV (object); - - switch (prop_id) - { - case PROP_CHANNEL: - g_value_set_object (value, priv->channel); - break; - case PROP_STATE: - g_value_set_uint (value, priv->state); - break; - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); - break; - } -} - -static void weak_object_notify (gpointer data, - GObject *old_object); - -static ReadyCbData * -ready_cb_data_new (EmpathyTpTube *self, - EmpathyTpTubeReadyCb *callback, - gpointer user_data, - GDestroyNotify destroy, - GObject *weak_object) -{ - ReadyCbData *d = g_slice_new0 (ReadyCbData); - d->callback = callback; - d->user_data = user_data; - d->destroy = destroy; - d->weak_object = weak_object; - - if (weak_object != NULL) - g_object_weak_ref (weak_object, weak_object_notify, self); - - return d; -} - -static void -ready_cb_data_free (ReadyCbData *data, - EmpathyTpTube *self) -{ - if (data->destroy != NULL) - data->destroy (data->user_data); - - if (data->weak_object != NULL) - g_object_weak_unref (data->weak_object, - weak_object_notify, self); - - g_slice_free (ReadyCbData, data); -} - -static void -weak_object_notify (gpointer data, - GObject *old_object) -{ - EmpathyTpTube *self = EMPATHY_TP_TUBE (data); - EmpathyTpTubePriv *priv = GET_PRIV (self); - GSList *l, *ln; - - for (l = priv->ready_callbacks ; l != NULL ; l = ln ) - { - ReadyCbData *d = (ReadyCbData *) l->data; - ln = g_slist_next (l); - - if (d->weak_object == old_object) - { - ready_cb_data_free (d, self); - priv->ready_callbacks = g_slist_delete_link (priv->ready_callbacks, - l); - } - } -} - - -static void -tube_is_ready (EmpathyTpTube *self, - const GError *error) -{ - EmpathyTpTubePriv *priv = GET_PRIV (self); - GSList *l; - - priv->ready = TRUE; - - /* tube has to stay alive while we call the callbacks */ - g_object_ref (self); - for (l = priv->ready_callbacks ; l != NULL ; l = g_slist_next (l)) - { - ReadyCbData *data = (ReadyCbData *) l->data; - - data->callback (self, error, data->user_data, data->weak_object); - ready_cb_data_free (data, self); - } - g_object_unref (self); - - g_slist_free (priv->ready_callbacks); - priv->ready_callbacks = NULL; -} - -static void -got_tube_state_cb (TpProxy *proxy, - const GValue *out_value, - const GError *error, - gpointer user_data, - GObject *weak_object) -{ - EmpathyTpTube *self = EMPATHY_TP_TUBE (user_data); - EmpathyTpTubePriv *priv = GET_PRIV (self); - - if (error != NULL) - { - DEBUG ("Error getting State property: %s", error->message); - } - else - { - priv->state = g_value_get_uint (out_value); - g_object_notify (G_OBJECT (self), "state"); - } - - tube_is_ready (self, error); -} - -static GObject * -tp_tube_constructor (GType type, - guint n_props, - GObjectConstructParam *props) -{ - GObject *self; - EmpathyTpTubePriv *priv; - - self = G_OBJECT_CLASS (empathy_tp_tube_parent_class)->constructor ( - type, n_props, props); - priv = GET_PRIV (self); - - g_signal_connect (priv->channel, "invalidated", - G_CALLBACK (tp_tube_invalidated_cb), self); - - priv->ready = FALSE; - - tp_cli_channel_interface_tube_connect_to_tube_channel_state_changed ( - priv->channel, tp_tube_state_changed_cb, NULL, NULL, - self, NULL); - - tp_cli_dbus_properties_call_get (priv->channel, -1, - TP_IFACE_CHANNEL_INTERFACE_TUBE, "State", got_tube_state_cb, - self, NULL, G_OBJECT (self)); - - return self; -} - -static void -tp_tube_finalize (GObject *object) -{ - EmpathyTpTube *self = EMPATHY_TP_TUBE (object); - EmpathyTpTubePriv *priv = GET_PRIV (object); - GSList *l; - - DEBUG ("Finalizing: %p", object); - - if (priv->channel) - { - g_signal_handlers_disconnect_by_func (priv->channel, - tp_tube_invalidated_cb, object); - tp_cli_channel_call_close (priv->channel, -1, tp_tube_async_cb, - "closing tube", NULL, NULL); - g_object_unref (priv->channel); - } - - for (l = priv->ready_callbacks; l != NULL; l = g_slist_next (l)) - { - ReadyCbData *d = (ReadyCbData *) l->data; - - ready_cb_data_free (d, self); - } - - g_slist_free (priv->ready_callbacks); - priv->ready_callbacks = NULL; - - G_OBJECT_CLASS (empathy_tp_tube_parent_class)->finalize (object); -} - -static void -empathy_tp_tube_class_init (EmpathyTpTubeClass *klass) -{ - GObjectClass *object_class = G_OBJECT_CLASS (klass); - - object_class->constructor = tp_tube_constructor; - object_class->finalize = tp_tube_finalize; - object_class->set_property = tp_tube_set_property; - object_class->get_property = tp_tube_get_property; - - /** - * EmpathyTpTube:channel: - * - * The #TpChannel wrapped by the tube object. - */ - g_object_class_install_property (object_class, PROP_CHANNEL, - g_param_spec_object ("channel", "channel", "channel", TP_TYPE_CHANNEL, - G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS)); - - /** - * EmpathyTpTube:state: - * - * The state of the tube. - */ - g_object_class_install_property (object_class, PROP_STATE, - g_param_spec_uint ("state", "state", "state", - 0, NUM_TP_TUBE_CHANNEL_STATES, 0, - G_PARAM_READABLE | G_PARAM_STATIC_NAME | G_PARAM_STATIC_STRINGS)); - /** - * EmpathyTpTube::destroy: - * @self: the tube object - * - * Emitted when then tube has been invalidated. - */ - signals[DESTROY] = g_signal_new ("destroy", - G_TYPE_FROM_CLASS (klass), - G_SIGNAL_RUN_LAST, - 0, NULL, NULL, - g_cclosure_marshal_VOID__VOID, - G_TYPE_NONE, 0); - - g_type_class_add_private (klass, sizeof (EmpathyTpTubePriv)); -} - -static void -empathy_tp_tube_init (EmpathyTpTube *tube) -{ - EmpathyTpTubePriv *priv = G_TYPE_INSTANCE_GET_PRIVATE (tube, - EMPATHY_TYPE_TP_TUBE, EmpathyTpTubePriv); - - tube->priv = priv; -} - -/** - * empathy_tp_tube_new: - * @channel: a #TpChannel - * - * Creates a new #EmpathyTpTube. - * - * Return value: a new #EmpathyTpTube - */ -EmpathyTpTube * -empathy_tp_tube_new (TpChannel *channel) -{ - g_return_val_if_fail (TP_IS_CHANNEL (channel), NULL); - - return g_object_new (EMPATHY_TYPE_TP_TUBE, "channel", channel, NULL); -} - -/** - * empathy_tp_tube_new_stream_tube: - * @contact: the #EmpathyContact to which the tube is offered - * @type: the type of the listening address of the local service. Either - * %TP_SOCKET_ADDRESS_TYPE_IPV4 or %TP_SOCKET_ADDRESS_TYPE_IPV6. - * @hostname: the address of the local service - * @port: the port of the local service - * @service: the service name of the tube - * @parameters: the parameters of the tube - * - * Creates and offers a new #EmpathyTpTube of ChannelType StreamTube. - * - * Return value: a new #EmpathyTpTube - */ -EmpathyTpTube * -empathy_tp_tube_new_stream_tube (EmpathyContact *contact, - TpSocketAddressType type, - const gchar *hostname, - guint port, - const gchar *service, - GHashTable *parameters) -{ - TpConnection *connection; - TpChannel *channel; - gchar *object_path; - GHashTable *params; - GValue *address; - GValue *control_param; - EmpathyTpTube *tube = NULL; - GError *error = NULL; - GHashTable *request; - GHashTable *channel_properties; - GValue *value; - - g_return_val_if_fail (EMPATHY_IS_CONTACT (contact), NULL); - g_return_val_if_fail (hostname != NULL, NULL); - g_return_val_if_fail (service != NULL, NULL); - - connection = empathy_contact_get_connection (contact); - - request = g_hash_table_new_full (g_str_hash, g_str_equal, NULL, - (GDestroyNotify) tp_g_value_slice_free); - - /* org.freedesktop.Telepathy.Channel.ChannelType */ - value = tp_g_value_slice_new (G_TYPE_STRING); - g_value_set_string (value, TP_IFACE_CHANNEL_TYPE_STREAM_TUBE); - g_hash_table_insert (request, TP_IFACE_CHANNEL ".ChannelType", value); - - /* org.freedesktop.Telepathy.Channel.TargetHandleType */ - value = tp_g_value_slice_new (G_TYPE_UINT); - g_value_set_uint (value, TP_HANDLE_TYPE_CONTACT); - g_hash_table_insert (request, TP_IFACE_CHANNEL ".TargetHandleType", value); - - /* org.freedesktop.Telepathy.Channel.TargetHandleType */ - value = tp_g_value_slice_new (G_TYPE_UINT); - g_value_set_uint (value, empathy_contact_get_handle (contact)); - g_hash_table_insert (request, TP_IFACE_CHANNEL ".TargetHandle", value); - - /* org.freedesktop.Telepathy.Channel.Type.StreamTube.Service */ - value = tp_g_value_slice_new (G_TYPE_STRING); - g_value_set_string (value, service); - g_hash_table_insert (request, - TP_IFACE_CHANNEL_TYPE_STREAM_TUBE ".Service", value); - - if (!tp_cli_connection_interface_requests_run_create_channel (connection, -1, - request, &object_path, &channel_properties, &error, NULL)) - { - DEBUG ("Error requesting channel: %s", error->message); - g_clear_error (&error); - g_object_unref (connection); - return NULL; - } - - DEBUG ("Offering a new stream tube"); - - channel = tp_channel_new_from_properties (connection, object_path, - channel_properties, NULL); - - tp_channel_run_until_ready (channel, NULL, NULL); - - #define ADDRESS_TYPE dbus_g_type_get_struct ("GValueArray",\ - G_TYPE_STRING, G_TYPE_UINT, G_TYPE_INVALID) - params = g_hash_table_new (g_str_hash, g_str_equal); - address = tp_g_value_slice_new (ADDRESS_TYPE); - g_value_take_boxed (address, dbus_g_type_specialized_construct (ADDRESS_TYPE)); - dbus_g_type_struct_set (address, 0, hostname, 1, port, G_MAXUINT); - control_param = tp_g_value_slice_new (G_TYPE_STRING); - - if (parameters == NULL) - /* Pass an empty dict as parameters */ - parameters = g_hash_table_new (g_str_hash, g_str_equal); - else - g_hash_table_ref (parameters); - - if (!tp_cli_channel_type_stream_tube_run_offer (channel, -1, type, address, - TP_SOCKET_ACCESS_CONTROL_LOCALHOST, parameters, - &error, NULL)) - { - DEBUG ("Couldn't offer tube: %s", error->message); - g_clear_error (&error); - goto OUT; - } - - DEBUG ("Stream tube offered"); - - tube = empathy_tp_tube_new (channel); - -OUT: - g_object_unref (channel); - g_free (object_path); - g_hash_table_destroy (request); - g_hash_table_destroy (channel_properties); - tp_g_value_slice_free (address); - tp_g_value_slice_free (control_param); - g_object_unref (connection); - g_hash_table_unref (parameters); - - return tube; -} - -static void -tp_tube_accept_stream_cb (TpChannel *channel, - const GValue *address, - const GError *error, - gpointer user_data, - GObject *weak_object) -{ - EmpathyTpTube *tube = EMPATHY_TP_TUBE (weak_object); - EmpathyTpTubeAcceptData *data = (EmpathyTpTubeAcceptData *) user_data; - EmpathyTpTubeAddress eaddress; - - eaddress.type = data->type; - - if (error) - { - DEBUG ("Error accepting tube: %s", error->message); - data->callback (tube, NULL, error, data->user_data); - return; - } - - switch (eaddress.type) - { - case TP_SOCKET_ADDRESS_TYPE_UNIX: - case TP_SOCKET_ADDRESS_TYPE_ABSTRACT_UNIX: - eaddress.a.socket.path = g_value_get_boxed (address); - break; - case TP_SOCKET_ADDRESS_TYPE_IPV4: - case TP_SOCKET_ADDRESS_TYPE_IPV6: - dbus_g_type_struct_get (address, - 0, &eaddress.a.inet.hostname, - 1, &eaddress.a.inet.port, G_MAXUINT); - break; - } - - data->callback (tube, &eaddress, NULL, data->user_data); -} - -/** - * empathy_tp_tube_accept_stream_tube: - * @tube: an #EmpathyTpTube - * @type: the type of address the connection manager should listen on - * @callback: called when the tube has been accepted - * @user_data: arbitrary user-supplied data passed to the callback - * - * Accepts @tube of ChannelType StreamTube and call @callback once it's done. - */ -void -empathy_tp_tube_accept_stream_tube (EmpathyTpTube *tube, - TpSocketAddressType type, - EmpathyTpTubeAcceptStreamTubeCb *callback, - gpointer user_data) -{ - EmpathyTpTubePriv *priv = GET_PRIV (tube); - GValue *control_param; - EmpathyTpTubeAcceptData *data; - - g_return_if_fail (EMPATHY_IS_TP_TUBE (tube)); - - DEBUG ("Accepting stream tube"); - /* FIXME allow other acls */ - control_param = tp_g_value_slice_new (G_TYPE_STRING); - - data = new_empathy_tp_tube_accept_data (type, callback, user_data); - - tp_cli_channel_type_stream_tube_call_accept ( - priv->channel, -1, type, TP_SOCKET_ACCESS_CONTROL_LOCALHOST, - control_param, tp_tube_accept_stream_cb, data, - free_empathy_tp_tube_accept_data, G_OBJECT (tube)); - - tp_g_value_slice_free (control_param); -} - -/** - * EmpathyTpTubeReadyCb: - * @tube: an #EmpathyTpTube - * @error: %NULL on success, or the reason why the tube can't be ready - * @user_data: the @user_data passed to empathy_tp_tube_call_when_ready() - * @weak_object: the @weak_object passed to - * empathy_tp_tube_call_when_ready() - * - * Called as the result of empathy_tp_tube_call_when_ready(). If the - * tube's properties could be retrieved, - * @error is %NULL and @tube is considered to be ready. Otherwise, @error is - * non-%NULL and @tube is not ready. - */ - -/** - * empathy_tp_tube_call_when_ready: - * @tube: an #EmpathyTpTube - * @callback: called when the tube becomes ready - * @user_data: arbitrary user-supplied data passed to the callback - * @destroy: called to destroy @user_data - * @weak_object: object to reference weakly; if it is destroyed, @callback - * will not be called, but @destroy will still be called - * - * If @tube is ready for use, call @callback immediately, then return. - * Otherwise, arrange for @callback to be called when @tube becomes - * ready for use. - */ -void -empathy_tp_tube_call_when_ready (EmpathyTpTube *self, - EmpathyTpTubeReadyCb *callback, - gpointer user_data, - GDestroyNotify destroy, - GObject *weak_object) -{ - EmpathyTpTubePriv *priv = GET_PRIV (self); - - g_return_if_fail (self != NULL); - g_return_if_fail (callback != NULL); - - if (priv->ready) - { - callback (self, NULL, user_data, weak_object); - if (destroy != NULL) - destroy (user_data); - } - else - { - priv->ready_callbacks = g_slist_prepend (priv->ready_callbacks, - ready_cb_data_new (self, callback, user_data, destroy, weak_object)); - } -} diff --git a/libempathy/empathy-tp-tube.h b/libempathy/empathy-tp-tube.h deleted file mode 100644 index 79cffa1a2..000000000 --- a/libempathy/empathy-tp-tube.h +++ /dev/null @@ -1,103 +0,0 @@ -/* - * Copyright (C) 2008 Collabora Ltd. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - * - * Authors: Guillaume Desmottes <guillaume.desmottes@collabora.co.uk> - * Elliot Fairweather <elliot.fairweather@collabora.co.uk> - */ - -#ifndef __EMPATHY_TP_TUBE_H__ -#define __EMPATHY_TP_TUBE_H__ - -#include <glib-object.h> - -#include <telepathy-glib/channel.h> - -#include "empathy-contact.h" - -G_BEGIN_DECLS - -#define EMPATHY_TYPE_TP_TUBE (empathy_tp_tube_get_type ()) -#define EMPATHY_TP_TUBE(object) (G_TYPE_CHECK_INSTANCE_CAST ((object), \ - EMPATHY_TYPE_TP_TUBE, EmpathyTpTube)) -#define EMPATHY_TP_TUBE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), \ - EMPATHY_TYPE_TP_TUBE, EmpathyTpTubeClass)) -#define EMPATHY_IS_TP_TUBE(object) (G_TYPE_CHECK_INSTANCE_TYPE ((object), \ - EMPATHY_TYPE_TP_TUBE)) -#define EMPATHY_IS_TP_TUBE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), \ - EMPATHY_TYPE_TP_TUBE)) -#define EMPATHY_TP_TUBE_GET_CLASS(object) (G_TYPE_INSTANCE_GET_CLASS ((object), \ - EMPATHY_TYPE_TP_TUBE, EmpathyTpTubeClass)) - -typedef struct _EmpathyTpTube EmpathyTpTube; -typedef struct _EmpathyTpTubeClass EmpathyTpTubeClass; - -typedef struct { - TpSocketAddressType type; - union { - struct socket_address_t { - GArray *path; - } socket; - struct inet_address_t { - gchar *hostname; - guint port; - } inet; - } a; -} EmpathyTpTubeAddress; - -struct _EmpathyTpTube { - GObject parent; - gpointer priv; -}; - -struct _EmpathyTpTubeClass { - GObjectClass parent_class; -}; - -GType empathy_tp_tube_get_type (void) G_GNUC_CONST; -EmpathyTpTube *empathy_tp_tube_new (TpChannel *channel); -EmpathyTpTube *empathy_tp_tube_new_stream_tube (EmpathyContact *contact, - TpSocketAddressType type, - const gchar *hostname, - guint port, - const gchar *service, - GHashTable *parameters); - -typedef void (EmpathyTpTubeAcceptStreamTubeCb) (EmpathyTpTube *tube, - const EmpathyTpTubeAddress *address, - const GError *error, - gpointer user_data); - -void empathy_tp_tube_accept_stream_tube (EmpathyTpTube *tube, - TpSocketAddressType type, - EmpathyTpTubeAcceptStreamTubeCb *callback, - gpointer user_data); - -typedef void (EmpathyTpTubeReadyCb) - (EmpathyTpTube *tube, - const GError *error, - gpointer user_data, - GObject *weak_object); - -void empathy_tp_tube_call_when_ready (EmpathyTpTube *tube, - EmpathyTpTubeReadyCb *callback, - gpointer user_data, - GDestroyNotify destroy, - GObject *weak_object); - -G_END_DECLS - -#endif /* __EMPATHY_TP_TUBE_H__ */ diff --git a/libempathy/empathy-tube-handler.c b/libempathy/empathy-tube-handler.c index bbb7e11a6..2b50ec852 100644 --- a/libempathy/empathy-tube-handler.c +++ b/libempathy/empathy-tube-handler.c @@ -31,7 +31,6 @@ #include <extensions/extensions.h> -#include "empathy-tp-tube.h" #include "empathy-tube-handler.h" #define DEBUG_FLAG EMPATHY_DEBUG_OTHER @@ -59,21 +58,10 @@ typedef struct gchar *channel; guint handle_type; guint handle; - EmpathyTpTube *tube; + TpChannel *tube; } IdleData; static void -tube_ready_cb (EmpathyTpTube *tube, - const GError *error, - gpointer user_data, - GObject *weak_object) -{ - IdleData *idle_data = user_data; - - g_signal_emit (idle_data->thandler, signals[NEW_TUBE], 0, tube); -} - -static void tube_ready_destroy_notify (gpointer data) { IdleData *idle_data = data; @@ -100,9 +88,7 @@ channel_ready_cb (TpChannel *channel, return; } - idle_data->tube = empathy_tp_tube_new (channel); - empathy_tp_tube_call_when_ready (idle_data->tube, tube_ready_cb, idle_data, - tube_ready_destroy_notify, NULL); + g_signal_emit (idle_data->thandler, signals[NEW_TUBE], 0, idle_data->tube); g_object_unref (channel); } @@ -183,7 +169,7 @@ empathy_tube_handler_class_init (EmpathyTubeHandlerClass *klass) signals[NEW_TUBE] = g_signal_new ("new-tube", G_OBJECT_CLASS_TYPE (klass), G_SIGNAL_RUN_LAST, 0, NULL, NULL, g_cclosure_marshal_VOID__OBJECT, - G_TYPE_NONE, 1, EMPATHY_TYPE_TP_TUBE); + G_TYPE_NONE, 1, TP_TYPE_CHANNEL); } static void @@ -8,8 +8,8 @@ msgstr "" "Project-Id-Version: empathy.HEAD\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?" "product=empathy&component=general\n" -"POT-Creation-Date: 2009-06-04 16:15+0000\n" -"PO-Revision-Date: 2009-06-06 12:46+0200\n" +"POT-Creation-Date: 2009-06-11 11:12+0000\n" +"PO-Revision-Date: 2009-06-11 14:30+0200\n" "Last-Translator: Jorge González <jorgegonz@svn.gnome.org>\n" "Language-Team: Español <gnome-es-list@gnome.org>\n" "MIME-Version: 1.0\n" @@ -411,7 +411,7 @@ msgstr "El «hash» del archivo recibido y del enviado no coinciden" msgid "File transfer not supported by remote contact" msgstr "El contacto remoto no soporta la transferencia de archivos" -#: ../libempathy/empathy-tp-contact-list.c:727 ../src/empathy.c:286 +#: ../libempathy/empathy-tp-contact-list.c:757 ../src/empathy.c:286 msgid "People nearby" msgstr "Gente cerca" @@ -796,7 +796,7 @@ msgstr "%s ha entrado en la sala" msgid "%s has left the room" msgstr "%s ha dejado la sala" -#: ../libempathy-gtk/empathy-chat.c:1289 ../src/empathy-call-window.c:1014 +#: ../libempathy-gtk/empathy-chat.c:1289 ../src/empathy-call-window.c:1108 msgid "Disconnected" msgstr "Desconectado" @@ -1583,21 +1583,21 @@ msgstr "Un cliente de mensajería instantánea para GNOME" msgid "translator-credits" msgstr "Jorge González <jorgegonz@svn.gnome.org>, 2007-2009" -#: ../src/empathy-accounts-dialog.c:391 +#: ../src/empathy-accounts-dialog.c:393 msgid "Enabled" msgstr "Activado" -#: ../src/empathy-accounts-dialog.c:401 ../src/empathy-accounts-dialog.ui.h:4 +#: ../src/empathy-accounts-dialog.c:403 ../src/empathy-accounts-dialog.ui.h:4 msgid "Accounts" msgstr "Cuentas" #. To translator: %s is the protocol name -#: ../src/empathy-accounts-dialog.c:834 +#: ../src/empathy-accounts-dialog.c:837 #, c-format msgid "New %s account" msgstr "Cuenta de %s nueva" -#: ../src/empathy-accounts-dialog.c:944 +#: ../src/empathy-accounts-dialog.c:950 #, c-format msgid "" "You are about to remove your %s account!\n" @@ -1606,7 +1606,7 @@ msgstr "" "Va a eliminar su cuenta %s\n" "¿Seguro que quiere continuar?" -#: ../src/empathy-accounts-dialog.c:950 +#: ../src/empathy-accounts-dialog.c:956 msgid "" "Any associated conversations and chat rooms will NOT be removed if you " "decide to proceed.\n" @@ -1620,8 +1620,9 @@ msgstr "" "Si decidiera volver a añadir la cuenta más tarde, estarán aún disponibles." #: ../src/empathy-accounts-dialog.ui.h:1 -msgid "<b>New Account</b>" -msgstr "<b>Nueva cuenta</b>" +#| msgid "<b>New Account</b>" +msgid "<b>Add Account</b>" +msgstr "<b>Añadir cuenta</b>" #: ../src/empathy-accounts-dialog.ui.h:2 msgid "<b>No protocol installed</b>" @@ -1636,14 +1637,10 @@ msgid "Cr_eate" msgstr "Cr_ear" #: ../src/empathy-accounts-dialog.ui.h:6 -msgid "I already have an account I want to use" -msgstr "Ya tengo una cuenta que quiero usar" - -#: ../src/empathy-accounts-dialog.ui.h:7 msgid "Import Accounts..." msgstr "Importar cuentas…" -#: ../src/empathy-accounts-dialog.ui.h:8 +#: ../src/empathy-accounts-dialog.ui.h:7 msgid "" "To add a new account, you first have to install a backend for each protocol " "you want to use." @@ -1651,61 +1648,71 @@ msgstr "" "Para añadir una nueva cuenta debe instalar primero un «backend» para cada " "protocolo que quiera usar." -#: ../src/empathy-accounts-dialog.ui.h:9 +#: ../src/empathy-accounts-dialog.ui.h:8 msgid "Type:" msgstr "Tipo:" -#: ../src/empathy-accounts-dialog.ui.h:10 +#: ../src/empathy-accounts-dialog.ui.h:9 msgid "_Add..." msgstr "_Añadir…" -#: ../src/empathy-call-window.c:382 +#: ../src/empathy-accounts-dialog.ui.h:10 +#| msgid "Create a new IRC network" +msgid "_Create a new account" +msgstr "_Crear una cuenta nueva" + +#: ../src/empathy-accounts-dialog.ui.h:11 +#| msgid "Show and edit accounts" +msgid "_Reuse an existing account" +msgstr "_Usar una cuenta ya existente" + +#: ../src/empathy-call-window.c:63 +msgid "Connecting..." +msgstr "Conectando…" + +#: ../src/empathy-call-window.c:405 msgid "Contrast" msgstr "Contraste" -#: ../src/empathy-call-window.c:385 +#: ../src/empathy-call-window.c:408 msgid "Brightness" msgstr "Brillo" -#: ../src/empathy-call-window.c:388 +#: ../src/empathy-call-window.c:411 msgid "Gamma" msgstr "Gamma" -#: ../src/empathy-call-window.c:492 +#: ../src/empathy-call-window.c:516 msgid "Volume" msgstr "Volumen" -#: ../src/empathy-call-window.c:638 +#: ../src/empathy-call-window.c:697 msgid "_Sidebar" msgstr "Barra _lateral" -#: ../src/empathy-call-window.c:657 +#: ../src/empathy-call-window.c:716 msgid "Dialpad" msgstr "Teclado de llamada" -#: ../src/empathy-call-window.c:663 +#: ../src/empathy-call-window.c:722 msgid "Audio input" msgstr "Entrada de sonido" -#: ../src/empathy-call-window.c:667 +#: ../src/empathy-call-window.c:726 msgid "Video input" msgstr "Entrada de vídeo" -#: ../src/empathy-call-window.c:691 -msgid "Connecting..." -msgstr "Conectando…" - -#: ../src/empathy-call-window.c:730 +#: ../src/empathy-call-window.c:789 #, c-format msgid "Call with %s" msgstr "Llamar con %s" -#: ../src/empathy-call-window.c:801 +#: ../src/empathy-call-window.c:860 msgid "Call" msgstr "Llamar" #. Translators: number of minutes:seconds the caller has been connected -#: ../src/empathy-call-window.c:1096 +#: ../src/empathy-call-window.c:1204 #, c-format msgid "Connected — %d:%02dm" msgstr "Conectado — %d:%02dm" @@ -1715,22 +1722,26 @@ msgid "Hang up" msgstr "Colgar" #: ../src/empathy-call-window.ui.h:2 +msgid "Redial" +msgstr "Volver a llamar" + +#: ../src/empathy-call-window.ui.h:3 msgid "Send Audio" msgstr "Enviar sonido" -#: ../src/empathy-call-window.ui.h:3 +#: ../src/empathy-call-window.ui.h:4 msgid "Send video" msgstr "Enviar vídeo" -#: ../src/empathy-call-window.ui.h:4 +#: ../src/empathy-call-window.ui.h:5 msgid "Video preview" msgstr "Vista preliminar de vídeo" -#: ../src/empathy-call-window.ui.h:5 +#: ../src/empathy-call-window.ui.h:6 msgid "_Call" msgstr "_Llamar" -#: ../src/empathy-call-window.ui.h:6 ../src/empathy-main-window.ui.h:21 +#: ../src/empathy-call-window.ui.h:7 ../src/empathy-main-window.ui.h:21 msgid "_View" msgstr "_Ver" @@ -1739,15 +1750,15 @@ msgstr "_Ver" msgid "Conversations (%d)" msgstr "Conversaciones (%d)" -#: ../src/empathy-chat-window.c:449 +#: ../src/empathy-chat-window.c:470 msgid "Topic:" msgstr "Tema:" -#: ../src/empathy-chat-window.c:454 +#: ../src/empathy-chat-window.c:474 msgid "Typing a message." msgstr "Tecleando un mensaje." -#: ../src/empathy-chat-window.c:917 ../src/empathy-event-manager.c:429 +#: ../src/empathy-chat-window.c:935 ../src/empathy-event-manager.c:429 #, c-format msgid "New message from %s" msgstr "Nuevo mensaje de %s" @@ -2411,23 +2422,19 @@ msgid "Contact Map View" msgstr "Vista del mapa de contactos" #: ../src/empathy-debug-dialog.c:111 ../src/empathy-debug-dialog.c:1075 -#| msgid "Error:" msgid "Error" msgstr "Error" #: ../src/empathy-debug-dialog.c:114 ../src/empathy-debug-dialog.c:1069 -#| msgid "Croatian" msgid "Critical" msgstr "Crítico" #: ../src/empathy-debug-dialog.c:117 ../src/empathy-debug-dialog.c:1063 -#| msgid "Remaining" msgid "Warning" msgstr "Advertencia" #: ../src/empathy-debug-dialog.c:120 ../src/empathy-debug-dialog.c:1057 #: ../src/empathy-debug-dialog.c:1105 -#| msgid "Message:" msgid "Message" msgstr "Mensaje" @@ -2439,12 +2446,11 @@ msgstr "Información" msgid "Debug" msgstr "Depurar" -#: ../src/empathy-debug-dialog.c:836 -#| msgid "State:" +#: ../src/empathy-debug-dialog.c:837 msgid "Save" msgstr "Guardar" -#: ../src/empathy-debug-dialog.c:939 +#: ../src/empathy-debug-dialog.c:940 msgid "Debug Window" msgstr "Depurar ventana" @@ -2457,12 +2463,10 @@ msgid "Level " msgstr "Nivel " #: ../src/empathy-debug-dialog.c:1094 -#| msgid "Simple" msgid "Time" msgstr "Hora" #: ../src/empathy-debug-dialog.c:1096 -#| msgid "Romanian" msgid "Domain" msgstr "Dominio" @@ -2474,7 +2478,7 @@ msgstr "Categoría" msgid "Level" msgstr "Nivel" -#: ../src/empathy-debug-dialog.c:1133 +#: ../src/empathy-debug-dialog.c:1132 msgid "" "The selected connection manager does not support the remote debugging " "extension." @@ -2482,6 +2486,9 @@ msgstr "" "El gestor de conexiones seleccionado no soporta la extensión de depuración " "remota." +#~ msgid "I already have an account I want to use" +#~ msgstr "Ya tengo una cuenta que quiero usar" + #~ msgctxt "file size" #~ msgid "Unknown" #~ msgstr "Desconocido" @@ -2558,9 +2565,6 @@ msgstr "" #~ msgid "Forget password and clear the entry." #~ msgstr "Olvidar la contraseña y limpiar la entrada." -#~ msgid "Create a new IRC network" -#~ msgstr "Crear una red IRC nueva" - #~ msgid "Edit the selected IRC network" #~ msgstr "Editar la red IRC seleccionada" @@ -5,10 +5,9 @@ msgid "" msgstr "" "Project-Id-Version: empathy\n" -"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?" -"product=empathy&component=general\n" -"POT-Creation-Date: 2009-01-11 22:12+0000\n" -"PO-Revision-Date: 2008-02-23 19:56+0200\n" +"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=empathy&component=general\n" +"POT-Creation-Date: 2009-06-11 18:53+0000\n" +"PO-Revision-Date: 2009-06-11 23:07+0200\n" "Last-Translator: Mark Krapivner <mark125@gmail.com>\n" "Language-Team: \n" "MIME-Version: 1.0\n" @@ -23,29 +22,23 @@ msgstr "Empathy - מסרים מיידיים" #: ../data/empathy.desktop.in.in.h:2 msgid "Send and receive instant messages" -msgstr "שלח וקבל מסרים מיידיים" +msgstr "שלח וקבל מסרים מידיים" #: ../data/empathy.schemas.in.h:1 msgid "Always open a separate chat window for new chats." msgstr "Always open a separate chat window for new chats." #: ../data/empathy.schemas.in.h:2 -msgid "" -"Character to add after nickname when using nick completion (tab) in group " -"chat." -msgstr "" -"Character to add after nickname when using nick completion (tab) in group " -"chat." +msgid "Character to add after nickname when using nick completion (tab) in group chat." +msgstr "Character to add after nickname when using nick completion (tab) in group chat." #: ../data/empathy.schemas.in.h:3 msgid "Chat window theme" msgstr "Chat window theme" #: ../data/empathy.schemas.in.h:4 -msgid "" -"Comma separated list of spell checker languages to use (e.g. en, fr, nl)." -msgstr "" -"Comma separated list of spell checker languages to use (e.g. en, fr, nl)." +msgid "Comma separated list of spell checker languages to use (e.g. en, fr, nl)." +msgstr "Comma separated list of spell checker languages to use (e.g. en, fr, nl)." #: ../data/empathy.schemas.in.h:5 msgid "Compact contact list" @@ -60,1021 +53,1186 @@ msgid "Default directory to select an avatar image from" msgstr "Default directory to select an avatar image from" #: ../data/empathy.schemas.in.h:8 -#| msgid "Enable sound when away" +msgid "Disable popup notifications when away" +msgstr "Disable popup notifications when away" + +#: ../data/empathy.schemas.in.h:9 msgid "Disable sounds when away" msgstr "Disable sounds when away" -#: ../data/empathy.schemas.in.h:9 +#: ../data/empathy.schemas.in.h:10 +msgid "Empathy can publish the user's location" +msgstr "Empathy can publish the user's location" + +#: ../data/empathy.schemas.in.h:11 +msgid "Empathy can use the GPS to guess the location" +msgstr "Empathy can use the GPS to guess the location" + +#: ../data/empathy.schemas.in.h:12 +msgid "Empathy can use the cellular network to guess the location" +msgstr "Empathy can use the cellular network to guess the location" + +#: ../data/empathy.schemas.in.h:13 +msgid "Empathy can use the network to guess the location" +msgstr "Empathy can use the network to guess the location" + +#: ../data/empathy.schemas.in.h:14 msgid "Empathy default download folder" msgstr "Empathy default download folder" -#: ../data/empathy.schemas.in.h:10 +#: ../data/empathy.schemas.in.h:15 msgid "Empathy has asked about importing accounts" msgstr "Empathy has asked about importing accounts" -#: ../data/empathy.schemas.in.h:11 +#: ../data/empathy.schemas.in.h:16 msgid "Empathy should auto-connect on startup" msgstr "Empathy should auto-connect on startup" -#: ../data/empathy.schemas.in.h:12 +#: ../data/empathy.schemas.in.h:17 +msgid "Empathy should reduce the location's accuracy" +msgstr "Empathy should reduce the location's accuracy" + +#: ../data/empathy.schemas.in.h:18 msgid "Empathy should use the avatar of the contact as the chat window icon" msgstr "Empathy should use the avatar of the contact as the chat window icon" -#: ../data/empathy.schemas.in.h:13 -msgid "Enable popup when contact is available" -msgstr "Enable popup when contact is available" +#: ../data/empathy.schemas.in.h:19 +msgid "Enable popup notifications for new messages" +msgstr "Enable popup notifications for new messages" -#: ../data/empathy.schemas.in.h:14 +#: ../data/empathy.schemas.in.h:20 msgid "Enable spell checker" msgstr "Enable spell checker" -#: ../data/empathy.schemas.in.h:15 +#: ../data/empathy.schemas.in.h:21 msgid "Hide main window" msgstr "Hide main window" -#: ../data/empathy.schemas.in.h:16 +#: ../data/empathy.schemas.in.h:22 msgid "Hide the main window." msgstr "Hide the main window." -#: ../data/empathy.schemas.in.h:17 +#: ../data/empathy.schemas.in.h:23 msgid "NetworkManager should be used" msgstr "NetworkManager should be used" -#: ../data/empathy.schemas.in.h:18 +#: ../data/empathy.schemas.in.h:24 msgid "Nick completed character" msgstr "Nick completed character" -#: ../data/empathy.schemas.in.h:19 +#: ../data/empathy.schemas.in.h:25 msgid "Open new chats in separate windows" msgstr "Open new chats in separate windows" -#: ../data/empathy.schemas.in.h:20 +#: ../data/empathy.schemas.in.h:26 +msgid "Path of the adium theme to use" +msgstr "" + +#: ../data/empathy.schemas.in.h:27 #, fuzzy -#| msgid "_Play sound when messages arrive" +msgid "Path of the adium theme to use if the theme used for chat is adium." +msgstr "Whether to use the theme for chat rooms or not." + +#: ../data/empathy.schemas.in.h:28 msgid "Play a sound for incoming messages" -msgstr "_נגן צליל כשמתקבלת הודעה" +msgstr "Play a sound for incoming messages" -#: ../data/empathy.schemas.in.h:21 +#: ../data/empathy.schemas.in.h:29 msgid "Play a sound for new conversations" -msgstr "" +msgstr "Play a sound for new conversations" -#: ../data/empathy.schemas.in.h:22 -#, fuzzy -#| msgid "_Play sound when messages arrive" +#: ../data/empathy.schemas.in.h:30 msgid "Play a sound for outgoing messages" -msgstr "_נגן צליל כשמתקבלת הודעה" +msgstr "Play a sound for outgoing messages" -#: ../data/empathy.schemas.in.h:23 -#, fuzzy -#| msgid "_Play sound when messages arrive" +#: ../data/empathy.schemas.in.h:31 msgid "Play a sound when a contact logs in" -msgstr "_נגן צליל כשמתקבלת הודעה" +msgstr "Play a sound when a contact logs in" -#: ../data/empathy.schemas.in.h:24 +#: ../data/empathy.schemas.in.h:32 msgid "Play a sound when a contact logs out" -msgstr "" +msgstr "Play a sound when a contact logs out" -#: ../data/empathy.schemas.in.h:25 -#, fuzzy -#| msgid "_Play sound when messages arrive" +#: ../data/empathy.schemas.in.h:33 msgid "Play a sound when we log in" -msgstr "_נגן צליל כשמתקבלת הודעה" +msgstr "Play a sound when we log in" -#: ../data/empathy.schemas.in.h:26 -#, fuzzy -#| msgid "_Play sound when messages arrive" +#: ../data/empathy.schemas.in.h:34 msgid "Play a sound when we log out" -msgstr "_נגן צליל כשמתקבלת הודעה" +msgstr "Play a sound when we log out" -#: ../data/empathy.schemas.in.h:27 +#: ../data/empathy.schemas.in.h:35 +msgid "Popup notifications if the chat isn't focused" +msgstr "Popup notifications if the chat isn't focused" + +#: ../data/empathy.schemas.in.h:36 msgid "Salut account is created" msgstr "Salut account is created" -#: ../data/empathy.schemas.in.h:28 +#: ../data/empathy.schemas.in.h:37 msgid "Show avatars" msgstr "Show avatars" -#: ../data/empathy.schemas.in.h:29 +#: ../data/empathy.schemas.in.h:38 msgid "Show hint about closing the main window" msgstr "Show hint about closing the main window" -#: ../data/empathy.schemas.in.h:30 +#: ../data/empathy.schemas.in.h:39 msgid "Show offline contacts" msgstr "Show offline contacts" -#: ../data/empathy.schemas.in.h:31 +#: ../data/empathy.schemas.in.h:40 msgid "Spell checking languages" msgstr "Spell checking languages" -#: ../data/empathy.schemas.in.h:32 +#: ../data/empathy.schemas.in.h:41 msgid "The default folder to save file transfers in." msgstr "The default folder to save file transfers in." -#: ../data/empathy.schemas.in.h:33 +#: ../data/empathy.schemas.in.h:42 msgid "The last directory that an avatar image was chosen from." msgstr "The last directory that an avatar image was chosen from." -#: ../data/empathy.schemas.in.h:34 +#: ../data/empathy.schemas.in.h:43 msgid "The theme that is used to display the conversation in chat windows." msgstr "The theme that is used to display the conversation in chat windows." -#: ../data/empathy.schemas.in.h:35 +#: ../data/empathy.schemas.in.h:44 msgid "Use graphical smileys" msgstr "Use graphical smileys" -#: ../data/empathy.schemas.in.h:36 +#: ../data/empathy.schemas.in.h:45 msgid "Use notification sounds" msgstr "Use notification sounds" -#: ../data/empathy.schemas.in.h:37 +#: ../data/empathy.schemas.in.h:46 msgid "Use theme for chat rooms" msgstr "Use theme for chat rooms" -#: ../data/empathy.schemas.in.h:38 -#| msgid "" -#| "Whether or not Empathy should automatically log in to your accounts on " -#| "startup." -msgid "" -"Whether or not Empathy has asked about importing accounts from other " -"programs." -msgstr "" -"Whether or not Empathy has asked about importing accounts from other " -"programs." +#: ../data/empathy.schemas.in.h:47 +msgid "Whether or not Empathy can publish the user's location to his contacts." +msgstr "Whether or not Empathy can publish the user's location to his contacts." -#: ../data/empathy.schemas.in.h:39 -msgid "" -"Whether or not Empathy should automatically log in to your accounts on " -"startup." -msgstr "" -"Whether or not Empathy should automatically log in to your accounts on " -"startup." +#: ../data/empathy.schemas.in.h:48 +msgid "Whether or not Empathy can use the GPS to guess the location." +msgstr "Whether or not Empathy can use the GPS to guess the location." -#: ../data/empathy.schemas.in.h:40 -msgid "" -"Whether or not Empathy should use the avatar of the contact as the chat " -"window icon." -msgstr "" -"Whether or not Empathy should use the avatar of the contact as the chat " -"window icon." +#: ../data/empathy.schemas.in.h:49 +msgid "Whether or not Empathy can use the cellular network to guess the location." +msgstr "Whether or not Empathy can use the cellular network to guess the location." -#: ../data/empathy.schemas.in.h:41 -msgid "" -"Whether or not the Salut account has been created on the first Empathy run." -msgstr "" -"Whether or not the Salut account has been created on the first Empathy run." +#: ../data/empathy.schemas.in.h:50 +msgid "Whether or not Empathy can use the network to guess the location." +msgstr "Whether or not Empathy can use the network to guess the location." -#: ../data/empathy.schemas.in.h:42 -msgid "" -"Whether or not the network manager should be used to automatically " -"disconnect/reconnect." -msgstr "" -"Whether or not the network manager should be used to automatically " -"disconnect/reconnect." +#: ../data/empathy.schemas.in.h:51 +msgid "Whether or not Empathy has asked about importing accounts from other programs." +msgstr "Whether or not Empathy has asked about importing accounts from other programs." -#: ../data/empathy.schemas.in.h:43 -msgid "" -"Whether or not to check words typed against the languages you want to check " -"with." -msgstr "" -"Whether or not to check words typed against the languages you want to check " -"with." +#: ../data/empathy.schemas.in.h:52 +msgid "Whether or not Empathy should automatically log in to your accounts on startup." +msgstr "Whether or not Empathy should automatically log in to your accounts on startup." -#: ../data/empathy.schemas.in.h:44 -msgid "" -"Whether or not to convert smileys into graphical images in conversations." -msgstr "" -"Whether or not to convert smileys into graphical images in conversations." +#: ../data/empathy.schemas.in.h:53 +msgid "Whether or not Empathy should reduce the location's accuracy for privacy reasons." +msgstr "Whether or not Empathy should reduce the location's accuracy for privacy reasons." -#: ../data/empathy.schemas.in.h:45 -#| msgid "Whether or not to play sounds when away." -msgid "Whether or not to play a sound notifications when away or busy." -msgstr "Whether or not to play a sound notifications when away or busy." +#: ../data/empathy.schemas.in.h:54 +msgid "Whether or not Empathy should use the avatar of the contact as the chat window icon." +msgstr "Whether or not Empathy should use the avatar of the contact as the chat window icon." -#: ../data/empathy.schemas.in.h:46 -#| msgid "" -#| "Whether or not to show avatars for contacts in the contact list and chat " -#| "windows." -msgid "" -"Whether or not to play a sound to notify for contacts logging in the network." -msgstr "" -"Whether or not to play a sound to notify for contacts logging in the network." +#: ../data/empathy.schemas.in.h:55 +msgid "Whether or not the Salut account has been created on the first Empathy run." +msgstr "Whether or not the Salut account has been created on the first Empathy run." -#: ../data/empathy.schemas.in.h:47 -#| msgid "" -#| "Whether or not to show avatars for contacts in the contact list and chat " -#| "windows." -msgid "" -"Whether or not to play a sound to notify for contacts logging off the " -"network." -msgstr "" -"Whether or not to play a sound to notify for contacts logging off the " -"network." +#: ../data/empathy.schemas.in.h:56 +msgid "Whether or not the network manager should be used to automatically disconnect/reconnect." +msgstr "Whether or not the network manager should be used to automatically disconnect/reconnect." -#: ../data/empathy.schemas.in.h:48 -#| msgid "Whether or not to play sounds when busy." +#: ../data/empathy.schemas.in.h:57 +msgid "Whether or not to check words typed against the languages you want to check with." +msgstr "Whether or not to check words typed against the languages you want to check with." + +#: ../data/empathy.schemas.in.h:58 +msgid "Whether or not to convert smileys into graphical images in conversations." +msgstr "Whether or not to convert smileys into graphical images in conversations." + +#: ../data/empathy.schemas.in.h:59 +msgid "Whether or not to play a sound to notify for contacts logging in the network." +msgstr "Whether or not to play a sound to notify for contacts logging in the network." + +#: ../data/empathy.schemas.in.h:60 +msgid "Whether or not to play a sound to notify for contacts logging off the network." +msgstr "Whether or not to play a sound to notify for contacts logging off the network." + +#: ../data/empathy.schemas.in.h:61 msgid "Whether or not to play a sound to notify for events." msgstr "Whether or not to play a sound to notify for events." -#: ../data/empathy.schemas.in.h:49 -#| msgid "Whether or not to play a sound when messages arrive." +#: ../data/empathy.schemas.in.h:62 msgid "Whether or not to play a sound to notify for incoming messages." msgstr "Whether or not to play a sound to notify for incoming messages." -#: ../data/empathy.schemas.in.h:50 -#| msgid "Whether or not to play a sound when messages arrive." +#: ../data/empathy.schemas.in.h:63 msgid "Whether or not to play a sound to notify for new conversations." msgstr "Whether or not to play a sound to notify for new conversations." -#: ../data/empathy.schemas.in.h:51 -#| msgid "Whether or not to play a sound when messages arrive." +#: ../data/empathy.schemas.in.h:64 msgid "Whether or not to play a sound to notify for outgoing messages." msgstr "Whether or not to play a sound to notify for outgoing messages." -#: ../data/empathy.schemas.in.h:52 -#| msgid "Whether or not to play sounds when away." +#: ../data/empathy.schemas.in.h:65 msgid "Whether or not to play a sound when logging in a network." msgstr "Whether or not to play a sound when logging in a network." -#: ../data/empathy.schemas.in.h:53 -#| msgid "Whether or not to play sounds when away." +#: ../data/empathy.schemas.in.h:66 msgid "Whether or not to play a sound when logging off a network." msgstr "Whether or not to play a sound when logging off a network." -#: ../data/empathy.schemas.in.h:54 -msgid "Whether or not to show a popup when a contact becomes available." -msgstr "Whether or not to show a popup when a contact becomes available." +#: ../data/empathy.schemas.in.h:67 +msgid "Whether or not to play sound notifications when away or busy." +msgstr "Whether or not to play sound notifications when away or busy." -#: ../data/empathy.schemas.in.h:55 -msgid "" -"Whether or not to show avatars for contacts in the contact list and chat " -"windows." -msgstr "" -"Whether or not to show avatars for contacts in the contact list and chat " -"windows." +#: ../data/empathy.schemas.in.h:68 +msgid "Whether or not to show a popup notification when receiving a new message even if the chat is already opened, but not focused." +msgstr "Whether or not to show a popup notification when receiving a new message even if the chat is already opened, but not focused." -#: ../data/empathy.schemas.in.h:56 +#: ../data/empathy.schemas.in.h:69 +msgid "Whether or not to show a popup notification when receiving a new message." +msgstr "Whether or not to show a popup notification when receiving a new message." + +#: ../data/empathy.schemas.in.h:70 +msgid "Whether or not to show avatars for contacts in the contact list and chat windows." +msgstr "Whether or not to show avatars for contacts in the contact list and chat windows." + +#: ../data/empathy.schemas.in.h:71 msgid "Whether or not to show contacts that are offline in the contact list." msgstr "Whether or not to show contacts that are offline in the contact list." -#: ../data/empathy.schemas.in.h:57 -msgid "" -"Whether or not to show the message dialog about closing the main window with " -"the 'x' button in the title bar." -msgstr "" -"Whether or not to show the message dialog about closing the main window with " -"the 'x' button in the title bar." +#: ../data/empathy.schemas.in.h:72 +msgid "Whether or not to show popup notifications when away or busy." +msgstr "Whether or not to show popup notifications when away or busy." -#: ../data/empathy.schemas.in.h:58 +#: ../data/empathy.schemas.in.h:73 +msgid "Whether or not to show the message dialog about closing the main window with the 'x' button in the title bar." +msgstr "Whether or not to show the message dialog about closing the main window with the 'x' button in the title bar." + +#: ../data/empathy.schemas.in.h:74 msgid "Whether to show the contact list in compact mode or not." msgstr "Whether to show the contact list in compact mode or not." -#: ../data/empathy.schemas.in.h:59 +#: ../data/empathy.schemas.in.h:75 msgid "Whether to use the theme for chat rooms or not." msgstr "Whether to use the theme for chat rooms or not." -#: ../data/empathy.schemas.in.h:60 -msgid "" -"Which criterium to use when sorting the contact list. Default is to use sort " -"by the contact's name with the value \"name\". A value of \"state\" will " -"sort the contact list by state." +#: ../data/empathy.schemas.in.h:76 +msgid "Which criterium to use when sorting the contact list. Default is to use sort by the contact's name with the value \"name\". A value of \"state\" will sort the contact list by state." +msgstr "Which criterium to use when sorting the contact list. Default is to use sort by the contact's name with the value \"name\". A value of \"state\" will sort the contact list by state." + +#: ../libempathy/empathy-ft-handler.c:838 +msgid "The hash of the received file and the sent one do not match" msgstr "" -"Which criterium to use when sorting the contact list. Default is to use sort " -"by the contact's name with the value \"name\". A value of \"state\" will " -"sort the contact list by state." -#: ../libempathy/empathy-tp-contact-list.c:731 ../src/empathy.c:267 +#: ../libempathy/empathy-ft-handler.c:1098 +msgid "File transfer not supported by remote contact" +msgstr "" + +#: ../libempathy/empathy-tp-contact-list.c:757 +#: ../src/empathy.c:286 msgid "People nearby" msgstr "" -#: ../libempathy/empathy-utils.c:251 +#: ../libempathy/empathy-tp-file.c:300 +msgid "No reason was specified" +msgstr "לא צויינה סיבה" + +#: ../libempathy/empathy-tp-file.c:303 +msgid "The change in state was requested" +msgstr "" + +#: ../libempathy/empathy-tp-file.c:306 +msgid "You canceled the file transfer" +msgstr "ביטלת את ההעברה" + +#: ../libempathy/empathy-tp-file.c:309 +msgid "The other participant canceled the file transfer" +msgstr "" + +#: ../libempathy/empathy-tp-file.c:312 +msgid "Error while trying to transfer the file" +msgstr "התרחשה שגיאה בזמן ניסיון העברת הקובץ" + +#: ../libempathy/empathy-tp-file.c:315 +msgid "The other participant is unable to transfer the file" +msgstr "" + +#: ../libempathy/empathy-tp-file.c:318 +msgid "Unknown reason" +msgstr "סיבה לא ידועה" + +#: ../libempathy/empathy-utils.c:274 msgid "Available" msgstr "זמין" -#: ../libempathy/empathy-utils.c:253 +#: ../libempathy/empathy-utils.c:276 msgid "Busy" msgstr "עסוק" -#: ../libempathy/empathy-utils.c:256 +#: ../libempathy/empathy-utils.c:279 msgid "Away" msgstr "מרוחק" -#: ../libempathy/empathy-utils.c:258 +#: ../libempathy/empathy-utils.c:281 msgid "Hidden" msgstr "מוסתר" -#: ../libempathy/empathy-utils.c:261 +#: ../libempathy/empathy-utils.c:283 msgid "Offline" -msgstr "מנותק" +msgstr "לא מחובר" + +#: ../libempathy/empathy-time.c:137 +#, c-format +msgid "%d second ago" +msgid_plural "%d seconds ago" +msgstr[0] "לפני שניה" +msgstr[1] "לפני %d שניות" + +#: ../libempathy/empathy-time.c:142 +#, c-format +msgid "%d minute ago" +msgid_plural "%d minutes ago" +msgstr[0] "לפני דקה" +msgstr[1] "לפני %d דקות" -#: ../libempathy-gtk/empathy-account-chooser.c:326 +#: ../libempathy/empathy-time.c:147 +#, c-format +msgid "%d hour ago" +msgid_plural "%d hours ago" +msgstr[0] "לפני שעה" +msgstr[1] "לפני %d שעות" + +#: ../libempathy/empathy-time.c:152 +#, c-format +msgid "%d day ago" +msgid_plural "%d days ago" +msgstr[0] "לפני יום" +msgstr[1] "לפני %d ימים" + +#: ../libempathy/empathy-time.c:157 +#, c-format +msgid "%d month ago" +msgid_plural "%d months ago" +msgstr[0] "לפני חודש" +msgstr[1] "לפני %d חודשים" + +#: ../libempathy/empathy-time.c:162 +msgid "in the future" +msgstr "בעתיד" + +#: ../libempathy-gtk/empathy-account-chooser.c:419 msgid "All" msgstr "הכל" #: ../libempathy-gtk/empathy-account-widget.c:302 -#: ../libempathy-gtk/empathy-account-widget.c:347 +#: ../libempathy-gtk/empathy-account-widget.c:354 #, c-format msgid "%s:" msgstr "%s:" -#: ../libempathy-gtk/empathy-account-widget-aim.glade.h:1 -#: ../libempathy-gtk/empathy-account-widget-generic.glade.h:1 -#: ../libempathy-gtk/empathy-account-widget-groupwise.glade.h:1 -#: ../libempathy-gtk/empathy-account-widget-icq.glade.h:1 -#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:1 -#: ../libempathy-gtk/empathy-account-widget-msn.glade.h:1 -#: ../libempathy-gtk/empathy-account-widget-salut.glade.h:1 -#: ../libempathy-gtk/empathy-account-widget-sip.glade.h:1 -#: ../libempathy-gtk/empathy-account-widget-yahoo.glade.h:1 +#: ../libempathy-gtk/empathy-account-widget-aim.ui.h:1 +#: ../libempathy-gtk/empathy-account-widget-generic.ui.h:1 +#: ../libempathy-gtk/empathy-account-widget-groupwise.ui.h:1 +#: ../libempathy-gtk/empathy-account-widget-icq.ui.h:1 +#: ../libempathy-gtk/empathy-account-widget-jabber.ui.h:1 +#: ../libempathy-gtk/empathy-account-widget-msn.ui.h:1 +#: ../libempathy-gtk/empathy-account-widget-salut.ui.h:1 +#: ../libempathy-gtk/empathy-account-widget-sip.ui.h:1 +#: ../libempathy-gtk/empathy-account-widget-yahoo.ui.h:1 msgid "<b>Advanced</b>" msgstr "<b>מתקדם</b>" -#: ../libempathy-gtk/empathy-account-widget-aim.glade.h:2 -#: ../libempathy-gtk/empathy-account-widget-groupwise.glade.h:2 -#: ../libempathy-gtk/empathy-account-widget-icq.glade.h:2 -#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:3 -#: ../libempathy-gtk/empathy-account-widget-msn.glade.h:2 -#: ../libempathy-gtk/empathy-account-widget-sip.glade.h:4 -#: ../libempathy-gtk/empathy-account-widget-yahoo.glade.h:2 -msgid "Forget password and clear the entry." -msgstr "" - -#: ../libempathy-gtk/empathy-account-widget-aim.glade.h:3 -#: ../libempathy-gtk/empathy-account-widget-groupwise.glade.h:4 -#: ../libempathy-gtk/empathy-account-widget-icq.glade.h:4 -#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:5 -#: ../libempathy-gtk/empathy-account-widget-msn.glade.h:4 -#: ../libempathy-gtk/empathy-account-widget-sip.glade.h:5 -#: ../libempathy-gtk/empathy-account-widget-yahoo.glade.h:3 +#: ../libempathy-gtk/empathy-account-widget-aim.ui.h:2 +#: ../libempathy-gtk/empathy-account-widget-groupwise.ui.h:3 +#: ../libempathy-gtk/empathy-account-widget-icq.ui.h:3 +#: ../libempathy-gtk/empathy-account-widget-jabber.ui.h:4 +#: ../libempathy-gtk/empathy-account-widget-msn.ui.h:3 +#: ../libempathy-gtk/empathy-account-widget-sip.ui.h:4 +#: ../libempathy-gtk/empathy-account-widget-yahoo.ui.h:2 msgid "Pass_word:" msgstr "סיסמ_ה:" -#: ../libempathy-gtk/empathy-account-widget-aim.glade.h:4 +#: ../libempathy-gtk/empathy-account-widget-aim.ui.h:3 msgid "Screen _Name:" msgstr "שם _מסך:" -#: ../libempathy-gtk/empathy-account-widget-aim.glade.h:5 -#: ../libempathy-gtk/empathy-account-widget-groupwise.glade.h:5 -#: ../libempathy-gtk/empathy-account-widget-icq.glade.h:6 -#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:11 -#: ../libempathy-gtk/empathy-account-widget-msn.glade.h:5 -#: ../libempathy-gtk/empathy-account-widget-yahoo.glade.h:8 +#: ../libempathy-gtk/empathy-account-widget-aim.ui.h:4 +#: ../libempathy-gtk/empathy-account-widget-groupwise.ui.h:4 +#: ../libempathy-gtk/empathy-account-widget-icq.ui.h:5 +#: ../libempathy-gtk/empathy-account-widget-jabber.ui.h:10 +#: ../libempathy-gtk/empathy-account-widget-msn.ui.h:4 +#: ../libempathy-gtk/empathy-account-widget-yahoo.ui.h:7 msgid "_Port:" msgstr "_שער:" -#: ../libempathy-gtk/empathy-account-widget-aim.glade.h:6 -#: ../libempathy-gtk/empathy-account-widget-groupwise.glade.h:6 -#: ../libempathy-gtk/empathy-account-widget-icq.glade.h:7 -#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:12 -#: ../libempathy-gtk/empathy-account-widget-msn.glade.h:6 -#: ../libempathy-gtk/empathy-account-widget-yahoo.glade.h:10 -#: ../src/empathy-new-chatroom-dialog.glade.h:10 +#: ../libempathy-gtk/empathy-account-widget-aim.ui.h:5 +#: ../libempathy-gtk/empathy-account-widget-groupwise.ui.h:5 +#: ../libempathy-gtk/empathy-account-widget-icq.ui.h:6 +#: ../libempathy-gtk/empathy-account-widget-jabber.ui.h:11 +#: ../libempathy-gtk/empathy-account-widget-msn.ui.h:5 +#: ../libempathy-gtk/empathy-account-widget-yahoo.ui.h:9 +#: ../src/empathy-new-chatroom-dialog.ui.h:9 msgid "_Server:" msgstr "_שרת:" -#: ../libempathy-gtk/empathy-account-widget-groupwise.glade.h:3 -#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:4 -#: ../libempathy-gtk/empathy-account-widget-msn.glade.h:3 +#: ../libempathy-gtk/empathy-account-widget-groupwise.ui.h:2 +#: ../libempathy-gtk/empathy-account-widget-jabber.ui.h:3 +#: ../libempathy-gtk/empathy-account-widget-msn.ui.h:2 msgid "Login I_D:" msgstr "מזהה משת_מש:" -#: ../libempathy-gtk/empathy-account-widget-icq.glade.h:3 +#: ../libempathy-gtk/empathy-account-widget-icq.ui.h:2 msgid "ICQ _UIN:" msgstr "" -#: ../libempathy-gtk/empathy-account-widget-icq.glade.h:5 -#: ../libempathy-gtk/empathy-account-widget-yahoo.glade.h:6 +#: ../libempathy-gtk/empathy-account-widget-icq.ui.h:4 +#: ../libempathy-gtk/empathy-account-widget-yahoo.ui.h:5 msgid "_Charset:" -msgstr "קידוד _תוים:" +msgstr "קידוד _תווים:" -#: ../libempathy-gtk/empathy-account-widget-irc.c:245 +#: ../libempathy-gtk/empathy-account-widget-irc.c:241 msgid "New Network" msgstr "רשת חדשה" -#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:1 +#: ../libempathy-gtk/empathy-account-widget-irc.ui.h:1 msgid "<b>Network</b>" msgstr "<b>רשת</b>" -#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:2 +#: ../libempathy-gtk/empathy-account-widget-irc.ui.h:2 msgid "<b>Servers</b>" msgstr "<b>שרתים</b>" -#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:3 +#: ../libempathy-gtk/empathy-account-widget-irc.ui.h:3 msgid "Charset:" -msgstr "קידוד תוים:" - -#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:4 -msgid "Create a new IRC network" -msgstr "צור רשת IRC חדשה" - -#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:5 -msgid "Edit the selected IRC network" -msgstr "ערוך רשת IRC מסומנת" +msgstr "קידוד תווים:" -#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:6 +#: ../libempathy-gtk/empathy-account-widget-irc.ui.h:4 msgid "Network" msgstr "רשת" -#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:7 +#: ../libempathy-gtk/empathy-account-widget-irc.ui.h:5 msgid "Network:" msgstr "רשת:" -#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:8 +#: ../libempathy-gtk/empathy-account-widget-irc.ui.h:6 msgid "Nickname:" msgstr "כינוי:" -#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:9 +#: ../libempathy-gtk/empathy-account-widget-irc.ui.h:7 msgid "Password:" msgstr "סיסמה:" -#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:10 +#: ../libempathy-gtk/empathy-account-widget-irc.ui.h:8 msgid "Quit message:" msgstr "הודאת יציאה:" -#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:11 +#: ../libempathy-gtk/empathy-account-widget-irc.ui.h:9 msgid "Real name:" msgstr "שם אמיתי:" -#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:12 -msgid "Remove the selected IRC network" -msgstr "הסר רשת IRC מסומנת" - -#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:2 +#: ../libempathy-gtk/empathy-account-widget-jabber.ui.h:2 msgid "<b>Override server settings</b>" -msgstr "<b>עקןף הגדרת שרת</b>" +msgstr "<b>עקוף הגדרת שרת</b>" -#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:6 +#: ../libempathy-gtk/empathy-account-widget-jabber.ui.h:5 msgid "Pri_ority:" msgstr "עדי_פות:" -#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:7 +#: ../libempathy-gtk/empathy-account-widget-jabber.ui.h:6 msgid "Reso_urce:" msgstr "_משאב:" -#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:8 +#: ../libempathy-gtk/empathy-account-widget-jabber.ui.h:7 msgid "Use old SS_L" msgstr "השתמש ב-SS_L ישן" -#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:9 +#: ../libempathy-gtk/empathy-account-widget-jabber.ui.h:8 msgid "_Encryption required (TLS/SSL)" msgstr "_נדרשת הצפנה (TLS/SSL)" -#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:10 +#: ../libempathy-gtk/empathy-account-widget-jabber.ui.h:9 msgid "_Ignore SSL certificate errors" msgstr "ה_תעלם משגיאות בתעודות SSL" -#: ../libempathy-gtk/empathy-account-widget-salut.glade.h:2 +#: ../libempathy-gtk/empathy-account-widget-salut.ui.h:2 msgid "_Email:" msgstr "_דוא\"ל:" -#: ../libempathy-gtk/empathy-account-widget-salut.glade.h:3 -msgid "_First Name: " +#: ../libempathy-gtk/empathy-account-widget-salut.ui.h:3 +msgid "_First Name:" msgstr "שם _פרטי:" -#: ../libempathy-gtk/empathy-account-widget-salut.glade.h:4 +#: ../libempathy-gtk/empathy-account-widget-salut.ui.h:4 msgid "_Jabber ID:" msgstr "מזהה Jabber:" -#: ../libempathy-gtk/empathy-account-widget-salut.glade.h:5 +#: ../libempathy-gtk/empathy-account-widget-salut.ui.h:5 msgid "_Last Name:" msgstr "שם _משפחה" -#: ../libempathy-gtk/empathy-account-widget-salut.glade.h:6 -#: ../src/empathy-chatrooms-window.glade.h:8 +#: ../libempathy-gtk/empathy-account-widget-salut.ui.h:6 msgid "_Nickname:" msgstr "_כינוי" -#: ../libempathy-gtk/empathy-account-widget-salut.glade.h:7 +#: ../libempathy-gtk/empathy-account-widget-salut.ui.h:7 msgid "_Published Name:" msgstr "" #. look up the DNS SRV record at the service's domain for the host name of a STUN server. -#: ../libempathy-gtk/empathy-account-widget-sip.glade.h:3 +#: ../libempathy-gtk/empathy-account-widget-sip.ui.h:3 msgid "Discover STUN" msgstr "גילוי STUN" -#: ../libempathy-gtk/empathy-account-widget-sip.glade.h:6 +#: ../libempathy-gtk/empathy-account-widget-sip.ui.h:5 msgid "STUN Server:" msgstr "שרת STUN:" -#: ../libempathy-gtk/empathy-account-widget-sip.glade.h:7 +#: ../libempathy-gtk/empathy-account-widget-sip.ui.h:6 msgid "STUN port:" msgstr "שער STUN:" -#: ../libempathy-gtk/empathy-account-widget-sip.glade.h:8 +#: ../libempathy-gtk/empathy-account-widget-sip.ui.h:7 msgid "_Username:" msgstr "ש_ם משתמש:" -#: ../libempathy-gtk/empathy-account-widget-yahoo.glade.h:4 +#: ../libempathy-gtk/empathy-account-widget-yahoo.ui.h:3 msgid "Use _Yahoo Japan" msgstr "השתמש ב-_Yahoo יפן" -#: ../libempathy-gtk/empathy-account-widget-yahoo.glade.h:5 -#, fuzzy -#| msgid "Login I_D:" +#: ../libempathy-gtk/empathy-account-widget-yahoo.ui.h:4 msgid "Yahoo I_D:" -msgstr "מזהה משת_מש:" +msgstr "חש_בון Yahoo:" -#: ../libempathy-gtk/empathy-account-widget-yahoo.glade.h:7 +#: ../libempathy-gtk/empathy-account-widget-yahoo.ui.h:6 msgid "_Ignore conference and chatroom invitations" msgstr "ה_תעלם מהזמנות לשיחות ועידה וחדרי שיחה" -#: ../libempathy-gtk/empathy-account-widget-yahoo.glade.h:9 +#: ../libempathy-gtk/empathy-account-widget-yahoo.ui.h:8 msgid "_Room List locale:" msgstr "" -#: ../libempathy-gtk/empathy-avatar-chooser.c:461 -#: ../libempathy-gtk/empathy-avatar-chooser.c:536 +#: ../libempathy-gtk/empathy-avatar-chooser.c:449 +#: ../libempathy-gtk/empathy-avatar-chooser.c:525 msgid "Couldn't convert image" msgstr "" -#: ../libempathy-gtk/empathy-avatar-chooser.c:462 +#: ../libempathy-gtk/empathy-avatar-chooser.c:450 msgid "None of the accepted image formats is supported on your system" msgstr "" -#: ../libempathy-gtk/empathy-avatar-chooser.c:947 +#: ../libempathy-gtk/empathy-avatar-chooser.c:933 msgid "Select Your Avatar Image" msgstr "בחר את התמונה האישית שלך" -#: ../libempathy-gtk/empathy-avatar-chooser.c:950 +#: ../libempathy-gtk/empathy-avatar-chooser.c:936 msgid "No Image" msgstr "ללא תמונה" -#: ../libempathy-gtk/empathy-avatar-chooser.c:1010 +#: ../libempathy-gtk/empathy-avatar-chooser.c:998 msgid "Images" msgstr "תמונות" -#: ../libempathy-gtk/empathy-avatar-chooser.c:1014 +#: ../libempathy-gtk/empathy-avatar-chooser.c:1002 msgid "All Files" msgstr "כל הקבצים" -#: ../libempathy-gtk/empathy-avatar-image.c:294 +#: ../libempathy-gtk/empathy-avatar-image.c:324 msgid "Click to enlarge" msgstr "לחץ כדי להגדיל" -#: ../libempathy-gtk/empathy-chat.c:507 +#: ../libempathy-gtk/empathy-chat.c:178 +msgid "Failed to reconnect this chat" +msgstr "נכשל בהתחברות לשיחה" + +#: ../libempathy-gtk/empathy-chat.c:396 +msgid "Unsupported command" +msgstr "פקודה לא נתמכת" + +#: ../libempathy-gtk/empathy-chat.c:531 msgid "offline" -msgstr "מנותק" +msgstr "לא מחובר" -#: ../libempathy-gtk/empathy-chat.c:510 +#: ../libempathy-gtk/empathy-chat.c:534 msgid "invalid contact" -msgstr "" +msgstr "איש קשר לא תקין" -#: ../libempathy-gtk/empathy-chat.c:513 +#: ../libempathy-gtk/empathy-chat.c:537 msgid "permission denied" msgstr "איש קשר לא תקין" -#: ../libempathy-gtk/empathy-chat.c:516 +#: ../libempathy-gtk/empathy-chat.c:540 msgid "too long message" msgstr "הודעה ארוכה מדי" -#: ../libempathy-gtk/empathy-chat.c:519 +#: ../libempathy-gtk/empathy-chat.c:543 msgid "not implemented" msgstr "לא ממומש" -#: ../libempathy-gtk/empathy-chat.c:522 +#: ../libempathy-gtk/empathy-chat.c:546 msgid "unknown" msgstr "לא ידוע" -#: ../libempathy-gtk/empathy-chat.c:526 +#: ../libempathy-gtk/empathy-chat.c:550 #, c-format msgid "Error sending message '%s': %s" msgstr "שגיאה בשליחת ההודעה '%s': %s" -#: ../libempathy-gtk/empathy-chat.c:556 +#: ../libempathy-gtk/empathy-chat.c:580 #, c-format msgid "Topic set to: %s" msgstr "הנושא נקבע ל: %s" -#: ../libempathy-gtk/empathy-chat.c:558 +#: ../libempathy-gtk/empathy-chat.c:582 msgid "No topic defined" msgstr "לא נקבע נושא" -#: ../libempathy-gtk/empathy-chat.c:973 +#: ../libempathy-gtk/empathy-chat.c:951 +msgid "(No Suggestions)" +msgstr "(אין הצעות)" + +#: ../libempathy-gtk/empathy-chat.c:1005 msgid "Insert Smiley" msgstr "הכנס סמיילי" #. send button -#: ../libempathy-gtk/empathy-chat.c:991 -#: ../libempathy-gtk/empathy-ui-utils.c:1526 +#: ../libempathy-gtk/empathy-chat.c:1023 +#: ../libempathy-gtk/empathy-ui-utils.c:1476 msgid "_Send" msgstr "_שלח" -#: ../libempathy-gtk/empathy-chat.c:1025 -msgid "_Check Word Spelling..." -msgstr "ב_דוק איות..." +#: ../libempathy-gtk/empathy-chat.c:1057 +msgid "_Spelling Suggestions" +msgstr "הצעות _איות" -#: ../libempathy-gtk/empathy-chat.c:1131 +#: ../libempathy-gtk/empathy-chat.c:1171 #, c-format msgid "%s has joined the room" msgstr "%s הצטרף לחדר" -#: ../libempathy-gtk/empathy-chat.c:1134 +#: ../libempathy-gtk/empathy-chat.c:1174 #, c-format msgid "%s has left the room" msgstr "%s עזב את החדר" -#: ../libempathy-gtk/empathy-chat.c:1248 ../src/empathy-call-window.c:426 +#: ../libempathy-gtk/empathy-chat.c:1289 +#: ../src/empathy-call-window.c:1107 msgid "Disconnected" msgstr "מנותק" -#: ../libempathy-gtk/empathy-chat.c:1644 +#: ../libempathy-gtk/empathy-chat.c:1700 msgid "Connected" msgstr "מחובר" -#: ../libempathy-gtk/empathy-chat.c:1694 -#: ../libempathy-gtk/empathy-log-window.c:505 +#: ../libempathy-gtk/empathy-chat.c:1750 +#: ../libempathy-gtk/empathy-log-window.c:501 msgid "Conversation" msgstr "שיחה" -#: ../libempathy-gtk/empathy-chat.glade.h:1 +#: ../libempathy-gtk/empathy-chat.ui.h:1 msgid "<b>Topic:</b>" msgstr "<b>נושא:</b>" -#: ../libempathy-gtk/empathy-chat.glade.h:2 -msgid "Group Chat" -msgstr "" - -#: ../libempathy-gtk/empathy-chat-text-view.c:340 +#: ../libempathy-gtk/empathy-chat-text-view.c:316 msgid "_Copy Link Address" msgstr "העתק _מיקום קישור" -#: ../libempathy-gtk/empathy-chat-text-view.c:348 +#: ../libempathy-gtk/empathy-chat-text-view.c:323 msgid "_Open Link" msgstr "_פתח קישור" -#: ../libempathy-gtk/empathy-chat-text-view.c:439 -msgid "%A %d %B %Y" +#. Translators: timestamp displayed between conversations in +#. * chat windows (strftime format string) +#: ../libempathy-gtk/empathy-chat-text-view.c:415 +msgid "%A %B %d %Y" msgstr "%A %d %B %Y" -#: ../libempathy-gtk/empathy-contact-dialogs.c:180 -msgid "Personal Information" -msgstr "מידע אישי" - -#: ../libempathy-gtk/empathy-contact-dialogs.c:183 +#: ../libempathy-gtk/empathy-contact-dialogs.c:179 +#: ../libempathy-gtk/empathy-contact-dialogs.c:238 msgid "Edit Contact Information" msgstr "ערוך מידע איש קשר" -#: ../libempathy-gtk/empathy-contact-dialogs.c:186 -msgid "Contact Information" -msgstr "מידע איש קשר" - -#: ../libempathy-gtk/empathy-contact-dialogs.c:266 -msgid "I would like to add you to my contact list." -msgstr "הייתי רוצה להוסיף אותך לרשימת אנשי הקשר שלי." +#: ../libempathy-gtk/empathy-contact-dialogs.c:289 +msgid "Personal Information" +msgstr "מידע אישי" -#: ../libempathy-gtk/empathy-contact-dialogs.c:290 +#: ../libempathy-gtk/empathy-contact-dialogs.c:392 msgid "New Contact" msgstr "איש קשר חדש" -#: ../libempathy-gtk/empathy-contact-dialogs.glade.h:1 +#: ../libempathy-gtk/empathy-contact-dialogs.ui.h:1 msgid "Decide _Later" msgstr "ה_חלט מאוחר יותר" -#: ../libempathy-gtk/empathy-contact-dialogs.glade.h:2 +#: ../libempathy-gtk/empathy-contact-dialogs.ui.h:2 msgid "Subscription Request" msgstr "" -#: ../libempathy-gtk/empathy-contact-list-view.c:1244 +#: ../libempathy-gtk/empathy-contact-list-view.c:1378 #, c-format msgid "Do you really want to remove the group '%s'?" msgstr "להסיר את הקבוצה '%s'?" -#: ../libempathy-gtk/empathy-contact-list-view.c:1246 +#: ../libempathy-gtk/empathy-contact-list-view.c:1380 msgid "Removing group" msgstr "מסיר קבוצה" -#: ../libempathy-gtk/empathy-contact-list-view.c:1293 -#: ../libempathy-gtk/empathy-contact-list-view.c:1372 +#: ../libempathy-gtk/empathy-contact-list-view.c:1427 +#: ../libempathy-gtk/empathy-contact-list-view.c:1505 msgid "_Remove" msgstr "_הסר" -#: ../libempathy-gtk/empathy-contact-list-view.c:1323 +#: ../libempathy-gtk/empathy-contact-list-view.c:1457 #, c-format msgid "Do you really want to remove the contact '%s'?" msgstr "להסיר את איש הקשר '%s'?" -#: ../libempathy-gtk/empathy-contact-list-view.c:1325 +#: ../libempathy-gtk/empathy-contact-list-view.c:1459 msgid "Removing contact" msgstr "מסיר איש קשר" -#: ../libempathy-gtk/empathy-contact-list-view.c:1330 -msgid "Sorry, I don't want you in my contact list anymore." -msgstr "מצטער, אני יותר לא רוצה אותך ברשימת אנשי הקשר שלי." - -#: ../libempathy-gtk/empathy-contact-menu.c:121 -#: ../src/empathy-main-window.glade.h:9 +#: ../libempathy-gtk/empathy-contact-menu.c:135 +#: ../src/empathy-main-window.ui.h:8 msgid "_Chat" msgstr "_שיחה" -#: ../libempathy-gtk/empathy-contact-menu.c:142 -msgid "_Call" -msgstr "_שיחה" +#: ../libempathy-gtk/empathy-contact-menu.c:166 +msgctxt "menu item" +msgid "_Audio Call" +msgstr "שיחה _קולית" -#: ../libempathy-gtk/empathy-contact-menu.c:181 -#: ../src/empathy-main-window.glade.h:17 +#: ../libempathy-gtk/empathy-contact-menu.c:198 +msgctxt "menu item" +msgid "_Video Call" +msgstr "שיחת _וידאו" + +#: ../libempathy-gtk/empathy-contact-menu.c:237 msgid "_View Previous Conversations" msgstr "_צפייה בשיחות קודמות" -#: ../libempathy-gtk/empathy-contact-menu.c:203 -#| msgid "Send a file" +#: ../libempathy-gtk/empathy-contact-menu.c:259 msgid "Send file" msgstr "שלח קובץ" -#: ../libempathy-gtk/empathy-contact-menu.c:231 +#: ../libempathy-gtk/empathy-contact-menu.c:287 msgid "Infor_mation" msgstr "_מידע" -#: ../libempathy-gtk/empathy-contact-menu.c:258 -#: ../src/empathy-chat-window.glade.h:14 ../src/empathy-main-window.glade.h:11 +#: ../libempathy-gtk/empathy-contact-menu.c:314 +#: ../src/empathy-main-window.ui.h:11 msgid "_Edit" msgstr "_עריכה" -#: ../libempathy-gtk/empathy-contact-menu.c:317 -#, fuzzy -#| msgid "_Invite to Chat Room" +#: ../libempathy-gtk/empathy-contact-menu.c:372 msgid "Inviting to this room" -msgstr "_הזמן לחדר שיחה" +msgstr "הזמן לחדר שיחה זה" -#: ../libempathy-gtk/empathy-contact-menu.c:350 -#, fuzzy -#| msgid "_Invite to Chat Room" +#: ../libempathy-gtk/empathy-contact-menu.c:403 msgid "_Invite to chatroom" msgstr "_הזמן לחדר שיחה" -#: ../libempathy-gtk/empathy-contact-widget.c:358 -#, fuzzy +#: ../libempathy-gtk/empathy-contact-selector.c:129 +msgid "Select a contact" +msgstr "בחר איש קשר" + +#: ../libempathy-gtk/empathy-contact-widget.c:440 msgid "Save Avatar" -msgstr "Show avatars" +msgstr "שמור תמונה אישית" -#: ../libempathy-gtk/empathy-contact-widget.c:414 +#: ../libempathy-gtk/empathy-contact-widget.c:496 msgid "Unable to save avatar" msgstr "" -#: ../libempathy-gtk/empathy-contact-widget.c:895 +#: ../libempathy-gtk/empathy-contact-widget.c:979 msgid "Select" msgstr "בחר" -#: ../libempathy-gtk/empathy-contact-widget.c:904 -#: ../src/empathy-main-window.c:974 +#: ../libempathy-gtk/empathy-contact-widget.c:988 +#: ../src/empathy-main-window.c:905 msgid "Group" msgstr "קבוצה" -#: ../libempathy-gtk/empathy-contact-widget.glade.h:1 +#: ../libempathy-gtk/empathy-contact-widget.c:1239 +msgid "Country ISO Code:" +msgstr "" + +#: ../libempathy-gtk/empathy-contact-widget.c:1241 +msgid "Country:" +msgstr "ארץ:" + +#: ../libempathy-gtk/empathy-contact-widget.c:1243 +msgid "State:" +msgstr "מדינה:" + +#: ../libempathy-gtk/empathy-contact-widget.c:1245 +msgid "City:" +msgstr "עיר:" + +#: ../libempathy-gtk/empathy-contact-widget.c:1247 +msgid "Area:" +msgstr "אזור:" + +#: ../libempathy-gtk/empathy-contact-widget.c:1249 +msgid "Postal Code:" +msgstr "" + +#: ../libempathy-gtk/empathy-contact-widget.c:1251 +msgid "Street:" +msgstr "רחוב:" + +#: ../libempathy-gtk/empathy-contact-widget.c:1253 +msgid "Building:" +msgstr "" + +#: ../libempathy-gtk/empathy-contact-widget.c:1255 +msgid "Floor:" +msgstr "קומה:" + +#: ../libempathy-gtk/empathy-contact-widget.c:1257 +msgid "Room:" +msgstr "חדר:" + +#: ../libempathy-gtk/empathy-contact-widget.c:1259 +msgid "Text:" +msgstr "טקסט:" + +#: ../libempathy-gtk/empathy-contact-widget.c:1261 +msgid "Description:" +msgstr "תיאור:" + +#: ../libempathy-gtk/empathy-contact-widget.c:1263 +msgid "URI:" +msgstr "" + +#: ../libempathy-gtk/empathy-contact-widget.c:1265 +msgid "Accuracy Level:" +msgstr "רמת דיוק:" + +#: ../libempathy-gtk/empathy-contact-widget.c:1267 +msgid "Error:" +msgstr "שגיאה:" + +#: ../libempathy-gtk/empathy-contact-widget.c:1269 +msgid "Vertical Error (meters):" +msgstr "" + +#: ../libempathy-gtk/empathy-contact-widget.c:1271 +msgid "Horizontal Error (meters):" +msgstr "" + +#: ../libempathy-gtk/empathy-contact-widget.c:1273 +msgid "Speed:" +msgstr "מהירות:" + +#: ../libempathy-gtk/empathy-contact-widget.c:1275 +#, fuzzy +msgid "Bearing:" +msgstr "גרסה:" + +#: ../libempathy-gtk/empathy-contact-widget.c:1277 +msgid "Climb Speed:" +msgstr "" + +#: ../libempathy-gtk/empathy-contact-widget.c:1279 +msgid "Last Updated on:" +msgstr "עדכון אחרון ב:" + +#: ../libempathy-gtk/empathy-contact-widget.c:1281 +msgid "Longitude:" +msgstr "קו אורך:" + +#: ../libempathy-gtk/empathy-contact-widget.c:1283 +msgid "Latitude:" +msgstr "קו רוחב:" + +#: ../libempathy-gtk/empathy-contact-widget.c:1285 +msgid "Altitude:" +msgstr "גובה:" + +#: ../libempathy-gtk/empathy-contact-widget.c:1332 +msgid "<b>Location</b>" +msgstr "<b>מיקום</b>" + +#: ../libempathy-gtk/empathy-contact-widget.c:1345 +msgid "<b>Location</b>, " +msgstr "<b>מיקום</b>, " + +#: ../libempathy-gtk/empathy-contact-widget.c:1395 +msgid "%B %e, %Y at %R UTC" +msgstr "" + +#: ../libempathy-gtk/empathy-contact-widget.ui.h:1 msgid "<b>Client Information</b>" msgstr "<b>מידע לקוח</b>" -#: ../libempathy-gtk/empathy-contact-widget.glade.h:2 +#: ../libempathy-gtk/empathy-contact-widget.ui.h:2 msgid "<b>Contact Details</b>" msgstr "<b>מידע איש קשר</b>" -#: ../libempathy-gtk/empathy-contact-widget.glade.h:3 +#: ../libempathy-gtk/empathy-contact-widget.ui.h:3 msgid "<b>Contact</b>" msgstr "<b>איש קשר</b>" -#: ../libempathy-gtk/empathy-contact-widget.glade.h:4 +#: ../libempathy-gtk/empathy-contact-widget.ui.h:4 msgid "<b>Groups</b>" msgstr "<b>קבוצות</b>" -#: ../libempathy-gtk/empathy-contact-widget.glade.h:5 -#: ../libempathy-gtk/empathy-new-message-dialog.glade.h:1 -#: ../src/empathy-chatrooms-window.glade.h:1 -#: ../src/empathy-new-chatroom-dialog.glade.h:1 +#: ../libempathy-gtk/empathy-contact-widget.ui.h:5 +msgid "<b>Location</b> at (date)\t" +msgstr "" + +#: ../libempathy-gtk/empathy-contact-widget.ui.h:6 +#: ../libempathy-gtk/empathy-new-message-dialog.ui.h:1 +#: ../src/empathy-chatrooms-window.ui.h:1 +#: ../src/empathy-new-chatroom-dialog.ui.h:1 msgid "Account:" msgstr "חשבון:" -#: ../libempathy-gtk/empathy-contact-widget.glade.h:6 +#: ../libempathy-gtk/empathy-contact-widget.ui.h:7 msgid "Alias:" msgstr "כינוי:" -#: ../libempathy-gtk/empathy-contact-widget.glade.h:7 +#: ../libempathy-gtk/empathy-contact-widget.ui.h:8 msgid "Birthday:" msgstr "יום הולדת:" -#: ../libempathy-gtk/empathy-contact-widget.glade.h:8 +#: ../libempathy-gtk/empathy-contact-widget.ui.h:9 msgid "Client:" msgstr "לקוח:" -#: ../libempathy-gtk/empathy-contact-widget.glade.h:9 -msgid "Contact information" -msgstr "נתוני איש קשר" - -#: ../libempathy-gtk/empathy-contact-widget.glade.h:10 +#: ../libempathy-gtk/empathy-contact-widget.ui.h:10 msgid "Email:" msgstr "דוא\"ל:" -#: ../libempathy-gtk/empathy-contact-widget.glade.h:11 +#: ../libempathy-gtk/empathy-contact-widget.ui.h:11 msgid "Fullname:" msgstr "שם מלא:" #. Identifier to connect to Instant Messaging network -#: ../libempathy-gtk/empathy-contact-widget.glade.h:13 +#: ../libempathy-gtk/empathy-contact-widget.ui.h:13 msgid "Identifier:" msgstr "מזהה:" -#: ../libempathy-gtk/empathy-contact-widget.glade.h:14 +#: ../libempathy-gtk/empathy-contact-widget.ui.h:14 msgid "Information requested..." msgstr "" -#: ../libempathy-gtk/empathy-contact-widget.glade.h:15 +#: ../libempathy-gtk/empathy-contact-widget.ui.h:15 msgid "OS:" -msgstr "" +msgstr "מערכת הפעלה:" -#: ../libempathy-gtk/empathy-contact-widget.glade.h:16 -msgid "" -"Select the groups you want this contact to appear in. Note that you can " -"select more than one group or no groups." +#: ../libempathy-gtk/empathy-contact-widget.ui.h:16 +msgid "Select the groups you want this contact to appear in. Note that you can select more than one group or no groups." msgstr "" -#: ../libempathy-gtk/empathy-contact-widget.glade.h:17 +#: ../libempathy-gtk/empathy-contact-widget.ui.h:17 msgid "Version:" msgstr "גרסה:" -#: ../libempathy-gtk/empathy-contact-widget.glade.h:18 +#: ../libempathy-gtk/empathy-contact-widget.ui.h:18 msgid "Web site:" msgstr "אתר אינטרנט:" -#: ../libempathy-gtk/empathy-contact-widget.glade.h:19 +#: ../libempathy-gtk/empathy-contact-widget.ui.h:19 msgid "_Add Group" msgstr "_הוסף קבוצה" -#: ../libempathy-gtk/empathy-irc-network-dialog.c:284 +#: ../libempathy-gtk/empathy-irc-network-dialog.c:283 msgid "new server" msgstr "שרת חדש" -#: ../libempathy-gtk/empathy-irc-network-dialog.c:513 +#: ../libempathy-gtk/empathy-irc-network-dialog.c:510 msgid "Server" msgstr "שרת" -#: ../libempathy-gtk/empathy-irc-network-dialog.c:528 +#: ../libempathy-gtk/empathy-irc-network-dialog.c:525 msgid "Port" msgstr "שער" -#: ../libempathy-gtk/empathy-irc-network-dialog.c:541 +#: ../libempathy-gtk/empathy-irc-network-dialog.c:538 msgid "SSL" msgstr "SSL" -#: ../libempathy-gtk/empathy-log-window.c:498 -#: ../src/empathy-import-dialog.c:271 +#: ../libempathy-gtk/empathy-log-window.c:494 +#: ../src/empathy-import-dialog.c:281 msgid "Account" msgstr "חשבון" -#: ../libempathy-gtk/empathy-log-window.c:515 +#: ../libempathy-gtk/empathy-log-window.c:511 msgid "Date" msgstr "תאריך" -#. Tab Label -#: ../libempathy-gtk/empathy-log-window.glade.h:2 +#: ../libempathy-gtk/empathy-log-window.ui.h:1 msgid "Conversations" msgstr "שיחות" -#: ../libempathy-gtk/empathy-log-window.glade.h:3 +#: ../libempathy-gtk/empathy-log-window.ui.h:2 msgid "Previous Conversations" msgstr "שיחות קודמות" -#. Tab Label -#: ../libempathy-gtk/empathy-log-window.glade.h:5 +#: ../libempathy-gtk/empathy-log-window.ui.h:3 msgid "Search" msgstr "חיפוש" -#. Searching *for* something -#: ../libempathy-gtk/empathy-log-window.glade.h:7 +#: ../libempathy-gtk/empathy-log-window.ui.h:4 msgid "_For:" msgstr "_ערך:" -#: ../libempathy-gtk/empathy-new-message-dialog.glade.h:2 -#, fuzzy -#| msgid "_Call" +#: ../libempathy-gtk/empathy-new-message-dialog.ui.h:2 msgid "C_all" -msgstr "_שיחה" +msgstr "ה_תקשר" -#: ../libempathy-gtk/empathy-new-message-dialog.glade.h:3 -#, fuzzy -#| msgid "Chat" +#: ../libempathy-gtk/empathy-new-message-dialog.ui.h:3 msgid "C_hat" -msgstr "שיחה" +msgstr "שי_חה" -#: ../libempathy-gtk/empathy-new-message-dialog.glade.h:4 +#: ../libempathy-gtk/empathy-new-message-dialog.ui.h:4 msgid "Contact ID:" msgstr "" -#: ../libempathy-gtk/empathy-new-message-dialog.glade.h:5 +#: ../libempathy-gtk/empathy-new-message-dialog.ui.h:5 msgid "New Conversation" msgstr "שיחה חדשה" +#. COL_STATE_ICON_NAME +#. COL_STATE +#. COL_STATUS_TEXT +#. COL_DISPLAY_MARKUP +#. COL_STATUS_CUSTOMISABLE +#. COL_TYPE +#: ../libempathy-gtk/empathy-presence-chooser.c:172 +msgid "Custom Message..." +msgstr "הודעה מותאמת אישית..." + +#: ../libempathy-gtk/empathy-presence-chooser.c:227 +msgid "Edit Custom Messages..." +msgstr "ערוך הודעה מותאמת אישית..." + +#: ../libempathy-gtk/empathy-presence-chooser.c:326 +msgid "Click to remove this status as a favorite" +msgstr "" + +#: ../libempathy-gtk/empathy-presence-chooser.c:335 +msgid "Click to make this status a favorite" +msgstr "" + +#: ../libempathy-gtk/empathy-presence-chooser.c:369 +msgid "Set status" +msgstr "קבע מצב" + +#: ../libempathy-gtk/empathy-presence-chooser.c:778 +msgid "Set your presence and current status" +msgstr "" + #. Custom messages -#: ../libempathy-gtk/empathy-presence-chooser.c:685 +#: ../libempathy-gtk/empathy-presence-chooser.c:1013 msgid "Custom messages..." msgstr "הודעות מותאמות אישית..." -#: ../libempathy-gtk/empathy-presence-chooser.glade.h:1 -msgid "Custom message" -msgstr "הודעה מותאמת אישית" - -#: ../libempathy-gtk/empathy-presence-chooser.glade.h:2 -msgid "Message:" -msgstr "הודעה:" +#: ../libempathy-gtk/empathy-status-preset-dialog.c:362 +msgid "Enter Custom Message" +msgstr "הכנס הודעה מותאמת" -#: ../libempathy-gtk/empathy-presence-chooser.glade.h:3 -msgid "Save message" -msgstr "שמור הודעה" +#: ../libempathy-gtk/empathy-status-preset-dialog.c:521 +msgid "Edit Custom Messages" +msgstr "ערוך הודעה מותאמת" -#: ../libempathy-gtk/empathy-presence-chooser.glade.h:4 -msgid "Status:" -msgstr "מצב:" - -#: ../libempathy-gtk/empathy-spell-dialog.c:88 -msgid "Word" -msgstr "מילה" +#: ../libempathy-gtk/empathy-status-preset-dialog.ui.h:1 +msgid "Add _New Preset" +msgstr "" -#: ../libempathy-gtk/empathy-spell-dialog.c:265 -msgid "Suggestions for the word" -msgstr "הצעות עבור המילה" +#: ../libempathy-gtk/empathy-status-preset-dialog.ui.h:2 +#, fuzzy +msgid "Saved Presets" +msgstr "שמור הודעה" -#: ../libempathy-gtk/empathy-spell-dialog.glade.h:1 -msgid "Spell Checker" -msgstr "בודק איות" +#: ../libempathy-gtk/empathy-status-preset-dialog.ui.h:3 +msgid "gtk-add" +msgstr "gtk-add" -#: ../libempathy-gtk/empathy-spell-dialog.glade.h:2 -msgid "Suggestions for the word:" -msgstr "הצעות עבור המילה:" +#: ../libempathy-gtk/empathy-status-preset-dialog.ui.h:4 +msgid "gtk-remove" +msgstr "gtk-remove" -#: ../libempathy-gtk/empathy-theme-manager.c:60 +#: ../libempathy-gtk/empathy-theme-manager.c:66 msgid "Classic" msgstr "קלאסי" -#: ../libempathy-gtk/empathy-theme-manager.c:61 +#: ../libempathy-gtk/empathy-theme-manager.c:67 msgid "Simple" msgstr "פשוט" -#: ../libempathy-gtk/empathy-theme-manager.c:62 +#: ../libempathy-gtk/empathy-theme-manager.c:68 msgid "Clean" msgstr "נקי" -#: ../libempathy-gtk/empathy-theme-manager.c:63 +#: ../libempathy-gtk/empathy-theme-manager.c:69 msgid "Blue" msgstr "כחול" -#: ../libempathy-gtk/empathy-ui-utils.c:1373 +#: ../libempathy-gtk/empathy-theme-manager.c:71 +msgid "Adium" +msgstr "Adium" + +#: ../libempathy-gtk/empathy-ui-utils.c:1378 msgid "Unable to open URI" msgstr "לא נית לפתוח את הכתובת" -#: ../libempathy-gtk/empathy-ui-utils.c:1518 -#| msgid "Send a file" +#: ../libempathy-gtk/empathy-ui-utils.c:1468 msgid "Select a file" msgstr "בחר קובץ" -#: ../libempathy-gtk/empathy-ui-utils.c:1554 -#, fuzzy -#| msgid "Send and receive instant messages" +#: ../libempathy-gtk/empathy-ui-utils.c:1526 +msgid "Select a destination" +msgstr "בחר יעד" + +#: ../libempathy-gtk/empathy-ui-utils.c:1555 msgid "Received an instant message" -msgstr "שלח וקבל מסרים מיידיים" +msgstr "התקבלה הודעה מידית." -#: ../libempathy-gtk/empathy-ui-utils.c:1556 -#, fuzzy -#| msgid "Send and receive instant messages" +#: ../libempathy-gtk/empathy-ui-utils.c:1557 msgid "Sent an instant message" -msgstr "שלח וקבל מסרים מיידיים" +msgstr "שלח הודעה מידית" -#: ../libempathy-gtk/empathy-ui-utils.c:1558 -#, fuzzy -#| msgid "Incoming call" +#: ../libempathy-gtk/empathy-ui-utils.c:1559 msgid "Incoming chat request" -msgstr "שיחה נכנסת" +msgstr "בקשת שיחה נכנסת" -#: ../libempathy-gtk/empathy-ui-utils.c:1560 -#| msgid "Connected" +#: ../libempathy-gtk/empathy-ui-utils.c:1561 msgid "Contact connected" msgstr "איש קשר התחבר" -#: ../libempathy-gtk/empathy-ui-utils.c:1562 -#| msgid "Disconnected" +#: ../libempathy-gtk/empathy-ui-utils.c:1563 msgid "Contact disconnected" msgstr "איש קשר התנתק" -#: ../libempathy-gtk/empathy-ui-utils.c:1564 -#| msgid "Connected" +#: ../libempathy-gtk/empathy-ui-utils.c:1565 msgid "Connected to server" msgstr "מחובר לשרת" -#: ../libempathy-gtk/empathy-ui-utils.c:1566 -#, fuzzy -#| msgid "Disconnected" +#: ../libempathy-gtk/empathy-ui-utils.c:1567 msgid "Disconnected from server" -msgstr "מנותק" +msgstr "מנותק מהשרת" -#: ../libempathy-gtk/empathy-ui-utils.c:1568 -#, fuzzy -#| msgid "Incoming call" +#: ../libempathy-gtk/empathy-ui-utils.c:1569 msgid "Incoming voice call" -msgstr "שיחה נכנסת" +msgstr "שיחה קולית נכנסת" -#: ../libempathy-gtk/empathy-ui-utils.c:1570 +#: ../libempathy-gtk/empathy-ui-utils.c:1571 msgid "Outgoing voice call" -msgstr "" +msgstr "שיחה קולית פעילה" -#: ../libempathy-gtk/empathy-ui-utils.c:1572 +#: ../libempathy-gtk/empathy-ui-utils.c:1573 msgid "Voice call ended" -msgstr "" +msgstr "שיחה קולית הסתיימה" #: ../libempathy-gtk/totem-subtitle-encoding.c:158 msgid "Current Locale" @@ -1247,10 +1405,8 @@ msgstr "ויאטנמית" #. * vim: sw=2 ts=8 cindent noai bs=2 #. #: ../megaphone/data/GNOME_Megaphone_Applet.schemas.in.h:1 -msgid "" -"The contact to display in the applet. Empty means no contact is displayed." -msgstr "" -"The contact to display in the applet. Empty means no contact is displayed." +msgid "The contact to display in the applet. Empty means no contact is displayed." +msgstr "The contact to display in the applet. Empty means no contact is displayed." #: ../megaphone/data/GNOME_Megaphone_Applet.schemas.in.h:2 msgid "The contact's avatar token. Empty means contact has no avatar." @@ -1261,7 +1417,7 @@ msgid "Megaphone" msgstr "Megaphone" #: ../megaphone/data/GNOME_Megaphone_Applet.server.in.in.h:2 -#: ../megaphone/src/megaphone-applet.c:417 +#: ../megaphone/src/megaphone-applet.c:527 msgid "Talk!" msgstr "דבר!" @@ -1275,16 +1431,15 @@ msgid "_Information" msgstr "_מידע" #: ../megaphone/data/GNOME_Megaphone_Applet.xml.h:3 -#: ../src/empathy-main-window.glade.h:15 +#: ../src/empathy-main-window.ui.h:18 msgid "_Preferences" msgstr "_העדפות" -#: ../megaphone/src/megaphone-applet.c:255 +#: ../megaphone/src/megaphone-applet.c:168 msgid "Please configure a contact." -msgstr "" +msgstr "נא להגדיר איש קשר." -#: ../megaphone/src/megaphone-applet.c:348 -#| msgid "_Add Contact..." +#: ../megaphone/src/megaphone-applet.c:258 msgid "Select contact..." msgstr "בחר איש קשר..." @@ -1297,55 +1452,33 @@ msgstr "Presence" msgid "Set your own presence" msgstr "" -#: ../src/empathy.c:400 +#: ../src/empathy.c:476 msgid "Don't connect on startup" msgstr "אל תתחבר בהפעלה" -#: ../src/empathy.c:404 +#: ../src/empathy.c:480 msgid "Don't show the contact list on startup" msgstr "אל תציג את רשימת אנשי הקשר בהפעלה" -#: ../src/empathy.c:408 +#: ../src/empathy.c:484 msgid "Show the accounts dialog" msgstr "הצג חלון החשבונות" -#: ../src/empathy.c:416 +#: ../src/empathy.c:496 msgid "- Empathy Instant Messenger" msgstr "- Empathy Instant Messenger" #: ../src/empathy-about-dialog.c:84 -msgid "" -"Empathy is free software; you can redistribute it and/or modify it under the " -"terms of the GNU General Public License as published by the Free Software " -"Foundation; either version 2 of the License, or (at your option) any later " -"version." -msgstr "" -"Empathy is free software; you can redistribute it and/or modify it under the " -"terms of the GNU General Public License as published by the Free Software " -"Foundation; either version 2 of the License, or (at your option) any later " -"version." +msgid "Empathy is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version." +msgstr "Empathy is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version." #: ../src/empathy-about-dialog.c:88 -msgid "" -"Empathy is distributed in the hope that it will be useful, but WITHOUT ANY " -"WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS " -"FOR A PARTICULAR PURPOSE. See the GNU General Public License for more " -"details." -msgstr "" -"Empathy is distributed in the hope that it will be useful, but WITHOUT ANY " -"WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS " -"FOR A PARTICULAR PURPOSE. See the GNU General Public License for more " -"details." +msgid "Empathy is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details." +msgstr "Empathy is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details." #: ../src/empathy-about-dialog.c:92 -msgid "" -"You should have received a copy of the GNU General Public License along with " -"Empathy; if not, write to the Free Software Foundation, Inc., 51 Franklin " -"Street, Fifth Floor, Boston, MA 02110-130159 USA" -msgstr "" -"You should have received a copy of the GNU General Public License along with " -"Empathy; if not, write to the Free Software Foundation, Inc., 51 Franklin " -"Street, Fifth Floor, Boston, MA 02110-130159 USA" +msgid "You should have received a copy of the GNU General Public License along with Empathy; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-130159 USA" +msgstr "You should have received a copy of the GNU General Public License along with Empathy; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-130159 USA" #: ../src/empathy-about-dialog.c:120 msgid "An Instant Messaging client for GNOME" @@ -1359,23 +1492,22 @@ msgstr "" "פרוייקט תרגום GNOME לעברית:\n" "http://gnome-il.berlios.de" -#: ../src/empathy-accounts-dialog.c:391 +#: ../src/empathy-accounts-dialog.c:393 msgid "Enabled" msgstr "מופעל" -#: ../src/empathy-accounts-dialog.c:401 -#: ../src/empathy-accounts-dialog.glade.h:4 +#: ../src/empathy-accounts-dialog.c:403 +#: ../src/empathy-accounts-dialog.ui.h:4 msgid "Accounts" msgstr "חשבונות" #. To translator: %s is the protocol name -#: ../src/empathy-accounts-dialog.c:827 -#, fuzzy, c-format -#| msgid "No accounts" +#: ../src/empathy-accounts-dialog.c:837 +#, c-format msgid "New %s account" -msgstr "אין חשבונות" +msgstr "חשבון %s חדש" -#: ../src/empathy-accounts-dialog.c:937 +#: ../src/empathy-accounts-dialog.c:950 #, c-format msgid "" "You are about to remove your %s account!\n" @@ -1384,345 +1516,237 @@ msgstr "" "חשבון ה-%s שלך עומד להיות מוסר!\n" "להסיר את החשבון?" -#: ../src/empathy-accounts-dialog.c:943 +#: ../src/empathy-accounts-dialog.c:956 msgid "" -"Any associated conversations and chat rooms will NOT be removed if you " -"decide to proceed.\n" +"Any associated conversations and chat rooms will NOT be removed if you decide to proceed.\n" "\n" -"Should you decide to add the account back at a later time, they will still " -"be available." +"Should you decide to add the account back at a later time, they will still be available." msgstr "" -#: ../src/empathy-accounts-dialog.glade.h:1 -msgid "<b>New Account</b>" -msgstr "<b>חשבון חדש</b>" +#: ../src/empathy-accounts-dialog.ui.h:1 +msgid "<b>Add Account</b>" +msgstr "<b>הוסף חשבון</b>" -#: ../src/empathy-accounts-dialog.glade.h:2 -#, fuzzy -#| msgid "<b>No Account Selected</b>" +#: ../src/empathy-accounts-dialog.ui.h:2 msgid "<b>No protocol installed</b>" -msgstr "<b>לא נבחרו חשבונות</b>" +msgstr "<b>אין פרוטוקולים מותקנים</b>" -#: ../src/empathy-accounts-dialog.glade.h:3 +#: ../src/empathy-accounts-dialog.ui.h:3 msgid "<b>Settings</b>" msgstr "<b>הגדרות</b>" -#: ../src/empathy-accounts-dialog.glade.h:5 +#: ../src/empathy-accounts-dialog.ui.h:5 msgid "Cr_eate" msgstr "_צור" -#: ../src/empathy-accounts-dialog.glade.h:6 -msgid "I already have an account I want to use" -msgstr "" - -#: ../src/empathy-accounts-dialog.glade.h:7 -#, fuzzy -#| msgid "Empathy accounts" +#: ../src/empathy-accounts-dialog.ui.h:6 msgid "Import Accounts..." -msgstr "חשבונות Empathy" +msgstr "ייבוא חשבונות..." -#: ../src/empathy-accounts-dialog.glade.h:8 -msgid "" -"To add a new account, you first have to install a backend for each protocol " -"you want to use." -msgstr "" -"על מנת להוסיף חשבון חדש עליך להתקין מנוע לכל פרוטוקול שבו ברצונך להשתמש." +#: ../src/empathy-accounts-dialog.ui.h:7 +msgid "To add a new account, you first have to install a backend for each protocol you want to use." +msgstr "על מנת להוסיף חשבון חדש עליך להתקין מנוע לכל פרוטוקול שבו ברצונך להשתמש." -#: ../src/empathy-accounts-dialog.glade.h:9 +#: ../src/empathy-accounts-dialog.ui.h:8 msgid "Type:" msgstr "סוג:" -#: ../src/empathy-call-window.c:144 -msgid "Closed" -msgstr "סגור" +#: ../src/empathy-accounts-dialog.ui.h:9 +msgid "_Add..." +msgstr "_הוסף..." -#: ../src/empathy-call-window.c:264 -msgid "End this call?" -msgstr "לסיים את השיחה?" +#: ../src/empathy-accounts-dialog.ui.h:10 +msgid "_Create a new account" +msgstr "_צור חשבון חדש" -#: ../src/empathy-call-window.c:266 -msgid "Closing this window will end the call in progress." -msgstr "" +#: ../src/empathy-accounts-dialog.ui.h:11 +msgid "_Reuse an existing account" +msgstr "_שימוש חוזר בחשבון קיים" -#: ../src/empathy-call-window.c:267 -msgid "_End Call" -msgstr "_סיים שיחה" +#: ../src/empathy-call-window.c:63 +msgid "Connecting..." +msgstr "מתחבר..." -#: ../src/empathy-call-window.c:321 -msgid "Incoming call" -msgstr "שיחה נכנסת" +#: ../src/empathy-call-window.c:405 +msgid "Contrast" +msgstr "ניגוד" -#: ../src/empathy-call-window.c:323 -#, c-format -msgid "%s is calling you, do you want to answer?" +#: ../src/empathy-call-window.c:408 +msgid "Brightness" msgstr "" -#: ../src/empathy-call-window.c:329 -msgid "_Reject" -msgstr "_דחה" - -#: ../src/empathy-call-window.c:334 -msgid "_Answer" -msgstr "_השב" +#: ../src/empathy-call-window.c:411 +msgid "Gamma" +msgstr "" -#: ../src/empathy-call-window.c:389 -msgid "Empathy Call" -msgstr "שיחת Empathy" +#: ../src/empathy-call-window.c:516 +msgid "Volume" +msgstr "עוצמה" -#. To translators: Readying is the first state of the call, it is -#. * preparing the connection and it does not yet ring. -#: ../src/empathy-call-window.c:392 -msgid "Readying" -msgstr "" +#: ../src/empathy-call-window.c:697 +msgid "_Sidebar" +msgstr "_סרגל צד" -#: ../src/empathy-call-window.c:401 -#, c-format -msgid "%s - Empathy Call" +#: ../src/empathy-call-window.c:716 +msgid "Dialpad" msgstr "" -#: ../src/empathy-call-window.c:405 -msgid "Ringing" -msgstr "מצלצל" +#: ../src/empathy-call-window.c:722 +msgid "Audio input" +msgstr "קלט שמע" -#: ../src/empathy-call-window.c:428 -msgid "Connecting" -msgstr "מתחבר" +#: ../src/empathy-call-window.c:726 +msgid "Video input" +msgstr "קלט וידאו" -#: ../src/empathy-call-window.c:546 +#: ../src/empathy-call-window.c:789 #, c-format -msgid "Incoming call from %s rejected because there is already a running call." +msgid "Call with %s" msgstr "" -#: ../src/empathy-call-window.glade.h:1 -msgid "#" -msgstr "#" - -#: ../src/empathy-call-window.glade.h:2 -msgid "*" -msgstr "*" - -#: ../src/empathy-call-window.glade.h:3 -msgid "0" -msgstr "0" - -#: ../src/empathy-call-window.glade.h:4 -msgid "1" -msgstr "1" - -#: ../src/empathy-call-window.glade.h:5 -msgid "2" -msgstr "2" - -#: ../src/empathy-call-window.glade.h:6 -msgid "3" -msgstr "3" - -#: ../src/empathy-call-window.glade.h:7 -msgid "4" -msgstr "4" - -#: ../src/empathy-call-window.glade.h:8 -msgid "5" -msgstr "5" +#: ../src/empathy-call-window.c:860 +msgid "Call" +msgstr "שיחה" -#: ../src/empathy-call-window.glade.h:9 -msgid "6" -msgstr "6" +#. Translators: number of minutes:seconds the caller has been connected +#: ../src/empathy-call-window.c:1203 +#, c-format +msgid "Connected — %d:%02dm" +msgstr "מחובר — %d:%02dד'" -#: ../src/empathy-call-window.glade.h:10 -msgid "7" -msgstr "7" +#: ../src/empathy-call-window.ui.h:1 +msgid "Hang up" +msgstr "ניתוק" -#: ../src/empathy-call-window.glade.h:11 -msgid "8" -msgstr "8" +#: ../src/empathy-call-window.ui.h:2 +msgid "Redial" +msgstr "חיוג חוזר" -#: ../src/empathy-call-window.glade.h:12 -msgid "9" -msgstr "9" +#: ../src/empathy-call-window.ui.h:3 +msgid "Send Audio" +msgstr "שלח צליל" -#. To translators: The keypad is numbers [0-9], asterisk (*) and hash (#). Presented like on any phone -#: ../src/empathy-call-window.glade.h:14 -msgid "<b>Keypad</b>" -msgstr "<b>לוח מקשים</b>" +#: ../src/empathy-call-window.ui.h:4 +msgid "Send video" +msgstr "שלח וידאו" -#: ../src/empathy-call-window.glade.h:15 -msgid "<b>Volume</b>" -msgstr "<b>עוצמה</b>" +#: ../src/empathy-call-window.ui.h:5 +msgid "Video preview" +msgstr "תצוגה מקדימה לווידאו" -#: ../src/empathy-call-window.glade.h:16 -msgid "Hang Up" -msgstr "נתק" +#: ../src/empathy-call-window.ui.h:6 +msgid "_Call" +msgstr "_שיחה" -#: ../src/empathy-call-window.glade.h:17 -msgid "Send Video" -msgstr "שלח וידאו" +#: ../src/empathy-call-window.ui.h:7 +#: ../src/empathy-main-window.ui.h:21 +msgid "_View" +msgstr "_תצוגה" -#: ../src/empathy-chat-window.c:310 +#: ../src/empathy-chat-window.c:342 #, c-format msgid "Conversations (%d)" msgstr "שיחות (%d)" -#: ../src/empathy-chat-window.c:415 +#: ../src/empathy-chat-window.c:470 msgid "Topic:" msgstr "נושא:" -#: ../src/empathy-chat-window.c:420 +#: ../src/empathy-chat-window.c:474 msgid "Typing a message." msgstr "מקליד הודעה." -#: ../src/empathy-chat-window.glade.h:1 -msgid "C_lear" -msgstr "נ_קה" - -#: ../src/empathy-chat-window.glade.h:2 -msgid "Chat" -msgstr "שיחה" - -#: ../src/empathy-chat-window.glade.h:3 -msgid "Insert _Smiley" -msgstr "הכנס _סמיילי" - -#: ../src/empathy-chat-window.glade.h:4 -msgid "Invitation _message:" -msgstr "הודעת הזמ_נה:" - -#: ../src/empathy-chat-window.glade.h:5 -msgid "Invite" -msgstr "הזמן" - -#: ../src/empathy-chat-window.glade.h:6 -msgid "Move Tab _Left" -msgstr "הזז לשונית _שמאלה" - -#: ../src/empathy-chat-window.glade.h:7 -msgid "Move Tab _Right" -msgstr "הזז לשונית _ימינה" - -#: ../src/empathy-chat-window.glade.h:8 -msgid "Select who would you like to invite:" -msgstr "" - -#: ../src/empathy-chat-window.glade.h:9 -msgid "You have been invited to join a chat conference." -msgstr "" - -#: ../src/empathy-chat-window.glade.h:10 -msgid "_Contact" -msgstr "_איש קשר" - -#: ../src/empathy-chat-window.glade.h:11 ../src/empathy-main-window.glade.h:10 -msgid "_Contents" -msgstr "_תכנים" - -#: ../src/empathy-chat-window.glade.h:12 -msgid "_Conversation" -msgstr "_שיחה" - -#: ../src/empathy-chat-window.glade.h:13 -msgid "_Detach Tab" -msgstr "_נתק לשונית" - -#: ../src/empathy-chat-window.glade.h:15 -#, fuzzy -#| msgid "_Invite to Chat Room" -msgid "_Favorite Chatroom" -msgstr "_הזמן לחדר שיחה" - -#: ../src/empathy-chat-window.glade.h:16 ../src/empathy-main-window.glade.h:12 -msgid "_Help" -msgstr "_עזרה" - -#: ../src/empathy-chat-window.glade.h:17 -msgid "_Next Tab" -msgstr "_לשונית הבאה" - -#: ../src/empathy-chat-window.glade.h:18 -msgid "_Previous Tab" -msgstr "_לשונית קודמת" - -#: ../src/empathy-chat-window.glade.h:19 -msgid "_Tabs" -msgstr "_לשוניות" +#: ../src/empathy-chat-window.c:935 +#: ../src/empathy-event-manager.c:429 +#, c-format +msgid "New message from %s" +msgstr "הודעה חדשת מ־%s" -#: ../src/empathy-chatrooms-window.c:262 +#: ../src/empathy-chatrooms-window.c:258 msgid "Name" msgstr "שם" -#: ../src/empathy-chatrooms-window.c:280 +#: ../src/empathy-chatrooms-window.c:276 msgid "Room" msgstr "חדר" -#: ../src/empathy-chatrooms-window.c:289 +#: ../src/empathy-chatrooms-window.c:285 msgid "Auto-Connect" msgstr "חיבור אוטומטי" -#: ../src/empathy-chatrooms-window.glade.h:2 -msgid "Edit Favorite Room" -msgstr "ערוך חדר מועדף" - -#: ../src/empathy-chatrooms-window.glade.h:3 -msgid "Join room on start_up" -msgstr "" +#: ../src/empathy-chatrooms-window.ui.h:2 +msgid "Manage Favorite Rooms" +msgstr "ניהול חדרי שיחה מועדפים" -#: ../src/empathy-chatrooms-window.glade.h:4 -msgid "Join this chat room when Empathy starts and you are connected" -msgstr "" +#: ../src/empathy-event-manager.c:377 +msgid "Incoming call" +msgstr "שיחה נכנסת" -#: ../src/empathy-chatrooms-window.glade.h:5 -msgid "Manage Favorite Rooms" -msgstr "" +#: ../src/empathy-event-manager.c:380 +#, c-format +msgid "%s is calling you, do you want to answer?" +msgstr "%s מתקשר אליך, האם ברצונך לענות?" -#: ../src/empathy-chatrooms-window.glade.h:6 -msgid "N_ame:" -msgstr "ש_ם:" +#: ../src/empathy-event-manager.c:387 +msgid "_Reject" +msgstr "_דחה" -#: ../src/empathy-chatrooms-window.glade.h:7 -msgid "S_erver:" -msgstr "ש_רת:" +#: ../src/empathy-event-manager.c:393 +msgid "_Answer" +msgstr "_השב" -#: ../src/empathy-chatrooms-window.glade.h:9 -#: ../src/empathy-new-chatroom-dialog.glade.h:9 -msgid "_Room:" -msgstr "_חדר:" +#: ../src/empathy-event-manager.c:507 +#, c-format +msgid "Incoming call from %s" +msgstr "שיחה נכנסת מ־%s" -#: ../src/empathy-event-manager.c:193 +#: ../src/empathy-event-manager.c:547 #, c-format -msgid "" -"New message from %s:\n" -"%s" +msgid "%s is offering you an invitation" +msgstr "%s שולח לך הזמנה" + +#: ../src/empathy-event-manager.c:553 +msgid "An external application will be started to handle it." msgstr "" -#: ../src/empathy-event-manager.c:261 -#, c-format -msgid "Incoming call from %s" +#: ../src/empathy-event-manager.c:558 +msgid "You don't have the needed external application to handle it." msgstr "" -#: ../src/empathy-event-manager.c:310 +#: ../src/empathy-event-manager.c:685 +msgid "Room invitation" +msgstr "הזמנה לחדר" + +#: ../src/empathy-event-manager.c:688 #, c-format -msgid "" -"%s is offering you an invitation. An external application will be started to " -"handle it." -msgstr "" +msgid "%s is inviting you to join %s" +msgstr "%s מזמין אותך להצטרף אל %s" + +#: ../src/empathy-event-manager.c:696 +msgid "_Decline" +msgstr "_סרב" + +#: ../src/empathy-event-manager.c:701 +#: ../src/empathy-new-chatroom-dialog.ui.h:7 +msgid "_Join" +msgstr "_הצטרף" -#: ../src/empathy-event-manager.c:317 +#: ../src/empathy-event-manager.c:740 #, c-format -msgid "" -"%s is offering you an invitation, but you don't have the needed external " -"application to handle it." -msgstr "" +msgid "%s invited you to join %s" +msgstr "%s הזמין אותך להצטרף אל %s" -#: ../src/empathy-event-manager.c:452 +#: ../src/empathy-event-manager.c:766 #, c-format msgid "Incoming file transfer from %s" msgstr "" -#: ../src/empathy-event-manager.c:542 +#: ../src/empathy-event-manager.c:946 #, c-format msgid "Subscription requested by %s" msgstr "" -#: ../src/empathy-event-manager.c:546 +#: ../src/empathy-event-manager.c:950 #, c-format msgid "" "\n" @@ -1731,618 +1755,799 @@ msgstr "" "\n" "הודעה: %s" -#: ../src/empathy-ft-manager.c:111 +#. Translators: time left, when it is more than one hour +#: ../src/empathy-ft-manager.c:101 #, c-format msgid "%u:%02u.%02u" msgstr "" -#: ../src/empathy-ft-manager.c:113 +#. Translators: time left, when is is less than one hour +#: ../src/empathy-ft-manager.c:104 #, c-format msgid "%02u.%02u" msgstr "" -#: ../src/empathy-ft-manager.c:162 -msgid "No reason was specified" -msgstr "לא צויינה סיבה" - -#: ../src/empathy-ft-manager.c:164 -msgid "The change in state was requested" -msgstr "" - -#: ../src/empathy-ft-manager.c:166 -msgid "You canceled the file transfer" -msgstr "ביטלת את ההעברה" - -#: ../src/empathy-ft-manager.c:168 -msgid "The other participant canceled the file transfer" -msgstr "" +#: ../src/empathy-ft-manager.c:180 +msgctxt "file transfer percent" +msgid "Unknown" +msgstr "לא ידוע" -#: ../src/empathy-ft-manager.c:170 -msgid "Error while trying to transfer the file" +#: ../src/empathy-ft-manager.c:275 +#, c-format +msgid "%s of %s at %s/s" msgstr "" -#: ../src/empathy-ft-manager.c:172 -msgid "The other participant is unable to transfer the file" +#: ../src/empathy-ft-manager.c:276 +#, c-format +msgid "%s of %s" msgstr "" -#: ../src/empathy-ft-manager.c:174 -#| msgid "Unknown error" -msgid "Unknown reason" -msgstr "סיבה לא ידועה" - #. translators: first %s is filename, second %s is the contact name -#: ../src/empathy-ft-manager.c:222 +#: ../src/empathy-ft-manager.c:307 #, c-format msgid "Receiving \"%s\" from %s" -msgstr "" +msgstr "מקבל את הקובץ \"%s\" מ־%s" #. translators: first %s is filename, second %s is the contact name -#: ../src/empathy-ft-manager.c:225 +#: ../src/empathy-ft-manager.c:310 #, c-format msgid "Sending \"%s\" to %s" msgstr "שולח את \"%s\" ל-\"%s\"" -#: ../src/empathy-ft-manager.c:235 -#| msgid "unknown" -msgctxt "file size" -msgid "Unknown" -msgstr "לא ידוע" +#. translators: first %s is filename, second %s +#. * is the contact name +#: ../src/empathy-ft-manager.c:340 +#, c-format +msgid "Error receiving \"%s\" from %s" +msgstr "התרחשה שגיאה בקבלת הקובץ \"%s\" מ־%s" -#. translators: first %s is the transferred size, second %s is -#. * the total file size -#: ../src/empathy-ft-manager.c:243 +#: ../src/empathy-ft-manager.c:343 +msgid "Error receiving a file" +msgstr "שגיאה בקבלת קובץ" + +#: ../src/empathy-ft-manager.c:348 #, c-format -msgid "%s of %s" -msgstr "" +msgid "Error sending \"%s\" to %s" +msgstr "שגיאה בשליחת הקובץ \"%s\" אל %s" -#: ../src/empathy-ft-manager.c:250 -msgid "Waiting the other participant's response" -msgstr "" +#: ../src/empathy-ft-manager.c:351 +msgid "Error sending a file" +msgstr "שגיאה בשליחת קובץ" -#: ../src/empathy-ft-manager.c:260 +#. translators: first %s is filename, second %s +#. * is the contact name +#: ../src/empathy-ft-manager.c:490 #, c-format msgid "\"%s\" received from %s" -msgstr "" +msgstr "הקובץ \"%s\" התקבל מ־%s" -#: ../src/empathy-ft-manager.c:266 -#, fuzzy, c-format -#| msgid "Topic set to: %s" +#. translators: first %s is filename, second %s +#. * is the contact name +#: ../src/empathy-ft-manager.c:495 +#, c-format msgid "\"%s\" sent to %s" -msgstr "הנושא נקבע ל: %s" +msgstr "הקובץ \"%s\" נשלח אל %s" -#: ../src/empathy-ft-manager.c:269 +#: ../src/empathy-ft-manager.c:498 msgid "File transfer completed" -msgstr "" +msgstr "העברת קובץ הושלמה" -#: ../src/empathy-ft-manager.c:278 -#, c-format -msgid "\"%s\" receiving from %s" -msgstr "" +#: ../src/empathy-ft-manager.c:617 +#: ../src/empathy-ft-manager.c:784 +msgid "Waiting for the other participant's response" +msgstr "ממתין לתגובה של משתתפים נוספים" -#: ../src/empathy-ft-manager.c:284 +#: ../src/empathy-ft-manager.c:643 +#: ../src/empathy-ft-manager.c:681 #, c-format -msgid "\"%s\" sending to %s" +msgid "Checking integrity of \"%s\"" msgstr "" -#: ../src/empathy-ft-manager.c:287 +#: ../src/empathy-ft-manager.c:646 +#: ../src/empathy-ft-manager.c:684 #, c-format -msgid "File transfer canceled: %s" +msgid "Hashing \"%s\"" msgstr "" -#: ../src/empathy-ft-manager.c:302 -#, fuzzy -#| msgid "unknown" -msgctxt "remaining time" -msgid "Unknown" -msgstr "לא ידוע" - -#: ../src/empathy-ft-manager.c:362 -#, fuzzy -#| msgid "unknown" -msgctxt "file transfer percent" -msgid "Unknown" -msgstr "לא ידוע" - -#: ../src/empathy-ft-manager.c:698 +#: ../src/empathy-ft-manager.c:1024 msgid "%" msgstr "" -#: ../src/empathy-ft-manager.c:710 -#| msgid "All Files" +#: ../src/empathy-ft-manager.c:1036 msgid "File" msgstr "קובץ" -#: ../src/empathy-ft-manager.c:732 -#, fuzzy -#| msgid "Ringing" +#: ../src/empathy-ft-manager.c:1058 msgid "Remaining" -msgstr "מצלצל" +msgstr "נותר" -#: ../src/empathy-ft-manager.c:883 -msgid "Cannot save file to this location" -msgstr "" - -#: ../src/empathy-ft-manager.c:929 -#, fuzzy -#| msgid "_Send File..." -msgid "Save file as..." -msgstr "_שלח קובץ..." - -#: ../src/empathy-ft-manager.c:999 -#| msgid "unknown" -msgid "unknown size" -msgstr "גודל לא ידוע" - -#: ../src/empathy-ft-manager.c:1005 -#, fuzzy, c-format -#| msgid "I would like to add you to my contact list." -msgid "%s would like to send you a file" -msgstr "הייתי רוצה להוסיף אותך לרשימת אנשי הקשר שלי." - -#: ../src/empathy-ft-manager.c:1010 -#, c-format -msgid "Do you want to accept the file \"%s\" (%s)?" -msgstr "" - -#. Decline button -#: ../src/empathy-ft-manager.c:1019 -msgid "_Decline" -msgstr "_סרב" - -#. Accept button -#: ../src/empathy-ft-manager.c:1028 -#, fuzzy -#| msgid "_Accounts" -msgid "_Accept" -msgstr "_חשבונות" - -#: ../src/empathy-ft-manager.glade.h:1 +#: ../src/empathy-ft-manager.ui.h:1 msgid "File transfers" -msgstr "" +msgstr "העברות קבצים" -#: ../src/empathy-ft-manager.glade.h:2 +#: ../src/empathy-ft-manager.ui.h:2 msgid "Remove completed, canceled and failed file transfers from the list" msgstr "" -#: ../src/empathy-ft-manager.glade.h:3 -msgid "gtk-clear" -msgstr "gtk-clear" - -#: ../src/empathy-import-dialog.c:249 -#, fuzzy -#| msgid "Port" +#. Translators: this is the header of a treeview column +#: ../src/empathy-import-dialog.c:259 msgid "Import" -msgstr "שער" +msgstr "ייבוא" -#: ../src/empathy-import-dialog.c:258 +#: ../src/empathy-import-dialog.c:268 msgid "Protocol" msgstr "פרוטוקול" -#: ../src/empathy-import-dialog.c:284 -#, fuzzy -#| msgid "Reso_urce:" +#: ../src/empathy-import-dialog.c:294 msgid "Source" -msgstr "_משאב:" +msgstr "מקור" -#: ../src/empathy-import-dialog.c:372 -msgid "" -"No accounts to import could be found. Empathy currently only supports " -"importing accounts from Pidgin." +#: ../src/empathy-import-dialog.c:388 +msgid "No accounts to import could be found. Empathy currently only supports importing accounts from Pidgin." msgstr "" -#: ../src/empathy-import-dialog.glade.h:1 -#, fuzzy -#| msgid "Empathy accounts" +#: ../src/empathy-import-dialog.ui.h:1 msgid "Import Accounts" -msgstr "חשבונות Empathy" - -#: ../src/empathy-import-dialog.glade.h:2 -msgid "gtk-cancel" -msgstr "gtk-cancel" +msgstr "ייבוא חשבונות" -#: ../src/empathy-import-dialog.glade.h:3 -msgid "gtk-ok" -msgstr "gtk-ok" +#: ../src/empathy-main-window.c:395 +msgid "_Edit account" +msgstr "_ערוך חשבון" -#: ../src/empathy-main-window.c:388 +#: ../src/empathy-main-window.c:498 msgid "No error specified" -msgstr "לא צויינה שגיאה" +msgstr "לא צוינה שגיאה" -#: ../src/empathy-main-window.c:391 +#: ../src/empathy-main-window.c:501 msgid "Network error" msgstr "שגיאת רשת" -#: ../src/empathy-main-window.c:394 +#: ../src/empathy-main-window.c:504 msgid "Authentication failed" msgstr "האימות נכשל" -#: ../src/empathy-main-window.c:397 +#: ../src/empathy-main-window.c:507 msgid "Encryption error" -msgstr "שגיטת הצפנה" +msgstr "שגיאת הצפנה" -#: ../src/empathy-main-window.c:400 +#: ../src/empathy-main-window.c:510 msgid "Name in use" msgstr "השם בשימוש" -#: ../src/empathy-main-window.c:403 +#: ../src/empathy-main-window.c:513 msgid "Certificate not provided" msgstr "לא סופקה תעודה" -#: ../src/empathy-main-window.c:406 +#: ../src/empathy-main-window.c:516 msgid "Certificate untrusted" msgstr "" -#: ../src/empathy-main-window.c:409 +#: ../src/empathy-main-window.c:519 msgid "Certificate expired" msgstr "התעודה לא תקפה" -#: ../src/empathy-main-window.c:412 +#: ../src/empathy-main-window.c:522 msgid "Certificate not activated" msgstr "" -#: ../src/empathy-main-window.c:415 +#: ../src/empathy-main-window.c:525 msgid "Certificate hostname mismatch" msgstr "" -#: ../src/empathy-main-window.c:418 +#: ../src/empathy-main-window.c:528 msgid "Certificate fingerprint mismatch" msgstr "" -#: ../src/empathy-main-window.c:421 +#: ../src/empathy-main-window.c:531 msgid "Certificate self-signed" msgstr "" -#: ../src/empathy-main-window.c:424 +#: ../src/empathy-main-window.c:534 msgid "Certificate error" -msgstr "שגיטת תעודה" +msgstr "שגיאת תעודה" -#: ../src/empathy-main-window.c:427 +#: ../src/empathy-main-window.c:537 msgid "Unknown error" msgstr "שגיאה לא ידועה" -#: ../src/empathy-main-window.c:585 -msgid "Show and edit accounts" -msgstr "הצג וערוך חשבונות" - -#: ../src/empathy-main-window.c:957 +#: ../src/empathy-main-window.c:888 msgid "Contact" msgstr "איש קשר" -#: ../src/empathy-main-window.c:1159 -msgid "_Edit account" -msgstr "_ערוך חשבון" +#: ../src/empathy-main-window.c:1220 +msgid "Show and edit accounts" +msgstr "הצג וערוך חשבונות" -#: ../src/empathy-main-window.glade.h:1 +#: ../src/empathy-main-window.ui.h:1 msgid "Contact List" msgstr "רשימת אנשי קשר" -#: ../src/empathy-main-window.glade.h:2 +#: ../src/empathy-main-window.ui.h:2 +msgid "Contacts on a _Map" +msgstr "" + +#: ../src/empathy-main-window.ui.h:3 msgid "Context" msgstr "הקשר" -#: ../src/empathy-main-window.glade.h:3 +#: ../src/empathy-main-window.ui.h:4 msgid "Join _Favorites" -msgstr "" - -#: ../src/empathy-main-window.glade.h:4 -msgid "Join _New..." -msgstr "" +msgstr "_צירוף למועדפים" -#: ../src/empathy-main-window.glade.h:5 +#: ../src/empathy-main-window.ui.h:5 msgid "Manage Favorites" msgstr "נהל מועדפים" -#: ../src/empathy-main-window.glade.h:6 -msgid "Show _Offline Contacts" -msgstr "הצג אנשי קשר _מנותקים" - -#: ../src/empathy-main-window.glade.h:7 +#: ../src/empathy-main-window.ui.h:6 msgid "_Accounts" msgstr "_חשבונות" -#: ../src/empathy-main-window.glade.h:8 +#: ../src/empathy-main-window.ui.h:7 msgid "_Add Contact..." msgstr "_הוסף איש קשר..." -#: ../src/empathy-main-window.glade.h:13 ../src/empathy-status-icon.glade.h:2 +#: ../src/empathy-main-window.ui.h:9 +msgid "_Contents" +msgstr "_תכנים" + +#: ../src/empathy-main-window.ui.h:10 +msgid "_Debug" +msgstr "_ניפוי שגיאות" + +#: ../src/empathy-main-window.ui.h:12 +msgid "_File Transfers" +msgstr "העברות _קבצים" + +#: ../src/empathy-main-window.ui.h:13 +msgid "_Help" +msgstr "_עזרה" + +#: ../src/empathy-main-window.ui.h:14 +msgid "_Join..." +msgstr "_הצטרף..." + +#: ../src/empathy-main-window.ui.h:15 +#: ../src/empathy-status-icon.ui.h:2 msgid "_New Conversation..." msgstr "_שיחה חדשה..." -#: ../src/empathy-main-window.glade.h:14 +#: ../src/empathy-main-window.ui.h:16 +msgid "_Offline Contacts" +msgstr "אנשי קשר _לא מחוברים" + +#: ../src/empathy-main-window.ui.h:17 msgid "_Personal Information" msgstr "מידע _אישי" -#: ../src/empathy-main-window.glade.h:16 +#: ../src/empathy-main-window.ui.h:19 +msgid "_Previous Conversations" +msgstr "שיחות _קודמות" + +#: ../src/empathy-main-window.ui.h:20 msgid "_Room" msgstr "_חדר" -#: ../src/empathy-new-chatroom-dialog.c:291 -msgid "Chat Rooms" -msgstr "חדרי שיחה" +#: ../src/empathy-new-chatroom-dialog.c:332 +msgid "Chat Room" +msgstr "חדר שיחה" -#: ../src/empathy-new-chatroom-dialog.glade.h:2 -msgid "Browse:" -msgstr "עיין:" +#: ../src/empathy-new-chatroom-dialog.c:348 +msgid "Members" +msgstr "חברים" -#: ../src/empathy-new-chatroom-dialog.glade.h:3 +#: ../src/empathy-new-chatroom-dialog.c:492 +#, c-format +msgctxt "Room/Join's roomlist tooltip. Parametersare a channel name, yes/no, yes/no and a number." msgid "" -"Enter the room name to join here or click on one or more rooms in the list." +"<b>%s</b>\n" +"Invite required: %s\n" +"Password required: %s\n" +"Members: %s" msgstr "" +"<b>%s</b>\n" +"נדרשת הזמנה: %s\n" +"נדרשת סיסמה: %s\n" +"חברים: %s" -#: ../src/empathy-new-chatroom-dialog.glade.h:4 -msgid "" -"Enter the server which hosts the room, or leave it empty if the room is on " -"the current account's server" +#: ../src/empathy-new-chatroom-dialog.c:494 +#: ../src/empathy-new-chatroom-dialog.c:495 +msgid "Yes" +msgstr "כן" + +#: ../src/empathy-new-chatroom-dialog.c:494 +#: ../src/empathy-new-chatroom-dialog.c:495 +msgid "No" +msgstr "לא" + +#: ../src/empathy-new-chatroom-dialog.c:522 +msgid "Could not start room listing" msgstr "" -#: ../src/empathy-new-chatroom-dialog.glade.h:5 -msgid "Join" +#: ../src/empathy-new-chatroom-dialog.c:532 +msgid "Could not stop room listing" msgstr "" -#: ../src/empathy-new-chatroom-dialog.glade.h:6 -msgid "Join New" +#: ../src/empathy-new-chatroom-dialog.ui.h:2 +msgid "Couldn't load room list" msgstr "" -#: ../src/empathy-new-chatroom-dialog.glade.h:7 -msgid "Re_fresh" -msgstr "רע_נן" +#: ../src/empathy-new-chatroom-dialog.ui.h:3 +msgid "Enter the room name to join here or click on one or more rooms in the list." +msgstr "" -#: ../src/empathy-new-chatroom-dialog.glade.h:8 -msgid "" -"This list represents all chat rooms hosted on the server you have entered." +#: ../src/empathy-new-chatroom-dialog.ui.h:4 +msgid "Enter the server which hosts the room, or leave it empty if the room is on the current account's server" msgstr "" -#: ../src/empathy-preferences.c:153 +#: ../src/empathy-new-chatroom-dialog.ui.h:5 +msgid "Join Room" +msgstr "הצטרף לחדר" + +#: ../src/empathy-new-chatroom-dialog.ui.h:6 +msgid "Room List" +msgstr "רשימת חדרים" + +#: ../src/empathy-new-chatroom-dialog.ui.h:8 +msgid "_Room:" +msgstr "_חדר:" + +#: ../src/empathy-preferences.c:158 msgid "Message received" msgstr "התקבלה הודעה" -#: ../src/empathy-preferences.c:154 -#, fuzzy -#| msgid "" -#| "\n" -#| "Message: %s" +#: ../src/empathy-preferences.c:159 msgid "Message sent" -msgstr "" -"\n" -"הודעה: %s" +msgstr "הודעה שנשלחה" -#: ../src/empathy-preferences.c:155 -#, fuzzy -#| msgid "New Conversation" +#: ../src/empathy-preferences.c:160 msgid "New conversation" msgstr "שיחה חדשה" -#: ../src/empathy-preferences.c:156 -#, fuzzy +#: ../src/empathy-preferences.c:161 msgid "Contact goes online" -msgstr "Contact list sort criterium" +msgstr "איש קשר מתחבר" -#: ../src/empathy-preferences.c:157 -#, fuzzy +#: ../src/empathy-preferences.c:162 msgid "Contact goes offline" -msgstr "Contact list sort criterium" +msgstr "איש קשר מתנתק" -#: ../src/empathy-preferences.c:158 -#, fuzzy -#| msgid "Disconnected" +#: ../src/empathy-preferences.c:163 msgid "Account connected" -msgstr "מנותק" +msgstr "חשבון מחובר" -#: ../src/empathy-preferences.c:159 -#, fuzzy -#| msgid "Disconnected" +#: ../src/empathy-preferences.c:164 msgid "Account disconnected" -msgstr "מנותק" +msgstr "חשבון התנתק" -#: ../src/empathy-preferences.c:376 +#: ../src/empathy-preferences.c:427 msgid "Language" msgstr "שפה" -#: ../src/empathy-preferences.glade.h:1 +#: ../src/empathy-preferences.ui.h:1 msgid "<b>Appearance</b>" msgstr "<b>מראה</b>" -#: ../src/empathy-preferences.glade.h:2 -msgid "<b>Behaviour</b>" +#: ../src/empathy-preferences.ui.h:2 +msgid "<b>Behavior</b>" msgstr "<b>התנהגות</b>" -#: ../src/empathy-preferences.glade.h:3 +#: ../src/empathy-preferences.ui.h:3 msgid "<b>Contact List</b>" msgstr "<b>רשימת אנשי קשר</b>" -#: ../src/empathy-preferences.glade.h:4 +#: ../src/empathy-preferences.ui.h:4 msgid "<b>Enable spell checking for languages:</b>" msgstr "<b>הפעל בדיקת איות עבור השפות:</b>" -#: ../src/empathy-preferences.glade.h:5 +#: ../src/empathy-preferences.ui.h:5 +msgid "<b>Geoclue Settings</b>" +msgstr "<b>הגדרות Geoclue</b>" + +#: ../src/empathy-preferences.ui.h:6 msgid "<b>Play sound for events</b>" -msgstr "" +msgstr "<b>השמע צליל עבור אירועים</b>" -#: ../src/empathy-preferences.glade.h:6 -msgid "" -"<small>The list of languages reflects only the languages for which you have " -"a dictionary installed.</small>" +#: ../src/empathy-preferences.ui.h:7 +msgid "<b>Privacy</b>" +msgstr "<b>פרטיות</b>" + +#: ../src/empathy-preferences.ui.h:8 +msgid "<small>Reduced location accuracy means that nothing more precise than your city, state and country will be published. GPS coordinates will have a random value added (±0.25°).</small>" +msgstr "<small>הפחתת רמת הדיוק של המיקום אומרת שהמידע המדויק ביותר שיפורסם הוא העיר, המדינה והארץ שלך. לנקודות ציון מ־GPS יתווסף ערך אקראי (±0.25°). </small>" + +#: ../src/empathy-preferences.ui.h:9 +msgid "<small>The list of languages reflects only the languages for which you have a dictionary installed.</small>" msgstr "<small>ברשימת השפות מוצגות שפות שעבורן מותקנים אצלך מילונים.</small>" -#: ../src/empathy-preferences.glade.h:7 -msgid "Automatically _connect on startup " +#: ../src/empathy-preferences.ui.h:10 +msgid "<span foreground=\"red\">Not a valid adium theme</span>" +msgstr "" + +#: ../src/empathy-preferences.ui.h:11 +msgid "Adium theme to use:" +msgstr "" + +#: ../src/empathy-preferences.ui.h:12 +msgid "Allow _GPS usage" +msgstr "לאפשר שימוש ב־_GPS" + +#: ../src/empathy-preferences.ui.h:13 +msgid "Allow _cellphone usage" msgstr "" -#: ../src/empathy-preferences.glade.h:8 +#: ../src/empathy-preferences.ui.h:14 +msgid "Allow _network usage" +msgstr "" + +#: ../src/empathy-preferences.ui.h:15 +msgid "Automatically _connect on startup " +msgstr "_התחבר אוטומטי על ההפעלה" + +#: ../src/empathy-preferences.ui.h:16 msgid "Avatars are user chosen images shown in the contact list" msgstr "" -#: ../src/empathy-preferences.glade.h:9 +#: ../src/empathy-preferences.ui.h:17 msgid "Chat Th_eme:" msgstr "ער_כת נושא לשיחה:" -#: ../src/empathy-preferences.glade.h:10 -#, fuzzy -#| msgid "Enable sound when away" +#: ../src/empathy-preferences.ui.h:18 +msgid "Disable notifications when _away or busy" +msgstr "בטל התרעות בזמן מצב _מרוחק או עסוק" + +#: ../src/empathy-preferences.ui.h:19 msgid "Disable sounds when _away or busy" -msgstr "Enable sound when away" +msgstr "בטל צלילים בזמן מצב _מרוחק או עסוק" + +#: ../src/empathy-preferences.ui.h:20 +msgid "Enable notifications when the _chat is not focused" +msgstr "" -#: ../src/empathy-preferences.glade.h:11 +#: ../src/empathy-preferences.ui.h:21 msgid "General" msgstr "כללי" -#: ../src/empathy-preferences.glade.h:12 +#: ../src/empathy-preferences.ui.h:22 +msgid "Location" +msgstr "מיקום" + +#: ../src/empathy-preferences.ui.h:23 +msgid "Notifications" +msgstr "התרעות" + +#: ../src/empathy-preferences.ui.h:24 msgid "Preferences" msgstr "העדפות" -#: ../src/empathy-preferences.glade.h:13 +#: ../src/empathy-preferences.ui.h:25 msgid "Show _avatars" msgstr "הצג _תמנות אישיות" -#: ../src/empathy-preferences.glade.h:14 +#: ../src/empathy-preferences.ui.h:26 msgid "Show _smileys as images" -msgstr "" +msgstr "הצד _סמיילים כתמונות" -#: ../src/empathy-preferences.glade.h:15 +#: ../src/empathy-preferences.ui.h:27 msgid "Show co_mpact contact list" -msgstr "" +msgstr "הצג רשימת אנשי קשר מ_צומצמת" -#: ../src/empathy-preferences.glade.h:16 +#: ../src/empathy-preferences.ui.h:28 msgid "Sort by _name" msgstr "מיין לפי _שם" -#: ../src/empathy-preferences.glade.h:17 +#: ../src/empathy-preferences.ui.h:29 msgid "Sort by s_tate" msgstr "מיין לפי מצ_ב" -#: ../src/empathy-preferences.glade.h:18 +#: ../src/empathy-preferences.ui.h:30 msgid "Sounds" -msgstr "" +msgstr "צלילים" -#: ../src/empathy-preferences.glade.h:19 +#: ../src/empathy-preferences.ui.h:31 msgid "Spell Checking" msgstr "בדיקת איות" -#: ../src/empathy-preferences.glade.h:20 +#: ../src/empathy-preferences.ui.h:32 +msgid "Sélectionner un dossier" +msgstr "" + +#: ../src/empathy-preferences.ui.h:33 msgid "Themes" msgstr "ערכות נושא" -#: ../src/empathy-preferences.glade.h:21 -#, fuzzy -#| msgid "Enable sound when away" +#: ../src/empathy-preferences.ui.h:34 +msgid "_Enable bubble notifications" +msgstr "_הפעל התרעות בתוך בועה" + +#: ../src/empathy-preferences.ui.h:35 msgid "_Enable sound notifications" -msgstr "Enable sound when away" +msgstr "_הפעל התרעות קול" -#: ../src/empathy-preferences.glade.h:22 +#: ../src/empathy-preferences.ui.h:36 msgid "_Open new chats in separate windows" msgstr "_פתח שיחות חדשות בחלונות נפרדים" -#: ../src/empathy-status-icon.glade.h:1 +#: ../src/empathy-preferences.ui.h:37 +msgid "_Publish location to my contacts" +msgstr "_פרסם את המיקום שלי לאנשי הקשר שלי" + +#: ../src/empathy-preferences.ui.h:38 +msgid "_Reduce location accuracy" +msgstr "_הפחת את דיוק המיקום" + +#: ../src/empathy-status-icon.ui.h:1 msgid "Status" msgstr "מצב" -#: ../src/empathy-status-icon.glade.h:3 +#: ../src/empathy-status-icon.ui.h:3 msgid "_Quit" msgstr "יצי_אה" -#: ../src/empathy-status-icon.glade.h:4 +#: ../src/empathy-status-icon.ui.h:4 msgid "_Show Contact List" msgstr "_הצג רשימת אנשי קשר" -#: ../src/empathy-tube-dispatch.c:356 +#: ../src/empathy-tube-dispatch.c:375 #, c-format msgid "Unable to start application for service %s: %s" msgstr "" -#: ../src/empathy-tube-dispatch.c:427 +#: ../src/empathy-tube-dispatch.c:446 #, c-format -msgid "" -"An invitation was offered for service %s, but you don't have the needed " -"application to handle it" +msgid "An invitation was offered for service %s, but you don't have the needed application to handle it" msgstr "" +#: ../src/empathy-call-window-fullscreen.ui.h:1 +msgid "gtk-leave-fullscreen" +msgstr "gtk-leave-fullscreen" + +#: ../src/empathy-map-view.ui.h:1 +#, fuzzy +msgid "Contact Map View" +msgstr "רשימת אנשי קשר" + +#: ../src/empathy-debug-dialog.c:111 +#: ../src/empathy-debug-dialog.c:1075 +msgid "Error" +msgstr "שגיאה" + +#: ../src/empathy-debug-dialog.c:114 +#: ../src/empathy-debug-dialog.c:1069 +msgid "Critical" +msgstr "קריטי" + +#: ../src/empathy-debug-dialog.c:117 +#: ../src/empathy-debug-dialog.c:1063 +msgid "Warning" +msgstr "אזהרה" + +#: ../src/empathy-debug-dialog.c:120 +#: ../src/empathy-debug-dialog.c:1057 +#: ../src/empathy-debug-dialog.c:1105 +msgid "Message" +msgstr "הודעה" + +#: ../src/empathy-debug-dialog.c:123 +#: ../src/empathy-debug-dialog.c:1051 +msgid "Info" +msgstr "מידע" + +#: ../src/empathy-debug-dialog.c:126 +#: ../src/empathy-debug-dialog.c:1045 +msgid "Debug" +msgstr "ניפוי שגיאות" + +#: ../src/empathy-debug-dialog.c:837 +msgid "Save" +msgstr "שמור" + +#: ../src/empathy-debug-dialog.c:940 +msgid "Debug Window" +msgstr "חלון ניפוי שגיאות" + +#: ../src/empathy-debug-dialog.c:1013 +msgid "Pause" +msgstr "עצור" + +#: ../src/empathy-debug-dialog.c:1025 +msgid "Level " +msgstr "" + +#: ../src/empathy-debug-dialog.c:1094 +msgid "Time" +msgstr "זמן" + +#: ../src/empathy-debug-dialog.c:1096 +msgid "Domain" +msgstr "תחום" + +#: ../src/empathy-debug-dialog.c:1098 +msgid "Category" +msgstr "" + +#: ../src/empathy-debug-dialog.c:1100 +msgid "Level" +msgstr "" + +#: ../src/empathy-debug-dialog.c:1132 +msgid "The selected connection manager does not support the remote debugging extension." +msgstr "" + +#~ msgid "Enable popup when contact is available" +#~ msgstr "Enable popup when contact is available" +#~ msgid "Whether or not to show a popup when a contact becomes available." +#~ msgstr "Whether or not to show a popup when a contact becomes available." +#~ msgid "Edit the selected IRC network" +#~ msgstr "ערוך רשת IRC מסומנת" +#~ msgid "Remove the selected IRC network" +#~ msgstr "הסר רשת IRC מסומנת" +#~ msgid "_Check Word Spelling..." +#~ msgstr "ב_דוק איות..." +#~ msgid "Contact Information" +#~ msgstr "מידע איש קשר" +#~ msgid "I would like to add you to my contact list." +#~ msgstr "הייתי רוצה להוסיף אותך לרשימת אנשי הקשר שלי." +#~ msgid "Sorry, I don't want you in my contact list anymore." +#~ msgstr "מצטער, אני יותר לא רוצה אותך ברשימת אנשי הקשר שלי." +#~ msgid "Contact information" +#~ msgstr "נתוני איש קשר" +#~ msgid "Word" +#~ msgstr "מילה" +#~ msgid "Suggestions for the word" +#~ msgstr "הצעות עבור המילה" +#~ msgid "Spell Checker" +#~ msgstr "בודק איות" +#~ msgid "Suggestions for the word:" +#~ msgstr "הצעות עבור המילה:" +#~ msgid "Closed" +#~ msgstr "סגור" +#~ msgid "End this call?" +#~ msgstr "לסיים את השיחה?" +#~ msgid "Empathy Call" +#~ msgstr "שיחת Empathy" +#~ msgid "Ringing" +#~ msgstr "מצלצל" +#~ msgid "#" +#~ msgstr "#" +#~ msgid "*" +#~ msgstr "*" +#~ msgid "0" +#~ msgstr "0" +#~ msgid "1" +#~ msgstr "1" +#~ msgid "2" +#~ msgstr "2" +#~ msgid "3" +#~ msgstr "3" +#~ msgid "4" +#~ msgstr "4" +#~ msgid "5" +#~ msgstr "5" +#~ msgid "6" +#~ msgstr "6" +#~ msgid "7" +#~ msgstr "7" +#~ msgid "8" +#~ msgstr "8" +#~ msgid "9" +#~ msgstr "9" +#~ msgid "<b>Keypad</b>" +#~ msgstr "<b>לוח מקשים</b>" +#~ msgid "C_lear" +#~ msgstr "נ_קה" +#~ msgid "Chat" +#~ msgstr "שיחה" +#~ msgid "Insert _Smiley" +#~ msgstr "הכנס _סמיילי" +#~ msgid "Invitation _message:" +#~ msgstr "הודעת הזמ_נה:" +#~ msgid "Invite" +#~ msgstr "הזמן" +#~ msgid "Move Tab _Left" +#~ msgstr "הזז לשונית _שמאלה" +#~ msgid "Move Tab _Right" +#~ msgstr "הזז לשונית _ימינה" +#~ msgid "_Contact" +#~ msgstr "_איש קשר" +#~ msgid "_Conversation" +#~ msgstr "_שיחה" +#~ msgid "_Detach Tab" +#~ msgstr "_נתק לשונית" + +#~| msgid "_Invite to Chat Room" +#~ msgid "_Favorite Chatroom" +#~ msgstr "_הזמן לחדר שיחה" +#~ msgid "_Next Tab" +#~ msgstr "_לשונית הבאה" +#~ msgid "_Previous Tab" +#~ msgstr "_לשונית קודמת" +#~ msgid "_Tabs" +#~ msgstr "_לשוניות" +#~ msgid "Edit Favorite Room" +#~ msgstr "ערוך חדר מועדף" +#~ msgid "N_ame:" +#~ msgstr "ש_ם:" +#~ msgid "S_erver:" +#~ msgstr "ש_רת:" +#~| msgid "unknown" +#~ msgctxt "file size" +#~ msgid "Unknown" +#~ msgstr "לא ידוע" +#~| msgid "unknown" +#~ msgctxt "remaining time" +#~ msgid "Unknown" +#~ msgstr "לא ידוע" +#~| msgid "_Send File..." +#~ msgid "Save file as..." +#~ msgstr "_שלח קובץ..." +#~| msgid "unknown" +#~ msgid "unknown size" +#~ msgstr "גודל לא ידוע" +#~| msgid "I would like to add you to my contact list." +#~ msgid "%s would like to send you a file" +#~ msgstr "הייתי רוצה להוסיף אותך לרשימת אנשי הקשר שלי." +#~| msgid "_Accounts" +#~ msgid "_Accept" +#~ msgstr "_חשבונות" +#~ msgid "gtk-cancel" +#~ msgstr "gtk-cancel" +#~ msgid "Browse:" +#~ msgstr "עיין:" +#~ msgid "Re_fresh" +#~ msgstr "רע_נן" #~ msgid "Enable sound when busy" #~ msgstr "Enable sound when busy" - #~ msgid "Configure Telepathy account settings" #~ msgstr "הגדרות חשבון Telepathy" - #~ msgid "<b>No Accounts Configured</b>" #~ msgstr "<b>לא הוגדרו חשבונות</b>" - #~ msgid "Invitation Error" #~ msgstr "שגיאת הזמנה" - #~ msgid "<b>Audio</b>" #~ msgstr "<b>צליל</b>" - #~ msgid "<b>Visual</b>" #~ msgstr "<b>חזותי</b>" - -#~ msgid "Notifications" -#~ msgstr "התרעות" - #~ msgid "J_apan server:" #~ msgstr "שרת _יפן:" - #~ msgid "Invalid account" #~ msgstr "חשבון לא תקין" - #, fuzzy #~ msgid "Presence failure" #~ msgstr "Presence" - #~ msgid "Unknown error code" #~ msgstr "מספר שגיאה לא ידוע" - #~ msgid "jabber account settings" #~ msgstr "הגדרות חשבון jabber" - #~ msgid "msn account settings" #~ msgstr "הגדרות חשבון msn" - #~ msgid "salut account settings" #~ msgstr "הגדרות חשבון salut" - #~ msgid "Input" #~ msgstr "קלט" - #~ msgid "Mute" #~ msgstr "השתק" - #~ msgid "Output" #~ msgstr "פלט" - #~ msgid "Cu_t" #~ msgstr "ג_זור" - #~ msgid "In_vite..." #~ msgstr "הז_מן..." - #~ msgid "_Add To Favorites" #~ msgstr "_הוסף למועדפים" - #~ msgid "_Copy" #~ msgstr "_העתק" - -#~ msgid "_Paste" -#~ msgstr "_הדבק" - #~ msgid "_Show Contacts" #~ msgstr "_הצג אנשי קשר" - #~ msgid "Re_name" #~ msgstr "שנה _שם" - #~ msgid "Rename" #~ msgstr "שנה שם" - #~ msgid "Start a voice or video conversation with this contact" #~ msgstr "התחל שיחת קול או וידאו עם איש קשר הזה" - -#~ msgid "<b>Options</b>" -#~ msgstr "<b>אפשרויות</b>" - #~ msgid "_Use for chat rooms" #~ msgstr "_שימוש בחדרי שיחה" - #~ msgid "%s went offline" #~ msgstr "%s התנתק" - #~ msgid "%s has come online" #~ msgstr "%s התחבר" + @@ -6,8 +6,8 @@ msgid "" msgstr "" "Project-Id-Version: empathy 0.24.x\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2009-02-06 15:15+0100\n" -"PO-Revision-Date: 2009-02-06 15:17+0100\n" +"POT-Creation-Date: 2009-06-10 10:03+0200\n" +"PO-Revision-Date: 2009-06-10 10:13+0200\n" "Last-Translator: Kjartan Maraas <kmaraas@gnome.org>\n" "Language-Team: Norwegian <i18n-nb@lister.ping.uio.no>\n" "MIME-Version: 1.0\n" @@ -59,252 +59,305 @@ msgid "Default directory to select an avatar image from" msgstr "Forvalgt mappe for personbilde" #: ../data/empathy.schemas.in.h:8 -#, fuzzy msgid "Disable popup notifications when away" -msgstr "Slå av lyder når du er borte" +msgstr "Slå av varsling når du er borte" #: ../data/empathy.schemas.in.h:9 msgid "Disable sounds when away" msgstr "Slå av lyder når du er borte" #: ../data/empathy.schemas.in.h:10 +msgid "Empathy can publish the user's location" +msgstr "Empathy kan publisere brukers lokasjon" + +#: ../data/empathy.schemas.in.h:11 +msgid "Empathy can use the GPS to guess the location" +msgstr "Empathy kan bruke GPS til å gjette lokasjonen" + +#: ../data/empathy.schemas.in.h:12 +msgid "Empathy can use the cellular network to guess the location" +msgstr "" + +#: ../data/empathy.schemas.in.h:13 +msgid "Empathy can use the network to guess the location" +msgstr "" + +#: ../data/empathy.schemas.in.h:14 msgid "Empathy default download folder" msgstr "Forvalgt nedlastingsmappe for Empathy" -#: ../data/empathy.schemas.in.h:11 +#: ../data/empathy.schemas.in.h:15 msgid "Empathy has asked about importing accounts" msgstr "Empathy har spurt om import av kontoer" -#: ../data/empathy.schemas.in.h:12 +#: ../data/empathy.schemas.in.h:16 msgid "Empathy should auto-connect on startup" msgstr "Empathy skal koble til automatisk ved oppstart" -#: ../data/empathy.schemas.in.h:13 +#: ../data/empathy.schemas.in.h:17 +#, fuzzy +msgid "Empathy should reduce the location's accuracy" +msgstr "Empathy skal koble til automatisk ved oppstart" + +#: ../data/empathy.schemas.in.h:18 msgid "Empathy should use the avatar of the contact as the chat window icon" msgstr "" "Empathy skal bruke personbildet for kontakten som ikon for pratevinduet" -#: ../data/empathy.schemas.in.h:14 +#: ../data/empathy.schemas.in.h:19 #, fuzzy msgid "Enable popup notifications for new messages" msgstr "_Aktiver varsling med lyder" -#: ../data/empathy.schemas.in.h:15 +#: ../data/empathy.schemas.in.h:20 msgid "Enable spell checker" msgstr "Bruk stavekontroll" -#: ../data/empathy.schemas.in.h:16 +#: ../data/empathy.schemas.in.h:21 msgid "Hide main window" msgstr "Skjul hovedvinduet" -#: ../data/empathy.schemas.in.h:17 +#: ../data/empathy.schemas.in.h:22 msgid "Hide the main window." msgstr "Skjul hovedvinduet." -#: ../data/empathy.schemas.in.h:18 +#: ../data/empathy.schemas.in.h:23 msgid "NetworkManager should be used" msgstr "NetworkManager skal brukes" -#: ../data/empathy.schemas.in.h:19 +#: ../data/empathy.schemas.in.h:24 msgid "Nick completed character" msgstr "Tegn for fullføring av kallenavn" -#: ../data/empathy.schemas.in.h:20 +#: ../data/empathy.schemas.in.h:25 msgid "Open new chats in separate windows" msgstr "Åpne nye samtaler i egne vinduer" -#: ../data/empathy.schemas.in.h:21 +#: ../data/empathy.schemas.in.h:26 msgid "Play a sound for incoming messages" msgstr "Spill av lyd når meldinger kommer inn" -#: ../data/empathy.schemas.in.h:22 +#: ../data/empathy.schemas.in.h:27 msgid "Play a sound for new conversations" msgstr "Spill av lyd ved nye samtaler" -#: ../data/empathy.schemas.in.h:23 +#: ../data/empathy.schemas.in.h:28 msgid "Play a sound for outgoing messages" msgstr "Spill av lyd for utgående meldinger" -#: ../data/empathy.schemas.in.h:24 +#: ../data/empathy.schemas.in.h:29 msgid "Play a sound when a contact logs in" msgstr "Spill av lyd når kontakter logger inn" -#: ../data/empathy.schemas.in.h:25 +#: ../data/empathy.schemas.in.h:30 msgid "Play a sound when a contact logs out" msgstr "Spill av lyd når kontakter logger ut" -#: ../data/empathy.schemas.in.h:26 +#: ../data/empathy.schemas.in.h:31 msgid "Play a sound when we log in" msgstr "Spill av lyd når du logger inn" -#: ../data/empathy.schemas.in.h:27 +#: ../data/empathy.schemas.in.h:32 msgid "Play a sound when we log out" msgstr "Spill av lyd når du logger ut" -#: ../data/empathy.schemas.in.h:28 +#: ../data/empathy.schemas.in.h:33 msgid "Popup notifications if the chat isn't focused" msgstr "" -#: ../data/empathy.schemas.in.h:29 +#: ../data/empathy.schemas.in.h:34 msgid "Salut account is created" msgstr "Salut-konto er opprettet" -#: ../data/empathy.schemas.in.h:30 +#: ../data/empathy.schemas.in.h:35 msgid "Show avatars" msgstr "Vis personbilder" -#: ../data/empathy.schemas.in.h:31 +#: ../data/empathy.schemas.in.h:36 msgid "Show hint about closing the main window" msgstr "Vis hint om lukking av hovedvinduet" -#: ../data/empathy.schemas.in.h:32 +#: ../data/empathy.schemas.in.h:37 msgid "Show offline contacts" msgstr "Vis frakoblede kontakter" -#: ../data/empathy.schemas.in.h:33 +#: ../data/empathy.schemas.in.h:38 msgid "Spell checking languages" msgstr "Stavekontrollspråk" -#: ../data/empathy.schemas.in.h:34 +#: ../data/empathy.schemas.in.h:39 msgid "The default folder to save file transfers in." msgstr "Forvalgt mappe for lagring av filoverføringer." -#: ../data/empathy.schemas.in.h:35 +#: ../data/empathy.schemas.in.h:40 msgid "The last directory that an avatar image was chosen from." msgstr "Den forrige mappen et personbilde ble valgt fra." -#: ../data/empathy.schemas.in.h:36 +#: ../data/empathy.schemas.in.h:41 msgid "The theme that is used to display the conversation in chat windows." msgstr "Temaet som brukes til å vise samtaler." -#: ../data/empathy.schemas.in.h:37 +#: ../data/empathy.schemas.in.h:42 msgid "Use graphical smileys" msgstr "Vis smilefjes grafisk" -#: ../data/empathy.schemas.in.h:38 +#: ../data/empathy.schemas.in.h:43 msgid "Use notification sounds" msgstr "Bruk varslingslyder" -#: ../data/empathy.schemas.in.h:39 +#: ../data/empathy.schemas.in.h:44 msgid "Use theme for chat rooms" msgstr "Bruk tema for samtalerom" -#: ../data/empathy.schemas.in.h:40 +#: ../data/empathy.schemas.in.h:45 +#, fuzzy +msgid "Whether or not Empathy can publish the user's location to his contacts." +msgstr "Om kontakter som er frakoblet skal vises i kontaktlisten." + +#: ../data/empathy.schemas.in.h:46 +#, fuzzy +msgid "Whether or not Empathy can use the GPS to guess the location." +msgstr "" +"Om Empathy skal bruke personbilde for kontakten som ikon for pratevinduet." + +#: ../data/empathy.schemas.in.h:47 +#, fuzzy +msgid "" +"Whether or not Empathy can use the cellular network to guess the location." +msgstr "" +"Om Empathy skal bruke personbilde for kontakten som ikon for pratevinduet." + +#: ../data/empathy.schemas.in.h:48 +#, fuzzy +msgid "Whether or not Empathy can use the network to guess the location." +msgstr "" +"Om Empathy skal bruke personbilde for kontakten som ikon for pratevinduet." + +#: ../data/empathy.schemas.in.h:49 msgid "" "Whether or not Empathy has asked about importing accounts from other " "programs." msgstr "Om Empathy har spurt om import av kontoer fra andre programmer." -#: ../data/empathy.schemas.in.h:41 +#: ../data/empathy.schemas.in.h:50 msgid "" "Whether or not Empathy should automatically log in to your accounts on " "startup." msgstr "Om Empathy skal logge inn til dine kontoer automatisk ved oppstart." -#: ../data/empathy.schemas.in.h:42 +#: ../data/empathy.schemas.in.h:51 +#, fuzzy +msgid "" +"Whether or not Empathy should reduce the location's accuracy for privacy " +"reasons." +msgstr "" +"Om Empathy skal bruke personbilde for kontakten som ikon for pratevinduet." + +#: ../data/empathy.schemas.in.h:52 msgid "" "Whether or not Empathy should use the avatar of the contact as the chat " "window icon." msgstr "" "Om Empathy skal bruke personbilde for kontakten som ikon for pratevinduet." -#: ../data/empathy.schemas.in.h:43 +#: ../data/empathy.schemas.in.h:53 msgid "" "Whether or not the Salut account has been created on the first Empathy run." msgstr "Om Salut-konto ble opprettet første gang Empathy ble kjørt." -#: ../data/empathy.schemas.in.h:44 +#: ../data/empathy.schemas.in.h:54 msgid "" "Whether or not the network manager should be used to automatically " "disconnect/reconnect." msgstr "Om NetworkManager skal brukes til å koble til/fra automatisk." -#: ../data/empathy.schemas.in.h:45 +#: ../data/empathy.schemas.in.h:55 msgid "" "Whether or not to check words typed against the languages you want to check " "with." msgstr "Om stavekontroll skal sjekke ord mot de språkene du ønsker å bruke." -#: ../data/empathy.schemas.in.h:46 +#: ../data/empathy.schemas.in.h:56 msgid "" "Whether or not to convert smileys into graphical images in conversations." msgstr "Om smilefjes skal konverteres til grafikk i samtaler." -#: ../data/empathy.schemas.in.h:47 -msgid "Whether or not to play a sound notifications when away or busy." -msgstr "Om lyder skal spilles av når du er borte eller opptatt." - -#: ../data/empathy.schemas.in.h:48 +#: ../data/empathy.schemas.in.h:57 #, fuzzy msgid "" "Whether or not to play a sound to notify for contacts logging in the network." msgstr "Om bilder av kontakter skal vises i kontaktlisten og samtalevinduer." -#: ../data/empathy.schemas.in.h:49 +#: ../data/empathy.schemas.in.h:58 #, fuzzy msgid "" "Whether or not to play a sound to notify for contacts logging off the " "network." msgstr "Om bilder av kontakter skal vises i kontaktlisten og samtalevinduer." -#: ../data/empathy.schemas.in.h:50 +#: ../data/empathy.schemas.in.h:59 #, fuzzy msgid "Whether or not to play a sound to notify for events." msgstr "Om lyder skal spilles av når opptatt." -#: ../data/empathy.schemas.in.h:51 +#: ../data/empathy.schemas.in.h:60 #, fuzzy msgid "Whether or not to play a sound to notify for incoming messages." msgstr "Om lyder skal spilles av når meldinger kommer inn." -#: ../data/empathy.schemas.in.h:52 +#: ../data/empathy.schemas.in.h:61 #, fuzzy msgid "Whether or not to play a sound to notify for new conversations." msgstr "Om lyder skal spilles av når meldinger kommer inn." -#: ../data/empathy.schemas.in.h:53 +#: ../data/empathy.schemas.in.h:62 #, fuzzy msgid "Whether or not to play a sound to notify for outgoing messages." msgstr "Om lyder skal spilles av når meldinger kommer inn." -#: ../data/empathy.schemas.in.h:54 +#: ../data/empathy.schemas.in.h:63 #, fuzzy msgid "Whether or not to play a sound when logging in a network." msgstr "Om lyder skal spilles av når borte." -#: ../data/empathy.schemas.in.h:55 +#: ../data/empathy.schemas.in.h:64 #, fuzzy msgid "Whether or not to play a sound when logging off a network." msgstr "Om lyder skal spilles av når borte." -#: ../data/empathy.schemas.in.h:56 +#: ../data/empathy.schemas.in.h:65 +#, fuzzy +msgid "Whether or not to play sound notifications when away or busy." +msgstr "Om lyder skal spilles av når du er borte eller opptatt." + +#: ../data/empathy.schemas.in.h:66 msgid "" "Whether or not to show a popup notification when receiving a new message " "even if the chat is already opened, but not focused." msgstr "" -#: ../data/empathy.schemas.in.h:57 +#: ../data/empathy.schemas.in.h:67 #, fuzzy msgid "" "Whether or not to show a popup notification when receiving a new message." msgstr "Om lyder skal spilles av når du er borte eller opptatt." -#: ../data/empathy.schemas.in.h:58 +#: ../data/empathy.schemas.in.h:68 msgid "" "Whether or not to show avatars for contacts in the contact list and chat " "windows." msgstr "Om bilder av kontakter skal vises i kontaktlisten og samtalevinduer." -#: ../data/empathy.schemas.in.h:59 +#: ../data/empathy.schemas.in.h:69 msgid "Whether or not to show contacts that are offline in the contact list." msgstr "Om kontakter som er frakoblet skal vises i kontaktlisten." -#: ../data/empathy.schemas.in.h:60 +#: ../data/empathy.schemas.in.h:70 #, fuzzy msgid "Whether or not to show popup notifications when away or busy." msgstr "Om lyder skal spilles av når du er borte eller opptatt." -#: ../data/empathy.schemas.in.h:61 +#: ../data/empathy.schemas.in.h:71 msgid "" "Whether or not to show the message dialog about closing the main window with " "the 'x' button in the title bar." @@ -312,15 +365,15 @@ msgstr "" "Om meldingsdialog om lukking av vinduet med «x»-knappen i tittelfeltet skal " "vises." -#: ../data/empathy.schemas.in.h:62 +#: ../data/empathy.schemas.in.h:72 msgid "Whether to show the contact list in compact mode or not." msgstr "Om kontaktlisten skal vises i kompakt modus." -#: ../data/empathy.schemas.in.h:63 +#: ../data/empathy.schemas.in.h:73 msgid "Whether to use the theme for chat rooms or not." msgstr "Om tema skal brukes for praterom eller ikke." -#: ../data/empathy.schemas.in.h:64 +#: ../data/empathy.schemas.in.h:74 msgid "" "Which criterium to use when sorting the contact list. Default is to use sort " "by the contact's name with the value \"name\". A value of \"state\" will " @@ -330,541 +383,704 @@ msgstr "" "å sortere kontakter etter verdien «name». Hvis man bruker «state» vil " "kontaktlisten sorteres etter kontaktens tilstand." -#: ../libempathy/empathy-tp-contact-list.c:731 ../src/empathy.c:269 +#: ../libempathy/empathy-ft-handler.c:838 +msgid "The hash of the received file and the sent one do not match" +msgstr "" + +#: ../libempathy/empathy-ft-handler.c:1098 +msgid "File transfer not supported by remote contact" +msgstr "" + +#: ../libempathy/empathy-tp-contact-list.c:757 ../src/empathy.c:286 msgid "People nearby" msgstr "Personer i nærheten" -#: ../libempathy/empathy-utils.c:252 +#: ../libempathy/empathy-tp-file.c:300 +msgid "No reason was specified" +msgstr "Ingen årsak oppgitt" + +#: ../libempathy/empathy-tp-file.c:303 +msgid "The change in state was requested" +msgstr "Tilstandsendring ble etterspurt" + +#: ../libempathy/empathy-tp-file.c:306 +msgid "You canceled the file transfer" +msgstr "Du avbrøt filoverføringen" + +#: ../libempathy/empathy-tp-file.c:309 +msgid "The other participant canceled the file transfer" +msgstr "Avsender avbrøt filoverføringen" + +#: ../libempathy/empathy-tp-file.c:312 +msgid "Error while trying to transfer the file" +msgstr "Feil under overføring av filen" + +#: ../libempathy/empathy-tp-file.c:315 +msgid "The other participant is unable to transfer the file" +msgstr "Avsender kan ikke overføre filen" + +#: ../libempathy/empathy-tp-file.c:318 +msgid "Unknown reason" +msgstr "Ukjent årsak" + +#: ../libempathy/empathy-utils.c:274 msgid "Available" msgstr "Tilgjengelig" -#: ../libempathy/empathy-utils.c:254 +#: ../libempathy/empathy-utils.c:276 msgid "Busy" msgstr "Opptatt" -#: ../libempathy/empathy-utils.c:257 +#: ../libempathy/empathy-utils.c:279 msgid "Away" msgstr "Borte" -#: ../libempathy/empathy-utils.c:259 +#: ../libempathy/empathy-utils.c:281 msgid "Hidden" msgstr "Skjult" -#: ../libempathy/empathy-utils.c:262 +#: ../libempathy/empathy-utils.c:283 msgid "Offline" msgstr "Frakoblet" -#: ../libempathy-gtk/empathy-account-chooser.c:326 +#: ../libempathy/empathy-time.c:137 +#, c-format +msgid "%d second ago" +msgid_plural "%d seconds ago" +msgstr[0] "" +msgstr[1] "" + +#: ../libempathy/empathy-time.c:142 +#, c-format +msgid "%d minute ago" +msgid_plural "%d minutes ago" +msgstr[0] "" +msgstr[1] "" + +#: ../libempathy/empathy-time.c:147 +#, c-format +msgid "%d hour ago" +msgid_plural "%d hours ago" +msgstr[0] "" +msgstr[1] "" + +#: ../libempathy/empathy-time.c:152 +#, c-format +msgid "%d day ago" +msgid_plural "%d days ago" +msgstr[0] "" +msgstr[1] "" + +#: ../libempathy/empathy-time.c:157 +#, c-format +msgid "%d month ago" +msgid_plural "%d months ago" +msgstr[0] "" +msgstr[1] "" + +#: ../libempathy/empathy-time.c:162 +msgid "in the future" +msgstr "" + +#: ../libempathy-gtk/empathy-account-chooser.c:419 msgid "All" msgstr "Alle" #: ../libempathy-gtk/empathy-account-widget.c:302 -#: ../libempathy-gtk/empathy-account-widget.c:347 +#: ../libempathy-gtk/empathy-account-widget.c:354 #, c-format msgid "%s:" msgstr "%s:" -#: ../libempathy-gtk/empathy-account-widget-aim.glade.h:1 -#: ../libempathy-gtk/empathy-account-widget-generic.glade.h:1 -#: ../libempathy-gtk/empathy-account-widget-groupwise.glade.h:1 -#: ../libempathy-gtk/empathy-account-widget-icq.glade.h:1 -#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:1 -#: ../libempathy-gtk/empathy-account-widget-msn.glade.h:1 -#: ../libempathy-gtk/empathy-account-widget-salut.glade.h:1 -#: ../libempathy-gtk/empathy-account-widget-sip.glade.h:1 -#: ../libempathy-gtk/empathy-account-widget-yahoo.glade.h:1 +#: ../libempathy-gtk/empathy-account-widget-aim.ui.h:1 +#: ../libempathy-gtk/empathy-account-widget-generic.ui.h:1 +#: ../libempathy-gtk/empathy-account-widget-groupwise.ui.h:1 +#: ../libempathy-gtk/empathy-account-widget-icq.ui.h:1 +#: ../libempathy-gtk/empathy-account-widget-jabber.ui.h:1 +#: ../libempathy-gtk/empathy-account-widget-msn.ui.h:1 +#: ../libempathy-gtk/empathy-account-widget-salut.ui.h:1 +#: ../libempathy-gtk/empathy-account-widget-sip.ui.h:1 +#: ../libempathy-gtk/empathy-account-widget-yahoo.ui.h:1 msgid "<b>Advanced</b>" msgstr "<b>Avansert</b>" -#: ../libempathy-gtk/empathy-account-widget-aim.glade.h:2 -#: ../libempathy-gtk/empathy-account-widget-groupwise.glade.h:2 -#: ../libempathy-gtk/empathy-account-widget-icq.glade.h:2 -#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:3 -#: ../libempathy-gtk/empathy-account-widget-msn.glade.h:2 -#: ../libempathy-gtk/empathy-account-widget-sip.glade.h:4 -#: ../libempathy-gtk/empathy-account-widget-yahoo.glade.h:2 -msgid "Forget password and clear the entry." -msgstr "Glem passord og tøm oppføringen." - -#: ../libempathy-gtk/empathy-account-widget-aim.glade.h:3 -#: ../libempathy-gtk/empathy-account-widget-groupwise.glade.h:4 -#: ../libempathy-gtk/empathy-account-widget-icq.glade.h:4 -#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:5 -#: ../libempathy-gtk/empathy-account-widget-msn.glade.h:4 -#: ../libempathy-gtk/empathy-account-widget-sip.glade.h:5 -#: ../libempathy-gtk/empathy-account-widget-yahoo.glade.h:3 +#: ../libempathy-gtk/empathy-account-widget-aim.ui.h:2 +#: ../libempathy-gtk/empathy-account-widget-groupwise.ui.h:3 +#: ../libempathy-gtk/empathy-account-widget-icq.ui.h:3 +#: ../libempathy-gtk/empathy-account-widget-jabber.ui.h:4 +#: ../libempathy-gtk/empathy-account-widget-msn.ui.h:3 +#: ../libempathy-gtk/empathy-account-widget-sip.ui.h:4 +#: ../libempathy-gtk/empathy-account-widget-yahoo.ui.h:2 msgid "Pass_word:" msgstr "_Passord:" -#: ../libempathy-gtk/empathy-account-widget-aim.glade.h:4 +#: ../libempathy-gtk/empathy-account-widget-aim.ui.h:3 msgid "Screen _Name:" msgstr "Skjerm_navn:" -#: ../libempathy-gtk/empathy-account-widget-aim.glade.h:5 -#: ../libempathy-gtk/empathy-account-widget-groupwise.glade.h:5 -#: ../libempathy-gtk/empathy-account-widget-icq.glade.h:6 -#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:11 -#: ../libempathy-gtk/empathy-account-widget-msn.glade.h:5 -#: ../libempathy-gtk/empathy-account-widget-yahoo.glade.h:8 +#: ../libempathy-gtk/empathy-account-widget-aim.ui.h:4 +#: ../libempathy-gtk/empathy-account-widget-groupwise.ui.h:4 +#: ../libempathy-gtk/empathy-account-widget-icq.ui.h:5 +#: ../libempathy-gtk/empathy-account-widget-jabber.ui.h:10 +#: ../libempathy-gtk/empathy-account-widget-msn.ui.h:4 +#: ../libempathy-gtk/empathy-account-widget-yahoo.ui.h:7 msgid "_Port:" msgstr "_Port:" -#: ../libempathy-gtk/empathy-account-widget-aim.glade.h:6 -#: ../libempathy-gtk/empathy-account-widget-groupwise.glade.h:6 -#: ../libempathy-gtk/empathy-account-widget-icq.glade.h:7 -#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:12 -#: ../libempathy-gtk/empathy-account-widget-msn.glade.h:6 -#: ../libempathy-gtk/empathy-account-widget-yahoo.glade.h:10 -#: ../src/empathy-new-chatroom-dialog.glade.h:10 +#: ../libempathy-gtk/empathy-account-widget-aim.ui.h:5 +#: ../libempathy-gtk/empathy-account-widget-groupwise.ui.h:5 +#: ../libempathy-gtk/empathy-account-widget-icq.ui.h:6 +#: ../libempathy-gtk/empathy-account-widget-jabber.ui.h:11 +#: ../libempathy-gtk/empathy-account-widget-msn.ui.h:5 +#: ../libempathy-gtk/empathy-account-widget-yahoo.ui.h:9 +#: ../src/empathy-new-chatroom-dialog.ui.h:9 msgid "_Server:" msgstr "_Tjener:" -#: ../libempathy-gtk/empathy-account-widget-groupwise.glade.h:3 -#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:4 -#: ../libempathy-gtk/empathy-account-widget-msn.glade.h:3 +#: ../libempathy-gtk/empathy-account-widget-groupwise.ui.h:2 +#: ../libempathy-gtk/empathy-account-widget-jabber.ui.h:3 +#: ../libempathy-gtk/empathy-account-widget-msn.ui.h:2 msgid "Login I_D:" msgstr "InnloggingsI_D:" -#: ../libempathy-gtk/empathy-account-widget-icq.glade.h:3 +#: ../libempathy-gtk/empathy-account-widget-icq.ui.h:2 msgid "ICQ _UIN:" msgstr "ICQ _UIN:" -#: ../libempathy-gtk/empathy-account-widget-icq.glade.h:5 -#: ../libempathy-gtk/empathy-account-widget-yahoo.glade.h:6 +#: ../libempathy-gtk/empathy-account-widget-icq.ui.h:4 +#: ../libempathy-gtk/empathy-account-widget-yahoo.ui.h:5 msgid "_Charset:" msgstr "_Tegnsett:" -#: ../libempathy-gtk/empathy-account-widget-irc.c:245 +#: ../libempathy-gtk/empathy-account-widget-irc.c:241 msgid "New Network" msgstr "Nytt nettverk" -#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:1 +#: ../libempathy-gtk/empathy-account-widget-irc.ui.h:1 msgid "<b>Network</b>" msgstr "<b>Nettverk</b>" -#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:2 +#: ../libempathy-gtk/empathy-account-widget-irc.ui.h:2 msgid "<b>Servers</b>" msgstr "<b>Tjenere</b>" -#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:3 +#: ../libempathy-gtk/empathy-account-widget-irc.ui.h:3 msgid "Charset:" msgstr "Tegnsett:" -#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:4 -msgid "Create a new IRC network" -msgstr "Opprett et nytt IRC-nettverk" - -#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:5 -msgid "Edit the selected IRC network" -msgstr "Rediger valgt IRC-nettverk" - -#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:6 +#: ../libempathy-gtk/empathy-account-widget-irc.ui.h:4 msgid "Network" msgstr "Nettverk" -#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:7 +#: ../libempathy-gtk/empathy-account-widget-irc.ui.h:5 msgid "Network:" msgstr "Nettverk:" -#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:8 +#: ../libempathy-gtk/empathy-account-widget-irc.ui.h:6 msgid "Nickname:" msgstr "Kallenavn:" -#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:9 +#: ../libempathy-gtk/empathy-account-widget-irc.ui.h:7 msgid "Password:" msgstr "Passord:" -#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:10 +#: ../libempathy-gtk/empathy-account-widget-irc.ui.h:8 msgid "Quit message:" msgstr "Melding ved frakobling:" -#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:11 +#: ../libempathy-gtk/empathy-account-widget-irc.ui.h:9 msgid "Real name:" msgstr "Virkelig navn:" -#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:12 -msgid "Remove the selected IRC network" -msgstr "Fjern valgt IRC-nettverk" - -#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:2 +#: ../libempathy-gtk/empathy-account-widget-jabber.ui.h:2 msgid "<b>Override server settings</b>" msgstr "<b>Overstyr innstillinger for tjener</b>" -#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:6 +#: ../libempathy-gtk/empathy-account-widget-jabber.ui.h:5 msgid "Pri_ority:" msgstr "Pri_oritet:" -#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:7 +#: ../libempathy-gtk/empathy-account-widget-jabber.ui.h:6 msgid "Reso_urce:" msgstr "_Ressurs:" -#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:8 +#: ../libempathy-gtk/empathy-account-widget-jabber.ui.h:7 msgid "Use old SS_L" msgstr "Bruk gammel SS_L" -#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:9 +#: ../libempathy-gtk/empathy-account-widget-jabber.ui.h:8 msgid "_Encryption required (TLS/SSL)" msgstr "Krypt_ering kreves (TLS/SSL)" -#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:10 +#: ../libempathy-gtk/empathy-account-widget-jabber.ui.h:9 msgid "_Ignore SSL certificate errors" msgstr "_Ignorer feil med SSL-sertifikater" -#: ../libempathy-gtk/empathy-account-widget-salut.glade.h:2 +#: ../libempathy-gtk/empathy-account-widget-salut.ui.h:2 msgid "_Email:" msgstr "_E-post:" -#: ../libempathy-gtk/empathy-account-widget-salut.glade.h:3 +#: ../libempathy-gtk/empathy-account-widget-salut.ui.h:3 msgid "_First Name:" msgstr "_Fornavn:" -#: ../libempathy-gtk/empathy-account-widget-salut.glade.h:4 +#: ../libempathy-gtk/empathy-account-widget-salut.ui.h:4 msgid "_Jabber ID:" msgstr "_Jabber-ID:" -#: ../libempathy-gtk/empathy-account-widget-salut.glade.h:5 +#: ../libempathy-gtk/empathy-account-widget-salut.ui.h:5 msgid "_Last Name:" msgstr "_Etternavn:" -#: ../libempathy-gtk/empathy-account-widget-salut.glade.h:6 -#: ../src/empathy-chatrooms-window.glade.h:8 +#: ../libempathy-gtk/empathy-account-widget-salut.ui.h:6 msgid "_Nickname:" msgstr "Kalle_navn:" -#: ../libempathy-gtk/empathy-account-widget-salut.glade.h:7 +#: ../libempathy-gtk/empathy-account-widget-salut.ui.h:7 msgid "_Published Name:" msgstr "_Publisert navn:" #. look up the DNS SRV record at the service's domain for the host name of a STUN server. -#: ../libempathy-gtk/empathy-account-widget-sip.glade.h:3 +#: ../libempathy-gtk/empathy-account-widget-sip.ui.h:3 msgid "Discover STUN" msgstr "Søk etter STUN" -#: ../libempathy-gtk/empathy-account-widget-sip.glade.h:6 +#: ../libempathy-gtk/empathy-account-widget-sip.ui.h:5 msgid "STUN Server:" msgstr "STUN-tjener:" -#: ../libempathy-gtk/empathy-account-widget-sip.glade.h:7 +#: ../libempathy-gtk/empathy-account-widget-sip.ui.h:6 msgid "STUN port:" msgstr "STUN-port:" -#: ../libempathy-gtk/empathy-account-widget-sip.glade.h:8 +#: ../libempathy-gtk/empathy-account-widget-sip.ui.h:7 msgid "_Username:" msgstr "Br_ukernavn:" -#: ../libempathy-gtk/empathy-account-widget-yahoo.glade.h:4 +#: ../libempathy-gtk/empathy-account-widget-yahoo.ui.h:3 msgid "Use _Yahoo Japan" msgstr "Bruk _Yahoo Japan" -#: ../libempathy-gtk/empathy-account-widget-yahoo.glade.h:5 +#: ../libempathy-gtk/empathy-account-widget-yahoo.ui.h:4 msgid "Yahoo I_D:" msgstr "Yahoo-I_D:" -#: ../libempathy-gtk/empathy-account-widget-yahoo.glade.h:7 +#: ../libempathy-gtk/empathy-account-widget-yahoo.ui.h:6 msgid "_Ignore conference and chatroom invitations" msgstr "_Ignorer invitasjoner til konferanser og praterom" -#: ../libempathy-gtk/empathy-account-widget-yahoo.glade.h:9 +#: ../libempathy-gtk/empathy-account-widget-yahoo.ui.h:8 msgid "_Room List locale:" msgstr "Locale for _romliste:" -#: ../libempathy-gtk/empathy-avatar-chooser.c:462 -#: ../libempathy-gtk/empathy-avatar-chooser.c:537 +#: ../libempathy-gtk/empathy-avatar-chooser.c:449 +#: ../libempathy-gtk/empathy-avatar-chooser.c:525 msgid "Couldn't convert image" msgstr "Kunne ikke konvertere bilde" -#: ../libempathy-gtk/empathy-avatar-chooser.c:463 +#: ../libempathy-gtk/empathy-avatar-chooser.c:450 msgid "None of the accepted image formats is supported on your system" msgstr "Ingen av de godkjente bildeformatene støttes av ditt system" -#: ../libempathy-gtk/empathy-avatar-chooser.c:956 +#: ../libempathy-gtk/empathy-avatar-chooser.c:933 msgid "Select Your Avatar Image" msgstr "Velg personbilde" -#: ../libempathy-gtk/empathy-avatar-chooser.c:959 +#: ../libempathy-gtk/empathy-avatar-chooser.c:936 msgid "No Image" msgstr "Ingen bilde" -#: ../libempathy-gtk/empathy-avatar-chooser.c:1021 +#: ../libempathy-gtk/empathy-avatar-chooser.c:998 msgid "Images" msgstr "Bilder" -#: ../libempathy-gtk/empathy-avatar-chooser.c:1025 +#: ../libempathy-gtk/empathy-avatar-chooser.c:1002 msgid "All Files" msgstr "Alle filer" -#: ../libempathy-gtk/empathy-avatar-image.c:294 +#: ../libempathy-gtk/empathy-avatar-image.c:324 msgid "Click to enlarge" msgstr "Klikk for å forstørre" -#: ../libempathy-gtk/empathy-chat.c:507 +#: ../libempathy-gtk/empathy-chat.c:178 +msgid "Failed to reconnect this chat" +msgstr "" + +#: ../libempathy-gtk/empathy-chat.c:396 +msgid "Unsupported command" +msgstr "" + +#: ../libempathy-gtk/empathy-chat.c:531 msgid "offline" msgstr "frakoblet" -#: ../libempathy-gtk/empathy-chat.c:510 +#: ../libempathy-gtk/empathy-chat.c:534 msgid "invalid contact" msgstr "ugyldig kontakt" -#: ../libempathy-gtk/empathy-chat.c:513 +#: ../libempathy-gtk/empathy-chat.c:537 msgid "permission denied" msgstr "tilgang nektet" -#: ../libempathy-gtk/empathy-chat.c:516 +#: ../libempathy-gtk/empathy-chat.c:540 msgid "too long message" msgstr "meldingen er for lang" -#: ../libempathy-gtk/empathy-chat.c:519 +#: ../libempathy-gtk/empathy-chat.c:543 msgid "not implemented" msgstr "ikke implementert" -#: ../libempathy-gtk/empathy-chat.c:522 +#: ../libempathy-gtk/empathy-chat.c:546 msgid "unknown" msgstr "ukjent" -#: ../libempathy-gtk/empathy-chat.c:526 +#: ../libempathy-gtk/empathy-chat.c:550 #, c-format msgid "Error sending message '%s': %s" msgstr "Feil ved sending av melding «%s»: %s" -#: ../libempathy-gtk/empathy-chat.c:556 +#: ../libempathy-gtk/empathy-chat.c:580 #, c-format msgid "Topic set to: %s" msgstr "Emnet er satt til: %s" -#: ../libempathy-gtk/empathy-chat.c:558 +#: ../libempathy-gtk/empathy-chat.c:582 msgid "No topic defined" msgstr "Emne ikke definert" -#: ../libempathy-gtk/empathy-chat.c:973 +#: ../libempathy-gtk/empathy-chat.c:951 +msgid "(No Suggestions)" +msgstr "" + +#: ../libempathy-gtk/empathy-chat.c:1005 msgid "Insert Smiley" msgstr "Sett inn smilefjes" #. send button -#: ../libempathy-gtk/empathy-chat.c:991 -#: ../libempathy-gtk/empathy-ui-utils.c:1538 +#: ../libempathy-gtk/empathy-chat.c:1023 +#: ../libempathy-gtk/empathy-ui-utils.c:1453 msgid "_Send" msgstr "_Send" -#: ../libempathy-gtk/empathy-chat.c:1025 -msgid "_Check Word Spelling..." -msgstr "_Stavekontroll ..." +#: ../libempathy-gtk/empathy-chat.c:1057 +msgid "_Spelling Suggestions" +msgstr "" -#: ../libempathy-gtk/empathy-chat.c:1131 +#: ../libempathy-gtk/empathy-chat.c:1171 #, c-format msgid "%s has joined the room" msgstr "%s har blitt med i rommet" -#: ../libempathy-gtk/empathy-chat.c:1134 +#: ../libempathy-gtk/empathy-chat.c:1174 #, c-format msgid "%s has left the room" msgstr "%s har forlatt rommet" -#: ../libempathy-gtk/empathy-chat.c:1248 ../src/empathy-call-window.c:466 +#: ../libempathy-gtk/empathy-chat.c:1289 ../src/empathy-call-window.c:1108 msgid "Disconnected" msgstr "Koblet fra" -#: ../libempathy-gtk/empathy-chat.c:1644 +#: ../libempathy-gtk/empathy-chat.c:1700 msgid "Connected" msgstr "Koblet til" -#: ../libempathy-gtk/empathy-chat.c:1694 -#: ../libempathy-gtk/empathy-log-window.c:505 +#: ../libempathy-gtk/empathy-chat.c:1750 +#: ../libempathy-gtk/empathy-log-window.c:501 msgid "Conversation" msgstr "Samtale" -#: ../libempathy-gtk/empathy-chat.glade.h:1 +#: ../libempathy-gtk/empathy-chat.ui.h:1 msgid "<b>Topic:</b>" msgstr "<b>Emne:</b>" -#: ../libempathy-gtk/empathy-chat.glade.h:2 -msgid "Group Chat" -msgstr "Gruppesamtale" - -#: ../libempathy-gtk/empathy-chat-text-view.c:333 +#: ../libempathy-gtk/empathy-chat-text-view.c:323 msgid "_Copy Link Address" msgstr "_Kopier lenkens adresse" -#: ../libempathy-gtk/empathy-chat-text-view.c:341 +#: ../libempathy-gtk/empathy-chat-text-view.c:331 msgid "_Open Link" msgstr "_Åpne lenke" -#: ../libempathy-gtk/empathy-chat-text-view.c:432 -msgid "%A %d %B %Y" +#. Translators: timestamp displayed between conversations in +#. * chat windows (strftime format string) +#: ../libempathy-gtk/empathy-chat-text-view.c:424 +msgid "%A %B %d %Y" msgstr "%A %d %B %Y" -#: ../libempathy-gtk/empathy-contact-dialogs.c:180 -msgid "Personal Information" -msgstr "Personlig informasjon" - -#: ../libempathy-gtk/empathy-contact-dialogs.c:183 +#: ../libempathy-gtk/empathy-contact-dialogs.c:179 +#: ../libempathy-gtk/empathy-contact-dialogs.c:238 msgid "Edit Contact Information" msgstr "Endre kontaktinformasjon" -#: ../libempathy-gtk/empathy-contact-dialogs.c:186 -msgid "Contact Information" -msgstr "Kontaktinformasjon" - -#: ../libempathy-gtk/empathy-contact-dialogs.c:266 -msgid "I would like to add you to my contact list." -msgstr "Jeg ønsker å legge deg til i min kontaktliste." +#: ../libempathy-gtk/empathy-contact-dialogs.c:289 +msgid "Personal Information" +msgstr "Personlig informasjon" -#: ../libempathy-gtk/empathy-contact-dialogs.c:290 +#: ../libempathy-gtk/empathy-contact-dialogs.c:392 msgid "New Contact" msgstr "Ny kontakt" -#: ../libempathy-gtk/empathy-contact-dialogs.glade.h:1 +#: ../libempathy-gtk/empathy-contact-dialogs.ui.h:1 msgid "Decide _Later" msgstr "A_vgjør senere" -#: ../libempathy-gtk/empathy-contact-dialogs.glade.h:2 +#: ../libempathy-gtk/empathy-contact-dialogs.ui.h:2 msgid "Subscription Request" msgstr "Abonnementsforespørsel" -#: ../libempathy-gtk/empathy-contact-list-view.c:1249 +#: ../libempathy-gtk/empathy-contact-list-view.c:1378 #, c-format msgid "Do you really want to remove the group '%s'?" msgstr "Vil du virkelig fjerne gruppen «%s»?" -#: ../libempathy-gtk/empathy-contact-list-view.c:1251 +#: ../libempathy-gtk/empathy-contact-list-view.c:1380 msgid "Removing group" msgstr "Fjerner gruppe" -#: ../libempathy-gtk/empathy-contact-list-view.c:1298 -#: ../libempathy-gtk/empathy-contact-list-view.c:1377 +#: ../libempathy-gtk/empathy-contact-list-view.c:1427 +#: ../libempathy-gtk/empathy-contact-list-view.c:1505 msgid "_Remove" msgstr "Fje_rn" -#: ../libempathy-gtk/empathy-contact-list-view.c:1328 +#: ../libempathy-gtk/empathy-contact-list-view.c:1457 #, c-format msgid "Do you really want to remove the contact '%s'?" msgstr "Vil du virkelig fjerne kontakten «%s»?" -#: ../libempathy-gtk/empathy-contact-list-view.c:1330 +#: ../libempathy-gtk/empathy-contact-list-view.c:1459 msgid "Removing contact" msgstr "Fjerner kontakt" -#: ../libempathy-gtk/empathy-contact-list-view.c:1335 -msgid "Sorry, I don't want you in my contact list anymore." -msgstr "Beklager, men jeg vil ikke ha deg på kontaktlisten min lenger." - -#: ../libempathy-gtk/empathy-contact-menu.c:122 -#: ../src/empathy-main-window.glade.h:9 +#: ../libempathy-gtk/empathy-contact-menu.c:135 +#: ../src/empathy-main-window.ui.h:8 msgid "_Chat" msgstr "_Prat" -#: ../libempathy-gtk/empathy-contact-menu.c:153 -#: ../src/empathy-call-window.glade.h:5 -msgid "_Call" -msgstr "_Ring" +#: ../libempathy-gtk/empathy-contact-menu.c:166 +msgctxt "menu item" +msgid "_Audio Call" +msgstr "_Lydsamtale" + +#: ../libempathy-gtk/empathy-contact-menu.c:198 +msgctxt "menu item" +msgid "_Video Call" +msgstr "_Videosamtale" -#: ../libempathy-gtk/empathy-contact-menu.c:192 -#: ../src/empathy-main-window.glade.h:17 +#: ../libempathy-gtk/empathy-contact-menu.c:237 msgid "_View Previous Conversations" msgstr "_Vis tidligere samtaler" -#: ../libempathy-gtk/empathy-contact-menu.c:214 +#: ../libempathy-gtk/empathy-contact-menu.c:259 msgid "Send file" msgstr "Send fil" -#: ../libempathy-gtk/empathy-contact-menu.c:242 +#: ../libempathy-gtk/empathy-contact-menu.c:287 msgid "Infor_mation" msgstr "Infor_masjon" -#: ../libempathy-gtk/empathy-contact-menu.c:269 -#: ../src/empathy-chat-window.glade.h:14 ../src/empathy-main-window.glade.h:11 +#: ../libempathy-gtk/empathy-contact-menu.c:314 +#: ../src/empathy-main-window.ui.h:11 msgid "_Edit" msgstr "_Rediger" -#: ../libempathy-gtk/empathy-contact-menu.c:328 +#: ../libempathy-gtk/empathy-contact-menu.c:372 msgid "Inviting to this room" msgstr "Inviterer til dette rommet" -#: ../libempathy-gtk/empathy-contact-menu.c:361 +#: ../libempathy-gtk/empathy-contact-menu.c:403 msgid "_Invite to chatroom" msgstr "_Inviter til praterom" -#: ../libempathy-gtk/empathy-contact-selector.c:111 +#: ../libempathy-gtk/empathy-contact-selector.c:129 msgid "Select a contact" msgstr "Velg en kontakt" -#: ../libempathy-gtk/empathy-contact-widget.c:358 +#: ../libempathy-gtk/empathy-contact-widget.c:440 msgid "Save Avatar" msgstr "Lagre personbilder" -#: ../libempathy-gtk/empathy-contact-widget.c:414 +#: ../libempathy-gtk/empathy-contact-widget.c:496 msgid "Unable to save avatar" msgstr "Kan ikke lagre personbilde" -#: ../libempathy-gtk/empathy-contact-widget.c:895 +#: ../libempathy-gtk/empathy-contact-widget.c:979 msgid "Select" msgstr "Velg" -#: ../libempathy-gtk/empathy-contact-widget.c:904 -#: ../src/empathy-main-window.c:991 +#: ../libempathy-gtk/empathy-contact-widget.c:988 +#: ../src/empathy-main-window.c:905 msgid "Group" msgstr "Gruppe" -#: ../libempathy-gtk/empathy-contact-widget.glade.h:1 +#: ../libempathy-gtk/empathy-contact-widget.c:1239 +msgid "Country ISO Code:" +msgstr "ISO-kode for land:" + +#: ../libempathy-gtk/empathy-contact-widget.c:1241 +msgid "Country:" +msgstr "Land:" + +#: ../libempathy-gtk/empathy-contact-widget.c:1243 +msgid "State:" +msgstr "Tilstand:" + +#: ../libempathy-gtk/empathy-contact-widget.c:1245 +msgid "City:" +msgstr "By:" + +#: ../libempathy-gtk/empathy-contact-widget.c:1247 +msgid "Area:" +msgstr "Område:" + +#: ../libempathy-gtk/empathy-contact-widget.c:1249 +msgid "Postal Code:" +msgstr "Postkode:" + +#: ../libempathy-gtk/empathy-contact-widget.c:1251 +msgid "Street:" +msgstr "Gate:" + +#: ../libempathy-gtk/empathy-contact-widget.c:1253 +msgid "Building:" +msgstr "Bygning:" + +#: ../libempathy-gtk/empathy-contact-widget.c:1255 +msgid "Floor:" +msgstr "Etasje:" + +#: ../libempathy-gtk/empathy-contact-widget.c:1257 +msgid "Room:" +msgstr "Rom:" + +#: ../libempathy-gtk/empathy-contact-widget.c:1259 +msgid "Text:" +msgstr "Tekst:" + +#: ../libempathy-gtk/empathy-contact-widget.c:1261 +msgid "Description:" +msgstr "Beskrivelse:" + +#: ../libempathy-gtk/empathy-contact-widget.c:1263 +msgid "URI:" +msgstr "URI:" + +#: ../libempathy-gtk/empathy-contact-widget.c:1265 +msgid "Accuracy Level:" +msgstr "" + +#: ../libempathy-gtk/empathy-contact-widget.c:1267 +msgid "Error:" +msgstr "Feil:" + +#: ../libempathy-gtk/empathy-contact-widget.c:1269 +msgid "Vertical Error (meters):" +msgstr "Vertikal feil (meter):" + +#: ../libempathy-gtk/empathy-contact-widget.c:1271 +msgid "Horizontal Error (meters):" +msgstr "Horisontal feil (meter):" + +#: ../libempathy-gtk/empathy-contact-widget.c:1273 +msgid "Speed:" +msgstr "Hastighet:" + +#: ../libempathy-gtk/empathy-contact-widget.c:1275 +msgid "Bearing:" +msgstr "Retning:" + +#: ../libempathy-gtk/empathy-contact-widget.c:1277 +msgid "Climb Speed:" +msgstr "" + +#: ../libempathy-gtk/empathy-contact-widget.c:1279 +msgid "Last Updated on:" +msgstr "Sist oppdatert:" + +#: ../libempathy-gtk/empathy-contact-widget.c:1281 +msgid "Longitude:" +msgstr "Lengdegrad:" + +#: ../libempathy-gtk/empathy-contact-widget.c:1283 +msgid "Latitude:" +msgstr "Breddegrad:" + +#: ../libempathy-gtk/empathy-contact-widget.c:1285 +msgid "Altitude:" +msgstr "Høyde:" + +#: ../libempathy-gtk/empathy-contact-widget.c:1332 +msgid "<b>Location</b>" +msgstr "<b>Lokasjon</b>" + +#: ../libempathy-gtk/empathy-contact-widget.c:1345 +msgid "<b>Location</b>, " +msgstr "<b>Lokasjon</b>, " + +#: ../libempathy-gtk/empathy-contact-widget.c:1395 +msgid "%B %e, %Y at %R UTC" +msgstr "%B %e, %Y, %R UTC" + +#: ../libempathy-gtk/empathy-contact-widget.ui.h:1 msgid "<b>Client Information</b>" msgstr "<b>Klientinformasjon</b>" -#: ../libempathy-gtk/empathy-contact-widget.glade.h:2 +#: ../libempathy-gtk/empathy-contact-widget.ui.h:2 msgid "<b>Contact Details</b>" msgstr "<b>Kontaktdetaljer</b>" -#: ../libempathy-gtk/empathy-contact-widget.glade.h:3 +#: ../libempathy-gtk/empathy-contact-widget.ui.h:3 msgid "<b>Contact</b>" msgstr "<b>Kontakt</b>" -#: ../libempathy-gtk/empathy-contact-widget.glade.h:4 +#: ../libempathy-gtk/empathy-contact-widget.ui.h:4 msgid "<b>Groups</b>" msgstr "<b>Grupper</b>" -#: ../libempathy-gtk/empathy-contact-widget.glade.h:5 -#: ../libempathy-gtk/empathy-new-message-dialog.glade.h:1 -#: ../src/empathy-chatrooms-window.glade.h:1 -#: ../src/empathy-new-chatroom-dialog.glade.h:1 +#: ../libempathy-gtk/empathy-contact-widget.ui.h:5 +msgid "<b>Location</b> at (date)\t" +msgstr "<b>Lokasjon</b> (dato)\t" + +#: ../libempathy-gtk/empathy-contact-widget.ui.h:6 +#: ../libempathy-gtk/empathy-new-message-dialog.ui.h:1 +#: ../src/empathy-chatrooms-window.ui.h:1 +#: ../src/empathy-new-chatroom-dialog.ui.h:1 msgid "Account:" msgstr "Konto:" -#: ../libempathy-gtk/empathy-contact-widget.glade.h:6 +#: ../libempathy-gtk/empathy-contact-widget.ui.h:7 msgid "Alias:" msgstr "Alias:" -#: ../libempathy-gtk/empathy-contact-widget.glade.h:7 +#: ../libempathy-gtk/empathy-contact-widget.ui.h:8 msgid "Birthday:" msgstr "Fødselsdag:" -#: ../libempathy-gtk/empathy-contact-widget.glade.h:8 +#: ../libempathy-gtk/empathy-contact-widget.ui.h:9 msgid "Client:" msgstr "Klient:" -#: ../libempathy-gtk/empathy-contact-widget.glade.h:9 -msgid "Contact information" -msgstr "Kontaktinformasjon" - -#: ../libempathy-gtk/empathy-contact-widget.glade.h:10 +#: ../libempathy-gtk/empathy-contact-widget.ui.h:10 msgid "Email:" msgstr "E-post:" -#: ../libempathy-gtk/empathy-contact-widget.glade.h:11 +#: ../libempathy-gtk/empathy-contact-widget.ui.h:11 msgid "Fullname:" msgstr "Fullt navn:" #. Identifier to connect to Instant Messaging network -#: ../libempathy-gtk/empathy-contact-widget.glade.h:13 +#: ../libempathy-gtk/empathy-contact-widget.ui.h:13 msgid "Identifier:" msgstr "Identifikator:" -#: ../libempathy-gtk/empathy-contact-widget.glade.h:14 +#: ../libempathy-gtk/empathy-contact-widget.ui.h:14 msgid "Information requested..." msgstr "Informasjon forespurt ..." -#: ../libempathy-gtk/empathy-contact-widget.glade.h:15 +#: ../libempathy-gtk/empathy-contact-widget.ui.h:15 msgid "OS:" msgstr "OS:" -#: ../libempathy-gtk/empathy-contact-widget.glade.h:16 +#: ../libempathy-gtk/empathy-contact-widget.ui.h:16 msgid "" "Select the groups you want this contact to appear in. Note that you can " "select more than one group or no groups." @@ -872,114 +1088,134 @@ msgstr "" "Velg gruppene du ønsker at denne kontakten skal vises i. Du kan velge flere " "eller ingen." -#: ../libempathy-gtk/empathy-contact-widget.glade.h:17 +#: ../libempathy-gtk/empathy-contact-widget.ui.h:17 msgid "Version:" msgstr "Versjon:" -#: ../libempathy-gtk/empathy-contact-widget.glade.h:18 +#: ../libempathy-gtk/empathy-contact-widget.ui.h:18 msgid "Web site:" msgstr "Nettsted:" -#: ../libempathy-gtk/empathy-contact-widget.glade.h:19 +#: ../libempathy-gtk/empathy-contact-widget.ui.h:19 msgid "_Add Group" msgstr "_Legg til gruppe" -#: ../libempathy-gtk/empathy-irc-network-dialog.c:284 +#: ../libempathy-gtk/empathy-irc-network-dialog.c:283 msgid "new server" msgstr "ny tjener" -#: ../libempathy-gtk/empathy-irc-network-dialog.c:513 +#: ../libempathy-gtk/empathy-irc-network-dialog.c:510 msgid "Server" msgstr "Tjener" -#: ../libempathy-gtk/empathy-irc-network-dialog.c:528 +#: ../libempathy-gtk/empathy-irc-network-dialog.c:525 msgid "Port" msgstr "Port" -#: ../libempathy-gtk/empathy-irc-network-dialog.c:541 +#: ../libempathy-gtk/empathy-irc-network-dialog.c:538 msgid "SSL" msgstr "SSL" -#: ../libempathy-gtk/empathy-log-window.c:498 -#: ../src/empathy-import-dialog.c:276 +#: ../libempathy-gtk/empathy-log-window.c:494 +#: ../src/empathy-import-dialog.c:281 msgid "Account" msgstr "Konto" -#: ../libempathy-gtk/empathy-log-window.c:515 +#: ../libempathy-gtk/empathy-log-window.c:511 msgid "Date" msgstr "Dato" -#. Tab Label -#: ../libempathy-gtk/empathy-log-window.glade.h:2 +#: ../libempathy-gtk/empathy-log-window.ui.h:1 msgid "Conversations" msgstr "Samtaler" -#: ../libempathy-gtk/empathy-log-window.glade.h:3 +#: ../libempathy-gtk/empathy-log-window.ui.h:2 msgid "Previous Conversations" msgstr "Tidligere samtaler" -#. Tab Label -#: ../libempathy-gtk/empathy-log-window.glade.h:5 +#: ../libempathy-gtk/empathy-log-window.ui.h:3 msgid "Search" msgstr "Søk" -#. Searching *for* something -#: ../libempathy-gtk/empathy-log-window.glade.h:7 +#: ../libempathy-gtk/empathy-log-window.ui.h:4 msgid "_For:" msgstr "_For:" -#: ../libempathy-gtk/empathy-new-message-dialog.glade.h:2 +#: ../libempathy-gtk/empathy-new-message-dialog.ui.h:2 msgid "C_all" msgstr "Ri_ng" -#: ../libempathy-gtk/empathy-new-message-dialog.glade.h:3 +#: ../libempathy-gtk/empathy-new-message-dialog.ui.h:3 msgid "C_hat" msgstr "_Prat" -#: ../libempathy-gtk/empathy-new-message-dialog.glade.h:4 +#: ../libempathy-gtk/empathy-new-message-dialog.ui.h:4 msgid "Contact ID:" msgstr "KontaktID:" -#: ../libempathy-gtk/empathy-new-message-dialog.glade.h:5 +#: ../libempathy-gtk/empathy-new-message-dialog.ui.h:5 msgid "New Conversation" msgstr "Ny samtale" +#. COL_STATE_ICON_NAME +#. COL_STATE +#. COL_STATUS_TEXT +#. COL_DISPLAY_MARKUP +#. COL_STATUS_CUSTOMISABLE +#. COL_TYPE +#: ../libempathy-gtk/empathy-presence-chooser.c:172 +msgid "Custom Message..." +msgstr "Egendefinert melding..." + +#: ../libempathy-gtk/empathy-presence-chooser.c:227 +msgid "Edit Custom Messages..." +msgstr "Rediger egendefinerte meldinger..." + +#: ../libempathy-gtk/empathy-presence-chooser.c:326 +msgid "Click to remove this status as a favorite" +msgstr "" + +#: ../libempathy-gtk/empathy-presence-chooser.c:335 +msgid "Click to make this status a favorite" +msgstr "" + +#: ../libempathy-gtk/empathy-presence-chooser.c:369 +msgid "Set status" +msgstr "Sett status" + +#: ../libempathy-gtk/empathy-presence-chooser.c:778 +msgid "Set your presence and current status" +msgstr "" + #. Custom messages -#: ../libempathy-gtk/empathy-presence-chooser.c:685 +#: ../libempathy-gtk/empathy-presence-chooser.c:1013 msgid "Custom messages..." msgstr "Egendefinerte meldinger ..." -#: ../libempathy-gtk/empathy-presence-chooser.glade.h:1 -msgid "Custom message" -msgstr "Egendefinert melding" - -#: ../libempathy-gtk/empathy-presence-chooser.glade.h:2 -msgid "Message:" -msgstr "Melding:" - -#: ../libempathy-gtk/empathy-presence-chooser.glade.h:3 -msgid "Save message" -msgstr "Lagre melding" +#: ../libempathy-gtk/empathy-status-preset-dialog.c:362 +msgid "Enter Custom Message" +msgstr "Oppgi egendefinert melding" -#: ../libempathy-gtk/empathy-presence-chooser.glade.h:4 -msgid "Status:" -msgstr "Status:" +#: ../libempathy-gtk/empathy-status-preset-dialog.c:521 +msgid "Edit Custom Messages" +msgstr "Rediger egendefinerte meldinger" -#: ../libempathy-gtk/empathy-spell-dialog.c:82 -msgid "Word" -msgstr "Ord" +#: ../libempathy-gtk/empathy-status-preset-dialog.ui.h:1 +msgid "Add _New Preset" +msgstr "" -#: ../libempathy-gtk/empathy-spell-dialog.c:259 -msgid "Suggestions for the word" -msgstr "Forslag for ordet" +#: ../libempathy-gtk/empathy-status-preset-dialog.ui.h:2 +#, fuzzy +msgid "Saved Presets" +msgstr "Lagre melding" -#: ../libempathy-gtk/empathy-spell-dialog.glade.h:1 -msgid "Spell Checker" -msgstr "Stavekontroll" +#: ../libempathy-gtk/empathy-status-preset-dialog.ui.h:3 +msgid "gtk-add" +msgstr "" -#: ../libempathy-gtk/empathy-spell-dialog.glade.h:2 -msgid "Suggestions for the word:" -msgstr "Forslag for ordet:" +#: ../libempathy-gtk/empathy-status-preset-dialog.ui.h:4 +msgid "gtk-remove" +msgstr "" #: ../libempathy-gtk/empathy-theme-manager.c:60 msgid "Classic" @@ -997,51 +1233,55 @@ msgstr "Tøm" msgid "Blue" msgstr "Blå" -#: ../libempathy-gtk/empathy-ui-utils.c:1385 +#: ../libempathy-gtk/empathy-ui-utils.c:1355 msgid "Unable to open URI" msgstr "Kan ikke åpne URI" -#: ../libempathy-gtk/empathy-ui-utils.c:1530 +#: ../libempathy-gtk/empathy-ui-utils.c:1445 msgid "Select a file" msgstr "Velg en fil" -#: ../libempathy-gtk/empathy-ui-utils.c:1566 +#: ../libempathy-gtk/empathy-ui-utils.c:1503 +msgid "Select a destination" +msgstr "Velg en destinasjon" + +#: ../libempathy-gtk/empathy-ui-utils.c:1532 msgid "Received an instant message" msgstr "Mottok en lynmelding" -#: ../libempathy-gtk/empathy-ui-utils.c:1568 +#: ../libempathy-gtk/empathy-ui-utils.c:1534 msgid "Sent an instant message" msgstr "Send en lynmelding" -#: ../libempathy-gtk/empathy-ui-utils.c:1570 +#: ../libempathy-gtk/empathy-ui-utils.c:1536 msgid "Incoming chat request" msgstr "Innkommende samtaleforespørsel" -#: ../libempathy-gtk/empathy-ui-utils.c:1572 +#: ../libempathy-gtk/empathy-ui-utils.c:1538 msgid "Contact connected" msgstr "Kontakt koblet til" -#: ../libempathy-gtk/empathy-ui-utils.c:1574 +#: ../libempathy-gtk/empathy-ui-utils.c:1540 msgid "Contact disconnected" msgstr "Kontakt koblet fra" -#: ../libempathy-gtk/empathy-ui-utils.c:1576 +#: ../libempathy-gtk/empathy-ui-utils.c:1542 msgid "Connected to server" msgstr "Koblet til tjener" -#: ../libempathy-gtk/empathy-ui-utils.c:1578 +#: ../libempathy-gtk/empathy-ui-utils.c:1544 msgid "Disconnected from server" msgstr "Koblet fra tjener" -#: ../libempathy-gtk/empathy-ui-utils.c:1580 +#: ../libempathy-gtk/empathy-ui-utils.c:1546 msgid "Incoming voice call" msgstr "Innkommende samtale" -#: ../libempathy-gtk/empathy-ui-utils.c:1582 +#: ../libempathy-gtk/empathy-ui-utils.c:1548 msgid "Outgoing voice call" msgstr "Utgående samtale" -#: ../libempathy-gtk/empathy-ui-utils.c:1584 +#: ../libempathy-gtk/empathy-ui-utils.c:1550 msgid "Voice call ended" msgstr "Samtale avsluttet" @@ -1230,7 +1470,7 @@ msgid "Megaphone" msgstr "Megafon" #: ../megaphone/data/GNOME_Megaphone_Applet.server.in.in.h:2 -#: ../megaphone/src/megaphone-applet.c:417 +#: ../megaphone/src/megaphone-applet.c:527 msgid "Talk!" msgstr "Snakk!" @@ -1244,15 +1484,15 @@ msgid "_Information" msgstr "_Informasjon" #: ../megaphone/data/GNOME_Megaphone_Applet.xml.h:3 -#: ../src/empathy-main-window.glade.h:15 +#: ../src/empathy-main-window.ui.h:18 msgid "_Preferences" msgstr "_Brukervalg" -#: ../megaphone/src/megaphone-applet.c:255 +#: ../megaphone/src/megaphone-applet.c:168 msgid "Please configure a contact." msgstr "Vennligst konfigurer en kontakt." -#: ../megaphone/src/megaphone-applet.c:348 +#: ../megaphone/src/megaphone-applet.c:258 msgid "Select contact..." msgstr "Velg kontakt ..." @@ -1265,19 +1505,19 @@ msgstr "Tilstedeværelse" msgid "Set your own presence" msgstr "Velg din egen tilstedeværelse" -#: ../src/empathy.c:426 +#: ../src/empathy.c:476 msgid "Don't connect on startup" msgstr "Ikke koble til ved oppstart" -#: ../src/empathy.c:430 +#: ../src/empathy.c:480 msgid "Don't show the contact list on startup" msgstr "Ikke vis kontaktlisten ved oppstart" -#: ../src/empathy.c:434 +#: ../src/empathy.c:484 msgid "Show the accounts dialog" msgstr "Vis kontovinduet" -#: ../src/empathy.c:446 +#: ../src/empathy.c:496 msgid "- Empathy Instant Messenger" msgstr "- Empathy lynmeldingsprogram" @@ -1325,22 +1565,21 @@ msgstr "" "Sigurd Gartmann\n" "Espen Stefansen" -#: ../src/empathy-accounts-dialog.c:391 +#: ../src/empathy-accounts-dialog.c:392 msgid "Enabled" msgstr "Aktivert" -#: ../src/empathy-accounts-dialog.c:401 -#: ../src/empathy-accounts-dialog.glade.h:4 +#: ../src/empathy-accounts-dialog.c:402 ../src/empathy-accounts-dialog.ui.h:4 msgid "Accounts" msgstr "Kontoer" #. To translator: %s is the protocol name -#: ../src/empathy-accounts-dialog.c:833 +#: ../src/empathy-accounts-dialog.c:836 #, c-format msgid "New %s account" msgstr "Ny %s-konto" -#: ../src/empathy-accounts-dialog.c:943 +#: ../src/empathy-accounts-dialog.c:947 #, c-format msgid "" "You are about to remove your %s account!\n" @@ -1349,7 +1588,7 @@ msgstr "" "Du holder på å fjerne din %s-konto!\n" "Er du sikker på at du vil dette?" -#: ../src/empathy-accounts-dialog.c:949 +#: ../src/empathy-accounts-dialog.c:953 msgid "" "Any associated conversations and chat rooms will NOT be removed if you " "decide to proceed.\n" @@ -1362,31 +1601,31 @@ msgstr "" "\n" "Skulle du velge å legge til kontoen senere, vil de bli tilgjengelige igjen." -#: ../src/empathy-accounts-dialog.glade.h:1 +#: ../src/empathy-accounts-dialog.ui.h:1 msgid "<b>New Account</b>" msgstr "<b>Ny konto</b>" -#: ../src/empathy-accounts-dialog.glade.h:2 +#: ../src/empathy-accounts-dialog.ui.h:2 msgid "<b>No protocol installed</b>" msgstr "<b>Ingen protokoll installert</b>" -#: ../src/empathy-accounts-dialog.glade.h:3 +#: ../src/empathy-accounts-dialog.ui.h:3 msgid "<b>Settings</b>" msgstr "<b>Innstillinger</b>" -#: ../src/empathy-accounts-dialog.glade.h:5 +#: ../src/empathy-accounts-dialog.ui.h:5 msgid "Cr_eate" msgstr "Oppr_ett" -#: ../src/empathy-accounts-dialog.glade.h:6 +#: ../src/empathy-accounts-dialog.ui.h:6 msgid "I already have an account I want to use" msgstr "Jeg har allerede en konto jeg vil bruke" -#: ../src/empathy-accounts-dialog.glade.h:7 +#: ../src/empathy-accounts-dialog.ui.h:7 msgid "Import Accounts..." msgstr "Importer kontoer..." -#: ../src/empathy-accounts-dialog.glade.h:8 +#: ../src/empathy-accounts-dialog.ui.h:8 msgid "" "To add a new account, you first have to install a backend for each protocol " "you want to use." @@ -1394,261 +1633,196 @@ msgstr "" "Du må installere en motor for hver protokoll du ønsker å bruke før du legger " "til en ny konto." -#: ../src/empathy-accounts-dialog.glade.h:9 +#: ../src/empathy-accounts-dialog.ui.h:9 msgid "Type:" msgstr "Type:" -#: ../src/empathy-call-window.c:180 +#: ../src/empathy-accounts-dialog.ui.h:10 +msgid "_Add..." +msgstr "_Legg til..." + +#: ../src/empathy-call-window.c:63 +msgid "Connecting..." +msgstr "Kobler til..." + +#: ../src/empathy-call-window.c:405 msgid "Contrast" msgstr "Kontrast" -#: ../src/empathy-call-window.c:180 +#: ../src/empathy-call-window.c:408 msgid "Brightness" msgstr "Lysstyrke" -#: ../src/empathy-call-window.c:180 +#: ../src/empathy-call-window.c:411 msgid "Gamma" msgstr "Gamma" -#: ../src/empathy-call-window.c:212 +#: ../src/empathy-call-window.c:516 msgid "Volume" msgstr "Volum" -#: ../src/empathy-call-window.c:287 +#: ../src/empathy-call-window.c:697 msgid "_Sidebar" msgstr "_Sidelinje" -#: ../src/empathy-call-window.c:305 +#: ../src/empathy-call-window.c:716 msgid "Dialpad" msgstr "Nummertavle" -#: ../src/empathy-call-window.c:309 +#: ../src/empathy-call-window.c:722 msgid "Audio input" msgstr "" -#: ../src/empathy-call-window.c:313 +#: ../src/empathy-call-window.c:726 msgid "Video input" msgstr "" -#: ../src/empathy-call-window.c:326 -msgid "Connecting..." -msgstr "Kobler til..." +#: ../src/empathy-call-window.c:789 +#, c-format +msgid "Call with %s" +msgstr "Samtale med %s" -#: ../src/empathy-call-window.c:489 +#: ../src/empathy-call-window.c:860 +msgid "Call" +msgstr "Ring" + +#. Translators: number of minutes:seconds the caller has been connected +#: ../src/empathy-call-window.c:1204 #, c-format -msgid "Connected -- %d:%02dm" +msgid "Connected — %d:%02dm" msgstr "Koblet til - %d:%02dm" -#: ../src/empathy-call-window.glade.h:1 +#: ../src/empathy-call-window.ui.h:1 msgid "Hang up" msgstr "Legg på" -#: ../src/empathy-call-window.glade.h:2 -msgid "Send Video" -msgstr "Send video" +#: ../src/empathy-call-window.ui.h:2 +msgid "Redial" +msgstr "" -#: ../src/empathy-call-window.glade.h:3 +#: ../src/empathy-call-window.ui.h:3 +msgid "Send Audio" +msgstr "Send lyd" + +#: ../src/empathy-call-window.ui.h:4 msgid "Send video" msgstr "Send video" -#: ../src/empathy-call-window.glade.h:4 +#: ../src/empathy-call-window.ui.h:5 msgid "Video preview" msgstr "Forhåndsvis video" -#: ../src/empathy-call-window.glade.h:6 +#: ../src/empathy-call-window.ui.h:6 +msgid "_Call" +msgstr "_Ring" + +#: ../src/empathy-call-window.ui.h:7 ../src/empathy-main-window.ui.h:21 msgid "_View" msgstr "_Vis" -#: ../src/empathy-call-window.glade.h:7 -msgid "menuitem2" -msgstr "" - -#: ../src/empathy-chat-window.c:313 +#: ../src/empathy-chat-window.c:342 #, c-format msgid "Conversations (%d)" msgstr "Samtaler (%d)" -#: ../src/empathy-chat-window.c:418 +#: ../src/empathy-chat-window.c:470 msgid "Topic:" msgstr "Emne:" -#: ../src/empathy-chat-window.c:423 +#: ../src/empathy-chat-window.c:474 msgid "Typing a message." msgstr "Skriver en melding" -#: ../src/empathy-chat-window.c:892 ../src/empathy-event-manager.c:424 -#, fuzzy, c-format +#: ../src/empathy-chat-window.c:935 ../src/empathy-event-manager.c:429 +#, c-format msgid "New message from %s" -msgstr "" -"Ny melding fra %s:\n" -"%s" - -#: ../src/empathy-chat-window.glade.h:1 -msgid "C_lear" -msgstr "T_øm" - -#: ../src/empathy-chat-window.glade.h:2 -msgid "Chat" -msgstr "Prat" - -#: ../src/empathy-chat-window.glade.h:3 -msgid "Insert _Smiley" -msgstr "Sett inn _smilefjes" - -#: ../src/empathy-chat-window.glade.h:4 -msgid "Invitation _message:" -msgstr "Invitasjons_melding:" - -#: ../src/empathy-chat-window.glade.h:5 -msgid "Invite" -msgstr "Inviter" - -#: ../src/empathy-chat-window.glade.h:6 -msgid "Move Tab _Left" -msgstr "Flytt fane til _venstre" - -#: ../src/empathy-chat-window.glade.h:7 -msgid "Move Tab _Right" -msgstr "Flytt fane til _høyre" - -#: ../src/empathy-chat-window.glade.h:8 -msgid "Select who would you like to invite:" -msgstr "Velg de du vil invitere:" - -#: ../src/empathy-chat-window.glade.h:9 -msgid "You have been invited to join a chat conference." -msgstr "Du er invitert til en konferansesamtale." - -#: ../src/empathy-chat-window.glade.h:10 -msgid "_Contact" -msgstr "_Kontakt" - -#: ../src/empathy-chat-window.glade.h:11 ../src/empathy-main-window.glade.h:10 -msgid "_Contents" -msgstr "_Innhold" - -#: ../src/empathy-chat-window.glade.h:12 -msgid "_Conversation" -msgstr "_Samtale" - -#: ../src/empathy-chat-window.glade.h:13 -msgid "_Detach Tab" -msgstr "_Løsne fane" - -#: ../src/empathy-chat-window.glade.h:15 -msgid "_Favorite Chatroom" -msgstr "_Favorittrom" - -#: ../src/empathy-chat-window.glade.h:16 ../src/empathy-main-window.glade.h:12 -msgid "_Help" -msgstr "_Hjelp" - -#: ../src/empathy-chat-window.glade.h:17 -msgid "_Next Tab" -msgstr "_Neste fane" - -#: ../src/empathy-chat-window.glade.h:18 -msgid "_Previous Tab" -msgstr "_Forrige fane" +msgstr "Ny melding fra %s" -#: ../src/empathy-chat-window.glade.h:19 -msgid "_Tabs" -msgstr "_Faner" - -#: ../src/empathy-chatrooms-window.c:262 +#: ../src/empathy-chatrooms-window.c:258 msgid "Name" msgstr "Navn" -#: ../src/empathy-chatrooms-window.c:280 +#: ../src/empathy-chatrooms-window.c:276 msgid "Room" msgstr "Rom" -#: ../src/empathy-chatrooms-window.c:289 +#: ../src/empathy-chatrooms-window.c:285 msgid "Auto-Connect" msgstr "Koble til automatisk" -#: ../src/empathy-chatrooms-window.glade.h:2 -msgid "Edit Favorite Room" -msgstr "Endre favorittrom" - -#: ../src/empathy-chatrooms-window.glade.h:3 -msgid "Join room on start_up" -msgstr "Bli med i rom ved oppstart" - -#: ../src/empathy-chatrooms-window.glade.h:4 -msgid "Join this chat room when Empathy starts and you are connected" -msgstr "" -"Bli med i dette samtalerommet når Empathy starter opp og du blir koblet til" - -#: ../src/empathy-chatrooms-window.glade.h:5 +#: ../src/empathy-chatrooms-window.ui.h:2 msgid "Manage Favorite Rooms" msgstr "Håndter favorittrom" -#: ../src/empathy-chatrooms-window.glade.h:6 -msgid "N_ame:" -msgstr "_Navn:" - -#: ../src/empathy-chatrooms-window.glade.h:7 -msgid "S_erver:" -msgstr "_Tjener:" - -#: ../src/empathy-chatrooms-window.glade.h:9 -#: ../src/empathy-new-chatroom-dialog.glade.h:9 -msgid "_Room:" -msgstr "_Rom:" - -#: ../src/empathy-event-manager.c:372 +#: ../src/empathy-event-manager.c:377 msgid "Incoming call" msgstr "Innkommende samtale" -#: ../src/empathy-event-manager.c:375 +#: ../src/empathy-event-manager.c:380 #, c-format msgid "%s is calling you, do you want to answer?" msgstr "%s ringer deg. Vil du svare?" -#: ../src/empathy-event-manager.c:382 +#: ../src/empathy-event-manager.c:387 msgid "_Reject" msgstr "Av_vis" -#: ../src/empathy-event-manager.c:388 +#: ../src/empathy-event-manager.c:393 msgid "_Answer" msgstr "Sv_ar" -#: ../src/empathy-event-manager.c:511 +#: ../src/empathy-event-manager.c:507 #, c-format msgid "Incoming call from %s" msgstr "Innkommende samtale fra %s" -#: ../src/empathy-event-manager.c:559 +#: ../src/empathy-event-manager.c:547 #, c-format msgid "%s is offering you an invitation" msgstr "%s tilbyr deg en invitasjon" -#: ../src/empathy-event-manager.c:565 -#, fuzzy +#: ../src/empathy-event-manager.c:553 msgid "An external application will be started to handle it." -msgstr "" -"%s sender deg en invitasjon. Et eksternt program vil bli startet for å " -"håndtere den." +msgstr "Et eksternt program vil bli startet for å håndtere den." -#: ../src/empathy-event-manager.c:570 -#, fuzzy +#: ../src/empathy-event-manager.c:558 msgid "You don't have the needed external application to handle it." +msgstr "Du har ikke nødvendig eksternt program som kan håndtere dette." + +#: ../src/empathy-event-manager.c:685 +msgid "Room invitation" +msgstr "Invitasjon til rom" + +#: ../src/empathy-event-manager.c:688 +#, c-format +msgid "%s is inviting you to join %s" +msgstr "" + +#: ../src/empathy-event-manager.c:696 +msgid "_Decline" +msgstr "_Avslå" + +#: ../src/empathy-event-manager.c:701 +#: ../src/empathy-new-chatroom-dialog.ui.h:7 +msgid "_Join" +msgstr "_Bli med" + +#: ../src/empathy-event-manager.c:740 +#, c-format +msgid "%s invited you to join %s" msgstr "" -"%s sender deg en invitasjon, men du har ikke nødvendig eksternt program som " -"kan håndtere dette." -#: ../src/empathy-event-manager.c:706 +#: ../src/empathy-event-manager.c:766 #, c-format msgid "Incoming file transfer from %s" msgstr "Innkommende filoverføring fra %s" -#: ../src/empathy-event-manager.c:800 +#: ../src/empathy-event-manager.c:946 #, c-format msgid "Subscription requested by %s" msgstr "Abonnement forespurt av %s" -#: ../src/empathy-event-manager.c:804 +#: ../src/empathy-event-manager.c:950 #, c-format msgid "" "\n" @@ -1657,313 +1831,327 @@ msgstr "" "\n" "Melding: %s" -#: ../src/empathy-ft-manager.c:113 +#. Translators: time left, when it is more than one hour +#: ../src/empathy-ft-manager.c:101 #, c-format msgid "%u:%02u.%02u" msgstr "%u:%02u.%02u" -#: ../src/empathy-ft-manager.c:115 +#. Translators: time left, when is is less than one hour +#: ../src/empathy-ft-manager.c:104 #, c-format msgid "%02u.%02u" msgstr "%02u.%02u" -#: ../src/empathy-ft-manager.c:164 -msgid "No reason was specified" -msgstr "Ingen årsak oppgitt" - -#: ../src/empathy-ft-manager.c:166 -msgid "The change in state was requested" -msgstr "Tilstandsendring ble etterspurt" - -#: ../src/empathy-ft-manager.c:168 -msgid "You canceled the file transfer" -msgstr "Du avbrøt filoverføringen" - -#: ../src/empathy-ft-manager.c:170 -msgid "The other participant canceled the file transfer" -msgstr "Avsender avbrøt filoverføringen" - -#: ../src/empathy-ft-manager.c:172 -msgid "Error while trying to transfer the file" -msgstr "Feil under overføring av filen" +#: ../src/empathy-ft-manager.c:180 +msgctxt "file transfer percent" +msgid "Unknown" +msgstr "Ukjent" -#: ../src/empathy-ft-manager.c:174 -msgid "The other participant is unable to transfer the file" -msgstr "Avsender kan ikke overføre filen" +#: ../src/empathy-ft-manager.c:275 +#, c-format +msgid "%s of %s at %s/s" +msgstr "%s av %s med %s/s" -#: ../src/empathy-ft-manager.c:176 -msgid "Unknown reason" -msgstr "Ukjent årsak" +#: ../src/empathy-ft-manager.c:276 +#, c-format +msgid "%s of %s" +msgstr "%s av %s" #. translators: first %s is filename, second %s is the contact name -#: ../src/empathy-ft-manager.c:224 +#: ../src/empathy-ft-manager.c:307 #, c-format msgid "Receiving \"%s\" from %s" msgstr "Mottar «%s» fra %s" #. translators: first %s is filename, second %s is the contact name -#: ../src/empathy-ft-manager.c:227 +#: ../src/empathy-ft-manager.c:310 #, c-format msgid "Sending \"%s\" to %s" msgstr "Sender «%s» til %s" -#: ../src/empathy-ft-manager.c:237 -msgctxt "file size" -msgid "Unknown" -msgstr "Ukjent" +#. translators: first %s is filename, second %s +#. * is the contact name +#: ../src/empathy-ft-manager.c:340 +#, c-format +msgid "Error receiving \"%s\" from %s" +msgstr "Feil ved mottak av «%s» fra %s" + +#: ../src/empathy-ft-manager.c:343 +msgid "Error receiving a file" +msgstr "Feil ved mottak av en fil" -#. translators: first %s is the transferred size, second %s is -#. * the total file size -#: ../src/empathy-ft-manager.c:245 +#: ../src/empathy-ft-manager.c:348 #, c-format -msgid "%s of %s" -msgstr "%s av %s" +msgid "Error sending \"%s\" to %s" +msgstr "Feil ved sending av «%s» til %s" -#: ../src/empathy-ft-manager.c:252 -msgid "Waiting the other participant's response" -msgstr "Venter på svar fra motparten" +#: ../src/empathy-ft-manager.c:351 +msgid "Error sending a file" +msgstr "Feil ved sending av en fil" -#: ../src/empathy-ft-manager.c:262 +#. translators: first %s is filename, second %s +#. * is the contact name +#: ../src/empathy-ft-manager.c:490 #, c-format msgid "\"%s\" received from %s" msgstr "«%s» mottatt fra %s" -#: ../src/empathy-ft-manager.c:268 +#. translators: first %s is filename, second %s +#. * is the contact name +#: ../src/empathy-ft-manager.c:495 #, c-format msgid "\"%s\" sent to %s" msgstr "«%s» sendt til %s" -#: ../src/empathy-ft-manager.c:271 +#: ../src/empathy-ft-manager.c:498 msgid "File transfer completed" msgstr "Filoverføring fullført" -#: ../src/empathy-ft-manager.c:280 -#, c-format -msgid "\"%s\" receiving from %s" -msgstr "«%s» mottas fra %s" +#: ../src/empathy-ft-manager.c:617 ../src/empathy-ft-manager.c:784 +msgid "Waiting for the other participant's response" +msgstr "Venter på svar fra motparten" -#: ../src/empathy-ft-manager.c:286 +#: ../src/empathy-ft-manager.c:643 ../src/empathy-ft-manager.c:681 #, c-format -msgid "\"%s\" sending to %s" -msgstr "«%s» sendes til %s" +msgid "Checking integrity of \"%s\"" +msgstr "Sjekker integriteten for «%s»" -#: ../src/empathy-ft-manager.c:289 +#: ../src/empathy-ft-manager.c:646 ../src/empathy-ft-manager.c:684 #, c-format -msgid "File transfer canceled: %s" -msgstr "Filoverføring avbrutt: %s" - -#: ../src/empathy-ft-manager.c:304 -msgctxt "remaining time" -msgid "Unknown" -msgstr "Ukjent" - -#: ../src/empathy-ft-manager.c:364 -msgctxt "file transfer percent" -msgid "Unknown" -msgstr "Ukjent" +msgid "Hashing \"%s\"" +msgstr "" -#: ../src/empathy-ft-manager.c:700 +#: ../src/empathy-ft-manager.c:1024 msgid "%" msgstr "%" -#: ../src/empathy-ft-manager.c:712 +#: ../src/empathy-ft-manager.c:1036 msgid "File" msgstr "Fil" -#: ../src/empathy-ft-manager.c:734 +#: ../src/empathy-ft-manager.c:1058 msgid "Remaining" msgstr "Gjenstår" -#: ../src/empathy-ft-manager.c:885 -msgid "Cannot save file to this location" -msgstr "Kan ikke lagre filen til denne lokasjonen" - -#: ../src/empathy-ft-manager.c:931 -msgid "Save file as..." -msgstr "Lagre fil som..." - -#: ../src/empathy-ft-manager.c:1001 -msgid "unknown size" -msgstr "ukjent størrelse" - -#: ../src/empathy-ft-manager.c:1007 -#, c-format -msgid "%s would like to send you a file" -msgstr "%s ønsker å sende deg en fil" - -#: ../src/empathy-ft-manager.c:1012 -#, c-format -msgid "Do you want to accept the file \"%s\" (%s)?" -msgstr "Vil du motta filen «%s» (%s)?" - -#. Decline button -#: ../src/empathy-ft-manager.c:1021 -msgid "_Decline" -msgstr "_Avslå" - -#. Accept button -#: ../src/empathy-ft-manager.c:1030 -msgid "_Accept" -msgstr "Godt_a" - -#: ../src/empathy-ft-manager.glade.h:1 +#: ../src/empathy-ft-manager.ui.h:1 msgid "File transfers" msgstr "Filoverføringer" -#: ../src/empathy-ft-manager.glade.h:2 +#: ../src/empathy-ft-manager.ui.h:2 msgid "Remove completed, canceled and failed file transfers from the list" msgstr "Fjerning fullført. Filoverføringer fra listen er avbrutt og feilet" -#: ../src/empathy-import-dialog.c:254 +#. Translators: this is the header of a treeview column +#: ../src/empathy-import-dialog.c:259 msgid "Import" msgstr "Importer" -#: ../src/empathy-import-dialog.c:263 +#: ../src/empathy-import-dialog.c:268 msgid "Protocol" msgstr "Protokoll" -#: ../src/empathy-import-dialog.c:289 +#: ../src/empathy-import-dialog.c:294 msgid "Source" msgstr "Kilde" -#: ../src/empathy-import-dialog.c:377 +#: ../src/empathy-import-dialog.c:388 msgid "" "No accounts to import could be found. Empathy currently only supports " "importing accounts from Pidgin." msgstr "Fant ingen kontoer å importere. Empathy støtter kun import fra Pidgin." -#: ../src/empathy-import-dialog.glade.h:1 +#: ../src/empathy-import-dialog.ui.h:1 msgid "Import Accounts" msgstr "Importer kontoer" -#: ../src/empathy-main-window.c:391 +#: ../src/empathy-main-window.c:395 +msgid "_Edit account" +msgstr "R_ediger konto" + +#: ../src/empathy-main-window.c:498 msgid "No error specified" msgstr "Ingen feil oppgitt" -#: ../src/empathy-main-window.c:394 +#: ../src/empathy-main-window.c:501 msgid "Network error" msgstr "Nettverksfeil" -#: ../src/empathy-main-window.c:397 +#: ../src/empathy-main-window.c:504 msgid "Authentication failed" msgstr "Autentiseringen feilet" -#: ../src/empathy-main-window.c:400 +#: ../src/empathy-main-window.c:507 msgid "Encryption error" msgstr "Krypteringsfeil" -#: ../src/empathy-main-window.c:403 +#: ../src/empathy-main-window.c:510 msgid "Name in use" msgstr "Navn i bruk" -#: ../src/empathy-main-window.c:406 +#: ../src/empathy-main-window.c:513 msgid "Certificate not provided" msgstr "Sertifikat ikke oppgitt" -#: ../src/empathy-main-window.c:409 +#: ../src/empathy-main-window.c:516 msgid "Certificate untrusted" msgstr "Stoler ikke på sertifikat" -#: ../src/empathy-main-window.c:412 +#: ../src/empathy-main-window.c:519 msgid "Certificate expired" msgstr "Sertifikat utgått" -#: ../src/empathy-main-window.c:415 +#: ../src/empathy-main-window.c:522 msgid "Certificate not activated" msgstr "Sertifikat ikke aktivert" -#: ../src/empathy-main-window.c:418 +#: ../src/empathy-main-window.c:525 msgid "Certificate hostname mismatch" msgstr "Feil vertsnavn i forhold til sertifikat" -#: ../src/empathy-main-window.c:421 +#: ../src/empathy-main-window.c:528 msgid "Certificate fingerprint mismatch" msgstr "Fingeravtrykk stemmer ikke for sertifikat" -#: ../src/empathy-main-window.c:424 +#: ../src/empathy-main-window.c:531 msgid "Certificate self-signed" msgstr "Selvsignert sertifikat" -#: ../src/empathy-main-window.c:427 +#: ../src/empathy-main-window.c:534 msgid "Certificate error" msgstr "Sertifikatsfeil" -#: ../src/empathy-main-window.c:430 +#: ../src/empathy-main-window.c:537 msgid "Unknown error" msgstr "Ukjent feil" -#: ../src/empathy-main-window.c:594 -msgid "Show and edit accounts" -msgstr "Vis og rediger kontoer" - -#: ../src/empathy-main-window.c:974 +#: ../src/empathy-main-window.c:888 msgid "Contact" msgstr "Kontakt" -#: ../src/empathy-main-window.c:1176 -msgid "_Edit account" -msgstr "R_ediger konto" +#: ../src/empathy-main-window.c:1220 +msgid "Show and edit accounts" +msgstr "Vis og rediger kontoer" -#: ../src/empathy-main-window.glade.h:1 +#: ../src/empathy-main-window.ui.h:1 msgid "Contact List" msgstr "Kontaktliste" -#: ../src/empathy-main-window.glade.h:2 +#: ../src/empathy-main-window.ui.h:2 +msgid "Contacts on a _Map" +msgstr "Kontakter på et _kart" + +#: ../src/empathy-main-window.ui.h:3 msgid "Context" msgstr "Sammenheng" -#: ../src/empathy-main-window.glade.h:3 +#: ../src/empathy-main-window.ui.h:4 msgid "Join _Favorites" msgstr "Bli med i _favoritter" -#: ../src/empathy-main-window.glade.h:4 -msgid "Join _New..." -msgstr "Bli med i _ny ..." - -#: ../src/empathy-main-window.glade.h:5 +#: ../src/empathy-main-window.ui.h:5 msgid "Manage Favorites" msgstr "Håndter favoritter" -#: ../src/empathy-main-window.glade.h:6 -msgid "Show _Offline Contacts" -msgstr "Vis frak_oblede kontakter" - -#: ../src/empathy-main-window.glade.h:7 +#: ../src/empathy-main-window.ui.h:6 msgid "_Accounts" msgstr "_Kontoer" -#: ../src/empathy-main-window.glade.h:8 +#: ../src/empathy-main-window.ui.h:7 msgid "_Add Contact..." msgstr "_Legg til kontakt ..." -#: ../src/empathy-main-window.glade.h:13 ../src/empathy-status-icon.glade.h:2 +#: ../src/empathy-main-window.ui.h:9 +msgid "_Contents" +msgstr "_Innhold" + +#: ../src/empathy-main-window.ui.h:10 +msgid "_Debug" +msgstr "_Feilsøk" + +#: ../src/empathy-main-window.ui.h:12 +msgid "_File Transfers" +msgstr "_Filoverføringer" + +#: ../src/empathy-main-window.ui.h:13 +msgid "_Help" +msgstr "_Hjelp" + +#: ../src/empathy-main-window.ui.h:14 +#, fuzzy +msgid "_Join..." +msgstr "Bli med i _ny ..." + +#: ../src/empathy-main-window.ui.h:15 ../src/empathy-status-icon.ui.h:2 msgid "_New Conversation..." msgstr "_Ny samtale..." -#: ../src/empathy-main-window.glade.h:14 +#: ../src/empathy-main-window.ui.h:16 +msgid "_Offline Contacts" +msgstr "Frak_oblede kontakter" + +#: ../src/empathy-main-window.ui.h:17 msgid "_Personal Information" msgstr "Personlig _informasjon" -#: ../src/empathy-main-window.glade.h:16 +#: ../src/empathy-main-window.ui.h:19 +msgid "_Previous Conversations" +msgstr "_Tidligere samtaler" + +#: ../src/empathy-main-window.ui.h:20 msgid "_Room" msgstr "_Rom" -#: ../src/empathy-new-chatroom-dialog.c:291 -msgid "Chat Rooms" +#: ../src/empathy-new-chatroom-dialog.c:332 +msgid "Chat Room" msgstr "Samtalerom" -#: ../src/empathy-new-chatroom-dialog.glade.h:2 -msgid "Browse:" -msgstr "Bla gjennom:" +#: ../src/empathy-new-chatroom-dialog.c:348 +msgid "Members" +msgstr "Medlemmer" + +#: ../src/empathy-new-chatroom-dialog.c:492 +#, c-format +msgctxt "" +"Room/Join's roomlist tooltip. Parametersare a channel name, yes/no, yes/no " +"and a number." +msgid "" +"<b>%s</b>\n" +"Invite required: %s\n" +"Password required: %s\n" +"Members: %s" +msgstr "" + +#: ../src/empathy-new-chatroom-dialog.c:494 +#: ../src/empathy-new-chatroom-dialog.c:495 +msgid "Yes" +msgstr "Ja" + +#: ../src/empathy-new-chatroom-dialog.c:494 +#: ../src/empathy-new-chatroom-dialog.c:495 +msgid "No" +msgstr "Nei" + +#: ../src/empathy-new-chatroom-dialog.c:522 +msgid "Could not start room listing" +msgstr "" + +#: ../src/empathy-new-chatroom-dialog.c:532 +msgid "Could not stop room listing" +msgstr "" + +#: ../src/empathy-new-chatroom-dialog.ui.h:2 +msgid "Couldn't load room list" +msgstr "" -#: ../src/empathy-new-chatroom-dialog.glade.h:3 +#: ../src/empathy-new-chatroom-dialog.ui.h:3 msgid "" "Enter the room name to join here or click on one or more rooms in the list." msgstr "" "Oppgi navn på rom du vil bli med i eller klikk på ett eller flere rom på " "listen." -#: ../src/empathy-new-chatroom-dialog.glade.h:4 +#: ../src/empathy-new-chatroom-dialog.ui.h:4 msgid "" "Enter the server which hosts the room, or leave it empty if the room is on " "the current account's server" @@ -1971,78 +2159,91 @@ msgstr "" "Oppgi tjener som er vert for rommet, eller la stå tom hvis rommet er på " "aktiv kontos tjener" -#: ../src/empathy-new-chatroom-dialog.glade.h:5 -msgid "Join" -msgstr "Bli med" - -#: ../src/empathy-new-chatroom-dialog.glade.h:6 -msgid "Join New" -msgstr "Bli med i ny" +#: ../src/empathy-new-chatroom-dialog.ui.h:5 +#, fuzzy +msgid "Join Room" +msgstr "Rom" -#: ../src/empathy-new-chatroom-dialog.glade.h:7 -msgid "Re_fresh" -msgstr "Opp_dater" +#: ../src/empathy-new-chatroom-dialog.ui.h:6 +#, fuzzy +msgid "Room List" +msgstr "Locale for _romliste:" -#: ../src/empathy-new-chatroom-dialog.glade.h:8 -msgid "" -"This list represents all chat rooms hosted on the server you have entered." -msgstr "" -"Denne listen representerer alle praterom som finnes på tjeneren du har " -"oppgitt." +#: ../src/empathy-new-chatroom-dialog.ui.h:8 +msgid "_Room:" +msgstr "_Rom:" -#: ../src/empathy-preferences.c:157 +#: ../src/empathy-preferences.c:162 msgid "Message received" msgstr "Melding mottatt" -#: ../src/empathy-preferences.c:158 +#: ../src/empathy-preferences.c:163 msgid "Message sent" msgstr "Melding sendt" -#: ../src/empathy-preferences.c:159 +#: ../src/empathy-preferences.c:164 msgid "New conversation" msgstr "Ny samtale" -#: ../src/empathy-preferences.c:160 +#: ../src/empathy-preferences.c:165 msgid "Contact goes online" msgstr "Kontakt kobler til" -#: ../src/empathy-preferences.c:161 +#: ../src/empathy-preferences.c:166 msgid "Contact goes offline" msgstr "Kontakt kobler fra" -#: ../src/empathy-preferences.c:162 +#: ../src/empathy-preferences.c:167 msgid "Account connected" msgstr "Konto koblet til" -#: ../src/empathy-preferences.c:163 +#: ../src/empathy-preferences.c:168 msgid "Account disconnected" msgstr "Konto koblet fra" -#: ../src/empathy-preferences.c:397 +#: ../src/empathy-preferences.c:435 msgid "Language" msgstr "Språk" -#: ../src/empathy-preferences.glade.h:1 +#: ../src/empathy-preferences.ui.h:1 msgid "<b>Appearance</b>" msgstr "<b>Utseende</b>" -#: ../src/empathy-preferences.glade.h:2 -msgid "<b>Behaviour</b>" +#: ../src/empathy-preferences.ui.h:2 +#, fuzzy +msgid "<b>Behavior</b>" msgstr "<b>Oppførsel</b>" -#: ../src/empathy-preferences.glade.h:3 +#: ../src/empathy-preferences.ui.h:3 msgid "<b>Contact List</b>" msgstr "<b>Kontaktliste</b>" -#: ../src/empathy-preferences.glade.h:4 +#: ../src/empathy-preferences.ui.h:4 msgid "<b>Enable spell checking for languages:</b>" msgstr "<b>Slå på stavekontroll for språkene:</b>" -#: ../src/empathy-preferences.glade.h:5 +#: ../src/empathy-preferences.ui.h:5 +#, fuzzy +msgid "<b>Geoclue Settings</b>" +msgstr "<b>Innstillinger</b>" + +#: ../src/empathy-preferences.ui.h:6 msgid "<b>Play sound for events</b>" msgstr "<b>Spill av lyd for hendelser</b>" -#: ../src/empathy-preferences.glade.h:6 +#: ../src/empathy-preferences.ui.h:7 +#, fuzzy +msgid "<b>Privacy</b>" +msgstr "<b>Avansert</b>" + +#: ../src/empathy-preferences.ui.h:8 +msgid "" +"<small>Reduced location accuracy means that nothing more precise than your " +"city, state and country will be published. GPS coordinates will have a " +"random value added (±0.25°).</small>" +msgstr "" + +#: ../src/empathy-preferences.ui.h:9 msgid "" "<small>The list of languages reflects only the languages for which you have " "a dictionary installed.</small>" @@ -2050,106 +2251,131 @@ msgstr "" "<small>Denne listen listen viser bare de språkene det er installert ordliste " "for." -#: ../src/empathy-preferences.glade.h:7 +#: ../src/empathy-preferences.ui.h:10 +msgid "Allow _GPS usage" +msgstr "" + +#: ../src/empathy-preferences.ui.h:11 +msgid "Allow _cellphone usage" +msgstr "" + +#: ../src/empathy-preferences.ui.h:12 +msgid "Allow _network usage" +msgstr "" + +#: ../src/empathy-preferences.ui.h:13 msgid "Automatically _connect on startup " msgstr "_Koble til automatisk ved oppstart " -#: ../src/empathy-preferences.glade.h:8 +#: ../src/empathy-preferences.ui.h:14 msgid "Avatars are user chosen images shown in the contact list" msgstr "Personbilder er valgt av brukerne for å vise i kontaktlisten" -#: ../src/empathy-preferences.glade.h:9 +#: ../src/empathy-preferences.ui.h:15 msgid "Chat Th_eme:" msgstr "Samtale_tema:" -#: ../src/empathy-preferences.glade.h:10 +#: ../src/empathy-preferences.ui.h:16 #, fuzzy msgid "Disable notifications when _away or busy" msgstr "Slå av lyder når du er b_orte eller opptatt" -#: ../src/empathy-preferences.glade.h:11 +#: ../src/empathy-preferences.ui.h:17 msgid "Disable sounds when _away or busy" msgstr "Slå av lyder når du er b_orte eller opptatt" -#: ../src/empathy-preferences.glade.h:12 +#: ../src/empathy-preferences.ui.h:18 msgid "Enable notifications when the _chat is not focused" msgstr "" -#: ../src/empathy-preferences.glade.h:13 +#: ../src/empathy-preferences.ui.h:19 msgid "General" msgstr "Generelt" -#: ../src/empathy-preferences.glade.h:14 +#: ../src/empathy-preferences.ui.h:20 +#, fuzzy +msgid "Location" +msgstr "Varsling" + +#: ../src/empathy-preferences.ui.h:21 msgid "Notifications" msgstr "Varsling" -#: ../src/empathy-preferences.glade.h:15 +#: ../src/empathy-preferences.ui.h:22 msgid "Preferences" msgstr "Brukervalg" -#: ../src/empathy-preferences.glade.h:16 +#: ../src/empathy-preferences.ui.h:23 msgid "Show _avatars" msgstr "Vis person_bilder" -#: ../src/empathy-preferences.glade.h:17 +#: ../src/empathy-preferences.ui.h:24 msgid "Show _smileys as images" msgstr "Vis _smilefjes som bilder" -#: ../src/empathy-preferences.glade.h:18 +#: ../src/empathy-preferences.ui.h:25 msgid "Show co_mpact contact list" msgstr "Vis ko_mpakt kontaktliste" -#: ../src/empathy-preferences.glade.h:19 +#: ../src/empathy-preferences.ui.h:26 msgid "Sort by _name" msgstr "Sorter på _navn" -#: ../src/empathy-preferences.glade.h:20 +#: ../src/empathy-preferences.ui.h:27 msgid "Sort by s_tate" msgstr "Sorter på s_tatus" -#: ../src/empathy-preferences.glade.h:21 +#: ../src/empathy-preferences.ui.h:28 msgid "Sounds" msgstr "Lyder" -#: ../src/empathy-preferences.glade.h:22 +#: ../src/empathy-preferences.ui.h:29 msgid "Spell Checking" msgstr "Stavekontroll" -#: ../src/empathy-preferences.glade.h:23 +#: ../src/empathy-preferences.ui.h:30 msgid "Themes" msgstr "Temaer" -#: ../src/empathy-preferences.glade.h:24 +#: ../src/empathy-preferences.ui.h:31 #, fuzzy msgid "_Enable bubble notifications" msgstr "_Aktiver varsling med lyder" -#: ../src/empathy-preferences.glade.h:25 +#: ../src/empathy-preferences.ui.h:32 msgid "_Enable sound notifications" msgstr "_Aktiver varsling med lyder" -#: ../src/empathy-preferences.glade.h:26 +#: ../src/empathy-preferences.ui.h:33 msgid "_Open new chats in separate windows" msgstr "_Åpne nye samtaler i egne vinduer" -#: ../src/empathy-status-icon.glade.h:1 +#: ../src/empathy-preferences.ui.h:34 +msgid "_Publish location to my contacts" +msgstr "" + +#: ../src/empathy-preferences.ui.h:35 +msgid "_Reduce location accuracy" +msgstr "" + +#: ../src/empathy-status-icon.ui.h:1 msgid "Status" msgstr "Status" -#: ../src/empathy-status-icon.glade.h:3 +#: ../src/empathy-status-icon.ui.h:3 msgid "_Quit" msgstr "_Avslutt" -#: ../src/empathy-status-icon.glade.h:4 +#: ../src/empathy-status-icon.ui.h:4 msgid "_Show Contact List" msgstr "Vi_s kontaktliste" -#: ../src/empathy-tube-dispatch.c:356 +#: ../src/empathy-tube-dispatch.c:375 #, c-format msgid "Unable to start application for service %s: %s" msgstr "Kan ikke starte program for tjeneste %s: %s" -#: ../src/empathy-tube-dispatch.c:427 +#: ../src/empathy-tube-dispatch.c:446 #, c-format msgid "" "An invitation was offered for service %s, but you don't have the needed " @@ -2157,3 +2383,75 @@ msgid "" msgstr "" "En invitasjon ble sendt for tjeneste %s, men du har ikke programmet som " "kreves for denne." + +#: ../src/empathy-call-window-fullscreen.ui.h:1 +msgid "gtk-leave-fullscreen" +msgstr "" + +#: ../src/empathy-map-view.ui.h:1 +#, fuzzy +msgid "Contact Map View" +msgstr "Kontaktliste" + +#: ../src/empathy-debug-dialog.c:111 ../src/empathy-debug-dialog.c:1075 +msgid "Error" +msgstr "Feil" + +#: ../src/empathy-debug-dialog.c:114 ../src/empathy-debug-dialog.c:1069 +msgid "Critical" +msgstr "Kritisk" + +#: ../src/empathy-debug-dialog.c:117 ../src/empathy-debug-dialog.c:1063 +msgid "Warning" +msgstr "Advarsel" + +#: ../src/empathy-debug-dialog.c:120 ../src/empathy-debug-dialog.c:1057 +#: ../src/empathy-debug-dialog.c:1105 +msgid "Message" +msgstr "Melding" + +#: ../src/empathy-debug-dialog.c:123 ../src/empathy-debug-dialog.c:1051 +msgid "Info" +msgstr "Info" + +#: ../src/empathy-debug-dialog.c:126 ../src/empathy-debug-dialog.c:1045 +msgid "Debug" +msgstr "Feilsøk" + +#: ../src/empathy-debug-dialog.c:837 +msgid "Save" +msgstr "Lagre" + +#: ../src/empathy-debug-dialog.c:940 +msgid "Debug Window" +msgstr "Feilsøkingsvindu" + +#: ../src/empathy-debug-dialog.c:1013 +msgid "Pause" +msgstr "Pause" + +#: ../src/empathy-debug-dialog.c:1025 +msgid "Level " +msgstr "Nivå " + +#: ../src/empathy-debug-dialog.c:1094 +msgid "Time" +msgstr "Tid" + +#: ../src/empathy-debug-dialog.c:1096 +msgid "Domain" +msgstr "Domene" + +#: ../src/empathy-debug-dialog.c:1098 +msgid "Category" +msgstr "Kategori" + +#: ../src/empathy-debug-dialog.c:1100 +msgid "Level" +msgstr "Nivå" + +#: ../src/empathy-debug-dialog.c:1132 +msgid "" +"The selected connection manager does not support the remote debugging " +"extension." +msgstr "" diff --git a/python/pyempathy/pyempathy.defs b/python/pyempathy/pyempathy.defs index 02c8dad19..ed19c7a96 100644 --- a/python/pyempathy/pyempathy.defs +++ b/python/pyempathy/pyempathy.defs @@ -183,13 +183,6 @@ (gtype-id "EMPATHY_TYPE_TP_ROOMLIST") ) -(define-object TpTube - (in-module "Empathy") - (parent "GObject") - (c-name "EmpathyTpTube") - (gtype-id "EMPATHY_TYPE_TP_TUBE") -) - (define-object TubeHandler (in-module "Empathy") (parent "GObject") @@ -938,6 +931,7 @@ '("gsize" "len") '("gchar*" "format") '("gchar*" "token") + '("gchar*" "filename") ) ) @@ -2691,60 +2685,6 @@ -;; From empathy-tp-tube.h - -(define-function tp_tube_get_type - (c-name "empathy_tp_tube_get_type") - (return-type "GType") -) - -(define-function tp_tube_new - (c-name "empathy_tp_tube_new") - (is-constructor-of "EmpathyTpTube") - (return-type "EmpathyTpTube*") - (parameters - '("TpChannel*" "channel") - ) -) - -(define-function tp_tube_new_stream_tube - (c-name "empathy_tp_tube_new_stream_tube") - (return-type "EmpathyTpTube*") - (parameters - '("EmpathyContact*" "contact") - '("TpSocketAddressType" "type") - '("const-gchar*" "hostname") - '("guint" "port") - '("const-gchar*" "service") - '("GHashTable*" "parameters") - ) -) - -(define-method accept_stream_tube - (of-object "EmpathyTpTube") - (c-name "empathy_tp_tube_accept_stream_tube") - (return-type "none") - (parameters - '("TpSocketAddressType" "type") - '("EmpathyTpTubeAcceptStreamTubeCb*" "callback") - '("gpointer" "user_data") - ) -) - -(define-method call_when_ready - (of-object "EmpathyTpTube") - (c-name "empathy_tp_tube_call_when_ready") - (return-type "none") - (parameters - '("EmpathyTpTubeReadyCb*" "callback") - '("gpointer" "user_data") - '("GDestroyNotify" "destroy") - '("GObject*" "weak_object") - ) -) - - - ;; From empathy-tube-handler.h (define-function tube_handler_get_type diff --git a/python/pyempathy/pyempathy.override b/python/pyempathy/pyempathy.override index c985be7b6..6f46405a3 100644 --- a/python/pyempathy/pyempathy.override +++ b/python/pyempathy/pyempathy.override @@ -31,7 +31,6 @@ headers #include "empathy-tp-contact-list.h" #include "empathy-tp-file.h" #include "empathy-tp-roomlist.h" -#include "empathy-tp-tube.h" #include "empathy-tube-handler.h" #include "empathy-utils.h" diff --git a/python/pyempathygtk/pyempathygtk.defs b/python/pyempathygtk/pyempathygtk.defs index 291e154d8..cf85c7853 100644 --- a/python/pyempathygtk/pyempathygtk.defs +++ b/python/pyempathygtk/pyempathygtk.defs @@ -118,6 +118,13 @@ (gtype-id "EMPATHY_TYPE_PRESENCE_CHOOSER") ) +(define-object ProfileChooser + (in-module "Empathy") + (parent "GtkComboBox") + (c-name "EmpathyProfileChooser") + (gtype-id "EMPATHY_TYPE_PROFILE_CHOOSER") +) + (define-object SmileyManager (in-module "Empathy") (parent "GObject") @@ -1557,26 +1564,27 @@ ;; From empathy-profile-chooser.h +(define-function profile_chooser_get_type + (c-name "empathy_profile_chooser_get_type") + (return-type "GType") +) + (define-function profile_chooser_new (c-name "empathy_profile_chooser_new") (is-constructor-of "EmpathyProfileChooser") (return-type "GtkWidget*") ) -(define-function profile_chooser_dup_selected +(define-method dup_selected + (of-object "EmpathyProfileChooser") (c-name "empathy_profile_chooser_dup_selected") (return-type "McProfile*") - (parameters - '("GtkWidget*" "widget") - ) ) -(define-function profile_chooser_n_profiles +(define-method n_profiles + (of-object "EmpathyProfileChooser") (c-name "empathy_profile_chooser_n_profiles") (return-type "gint") - (parameters - '("GtkWidget*" "widget") - ) ) @@ -1610,17 +1618,6 @@ (varargs #t) ) -(define-method add_from_pixbuf - (of-object "EmpathySmileyManager") - (c-name "empathy_smiley_manager_add_from_pixbuf") - (return-type "none") - (parameters - '("GdkPixbuf*" "smiley") - '("const-gchar*" "first_str") - ) - (varargs #t) -) - (define-method get_all (of-object "EmpathySmileyManager") (c-name "empathy_smiley_manager_get_all") @@ -1896,6 +1893,15 @@ ) ) +(define-function filename_from_icon_name + (c-name "empathy_filename_from_icon_name") + (return-type "gchar*") + (parameters + '("const-gchar*" "icon_name") + '("GtkIconSize" "icon_size") + ) +) + (define-function text_iter_forward_search (c-name "empathy_text_iter_forward_search") (return-type "gboolean") diff --git a/python/update-binding.sh b/python/update-binding.sh index 1f6e4ae78..854c33159 100755 --- a/python/update-binding.sh +++ b/python/update-binding.sh @@ -36,7 +36,6 @@ python /usr/share/pygobject/2.0/codegen/h2def.py \ empathy-tp-contact-list.h \ empathy-tp-file.h \ empathy-tp-roomlist.h \ - empathy-tp-tube.h \ empathy-tube-handler.h \ empathy-types.h \ empathy-utils.h \ diff --git a/release.py b/release.py index 9d20d1ab6..13fa386b2 100755 --- a/release.py +++ b/release.py @@ -161,6 +161,16 @@ class Project: translations += format % (lang, authors) return translations + def get_bug_author(self, bug_number): + cmd = 'git log %s.. | grep -B 20 "#%s"' \ + ' | tac | grep ^Author: | head -1' \ + % (self.last_tag, bug_number) + line = self.exec_cmd (cmd) + p1 = line.find(" ") + p2 = line.find("<") + + return line[p1:p2].strip() + def get_bugs(self): commit_str = self.exec_cmd('git show %s' % (self.last_tag)) for line in commit_str.splitlines(): @@ -196,7 +206,11 @@ class Project: for row in reader: bug_number = row[col_bug_id] description = row[col_description] - bugs += ' - Fixed #%s, %s\n' % (bug_number, description) + author = self.get_bug_author(bug_number) + bugs += ' - Fixed #%s, %s' % (bug_number, description) + if author != '': + bugs += ' (%s)' % (author) + bugs += '\n' return bugs def generate_news(self): diff --git a/src/Makefile.am b/src/Makefile.am index db2117986..dbcd6d43d 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -6,7 +6,8 @@ AM_CPPFLAGS = \ $(EMPATHY_CFLAGS) \ $(LIBNOTIFY_CFLAGS) \ $(LIBCHAMPLAIN_CFLAGS) \ - $(DISABLE_DEPRECATED) + $(DISABLE_DEPRECATED) \ + $(WEBKIT_CFLAGS) \ $(WARN_CFLAGS) LDADD = \ @@ -15,7 +16,8 @@ LDADD = \ $(top_builddir)/extensions/libemp-extensions.la \ $(LIBNOTIFY_LIBS) \ $(EMPATHY_LIBS) \ - $(LIBCHAMPLAIN_LIBS) + $(LIBCHAMPLAIN_LIBS) \ + $(WEBKIT_LIBS) bin_PROGRAMS = \ empathy \ @@ -75,12 +77,22 @@ ui_DATA = \ empathy-preferences.ui \ empathy-status-icon.ui +EXTRA_DIST = \ + $(autostart_DATA) \ + $(ui_DATA) + if HAVE_LIBCHAMPLAIN empathy_SOURCES += \ - empathy-map-view.c empathy-map-view.h + empathy-map-view.c \ + empathy-map-view.h ui_DATA += \ empathy-map-view.ui +else +EXTRA_DIST += \ + empathy-map-view.c \ + empathy-map-view.h \ + empathy-map-view.ui endif dist_man_MANS = \ @@ -104,9 +116,5 @@ dist_man_MANS = \ --vtail " { 0, NULL, NULL }\n };\n etype = g_@type@_register_static (\"@EnumName@\", values);\n }\n return etype;\n}\n" \ $< > $@ -EXTRA_DIST = \ - $(autostart_DATA) \ - $(ui_DATA) - CLEANFILES = $(BUILT_SOURCES) diff --git a/src/empathy-accounts-dialog.c b/src/empathy-accounts-dialog.c index e311ac637..1dcde458f 100644 --- a/src/empathy-accounts-dialog.c +++ b/src/empathy-accounts-dialog.c @@ -72,7 +72,8 @@ typedef struct { GtkWidget *hbox_type; GtkWidget *button_create; GtkWidget *button_back; - GtkWidget *checkbutton_register; + GtkWidget *radiobutton_reuse; + GtkWidget *radiobutton_register; GtkWidget *image_type; GtkWidget *label_name; @@ -183,7 +184,8 @@ accounts_dialog_update_account (EmpathyAccountsDialog *dialog, accounts_dialog_model_select_first (dialog); return; } - if (empathy_profile_chooser_n_profiles (dialog->combobox_profile) > 0) { + if (empathy_profile_chooser_n_profiles ( + EMPATHY_PROFILE_CHOOSER (dialog->combobox_profile)) > 0) { /* We have no account configured but we have some * profiles instsalled. The user obviously wants to add * an account. Click on the Add button for him. */ @@ -819,7 +821,8 @@ accounts_dialog_button_create_clicked_cb (GtkWidget *button, gchar *str; McProfileCapabilityFlags cap; - profile = empathy_profile_chooser_dup_selected (dialog->combobox_profile); + profile = empathy_profile_chooser_dup_selected ( + EMPATHY_PROFILE_CHOOSER (dialog->combobox_profile)); /* Create account */ account = mc_account_create (profile); @@ -840,8 +843,8 @@ accounts_dialog_button_create_clicked_cb (GtkWidget *button, if (cap & MC_PROFILE_CAPABILITY_REGISTRATION_UI) { gboolean active; - active = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (dialog->checkbutton_register)); - if (!active) { + active = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (dialog->radiobutton_register)); + if (active) { mc_account_set_param_boolean (account, "register", TRUE); } } @@ -870,13 +873,16 @@ accounts_dialog_profile_changed_cb (GtkWidget *widget, McProfile *profile; McProfileCapabilityFlags cap; - profile = empathy_profile_chooser_dup_selected (dialog->combobox_profile); + profile = empathy_profile_chooser_dup_selected ( + EMPATHY_PROFILE_CHOOSER (dialog->combobox_profile)); cap = mc_profile_get_capabilities (profile); if (cap & MC_PROFILE_CAPABILITY_REGISTRATION_UI) { - gtk_widget_show (dialog->checkbutton_register); + gtk_widget_show (dialog->radiobutton_register); + gtk_widget_show (dialog->radiobutton_reuse); } else { - gtk_widget_hide (dialog->checkbutton_register); + gtk_widget_hide (dialog->radiobutton_register); + gtk_widget_hide (dialog->radiobutton_reuse); } g_object_unref (profile); } @@ -907,8 +913,8 @@ accounts_dialog_button_add_clicked_cb (GtkWidget *button, gtk_widget_hide (dialog->button_back); } - accounts_dialog_profile_changed_cb (dialog->checkbutton_register, dialog); - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (dialog->checkbutton_register), + accounts_dialog_profile_changed_cb (dialog->radiobutton_register, dialog); + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (dialog->radiobutton_reuse), TRUE); gtk_combo_box_set_active (GTK_COMBO_BOX (dialog->combobox_profile), 0); gtk_widget_grab_focus (dialog->combobox_profile); @@ -1068,7 +1074,8 @@ empathy_accounts_dialog_show (GtkWindow *parent, "hbox_type", &dialog->hbox_type, "button_create", &dialog->button_create, "button_back", &dialog->button_back, - "checkbutton_register", &dialog->checkbutton_register, + "radiobutton_reuse", &dialog->radiobutton_reuse, + "radiobutton_register", &dialog->radiobutton_register, "image_type", &dialog->image_type, "label_name", &dialog->label_name, "button_add", &dialog->button_add, diff --git a/src/empathy-accounts-dialog.ui b/src/empathy-accounts-dialog.ui index 49862d853..e19bcf7fe 100644 --- a/src/empathy-accounts-dialog.ui +++ b/src/empathy-accounts-dialog.ui @@ -255,14 +255,38 @@ </packing> </child> <child> - <object class="GtkCheckButton" id="checkbutton_register"> - <property name="label" translatable="yes">I already have an account I want to use</property> + <object class="GtkVBox" id="vbox2"> <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="receives_default">False</property> - <property name="use_underline">True</property> - <property name="active">True</property> - <property name="draw_indicator">True</property> + <property name="orientation">vertical</property> + <child> + <object class="GtkRadioButton" id="radiobutton_reuse"> + <property name="label" translatable="yes">_Reuse an existing account</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">False</property> + <property name="use_underline">True</property> + <property name="active">True</property> + <property name="draw_indicator">True</property> + </object> + <packing> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkRadioButton" id="radiobutton_register"> + <property name="label" translatable="yes">_Create a new account</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">False</property> + <property name="use_underline">True</property> + <property name="active">True</property> + <property name="draw_indicator">True</property> + <property name="group">radiobutton_reuse</property> + </object> + <packing> + <property name="position">1</property> + </packing> + </child> </object> <packing> <property name="position">2</property> @@ -273,6 +297,21 @@ <property name="visible">True</property> <property name="spacing">6</property> <child> + <object class="GtkButton" id="button_back"> + <property name="label">gtk-cancel</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">False</property> + <property name="use_stock">True</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="pack_type">end</property> + <property name="position">1</property> + </packing> + </child> + <child> <object class="GtkButton" id="button_create"> <property name="visible">True</property> <property name="can_focus">True</property> @@ -318,21 +357,6 @@ <property name="expand">False</property> <property name="fill">False</property> <property name="pack_type">end</property> - <property name="position">1</property> - </packing> - </child> - <child> - <object class="GtkButton" id="button_back"> - <property name="label">gtk-cancel</property> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="receives_default">False</property> - <property name="use_stock">True</property> - </object> - <packing> - <property name="expand">False</property> - <property name="fill">False</property> - <property name="pack_type">end</property> <property name="position">0</property> </packing> </child> @@ -351,7 +375,7 @@ <child type="label"> <object class="GtkLabel" id="label643"> <property name="visible">True</property> - <property name="label" translatable="yes"><b>New Account</b></property> + <property name="label" translatable="yes"><b>Add Account</b></property> <property name="use_markup">True</property> </object> </child> diff --git a/src/empathy-call-window.c b/src/empathy-call-window.c index 08c0e7ea2..0ce80c97c 100644 --- a/src/empathy-call-window.c +++ b/src/empathy-call-window.c @@ -32,6 +32,7 @@ #include <telepathy-farsight/channel.h> #include <libempathy/empathy-tp-contact-factory.h> +#include <libempathy/empathy-call-factory.h> #include <libempathy/empathy-utils.h> #include <libempathy-gtk/empathy-avatar-image.h> #include <libempathy-gtk/empathy-video-widget.h> @@ -59,6 +60,8 @@ #define REMOTE_CONTACT_AVATAR_DEFAULT_WIDTH EMPATHY_VIDEO_WIDGET_DEFAULT_HEIGHT #define REMOTE_CONTACT_AVATAR_DEFAULT_HEIGHT EMPATHY_VIDEO_WIDGET_DEFAULT_HEIGHT +#define CONNECTING_STATUS_TEXT _("Connecting...") + G_DEFINE_TYPE(EmpathyCallWindow, empathy_call_window, GTK_TYPE_WINDOW) /* signal enum */ @@ -95,24 +98,35 @@ struct _EmpathyCallWindowPriv GtkWidget *sidebar_button; GtkWidget *statusbar; GtkWidget *volume_button; + GtkWidget *redial_button; GtkWidget *mic_button; GtkWidget *camera_button; GtkWidget *toolbar; GtkWidget *pane; GtkAction *send_video; + GtkAction *redial; GtkAction *menu_fullscreen; + /* The frames and boxes that contain self and remote avatar and video + input/output. When we redial, we destroy and re-create the boxes */ + GtkWidget *remote_user_output_frame; + GtkWidget *self_user_output_frame; + GtkWidget *remote_user_output_hbox; + GtkWidget *self_user_output_hbox; + /* We keep a reference on the hbox which contains the main content so we can easilly repack everything when toggling fullscreen */ GtkWidget *content_hbox; - /* This vbox is contained in the content_hbox. When toggling fullscreen, + /* This vbox is contained in the content_hbox and it contains the + self_user_output_frame and the sidebar button. When toggling fullscreen, it needs to be repacked. We keep a reference on it for easier access. */ GtkWidget *vbox; gulong video_output_motion_handler_id; gdouble volume; + GtkWidget *volume_progress_bar; GtkAdjustment *audio_input_adj; GtkWidget *dtmf_panel; @@ -147,6 +161,10 @@ struct _EmpathyCallWindowPriv gboolean sidebar_was_visible_before_fs; gint original_width_before_fs; gint original_height_before_fs; + + /* Used to indicate if we are currently redialing. If we are, as soon as the + channel is closed, the call is automatically re-initiated.*/ + gboolean redialing; }; #define GET_PRIV(o) \ @@ -203,6 +221,11 @@ static gboolean empathy_call_window_video_output_motion_notify (GtkWidget *widge static void empathy_call_window_video_menu_popup (EmpathyCallWindow *window, guint button); +static void empathy_call_window_redial_cb (gpointer object, + EmpathyCallWindow *window); + +static void empathy_call_window_restart_call (EmpathyCallWindow *window); + static void empathy_call_window_status_message (EmpathyCallWindow *window, gchar *message); @@ -467,19 +490,20 @@ empathy_call_window_mic_volume_changed_cb (GtkAdjustment *adj, static void empathy_call_window_audio_input_level_changed_cb (EmpathyGstAudioSrc *src, - gdouble level, GtkProgressBar *bar) + gdouble level, EmpathyCallWindow *window) { gdouble value; + EmpathyCallWindowPriv *priv = GET_PRIV (window); value = CLAMP (pow (10, level / 20), 0.0, 1.0); - gtk_progress_bar_set_fraction (GTK_PROGRESS_BAR (bar), value); + gtk_progress_bar_set_fraction (GTK_PROGRESS_BAR (priv->volume_progress_bar), value); } static GtkWidget * empathy_call_window_create_audio_input (EmpathyCallWindow *self) { EmpathyCallWindowPriv *priv = GET_PRIV (self); - GtkWidget *hbox, *vbox, *scale, *progress, *label; + GtkWidget *hbox, *vbox, *scale, *label; GtkAdjustment *adj; hbox = gtk_hbox_new (TRUE, 3); @@ -502,17 +526,97 @@ empathy_call_window_create_audio_input (EmpathyCallWindow *self) gtk_box_pack_start (GTK_BOX (vbox), scale, TRUE, TRUE, 3); gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 3); - progress = gtk_progress_bar_new (); - gtk_progress_bar_set_orientation (GTK_PROGRESS_BAR (progress), - GTK_PROGRESS_BOTTOM_TO_TOP); - gtk_progress_bar_set_fraction (GTK_PROGRESS_BAR (progress), 0); + priv->volume_progress_bar = gtk_progress_bar_new (); + gtk_progress_bar_set_orientation ( + GTK_PROGRESS_BAR (priv->volume_progress_bar), GTK_PROGRESS_BOTTOM_TO_TOP); + gtk_progress_bar_set_fraction (GTK_PROGRESS_BAR (priv->volume_progress_bar), + 0); + + gtk_box_pack_start (GTK_BOX (hbox), priv->volume_progress_bar, FALSE, FALSE, + 3); + + return hbox; +} + +static void +empathy_call_window_setup_remote_frame (GstBus *bus, EmpathyCallWindow *self) +{ + EmpathyCallWindowPriv *priv = GET_PRIV (self); + + /* Initializing all the content (UI and output gst elements) related to the + remote contact */ + priv->remote_user_output_hbox = gtk_hbox_new (FALSE, 0); + + priv->remote_user_avatar_widget = gtk_image_new (); + gtk_box_pack_start (GTK_BOX (priv->remote_user_output_hbox), + priv->remote_user_avatar_widget, TRUE, TRUE, 0); + + priv->video_output = empathy_video_widget_new (bus); + gtk_box_pack_start (GTK_BOX (priv->remote_user_output_hbox), + priv->video_output, TRUE, TRUE, 0); + + gtk_widget_add_events (priv->video_output, + GDK_BUTTON_PRESS_MASK | GDK_POINTER_MOTION_MASK); + g_signal_connect (G_OBJECT (priv->video_output), "button-press-event", + G_CALLBACK (empathy_call_window_video_button_press_cb), self); + + gtk_container_add (GTK_CONTAINER (priv->remote_user_output_frame), + priv->remote_user_output_hbox); + + priv->audio_output = empathy_audio_sink_new (); + gst_object_ref (priv->audio_output); + gst_object_sink (priv->audio_output); +} + +static void +empathy_call_window_setup_self_frame (GstBus *bus, EmpathyCallWindow *self) +{ + EmpathyCallWindowPriv *priv = GET_PRIV (self); + + /* Initializing all the content (UI and input gst elements) related to the + self contact*/ + priv->video_tee = gst_element_factory_make ("tee", NULL); + gst_object_ref (priv->video_tee); + gst_object_sink (priv->video_tee); + + priv->self_user_output_hbox = gtk_hbox_new (FALSE, 0); + + priv->self_user_avatar_widget = gtk_image_new (); + gtk_box_pack_start (GTK_BOX (priv->self_user_output_hbox), + priv->self_user_avatar_widget, TRUE, TRUE, 0); + + priv->video_preview = empathy_video_widget_new_with_size (bus, + SELF_VIDEO_SECTION_WIDTH, SELF_VIDEO_SECTION_HEIGTH); + g_object_set (priv->video_preview, "sync", FALSE, "async", TRUE, NULL); + gtk_box_pack_start (GTK_BOX (priv->self_user_output_hbox), + priv->video_preview, TRUE, TRUE, 0); + + gtk_container_add (GTK_CONTAINER (priv->self_user_output_frame), + priv->self_user_output_hbox); + + priv->video_input = empathy_video_src_new (); + gst_object_ref (priv->video_input); + gst_object_sink (priv->video_input); + + priv->audio_input = empathy_audio_src_new (); + gst_object_ref (priv->audio_input); + gst_object_sink (priv->audio_input); g_signal_connect (priv->audio_input, "peak-level-changed", - G_CALLBACK (empathy_call_window_audio_input_level_changed_cb), progress); + G_CALLBACK (empathy_call_window_audio_input_level_changed_cb), self); +} - gtk_box_pack_start (GTK_BOX (hbox), progress, FALSE, FALSE, 3); +static void +empathy_call_window_setup_video_preview (EmpathyCallWindow *window) +{ + EmpathyCallWindowPriv *priv = GET_PRIV (window); - return hbox; + GstElement *preview = empathy_video_widget_get_element ( + EMPATHY_VIDEO_WIDGET (priv->video_preview)); + gst_bin_add_many (GST_BIN (priv->pipeline), priv->video_input, + priv->video_tee, preview, NULL); + gst_element_link_many (priv->video_input, priv->video_tee, + preview, NULL); } static void @@ -524,8 +628,6 @@ empathy_call_window_init (EmpathyCallWindow *self) GtkWidget *h; GtkWidget *arrow; GtkWidget *page; - GtkWidget *remote_user_output_frame, *self_user_output_frame; - GtkWidget *remote_user_output_hbox, *self_user_output_hbox; GstBus *bus; gchar *filename; @@ -534,10 +636,12 @@ empathy_call_window_init (EmpathyCallWindow *self) "call_window_vbox", &top_vbox, "pane", &priv->pane, "statusbar", &priv->statusbar, + "redial", &priv->redial_button, "microphone", &priv->mic_button, "camera", &priv->camera_button, "toolbar", &priv->toolbar, "send_video", &priv->send_video, + "menuredial", &priv->redial, "ui_manager", &priv->ui_manager, "menufullscreen", &priv->menu_fullscreen, NULL); @@ -545,6 +649,8 @@ empathy_call_window_init (EmpathyCallWindow *self) empathy_builder_connect (gui, self, "menuhangup", "activate", empathy_call_window_hangup_cb, "hangup", "clicked", empathy_call_window_hangup_cb, + "menuredial", "activate", empathy_call_window_redial_cb, + "redial", "clicked", empathy_call_window_redial_cb, "microphone", "toggled", empathy_call_window_mic_toggled_cb, "camera", "toggled", empathy_call_window_camera_toggled_cb, "send_video", "toggled", empathy_call_window_send_video_toggled_cb, @@ -558,80 +664,33 @@ empathy_call_window_init (EmpathyCallWindow *self) empathy_call_window_setup_toolbar (self); - priv->pipeline = gst_pipeline_new (NULL); - priv->content_hbox = gtk_hbox_new (FALSE, CONTENT_HBOX_SPACING); gtk_container_set_border_width (GTK_CONTAINER (priv->content_hbox), CONTENT_HBOX_BORDER_WIDTH); gtk_paned_pack1 (GTK_PANED (priv->pane), priv->content_hbox, TRUE, FALSE); + priv->pipeline = gst_pipeline_new (NULL); bus = gst_pipeline_get_bus (GST_PIPELINE (priv->pipeline)); - gst_bus_add_watch (bus, empathy_call_window_bus_message, self); - remote_user_output_frame = gtk_frame_new (NULL); - gtk_widget_set_size_request (remote_user_output_frame, + priv->remote_user_output_frame = gtk_frame_new (NULL); + gtk_widget_set_size_request (priv->remote_user_output_frame, EMPATHY_VIDEO_WIDGET_DEFAULT_WIDTH, EMPATHY_VIDEO_WIDGET_DEFAULT_HEIGHT); - remote_user_output_hbox = gtk_hbox_new (FALSE, 0); - - priv->remote_user_avatar_widget = gtk_image_new (); - gtk_box_pack_start (GTK_BOX (remote_user_output_hbox), - priv->remote_user_avatar_widget, TRUE, TRUE, 0); - - priv->video_output = empathy_video_widget_new (bus); - gtk_box_pack_start (GTK_BOX (remote_user_output_hbox), - priv->video_output, TRUE, TRUE, 0); - - gtk_container_add (GTK_CONTAINER (remote_user_output_frame), - remote_user_output_hbox); + gtk_box_pack_start (GTK_BOX (priv->content_hbox), + priv->remote_user_output_frame, TRUE, TRUE, + CONTENT_HBOX_CHILDREN_PACKING_PADDING); + empathy_call_window_setup_remote_frame (bus, self); - gtk_widget_add_events (priv->video_output, - GDK_BUTTON_PRESS_MASK | GDK_POINTER_MOTION_MASK); - g_signal_connect (G_OBJECT (priv->video_output), "button-press-event", - G_CALLBACK (empathy_call_window_video_button_press_cb), self); - gtk_box_pack_start (GTK_BOX (priv->content_hbox), remote_user_output_frame, - TRUE, TRUE, CONTENT_HBOX_CHILDREN_PACKING_PADDING); - - priv->video_tee = gst_element_factory_make ("tee", NULL); - gst_object_ref (priv->video_tee); - gst_object_sink (priv->video_tee); + priv->self_user_output_frame = gtk_frame_new (NULL); + gtk_widget_set_size_request (priv->self_user_output_frame, + SELF_VIDEO_SECTION_WIDTH, SELF_VIDEO_SECTION_HEIGTH); priv->vbox = gtk_vbox_new (FALSE, 3); gtk_box_pack_start (GTK_BOX (priv->content_hbox), priv->vbox, - FALSE, FALSE, CONTENT_HBOX_CHILDREN_PACKING_PADDING); - - self_user_output_frame = gtk_frame_new (NULL); - gtk_widget_set_size_request (self_user_output_frame, SELF_VIDEO_SECTION_WIDTH, - SELF_VIDEO_SECTION_HEIGTH); - self_user_output_hbox = gtk_hbox_new (FALSE, 0); - - priv->self_user_avatar_widget = gtk_image_new (); - gtk_box_pack_start (GTK_BOX (self_user_output_hbox), - priv->self_user_avatar_widget, TRUE, TRUE, 0); - - priv->video_preview = empathy_video_widget_new_with_size (bus, - SELF_VIDEO_SECTION_WIDTH, SELF_VIDEO_SECTION_HEIGTH); - g_object_set (priv->video_preview, "sync", FALSE, "async", TRUE, NULL); - gtk_box_pack_start (GTK_BOX (self_user_output_hbox), priv->video_preview, - TRUE, TRUE, 0); - - gtk_container_add (GTK_CONTAINER (self_user_output_frame), - self_user_output_hbox); - - gtk_box_pack_start (GTK_BOX (priv->vbox), self_user_output_frame, FALSE, + FALSE, FALSE, CONTENT_HBOX_CHILDREN_PACKING_PADDING); + gtk_box_pack_start (GTK_BOX (priv->vbox), priv->self_user_output_frame, FALSE, FALSE, 0); - - priv->video_input = empathy_video_src_new (); - gst_object_ref (priv->video_input); - gst_object_sink (priv->video_input); - - priv->audio_input = empathy_audio_src_new (); - gst_object_ref (priv->audio_input); - gst_object_sink (priv->audio_input); - - priv->audio_output = empathy_audio_sink_new (); - gst_object_ref (priv->audio_output); - gst_object_sink (priv->audio_output); + empathy_call_window_setup_self_frame (bus, self); g_object_unref (bus); @@ -688,7 +747,7 @@ empathy_call_window_init (EmpathyCallWindow *self) g_signal_connect (G_OBJECT (self), "key-press-event", G_CALLBACK (empathy_call_window_key_press_cb), self); - empathy_call_window_status_message (self, _("Connecting...")); + empathy_call_window_status_message (self, CONNECTING_STATUS_TEXT); priv->timer = g_timer_new (); @@ -996,26 +1055,69 @@ empathy_call_window_request_resource_cb (EmpathyCallHandler *handler, return priv->video_input != NULL; } -static void +static gboolean +empathy_call_window_reset_pipeline (EmpathyCallWindow *self) +{ + GstStateChangeReturn state_change_return; + EmpathyCallWindowPriv *priv = GET_PRIV (self); + + if (priv->pipeline == NULL) + return TRUE; + + state_change_return = gst_element_set_state (priv->pipeline, GST_STATE_NULL); + + if (state_change_return == GST_STATE_CHANGE_SUCCESS || + state_change_return == GST_STATE_CHANGE_NO_PREROLL) + { + priv->liveadder = NULL; + priv->funnel = NULL; + g_object_unref (priv->pipeline); + priv->pipeline = NULL; + + return TRUE; + } + else + { + g_message ("Error: could not destroy pipeline. Closing call window"); + gtk_widget_destroy (GTK_WIDGET (self)); + + return FALSE; + } +} + +static gboolean empathy_call_window_disconnected (EmpathyCallWindow *self) { + gboolean could_disconnect = FALSE; EmpathyCallWindowPriv *priv = GET_PRIV (self); + gboolean could_reset_pipeline = empathy_call_window_reset_pipeline (self); - g_mutex_lock (priv->lock); + if (could_reset_pipeline) + { + g_mutex_lock (priv->lock); - g_timer_stop (priv->timer); + g_timer_stop (priv->timer); - if (priv->timer_id != 0) - g_source_remove (priv->timer_id); - priv->timer_id = 0; + if (priv->timer_id != 0) + g_source_remove (priv->timer_id); + priv->timer_id = 0; - g_mutex_unlock (priv->lock); + g_mutex_unlock (priv->lock); - empathy_call_window_status_message (self, _("Disconnected")); + empathy_call_window_status_message (self, _("Disconnected")); + + gtk_action_set_sensitive (priv->redial, TRUE); + gtk_widget_set_sensitive (priv->redial_button, TRUE); + gtk_widget_set_sensitive (priv->camera_button, FALSE); + gtk_action_set_sensitive (priv->send_video, FALSE); + priv->sending_video = FALSE; + priv->connected = FALSE; + priv->call_started = FALSE; + + could_disconnect = TRUE; + } - gtk_widget_set_sensitive (priv->camera_button, FALSE); - gtk_action_set_sensitive (priv->send_video, FALSE); - priv->sending_video = FALSE; + return could_disconnect; } @@ -1023,8 +1125,13 @@ static void empathy_call_window_channel_closed_cb (TfChannel *channel, gpointer user_data) { EmpathyCallWindow *self = EMPATHY_CALL_WINDOW (user_data); + EmpathyCallWindowPriv *priv = GET_PRIV (self); - empathy_call_window_disconnected (self); + if (empathy_call_window_disconnected (self) && priv->redialing) + { + empathy_call_window_restart_call (self); + priv->redialing = FALSE; + } } /* Called with global lock held */ @@ -1119,6 +1226,9 @@ empathy_call_window_connected (gpointer user_data) gtk_action_set_sensitive (priv->send_video, TRUE); } + gtk_action_set_sensitive (priv->redial, FALSE); + gtk_widget_set_sensitive (priv->redial_button, FALSE); + g_object_unref (call); g_mutex_lock (priv->lock); @@ -1320,7 +1430,6 @@ empathy_call_window_bus_message (GstBus *bus, GstMessage *message, } else { - gst_element_set_state (priv->pipeline, GST_STATE_NULL); empathy_call_window_disconnected (self); } g_error_free (error); @@ -1337,7 +1446,6 @@ static void empathy_call_window_realized_cb (GtkWidget *widget, EmpathyCallWindow *window) { EmpathyCallWindowPriv *priv = GET_PRIV (window); - GstElement *preview; g_signal_connect (priv->handler, "conference-added", G_CALLBACK (empathy_call_window_conference_added_cb), window); @@ -1350,14 +1458,7 @@ empathy_call_window_realized_cb (GtkWidget *widget, EmpathyCallWindow *window) g_signal_connect (priv->handler, "sink-pad-added", G_CALLBACK (empathy_call_window_sink_added_cb), window); - - preview = empathy_video_widget_get_element ( - EMPATHY_VIDEO_WIDGET (priv->video_preview)); - - gst_bin_add_many (GST_BIN (priv->pipeline), priv->video_input, - priv->video_tee, preview, NULL); - gst_element_link_many (priv->video_input, priv->video_tee, - preview, NULL); + empathy_call_window_setup_video_preview (window); gst_element_set_state (priv->pipeline, GST_STATE_PAUSED); } @@ -1613,10 +1714,53 @@ static void empathy_call_window_hangup_cb (gpointer object, EmpathyCallWindow *window) { + if (empathy_call_window_disconnected (window)) + gtk_widget_destroy (GTK_WIDGET (window)); +} + +static void +empathy_call_window_restart_call (EmpathyCallWindow *window) +{ + GstBus *bus; EmpathyCallWindowPriv *priv = GET_PRIV (window); - gst_element_set_state (priv->pipeline, GST_STATE_NULL); - gtk_widget_destroy (GTK_WIDGET (window)); + gtk_widget_destroy (priv->remote_user_output_hbox); + gtk_widget_destroy (priv->self_user_output_hbox); + + priv->pipeline = gst_pipeline_new (NULL); + bus = gst_pipeline_get_bus (GST_PIPELINE (priv->pipeline)); + gst_bus_add_watch (bus, empathy_call_window_bus_message, window); + + empathy_call_window_setup_remote_frame (bus, window); + empathy_call_window_setup_self_frame (bus, window); + empathy_call_window_setup_video_preview (window); + + g_object_unref (bus); + + gtk_widget_show_all (priv->content_hbox); + + empathy_call_window_status_message (window, CONNECTING_STATUS_TEXT); + priv->call_started = TRUE; + empathy_call_handler_start_call (priv->handler); + gst_element_set_state (priv->pipeline, GST_STATE_PLAYING); + + gtk_action_set_sensitive (priv->redial, FALSE); + gtk_widget_set_sensitive (priv->redial_button, FALSE); +} + +static void +empathy_call_window_redial_cb (gpointer object, + EmpathyCallWindow *window) +{ + EmpathyCallWindowPriv *priv = GET_PRIV (window); + + if (priv->connected) + priv->redialing = TRUE; + + empathy_call_handler_stop_call (priv->handler); + + if (!priv->connected) + empathy_call_window_restart_call (window); } static void @@ -1678,7 +1822,6 @@ empathy_call_window_video_output_motion_notify (GtkWidget *widget, empathy_call_window_fullscreen_show_popup (priv->fullscreen); return TRUE; } - return FALSE; } diff --git a/src/empathy-call-window.ui b/src/empathy-call-window.ui index a0e1e1304..3e67c7670 100644 --- a/src/empathy-call-window.ui +++ b/src/empathy-call-window.ui @@ -25,6 +25,14 @@ </object> </child> <child> + <object class="GtkAction" id="menuredial"> + <property name="stock_id">gtk-refresh</property> + <property name="name">menuredial</property> + <property name="label" translatable="yes">Redial</property> + <property name="sensitive">False</property> + </object> + </child> + <child> <object class="GtkAction" id="view"> <property name="name">view</property> <property name="label" translatable="yes">_View</property> @@ -50,6 +58,7 @@ <menu action="call"> <menuitem action="send_video"/> <menuitem action="menuhangup"/> + <menuitem action="menuredial"/> </menu> <menu action="view"> <menuitem action="show_preview"/> @@ -86,6 +95,18 @@ </packing> </child> <child> + <object class="GtkToolButton" id="redial"> + <property name="visible">True</property> + <property name="is_important">True</property> + <property name="label" translatable="yes">Redial</property> + <property name="stock_id">gtk-refresh</property> + <property name="sensitive">False</property> + </object> + <packing> + <property name="homogeneous">True</property> + </packing> + </child> + <child> <object class="GtkSeparatorToolItem" id="toolbutton1"> <property name="visible">True</property> </object> diff --git a/src/empathy-chat-window.c b/src/empathy-chat-window.c index bf02c3cc6..9c2dbc490 100644 --- a/src/empathy-chat-window.c +++ b/src/empathy-chat-window.c @@ -382,14 +382,33 @@ chat_window_update (EmpathyChatWindow *window) } 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 (EmpathyChat *chat) { EmpathyChatWindow *window; EmpathyChatWindowPriv *priv; EmpathyContact *remote_contact; const gchar *name; + const gchar *id; McAccount *account; const gchar *subject; + const gchar *status = NULL; GtkWidget *widget; GString *tooltip; gchar *markup; @@ -431,29 +450,28 @@ chat_window_update_chat_tab (EmpathyChat *chat) tooltip = g_string_new (NULL); if (remote_contact) { - markup = g_markup_printf_escaped ("<b>%s</b><small> (%s)</small>\n%s", - empathy_contact_get_id (remote_contact), - mc_account_get_display_name (account), - empathy_contact_get_status (remote_contact)); - g_string_append (tooltip, markup); - g_free (markup); + id = empathy_contact_get_id (remote_contact); + status = empathy_contact_get_presence_message (remote_contact); + } else { + id = name; } - else { - markup = g_markup_printf_escaped ("<b>%s</b><small> (%s)</small>", name, - mc_account_get_display_name (account)); - g_string_append (tooltip, markup); - g_free (markup); + + append_markup_printf (tooltip, + "<b>%s</b><small> (%s)</small>", + id, + mc_account_get_display_name (account)); + + if (!EMP_STR_EMPTY (status)) { + append_markup_printf (tooltip, "\n<i>%s</i>", status); } if (subject) { - markup = g_markup_printf_escaped ("\n<b>%s</b> %s", _("Topic:"), subject); - g_string_append (tooltip, markup); - g_free (markup); + append_markup_printf (tooltip, "\n<b>%s</b> %s", + _("Topic:"), subject); } + if (g_list_find (priv->chats_composing, chat)) { - markup = g_markup_printf_escaped ("\n%s", _("Typing a message.")); - g_string_append (tooltip, markup); - g_free (markup); + append_markup_printf (tooltip, "\n%s", _("Typing a message.")); } markup = g_string_free (tooltip, FALSE); diff --git a/src/empathy-map-view.c b/src/empathy-map-view.c index b8a32885c..05f5291d2 100644 --- a/src/empathy-map-view.c +++ b/src/empathy-map-view.c @@ -40,6 +40,7 @@ #include <libempathy-gtk/empathy-ui-utils.h> #include "empathy-map-view.h" +#include "ephy-spinner.h" #define DEBUG_FLAG EMPATHY_DEBUG_LOCATION #include <libempathy/empathy-debug.h> @@ -50,6 +51,7 @@ typedef struct { GtkWidget *window; GtkWidget *zoom_in; GtkWidget *zoom_out; + GtkWidget *throbber; ChamplainView *map_view; ChamplainLayer *layer; } EmpathyMapView; @@ -68,6 +70,20 @@ static void map_view_contact_location_notify (GObject *gobject, GParamSpec *arg1, gpointer user_data); +static void +map_view_state_changed (ChamplainView *view, + GParamSpec *gobject, + EmpathyMapView *window) +{ + ChamplainState state; + + g_object_get (G_OBJECT (view), "state", &state, NULL); + if (state == CHAMPLAIN_STATE_LOADING) + ephy_spinner_start (EPHY_SPINNER (window->throbber)); + else + ephy_spinner_stop (EPHY_SPINNER (window->throbber)); +} + GtkWidget * empathy_map_view_show (void) { @@ -75,6 +91,7 @@ empathy_map_view_show (void) GtkBuilder *gui; GtkWidget *sw; GtkWidget *embed; + GtkWidget *throbber_holder; gchar *filename; GtkTreeModel *model; EmpathyContactList *list_iface; @@ -95,6 +112,7 @@ empathy_map_view_show (void) "zoom_in", &window->zoom_in, "zoom_out", &window->zoom_out, "map_scrolledwindow", &sw, + "throbber", &throbber_holder, NULL); g_free (filename); @@ -115,6 +133,12 @@ empathy_map_view_show (void) empathy_contact_list_store_set_show_avatars (list_store, TRUE); g_object_unref (list_iface); + window->throbber = ephy_spinner_new (); + ephy_spinner_set_size (EPHY_SPINNER (window->throbber), + GTK_ICON_SIZE_LARGE_TOOLBAR); + gtk_widget_show (window->throbber); + gtk_container_add (GTK_CONTAINER (throbber_holder), window->throbber); + window->list_store = list_store; /* Set up map view */ @@ -131,6 +155,9 @@ empathy_map_view_show (void) window->layer = g_object_ref (champlain_layer_new ()); champlain_view_add_layer (window->map_view, window->layer); + g_signal_connect (window->map_view, "notify::state", + G_CALLBACK (map_view_state_changed), window); + /* Set up contact list. */ model = GTK_TREE_MODEL (window->list_store); gtk_tree_model_foreach (model, map_view_contacts_foreach, window); @@ -145,7 +172,7 @@ map_view_destroy_cb (GtkWidget *widget, { GList *item; - item = clutter_container_get_children (window->layer); + item = clutter_container_get_children (CLUTTER_CONTAINER (window->layer)); while (item != NULL) { EmpathyContact *contact; diff --git a/src/empathy-map-view.ui b/src/empathy-map-view.ui index f1140399b..545136d4d 100644 --- a/src/empathy-map-view.ui +++ b/src/empathy-map-view.ui @@ -34,6 +34,33 @@ <property name="homogeneous">True</property> </packing> </child> + <child> + <object class="GtkToolItem" id="toolbutton1"> + <property name="visible">True</property> + <child> + <object class="GtkAlignment" id="alignment1"> + <property name="visible">True</property> + <child> + <placeholder/> + </child> + </object> + </child> + </object> + <packing> + <property name="expand">True</property> + </packing> + </child> + <child> + <object class="GtkToolItem" id="throbber"> + <property name="visible">True</property> + <child> + <placeholder/> + </child> + </object> + <packing> + <property name="expand">False</property> + </packing> + </child> </object> <packing> <property name="expand">False</property> diff --git a/src/empathy-preferences.c b/src/empathy-preferences.c index 406db4c9f..4c88db675 100644 --- a/src/empathy-preferences.c +++ b/src/empathy-preferences.c @@ -38,6 +38,10 @@ #include <libempathy-gtk/empathy-contact-list-store.h> #include <libempathy-gtk/empathy-gtk-enum-types.h> +#ifdef HAVE_WEBKIT +#include <libempathy-gtk/empathy-theme-adium.h> +#endif + #include "empathy-preferences.h" typedef struct { @@ -49,6 +53,9 @@ typedef struct { GtkWidget *checkbutton_compact_contact_list; GtkWidget *checkbutton_show_smileys; GtkWidget *combobox_chat_theme; + GtkWidget *hbox_adium_theme; + GtkWidget *filechooserbutton_adium_theme; + GtkWidget *label_invalid_adium_theme; GtkWidget *checkbutton_separate_chat_windows; GtkWidget *checkbutton_autoconnect; GtkWidget *radiobutton_contact_list_sort_by_name; @@ -89,19 +96,13 @@ static gboolean preferences_languages_load_foreach (GtkTreeModel static void preferences_languages_cell_toggled_cb (GtkCellRendererToggle *cell, gchar *path_string, EmpathyPreferences *preferences); -static void preferences_themes_setup (EmpathyPreferences *preferences); static void preferences_widget_sync_bool (const gchar *key, GtkWidget *widget); static void preferences_widget_sync_string (const gchar *key, GtkWidget *widget); -static void preferences_widget_sync_string_combo (const gchar *key, - GtkWidget *widget); static void preferences_notify_string_cb (EmpathyConf *conf, const gchar *key, gpointer user_data); -static void preferences_notify_string_combo_cb (EmpathyConf *conf, - const gchar *key, - gpointer user_data); static void preferences_notify_bool_cb (EmpathyConf *conf, const gchar *key, gpointer user_data); @@ -114,9 +115,6 @@ static void preferences_hookup_toggle_button (EmpathyPreferences static void preferences_hookup_radio_button (EmpathyPreferences *preferences, const gchar *key, GtkWidget *widget); -static void preferences_hookup_string_combo (EmpathyPreferences *preferences, - const gchar *key, - GtkWidget *widget); static void preferences_hookup_sensitivity (EmpathyPreferences *preferences, const gchar *key, GtkWidget *widget); @@ -124,8 +122,6 @@ static void preferences_toggle_button_toggled_cb (GtkWidget gpointer user_data); static void preferences_radio_button_toggled_cb (GtkWidget *button, gpointer user_data); -static void preferences_string_combo_changed_cb (GtkWidget *button, - gpointer user_data); static void preferences_destroy_cb (GtkWidget *widget, EmpathyPreferences *preferences); static void preferences_response_cb (GtkWidget *widget, @@ -241,10 +237,6 @@ preferences_setup_widgets (EmpathyPreferences *preferences) EMPATHY_PREFS_CHAT_SHOW_SMILEYS, preferences->checkbutton_show_smileys); - preferences_hookup_string_combo (preferences, - EMPATHY_PREFS_CHAT_THEME, - preferences->combobox_chat_theme); - preferences_hookup_radio_button (preferences, EMPATHY_PREFS_CONTACTS_SORT_CRITERIUM, preferences->radiobutton_contact_list_sort_by_name); @@ -639,43 +631,6 @@ preferences_languages_cell_toggled_cb (GtkCellRendererToggle *cell, } static void -preferences_themes_setup (EmpathyPreferences *preferences) -{ - GtkComboBox *combo; - GtkCellLayout *cell_layout; - GtkCellRenderer *renderer; - GtkListStore *store; - const gchar **themes; - gint i; - - combo = GTK_COMBO_BOX (preferences->combobox_chat_theme); - cell_layout = GTK_CELL_LAYOUT (combo); - - /* Create the model */ - store = gtk_list_store_new (COL_COMBO_COUNT, - G_TYPE_STRING, /* Display name */ - G_TYPE_STRING); /* Theme name */ - - /* Fill the model */ - themes = empathy_theme_manager_get_themes (); - for (i = 0; themes[i]; i += 2) { - gtk_list_store_insert_with_values (store, NULL, -1, - COL_COMBO_VISIBLE_NAME, _(themes[i + 1]), - COL_COMBO_NAME, themes[i], - -1); - } - - /* Add cell renderer */ - renderer = gtk_cell_renderer_text_new (); - gtk_cell_layout_pack_start (cell_layout, renderer, TRUE); - gtk_cell_layout_set_attributes (cell_layout, renderer, - "text", COL_COMBO_VISIBLE_NAME, NULL); - - gtk_combo_box_set_model (combo, GTK_TREE_MODEL (store)); - g_object_unref (store); -} - -static void preferences_widget_sync_bool (const gchar *key, GtkWidget *widget) { gboolean value; @@ -721,48 +676,6 @@ preferences_widget_sync_string (const gchar *key, GtkWidget *widget) } static void -preferences_widget_sync_string_combo (const gchar *key, GtkWidget *widget) -{ - gchar *value; - GtkTreeModel *model; - GtkTreeIter iter; - gboolean found; - - if (!empathy_conf_get_string (empathy_conf_get (), key, &value)) { - return; - } - - model = gtk_combo_box_get_model (GTK_COMBO_BOX (widget)); - - found = FALSE; - if (value && gtk_tree_model_get_iter_first (model, &iter)) { - - do { - gchar *name; - gtk_tree_model_get (model, &iter, - COL_COMBO_NAME, &name, - -1); - - if (strcmp (name, value) == 0) { - found = TRUE; - gtk_combo_box_set_active_iter (GTK_COMBO_BOX (widget), &iter); - } - - g_free (name); - } while (!found && gtk_tree_model_iter_next (model, &iter)); - } - - /* Fallback to the first one. */ - if (!found) { - if (gtk_tree_model_get_iter_first (model, &iter)) { - gtk_combo_box_set_active_iter (GTK_COMBO_BOX (widget), &iter); - } - } - - g_free (value); -} - -static void preferences_notify_string_cb (EmpathyConf *conf, const gchar *key, gpointer user_data) @@ -770,13 +683,6 @@ preferences_notify_string_cb (EmpathyConf *conf, preferences_widget_sync_string (key, user_data); } -static void -preferences_notify_string_combo_cb (EmpathyConf *conf, - const gchar *key, - gpointer user_data) -{ - preferences_widget_sync_string_combo (key, user_data); -} static void preferences_notify_bool_cb (EmpathyConf *conf, @@ -955,32 +861,6 @@ preferences_hookup_radio_button (EmpathyPreferences *preferences, } static void -preferences_hookup_string_combo (EmpathyPreferences *preferences, - const gchar *key, - GtkWidget *widget) -{ - guint id; - - preferences_widget_sync_string_combo (key, widget); - - g_object_set_data_full (G_OBJECT (widget), "key", - g_strdup (key), g_free); - - g_signal_connect (widget, - "changed", - G_CALLBACK (preferences_string_combo_changed_cb), - NULL); - - id = empathy_conf_notify_add (empathy_conf_get (), - key, - preferences_notify_string_combo_cb, - widget); - if (id) { - preferences_add_id (preferences, id); - } -} - -static void preferences_hookup_sensitivity (EmpathyPreferences *preferences, const gchar *key, GtkWidget *widget) @@ -1054,29 +934,216 @@ preferences_radio_button_toggled_cb (GtkWidget *button, empathy_conf_set_string (empathy_conf_get (), key, value); } + static void -preferences_string_combo_changed_cb (GtkWidget *combo, - gpointer user_data) +preferences_theme_adium_update_visibility (EmpathyPreferences *preferences, + const gchar *name) +{ + if (name && strcmp (name, "adium") == 0) { + gtk_widget_show (preferences->hbox_adium_theme); + } else { + gtk_widget_hide (preferences->hbox_adium_theme); + gtk_widget_hide (preferences->label_invalid_adium_theme); + } +} + +static void +preferences_theme_adium_update_validity (EmpathyPreferences *preferences, + const gchar *path) +{ +#ifdef HAVE_WEBKIT + if (empathy_theme_adium_is_valid (path)) { + gtk_widget_hide (preferences->label_invalid_adium_theme); + } else { + gtk_widget_show (preferences->label_invalid_adium_theme); + } +#endif +} + +static void +preferences_theme_adium_path_notify_cb (EmpathyConf *conf, + const gchar *key, + gpointer user_data) +{ + EmpathyPreferences *preferences = user_data; + GtkFileChooser *chooser; + gchar *value; + const gchar *path; + + if (!empathy_conf_get_string (conf, key, &value)) { + return; + } + + if (EMP_STR_EMPTY (value)) { + path = g_get_home_dir (); + } else { + path = value; + } + + chooser = GTK_FILE_CHOOSER (preferences->filechooserbutton_adium_theme); + gtk_file_chooser_set_current_folder (chooser, path); + preferences_theme_adium_update_validity (preferences, path); + g_free (value); +} + +static void +preferences_theme_adium_file_set_cb (GtkFileChooser *chooser, + EmpathyPreferences *preferences) +{ + gchar *path; + + path = gtk_file_chooser_get_current_folder (chooser); + empathy_conf_set_string (empathy_conf_get (), + EMPATHY_PREFS_CHAT_ADIUM_PATH, + path); + preferences_theme_adium_update_validity (preferences, path); + + g_free (path); +} + +static void +preferences_theme_notify_cb (EmpathyConf *conf, + const gchar *key, + gpointer user_data) +{ + EmpathyPreferences *preferences = user_data; + GtkComboBox *combo; + gchar *value; + GtkTreeModel *model; + GtkTreeIter iter; + gboolean found = FALSE; + + if (!empathy_conf_get_string (conf, key, &value)) { + return; + } + + preferences_theme_adium_update_visibility (preferences, value); + + combo = GTK_COMBO_BOX (preferences->combobox_chat_theme); + model = gtk_combo_box_get_model (combo); + if (value && gtk_tree_model_get_iter_first (model, &iter)) { + gchar *name; + + do { + gtk_tree_model_get (model, &iter, + COL_COMBO_NAME, &name, + -1); + + if (strcmp (name, value) == 0) { + found = TRUE; + gtk_combo_box_set_active_iter (combo, &iter); + break; + } + + g_free (name); + } while (gtk_tree_model_iter_next (model, &iter)); + } + + /* Fallback to the first one. */ + if (!found) { + if (gtk_tree_model_get_iter_first (model, &iter)) { + gtk_combo_box_set_active_iter (combo, &iter); + } + } + + g_free (value); +} + +static void +preferences_theme_changed_cb (GtkComboBox *combo, + EmpathyPreferences *preferences) { - const gchar *key; GtkTreeModel *model; GtkTreeIter iter; gchar *name; - key = g_object_get_data (G_OBJECT (combo), "key"); - - if (gtk_combo_box_get_active_iter (GTK_COMBO_BOX (combo), &iter)) { - model = gtk_combo_box_get_model (GTK_COMBO_BOX (combo)); + if (gtk_combo_box_get_active_iter (combo, &iter)) { + model = gtk_combo_box_get_model (combo); gtk_tree_model_get (model, &iter, COL_COMBO_NAME, &name, -1); - empathy_conf_set_string (empathy_conf_get (), key, name); + + preferences_theme_adium_update_visibility (preferences, name); + + empathy_conf_set_string (empathy_conf_get (), + EMPATHY_PREFS_CHAT_THEME, + name); g_free (name); } } static void +preferences_themes_setup (EmpathyPreferences *preferences) +{ + GtkComboBox *combo; + GtkCellLayout *cell_layout; + GtkCellRenderer *renderer; + GtkListStore *store; + const gchar **themes; + gint i; + guint id; + + combo = GTK_COMBO_BOX (preferences->combobox_chat_theme); + cell_layout = GTK_CELL_LAYOUT (combo); + + /* Create the model */ + store = gtk_list_store_new (COL_COMBO_COUNT, + G_TYPE_STRING, /* Display name */ + G_TYPE_STRING); /* Theme name */ + + /* Fill the model */ + themes = empathy_theme_manager_get_themes (); + for (i = 0; themes[i]; i += 2) { + gtk_list_store_insert_with_values (store, NULL, -1, + COL_COMBO_VISIBLE_NAME, _(themes[i + 1]), + COL_COMBO_NAME, themes[i], + -1); + } + + /* Add cell renderer */ + renderer = gtk_cell_renderer_text_new (); + gtk_cell_layout_pack_start (cell_layout, renderer, TRUE); + gtk_cell_layout_set_attributes (cell_layout, renderer, + "text", COL_COMBO_VISIBLE_NAME, NULL); + + gtk_combo_box_set_model (combo, GTK_TREE_MODEL (store)); + g_object_unref (store); + + g_signal_connect (combo, "changed", + G_CALLBACK (preferences_theme_changed_cb), + preferences); + + /* Select the theme from the gconf key and track changes */ + preferences_theme_notify_cb (empathy_conf_get (), + EMPATHY_PREFS_CHAT_THEME, + preferences); + id = empathy_conf_notify_add (empathy_conf_get (), + EMPATHY_PREFS_CHAT_THEME, + preferences_theme_notify_cb, + preferences); + if (id) { + preferences_add_id (preferences, id); + } + + g_signal_connect (preferences->filechooserbutton_adium_theme, + "file-set", + G_CALLBACK (preferences_theme_adium_file_set_cb), + preferences); + /* Select the adium path from the gconf key and track changes */ + preferences_theme_adium_path_notify_cb (empathy_conf_get (), + EMPATHY_PREFS_CHAT_ADIUM_PATH, + preferences); + id = empathy_conf_notify_add (empathy_conf_get (), + EMPATHY_PREFS_CHAT_ADIUM_PATH, + preferences_theme_adium_path_notify_cb, + preferences); + if (id) { + preferences_add_id (preferences, id); + } +} + +static void preferences_response_cb (GtkWidget *widget, gint response, EmpathyPreferences *preferences) @@ -1124,6 +1191,9 @@ empathy_preferences_show (GtkWindow *parent) "checkbutton_compact_contact_list", &preferences->checkbutton_compact_contact_list, "checkbutton_show_smileys", &preferences->checkbutton_show_smileys, "combobox_chat_theme", &preferences->combobox_chat_theme, + "hbox_adium_theme", &preferences->hbox_adium_theme, + "filechooserbutton_adium_theme", &preferences->filechooserbutton_adium_theme, + "label_invalid_adium_theme", &preferences->label_invalid_adium_theme, "checkbutton_separate_chat_windows", &preferences->checkbutton_separate_chat_windows, "checkbutton_autoconnect", &preferences->checkbutton_autoconnect, "radiobutton_contact_list_sort_by_name", &preferences->radiobutton_contact_list_sort_by_name, diff --git a/src/empathy-preferences.ui b/src/empathy-preferences.ui index d92fc8f88..eaec717ea 100644 --- a/src/empathy-preferences.ui +++ b/src/empathy-preferences.ui @@ -792,6 +792,49 @@ <property name="position">0</property> </packing> </child> + <child> + <object class="GtkHBox" id="hbox_adium_theme"> + <property name="visible">True</property> + <property name="spacing">6</property> + <child> + <object class="GtkLabel" id="label1"> + <property name="visible">True</property> + <property name="xalign">0</property> + <property name="label" translatable="yes">Adium theme to use:</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + </packing> + </child> + <child> + <object class="GtkFileChooserButton" id="filechooserbutton_adium_theme"> + <property name="visible">True</property> + <property name="preview_widget_active">False</property> + <property name="action">GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER</property> + <property name="title" translatable="yes">Sélectionner un dossier</property> + </object> + <packing> + <property name="position">1</property> + </packing> + </child> + </object> + <packing> + <property name="position">1</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="label_invalid_adium_theme"> + <property name="visible">True</property> + <property name="label" translatable="yes"><span foreground="red">Not a valid adium theme</span></property> + <property name="use_markup">True</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">2</property> + </packing> + </child> </object> </child> </object> diff --git a/tests/.gitignore b/tests/.gitignore index a37f3e5a0..eac793465 100644 --- a/tests/.gitignore +++ b/tests/.gitignore @@ -6,3 +6,4 @@ contact-run-until-ready-2 empetit test-empathy-presence-chooser test-empathy-status-preset-dialog +test-empathy-profile-chooser diff --git a/tests/Makefile.am b/tests/Makefile.am index 7740d1f8b..f96650e79 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -26,12 +26,14 @@ noinst_PROGRAMS = \ contact-manager \ empetit \ test-empathy-presence-chooser \ - test-empathy-status-preset-dialog + test-empathy-status-preset-dialog \ + test-empathy-profile-chooser contact_manager_SOURCES = contact-manager.c empetit_SOURCES = empetit.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_profile_chooser_SOURCES = test-empathy-profile-chooser.c check_PROGRAMS = check-main TESTS = check-main diff --git a/tests/test-empathy-profile-chooser.c b/tests/test-empathy-profile-chooser.c new file mode 100644 index 000000000..9078bbde4 --- /dev/null +++ b/tests/test-empathy-profile-chooser.c @@ -0,0 +1,31 @@ +#include <config.h> + +#include <gtk/gtk.h> + +#include <libempathy-gtk/empathy-ui-utils.h> +#include <libempathy-gtk/empathy-profile-chooser.h> + +int +main (int argc, + char **argv) +{ + GtkWidget *window; + GtkWidget *chooser; + + gtk_init (&argc, &argv); + empathy_gtk_init (); + + window = gtk_window_new (GTK_WINDOW_TOPLEVEL); + chooser = empathy_profile_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; +} |