Skip to content
Commits on Source (29)
......@@ -4,7 +4,7 @@ cmake_minimum_required(VERSION 3.1)
cmake_policy(VERSION 3.1)
project(evolution
VERSION 3.40.1
VERSION 3.40.2
LANGUAGES C)
set(PROJECT_BUGREPORT "https://gitlab.gnome.org/GNOME/evolution/issues/")
set(PROJECT_URL "http://wiki.gnome.org/Apps/Evolution/")
......
Evolution 3.40.2 2021-06-04
---------------------------
Bug Fixes:
I#1392 - Pressing backspace in front of quoted line with link does not delete anything (Milan Crha)
I#1428 - Can't import UTF-16 encoded .ics files (Milan Crha)
I#1475 - Mail: Read Subject from PGP encrypted mail even without text/rfc822-headers part ][ (Milan Crha)
I#1491 - Mail: Forwarding e-mail Inline or Quoted duplicates some attachments (Milan Crha)
I#1495 - ETable: Ignore Shift+Click in the table header area (Milan Crha)
I#1503 - PreferPlain: Deadlock when opening a message in composer (Milan Crha)
I#1507 - Contacts: Preserve selection after search change (Milan Crha)
I#1521 - Calendar: Removing recurrences not reflected in the UI (Milan Crha)
M!80 - help: Change instances of "Apply" to "OK" (Sibo Dong)
Miscellaneous:
itip-utils: Fix a possible memory leak (Milan Crha)
e-mail-reader: Add safety checks on return value from e_mail_reader_get_selected_uids() (Milan Crha)
Calendar: Let a GSettings binding mapping function return always TRUE (Milan Crha)
Calendar: Fix error detail reference for 'failed-make-movable' (Milan Crha)
Disable sandboxing to enable printing, until WebKitGTK is fixed (Milan Crha)
Translations:
Мирослав Николић (sr)
Kjartan Maraas (nb)
Fabio Tomat (fur)
Quentin PAGÈS (oc)
Zander Brown (en_GB)
Cheng-Chia Tseng (zh_TW)
Gianvito Cavasoli (it)
Yuri Chornoivan (uk)
Guillaume Bernard (fr)
Daniel Mustieles (es)
Evolution 3.40.1 2021-04-30
---------------------------
 
......
......@@ -584,6 +584,9 @@ EvoConvert.formatParagraph = function(str, ltr, align, indent, whiteSpace, wrapW
if (chr == "-" && worker.line.length && !worker.inAnchor)
worker.lastWrapableChar = worker.line.length;
else if (chr == EvoConvert.NOWRAP_CHAR_START && quoteLevel > 0 && worker.lastWrapableChar < 0 && worker.inAnchor <= 1 && worker.line.length > 1) {
worker.lastWrapableChar = worker.line.length;
}
}
}
......@@ -928,10 +931,12 @@ EvoConvert.processNode = function(node, normalDivWidth, quoteLevel)
str = EvoConvert.formatParagraph(EvoConvert.extractElemText(node, normalDivWidth, quoteLevel), ltr, align, indent, "pre", -1, 0, "", quoteLevel);
} else if (node.tagName == "BR") {
// ignore new-lines added by wrapping, treat them as spaces
if (node.classList.contains("-x-evo-wrap-br"))
str += " ";
else
if (node.classList.contains("-x-evo-wrap-br")) {
if (node.hasAttribute("x-evo-is-space"))
str += " ";
} else {
str = "\n";
}
} else if (node.tagName == "IMG") {
str = EvoConvert.ImgToText(node);
} else if (node.tagName == "A" && !node.innerText.includes(" ") && !node.innerText.includes("\n")) {
......
......@@ -1846,9 +1846,10 @@ EvoEditor.quoteParagraphWrap = function(node, lineLength, wrapWidth, prefixHtml)
node = next;
// add the prefix and <br> only if there's still anything to be quoted
if (node.nodeValue.length) {
if (node.nodeValue.length > 0 || ii + 1 < words.length) {
var br = document.createElement("BR");
br.className = "-x-evo-wrap-br";
br.setAttribute("x-evo-is-space", "1");
node.parentElement.insertBefore(br, node);
......@@ -1904,6 +1905,8 @@ EvoEditor.quoteParagraph = function(paragraph, blockquoteLevel, wrapWidth)
} else if (node.nodeType == node.ELEMENT_NODE) {
if (node.tagName == "BR") {
if (node.classList.contains("-x-evo-wrap-br")) {
if (node.hasAttribute("x-evo-is-space"))
node.insertAdjacentText("beforebegin", " ");
node.remove();
} else {
if (node.parentElement.childNodes.length != 1)
......@@ -2231,7 +2234,9 @@ EvoEditor.removeQuoteMarks = function(element)
for (ii = list.length - 1; ii >= 0; ii--) {
var node = list[ii];
node.insertAdjacentText("beforebegin", " ");
if (node.hasAttribute("x-evo-is-space"))
node.insertAdjacentText("beforebegin", " ");
node.remove();
}
......
......@@ -23,6 +23,12 @@
var EvoSelection = {
};
EvoSelection.isQuotationElement = function(node)
{
return (node.tagName == "SPAN" && node.classList.contains("-x-evo-quoted")) ||
(node.tagName == "BR" && node.classList.contains("-x-evo-wrap-br"));
}
/* The node path is described as an array of child indexes between parent
and the childNode (in this order). */
EvoSelection.GetChildPath = function(parent, childNode)
......@@ -41,7 +47,9 @@ EvoSelection.GetChildPath = function(parent, childNode)
var child, index = 0;
for (child = node.previousElementSibling; child; child = child.previousElementSibling) {
index++;
// Skip quotation elements, because they can be added/removed after quotation edit
if (!EvoSelection.isQuotationElement(child))
index++;
}
array[array.length] = index;
......@@ -59,16 +67,35 @@ EvoSelection.FindElementByPath = function(parent, path)
return null;
}
var ii, child = parent;
var ii, child = parent, node;
for (ii = 0; ii < path.length; ii++) {
var idx = path[ii];
var idx = path[ii], adept = child;
for (node = child.firstElementChild; node && idx >= 0; node = node.nextElementSibling) {
if (!EvoSelection.isQuotationElement(node)) {
idx--;
adept = node;
}
}
if (idx < 0 || idx >= child.children.length) {
throw "EvoSelection.FindElementByPath:: Index '" + idx + "' out of range '" + child.children.length + "'";
if (idx > 0) {
throw "EvoSelection.FindElementByPath:: Index '" + path[ii] + "' out of range '" + child.children.length + "'";
}
child = child.children.item(idx);
child = adept;
}
if (child && child.tagName == "SPAN" && child.classList.contains("-x-evo-quote-character")) {
child = child.parentElement;
}
if (child && child.tagName == "SPAN" && child.classList.contains("-x-evo-quoted")) {
if (child.nextSibling) {
child = child.nextSibling;
} else if (child.previousSibling) {
child = child.previousSibling;
}
}
return child;
......@@ -87,6 +114,8 @@ EvoSelection.GetOverallTextOffset = function(node)
for (sibling = node.previousSibling; sibling; sibling = sibling.previousSibling) {
if (sibling.nodeType == sibling.TEXT_NODE) {
text_offset += sibling.textContent.length;
} else if (sibling.tagName == "BR" && sibling.classList.contains("-x-evo-wrap-br") && sibling.hasAttribute("x-evo-is-space")) {
text_offset++;
}
}
......@@ -113,12 +142,46 @@ EvoSelection.GetTextOffsetNode = function(element, textOffset)
} else {
break;
}
} else if (node.tagName == "BR" && node.classList.contains("-x-evo-wrap-br") && node.hasAttribute("x-evo-is-space")) {
textOffset--;
}
}
return node ? node : (adept ? adept : element);
}
EvoSelection.correctSelectedNode = function(fromNode, fromOffset)
{
var node, nodeData = {};
nodeData.node = fromNode;
nodeData.offset = fromOffset;
if (!fromNode)
return nodeData;
node = fromNode;
if (node.nodeType == node.TEXT_NODE)
node = node.parentElement;
while (node && node.tagName == "SPAN" && node.classList.contains("-x-evo-quote-character")) {
node = node.parentElement;
}
if (node && node.tagName == "SPAN" && node.classList.contains("-x-evo-quoted")) {
if (node.nextSibling) {
nodeData.node = node.nextSibling;
nodeData.offset = 0;
} else if (node.previousSibling) {
nodeData.node = node.previousSibling;
nodeData.offset = nodeData.node.nodeValue.length;
}
}
return nodeData;
}
/* Returns an object, where the current selection in the doc is stored */
EvoSelection.Store = function(doc)
{
......@@ -127,19 +190,30 @@ EvoSelection.Store = function(doc)
}
var selection = {}, sel = doc.getSelection();
var anchorNode, anchorOffset, nodeData;
selection.anchorElem = sel.anchorNode ? EvoSelection.GetChildPath(doc.body, sel.anchorNode) : [];
selection.anchorOffset = sel.anchorOffset + EvoSelection.GetOverallTextOffset(sel.anchorNode);
nodeData = EvoSelection.correctSelectedNode(sel.anchorNode, sel.anchorOffset);
anchorNode = nodeData.node;
anchorOffset = nodeData.offset;
if (sel.anchorNode && sel.anchorNode.nodeType == sel.anchorNode.ELEMENT_NODE) {
selection.anchorElem = anchorNode ? EvoSelection.GetChildPath(doc.body, anchorNode) : [];
selection.anchorOffset = anchorOffset + EvoSelection.GetOverallTextOffset(anchorNode);
if (anchorNode && anchorNode.nodeType == anchorNode.ELEMENT_NODE) {
selection.anchorIsElement = true;
}
if (!sel.isCollapsed) {
selection.focusElem = EvoSelection.GetChildPath(doc.body, sel.focusNode);
selection.focusOffset = sel.focusOffset + EvoSelection.GetOverallTextOffset(sel.focusNode);
var focusNode, focusOffset;
nodeData = EvoSelection.correctSelectedNode(sel.focusNode, sel.focusOffset);
focusNode = nodeData.node;
focusOffset = nodeData.offset;
selection.focusElem = EvoSelection.GetChildPath(doc.body, focusNode);
selection.focusOffset = focusOffset + EvoSelection.GetOverallTextOffset(focusNode);
if (sel.focusNode && sel.focusNode.nodeType == sel.focusNode.ELEMENT_NODE) {
if (focusNode && focusNode.nodeType == focusNode.ELEMENT_NODE) {
selection.focusIsElement = true;
}
}
......
......@@ -56,7 +56,7 @@
<p>Enter your username and your email address.</p>
</item>
<item>
<p>Click <gui style="button">Apply</gui>.</p>
<p>Click <gui style="button">OK</gui>.</p>
</item>
</steps>
......
......@@ -52,7 +52,7 @@
<p>If you have more than one Google calendar, define which of them to use.</p>
</item>
<item>
<p>Click <gui style="button">Apply</gui>.</p>
<p>Click <gui style="button">OK</gui>.</p>
</item>
</steps>
......
......@@ -43,7 +43,7 @@
<app>Evolution</app> can also add and alter items in that file.</p>
</item>
<item>
<p>Click <gui style="button">Apply</gui>.</p>
<p>Click <gui style="button">OK</gui>.</p>
</item>
</steps>
......
......@@ -53,7 +53,7 @@
<p>Choose the temperature unit.</p>
</item>
<item>
<p>Click <gui style="button">Apply</gui>.</p>
<p>Click <gui style="button">OK</gui>.</p>
</item>
</steps>
......
......@@ -52,7 +52,7 @@
<p>Enter your username.</p>
</item>
<item>
<p>Click <gui style="button">Apply</gui>.</p>
<p>Click <gui style="button">OK</gui>.</p>
</item>
</steps>
......
......@@ -46,7 +46,7 @@
securely.</p>
</item>
<item>
<p>Click <gui style="button">Apply</gui>.</p>
<p>Click <gui style="button">OK</gui>.</p>
</item>
</steps>
......
......@@ -55,7 +55,7 @@
<p>Define the login method and your username.</p>
</item>
<item>
<p>Click <gui style="button">Apply</gui>.</p>
<p>Click <gui style="button">OK</gui>.</p>
</item>
<item>
<p>In the <gui>Details</gui> tab you can define the following
......
......@@ -34,7 +34,7 @@
<p>Enter a name that you prefer.</p>
</item>
<item>
<p>Click <gui style="button">Apply</gui>.</p>
<p>Click <gui style="button">OK</gui>.</p>
</item>
</steps>
......
......@@ -29,7 +29,7 @@
<item><p>Enter the address in the <gui>URL</gui> field.</p></item>
<item><p>Choose <gui>Use a secure connection</gui> if you want to connect securely.</p></item>
<item><p>Enter your username and your email address.</p></item>
<item><p>Click <gui style="button">Apply</gui>.</p></item>
<item><p>Click <gui style="button">OK</gui>.</p></item>
</steps>
<p>The task list will be added to the list of task lists in <app>Evolution</app>.</p>
......
......@@ -25,7 +25,7 @@
<item><p>Select the type <gui>On This Computer</gui>.</p></item>
<item><p>Enter a name that you prefer.</p></item>
<item><p>Optionally choose a color that you prefer.</p></item>
<item><p>Click <gui style="button">Apply</gui>.</p></item>
<item><p>Click <gui style="button">OK</gui>.</p></item>
</steps>
<p>The task list will be added to the list of task lists in <app>Evolution</app>.</p>
......
......@@ -31,7 +31,7 @@
<item><p>Enter the address in the <gui>URL</gui> field.</p></item>
<item><p>Choose <gui>Use a secure connection</gui> if you want to connect securely.</p></item>
<item><p>Enter your username.</p></item>
<item><p>Click <gui style="button">Apply</gui>.</p></item>
<item><p>Click <gui style="button">OK</gui>.</p></item>
</steps>
<p>The list will be added in <app>Evolution</app>.</p>
......
This diff is collapsed.
......@@ -22,8 +22,8 @@ msgid ""
msgstr ""
"Project-Id-Version: Evolution doc fr\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2021-03-13 15:49+0000\n"
"PO-Revision-Date: 2021-03-14 14:57+0100\n"
"POT-Creation-Date: 2021-04-10 10:59+0000\n"
"PO-Revision-Date: 2021-04-23 14:26+0200\n"
"Last-Translator: Guillaume Bernard <associations@guillaume-bernard.fr>\n"
"Language-Team: GNOME French Team <gnomefr@traduc.org>\n"
"Language: fr\n"
......@@ -31,7 +31,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
"X-Generator: Gtranslator 3.38.0\n"
"X-Generator: Gtranslator 40.0\n"
 
#. Put one translator per line, in the form NAME <EMAIL>, YEAR1, YEAR2
msgctxt "_"
......@@ -7763,85 +7763,87 @@ msgstr "Description"
 
#. (itstool) path: td/p
#: C/mail-composer-html-text.page:36
msgid "Default"
msgstr "Valeur par défaut"
#. (itstool) path: td/p
#: C/mail-composer-html-text.page:37
msgid "Font name."
msgstr "Nom de la police."
#. (itstool) path: td/p
#: C/mail-composer-html-text.page:40
msgid "+0"
msgstr "+0"
 
#. (itstool) path: td/p
#: C/mail-composer-html-text.page:37
#: C/mail-composer-html-text.page:41
msgid "Font size."
msgstr "Taille de police."
 
# Bruno : c'est le menu que j'ai dans ma version
#. (itstool) path: td/p
#: C/mail-composer-html-text.page:41
msgid ""
"Color chooser for text. The box displays the current text color. To choose a "
"new color, click the arrow button to the right. If you have text selected, "
"the color applies to the selected text. If you do not have text selected, "
"the color applies to whatever you type next. You can select a background "
"color or image by right-clicking the message background, then selecting "
"<guiseq><gui>Style</gui><gui>Page Style</gui></guiseq>."
msgstr ""
"Sélecteur de couleur pour le texte. La boîte affiche la couleur de texte "
"actuelle. Pour choisir une nouvelle couleur, cliquez sur le bouton flèche "
"sur la droite. Si du texte est sélectionné, la couleur s’applique à ce "
"texte. Dans le cas contraire, la couleur s’applique à tout le texte que vous "
"allez saisir ensuite. Vous pouvez choisir une couleur ou une image d’arrière-"
"plan en cliquant avec le bouton droit sur l’arrière-plan du message, puis en "
"choisissant <guiseq><gui>Style</gui><gui>Style de page</gui></guiseq>."
#: C/mail-composer-html-text.page:45
msgid "Text color."
msgstr "Couleur du texte."
 
#. (itstool) path: td/p
#: C/mail-composer-html-text.page:44
msgid "TT"
msgstr "TT"
#: C/mail-composer-html-text.page:45 C/mail-composer-html-text.page:49
msgid ""
"The box displays the current text color. If you have text selected, the "
"color applies to the selected text. If you do not have text selected, the "
"color applies to whatever you type next."
msgstr ""
"La boîte indique la couleur actuelle du texte. Si du texte est sélectionné, "
"la couleur s’applique à ce texte. Dans le cas contraire, la couleur "
"s’applique à tout le texte que vous allez saisir."
 
#. (itstool) path: td/p
#: C/mail-composer-html-text.page:45
msgid "Typewriter text, which is similar to a monospace font."
msgstr "Texte de machine à écrire, qui correspond à une police à largeur fixe."
#: C/mail-composer-html-text.page:49
msgid "Background color of the text."
msgstr "Couleur de l’arrière-plan du texte."
 
#. (itstool) path: td/p
#: C/mail-composer-html-text.page:48
#: C/mail-composer-html-text.page:52
msgid "Bold A"
msgstr "A gras"
 
#. (itstool) path: td/p
#: C/mail-composer-html-text.page:49
#: C/mail-composer-html-text.page:53
msgid "Bolds the text."
msgstr "Met le texte en gras."
 
#. (itstool) path: td/p
#: C/mail-composer-html-text.page:52
#: C/mail-composer-html-text.page:56
msgid "Italic A"
msgstr "A italique"
 
#. (itstool) path: td/p
#: C/mail-composer-html-text.page:53
#: C/mail-composer-html-text.page:57
msgid "Italicizes the text."
msgstr "Met le texte en italique."
 
#. (itstool) path: td/p
#: C/mail-composer-html-text.page:56
#: C/mail-composer-html-text.page:60
msgid "Underlined A"
msgstr "A souligné"
 
#. (itstool) path: td/p
#: C/mail-composer-html-text.page:57
#: C/mail-composer-html-text.page:61
msgid "Underlines the text."
msgstr "Souligne le texte."
 
#. (itstool) path: td/p
#: C/mail-composer-html-text.page:60
#: C/mail-composer-html-text.page:64
msgid "Strike through A"
msgstr "A barré"
 
#. (itstool) path: td/p
#: C/mail-composer-html-text.page:61
#: C/mail-composer-html-text.page:65
msgid "Marks a line through the text."
msgstr "Trace une ligne par-dessus le texte."
 
#. (itstool) path: section/p
#: C/mail-composer-html-text.page:65
#: C/mail-composer-html-text.page:69
msgid ""
"The other buttons are explained under <link xref=\"mail-composer-"
"html#formatting-options-html\"/>."
......@@ -15192,3 +15194,28 @@ msgstr ""
#: C/xinclude-searching.xml:30
msgid "Click <_:gui-1/>."
msgstr "Cliquez sur <_:gui-1/>."
# Bruno : c'est le menu que j'ai dans ma version
#~ msgid ""
#~ "Color chooser for text. The box displays the current text color. To "
#~ "choose a new color, click the arrow button to the right. If you have text "
#~ "selected, the color applies to the selected text. If you do not have text "
#~ "selected, the color applies to whatever you type next. You can select a "
#~ "background color or image by right-clicking the message background, then "
#~ "selecting <guiseq><gui>Style</gui><gui>Page Style</gui></guiseq>."
#~ msgstr ""
#~ "Sélecteur de couleur pour le texte. La boîte affiche la couleur de texte "
#~ "actuelle. Pour choisir une nouvelle couleur, cliquez sur le bouton flèche "
#~ "sur la droite. Si du texte est sélectionné, la couleur s’applique à ce "
#~ "texte. Dans le cas contraire, la couleur s’applique à tout le texte que "
#~ "vous allez saisir ensuite. Vous pouvez choisir une couleur ou une image "
#~ "d’arrière-plan en cliquant avec le bouton droit sur l’arrière-plan du "
#~ "message, puis en choisissant <guiseq><gui>Style</gui><gui>Style de page</"
#~ "gui></guiseq>."
#~ msgid "TT"
#~ msgstr "TT"
#~ msgid "Typewriter text, which is similar to a monospace font."
#~ msgstr ""
#~ "Texte de machine à écrire, qui correspond à une police à largeur fixe."
This diff is collapsed.
This diff is collapsed.