[gnome-devel-docs] Updated Czech translation



commit fa248f7b4d266c532b96e88d1cd97bd5b4c9c4cc
Author: Marek Cernocky <marek_cernocky conel cz>
Date:   Sun Mar 10 07:43:36 2019 +0100

    Updated Czech translation

 accessibility-devel-guide/cs/cs.po |   18 +-
 hig/cs/cs.po                       |   24 +-
 platform-demos/cs/cs.po            |  343 +++--
 platform-overview/cs/cs.po         |  169 +--
 programming-guidelines/cs/cs.po    | 2533 ++++++++++++++++++++++++++++++++++--
 5 files changed, 2709 insertions(+), 378 deletions(-)
---
diff --git a/accessibility-devel-guide/cs/cs.po b/accessibility-devel-guide/cs/cs.po
index 855af28b..43208f44 100644
--- a/accessibility-devel-guide/cs/cs.po
+++ b/accessibility-devel-guide/cs/cs.po
@@ -2,13 +2,13 @@
 # Copyright (C) 2015 gnome-devel-docs's COPYRIGHT HOLDER
 # This file is distributed under the same license as the gnome-devel-docs package.
 #
-# Marek Černocký <marek manet cz>, 2015, 2017.
+# Marek Černocký <marek manet cz>, 2015, 2017, 2019.
 #
 msgid ""
 msgstr ""
 "Project-Id-Version: gnome-devel-docs master\n"
-"POT-Creation-Date: 2017-08-16 16:08+0000\n"
-"PO-Revision-Date: 2017-08-17 18:48+0200\n"
+"POT-Creation-Date: 2019-02-03 09:38+0000\n"
+"PO-Revision-Date: 2019-03-05 10:29+0100\n"
 "Last-Translator: Marek Černocký <marek manet cz>\n"
 "Language-Team: Czech <gnome-cs-list gnome org>\n"
 "Language: cs\n"
@@ -2318,8 +2318,8 @@ msgid ""
 "according to the widget's feature set and function;"
 msgstr ""
 "určit, která <ulink url=\"https://developer.gnome.org/atk/stable/interfaces.";
-"html\">rozhraní ATK</ulink> by měl vlastní widget implementovat, s ohledem na "
-"množinu vlastnosí widgetu a funkci"
+"html\">rozhraní ATK</ulink> by měl vlastní widget implementovat, s ohledem "
+"na množinu vlastnosí widgetu a funkci"
 
 #. (itstool) path: listitem/para
 #: C/index.docbook:818
@@ -2328,8 +2328,8 @@ msgid ""
 "html\">ATK interfaces</ulink> can be inherited from the parent widget class;"
 msgstr ""
 "vyhodnotit, která <ulink url=\"https://developer.gnome.org/atk/stable/";
-"interfaces.html\">rozhraní ATK</ulink> mohou být zděděna z třídy rodičovského "
-"widgetu"
+"interfaces.html\">rozhraní ATK</ulink> mohou být zděděna z třídy "
+"rodičovského widgetu"
 
 #. (itstool) path: listitem/para
 #: C/index.docbook:823
@@ -5476,7 +5476,7 @@ msgid ""
 "documentation can be found <ulink url=\"http://library.gnome.org/devel/";
 "accerciser/stable\">in the Official Accerciser Manual</ulink>. For a "
 "demonstration of <application>Accerciser</application> and "
-"<application>PyATSPI</application> (Python-wrappered access and usage of AT-"
+"<application>PyATSPI</application> (Python-wrapped access and usage of AT-"
 "SPI), see <ulink url=\"http://live.gnome.org/Accessibility/";
 "PythonPoweredAccessibility\">this article</ulink>. For an excellent "
 "walkthrough from the author, see the article titled <ulink url=\"http://www.";
@@ -5493,7 +5493,7 @@ msgstr ""
 "najdete <ulink url=\"http://library.gnome.org/devel/accerciser/stable\";>v "
 "oficiální příručce k aplikaci Accerciser</ulink>. Na ukázku použití aplikace "
 "<application>Accerciser</application> a <application>PyATSPI</application> "
-"(Python-wrappered access and usage of AT-SPI) se podívejte do <ulink url="
+"(Python-wrapped access and usage of AT-SPI) se podívejte do <ulink url="
 "\"http://live.gnome.org/Accessibility/PythonPoweredAccessibility\";>tohoto "
 "článku</ulink>. Skvělou procházku zpřístupněním aplikace přímo od autorů "
 "najdete v článku s názvem <ulink url=\"http://www.linuxjournal.com/";
diff --git a/hig/cs/cs.po b/hig/cs/cs.po
index 7fbe7062..9eb4d231 100644
--- a/hig/cs/cs.po
+++ b/hig/cs/cs.po
@@ -1,13 +1,13 @@
 # Czech translation for gnome-devel-docs.
 # Copyright (C) 2015 gnome-devel-docs's COPYRIGHT HOLDER
 # This file is distributed under the same license as the gnome-devel-docs package.
-# Marek Černocký <marek manet cz>, 2015, 2016, 2017, 2018.
+# Marek Černocký <marek manet cz>, 2015, 2016, 2017, 2018, 2019.
 #
 msgid ""
 msgstr ""
 "Project-Id-Version: gnome-devel-docs master\n"
-"POT-Creation-Date: 2018-09-25 10:18+0000\n"
-"PO-Revision-Date: 2018-09-28 12:16+0200\n"
+"POT-Creation-Date: 2019-02-03 09:38+0000\n"
+"PO-Revision-Date: 2019-03-05 10:32+0100\n"
 "Last-Translator: Marek Černocký <marek manet cz>\n"
 "Language-Team: čeština <gnome-cs-list gnome org>\n"
 "Language: cs\n"
@@ -3630,7 +3630,7 @@ msgstr ""
 #: C/icon-design.page:121
 msgid ""
 "When using unfilled strokes for an outline, try avoiding hairline (1px) and "
-"do at least a 2px stroke for the meain feature of the icon."
+"do at least a 2px stroke for the main feature of the icon."
 msgstr ""
 "Pokud použijete nevyplněný obrys, snažte se vyhnout vlasové 1px čáře a "
 "hlavní tvar ikony obtáhněte alespoň 2px obrysem."
@@ -3911,13 +3911,13 @@ msgid ""
 "same type. For example, a media icon for stop is simply a square, and may "
 "not be identified as a stop icon without other media controls (like play, "
 "pause, or skip) being visible close by. Likewise, the icon to remove an item "
-"from a list is a subtract symbol (ie. a single line), and will not be "
+"from a list is a subtract symbol (i.e. a single line), and will not be "
 "recognizable without a corresponding “plus” add icon."
 msgstr ""
 "Pamatujte, že některé ikony mají význam jen v souvislosti s jinými ikonami "
 "stejného typu. Například multimediální ikona pro zastavení je jen obyčejný "
 "čtverec a nemusí být uživatelem rozpoznána jako „stop“ bez dalších "
-"multimediálních ovládacích prvků (jako přehrát, pozastavit nebo přeskočit). "
+"multimediálních ovládacích prvků (tj. přehrát, pozastavit nebo přeskočit). "
 "Obdobně ikona pro odebrání ze seznamu je hodně abstraktní (mínus, což je jen "
 "jednoduchá čárka) a nemusí být uživatelem pochopena bez příslušné ikony "
 "„plus“."
@@ -8482,7 +8482,7 @@ msgstr ""
 
 #. (itstool) path: td/p
 #: C/pointer-and-touch-input.page:154
-msgid "Changes the zoom level of the view (eg. Maps, Photos)."
+msgid "Changes the zoom level of the view (e.g. Maps, Photos)."
 msgstr "Změna úrovně přiblížení v zobrazení (např. Mapy, Fotografie)."
 
 #. (itstool) path: td/p
@@ -9728,7 +9728,7 @@ msgid ""
 "If a spinner is displayed for a long time, a label can indicate both the "
 "identity of the task and progress through it. This can take the form of a "
 "percentage, an indication of the time remaining, or progress through sub-"
-"components of the task (eg. modules downloaded, or pages exported)."
+"components of the task (e.g. modules downloaded, or pages exported)."
 msgstr ""
 "Jestliže je káča zobrazená hodně dlouho, může popisek ukazovat jak "
 "příslušnost k úloze, tak její průběh. Může to být v podobě procent, "
@@ -10806,7 +10806,7 @@ msgstr ""
 msgid ""
 "Switches should be used for controlling services or hardware that have a "
 "clear on/off logic. They are particularly appropriate when those services or "
-"hardware do not activate immediately (ie. there is a delay between the "
+"hardware do not activate immediately (i.e. there is a delay between the "
 "switch being operated and it having an effect), or when they affect the "
 "operation of the application in a significant way."
 msgstr ""
@@ -12205,9 +12205,9 @@ msgstr ""
 #. (itstool) path: item/p
 #: C/writing-style.page:54
 msgid ""
-"Latin abbreviations such as “ie” or “eg” should be avoided, since they can't "
-"always be easily translated and can be unintelligible when read by screen "
-"readers. Instead, use full words like “for example”."
+"Latin abbreviations such as “i.e.” or “e.g.” should be avoided, since they "
+"can't always be easily translated and can be unintelligible when read by "
+"screen readers. Instead, use full words like “for example”."
 msgstr ""
 "Měli byste se vyhnout latinským zkratkám, jako je „ie“ (tj.) nebo "
 "„eg“ (např.), protože je nemusí být vždy snadné přeložit do jiného jazyka a "
diff --git a/platform-demos/cs/cs.po b/platform-demos/cs/cs.po
index 2d32625d..72a2d9fd 100644
--- a/platform-demos/cs/cs.po
+++ b/platform-demos/cs/cs.po
@@ -1,13 +1,13 @@
 # Czech translation for gnome-devel-docs.
 # Copyright (C) 2015 gnome-devel-docs's COPYRIGHT HOLDER
 # This file is distributed under the same license as the gnome-devel-docs package.
-# Marek Černocký <marek manet cz>, 2015, 2016, 2017, 2018.
+# Marek Černocký <marek manet cz>, 2015, 2016, 2017, 2018, 2019.
 #
 msgid ""
 msgstr ""
 "Project-Id-Version: gnome-devel-docs\n"
-"POT-Creation-Date: 2018-07-07 08:43+0000\n"
-"PO-Revision-Date: 2018-09-03 17:54+0200\n"
+"POT-Creation-Date: 2019-03-01 18:07+0000\n"
+"PO-Revision-Date: 2019-03-06 09:03+0100\n"
 "Last-Translator: Marek Černocký <marek manet cz>\n"
 "Language-Team: čeština <gnome-cs-list gnome org>\n"
 "Language: cs\n"
@@ -3283,7 +3283,7 @@ msgid ""
 "\n"
 "  about_dialog = gtk_about_dialog_new ();\n"
 "\n"
-"  /* Lists of authors/ documentators to be used later, they must be initialized\n"
+"  /* Lists of authors/ documenters to be used later, they must be initialized\n"
 "   * in a null terminated array of strings.\n"
 "   */\n"
 "  const gchar *authors[] = {\"GNOME Documentation Team\", NULL};\n"
@@ -5604,7 +5604,7 @@ msgid ""
 "\n"
 "class ButtonBoxExample {\n"
 "\n"
-"    // Create the application itthis\n"
+"    // Create the application itself\n"
 "    constructor() {\n"
 "        this.application = new Gtk.Application({\n"
 "            application_id: 'org.example.jsbuttonbox'\n"
@@ -10076,11 +10076,13 @@ msgstr ""
 #: C/treeview_advanced_liststore.py.page:49
 #: C/treeview_simple_liststore.py.page:50
 msgid ""
-"<link href=\"http://git.gnome.org/browse/pygobject/tree/gi/overrides/Gtk.py";
-"\">pygobject - Python bindings for GObject Introspection</link>"
+"<link href=\"https://gitlab.gnome.org/GNOME/pygobject/blob/master/gi/";
+"overrides/Gtk.py\">pygobject - Python bindings for GObject Introspection</"
+"link>"
 msgstr ""
-"<link href=\"http://git.gnome.org/browse/pygobject/tree/gi/overrides/Gtk.py";
-"\">pygobject – vazba jazyka Python pro GObject Introspection</link>"
+"<link href=\"https://gitlab.gnome.org/GNOME/pygobject/blob/master/gi/";
+"overrides/Gtk.py\">pygobject – vazba jazyka Python pro GObject Introspection"
+"</link>"
 
 #. (itstool) path: info/title
 #: C/combobox.vala.page:8 C/combobox_multicolumn.vala.page:8
@@ -13731,7 +13733,7 @@ msgid ""
 "\n"
 "class FontChooserWidgetExample {\n"
 "\n"
-"    // Create the application itthis\n"
+"    // Create the application itself\n"
 "    constructor() {\n"
 "        this.application = new Gtk.Application({ application_id: 'org.example.fontchooserwidget' });\n"
 "\n"
@@ -17873,7 +17875,7 @@ msgstr ""
 "ladicích tónů."
 
 #. (itstool) path: section/title
-#: C/guitar-tuner.js.page:64 C/hello-world.js.page:59 C/hello-world.py.page:52
+#: C/guitar-tuner.js.page:64 C/hello-world.js.page:61 C/hello-world.py.page:52
 #: C/hello-world.vala.page:44 C/weatherAppMain.js.page:49
 msgid "Creating the main window for the application"
 msgstr "Vytvoření hlavního okna pro aplikaci"
@@ -20581,13 +20583,17 @@ msgstr ""
 #, no-wrap
 msgid ""
 "const Lang = imports.lang;\n"
+"\n"
+"imports.gi.versions.Gtk = '3.0'\n"
 "const Gtk = imports.gi.Gtk;"
 msgstr ""
 "const Lang = imports.lang;\n"
+"\n"
+"imports.gi.versions.Gtk = '3.0'\n"
 "const Gtk = imports.gi.Gtk;"
 
 #. (itstool) path: section/p
-#: C/hello-world.js.page:56 C/hello-world.py.page:49
+#: C/hello-world.js.page:58 C/hello-world.py.page:49
 msgid ""
 "In order for our script to work with GNOME, we need to import GNOME "
 "libraries via GObject Introspection. Here we import the language bindings "
@@ -20599,7 +20605,7 @@ msgstr ""
 "která obsahuje grafické widgety používané k vytvoření aplikací GNOME."
 
 #. (itstool) path: section/code
-#: C/hello-world.js.page:60
+#: C/hello-world.js.page:62
 #, no-wrap
 msgid ""
 "const Application = new Lang.Class({\n"
@@ -20665,7 +20671,7 @@ msgstr ""
 "});\n"
 
 #. (itstool) path: section/p
-#: C/hello-world.js.page:92
+#: C/hello-world.js.page:94
 msgid ""
 "GtkApplication initializes GTK+. It also connects the <gui>x</gui> button "
 "that's automatically generated along with the window to the \"destroy\" "
@@ -20675,7 +20681,7 @@ msgstr ""
 "je u okna vygenerováno automaticky, k signálu <code>\"destroy\"</code>."
 
 #. (itstool) path: section/p
-#: C/hello-world.js.page:93
+#: C/hello-world.js.page:95
 msgid ""
 "We can start building our first window. We do this by creating a variable "
 "called <var>_window</var> and assigning it a new Gtk.ApplicationWindow."
@@ -20685,7 +20691,7 @@ msgstr ""
 "code>."
 
 #. (itstool) path: section/p
-#: C/hello-world.js.page:94 C/hello-world.py.page:73
+#: C/hello-world.js.page:96 C/hello-world.py.page:73
 msgid ""
 "We give the window a property called <var>title</var>. The title can be any "
 "string you want it to be. To be on the safe side, it's best to stick to "
@@ -20696,7 +20702,7 @@ msgstr ""
 "kódování UTF-8."
 
 #. (itstool) path: section/p
-#: C/hello-world.js.page:95 C/hello-world.py.page:74 C/hello-world.vala.page:57
+#: C/hello-world.js.page:97 C/hello-world.py.page:74 C/hello-world.vala.page:57
 msgid ""
 "Now we have a window which has a title and a working \"close\" button. Let's "
 "add the actual \"Hello World\" text."
@@ -20705,12 +20711,13 @@ msgstr ""
 "pořádný text „Hello World“."
 
 #. (itstool) path: section/title
-#: C/hello-world.js.page:98 C/hello-world.py.page:77 C/hello-world.vala.page:60
+#: C/hello-world.js.page:100 C/hello-world.py.page:77
+#: C/hello-world.vala.page:60
 msgid "Label for the window"
 msgstr "Popisek pro okno"
 
 #. (itstool) path: section/code
-#: C/hello-world.js.page:99
+#: C/hello-world.js.page:101
 #, no-wrap
 msgid ""
 "// Add a label widget to your window\n"
@@ -20724,7 +20731,7 @@ msgstr ""
 "this._window.set_default_size(200, 200);"
 
 #. (itstool) path: section/p
-#: C/hello-world.js.page:104
+#: C/hello-world.js.page:106
 msgid ""
 "A text label is one of the GTK+ widgets we can use, on account of having "
 "imported the GTK+ library. To use it, we create a new variable called label, "
@@ -20740,7 +20747,7 @@ msgstr ""
 "aplikaci:"
 
 #. (itstool) path: section/code
-#: C/hello-world.js.page:106
+#: C/hello-world.js.page:108
 #, no-wrap
 msgid ""
 "//run the application\n"
@@ -20752,7 +20759,7 @@ msgstr ""
 "app.application.run(ARGV);"
 
 #. (itstool) path: section/p
-#: C/hello-world.js.page:110 C/hello-world.py.page:97
+#: C/hello-world.js.page:112 C/hello-world.py.page:97
 #: C/hello-world.vala.page:71
 msgid ""
 "Gtk.ApplicationWindow can only hold one widget at a time. To construct more "
@@ -20765,22 +20772,24 @@ msgstr ""
 "widgety přidat do něj."
 
 #. (itstool) path: section/title
-#: C/hello-world.js.page:114
+#: C/hello-world.js.page:116
 msgid "hello-world.js"
 msgstr "hello-world.js"
 
 #. (itstool) path: section/p
-#: C/hello-world.js.page:115 C/hello-world.py.page:102
+#: C/hello-world.js.page:117 C/hello-world.py.page:102
 #: C/hello-world.vala.page:76
 msgid "The complete file:"
 msgstr "Celý soubor:"
 
 #. (itstool) path: section/code
-#: C/hello-world.js.page:116
+#: C/hello-world.js.page:118
 #, no-wrap
 msgid ""
 "#!/usr/bin/gjs\n"
 "\n"
+"const Lang = imports.lang;\n"
+"\n"
 "imports.gi.versions.Gtk = '3.0'\n"
 "const Gtk = imports.gi.Gtk;\n"
 "\n"
@@ -20822,6 +20831,8 @@ msgid ""
 msgstr ""
 "#!/usr/bin/gjs\n"
 "\n"
+"const Lang = imports.lang;\n"
+"\n"
 "imports.gi.versions.Gtk = '3.0'\n"
 "const Gtk = imports.gi.Gtk;\n"
 "\n"
@@ -20862,13 +20873,13 @@ msgstr ""
 "app.application.run(ARGV);\n"
 
 #. (itstool) path: section/title
-#: C/hello-world.js.page:119 C/hello-world.py.page:106
+#: C/hello-world.js.page:121 C/hello-world.py.page:106
 #: C/hello-world.vala.page:80
 msgid "Running the application from terminal"
 msgstr "Spuštění aplikace z terminálu"
 
 #. (itstool) path: section/p
-#: C/hello-world.js.page:120
+#: C/hello-world.js.page:122
 msgid ""
 "To run this application, first save it as hello-world.js. Then open "
 "Terminal, go to the folder where your application is stored and run:"
@@ -20878,19 +20889,19 @@ msgstr ""
 "spusťte:"
 
 #. (itstool) path: section/screen
-#: C/hello-world.js.page:121
+#: C/hello-world.js.page:123
 #, no-wrap
 msgid "<output style=\"prompt\">$ </output><input>gjs hello-world.js</input>"
 msgstr "<output style=\"prompt\">$ </output><input>gjs hello-world.js</input>"
 
 #. (itstool) path: section/title
-#: C/hello-world.js.page:127 C/hello-world.py.page:112
+#: C/hello-world.js.page:129 C/hello-world.py.page:112
 #: C/hello-world.vala.page:89
 msgid "The <file>.desktop.in</file> file"
 msgstr "Soubor <file>.desktop.in</file>"
 
 #. (itstool) path: section/p
-#: C/hello-world.js.page:128 C/hello-world.py.page:113
+#: C/hello-world.js.page:130 C/hello-world.py.page:113
 #: C/hello-world.vala.page:90
 msgid ""
 "Running applications from the Terminal is useful at the beginning of the "
@@ -20914,7 +20925,7 @@ msgstr ""
 "<file>.desktop.in</file> se vytvoří soubor <file>.desktop</file>."
 
 #. (itstool) path: note/p
-#: C/hello-world.js.page:131
+#: C/hello-world.js.page:133
 msgid ""
 "Before continuing, resave <file>hello-world.js</file> as <file>hello-world</"
 "file>. Then run this in the command line:"
@@ -20923,13 +20934,13 @@ msgstr ""
 "<file>hello-world</file>. Pak spusťte v příkazovém řádku:"
 
 #. (itstool) path: note/screen
-#: C/hello-world.js.page:132
+#: C/hello-world.js.page:134
 #, no-wrap
 msgid "<output style=\"prompt\">$ </output><input>chmod +x hello-world</input>"
 msgstr "<output style=\"prompt\">$ </output><input>chmod +x hello-world</input>"
 
 #. (itstool) path: section/p
-#: C/hello-world.js.page:135 C/hello-world.py.page:115
+#: C/hello-world.js.page:137 C/hello-world.py.page:115
 #: C/hello-world.vala.page:92
 msgid ""
 "The example shows you the minimum requirements for a <code>.desktop.in</"
@@ -20938,7 +20949,7 @@ msgstr ""
 "Příklad ukazuje minimální požadavky pro soubor <code>.desktop.in</code>."
 
 #. (itstool) path: section/code
-#: C/hello-world.js.page:136 C/hello-world.py.page:116
+#: C/hello-world.js.page:138 C/hello-world.py.page:116
 #: C/hello-world.vala.page:93
 #, no-wrap
 msgid ""
@@ -20967,46 +20978,48 @@ msgstr ""
 "Categories=GNOME;GTK;Utility;\n"
 
 #. (itstool) path: section/p
-#: C/hello-world.js.page:138 C/hello-world.py.page:118
-#: C/hello-world.vala.page:95
-msgid "Now let's go through some parts of the <code>.desktop.in</code> file."
+#: C/hello-world.js.page:140
+msgid ""
+"Save this as <file>hello-world.desktop.in</file>. Now let's go through some "
+"parts of the <code>.desktop.in</code> file."
 msgstr ""
-"Nyní se pojďme podívat na některé části souboru <code>.desktop.in</code>."
+"Uložte jej jako <file>hello-world.desktop.in</file>. Nyní se pojďme podívat "
+"na některé části souboru <code>.desktop.in</code>."
 
 #. (itstool) path: item/title
 #. (itstool) path: td/p
-#: C/hello-world.js.page:140 C/hello-world.py.page:120
+#: C/hello-world.js.page:142 C/hello-world.py.page:120
 #: C/hello-world.vala.page:97 C/toolbar_builder.py.page:95
 #: C/toolbar_builder.vala.page:78
 msgid "Name"
 msgstr "Name"
 
 #. (itstool) path: item/p
-#: C/hello-world.js.page:140 C/hello-world.py.page:120
+#: C/hello-world.js.page:142 C/hello-world.py.page:120
 #: C/hello-world.vala.page:97
 msgid "The application name."
 msgstr "Název aplikace."
 
 #. (itstool) path: item/title
-#: C/hello-world.js.page:141 C/hello-world.py.page:121
+#: C/hello-world.js.page:143 C/hello-world.py.page:121
 #: C/hello-world.vala.page:98
 msgid "Comment"
 msgstr "Comment"
 
 #. (itstool) path: item/p
-#: C/hello-world.js.page:141 C/hello-world.py.page:121
+#: C/hello-world.js.page:143 C/hello-world.py.page:121
 #: C/hello-world.vala.page:98
 msgid "A short description of the application."
 msgstr "Krátký popis aplikace."
 
 #. (itstool) path: item/title
-#: C/hello-world.js.page:142 C/hello-world.py.page:122
+#: C/hello-world.js.page:144 C/hello-world.py.page:122
 #: C/hello-world.vala.page:99
 msgid "Exec"
 msgstr "Exec"
 
 #. (itstool) path: item/p
-#: C/hello-world.js.page:142 C/hello-world.py.page:122
+#: C/hello-world.js.page:144 C/hello-world.py.page:122
 #: C/hello-world.vala.page:99
 msgid ""
 "Specifies a command to execute when you choose the application from the "
@@ -21018,20 +21031,20 @@ msgstr ""
 "file> a tento soubor se už postará o zbytek."
 
 #. (itstool) path: item/title
-#: C/hello-world.js.page:143 C/hello-world.py.page:123
+#: C/hello-world.js.page:145 C/hello-world.py.page:123
 #: C/hello-world.vala.page:100
 msgid "Terminal"
 msgstr "Terminal"
 
 #. (itstool) path: item/p
-#: C/hello-world.js.page:143 C/hello-world.py.page:123
+#: C/hello-world.js.page:145 C/hello-world.py.page:123
 #: C/hello-world.vala.page:100
 msgid ""
 "Specifies whether the command in the Exec key runs in a terminal window."
 msgstr "Určuje, jestli příkaz v klíči Exec běží v terminálu."
 
 #. (itstool) path: section/p
-#: C/hello-world.js.page:146 C/hello-world.py.page:126
+#: C/hello-world.js.page:148 C/hello-world.py.page:126
 #: C/hello-world.vala.page:103
 msgid ""
 "To put your application into the appropriate category, you need to add the "
@@ -21045,33 +21058,33 @@ msgstr ""
 "menu-spec/latest/apa.html\">specifikaci nabídky</link>."
 
 #. (itstool) path: section/p
-#: C/hello-world.js.page:147 C/hello-world.py.page:127
+#: C/hello-world.js.page:149 C/hello-world.py.page:127
 #: C/hello-world.vala.page:104
 msgid ""
 "In this example we use an existing icon. For a custom icon you need to have "
 "a .svg file of your icon, stored in <file>/usr/share/icons/hicolor/scalable/"
 "apps</file>. Write the name of your icon file to the .desktop.in file, on "
-"line 7. More information on icons in: <link href=\"https://live.gnome.org/";
-"GnomeGoals/AppIcon\">Installing Icons for Themes</link> and <link href="
-"\"http://freedesktop.org/wiki/Specifications/icon-theme-spec\";>on "
+"line 7. More information on icons in: <link href=\"https://wiki.gnome.org/";
+"Initiatives/GnomeGoals/AppIcon\">Installing Icons for Themes</link> and "
+"<link href=\"http://freedesktop.org/wiki/Specifications/icon-theme-spec\";>on "
 "freedesktop.org: Specifications/icon-theme-spec</link>."
 msgstr ""
 "V tomto příkladu používáme existující ikonu. Pro vlastní ikonu potřebujete "
 "mít soubor SVG se svojí ikonou uložený v <file>/usr/share/icons/hicolor/"
 "scalable/apps</file>. Napište název svého souboru s ikonou do souboru ."
-"desktop.in na řádek 7. Více informací o ikonách: <link href=\"https://live.";
-"gnome.org/GnomeGoals/AppIcon\">Instalace ikon pro motivy</link> a <link href="
-"\"http://freedesktop.org/wiki/Specifications/icon-theme-spec\";>Specifikace/"
-"icon-theme-spec na freedesktop.org</link>."
+"desktop.in na řádek 7. Více informací o ikonách: <link href=\"https://wiki.";
+"gnome.org/Initiatives/GnomeGoals/AppIcon\">Instalace ikon pro motivy</link> a "
+"<link href=\"http://freedesktop.org/wiki/Specifications/icon-theme-spec\";>"
+"Specifikace/icon-theme-spec na freedesktop.org</link>."
 
 #. (itstool) path: section/title
-#: C/hello-world.js.page:150 C/hello-world.py.page:130
+#: C/hello-world.js.page:152 C/hello-world.py.page:130
 #: C/hello-world.vala.page:107
 msgid "The build system"
 msgstr "Sestavovací systém"
 
 #. (itstool) path: section/p
-#: C/hello-world.js.page:151 C/hello-world.py.page:131
+#: C/hello-world.js.page:153 C/hello-world.py.page:131
 #: C/hello-world.vala.page:108
 msgid ""
 "To make your application truly a part of the GNOME 3 system you need to "
@@ -21083,7 +21096,7 @@ msgstr ""
 "soubory na správná místa."
 
 #. (itstool) path: section/p
-#: C/hello-world.js.page:152 C/hello-world.py.page:132
+#: C/hello-world.js.page:154 C/hello-world.py.page:132
 #: C/hello-world.vala.page:109
 msgid "For this you need to have the following files:"
 msgstr "K tomu budete potřebovat následující soubory:"
@@ -21091,14 +21104,14 @@ msgstr "K tomu budete potřebovat následující soubory:"
 #. (itstool) path: section/title
 #. (itstool) path: item/p
 #. (itstool) path: section/p
-#: C/hello-world.js.page:155 C/hello-world.py.page:135
+#: C/hello-world.js.page:157 C/hello-world.py.page:135
 #: C/hello-world.vala.page:112 C/weatherAutotools.js.page:40
 #: C/weatherAutotools.js.page:138
 msgid "autogen.sh"
 msgstr "autogen.sh"
 
 #. (itstool) path: section/code
-#: C/hello-world.js.page:156 C/hello-world.py.page:136
+#: C/hello-world.js.page:158 C/hello-world.py.page:136
 #: C/hello-world.vala.page:113
 #, no-wrap
 msgid ""
@@ -21141,14 +21154,14 @@ msgstr ""
 "fi\n"
 
 #. (itstool) path: section/p
-#: C/hello-world.js.page:158 C/hello-world.py.page:138
+#: C/hello-world.js.page:160 C/hello-world.py.page:138
 #: C/hello-world.vala.page:115
 msgid "After the <file>autogen.sh</file> file is ready and saved, run:"
 msgstr ""
 "Když máme soubor <file>autogen.sh</file> připravený a uložený, spusťte:"
 
 #. (itstool) path: section/screen
-#: C/hello-world.js.page:159 C/hello-world.py.page:139
+#: C/hello-world.js.page:161 C/hello-world.py.page:139
 #: C/hello-world.vala.page:116
 #, no-wrap
 msgid "<output style=\"prompt\">$ </output><input>chmod +x autogen.sh</input>"
@@ -21157,14 +21170,14 @@ msgstr "<output style=\"prompt\">$ </output><input>chmod +x autogen.sh</input>"
 #. (itstool) path: section/title
 #. (itstool) path: item/p
 #. (itstool) path: section/p
-#: C/hello-world.js.page:163 C/hello-world.py.page:143
+#: C/hello-world.js.page:165 C/hello-world.py.page:143
 #: C/hello-world.vala.page:120 C/weatherAutotools.js.page:38
 #: C/weatherAutotools.js.page:64
 msgid "Makefile.am"
 msgstr "Makefile.am"
 
 #. (itstool) path: section/code
-#: C/hello-world.js.page:164
+#: C/hello-world.js.page:166
 #, no-wrap
 msgid ""
 "# The actual runnable program is set to the SCRIPTS primitive.\n"
@@ -21194,14 +21207,14 @@ msgstr ""
 #. (itstool) path: section/title
 #. (itstool) path: item/p
 #. (itstool) path: section/p
-#: C/hello-world.js.page:168 C/hello-world.py.page:148
+#: C/hello-world.js.page:170 C/hello-world.py.page:148
 #: C/hello-world.vala.page:125 C/weatherAutotools.js.page:39
 #: C/weatherAutotools.js.page:131
 msgid "configure.ac"
 msgstr "configure.ac"
 
 #. (itstool) path: section/code
-#: C/hello-world.js.page:169 C/hello-world.py.page:149
+#: C/hello-world.js.page:171 C/hello-world.py.page:149
 #, no-wrap
 msgid ""
 "# This file is processed by autoconf to create a configure script\n"
@@ -21217,13 +21230,13 @@ msgstr ""
 "AC_OUTPUT\n"
 
 #. (itstool) path: section/title
-#: C/hello-world.js.page:173 C/hello-world.py.page:153
+#: C/hello-world.js.page:175 C/hello-world.py.page:153
 #: C/hello-world.vala.page:130
 msgid "README"
 msgstr "README"
 
 #. (itstool) path: section/p
-#: C/hello-world.js.page:174 C/hello-world.py.page:154
+#: C/hello-world.js.page:176 C/hello-world.py.page:154
 #: C/hello-world.vala.page:131
 msgid "Information users should read first. This file can be blank."
 msgstr ""
@@ -21231,29 +21244,33 @@ msgstr ""
 "být prázdný."
 
 #. (itstool) path: section/p
-#: C/hello-world.js.page:176 C/hello-world.py.page:156
+#: C/hello-world.js.page:178
 msgid ""
 "When you have the <file>hello-world</file>, <file>hello-world.desktop.in</"
 "file>, <file>Makefile.am</file>, <file>configure.ac</file> and <file>autogen."
-"sh</file> files with correct information and rights, the <file>README</file> "
-"file can include the following instructions:"
+"sh</file> files with correct information and permissions, create a "
+"<file>README</file> file with installation instructions. Below is a sample "
+"of what suitable README instructions may look like:"
 msgstr ""
 "Když máme soubory <file>hello-world</file>, <file>hello-world.desktop.in</"
 "file>, <file>Makefile.am</file>, <file>configure.ac</file> a <file>autogen."
-"sh</file> se správnými informacemi a v pořádku, může soubor <file>README</"
-"file> obsahovat následující instrukce:"
+"sh</file> se správnými informacemi a oprávněními, můžeme vytvořit soubor "
+"<file>README</file> s intrukcemi pro instalaci. Níže je příklad, jak může "
+"README s vhodným popisem vypadat:"
 
 #. (itstool) path: section/code
-#: C/hello-world.js.page:177 C/hello-world.py.page:157
+#: C/hello-world.js.page:179
 #, no-wrap
 msgid ""
-"To build and install this program:\n"
+"To build and install this program, run these commands from a terminal:\n"
 "\n"
-"./autogen.sh --prefix=/home/your_username/.local\n"
+"./autogen.sh --prefix=/home/$USER/.local\n"
 "make install\n"
 "\n"
 "-------------\n"
-"Running the first line above creates the following files:\n"
+"When running the first command $USER will be replaced by your username.\n"
+"\n"
+"Running the first command above creates the following files:\n"
 "\n"
 "aclocal.m4\n"
 "autom4te.cache\n"
@@ -21283,13 +21300,15 @@ msgid ""
 "\n"
 "This will create hello-world-1.0.tar.xz\n"
 msgstr ""
-"To build and install this program:\n"
+"To build and install this program, run these commands from a terminal:\n"
 "\n"
-"./autogen.sh --prefix=/home/your_username/.local\n"
+"./autogen.sh --prefix=/home/$USER/.local\n"
 "make install\n"
 "\n"
 "-------------\n"
-"Running the first line above creates the following files:\n"
+"When running the first command $USER will be replaced by your username.\n"
+"\n"
+"Running the first command above creates the following files:\n"
 "\n"
 "aclocal.m4\n"
 "autom4te.cache\n"
@@ -21551,6 +21570,12 @@ msgstr ""
 msgid "<output style=\"prompt\">$ </output><input>python hello-world.py</input>"
 msgstr "<output style=\"prompt\">$ </output><input>python hello-world.py</input>"
 
+#. (itstool) path: section/p
+#: C/hello-world.py.page:118 C/hello-world.vala.page:95
+msgid "Now let's go through some parts of the <code>.desktop.in</code> file."
+msgstr ""
+"Nyní se pojďme podívat na některé části souboru <code>.desktop.in</code>."
+
 #. (itstool) path: section/code
 #: C/hello-world.py.page:144
 #, no-wrap
@@ -21579,6 +21604,95 @@ msgstr ""
 "desktop_DATA = \\\n"
 "\thello-world.desktop\n"
 
+#. (itstool) path: section/p
+#: C/hello-world.py.page:156
+msgid ""
+"When you have the <file>hello-world</file>, <file>hello-world.desktop.in</"
+"file>, <file>Makefile.am</file>, <file>configure.ac</file> and <file>autogen."
+"sh</file> files with correct information and rights, the <file>README</file> "
+"file can include the following instructions:"
+msgstr ""
+"Když máme soubory <file>hello-world</file>, <file>hello-world.desktop.in</"
+"file>, <file>Makefile.am</file>, <file>configure.ac</file> a <file>autogen."
+"sh</file> se správnými informacemi a v pořádku, může soubor <file>README</"
+"file> obsahovat následující instrukce:"
+
+#. (itstool) path: section/code
+#: C/hello-world.py.page:157
+#, no-wrap
+msgid ""
+"To build and install this program:\n"
+"\n"
+"./autogen.sh --prefix=/home/your_username/.local\n"
+"make install\n"
+"\n"
+"-------------\n"
+"Running the first line above creates the following files:\n"
+"\n"
+"aclocal.m4\n"
+"autom4te.cache\n"
+"config.log\n"
+"config.status\n"
+"configure\n"
+"hello-world.desktop\n"
+"install-sh\n"
+"missing\n"
+"Makefile.in\n"
+"Makefile\n"
+"\n"
+"Running \"make install\", installs the application in /home/your_username/.local/bin\n"
+"and installs the hello-world.desktop file in /home/your_username/.local/share/applications\n"
+"\n"
+"You can now run the application by typing \"Hello World\" in the Overview.\n"
+"\n"
+"----------------\n"
+"To uninstall, type:\n"
+"\n"
+"make uninstall\n"
+"\n"
+"----------------\n"
+"To create a tarball type:\n"
+"\n"
+"make distcheck\n"
+"\n"
+"This will create hello-world-1.0.tar.xz\n"
+msgstr ""
+"To build and install this program:\n"
+"\n"
+"./autogen.sh --prefix=/home/your_username/.local\n"
+"make install\n"
+"\n"
+"-------------\n"
+"Running the first line above creates the following files:\n"
+"\n"
+"aclocal.m4\n"
+"autom4te.cache\n"
+"config.log\n"
+"config.status\n"
+"configure\n"
+"hello-world.desktop\n"
+"install-sh\n"
+"missing\n"
+"Makefile.in\n"
+"Makefile\n"
+"\n"
+"Running \"make install\", installs the application in /home/your_username/.local/bin\n"
+"and installs the hello-world.desktop file in /home/your_username/.local/share/applications\n"
+"\n"
+"You can now run the application by typing \"Hello World\" in the Overview.\n"
+"\n"
+"----------------\n"
+"To uninstall, type:\n"
+"\n"
+"make uninstall\n"
+"\n"
+"----------------\n"
+"To create a tarball type:\n"
+"\n"
+"make distcheck\n"
+"\n"
+"This will create hello-world-1.0.tar.xz\n"
+
 #. (itstool) path: info/title
 #: C/hello-world.vala.page:9
 msgctxt "text"
@@ -30172,10 +30286,10 @@ msgstr ""
 #. (itstool) path: item/p
 #: C/menubutton.js.page:33 C/menubutton.vala.page:33
 msgid ""
-"<link href=\"http://developer.gnome.org/gtk3/3.5/gtk3-GtkMenuButton.html";
+"<link href=\"https://developer.gnome.org/gtk3/unstable/GtkMenuButton.html";
 "\">MenuButton</link>"
 msgstr ""
-"<link href=\"http://developer.gnome.org/gtk3/3.5/gtk3-GtkMenuButton.html";
+"<link href=\"https://developer.gnome.org/gtk3/unstable/GtkMenuButton.html";
 "\">MenuButton</link>"
 
 #. (itstool) path: note/p
@@ -38998,7 +39112,7 @@ msgid ""
 "\n"
 "\n"
 "  /* Create the Vertical scale. This time, we will see what happens \n"
-"   * when the digits arent initially set.\n"
+"   * when the digits aren't initially set.\n"
 "   */\n"
 "  v_scale = gtk_scale_new (GTK_ORIENTATION_VERTICAL, vadjustment);\n"
 "  gtk_widget_set_vexpand (v_scale, TRUE);\n"
@@ -43498,19 +43612,19 @@ msgstr ""
 "sys.exit(exit_status)\n"
 
 #. (itstool) path: note/p
-#: C/spinner.py.page:33
+#: C/spinner.py.page:33 C/statusbar.py.page:34
 msgid ""
 "<code>Gdk.keyval_name(event.keyval)</code> converts the key value "
 "<code>event.keyval</code> into a symbolic name. The names and corresponding "
-"key values can be found <link href=\"http://git.gnome.org/browse/gtk+/tree/";
-"gdk/gdkkeysyms.h\">here</link>,but for instance <code>GDK_KEY_BackSpace</"
-"code> becomes the string <code>\"BackSpace\"</code>."
+"key values can be found <link href=\"https://gitlab.gnome.org/GNOME/gtk/blob/";
+"master/gdk/gdkkeysyms.h\">here</link>, but for instance "
+"<code>GDK_KEY_BackSpace</code> becomes the string <code>\"BackSpace\"</code>."
 msgstr ""
 "<code>Gdk.keyval_name(event.keyval)</code> převádí hodnotu klávesy "
 "<code>event.keyval</code> na symbolický název. Názvy a odpovídající hodnoty "
-"kláves můžete najít <link href=\"http://git.gnome.org/browse/gtk+/tree/gdk/";
-"gdkkeysyms.h\">zde</link>, ale například <code>GDK_KEY_BackSpace</code> se "
-"změní na řetězec <code>\"BackSpace\"</code>."
+"kláves můžete najít <link href=\"https://gitlab.gnome.org/GNOME/gtk/blob/";
+"master/gdk/gdkkeysyms.h\">zde</link>, ale například <code>GDK_KEY_BackSpace"
+"</code> se změní na řetězec <code>\"BackSpace\"</code>."
 
 #. (itstool) path: item/p
 #: C/spinner.py.page:42 C/togglebutton.py.page:46
@@ -44960,21 +45074,6 @@ msgstr ""
 "exit_status = app.run(sys.argv)\n"
 "sys.exit(exit_status)\n"
 
-#. (itstool) path: note/p
-#: C/statusbar.py.page:34
-msgid ""
-"<code>Gdk.keyval_name(event.keyval)</code> converts the key value "
-"<code>event.keyval</code> into a symbolic name. The names and corresponding "
-"key values can be found <link href=\"http://git.gnome.org/browse/gtk+/tree/";
-"gdk/gdkkeysyms.h\">here</link>, but for instance <code>GDK_KEY_BackSpace</"
-"code> becomes the string <code>\"BackSpace\"</code>."
-msgstr ""
-"<code>Gdk.keyval_name(event.keyval)</code> převádí hodnotu klávesy "
-"<code>event.keyval</code> na symbolický název. Názvy a odpovídající hodnoty "
-"kláves můžete najít <link href=\"http://git.gnome.org/browse/gtk+/tree/gdk/";
-"gdkkeysyms.h\">zde</link>, ale například <code>GDK_KEY_BackSpace</code> se "
-"změní na řetězec <code>\"BackSpace\"</code>."
-
 #. (itstool) path: section/title
 #: C/statusbar.py.page:40
 msgid "Useful methods for a Statusbar widget"
@@ -45038,11 +45137,11 @@ msgstr ""
 #. (itstool) path: item/p
 #: C/statusbar.py.page:54
 msgid ""
-"<link href=\"http://developer.gnome.org/gdk/stable/gdk-Keyboard-Handling.html";
-"\">Gdk - Key Values</link>"
+"<link href=\"https://developer.gnome.org/gdk3/stable/gdk3-Keyboard-Handling.";
+"html\">Gdk - Key Values</link>"
 msgstr ""
-"<link href=\"http://developer.gnome.org/gdk/stable/gdk-Keyboard-Handling.html";
-"\">Gdk - Key Values</link>"
+"<link href=\"https://developer.gnome.org/gdk3/stable/gdk3-Keyboard-Handling.";
+"html\">Gdk - Key Values</link>"
 
 #. (itstool) path: info/title
 #: C/statusbar.vala.page:8
@@ -52623,7 +52722,7 @@ msgid ""
 "  /* set the text for the tooltip */\n"
 "  gtk_tooltip_set_text (tooltip, \"Undo your last action\");\n"
 "   \n"
-"  /* set an icon fot the tooltip */\n"
+"  /* set an icon for the tooltip */\n"
 "  gtk_tooltip_set_icon_from_stock(tooltip, \"gtk-undo\", GTK_ICON_SIZE_MENU);\n"
 "\n"
 "  /* show the tooltip */\n"
@@ -53155,7 +53254,7 @@ msgid ""
 "    _undoTooltipCallback(widget, x, y, keyboard_mode, tooltip) {\n"
 "        // set the text for the tooltip\n"
 "        tooltip.set_text(\"Undo your last action\");\n"
-"        // set an icon fot the tooltip\n"
+"        // set an icon for the tooltip\n"
 "        tooltip.set_icon_from_stock(Gtk.STOCK_UNDO, Gtk.IconSize.MENU);\n"
 "        // show the tooltip\n"
 "        return true;\n"
@@ -53463,7 +53562,7 @@ msgid ""
 "    def undo_tooltip_callback(self, widget, x, y, keyboard_mode, tooltip):\n"
 "        # set the text for the tooltip\n"
 "        tooltip.set_text(\"Undo your last action\")\n"
-"        # set an icon fot the tooltip\n"
+"        # set an icon for the tooltip\n"
 "        tooltip.set_icon_from_stock(\"gtk-undo\", Gtk.IconSize.MENU)\n"
 "        # show the tooltip\n"
 "        return True\n"
@@ -53807,7 +53906,7 @@ msgid ""
 "\t\t/* set the text for the tooltip */\n"
 "        \ttooltip.set_text (\"Undo your last action\");\n"
 "\t\t\n"
-"\t\t/* set an icon fot the tooltip */\n"
+"\t\t/* set an icon for the tooltip */\n"
 "\t\ttooltip.set_icon_from_stock(\"gtk-undo\", Gtk.IconSize.MENU);\n"
 "\n"
 "        \t/* show the tooltip */\n"
@@ -57558,7 +57657,7 @@ msgid ""
 "You need the .desktop file, autogen.sh, Makefile.am, configure.ac and as a "
 "new file: myapp.sh.in file. Hacking the autotools file is a complicated "
 "field. More information can be found in many different sources, <link href="
-"\"http://en.wikipedia.org/wiki/GNU_build_system\";>the wikipedia article</"
+"\"http://en.wikipedia.org/wiki/GNU_build_system\";>the Wikipedia article</"
 "link> provides a good overview on the subject."
 msgstr ""
 "To, že máté ve své složce více než jeden soubor, trochu komplikuje použití "
@@ -59776,14 +59875,14 @@ msgstr ""
 #: C/custom-gsource.c.page:293
 msgid ""
 "Another example is a custom source to interface GnuTLS with GLib in its "
-"<code>GTlsConnection</code> implementation. <link href=\"https://git.gnome.";
-"org/browse/glib-networking/tree/tls/gnutls/gtlsconnection-gnutls."
-"c#n871\"><code>GTlsConnectionGnutlsSource</code></link> synchronizes the "
+"<code>GTlsConnection</code> implementation. <link href=\"https://gitlab.";
+"gnome.org/GNOME/glib-networking/blob/master/tls/gnutls/gtlsconnection-gnutls."
+"c#L1154\"><code>GTlsConnectionGnutlsSource</code></link> synchronizes the "
 "main thread and a TLS worker thread which performs the blocking TLS "
 "operations."
 msgstr ""
-"Jiným příkladem je vlastní zdroj k rozhraní GnuTLS s GLib v jeho "
-"implementaci <code>GTlsConnection</code>. <link href=\"https://git.gnome.org/";
-"browse/glib-networking/tree/tls/gnutls/gtlsconnection-gnutls."
-"c#n871\"><code>GTlsConnectionGnutlsSource</code></link> synchronizuje hlavní "
-"vlákno s pracovním vláknem TLS, které provádí blokování operací TLS."
+"Jiným příkladem je vlastní zdroj k rozhraní GnuTLS s GLib v jeho implementaci "
+"<code>GTlsConnection</code>. <link href=\"https://gitlab.gnome.org/GNOME/";
+"glib-networking/blob/master/tls/gnutls/gtlsconnection-gnutls.c#L1154\"><code>"
+"GTlsConnectionGnutlsSource</code></link> synchronizuje hlavní vlákno s "
+"pracovním vláknem TLS, které provádí blokování operací TLS."
diff --git a/platform-overview/cs/cs.po b/platform-overview/cs/cs.po
index 2b50c6c0..98a2e99b 100644
--- a/platform-overview/cs/cs.po
+++ b/platform-overview/cs/cs.po
@@ -1,13 +1,13 @@
 # Czech translation of GNOME User Guide.
 #
 # Lucas Lommer <llommer svn gnome org>, 2008, 2009.
-# Marek Černocký <marek manet cz>, 2015, 2016, 2017, 2018.
+# Marek Černocký <marek manet cz>, 2015, 2016, 2017, 2018, 2019.
 #
 msgid ""
 msgstr ""
 "Project-Id-Version: user-guide\n"
-"POT-Creation-Date: 2017-12-04 19:33+0000\n"
-"PO-Revision-Date: 2018-03-02 12:25+0100\n"
+"POT-Creation-Date: 2019-03-01 02:11+0000\n"
+"PO-Revision-Date: 2019-03-05 10:35+0100\n"
 "Last-Translator: Marek Černocký <marek manet cz>\n"
 "Language-Team: čeština <gnome-cs-list gnome org>\n"
 "Language: cs\n"
@@ -106,13 +106,13 @@ msgstr ""
 #. (itstool) path: note/p
 #: C/dev-help-appmenu.page:37
 msgid ""
-"This example, based on <app href=\"https://git.gnome.org/browse/cheese/tree/";
-"src/cheese-main.vala\">Cheese</app>, assumes that your application is "
-"written in Vala. It will be slightly different for other programming "
-"languages."
+"This example, based on <app href=\"https://gitlab.gnome.org/GNOME/cheese/";
+"blob/master/src/cheese-main.vala\">Cheese</app>, assumes that your "
+"application is written in Vala. It will be slightly different for other "
+"programming languages."
 msgstr ""
-"Tento příklad vycházející z aplikace <app href=\"https://git.gnome.org/";
-"browse/cheese/tree/src/cheese-main.vala\">Chees</app> předpokládá, že "
+"Tento příklad vycházející z aplikace <app href=\"https://gitlab.gnome.org/";
+"GNOME/cheese/blob/master/src/cheese-main.vala\">Chees</app> předpokládá, že "
 "aplikace je napsána v jazyce Vala. U jiných jazyků se to může lechce lišit."
 
 #. (itstool) path: example/p
@@ -1591,14 +1591,14 @@ msgstr ""
 #: C/overview-communication.page:91
 msgid ""
 "(<link href=\"https://wiki.gnome.org/Apps/Empathy\";>Website</link> | <link "
-"href=\"https://wiki.gnome.org/Apps/Empathy?action=AttachFile&amp;do=get&amp;";
-"target=empathy.png\">Screenshot</link> | <link href=\"https://git.gnome.org/";
-"browse/empathy/\">Empathy source code</link> )"
+"href=\"https://wiki.gnome.org/Apps/Empathy#Screenshots\";>Screenshots</link> "
+"| <link href=\"https://gitlab.gnome.org/GNOME/empathy/\";>Empathy source "
+"code</link> )"
 msgstr ""
-"(<link href=\"https://wiki.gnome.org/Apps/Empathy\";>Webové stránky</link> | "
-"<link href=\"https://wiki.gnome.org/Apps/Empathy?action=AttachFile&amp;";
-"do=get&amp;target=empathy.png\">Snímky obrazovky</link> | <link href="
-"\"https://git.gnome.org/browse/empathy/\";>Zdrojový kód Empathy</link>)"
+"( <link href=\"https://wiki.gnome.org/Apps/Empathy\";>Webové stránky</link> "
+"| <link href=\"https://wiki.gnome.org/Apps/Empathy#Screenshots\";>Snímky "
+"obrazovky</link> | <link href=\"https://gitlab.gnome.org/GNOME/empathy/";
+"\">Zdrojový kód</link> )"
 
 #. (itstool) path: item/p
 #: C/overview-communication.page:95
@@ -1614,15 +1614,14 @@ msgstr ""
 #: C/overview-communication.page:96
 msgid ""
 "(<link href=\"https://wiki.gnome.org/Projects/Games\";>Website</link> | <link "
-"href=\"https://wiki.gnome.org/Apps/Chess?action=AttachFile&amp;do=get&amp;";
-"target=gnome-chess.png\">Screenshot</link> | <link href=\"https://git.gnome.";
-"org/browse/gnome-chess/\">GLChess online multiplayer code</link> )"
+"href=\"https://wiki.gnome.org/Apps/Chess#Screenshots\";>Screenshot</link> | "
+"<link href=\"https://gitlab.gnome.org/GNOME/gnome-chess/\";>GNOME Chess "
+"online multiplayer code</link> )"
 msgstr ""
 "(<link href=\"https://wiki.gnome.org/Projects/Games\";>Webové stránky</link> "
-"| <link href=\"https://wiki.gnome.org/Apps/Chess?action=AttachFile&amp;";
-"do=get&amp;target=gnome-chess.png\">Snímky obrazovky</link> | <link href="
-"\"https://git.gnome.org/browse/gnome-chess/\";>Kód pro hraní GLChess on-line "
-"více hráči</link>)"
+"| <link href=\"https://wiki.gnome.org/Apps/Chess#Screenshots\";>Snímky "
+"obrazovky</link> | <link href=\"https://gitlab.gnome.org/GNOME/gnome-chess/\";>"
+"Kód pro hraní GLChess on-line více hráči</link>)"
 
 #. (itstool) path: item/p
 #: C/overview-communication.page:100
@@ -1639,13 +1638,13 @@ msgstr ""
 msgid ""
 "(<link href=\"https://wiki.gnome.org/Apps/Rhythmbox\";>Website</link> | <link "
 "href=\"https://wiki.gnome.org/Apps/Rhythmbox/Screenshots\";>Screenshots</"
-"link> | <link href=\"https://git.gnome.org/browse/rhythmbox/tree/plugins/daap";
-"\">DAAP Code</link> )"
+"link> | <link href=\"https://gitlab.gnome.org/GNOME/rhythmbox/tree/master/";
+"plugins/daap\">DAAP Code</link> )"
 msgstr ""
 "(<link href=\"https://wiki.gnome.org/Apps/Rhythmbox\";>Webové stránky</link> "
 "| <link href=\"https://wiki.gnome.org/Apps/Rhythmbox/Screenshots\";>Snímky "
-"obrazovky</link> | <link href=\"https://git.gnome.org/browse/rhythmbox/tree/";
-"plugins/daap\">Kód DAAP</link> )"
+"obrazovky</link> | <link href=\"https://gitlab.gnome.org/GNOME/rhythmbox/tree/";
+"master/plugins/daap\">Kód DAAP</link> )"
 
 #. (itstool) path: info/desc
 #: C/overview-io.page:22
@@ -1733,11 +1732,11 @@ msgstr ""
 #: C/overview-io.page:74
 msgid ""
 "( <link href=\"https://wiki.gnome.org/Apps/Documents\";>Website</link> | "
-"<link href=\"https://git.gnome.org/browse/gnome-documents\";>Source code</"
+"<link href=\"https://gitlab.gnome.org/GNOME/gnome-documents\";>Source code</"
 "link> )"
 msgstr ""
 "( <link href=\"https://wiki.gnome.org/Apps/Documents\";>Webové stránky</link> "
-"| <link href=\"https://git.gnome.org/browse/gnome-documents\";>Zdrojový kód</"
+"| <link href=\"https://gitlab.gnome.org/GNOME/gnome-documents\";>Zdrojový kód</"
 "link> )"
 
 #. (itstool) path: item/p
@@ -1754,12 +1753,12 @@ msgstr ""
 msgid ""
 "( <link href=\"https://wiki.gnome.org/Apps/Nautilus\";>Website</link> | <link "
 "href=\"https://wiki.gnome.org/Apps/Nautilus/Screenshots\";>Screenshots</link> "
-"| <link href=\"https://git.gnome.org/browse/nautilus\";>Source code</link> )"
+"| <link href=\"https://gitlab.gnome.org/GNOME/nautilus\";>Source code</link> )"
 msgstr ""
 "( <link href=\"https://wiki.gnome.org/Apps/Nautilus\";>Webové stránky</link> "
 "| <link href=\"https://wiki.gnome.org/Apps/Nautilus/Screenshots\";>Snímky "
-"obrazovky</link> | <link href=\"https://git.gnome.org/browse/nautilus";
-"\">Zdrojový kód</link> )"
+"obrazovky</link> | <link href=\"https://gitlab.gnome.org/GNOME/nautilus\";>"
+"Zdrojový kód</link> )"
 
 #. (itstool) path: info/desc
 #: C/overview-media.page:17
@@ -1918,14 +1917,14 @@ msgstr "<em style=\"strong\">Videa</em> je multimediální přehrávač GNOME."
 #: C/overview-media.page:99
 msgid ""
 "( <link href=\"https://wiki.gnome.org/Apps/Videos\";>Website</link> | <link "
-"href=\"https://git.gnome.org/browse/totem/plain/data/appdata/ss-main.png";
-"\">Screenshot</link> | <link href=\"https://git.gnome.org/browse/totem/";
-"\">Source code</link> )"
+"href=\"https://gitlab.gnome.org/GNOME/totem/blob/master/data/appdata/ss-";
+"videos.png\">Screenshot</link> | <link href=\"https://gitlab.gnome.org/GNOME/";
+"totem/\">Source code</link> )"
 msgstr ""
 "( <link href=\"https://wiki.gnome.org/Apps/Videos\";>Webové stránky</link> | "
-"<link href=\"https://git.gnome.org/browse/totem/plain/data/appdata/ss-main.";
-"png\">Snímek obrazovky</link> | <link href=\"https://git.gnome.org/browse/";
-"totem/\">Zdrojový kód</link> )"
+"<link href=\"https://gitlab.gnome.org/GNOME/totem/blob/master/data/appdata/ss-";
+"videos.png\">Snímek obrazovky</link> | <link href=\"https://gitlab.gnome.org/";
+"GNOME/totem/\">Zdrojový kód</link> )"
 
 #. (itstool) path: item/p
 #: C/overview-media.page:102
@@ -1940,11 +1939,11 @@ msgstr ""
 #: C/overview-media.page:104
 msgid ""
 "( <link href=\"http://www.pitivi.org/\";>Website</link> | <link href=\"http://";
-"www.pitivi.org/?go=screenshots\">Screenshots</link> | <link href=\"http://";
-"www.pitivi.org/?go=download\">Source code</link> )"
+"www.pitivi.org/?go=tour\">Screenshot</link> | <link href=\"http://www.pitivi.";
+"org/?go=download\">Source code</link> )"
 msgstr ""
 "( <link href=\"http://www.pitivi.org/\";>Webové stránky</link> | <link href="
-"\"http://www.pitivi.org/?go=screenshots\";>Snímky obrazovky</link> | <link "
+"\"http://www.pitivi.org/?go=tour\";>Snímky obrazovky</link> | <link "
 "href=\"http://www.pitivi.org/?go=download\";>Zdrojový kód</link> )"
 
 #. (itstool) path: info/desc
@@ -2059,14 +2058,14 @@ msgstr ""
 #: C/overview-net.page:84
 msgid ""
 "( <link href=\"https://wiki.gnome.org/Apps/Web\";>Website</link> | <link href="
-"\"https://git.gnome.org/browse/epiphany/plain/data/screenshot.png";
-"\">Screenshot</link> | <link href=\"https://git.gnome.org/browse/epiphany/";
+"\"https://gitlab.gnome.org/GNOME/epiphany/raw/master/data/screenshot.png";
+"\">Screenshot</link> | <link href=\"https://gitlab.gnome.org/GNOME/epiphany/";
 "\">Source code</link> )"
 msgstr ""
 "( <link href=\"https://wiki.gnome.org/Apps/Web\";>Webové stránky</link> | "
-"<link href=\"https://git.gnome.org/browse/epiphany/plain/data/screenshot.png";
-"\">Snímek obrazovky</link> | <link href=\"https://git.gnome.org/browse/";
-"epiphany/\">Zdrojový kód</link> )"
+"<link href=\"https://gitlab.gnome.org/GNOME/epiphany/raw/master/data/";
+"screenshot.png\">Snímek obrazovky</link> | <link href=\"https://gitlab.gnome.";
+"org/GNOME/epiphany/\">Zdrojový kód</link> )"
 
 #. (itstool) path: item/p
 #: C/overview-net.page:87
@@ -2085,11 +2084,11 @@ msgstr ""
 msgid ""
 "( <link href=\"https://wiki.gnome.org/Projects/GnomeShell\";>Website</link> | "
 "<link href=\"http://www.gnome.org/gnome-3/\";>Screenshot</link> | <link href="
-"\"https://git.gnome.org/browse/gnome-shell/\";>Source Code</link> )"
+"\"https://gitlab.gnome.org/GNOME/gnome-shell/\";>Source Code</link> )"
 msgstr ""
 "( <link href=\"https://wiki.gnome.org/Projects/GnomeShell\";>Webové stránky</"
 "link> | <link href=\"http://www.gnome.org/gnome-3/\";>Snímek obrazovky</link> "
-"| <link href=\"https://git.gnome.org/browse/gnome-shell/\";>Zdrojový kód</"
+"| <link href=\"https://gitlab.gnome.org/GNOME/gnome-shell/\";>Zdrojový kód</"
 "link> )"
 
 #. (itstool) path: info/desc
@@ -2170,13 +2169,13 @@ msgstr ""
 #. (itstool) path: item/p
 #: C/overview-settings.page:70
 msgid ""
-"( <link href=\"https://developer.gnome.org/dconf/unstable/dconf-editor.html";
-"\">Website</link> | <link href=\"https://git.gnome.org/browse/dconf/tree/";
-"editor\">Source code</link> )"
+"( <link href=\"https://wiki.gnome.org/Apps/DconfEditor\";>Website</link> | "
+"<link href=\"https://gitlab.gnome.org/GNOME/dconf-editor/\";>Source code</"
+"link> )"
 msgstr ""
-"( <link href=\"https://developer.gnome.org/dconf/unstable/dconf-editor.html";
-"\">Webové stránky</link> | <link href=\"https://git.gnome.org/browse/dconf/";
-"tree/editor\">Zdrojový kód</link> )"
+"( <link href=\"https://wiki.gnome.org/Apps/DconfEditor\";>Webové stránky"
+"</link> | <link href=\"https://gitlab.gnome.org/GNOME/dconf-editor/\";>"
+"Zdrojový kód</link> )"
 
 #. (itstool) path: info/desc
 #: C/overview-ui.page:17
@@ -2332,10 +2331,10 @@ msgstr ""
 #: C/overview-ui.page:98
 msgid ""
 "( <link href=\"https://wiki.gnome.org/Apps/Web\";>Website</link> | <link href="
-"\"https://git.gnome.org/browse/epiphany/\";>Source code</link> )"
+"\"https://gitlab.gnome.org/GNOME/epiphany/\";>Source code</link> )"
 msgstr ""
 "( <link href=\"https://wiki.gnome.org/Apps/Web\";>Webové stránky</link> | "
-"<link href=\"https://git.gnome.org/browse/epiphany/\";>Zdrojový kód</link> )"
+"<link href=\"https://gitlab.gnome.org/GNOME/epiphany/\";>Zdrojový kód</link> )"
 
 #. (itstool) path: item/p
 #: C/overview-ui.page:101
@@ -2349,13 +2348,13 @@ msgstr ""
 #. (itstool) path: item/p
 #: C/overview-ui.page:104
 msgid ""
-"( <link href=\"http://monodevelop.com/\";>Website</link> | <link href="
-"\"http://monodevelop.com/Screenshots\";>Screenshots</link> | <link href="
+"( <link href=\"https://www.monodevelop.com/\";>Website</link> | <link href="
+"\"https://www.monodevelop.com/screenshots/\";>Screenshots</link> | <link href="
 "\"https://github.com/mono/monodevelop\";>Source code</link> )"
 msgstr ""
-"( <link href=\"http://monodevelop.com/\";>Webové stránky</link> | <link href="
-"\"http://monodevelop.com/Screenshots\";>Snímky obrazovky</link> | <link href="
-"\"https://github.com/mono/monodevelop\";>Zdrojový kód</link> )"
+"( <link href=\"https://www.monodevelop.com/\";>Webové stránky</link> | <link "
+"href=\"https://www.monodevelop.com/screenshots/\";>Snímky obrazovky</link> | "
+"<link href=\"https://github.com/mono/monodevelop\";>Zdrojový kód</link> )"
 
 #. (itstool) path: item/p
 #: C/overview-ui.page:107
@@ -2370,10 +2369,10 @@ msgstr ""
 #: C/overview-ui.page:108
 msgid ""
 "( <link href=\"https://wiki.gnome.org/Apps/Videos\";>Website</link> | <link "
-"href=\"https://git.gnome.org/browse/totem/\";>Source code</link> )"
+"href=\"https://gitlab.gnome.org/GNOME/totem/\";>Source code</link> )"
 msgstr ""
 "( <link href=\"https://wiki.gnome.org/Apps/Videos\";>Webové stránky</link> | "
-"<link href=\"https://git.gnome.org/browse/totem/\";>Zdrojový kód</link> )"
+"<link href=\"https://gitlab.gnome.org/GNOME/totem/\";>Zdrojový kód</link> )"
 
 #. (itstool) path: credit/years
 #: C/tech-atk.page:14 C/tech-cairo.page:13 C/tech-clutter.page:13
@@ -2979,7 +2978,7 @@ msgstr ""
 
 #. (itstool) path: info/desc
 #: C/tech-eds.page:18
-msgid "Desktop-wide addressbook for contacts and calendar"
+msgid "Desktop-wide address book for contacts and calendar"
 msgstr "Adresář s kontakty a kalendářem k dispozici napříč celým systémem"
 
 #. (itstool) path: page/title
@@ -3848,31 +3847,31 @@ msgstr ""
 
 #. (itstool) path: item/p
 #: C/tech-gtk.page:51
-msgid "<link href=\"http://gtk.org/\";>Official web site</link>"
-msgstr "<link href=\"http://gtk.org/\";>Oficiální webové stránky</link>"
+msgid "<link href=\"https://www.gtk.org/\";>Official web site</link>"
+msgstr "<link href=\"https://www.gtk.org/\";>Oficiální webové stránky</link>"
 
 #. (itstool) path: item/p
 #: C/tech-gtk.page:52
 msgid ""
-"<link href=\"http://developer.gnome.org/gnome-devel-demos/stable/\";>Demo "
+"<link href=\"https://developer.gnome.org/gnome-devel-demos/stable/\";>Demo "
 "tutorial</link>"
 msgstr ""
-"<link href=\"http://developer.gnome.org/gnome-devel-demos/stable/\";>Průvodce "
+"<link href=\"https://developer.gnome.org/gnome-devel-demos/stable/\";>Průvodce "
 "ukázkami</link>"
 
 #. (itstool) path: item/p
 #: C/tech-gtk.page:53
 msgid ""
-"<link href=\"http://developer.gnome.org/gtk3/stable/\";>Reference Manual</"
+"<link href=\"https://developer.gnome.org/gtk3/stable/\";>Reference Manual</"
 "link>"
 msgstr ""
-"<link href=\"http://developer.gnome.org/gtk3/stable/\";>Referenční příručka</"
+"<link href=\"https://developer.gnome.org/gtk3/stable/\";>Referenční příručka</"
 "link>"
 
 #. (itstool) path: item/p
 #: C/tech-gtk.page:54
-msgid "<link href=\"https://git.gnome.org/browse/gtk+/\";>git repository</link>"
-msgstr "<link href=\"https://git.gnome.org/browse/gtk+/\";>Repozitář git</link>"
+msgid "<link href=\"https://gitlab.gnome.org/GNOME/gtk/\";>git repository</link>"
+msgstr "<link href=\"https://gitlab.gnome.org/GNOME/gtk/\";>Repozitář git</link>"
 
 #. (itstool) path: item/p
 #: C/tech-gtk.page:55
@@ -5407,29 +5406,3 @@ msgstr ""
 "\n"
 "let app = new HelloWorld();\n"
 "app.application.run(ARGV);\n"
-
-#~ msgid ""
-#~ "Declare <code>HelloWorld</code> as a new <code>Lang</code> class. Gjs "
-#~ "requires classes to have the Name property defined."
-#~ msgstr ""
-#~ "Deklarujte <code>HelloWorld</code> jako novou třídu jazyka <code>Lang</"
-#~ "code>. Gjs vyžaduje, aby třídy měly definovánu vlastnost Name."
-
-#~ msgid ""
-#~ "\n"
-#~ "const HelloWorld = new Lang.Class({\n"
-#~ "    Name: 'HelloWorld',\n"
-#~ msgstr ""
-#~ "\n"
-#~ "const HelloWorld = new Lang.Class({\n"
-#~ "    Name: 'HelloWorld',\n"
-
-#~ msgid ""
-#~ "Import <code>lang</code> for the <code>bind</code> function and <code>gi."
-#~ "Gtk</code> for <code>Gtk</code> functions."
-#~ msgstr ""
-#~ "Naimportujte <code>lang</code> pro funkci <code>bind</code> a <code>gi."
-#~ "Gtk</code> pro funkce <code>Gtk</code>."
-
-#~ msgid "Enchant"
-#~ msgstr "Enchant"
diff --git a/programming-guidelines/cs/cs.po b/programming-guidelines/cs/cs.po
index 42e120a4..1c4d1ec3 100644
--- a/programming-guidelines/cs/cs.po
+++ b/programming-guidelines/cs/cs.po
@@ -1,13 +1,13 @@
 # Czech translation for gnome-devel-docs.
 # Copyright (C) 2016 gnome-devel-docs's COPYRIGHT HOLDER
 # This file is distributed under the same license as the gnome-devel-docs package.
-# Marek Černocký <marek manet cz>, 2016, 2017.
+# Marek Černocký <marek manet cz>, 2016, 2017, 2019.
 #
 msgid ""
 msgstr ""
 "Project-Id-Version: gnome-devel-docs master\n"
-"POT-Creation-Date: 2017-08-01 11:33+0000\n"
-"PO-Revision-Date: 2017-08-05 16:22+0200\n"
+"POT-Creation-Date: 2019-03-01 02:11+0000\n"
+"PO-Revision-Date: 2019-03-10 00:11+0100\n"
 "Last-Translator: Marek Černocký <marek manet cz>\n"
 "Language-Team: čeština <gnome-cs-list gnome org>\n"
 "Language: cs\n"
@@ -106,10 +106,10 @@ msgstr ""
 "a opouštění funkcí v jediném bodě."
 
 #. (itstool) path: credit/name
-#: C/api-stability.page:10 C/databases.page:11 C/documentation.page:16
-#: C/file-system.page:11 C/gerror.page:11 C/glist.page:11 C/index.page:21
-#: C/introspection.page:10 C/logging.page:11 C/main-contexts.page:11
-#: C/memory-management.page:10 C/namespacing.page:10
+#: C/api-stability.page:10 C/async-programming.page:11 C/databases.page:11
+#: C/documentation.page:16 C/file-system.page:11 C/gerror.page:11
+#: C/glist.page:11 C/index.page:21 C/introspection.page:10 C/logging.page:11
+#: C/main-contexts.page:11 C/memory-management.page:10 C/namespacing.page:10
 #: C/parallel-installability.page:18 C/preconditions.page:11
 #: C/threading.page:11 C/tooling.page:10 C/unit-testing.page:10
 #: C/version-control.page:10 C/versioning.page:10
@@ -117,12 +117,12 @@ msgid "Philip Withnall"
 msgstr "Philip Withnall"
 
 #. (itstool) path: credit/years
-#: C/api-stability.page:12 C/databases.page:13 C/documentation.page:18
-#: C/file-system.page:13 C/gerror.page:13 C/glist.page:13 C/index.page:23
-#: C/introspection.page:12 C/logging.page:13 C/memory-management.page:12
-#: C/parallel-installability.page:20 C/preconditions.page:13
-#: C/threading.page:13 C/tooling.page:12 C/unit-testing.page:12
-#: C/version-control.page:12 C/versioning.page:12
+#: C/api-stability.page:12 C/async-programming.page:13 C/databases.page:13
+#: C/documentation.page:18 C/file-system.page:13 C/gerror.page:13
+#: C/glist.page:13 C/index.page:23 C/introspection.page:12 C/logging.page:13
+#: C/memory-management.page:12 C/parallel-installability.page:20
+#: C/preconditions.page:13 C/threading.page:13 C/tooling.page:12
+#: C/unit-testing.page:12 C/version-control.page:12 C/versioning.page:12
 msgid "2015"
 msgstr "2015"
 
@@ -137,11 +137,12 @@ msgid "API stability"
 msgstr "Stabilita API"
 
 #. (itstool) path: synopsis/title
-#: C/api-stability.page:23 C/databases.page:24 C/documentation.page:32
-#: C/file-system.page:24 C/introspection.page:23 C/logging.page:26
-#: C/main-contexts.page:27 C/memory-management.page:65 C/namespacing.page:25
-#: C/parallel-installability.page:33 C/threading.page:24 C/tooling.page:45
-#: C/unit-testing.page:23 C/version-control.page:23 C/versioning.page:23
+#: C/api-stability.page:23 C/async-programming.page:26 C/databases.page:24
+#: C/documentation.page:32 C/file-system.page:24 C/introspection.page:23
+#: C/logging.page:26 C/main-contexts.page:27 C/memory-management.page:65
+#: C/namespacing.page:25 C/parallel-installability.page:33 C/threading.page:24
+#: C/tooling.page:45 C/unit-testing.page:23 C/version-control.page:23
+#: C/versioning.page:23
 msgid "Summary"
 msgstr "Shrnutí"
 
@@ -425,7 +426,7 @@ msgstr "Tématem stability API se zabývají následující články:"
 #. (itstool) path: item/p
 #: C/api-stability.page:185
 msgid ""
-"<link href=\"http://en.wikipedia.org/wiki/Application_programming_interface";
+"<link href=\"https://en.wikipedia.org/wiki/Application_programming_interface";
 "\">Wikipedia page on APIs</link>"
 msgstr ""
 "<link href=\"https://cs.wikipedia.org/wiki/API\";>Stránka o API na Wikipedii</"
@@ -434,7 +435,7 @@ msgstr ""
 #. (itstool) path: item/p
 #: C/api-stability.page:189
 msgid ""
-"<link href=\"http://en.wikipedia.org/wiki/Application_binary_interface";
+"<link href=\"https://en.wikipedia.org/wiki/Application_binary_interface";
 "\">Wikipedia page on ABIs</link>"
 msgstr ""
 "<link href=\"https://cs.wikipedia.org/wiki/ABI\";>Stránka o ABI na Wikipedii</"
@@ -449,6 +450,2255 @@ msgstr ""
 "<link href=\"http://dbus.freedesktop.org/doc/dbus-api-design.html#api-";
 "versioning\">Dokumentace k číslování verzí D-Bus</link>"
 
+#. (itstool) path: info/desc
+#: C/async-programming.page:18
+msgid "Use of GLib-style asynchronous methods in various situations"
+msgstr "Jak použít asynchronní metody ve stylu GLib v různých situacích"
+
+#. (itstool) path: page/title
+#: C/async-programming.page:23
+msgid "Asynchronous Programming"
+msgstr "Asynchronní programování"
+
+#. (itstool) path: item/p
+#: C/async-programming.page:29
+msgid ""
+"Use asynchronous calls in preference to synchronous calls or explicit use of "
+"threads (<link xref=\"#concepts\"/>)"
+msgstr ""
+"Dávejte přednost asynchronním voláním před synchronním voláním, nebo "
+"výslovným použitím vláken (<link xref=\"#concepts\"/>)"
+
+#. (itstool) path: item/p
+#: C/async-programming.page:33
+msgid ""
+"Learn and follow the GLib pattern for declaring asynchronous APIs (<link "
+"xref=\"#api-pattern\"/>)"
+msgstr ""
+"Naučte se a dodržujte vzory GLib pro deklarování asynchronních API (<link "
+"xref=\"#api-pattern\"/>)"
+
+#. (itstool) path: item/p
+#: C/async-programming.page:37
+msgid ""
+"Place callbacks from asynchronous functions in order down the file, so "
+"control flow is easy to follow (<link xref=\"#single-call\"/>)"
+msgstr ""
+"Zpětná volání z asynchronních funkcí umístěte v souboru v pořadí jejich "
+"provádění, aby byl snadný přehled toku provádění kódu (<link xref=\"#single-"
+"call\"/>)"
+
+#. (itstool) path: item/p
+#: C/async-programming.page:41
+msgid ""
+"Use the presence of a <link href=\"https://developer.gnome.org/gio/stable/";
+"GTask.html\"><code>GTask</code></link> or <link href=\"https://developer.";
+"gnome.org/gio/stable/GCancellable.html\"><code>GCancellable</code></link> to "
+"indicate whether an operation is ongoing (<link xref=\"#single-call\"/>, "
+"<link xref=\"#gtask\"/>)"
+msgstr ""
+"Používejte přítomnosti <link href=\"https://developer.gnome.org/gio/stable/";
+"GTask.html\"><code>GTask</code></link> nebo <link href=\"https://developer.";
+"gnome.org/gio/stable/GCancellable.html\"><code>GCancellable</code></link> k "
+"indikaci, jestli operace probíhá (<link xref=\"#single-call\"/>, <link xref="
+"\"#gtask\"/>)"
+
+#. (itstool) path: item/p
+#: C/async-programming.page:48
+msgid ""
+"If running operations in parallel, track how many operations are yet to "
+"start, and how many are yet to finish — the overall operation is complete "
+"once both counts are zero (<link xref=\"#parallel\"/>)"
+msgstr ""
+"Když spouštíte paralelní operace, sledujte kolik jich bylo spuštěno a kolik "
+"bylo dokončeno. Po dokončení celé operace by rozdíl obou hodnot měl být nula "
+"(<link xref=\"#parallel\"/>)"
+
+#. (itstool) path: item/p
+#: C/async-programming.page:54
+msgid ""
+"Separate state for operations into ‘task data’ structures for <link href="
+"\"https://developer.gnome.org/gio/stable/GTask.html\";><code>GTask</code>s</"
+"link>, allowing operations to be reused more easily without needing changes "
+"to global state handling (<link xref=\"#gtask\"/>)"
+msgstr ""
+"Oddělte stavy pro operace do struktury „data úlohy“ pro objekty <link href="
+"\"https://developer.gnome.org/gio/stable/GTask.html\";><code>GTask</code></"
+"link>, aby se operace daly snáze znovu použít bez potřeby změn v globální "
+"obsluze stavu (<link xref=\"#gtask\"/>)"
+
+#. (itstool) path: item/p
+#: C/async-programming.page:60
+msgid ""
+"Consider how asynchronous methods on an object instance interact with "
+"finalization of that instance (<link xref=\"#lifetimes\"/>)"
+msgstr ""
+"Popřemýšlejte, jak asynchronní metody v instanci objektu souvisí s "
+"finalizací instance (<link xref=\"#lifetimes\"/>)"
+
+#. (itstool) path: section/title
+#: C/async-programming.page:68
+msgid "Concepts"
+msgstr "Koncepty"
+
+#. (itstool) path: section/p
+#: C/async-programming.page:70
+msgid ""
+"GLib supports <em>asynchronous</em> programming, where long-running "
+"operations can be started, run ‘in the background’, and a callback invoked "
+"when they are finished and their results are available. This is in direct "
+"contrast to <em>synchronous</em> long-running operations, which are a single "
+"function call which blocks program control flow until complete."
+msgstr ""
+"GLib podporuje <em>asynchronní</em> programování, kdy dlouhotrvající operace "
+"mohou být spuštěny, běžet „na pozadí“ a vyvolat zpětné volání, když jsou "
+"dokončeny a jejich výsledky jsou k dispozici. Což je v přímém kontrastu se "
+"<em>synchronními</em> dlouhotrvajícími operacemi, které jsou samostatnými "
+"voláními funkcí blokujícími až do svého dokončení řízení toku programu."
+
+#. (itstool) path: section/p
+#: C/async-programming.page:78
+msgid ""
+"As discussed in <link xref=\"main-contexts\"/> and <link xref="
+"\"threading#when-to-use-threading\"/>, asynchronous operations should be "
+"favoured over synchronous ones and over explicit use of threading. They do "
+"not block the main context like sychronous operations do; and are easier to "
+"use correctly than threads. They often also have a lower performance penalty "
+"than spawning a thread and sending work to it."
+msgstr ""
+"Jak je vysvětleno v kapitolách <link xref=\"main-contexts\"/> a <link xref="
+"\"threading#when-to-use-threading\"/>, asynchronní operace by měly být "
+"upřednostňovány před synchronními, i před cíleným použitím vláken. Na rozdíl "
+"od synchronních neblokují hlavní kontext a jejich správné použití je snazší "
+"než u vláken. Navíc často mají nižší dopad na výkon, než spouštění vláken."
+
+#. (itstool) path: section/title
+#: C/async-programming.page:89
+msgid "API Pattern"
+msgstr "Vzory API"
+
+#. (itstool) path: section/p
+#: C/async-programming.page:91
+msgid ""
+"Asynchronous calls follow a standard pattern in GLib code. For an operation "
+"named <code>load_data</code> on the <code>File</code> class in the "
+"<code>Foo</code> namespace, there will be:"
+msgstr ""
+"Asynchronní volání se řídí standardními vzory v kódu GLib. Pro operaci "
+"nazvanou <code>load_data</code> na třídě <code>File</code> ve jmenném "
+"prostoru <code>Foo</code> to bude:"
+
+#. (itstool) path: item/code
+#: C/async-programming.page:98
+#, no-wrap
+msgid ""
+"\n"
+"foo_file_load_data_async (FooFile             *self,\n"
+"                          …,\n"
+"                          GCancellable        *cancellable,\n"
+"                          GAsyncReadyCallback  callback,\n"
+"                          gpointer             user_data)"
+msgstr ""
+"\n"
+"foo_file_load_data_async (FooFile             *self,\n"
+"                          …,\n"
+"                          GCancellable        *cancellable,\n"
+"                          GAsyncReadyCallback  callback,\n"
+"                          gpointer             user_data)"
+
+#. (itstool) path: item/code
+#: C/async-programming.page:106
+#, no-wrap
+msgid ""
+"\n"
+"foo_file_load_data_finish (FooFile       *self,\n"
+"                           GAsyncResult  *result,\n"
+"                           …,\n"
+"                           GError       **error)"
+msgstr ""
+"\n"
+"foo_file_load_data_finish (FooFile       *self,\n"
+"                           GAsyncResult  *result,\n"
+"                           …,\n"
+"                           GError       **error)"
+
+#. (itstool) path: section/p
+#: C/async-programming.page:114
+msgid ""
+"The <code>…</code> parameters to <code>foo_file_load_data_async()</code> are "
+"those specific to the operation — in this case, perhaps the size of a buffer "
+"to load into. Similarly for <code>foo_file_load_data_finish()</code> they "
+"are the operation-specific return values — perhaps a location to return a "
+"content type string in this case."
+msgstr ""
+"Parametry <code>…</code> z <code>foo_file_load_data_async()</code> jsou "
+"specifické pro operaci. V tomto případě je o velikost vyrovnávací paměti, do "
+"které se načítá. Obdobně u <code>foo_file_load_data_finish()</code> jsou "
+"specifické pro operaci návratové hodnoty, v tomto případě se jako typ "
+"řetězec vrací umístění."
+
+#. (itstool) path: section/p
+#: C/async-programming.page:123
+msgid ""
+"When <code>foo_file_load_data_async()</code> is called, it schedules the "
+"load operation in the background (as a new file descriptor on the <link xref="
+"\"main-contexts\"><code>GMainContext</code></link> or as a worker thread, "
+"for example), then returns without blocking."
+msgstr ""
+"Když je zavolána funkce <code>foo_file_load_data_async()</code>, naplánuje "
+"operaci načtení na pozadí (jako nový popisovač souboru v <link xref=\"main-"
+"contexts\"><code>GMainContext</code></link>, nebo jako pracovní vlákno), a "
+"bez blokování se vrátí."
+
+#. (itstool) path: section/p
+#: C/async-programming.page:130
+msgid ""
+"When the operation is complete, the <code>callback</code> is executed in the "
+"same <code>GMainContext</code> as the original asynchronous call. The "
+"callback is invoked <em>exactly</em> once, whether the operation succeeded "
+"or failed."
+msgstr ""
+"Když je operace dokončena, je provedeno <code>zpětné volání</code> ve "
+"stejném <code>GMainContext</code>, jako původní asynchronní volání. Zpětné "
+"volání je zavoláno <em>právě</em> jednou, nezávisle na tom, jestli operace "
+"dopadla dobře, nebo selhala."
+
+#. (itstool) path: section/p
+#: C/async-programming.page:137
+msgid ""
+"From the callback, <code>foo_file_load_data_finish()</code> may be called by "
+"the user’s code to retrieve return values and error details, passing the "
+"<link href=\"https://developer.gnome.org/gio/stable/GAsyncResult.html";
+"\"><code>GAsyncResult</code></link> instance which was passed to the "
+"callback."
+msgstr ""
+"Ze zpětného volání může být uživatelským kódem zavolána funkce "
+"<code>foo_file_load_data_finish()</code> kvůli získání návratové hodnoty a "
+"podrobností o chybě, přičemž se jí předává instance <link href=\"https://";
+"developer.gnome.org/gio/stable/GAsyncResult.html\"><code>GAsyncResult</"
+"code></link>, která byla předána zpětnému volání."
+
+#. (itstool) path: section/title
+#: C/async-programming.page:146
+msgid "Operation Lifetimes"
+msgstr "Životní průběh operace"
+
+#. (itstool) path: section/p
+#: C/async-programming.page:148
+msgid ""
+"When writing asynchronous operations, it is common to write them as methods "
+"of a class. In this case, it is important to define how ongoing operations "
+"on a class instance interact with finalization of that instance. There are "
+"two approaches:"
+msgstr ""
+"Když se píše asynchronní operace, je běžné ji napsat jako metodu třídy. V "
+"tomto případě je důležité definovat, jak běžící operace nad instancí třídy "
+"komunikují s finalizací instance. Existují dva přístupy:"
+
+#. (itstool) path: item/title
+#: C/async-programming.page:157
+msgid "Strong"
+msgstr "Silný"
+
+#. (itstool) path: item/p
+#: C/async-programming.page:158
+msgid ""
+"The ongoing operation keeps a reference to the class instance, forcing it to "
+"remain alive for the duration of the operation. The class should provide "
+"some kind of ‘close’ or ‘cancel’ method which can be used by other classes "
+"to force cancellation of the operation and allow that instance to be "
+"finalized."
+msgstr ""
+"Běžící operace zachovává odkaz na instanci třídy a nutí ji zůstat naživu po "
+"dobu operace. Třída může poskytovat nějaký druh metody „close“ nebo "
+"„cancel“, které mohou být použity jinou třídou k vynucení zrušení operace a "
+"umožnit této instanci finalizaci."
+
+#. (itstool) path: item/title
+#: C/async-programming.page:168
+msgid "Weak"
+msgstr "Slabý"
+
+#. (itstool) path: item/p
+#: C/async-programming.page:169
+msgid ""
+"The ongoing operation does <em>not</em> keep a reference to the class "
+"instance, and the class cancels the operation (using <link href=\"https://";
+"developer.gnome.org/gio/stable/GCancellable.html#g-cancellable-cancel"
+"\"><code>g_cancellable_cancel()</code></link>) in its dispose function."
+msgstr ""
+"Běžící operace <em>ne</em>zachovává odkaz na instanci třídy a třída ruší "
+"operaci (pomocí <link href=\"https://developer.gnome.org/gio/stable/";
+"GCancellable.html#g-cancellable-cancel\"><code>g_cancellable_cancel()</"
+"code></link>) ve své uvolňovací funkci."
+
+#. (itstool) path: section/p
+#: C/async-programming.page:178
+msgid ""
+"Which approach is used depends on the class’ design. A class which wraps a "
+"particular operation (perhaps a <code>MyFileTransfer</code> class, for "
+"example) might want to use the <em style=\"strong\">weak</em> approach. A "
+"class which manages multiple network connections and asynchronous operations "
+"on them may use the <em style=\"strong\">strong</em> approach instead. Due "
+"to incoming network connections, for example, it might not be in complete "
+"control of the scheduling of its asynchronous calls, so the weak approach "
+"would not be appropriate — any code dropping a reference to the object could "
+"not be sure it was not accidentally killing a new network connection."
+msgstr ""
+"To, který přístup je použit, závisí na návrhu třídy. Třída, která obaluje "
+"konkrétní operaci (třída <code>MyFileTransfer</code> například), může chtít "
+"používat <em style=\"strong\">slabý</em> přístup. Třída, která spravuje více "
+"síťových připojení a asynchronních operací nad nimi, může naopak používat "
+"<em style=\"strong\">silný</em> přístup. Například kvůli příchozím síťovým "
+"připojením nemusí mít úplné řízení nad plánováním svých asynchronních "
+"volání, takže slabý přístup by nebyl vhodný – kód zahazující odkaz na objekt "
+"by si nemohl být jistý, jestli nešťastnou náhodou nezabije nové síťové "
+"připojení."
+
+#. (itstool) path: section/title
+#: C/async-programming.page:193
+msgid "Examples of Using Asynchronous Functions"
+msgstr "Příklad použití asynchronních funkcí"
+
+#. (itstool) path: section/p
+#: C/async-programming.page:195
+msgid ""
+"It is often the case that multiple asynchronous calls need to be used to "
+"complete an operation. For example, opening a file for reading, then "
+"performing a couple of reads, and then closing the file. Or opening several "
+"network sockets in parallel and waiting until they are all open before "
+"continuing with other work. Some examples of these situations are given "
+"below."
+msgstr ""
+"Častým případem je, že je k dokončení operace zapotřebí více asynchronních "
+"volání. Například, otevření souboru pro čtení, následně provedení několika "
+"čtení a pak zavření souboru. Nebo otevření několika síťových soketů souběžně "
+"a čekání, dokud se všechny neotevřou, než se může pokračovat s další prací "
+"se sítí. Nějaké příklady těchto situací jsou uvedeny níže."
+
+#. (itstool) path: section/title
+#: C/async-programming.page:205
+msgid "Single Operation"
+msgstr "Jedna samostatná operace"
+
+#. (itstool) path: section/p
+#: C/async-programming.page:207
+msgid ""
+"A single asynchronous call requires two functions: one to start the "
+"operation, and one to complete it. In C, the demanding part of performing an "
+"asynchronous call is correctly storing state between these two functions, "
+"and handling changes to that state in the time between those two functions "
+"being called. For example, cancellation of an ongoing asynchronous call is a "
+"state change, and if not implemented carefully, any UI updates (for example) "
+"made when cancelling an operation will be undone by updates in the "
+"operation’s callback."
+msgstr ""
+"Jedna samostatná asynchronní operace vyžaduje dvě funkce: jednu pro spuštění "
+"operace a jednu pro její dokončení. V jazyce C žádanou částí provádění "
+"asynchronního volání je správně uchovaný stav mezi těmito dvěma funkcemi a "
+"obsluha změn tohoto stavu v čase mezi zavoláním těchto dvou funkcí. "
+"Například, zrušení probíhajícího asynchronního volání je změna stavu, a když "
+"není implementováno pečlivě, aktualizace uživatelského rozhraní (například) "
+"provedené při rušení operace budou vráceny do původního stavu aktualizací ve "
+"zpětném volání operace."
+
+#. (itstool) path: example/p
+#: C/async-programming.page:219
+msgid ""
+"This example demonstrates copying a file from one location in the file "
+"system to another. The key principles demonstrated here are:"
+msgstr ""
+"Tento příklad předvádí kopírování souboru z jednoho místa v souborovém "
+"systému na druhé. Předvedené klíčové principy jsou:"
+
+#. (itstool) path: item/p
+#: C/async-programming.page:224
+msgid ""
+"Placing the <code>copy_button_clicked_cb()</code> (start) and "
+"<code>copy_finish_cb()</code> (finish) functions in order by using a forward "
+"declaration for <code>copy_finish_cb()</code>. This means the control flow "
+"continues linearly down the file, rather than getting to the bottom of "
+"<code>copy_button_clicked_cb()</code> and resuming in "
+"<code>copy_finish_cb()</code> somewhere else in the file."
+msgstr ""
+"Umístění funkcí <code>copy_button_clicked_cb()</code> (spuštění) a "
+"<code>copy_finish_cb()</code> (dokončení) v postupném pořadí pomocí dopředné "
+"deklarace pro <code>copy_finish_cb()</code>. To znamená, že řízení toku "
+"pokračuje lineárně od začátku do konce souboru se zdrojovým kódem, místo aby "
+"se <code>copy_button_clicked_cb()</code> bralo z konce a pokračovalo se na "
+"<code>copy_button_clicked_cb()</code> někde jinde v souboru."
+
+#. (itstool) path: item/p
+#: C/async-programming.page:233
+msgid ""
+"Use of a <link href=\"https://developer.gnome.org/gio/stable/GCancellable.";
+"html\"><code>GCancellable</code></link> to allow cancelling the operation "
+"after it has started. The code in <code>cancel_button_clicked_cb()</code> is "
+"very simple: as the <code>copy_finish_cb()</code> callback is "
+"<em>guaranteed</em> to be invoked when the operation completes (even when "
+"completing early due to cancellation), all the UI and state updates for "
+"cancellation can be handled there, rather than in "
+"<code>cancel_button_clicked_cb()</code>."
+msgstr ""
+"Používejte <link href=\"https://developer.gnome.org/gio/stable/GCancellable.";
+"html\"><code>GCancellable</code></link>, aby se operace po té, co je "
+"spuštěna, dala zrušit. Kód v <code>cancel_button_clicked_cb()</code> je "
+"velmi jednoduchý: jelikož je <em>zaručeno</em> vyvolání zpětného volání "
+"<code>copy_finish_cb()</code>, když je operace dokončena (i když je "
+"dokončena předčasně zrušením), všechny aktualizace uživatelského rozhraní a "
+"stavu pro zrušení mohou být obslouženy zde, místo aby se tak stalo v "
+"<code>cancel_button_clicked_cb()</code>."
+
+#. (itstool) path: item/p
+#: C/async-programming.page:245
+msgid ""
+"An operation is ongoing exactly while <code>MyObjectPrivate."
+"copy_cancellable</code> is non-<code>NULL</code>, making it easy to track "
+"running operations. Note that this means only one file copy operation can be "
+"started via <code>copy_button_clicked_cb()</code> at a time. One "
+"<code>GCancellable</code> cannot easily be used for multiple operations like "
+"this."
+msgstr ""
+"Operace běží přesně po dobu, kdy <code>MyObjectPrivate.copy_cancellable</"
+"code> není <code>NULL</code>, díky čemuž je jednoduché sledovat běžící "
+"operace. Uvědomte si, že to znamená, že jen jedna kopírovací operace může "
+"být spuštěna přes <code>copy_button_clicked_cb()</code> v jeden okamžik. "
+"Tímto způsobem nejde jednoduše použít jednu <code>GCancellable</code> pro "
+"více operací."
+
+#. (itstool) path: example/code
+#: C/async-programming.page:256
+#, no-wrap
+msgid ""
+"\n"
+"static void\n"
+"copy_finish_cb (GObject      *source_object,\n"
+"                GAsyncResult *result,\n"
+"                gpointer      user_data);\n"
+"\n"
+"static void\n"
+"copy_button_clicked_cb (GtkButton *button\n"
+"                        gpointer   user_data)\n"
+"{\n"
+"  MyObjectPrivate *priv;\n"
+"  GFile *source = NULL, *destination = NULL;  /* owned */\n"
+"\n"
+"  priv = my_object_get_instance_private (MY_OBJECT (user_data));\n"
+"\n"
+"  /* Operation already in progress? */\n"
+"  if (priv-&gt;copy_cancellable != NULL)\n"
+"    {\n"
+"      g_debug (\"Copy already in progress.\");\n"
+"      return;\n"
+"    }\n"
+"\n"
+"  /* Build source and destination file paths. */\n"
+"  source = g_file_new_for_path (/* some path generated from UI */);\n"
+"  destination = g_file_new_for_path (/* some other path generated from UI */);\n"
+"\n"
+"  /* Set up a cancellable. */\n"
+"  priv-&gt;copy_cancellable = g_cancellable_new ();\n"
+"\n"
+"  g_file_copy_async (source, destination, G_FILE_COPY_NONE, G_PRIORITY_DEFAULT,\n"
+"                     priv-&gt;copy_cancellable, NULL, NULL,\n"
+"                     copy_finish_cb, user_data);\n"
+"\n"
+"  g_object_unref (destination);\n"
+"  g_object_unref (source);\n"
+"\n"
+"  /* Update UI to show copy is in progress. */\n"
+"  …\n"
+"}\n"
+"\n"
+"static void\n"
+"copy_finish_cb (GObject      *source_object,\n"
+"                GAsyncResult *result,\n"
+"                gpointer      user_data)\n"
+"{\n"
+"  MyObjectPrivate *priv;\n"
+"  GFile *source;  /* unowned */\n"
+"  GError *error = NULL;\n"
+"\n"
+"  source = G_FILE (source_object);\n"
+"  priv = my_object_get_instance_private (MY_OBJECT (user_data));\n"
+"\n"
+"  /* Handle completion of the operation. */\n"
+"  g_file_copy_finish (source, result, &amp;error);\n"
+"\n"
+"  if (error != NULL &amp;&amp;\n"
+"      !g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED))\n"
+"    {\n"
+"      /* Should update the UI to signal failure.\n"
+"       * Ignore failure due to cancellation. */\n"
+"      g_warning (\"Failed to copy file: %s\", error-&gt;message);\n"
+"    }\n"
+"\n"
+"  g_clear_error (&amp;error);\n"
+"\n"
+"  /* Clear the cancellable to signify the operation has finished. */\n"
+"  g_clear_object (&amp;priv-&gt;copy_cancellable);\n"
+"\n"
+"  /* Update UI to show copy as complete. */\n"
+"  …\n"
+"}\n"
+"\n"
+"static void\n"
+"cancel_button_clicked_cb (GtkButton *button,\n"
+"                          gpointer   user_data)\n"
+"{\n"
+"  MyObjectPrivate *priv;\n"
+"  GFile *source = NULL, *destination = NULL;  /* owned */\n"
+"\n"
+"  priv = my_object_get_instance_private (MY_OBJECT (user_data));\n"
+"\n"
+"  /* Operation in progress? No-op if @copy_cancellable is %NULL. */\n"
+"  g_cancellable_cancel (priv-&gt;copy_cancellable);\n"
+"}\n"
+"\n"
+"static void\n"
+"my_object_dispose (GObject *obj)\n"
+"{\n"
+"  MyObjectPrivate *priv;\n"
+"\n"
+"  priv = my_object_get_instance_private (MY_OBJECT (obj));\n"
+"\n"
+"  /* Cancel any ongoing copy operation.\n"
+"   *\n"
+"   * This ensures that if #MyObject is disposed part-way through a copy, the\n"
+"   * callback doesn’t get invoked with an invalid #MyObject pointer. */\n"
+"  g_cancellable_cancel (priv-&gt;copy_cancellable);\n"
+"\n"
+"  /* Do other dispose calls here. */\n"
+"  …\n"
+"\n"
+"  /* Chain up. */\n"
+"  G_OBJECT_CLASS (my_object_parent_class)-&gt;dispose (obj);\n"
+"}"
+msgstr ""
+"\n"
+"static void\n"
+"copy_finish_cb (GObject      *source_object,\n"
+"                GAsyncResult *result,\n"
+"                gpointer      user_data);\n"
+"\n"
+"static void\n"
+"copy_button_clicked_cb (GtkButton *button\n"
+"                        gpointer   user_data)\n"
+"{\n"
+"  MyObjectPrivate *priv;\n"
+"  GFile *source = NULL, *destination = NULL;  /* owned */\n"
+"\n"
+"  priv = my_object_get_instance_private (MY_OBJECT (user_data));\n"
+"\n"
+"  /* Operace již běží? */\n"
+"  if (priv-&gt;copy_cancellable != NULL)\n"
+"    {\n"
+"      g_debug (\"Copy already in progress.\");\n"
+"      return;\n"
+"    }\n"
+"\n"
+"  /* Sestaví cestu k zdrojovému a cílovému souboru */\n"
+"  source = g_file_new_for_path (/* nějaká cesta vygenerovaná z uživ. rozhraní */);\n"
+"  destination = g_file_new_for_path (/* nějaká další cesta vygenerovaná z uživ. rozhraní */);\n"
+"\n"
+"  /* Nastaví jako zrušitelné */\n"
+"  priv-&gt;copy_cancellable = g_cancellable_new ();\n"
+"\n"
+"  g_file_copy_async (source, destination, G_FILE_COPY_NONE, G_PRIORITY_DEFAULT,\n"
+"                     priv-&gt;copy_cancellable, NULL, NULL,\n"
+"                     copy_finish_cb, user_data);\n"
+"\n"
+"  g_object_unref (destination);\n"
+"  g_object_unref (source);\n"
+"\n"
+"  /* Aktualizuje uživ. rozhraní, aby ukazovalo průběh */\n"
+"  …\n"
+"}\n"
+"\n"
+"static void\n"
+"copy_finish_cb (GObject      *source_object,\n"
+"                GAsyncResult *result,\n"
+"                gpointer      user_data)\n"
+"{\n"
+"  MyObjectPrivate *priv;\n"
+"  GFile *source;  /* unowned */\n"
+"  GError *error = NULL;\n"
+"\n"
+"  source = G_FILE (source_object);\n"
+"  priv = my_object_get_instance_private (MY_OBJECT (user_data));\n"
+"\n"
+"  /* Obsluha dokončení operace */\n"
+"  g_file_copy_finish (source, result, &amp;error);\n"
+"\n"
+"  if (error != NULL &amp;&amp;\n"
+"      !g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED))\n"
+"    {\n"
+"      /* Mělo by aktualizovat uživatelské rozhraní, aby oznámilo selhání\n"
+"       * Ignoruje selhání kvůli zrušení */\n"
+"      g_warning (\"Failed to copy file: %s\", error-&gt;message);\n"
+"    }\n"
+"\n"
+"  g_clear_error (&amp;error);\n"
+"\n"
+"  /* Smaže příznak zrušitelnosti, aby dalo najevo dokončení operace */\n"
+"  g_clear_object (&amp;priv-&gt;copy_cancellable);\n"
+"\n"
+"  /* Aktualizace uživ. rozhraní, aby ukazovalo dokončení kopírování */\n"
+"  …\n"
+"}\n"
+"\n"
+"static void\n"
+"cancel_button_clicked_cb (GtkButton *button,\n"
+"                          gpointer   user_data)\n"
+"{\n"
+"  MyObjectPrivate *priv;\n"
+"  GFile *source = NULL, *destination = NULL;  /* owned */\n"
+"\n"
+"  priv = my_object_get_instance_private (MY_OBJECT (user_data));\n"
+"\n"
+"  /* Operace probíhá? Žádná operace, když @copy_cancellable je %NULL. */\n"
+"  g_cancellable_cancel (priv-&gt;copy_cancellable);\n"
+"}\n"
+"\n"
+"static void\n"
+"my_object_dispose (GObject *obj)\n"
+"{\n"
+"  MyObjectPrivate *priv;\n"
+"\n"
+"  priv = my_object_get_instance_private (MY_OBJECT (obj));\n"
+"\n"
+"  /* Zrušení případné probíhající operace kopírování.\n"
+"   *\n"
+"   * Tím se zajistí, že když je #MyObject částečně uvolněn přes\n"
+"   * kopírování, není zpětné volání vyvoláno s neplatným\n"
+"   * ukazatelem na #MyObject. */\\n\"\n"
+"  g_cancellable_cancel (priv-&gt;copy_cancellable);\n"
+"\n"
+"  /* Zde proveďte případná další uvolnění */\n"
+"  …\n"
+"\n"
+"  /* Zřetězení */\n"
+"  G_OBJECT_CLASS (my_object_parent_class)-&gt;dispose (obj);\n"
+"}"
+
+#. (itstool) path: example/p
+#: C/async-programming.page:361
+msgid ""
+"For comparison, here is the same code implemented using the <em>synchronous</"
+"em> version of <link href=\"https://developer.gnome.org/gio/stable/GFile.";
+"html#g-file-copy\"><code>g_file_copy()</code></link>. Note how the order of "
+"statements is almost identical. Cancellation cannot be supported here, as "
+"the UI is blocked from receiving ‘click’ events on the cancellation button "
+"while the copy is ongoing, so <code>NULL</code> is passed to the "
+"<code>GCancellable</code> parameter. This is the main reason why this code "
+"should <em>not</em> be used in practice."
+msgstr ""
+"Pro srovnání, zde je ten stejný kód implementovaný pomocí <em>synchronní</"
+"em> verze <link href=\"https://developer.gnome.org/gio/stable/GFile.html#g-";
+"file-copy\"><code>g_file_copy()</code></link>. Všimněte si, že pořadí "
+"příkazů je povětšinou stejné. Rušení v tomto případě nelez podporovat, "
+"protože uživatelské rozhraní je během kopírování blokované od příjmu události "
+"„click“ z tlačítka „Zrušit“, takže do parametru <code>GCancellable</code> "
+"předáváme <code>NULL</code>. To je také hlavní důvod, proč tento kód "
+"<em>není</em> v praxi použitelný."
+
+#. (itstool) path: example/code
+#: C/async-programming.page:373
+#, no-wrap
+msgid ""
+"\n"
+"static void\n"
+"copy_button_clicked_cb (GtkButton *button\n"
+"                        gpointer   user_data)\n"
+"{\n"
+"  MyObjectPrivate *priv;\n"
+"  GFile *source = NULL, *destination = NULL;  /* owned */\n"
+"\n"
+"  priv = my_object_get_instance_private (MY_OBJECT (user_data));\n"
+"\n"
+"  /* Build source and destination file paths. */\n"
+"  source = g_file_new_for_path (/* some path generated from UI */);\n"
+"  destination = g_file_new_for_path (/* some other path generated from UI */);\n"
+"\n"
+"  g_file_copy (source, destination, G_FILE_COPY_NONE,\n"
+"               NULL  /* cancellable */, NULL, NULL,\n"
+"               &amp;error);\n"
+"\n"
+"  g_object_unref (destination);\n"
+"  g_object_unref (source);\n"
+"\n"
+"  /* Handle completion of the operation. */\n"
+"  if (error != NULL)\n"
+"    {\n"
+"      /* Should update the UI to signal failure.\n"
+"       * Ignore failure due to cancellation. */\n"
+"      g_warning (\"Failed to copy file: %s\", error-&gt;message);\n"
+"    }\n"
+"\n"
+"  g_clear_error (&amp;error);\n"
+"\n"
+"  /* Update UI to show copy as complete. */\n"
+"  …\n"
+"}"
+msgstr ""
+"\n"
+"static void\n"
+"copy_button_clicked_cb (GtkButton *button\n"
+"                        gpointer   user_data)\n"
+"{\n"
+"  MyObjectPrivate *priv;\n"
+"  GFile *source = NULL, *destination = NULL;  /* owned */\n"
+"\n"
+"  priv = my_object_get_instance_private (MY_OBJECT (user_data));\n"
+"\n"
+"  /* Sestaví cestu k zdrojovému a cílovému souboru */\n"
+"  source = g_file_new_for_path (/* nějaká cesta vygenerovaná z uživ. rozhraní */);\n"
+"  destination = g_file_new_for_path (/* nějaká další cesta vygenerovaná z uživ. rozhraní */);\n"
+"\n"
+"  g_file_copy (source, destination, G_FILE_COPY_NONE,\n"
+"               NULL  /* cancellable */, NULL, NULL,\n"
+"               &amp;error);\n"
+"\n"
+"  g_object_unref (destination);\n"
+"  g_object_unref (source);\n"
+"\n"
+"  /* Obsluha dokončení operace */\n"
+"  if (error != NULL)\n"
+"    {\n"
+"      /* Mělo by aktualizovat uživatelské rozhraní, aby oznámilo selhání\n"
+"       * Ignoruje selhání kvůli zrušení */\n"
+"      g_warning (\"Failed to copy file: %s\", error-&gt;message);\n"
+"    }\n"
+"\n"
+"  g_clear_error (&amp;error);\n"
+"\n"
+"  /* Aktualizace uživ. rozhraní, aby ukazovalo dokončení kopírování */\n"
+"  …\n"
+"}"
+
+#. (itstool) path: section/title
+#: C/async-programming.page:411
+msgid "Operations in Series"
+msgstr "Operace prováděné sériově"
+
+#. (itstool) path: section/p
+#: C/async-programming.page:413
+msgid ""
+"A common situation is to run multiple asynchronous operations in series, "
+"when each operation depends on the previous one completing."
+msgstr ""
+"Běžnou situací je spuštění více asynchronních operací po sobě, když každá z "
+"operací závisí na dokončení předchozí."
+
+#. (itstool) path: example/p
+#: C/async-programming.page:419
+msgid ""
+"In this example, the application reads a socket address from a file, opens a "
+"connection to that address, reads a message, and then finishes."
+msgstr ""
+"V tomto příkladu aplikace čte adresu soketu ze souboru, otevře připojení na tuto "
+"adresu, přečte zprávu a pak skončí."
+
+#. (itstool) path: example/p
+#: C/async-programming.page:425 C/async-programming.page:710
+#: C/async-programming.page:880
+msgid "Key points in this example are:"
+msgstr "Klíčové body v tomto příkladu:"
+
+#. (itstool) path: item/p
+#: C/async-programming.page:429
+msgid ""
+"Each callback is numbered consistently, and they are all placed in order in "
+"the file so the code follows sequentially."
+msgstr ""
+"Jednotlivá zpětná volání jsou jednotně očíslovaná a ve správném pořadí "
+"umístěná v souboru se zdrojovým kódem, takže kód je provádět postupně ve "
+"stejném pořadí."
+
+#. (itstool) path: item/p
+#: C/async-programming.page:433
+msgid ""
+"As in <link xref=\"#single-call\"/>, a single <code>GCancellable</code> "
+"indicates that the series of operations is ongoing. Cancelling it aborts the "
+"entire sequence."
+msgstr ""
+"Stejně jako v kapitole <link xref=\"#single-call\"/>, jediné "
+"<code>GCancellable</code> indikuje, že běží série operací. Její zrušení "
+"přeruší celou posloupnost."
+
+#. (itstool) path: item/p
+#: C/async-programming.page:438
+msgid ""
+"As in <link xref=\"#single-call\"/>, the pending operation is cancelled if "
+"the owning <code>MyObject</code> instance is disposed, to prevent callbacks "
+"being called later with an invalid <code>MyObject</code> pointer."
+msgstr ""
+"Stejně jako v <link xref=\"#single-call\"/> jsou čekající operace zrušeny, "
+"když je vlastnící instance <code>MyObject</code> uvolněna, aby se zabránilo "
+"pozdějšímu zavolání zpětného volání s neplatným ukazatelem <code>MyObject</"
+"code>."
+
+#. (itstool) path: example/p
+#: C/async-programming.page:446
+msgid ""
+"<link xref=\"#gtask\"/> gives a version of this example wrapped in a <link "
+"href=\"https://developer.gnome.org/gio/stable/GTask.html\";><code>GTask</"
+"code></link> for convenience."
+msgstr ""
+"<link xref=\"#gtask\"/> poskytuje verzi tohoto příkladu obalenou pro pohodlí "
+"do <link href=\"https://developer.gnome.org/gio/stable/GTask.html";
+"\"><code>GTask</code></link>."
+
+#. (itstool) path: example/code
+#: C/async-programming.page:452
+#, no-wrap
+msgid ""
+"\n"
+"static void\n"
+"connect_to_server_cb1 (GObject      *source_object,\n"
+"                       GAsyncResult *result,\n"
+"                       gpointer      user_data);\n"
+"static void\n"
+"connect_to_server_cb2 (GObject      *source_object,\n"
+"                       GAsyncResult *result,\n"
+"                       gpointer      user_data);\n"
+"static void\n"
+"connect_to_server_cb3 (GObject      *source_object,\n"
+"                       GAsyncResult *result,\n"
+"                       gpointer      user_data);\n"
+"\n"
+"static void\n"
+"connect_to_server (MyObject *self)\n"
+"{\n"
+"  MyObjectPrivate *priv;\n"
+"  GFile *address_file = NULL;  /* owned */\n"
+"\n"
+"  priv = my_object_get_instance_private (self);\n"
+"\n"
+"  if (priv-&gt;connect_cancellable != NULL)\n"
+"    {\n"
+"      /* Already connecting. */\n"
+"      return;\n"
+"    }\n"
+"\n"
+"  /* Set up a cancellable. */\n"
+"  priv-&gt;connect_cancellable = g_cancellable_new ();\n"
+"\n"
+"  /* Read the socket address. */\n"
+"  address_file = build_address_file ();\n"
+"  g_file_load_contents_async (address_file, priv-&gt;connect_cancellable,\n"
+"                              connect_to_server_cb1, self);\n"
+"  g_object_unref (address_file);\n"
+"}\n"
+"\n"
+"static void\n"
+"connect_to_server_cb1 (GObject      *source_object,\n"
+"                       GAsyncResult *result,\n"
+"                       gpointer      user_data)\n"
+"{\n"
+"  MyObject *self;\n"
+"  MyObjectPrivate *priv;\n"
+"  GFile *address_file;  /* unowned */\n"
+"  gchar *address = NULL;  /* owned */\n"
+"  gsize address_size = 0;\n"
+"  GInetAddress *inet_address = NULL;  /* owned */\n"
+"  GInetSocketAddress *inet_socket_address = NULL;  /* owned */\n"
+"  guint16 port = 123;\n"
+"  GSocketClient *socket_client = NULL;  /* owned */\n"
+"  GError *error = NULL;\n"
+"\n"
+"  address_file = G_FILE (source_object);\n"
+"  self = MY_OBJECT (user_data);\n"
+"  priv = my_object_get_instance_private (self);\n"
+"\n"
+"  /* Finish loading the address. */\n"
+"  g_file_load_contents_finish (address_file, result, &amp;address,\n"
+"                               &amp;address_size, NULL, &amp;error);\n"
+"\n"
+"  if (error != NULL)\n"
+"    {\n"
+"      goto done;\n"
+"    }\n"
+"\n"
+"  /* Parse the address. */\n"
+"  inet_address = g_inet_address_new_from_string (address);\n"
+"\n"
+"  if (inet_address == NULL)\n"
+"    {\n"
+"      /* Error. */\n"
+"      g_set_error (&amp;error, G_IO_ERROR, G_IO_ERROR_INVALID_ARGUMENT,\n"
+"                   \"Invalid address ‘%s’.\", address);\n"
+"      goto done;\n"
+"    }\n"
+"\n"
+"  inet_socket_address = g_inet_socket_address_new (inet_address, port);\n"
+"\n"
+"  /* Connect to the given address. */\n"
+"  socket_client = g_socket_client_new ();\n"
+"\n"
+"  g_socket_client_connect_async (socket_client,\n"
+"                                 G_SOCKET_CONNECTABLE (inet_socket_address),\n"
+"                                 priv-&gt;connect_cancellable,\n"
+"                                 connect_to_server_cb2,\n"
+"                                 self);\n"
+"\n"
+"done:\n"
+"  if (error != NULL)\n"
+"    {\n"
+"      /* Stop the operation. */\n"
+"      if (!g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED))\n"
+"        {\n"
+"          g_warning (\"Failed to load server address: %s\", error-&gt;message);\n"
+"        }\n"
+"\n"
+"      g_clear_object (&amp;priv-&gt;connect_cancellable);\n"
+"      g_error_free (error);\n"
+"    }\n"
+"\n"
+"  g_free (address);\n"
+"  g_clear_object (&amp;inet_address);\n"
+"  g_clear_object (&amp;inet_socket_address);\n"
+"  g_clear_object (&amp;socket_client);\n"
+"}\n"
+"\n"
+"static void\n"
+"connect_to_server_cb2 (GObject      *source_object,\n"
+"                       GAsyncResult *result,\n"
+"                       gpointer      user_data)\n"
+"{\n"
+"  MyObject *self;\n"
+"  MyObjectPrivate *priv;\n"
+"  GSocketClient *socket_client;  /* unowned */\n"
+"  GSocketConnection *connection = NULL;  /* owned */\n"
+"  GInputStream *input_stream;  /* unowned */\n"
+"  GError *error = NULL;\n"
+"\n"
+"  socket_client = G_SOCKET_CLIENT (source_object);\n"
+"  self = MY_OBJECT (user_data);\n"
+"  priv = my_object_get_instance_private (self);\n"
+"\n"
+"  /* Finish connecting to the socket. */\n"
+"  connection = g_socket_client_connect_finish (socket_client, result,\n"
+"                                               &amp;error);\n"
+"\n"
+"  if (error != NULL)\n"
+"    {\n"
+"      goto done;\n"
+"    }\n"
+"\n"
+"  /* Store a reference to the connection so it is kept open while we read from\n"
+"   * it: #GInputStream does not keep a reference to a #GIOStream which contains\n"
+"   * it. */\n"
+"  priv-&gt;connection = g_object_ref (connection);\n"
+"\n"
+"  /* Read a message from the connection. This uses a single buffer stored in\n"
+"   * #MyObject, meaning that only one connect_to_server() operation can run at\n"
+"   * any time. The buffer could instead be allocated dynamically if this is a\n"
+"   * problem. */\n"
+"  input_stream = g_io_stream_get_input_stream (G_IO_STREAM (connection));\n"
+"\n"
+"  g_input_stream_read_async (input_stream,\n"
+"                             priv-&gt;message_buffer,\n"
+"                             sizeof (priv-&gt;message_buffer),\n"
+"                             G_PRIORITY_DEFAULT, priv-&gt;connect_cancellable,\n"
+"                             connect_to_server_cb3, self);\n"
+"\n"
+"done:\n"
+"  if (error != NULL)\n"
+"    {\n"
+"      /* Stop the operation. */\n"
+"      if (!g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED))\n"
+"        {\n"
+"          g_warning (\"Failed to connect to server: %s\", error-&gt;message);\n"
+"        }\n"
+"\n"
+"      g_clear_object (&amp;priv-&gt;connect_cancellable);\n"
+"      g_clear_object (&amp;priv-&gt;connection);\n"
+"      g_error_free (error);\n"
+"    }\n"
+"\n"
+"  g_clear_object (&amp;connection);\n"
+"}\n"
+"\n"
+"static void\n"
+"connect_to_server_cb3 (GObject      *source_object,\n"
+"                       GAsyncResult *result,\n"
+"                       gpointer      user_data)\n"
+"{\n"
+"  MyObject *self;\n"
+"  MyObjectPrivate *priv;\n"
+"  GInputStream *input_stream;  /* unowned */\n"
+"  gssize len = 0;\n"
+"  GError *error = NULL;\n"
+"\n"
+"  input_stream = G_INPUT_STREAM (source_object);\n"
+"  self = MY_OBJECT (user_data);\n"
+"  priv = my_object_get_instance_private (self);\n"
+"\n"
+"  /* Finish reading from the socket. */\n"
+"  len = g_input_stream_read_finish (input_stream, result, &amp;error);\n"
+"\n"
+"  if (error != NULL)\n"
+"    {\n"
+"      goto done;\n"
+"    }\n"
+"\n"
+"  /* Handle the message. */\n"
+"  g_assert_cmpint (len, &gt;=, 0);\n"
+"  g_assert_cmpuint ((gsize) len, &lt;=, sizeof (priv-&gt;message_buffer));\n"
+"\n"
+"  handle_received_message (self, priv-&gt;message_buffer, len, &amp;error);\n"
+"\n"
+"  if (error != NULL)\n"
+"    {\n"
+"      goto done;\n"
+"    }\n"
+"\n"
+"done:\n"
+"  /* Unconditionally mark the operation as finished.\n"
+"   *\n"
+"   * The streams should automatically close as this\n"
+"   * last reference is dropped. */\n"
+"  g_clear_object (&amp;priv-&gt;connect_cancellable);\n"
+"  g_clear_object (&amp;priv-&gt;connection);\n"
+"\n"
+"  if (error != NULL)\n"
+"    {\n"
+"      /* Warn about the error. */\n"
+"      if (!g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED))\n"
+"        {\n"
+"          g_warning (\"Failed to read from the server: %s\", error-&gt;message);\n"
+"        }\n"
+"\n"
+"      g_error_free (error);\n"
+"    }\n"
+"}\n"
+"\n"
+"static void\n"
+"my_object_dispose (GObject *obj)\n"
+"{\n"
+"  MyObjectPrivate *priv;\n"
+"\n"
+"  priv = my_object_get_instance_private (MY_OBJECT (obj));\n"
+"\n"
+"  /* Cancel any ongoing connection operations.\n"
+"   *\n"
+"   * This ensures that if #MyObject is disposed part-way through the\n"
+"   * connect_to_server() sequence of operations, the sequence gets cancelled and\n"
+"   * doesn’t continue with an invalid #MyObject pointer. */\n"
+"  g_cancellable_cancel (priv-&gt;connect_cancellable);\n"
+"\n"
+"  /* Do other dispose calls here. */\n"
+"  …\n"
+"\n"
+"  /* Chain up. */\n"
+"  G_OBJECT_CLASS (my_object_parent_class)-&gt;dispose (obj);\n"
+"}"
+msgstr ""
+"\n"
+"static void\n"
+"connect_to_server_cb1 (GObject      *source_object,\n"
+"                       GAsyncResult *result,\n"
+"                       gpointer      user_data);\n"
+"static void\n"
+"connect_to_server_cb2 (GObject      *source_object,\n"
+"                       GAsyncResult *result,\n"
+"                       gpointer      user_data);\n"
+"static void\n"
+"connect_to_server_cb3 (GObject      *source_object,\n"
+"                       GAsyncResult *result,\n"
+"                       gpointer      user_data);\n"
+"\n"
+"static void\n"
+"connect_to_server (MyObject *self)\n"
+"{\n"
+"  MyObjectPrivate *priv;\n"
+"  GFile *address_file = NULL;  /* owned */\n"
+"\n"
+"  priv = my_object_get_instance_private (self);\n"
+"\n"
+"  if (priv-&gt;connect_cancellable != NULL)\n"
+"    {\n"
+"      /* Již se připojuje */\n"
+"      return;\n"
+"    }\n"
+"\n"
+"  /* Nastavení jako zrušitelné */\n"
+"  priv-&gt;connect_cancellable = g_cancellable_new ();\n"
+"\n"
+"  /* Čtení adresy soketu */\n"
+"  address_file = build_address_file ();\n"
+"  g_file_load_contents_async (address_file, priv-&gt;connect_cancellable,\n"
+"                              connect_to_server_cb1, self);\n"
+"  g_object_unref (address_file);\n"
+"}\n"
+"\n"
+"static void\n"
+"connect_to_server_cb1 (GObject      *source_object,\n"
+"                       GAsyncResult *result,\n"
+"                       gpointer      user_data)\n"
+"{\n"
+"  MyObject *self;\n"
+"  MyObjectPrivate *priv;\n"
+"  GFile *address_file;  /* unowned */\n"
+"  gchar *address = NULL;  /* owned */\n"
+"  gsize address_size = 0;\n"
+"  GInetAddress *inet_address = NULL;  /* owned */\n"
+"  GInetSocketAddress *inet_socket_address = NULL;  /* owned */\n"
+"  guint16 port = 123;\n"
+"  GSocketClient *socket_client = NULL;  /* owned */\n"
+"  GError *error = NULL;\n"
+"\n"
+"  address_file = G_FILE (source_object);\n"
+"  self = MY_OBJECT (user_data);\n"
+"  priv = my_object_get_instance_private (self);\n"
+"\n"
+"  /* Dokončení načítání adresy */\n"
+"  g_file_load_contents_finish (address_file, result, &amp;address,\n"
+"                               &amp;address_size, NULL, &amp;error);\n"
+"\n"
+"  if (error != NULL)\n"
+"    {\n"
+"      goto done;\n"
+"    }\n"
+"\n"
+"  /* Zpracování adresy */\n"
+"  inet_address = g_inet_address_new_from_string (address);\n"
+"\n"
+"  if (inet_address == NULL)\n"
+"    {\n"
+"      /* Chyba */\n"
+"      g_set_error (&amp;error, G_IO_ERROR, G_IO_ERROR_INVALID_ARGUMENT,\n"
+"                   \"Invalid address ‘%s’.\", address);\n"
+"      goto done;\n"
+"    }\n"
+"\n"
+"  inet_socket_address = g_inet_socket_address_new (inet_address, port);\n"
+"\n"
+"  /* Připojení na zadanou adresu */\n"
+"  socket_client = g_socket_client_new ();\n"
+"\n"
+"  g_socket_client_connect_async (socket_client,\n"
+"                                 G_SOCKET_CONNECTABLE (inet_socket_address),\n"
+"                                 priv-&gt;connect_cancellable,\n"
+"                                 connect_to_server_cb2,\n"
+"                                 self);\n"
+"\n"
+"done:\n"
+"  if (error != NULL)\n"
+"    {\n"
+"      /* Zastavení operace */\n"
+"      if (!g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED))\n"
+"        {\n"
+"          g_warning (\"Failed to load server address: %s\", error-&gt;message);\n"
+"        }\n"
+"\n"
+"      g_clear_object (&amp;priv-&gt;connect_cancellable);\n"
+"      g_error_free (error);\n"
+"    }\n"
+"\n"
+"  g_free (address);\n"
+"  g_clear_object (&amp;inet_address);\n"
+"  g_clear_object (&amp;inet_socket_address);\n"
+"  g_clear_object (&amp;socket_client);\n"
+"}\n"
+"\n"
+"static void\n"
+"connect_to_server_cb2 (GObject      *source_object,\n"
+"                       GAsyncResult *result,\n"
+"                       gpointer      user_data)\n"
+"{\n"
+"  MyObject *self;\n"
+"  MyObjectPrivate *priv;\n"
+"  GSocketClient *socket_client;  /* unowned */\n"
+"  GSocketConnection *connection = NULL;  /* owned */\n"
+"  GInputStream *input_stream;  /* unowned */\n"
+"  GError *error = NULL;\n"
+"\n"
+"  socket_client = G_SOCKET_CLIENT (source_object);\n"
+"  self = MY_OBJECT (user_data);\n"
+"  priv = my_object_get_instance_private (self);\n"
+"\n"
+"  /* Dokončení připojování k soketu */\n"
+"  connection = g_socket_client_connect_finish (socket_client, result,\n"
+"                                               &amp;error);\n"
+"\n"
+"  if (error != NULL)\n"
+"    {\n"
+"      goto done;\n"
+"    }\n"
+"\n"
+"  /* Uchování odkazu na připojení, takže je udržované otevřené po dobu co z něj\n"
+"   * čteme: #GInputStream neudržuje odkaz na #GIOStream, který jej obsahuje */\n"
+"  priv-&gt;connection = g_object_ref (connection);\n"
+"\n"
+"  /* Čtení zprávy z připojení. Používá jedinou vyrovnávací paměť uchovanou v\n"
+"   * #MyObject, což znamená, že v danou chvíli může běžet jen jediná operace\n"
+"   * connect_to_server(). Pokud je to problém , může být vyrovnávací paměť\n"
+"   * místo toho alokována dynamicky. */\n"
+"  input_stream = g_io_stream_get_input_stream (G_IO_STREAM (connection));\n"
+"\n"
+"  g_input_stream_read_async (input_stream,\n"
+"                             priv-&gt;message_buffer,\n"
+"                             sizeof (priv-&gt;message_buffer),\n"
+"                             G_PRIORITY_DEFAULT, priv-&gt;connect_cancellable,\n"
+"                             connect_to_server_cb3, self);\n"
+"\n"
+"done:\n"
+"  if (error != NULL)\n"
+"    {\n"
+"      /* Zastavení operace */\n"
+"      if (!g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED))\n"
+"        {\n"
+"          g_warning (\"Failed to connect to server: %s\", error-&gt;message);\n"
+"        }\n"
+"\n"
+"      g_clear_object (&amp;priv-&gt;connect_cancellable);\n"
+"      g_clear_object (&amp;priv-&gt;connection);\n"
+"      g_error_free (error);\n"
+"    }\n"
+"\n"
+"  g_clear_object (&amp;connection);\n"
+"}\n"
+"\n"
+"static void\n"
+"connect_to_server_cb3 (GObject      *source_object,\n"
+"                       GAsyncResult *result,\n"
+"                       gpointer      user_data)\n"
+"{\n"
+"  MyObject *self;\n"
+"  MyObjectPrivate *priv;\n"
+"  GInputStream *input_stream;  /* unowned */\n"
+"  gssize len = 0;\n"
+"  GError *error = NULL;\n"
+"\n"
+"  input_stream = G_INPUT_STREAM (source_object);\n"
+"  self = MY_OBJECT (user_data);\n"
+"  priv = my_object_get_instance_private (self);\n"
+"\n"
+"  /* Dokončení čtení ze soketu */\n"
+"  len = g_input_stream_read_finish (input_stream, result, &amp;error);\n"
+"\n"
+"  if (error != NULL)\n"
+"    {\n"
+"      goto done;\n"
+"    }\n"
+"\n"
+"  /* Obsluha zprávy */\n"
+"  g_assert_cmpint (len, &gt;=, 0);\n"
+"  g_assert_cmpuint ((gsize) len, &lt;=, sizeof (priv-&gt;message_buffer));\n"
+"\n"
+"  handle_received_message (self, priv-&gt;message_buffer, len, &amp;error);\n"
+"\n"
+"  if (error != NULL)\n"
+"    {\n"
+"      goto done;\n"
+"    }\n"
+"\n"
+"done:\n"
+"  /* Nepodmíněné označení operace za dokončenou.\n"
+"   *\n"
+"   * Proud dat by se měl automaticky zavřít, protože\n"
+"   * je zahozen poslední odkaz. */\n"
+"  g_clear_object (&amp;priv-&gt;connect_cancellable);\n"
+"  g_clear_object (&amp;priv-&gt;connection);\n"
+"\n"
+"  if (error != NULL)\n"
+"    {\n"
+"      /* Varování o chybě */\n"
+"      if (!g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED))\n"
+"        {\n"
+"          g_warning (\"Failed to read from the server: %s\", error-&gt;message);\n"
+"        }\n"
+"\n"
+"      g_error_free (error);\n"
+"    }\n"
+"}\n"
+"\n"
+"static void\n"
+"my_object_dispose (GObject *obj)\n"
+"{\n"
+"  MyObjectPrivate *priv;\n"
+"\n"
+"  priv = my_object_get_instance_private (MY_OBJECT (obj));\n"
+"\n"
+"  /* Zrušení případných probíhajících operací mazání.\n"
+"   *\n"
+"   * Tím se zajistí, že když je #MyObject částečně uvolněn přes\n"
+"   * sadu operací delete_files(), sada obdrží zrušení a nepokračuje\n"
+"   * s neplatným ukazatelem na #MyObject. */\n"
+"  g_cancellable_cancel (priv-&gt;connect_cancellable);\n"
+"\n"
+"  /* Zde proveďte případná další uvolnění */\n"
+"  …\n"
+"\n"
+"  /* Zřetězení */\n"
+"  G_OBJECT_CLASS (my_object_parent_class)-&gt;dispose (obj);\n"
+"}"
+
+#. (itstool) path: section/title
+#: C/async-programming.page:697
+msgid "Operations in Parallel"
+msgstr "Operace prováděné paralelně"
+
+#. (itstool) path: section/p
+#: C/async-programming.page:699
+msgid ""
+"Another common situation is to run multiple asynchronous operations in "
+"parallel, considering the overall operation complete when all its "
+"constituents are complete."
+msgstr ""
+"Jinou běžnou situací je spustit více asynchronních operací souběžně s "
+"předpokladem, že celková operace bude dokončena, jakmile všechny její "
+"součásti doběhnou."
+
+#. (itstool) path: example/p
+#: C/async-programming.page:706
+msgid "In this example, the application deletes multiple files in parallel."
+msgstr "V tomto příkladu aplikace maže souběžně několik souborů."
+
+#. (itstool) path: item/p
+#: C/async-programming.page:714
+msgid ""
+"The number of pending asynchronous operations (ones which have started but "
+"not yet finished) is tracked as <code>n_deletions_pending</code>. The "
+"<code>delete_files_cb()</code> callback only considers the entire operation "
+"complete once this reaches zero."
+msgstr ""
+"Počet čekajících asynchronních operací (tj. těch, které byly spuštěny a "
+"ještě nedoběhly) je sledován v <code>n_deletions_pending</code>. Zpětné "
+"volání <code>delete_files_cb()</code> bere celkovou operaci za dokončenou, "
+"až když tato hodnota dosáhne nuly."
+
+#. (itstool) path: item/p
+#: C/async-programming.page:721
+msgid ""
+"<code>n_deletions_to_start</code> tracks deletion operations being started, "
+"in case <link href=\"https://developer.gnome.org/gio/stable/GFile.html#g-";
+"file-delete-async\"><code>g_file_delete_async()</code></link> manages to use "
+"a fast path and complete synchronously (without blocking)."
+msgstr ""
+"<code>n_deletions_to_start</code> sleduje spouštění operací mazání, v "
+"případě <link href=\"https://developer.gnome.org/gio/stable/GFile.html#g-";
+"file-delete-async\"><code>g_file_delete_async()</code></link> spravuje "
+"použití rychlé cesty a dokončení synchronně (bez blokování)."
+
+#. (itstool) path: item/p
+#: C/async-programming.page:728
+msgid ""
+"As in <link xref=\"#single-call\"/>, all pending deletions are cancelled if "
+"the owning <code>MyObject</code> instance is disposed, to prevent callbacks "
+"being called later with an invalid <code>MyObject</code> pointer."
+msgstr ""
+"Stejně jako v <link xref=\"#single-call\"/>, jsou všechna čekající mazání "
+"zrušena v situaci, kdy je vlastnící instance <code>MyObject</code> uvolněna, "
+"aby se zabránilo pozdějšímu zavolání zpětného volání s neplatným ukazatelem "
+"<code>MyObject</code>."
+
+#. (itstool) path: example/code
+#: C/async-programming.page:736
+#, no-wrap
+msgid ""
+"\n"
+"static void\n"
+"delete_files_cb (GObject      *source_object,\n"
+"                 GAsyncResult *result,\n"
+"                 gpointer      user_data);\n"
+"\n"
+"static void\n"
+"delete_files (MyObject *self,\n"
+"              GPtrArray/*&lt;owned GFile*&gt;&gt;*/ *files)\n"
+"{\n"
+"  MyObjectPrivate *priv;\n"
+"  GFile *address_file = NULL;  /* owned */\n"
+"\n"
+"  priv = my_object_get_instance_private (self);\n"
+"\n"
+"  /* Set up a cancellable if no operation is ongoing already. */\n"
+"  if (priv-&gt;delete_cancellable == NULL)\n"
+"    {\n"
+"      priv-&gt;delete_cancellable = g_cancellable_new ();\n"
+"      priv-&gt;n_deletions_pending = 0;\n"
+"      priv-&gt;n_deletions_total = 0;\n"
+"    }\n"
+"\n"
+"  /* Update internal state, and temporarily set @n_deletions_to_start. This is\n"
+"   * used in delete_files_cb() to avoid indicating the overall operation has\n"
+"   * completed while deletions are still being started. This can happen if\n"
+"   * g_file_delete_async() completes synchronously, for example if there’s a\n"
+"   * non-blocking fast path for the given file system. */\n"
+"  priv-&gt;n_deletions_pending += files-&gt;len;\n"
+"  priv-&gt;n_deletions_total += files-&gt;len;\n"
+"  priv-&gt;n_deletions_to_start = files-&gt;len;\n"
+"\n"
+"  /* Update the UI to indicate the files are being deleted. */\n"
+"  update_ui_to_show_progress (self,\n"
+"                              priv-&gt;n_deletions_pending,\n"
+"                              priv-&gt;n_deletions_total);\n"
+"\n"
+"  /* Start all the deletion operations in parallel. They share the same\n"
+"   * #GCancellable. */\n"
+"  for (i = 0; i &lt; files-&gt;len; i++)\n"
+"    {\n"
+"      GFile *file = files-&gt;pdata[i];\n"
+"\n"
+"      priv-&gt;n_deletions_to_start--;\n"
+"      g_file_delete_async (file, G_PRIORITY_DEFAULT, priv-&gt;delete_cancellable,\n"
+"                           delete_files_cb, self);\n"
+"    }\n"
+"}\n"
+"\n"
+"static void\n"
+"delete_files_cb (GObject      *source_object,\n"
+"                 GAsyncResult *result,\n"
+"                 gpointer      user_data)\n"
+"{\n"
+"  MyObject *self;\n"
+"  MyObjectPrivate *priv;\n"
+"  GFile *file;  /* unowned */\n"
+"  GError *error = NULL;\n"
+"\n"
+"  file = G_FILE (source_object);\n"
+"  self = MY_OBJECT (user_data);\n"
+"  priv = my_object_get_instance_private (self);\n"
+"\n"
+"  /* Finish deleting the file. */\n"
+"  g_file_delete_finish (file, result, &amp;error);\n"
+"\n"
+"  if (error != NULL &amp;&amp;\n"
+"      !g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED))\n"
+"    {\n"
+"      g_warning (\"Error deleting file: %s\", error-&gt;message);\n"
+"    }\n"
+"\n"
+"  g_clear_error (&amp;error);\n"
+"\n"
+"  /* Update the internal state. */\n"
+"  g_assert_cmpuint (priv-&gt;n_deletions_pending, &gt;, 0);\n"
+"  priv-&gt;n_deletions_pending--;\n"
+"\n"
+"  /* Update the UI to show progress. */\n"
+"  update_ui_to_show_progress (self,\n"
+"                              priv-&gt;n_deletions_pending,\n"
+"                              priv-&gt;n_deletions_total);\n"
+"\n"
+"  /* If all deletions have completed, and no more are being started,\n"
+"   * update the UI to show completion. */\n"
+"  if (priv-&gt;n_deletions_pending == 0 &amp;&amp; priv-&gt;n_deletions_to_start == 0)\n"
+"    {\n"
+"      update_ui_to_show_completion (self);\n"
+"\n"
+"      /* Clear the operation state. */\n"
+"      g_clear_object (&amp;priv-&gt;delete_cancellable);\n"
+"      priv-&gt;n_deletions_total = 0;\n"
+"    }\n"
+"}\n"
+"\n"
+"static void\n"
+"my_object_dispose (GObject *obj)\n"
+"{\n"
+"  MyObjectPrivate *priv;\n"
+"\n"
+"  priv = my_object_get_instance_private (MY_OBJECT (obj));\n"
+"\n"
+"  /* Cancel any ongoing deletion operations.\n"
+"   *\n"
+"   * This ensures that if #MyObject is disposed part-way through the\n"
+"   * delete_files() set of operations, the set gets cancelled and\n"
+"   * doesn’t continue with an invalid #MyObject pointer. */\n"
+"  g_cancellable_cancel (priv-&gt;delete_cancellable);\n"
+"\n"
+"  /* Do other dispose calls here. */\n"
+"  …\n"
+"\n"
+"  /* Chain up. */\n"
+"  G_OBJECT_CLASS (my_object_parent_class)-&gt;dispose (obj);\n"
+"}"
+msgstr ""
+"\n"
+"static void\n"
+"delete_files_cb (GObject      *source_object,\n"
+"                 GAsyncResult *result,\n"
+"                 gpointer      user_data);\n"
+"\n"
+"static void\n"
+"delete_files (MyObject *self,\n"
+"              GPtrArray/*&lt;owned GFile*&gt;&gt;*/ *files)\n"
+"{\n"
+"  MyObjectPrivate *priv;\n"
+"  GFile *address_file = NULL;  /* owned */\n"
+"\n"
+"  priv = my_object_get_instance_private (self);\n"
+"\n"
+"  /* Nastavení jako zrušitelné, pokud již neběží žádná operace */\n"
+"  if (priv-&gt;delete_cancellable == NULL)\n"
+"    {\n"
+"      priv-&gt;delete_cancellable = g_cancellable_new ();\n"
+"      priv-&gt;n_deletions_pending = 0;\n"
+"      priv-&gt;n_deletions_total = 0;\n"
+"    }\n"
+"\n"
+"  /* Aktualizace interního stavu a dočasné nastavení @n_deletions_to_start.\n"
+"   * To se používá v delete_files_cb(), aby se předešlo oznámení, že je celá\n"
+"   * operace dokončená, zatím co ona stále běží. To by se mohlo stát, když\n"
+"   * g_file_delete_async() doběhne synchronně, například, když existuje\n"
+"   * neblokující rychlá cesta pro zadaný souborový systém. */\n"
+"  priv-&gt;n_deletions_pending += files-&gt;len;\n"
+"  priv-&gt;n_deletions_total += files-&gt;len;\n"
+"  priv-&gt;n_deletions_to_start = files-&gt;len;\n"
+"\n"
+"  /* Aktulazice uživatelského rozhraní, aby dalo najevo, že je soubor mazán */\n"
+"  update_ui_to_show_progress (self,\n"
+"                              priv-&gt;n_deletions_pending,\n"
+"                              priv-&gt;n_deletions_total);\n"
+"\n"
+"  /* Začne souběžně všechny operace mazání. Sdílejí stejný #GCancellable. */\n"
+"  for (i = 0; i &lt; files-&gt;len; i++)\n"
+"    {\n"
+"      GFile *file = files-&gt;pdata[i];\n"
+"\n"
+"      priv-&gt;n_deletions_to_start--;\n"
+"      g_file_delete_async (file, G_PRIORITY_DEFAULT, priv-&gt;delete_cancellable,\n"
+"                           delete_files_cb, self);\n"
+"    }\n"
+"}\n"
+"\n"
+"static void\n"
+"delete_files_cb (GObject      *source_object,\n"
+"                 GAsyncResult *result,\n"
+"                 gpointer      user_data)\n"
+"{\n"
+"  MyObject *self;\n"
+"  MyObjectPrivate *priv;\n"
+"  GFile *file;  /* unowned */\n"
+"  GError *error = NULL;\n"
+"\n"
+"  file = G_FILE (source_object);\n"
+"  self = MY_OBJECT (user_data);\n"
+"  priv = my_object_get_instance_private (self);\n"
+"\n"
+"  /* Dokončení mazání souboru */\n"
+"  g_file_delete_finish (file, result, &amp;error);\n"
+"\n"
+"  if (error != NULL &amp;&amp;\n"
+"      !g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED))\n"
+"    {\n"
+"      g_warning (\"Error deleting file: %s\", error-&gt;message);\n"
+"    }\n"
+"\n"
+"  g_clear_error (&amp;error);\n"
+"\n"
+"  /* Aktualizace interního stavu */\n"
+"  g_assert_cmpuint (priv-&gt;n_deletions_pending, &gt;, 0);\n"
+"  priv-&gt;n_deletions_pending--;\n"
+"\n"
+"  /* Aktualizace uživatelského rozhraní, aby ukazovalo průběh */\n"
+"  update_ui_to_show_progress (self,\n"
+"                              priv-&gt;n_deletions_pending,\n"
+"                              priv-&gt;n_deletions_total);\n"
+"\n"
+"  /* Jestliže je všechno mazání dokončeno a žádné další nezačíná, aktualizuje se,\n"
+"   * uživatelské rozhraní, aby ukazovalo, že je vše dokončeno. */\n"
+"  if (priv-&gt;n_deletions_pending == 0 &amp;&amp; priv-&gt;n_deletions_to_start == 0)\n"
+"    {\n"
+"      update_ui_to_show_completion (self);\n"
+"\n"
+"      /* Vyčištění stavu operace */\n"
+"      g_clear_object (&amp;priv-&gt;delete_cancellable);\n"
+"      priv-&gt;n_deletions_total = 0;\n"
+"    }\n"
+"}\n"
+"\n"
+"static void\n"
+"my_object_dispose (GObject *obj)\n"
+"{\n"
+"  MyObjectPrivate *priv;\n"
+"\n"
+"  priv = my_object_get_instance_private (MY_OBJECT (obj));\n"
+"\n"
+"  /* Zrušení případných probíhajících operací mazání.\n"
+"   *\n"
+"   * Tím se zajistí, že když je #MyObject částečně uvolněn přes\n"
+"   * sadu operací delete_files(), sada obdrží zrušení a nepokračuje\n"
+"   * s neplatným ukazatelem na #MyObject. */\n"
+"  g_cancellable_cancel (priv-&gt;delete_cancellable);\n"
+"\n"
+"  /* Zde proveďte případná další uvolnění */\n"
+"  …\n"
+"\n"
+"  /* Zřetězení */\n"
+"  G_OBJECT_CLASS (my_object_parent_class)-&gt;dispose (obj);\n"
+"}"
+
+#. (itstool) path: section/title
+#: C/async-programming.page:855
+msgid "Wrapping with <code>GTask</code>"
+msgstr "Obalení pomocí <code>GTask</code>"
+
+#. (itstool) path: section/p
+#: C/async-programming.page:857
+msgid ""
+"Often when an asynchronous operation (or set of operations) becomes more "
+"complex, it needs associated state. This is typically stored in a custom "
+"structure — but defining a new structure to store the standard callback, "
+"user data and cancellable tuple is laborious. <link href=\"https://developer.";
+"gnome.org/gio/stable/GTask.html\"><code>GTask</code></link> eases this by "
+"providing a standardized way to wrap all three, plus extra custom ‘task "
+"data’."
+msgstr ""
+"Asynchronní operace (nebo sady operací) často, když se stanou více "
+"komplexními, potřebují přiřazený stav. Ten bývá typicky uchován ve vlastní "
+"struktuře, ale definování nové struktury pro uchování standardního zpětného "
+"volání, uživatelských dat a n-tice zrušitelných je pracné. <link href="
+"\"https://developer.gnome.org/gio/stable/GTask.html\";><code>GTask</code></"
+"link> to zjednodušuje poskytnutím standardního způsobu obalení všech tří "
+"věcí, plus navíc vlastními „daty úlohy“."
+
+#. (itstool) path: section/p
+#: C/async-programming.page:867
+msgid ""
+"The use of a <code>GTask</code> can replace the use of a <link href="
+"\"https://developer.gnome.org/gio/stable/GCancellable.html";
+"\"><code>GCancellable</code></link> for indicating whether an operation is "
+"ongoing."
+msgstr ""
+"Použití <code>GTask</code> může nahradit použití <link href=\"https://";
+"developer.gnome.org/gio/stable/GCancellable.html\"><code>GCancellable</"
+"code></link> pro indikaci, jestli běží nějaká operace."
+
+#. (itstool) path: example/p
+#: C/async-programming.page:874
+msgid ""
+"This example is functionally the same as <link xref=\"#series\"/>, but "
+"refactored to use a <code>GTask</code> to wrap the sequence of operations."
+msgstr ""
+"Tento příklad se z hlediska funkcionality shoduje s <link xref=\"#series\"/"
+">, ale je přepracován tak, aby používal <code>GTask</code> k obalení "
+"posloupnosti operací."
+
+#. (itstool) path: item/p
+#: C/async-programming.page:884
+msgid ""
+"State which was in <code>MyObjectPrivate</code> in <link xref=\"#series\"/> "
+"is now in the <code>ConnectToServerData</code> closure, which is set as the "
+"‘task data’ of the <code>GTask</code> representing the overall operation. "
+"This means it’s automatically freed after the operation returns."
+msgstr ""
+"Stav, který byl v <link xref=\"#series\"/> v <code>MyObjectPrivate</code>, je "
+"nyní uzavřen v <code>ConnectToServerData</code>, který je nastaven jako "
+"„daty úlohy“ objektu <code>GTask</code> představujícího celkovou operaci. To "
+"znamená, že je automaticky uvolněn po návratu z operace."
+
+#. (itstool) path: item/p
+#: C/async-programming.page:891
+msgid ""
+"Furthermore, this means that manipulations of <code>MyObjectPrivate</code> "
+"state are limited to the start and end of the sequence of operations, so "
+"reusing the task in different situations becomes easier — for example, it is "
+"now a lot easier to support running multiple such tasks in parallel."
+msgstr ""
+"Navíc to znamená, že zacházení se stavem <code>MyObjectPrivate</code> je "
+"omezeno na začátek a konec posloupnosti operací, takže znovupoužití úlohy v "
+"jiné situaci se stává snazší. Například je nyní mnohem snazší podporovat běh "
+"více takovýchto úloh souběžně."
+
+#. (itstool) path: item/p
+#: C/async-programming.page:898
+msgid ""
+"As the <code>GTask</code> holds a reference to <code>MyObject</code>, it is "
+"impossible for the object to be disposed while the sequence of operations is "
+"ongoing, so the <code>my_object_dispose()</code> code has been removed. "
+"Instead, a <code>my_object_close()</code> method exists to allow any pending "
+"operations can be cancelled so <code>MyObject</code> can be disposed when "
+"desired."
+msgstr ""
+"Protože <code>GTask</code> udržuje odkaz na <code>MyObject</code>, není "
+"objekt možné uvolnit, když probíhá posloupnost operací. Proto byl kód "
+"<code>my_object_dispose()</code> odstraněn. Místo něj je teď metoda "
+"<code>my_object_close()</code>, která umožňuje zrušení případných čekajících "
+"operací, takže <code>MyObject</code> může být v případě potřeby uvolněn."
+
+#. (itstool) path: example/code
+#: C/async-programming.page:909
+#, no-wrap
+msgid ""
+"\n"
+"static void\n"
+"connect_to_server_cb1 (GObject      *source_object,\n"
+"                       GAsyncResult *result,\n"
+"                       gpointer      user_data);\n"
+"static void\n"
+"connect_to_server_cb2 (GObject      *source_object,\n"
+"                       GAsyncResult *result,\n"
+"                       gpointer      user_data);\n"
+"static void\n"
+"connect_to_server_cb3 (GObject      *source_object,\n"
+"                       GAsyncResult *result,\n"
+"                       gpointer      user_data);\n"
+"\n"
+"typedef struct {\n"
+"  GSocketConnection *connection;  /* nullable; owned */\n"
+"  guint8 message_buffer[128];\n"
+"} ConnectToServerData;\n"
+"\n"
+"static void\n"
+"connect_to_server_data_free (ConnectToServerData *data)\n"
+"{\n"
+"  g_clear_object (&amp;data-&gt;connection);\n"
+"}\n"
+"\n"
+"void\n"
+"my_object_connect_to_server_async (MyObject            *self,\n"
+"                                   GCancellable        *cancellable,\n"
+"                                   GAsyncReadyCallback  callback,\n"
+"                                   gpointer             user_data)\n"
+"{\n"
+"  MyObjectPrivate *priv;\n"
+"  GTask *task = NULL;  /* owned */\n"
+"  ConnectToServerData *data = NULL;  /* owned */\n"
+"  GFile *address_file = NULL;  /* owned */\n"
+"\n"
+"  g_return_if_fail (MY_IS_OBJECT (self));\n"
+"  g_return_if_fail (cancellable == NULL || G_IS_CANCELLABLE (cancellable));\n"
+"\n"
+"  priv = my_object_get_instance_private (self);\n"
+"\n"
+"  if (priv-&gt;connect_task != NULL)\n"
+"    {\n"
+"      g_task_report_new_error (self, callback, user_data, NULL,\n"
+"                               G_IO_ERROR, G_IO_ERROR_PENDING,\n"
+"                               \"Already connecting to the server.\");\n"
+"      return;\n"
+"    }\n"
+"\n"
+"  /* Set up a cancellable. */\n"
+"  if (cancellable != NULL)\n"
+"    {\n"
+"      g_object_ref (cancellable);\n"
+"    }\n"
+"  else\n"
+"    {\n"
+"      cancellable = g_cancellable_new ();\n"
+"    }\n"
+"\n"
+"  /* Set up the task. */\n"
+"  task = g_task_new (self, cancellable, callback, user_data);\n"
+"  g_task_set_check_cancellable (task, FALSE);\n"
+"\n"
+"  data = g_malloc0 (sizeof (ConnectToServerData));\n"
+"  g_task_set_task_data (task, data,\n"
+"                        (GDestroyNotify) connect_to_server_data_free);\n"
+"\n"
+"  g_object_unref (cancellable);\n"
+"\n"
+"  priv-&gt;connect_task = g_object_ref (task);\n"
+"\n"
+"  /* Read the socket address. */\n"
+"  address_file = build_address_file ();\n"
+"  g_file_load_contents_async (address_file, g_task_get_cancellable (task),\n"
+"                              connect_to_server_cb1, g_object_ref (task));\n"
+"  g_object_unref (address_file);\n"
+"\n"
+"  g_clear_object (&amp;task);\n"
+"}\n"
+"\n"
+"static void\n"
+"connect_to_server_cb1 (GObject      *source_object,\n"
+"                       GAsyncResult *result,\n"
+"                       gpointer      user_data)\n"
+"{\n"
+"  MyObject *self;\n"
+"  MyObjectPrivate *priv;\n"
+"  GTask *task = NULL;  /* owned */\n"
+"  GFile *address_file;  /* unowned */\n"
+"  gchar *address = NULL;  /* owned */\n"
+"  gsize address_size = 0;\n"
+"  GInetAddress *inet_address = NULL;  /* owned */\n"
+"  GInetSocketAddress *inet_socket_address = NULL;  /* owned */\n"
+"  guint16 port = 123;\n"
+"  GSocketClient *socket_client = NULL;  /* owned */\n"
+"  GError *error = NULL;\n"
+"\n"
+"  address_file = G_FILE (source_object);\n"
+"  task = G_TASK (user_data);\n"
+"  self = g_task_get_source_object (task);\n"
+"  priv = my_object_get_instance_private (self);\n"
+"\n"
+"  /* Finish loading the address. */\n"
+"  g_file_load_contents_finish (address_file, result, &amp;address,\n"
+"                               &amp;address_size, NULL, &amp;error);\n"
+"\n"
+"  if (error != NULL)\n"
+"    {\n"
+"      goto done;\n"
+"    }\n"
+"\n"
+"  /* Parse the address. */\n"
+"  inet_address = g_inet_address_new_from_string (address);\n"
+"\n"
+"  if (inet_address == NULL)\n"
+"    {\n"
+"      /* Error. */\n"
+"      g_set_error (&amp;error, G_IO_ERROR, G_IO_ERROR_INVALID_ARGUMENT,\n"
+"                   \"Invalid address ‘%s’.\", address);\n"
+"      goto done;\n"
+"    }\n"
+"\n"
+"  inet_socket_address = g_inet_socket_address_new (inet_address, port);\n"
+"\n"
+"  /* Connect to the given address. */\n"
+"  socket_client = g_socket_client_new ();\n"
+"\n"
+"  g_socket_client_connect_async (socket_client,\n"
+"                                 G_SOCKET_CONNECTABLE (inet_socket_address),\n"
+"                                 g_task_get_cancellable (task),\n"
+"                                 connect_to_server_cb2,\n"
+"                                 g_object_ref (task));\n"
+"\n"
+"done:\n"
+"  if (error != NULL)\n"
+"    {\n"
+"      /* Stop the operation and propagate the error. */\n"
+"      g_clear_object (&amp;priv-&gt;connect_task);\n"
+"      g_task_return_error (task, error);\n"
+"    }\n"
+"\n"
+"  g_free (address);\n"
+"  g_clear_object (&amp;inet_address);\n"
+"  g_clear_object (&amp;inet_socket_address);\n"
+"  g_clear_object (&amp;socket_client);\n"
+"  g_clear_object (&amp;task);\n"
+"}\n"
+"\n"
+"static void\n"
+"connect_to_server_cb2 (GObject      *source_object,\n"
+"                       GAsyncResult *result,\n"
+"                       gpointer      user_data)\n"
+"{\n"
+"  MyObject *self;\n"
+"  MyObjectPrivate *priv;\n"
+"  GTask *task = NULL;  /* owned */\n"
+"  ConnectToServerData *data;  /* unowned */\n"
+"  GSocketClient *socket_client;  /* unowned */\n"
+"  GSocketConnection *connection = NULL;  /* owned */\n"
+"  GInputStream *input_stream;  /* unowned */\n"
+"  GError *error = NULL;\n"
+"\n"
+"  socket_client = G_SOCKET_CLIENT (source_object);\n"
+"  task = G_TASK (user_data);\n"
+"  data = g_task_get_task_data (task);\n"
+"  self = g_task_get_source_object (task);\n"
+"  priv = my_object_get_instance_private (self);\n"
+"\n"
+"  /* Finish connecting to the socket. */\n"
+"  connection = g_socket_client_connect_finish (socket_client, result,\n"
+"                                               &amp;error);\n"
+"\n"
+"  if (error != NULL)\n"
+"    {\n"
+"      goto done;\n"
+"    }\n"
+"\n"
+"  /* Store a reference to the connection so it is kept open while we read from\n"
+"   * it: #GInputStream does not keep a reference to a #GIOStream which contains\n"
+"   * it. */\n"
+"  data-&gt;connection = g_object_ref (connection);\n"
+"\n"
+"  /* Read a message from the connection. As the buffer is allocated as part of\n"
+"   * the per-task @data, multiple tasks can run concurrently. */\n"
+"  input_stream = g_io_stream_get_input_stream (G_IO_STREAM (connection));\n"
+"\n"
+"  g_input_stream_read_async (input_stream,\n"
+"                             data-&gt;message_buffer,\n"
+"                             sizeof (data-&gt;message_buffer),\n"
+"                             G_PRIORITY_DEFAULT, g_task_get_cancellable (task),\n"
+"                             connect_to_server_cb3, g_object_ref (task));\n"
+"\n"
+"done:\n"
+"  if (error != NULL)\n"
+"    {\n"
+"      /* Stop the operation and propagate the error. */\n"
+"      g_clear_object (&amp;priv-&gt;connect_task);\n"
+"      g_task_return_error (task, error);\n"
+"    }\n"
+"\n"
+"  g_clear_object (&amp;connection);\n"
+"  g_clear_object (&amp;task);\n"
+"}\n"
+"\n"
+"static void\n"
+"connect_to_server_cb3 (GObject      *source_object,\n"
+"                       GAsyncResult *result,\n"
+"                       gpointer      user_data)\n"
+"{\n"
+"  MyObject *self;\n"
+"  MyObjectPrivate *priv;\n"
+"  GTask *task = NULL;  /* owned */\n"
+"  ConnectToServerData *data;  /* unowned */\n"
+"  GInputStream *input_stream;  /* unowned */\n"
+"  gssize len = 0;\n"
+"  GError *error = NULL;\n"
+"\n"
+"  input_stream = G_INPUT_STREAM (source_object);\n"
+"  task = G_TASK (user_data);\n"
+"  data = g_task_get_task_data (task);\n"
+"  self = g_task_get_source_object (task);\n"
+"  priv = my_object_get_instance_private (self);\n"
+"\n"
+"  /* Finish reading from the socket. */\n"
+"  len = g_input_stream_read_finish (input_stream, result, &amp;error);\n"
+"\n"
+"  if (error != NULL)\n"
+"    {\n"
+"      goto done;\n"
+"    }\n"
+"\n"
+"  /* Handle the message. */\n"
+"  g_assert_cmpint (len, &gt;=, 0);\n"
+"  g_assert_cmpuint ((gsize) len, &lt;=, sizeof (data-&gt;message_buffer));\n"
+"\n"
+"  handle_received_message (self, data-&gt;message_buffer, len, &amp;error);\n"
+"\n"
+"  if (error != NULL)\n"
+"    {\n"
+"      goto done;\n"
+"    }\n"
+"\n"
+"  /* Success! */\n"
+"  g_task_return_boolean (task, TRUE);\n"
+"\n"
+"done:\n"
+"  /* Unconditionally mark the operation as finished.\n"
+"   *\n"
+"   * The streams should automatically close as this\n"
+"   * last reference is dropped. */\n"
+"  g_clear_object (&amp;priv-&gt;connect_task);\n"
+"\n"
+"  if (error != NULL)\n"
+"    {\n"
+"      /* Stop the operation and propagate the error. */\n"
+"      g_task_return_error (task, error);\n"
+"    }\n"
+"\n"
+"  g_clear_object (&amp;task);\n"
+"}\n"
+"\n"
+"void\n"
+"my_object_connect_to_server_finish (MyObject      *self,\n"
+"                                    GAsyncResult  *result,\n"
+"                                    GError       **error)\n"
+"{\n"
+"  g_return_if_fail (MY_IS_OBJECT (self));\n"
+"  g_return_if_fail (g_task_is_valid (result, self));\n"
+"  g_return_if_fail (error == NULL || *error == NULL);\n"
+"\n"
+"  g_task_propagate_boolean (G_TASK (result), error);\n"
+"}\n"
+"\n"
+"void\n"
+"my_object_close (MyObject *self)\n"
+"{\n"
+"  MyObjectPrivate *priv;\n"
+"\n"
+"  g_return_if_fail (MY_IS_OBJECT (self));\n"
+"\n"
+"  priv = my_object_get_instance_private (self);\n"
+"\n"
+"  if (priv-&gt;connect_task != NULL)\n"
+"    {\n"
+"      GCancellable *cancellable = g_task_get_cancellable (priv-&gt;connect_task);\n"
+"      g_cancellable_cancel (cancellable);\n"
+"    }\n"
+"}"
+msgstr ""
+"\n"
+"static void\n"
+"connect_to_server_cb1 (GObject      *source_object,\n"
+"                       GAsyncResult *result,\n"
+"                       gpointer      user_data);\n"
+"static void\n"
+"connect_to_server_cb2 (GObject      *source_object,\n"
+"                       GAsyncResult *result,\n"
+"                       gpointer      user_data);\n"
+"static void\n"
+"connect_to_server_cb3 (GObject      *source_object,\n"
+"                       GAsyncResult *result,\n"
+"                       gpointer      user_data);\n"
+"\n"
+"typedef struct {\n"
+"  GSocketConnection *connection;  /* nullable; owned */\n"
+"  guint8 message_buffer[128];\n"
+"} ConnectToServerData;\n"
+"\n"
+"static void\n"
+"connect_to_server_data_free (ConnectToServerData *data)\n"
+"{\n"
+"  g_clear_object (&amp;data-&gt;connection);\n"
+"}\n"
+"\n"
+"void\n"
+"my_object_connect_to_server_async (MyObject            *self,\n"
+"                                   GCancellable        *cancellable,\n"
+"                                   GAsyncReadyCallback  callback,\n"
+"                                   gpointer             user_data)\n"
+"{\n"
+"  MyObjectPrivate *priv;\n"
+"  GTask *task = NULL;  /* owned */\n"
+"  ConnectToServerData *data = NULL;  /* owned */\n"
+"  GFile *address_file = NULL;  /* owned */\n"
+"\n"
+"  g_return_if_fail (MY_IS_OBJECT (self));\n"
+"  g_return_if_fail (cancellable == NULL || G_IS_CANCELLABLE (cancellable));\n"
+"\n"
+"  priv = my_object_get_instance_private (self);\n"
+"\n"
+"  if (priv-&gt;connect_task != NULL)\n"
+"    {\n"
+"      g_task_report_new_error (self, callback, user_data, NULL,\n"
+"                               G_IO_ERROR, G_IO_ERROR_PENDING,\n"
+"                               \"Already connecting to the server.\");\n"
+"      return;\n"
+"    }\n"
+"\n"
+"  /* Nastavení, že je zrušitelné */\n"
+"  if (cancellable != NULL)\n"
+"    {\n"
+"      g_object_ref (cancellable);\n"
+"    }\n"
+"  else\n"
+"    {\n"
+"      cancellable = g_cancellable_new ();\n"
+"    }\n"
+"\n"
+"  /* Nastavení úlohy */\n"
+"  task = g_task_new (self, cancellable, callback, user_data);\n"
+"  g_task_set_check_cancellable (task, FALSE);\n"
+"\n"
+"  data = g_malloc0 (sizeof (ConnectToServerData));\n"
+"  g_task_set_task_data (task, data,\n"
+"                        (GDestroyNotify) connect_to_server_data_free);\n"
+"\n"
+"  g_object_unref (cancellable);\n"
+"\n"
+"  priv-&gt;connect_task = g_object_ref (task);\n"
+"\n"
+"  /* Čtení adresy soketu */\n"
+"  address_file = build_address_file ();\n"
+"  g_file_load_contents_async (address_file, g_task_get_cancellable (task),\n"
+"                              connect_to_server_cb1, g_object_ref (task));\n"
+"  g_object_unref (address_file);\n"
+"\n"
+"  g_clear_object (&amp;task);\n"
+"}\n"
+"\n"
+"static void\n"
+"connect_to_server_cb1 (GObject      *source_object,\n"
+"                       GAsyncResult *result,\n"
+"                       gpointer      user_data)\n"
+"{\n"
+"  MyObject *self;\n"
+"  MyObjectPrivate *priv;\n"
+"  GTask *task = NULL;  /* owned */\n"
+"  GFile *address_file;  /* unowned */\n"
+"  gchar *address = NULL;  /* owned */\n"
+"  gsize address_size = 0;\n"
+"  GInetAddress *inet_address = NULL;  /* owned */\n"
+"  GInetSocketAddress *inet_socket_address = NULL;  /* owned */\n"
+"  guint16 port = 123;\n"
+"  GSocketClient *socket_client = NULL;  /* owned */\n"
+"  GError *error = NULL;\n"
+"\n"
+"  address_file = G_FILE (source_object);\n"
+"  task = G_TASK (user_data);\n"
+"  self = g_task_get_source_object (task);\n"
+"  priv = my_object_get_instance_private (self);\n"
+"\n"
+"  /* Dokončení načtení adresy */\n"
+"  g_file_load_contents_finish (address_file, result, &amp;address,\n"
+"                               &amp;address_size, NULL, &amp;error);\n"
+"\n"
+"  if (error != NULL)\n"
+"    {\n"
+"      goto done;\n"
+"    }\n"
+"\n"
+"  /* Zpracování adresy */\n"
+"  inet_address = g_inet_address_new_from_string (address);\n"
+"\n"
+"  if (inet_address == NULL)\n"
+"    {\n"
+"      /* Chyba */\n"
+"      g_set_error (&amp;error, G_IO_ERROR, G_IO_ERROR_INVALID_ARGUMENT,\n"
+"                   \"Invalid address ‘%s’.\", address);\n"
+"      goto done;\n"
+"    }\n"
+"\n"
+"  inet_socket_address = g_inet_socket_address_new (inet_address, port);\n"
+"\n"
+"  /* Připojení k zadané adrese */\n"
+"  socket_client = g_socket_client_new ();\n"
+"\n"
+"  g_socket_client_connect_async (socket_client,\n"
+"                                 G_SOCKET_CONNECTABLE (inet_socket_address),\n"
+"                                 g_task_get_cancellable (task),\n"
+"                                 connect_to_server_cb2,\n"
+"                                 g_object_ref (task));\n"
+"\n"
+"done:\n"
+"  if (error != NULL)\n"
+"    {\n"
+"      /* Zastavení operace a propagace chyby */\n"
+"      g_clear_object (&amp;priv-&gt;connect_task);\n"
+"      g_task_return_error (task, error);\n"
+"    }\n"
+"\n"
+"  g_free (address);\n"
+"  g_clear_object (&amp;inet_address);\n"
+"  g_clear_object (&amp;inet_socket_address);\n"
+"  g_clear_object (&amp;socket_client);\n"
+"  g_clear_object (&amp;task);\n"
+"}\n"
+"\n"
+"static void\n"
+"connect_to_server_cb2 (GObject      *source_object,\n"
+"                       GAsyncResult *result,\n"
+"                       gpointer      user_data)\n"
+"{\n"
+"  MyObject *self;\n"
+"  MyObjectPrivate *priv;\n"
+"  GTask *task = NULL;  /* owned */\n"
+"  ConnectToServerData *data;  /* unowned */\n"
+"  GSocketClient *socket_client;  /* unowned */\n"
+"  GSocketConnection *connection = NULL;  /* owned */\n"
+"  GInputStream *input_stream;  /* unowned */\n"
+"  GError *error = NULL;\n"
+"\n"
+"  socket_client = G_SOCKET_CLIENT (source_object);\n"
+"  task = G_TASK (user_data);\n"
+"  data = g_task_get_task_data (task);\n"
+"  self = g_task_get_source_object (task);\n"
+"  priv = my_object_get_instance_private (self);\n"
+"\n"
+"  /* Dokončení připojení k soketu */\n"
+"  connection = g_socket_client_connect_finish (socket_client, result,\n"
+"                                               &amp;error);\n"
+"\n"
+"  if (error != NULL)\n"
+"    {\n"
+"      goto done;\n"
+"    }\n"
+"\n"
+"  /* Uchování odkazu na připojení, takže je udržované otevřené po dobu co z něj\n"
+"   * čteme: #GInputStream neudržuje odkaz na #GIOStream, který jej obsahuje */\n"
+"  data-&gt;connection = g_object_ref (connection);\n"
+"\n"
+"  /* Čtení zprávy z připojení. Protože je vyrovnávací paměť alokovaná jako\n"
+"   * součást @data pro jednotlivé úlohy, může běžet víc úloh naráz. */\n"
+"  input_stream = g_io_stream_get_input_stream (G_IO_STREAM (connection));\n"
+"\n"
+"  g_input_stream_read_async (input_stream,\n"
+"                             data-&gt;message_buffer,\n"
+"                             sizeof (data-&gt;message_buffer),\n"
+"                             G_PRIORITY_DEFAULT, g_task_get_cancellable (task),\n"
+"                             connect_to_server_cb3, g_object_ref (task));\n"
+"\n"
+"done:\n"
+"  if (error != NULL)\n"
+"    {\n"
+"      /* Zastavení operace a propagace chyby */\n"
+"      g_clear_object (&amp;priv-&gt;connect_task);\n"
+"      g_task_return_error (task, error);\n"
+"    }\n"
+"\n"
+"  g_clear_object (&amp;connection);\n"
+"  g_clear_object (&amp;task);\n"
+"}\n"
+"\n"
+"static void\n"
+"connect_to_server_cb3 (GObject      *source_object,\n"
+"                       GAsyncResult *result,\n"
+"                       gpointer      user_data)\n"
+"{\n"
+"  MyObject *self;\n"
+"  MyObjectPrivate *priv;\n"
+"  GTask *task = NULL;  /* owned */\n"
+"  ConnectToServerData *data;  /* unowned */\n"
+"  GInputStream *input_stream;  /* unowned */\n"
+"  gssize len = 0;\n"
+"  GError *error = NULL;\n"
+"\n"
+"  input_stream = G_INPUT_STREAM (source_object);\n"
+"  task = G_TASK (user_data);\n"
+"  data = g_task_get_task_data (task);\n"
+"  self = g_task_get_source_object (task);\n"
+"  priv = my_object_get_instance_private (self);\n"
+"\n"
+"  /* Dokončení čtení ze soketu */\n"
+"  len = g_input_stream_read_finish (input_stream, result, &amp;error);\n"
+"\n"
+"  if (error != NULL)\n"
+"    {\n"
+"      goto done;\n"
+"    }\n"
+"\n"
+"  /* Obsluha zprávy */\n"
+"  g_assert_cmpint (len, &gt;=, 0);\n"
+"  g_assert_cmpuint ((gsize) len, &lt;=, sizeof (data-&gt;message_buffer));\n"
+"\n"
+"  handle_received_message (self, data-&gt;message_buffer, len, &amp;error);\n"
+"\n"
+"  if (error != NULL)\n"
+"    {\n"
+"      goto done;\n"
+"    }\n"
+"\n"
+"  /* Úspěch! */\n"
+"  g_task_return_boolean (task, TRUE);\n"
+"\n"
+"done:\n"
+"  /* Nepodmíněné označení operace za dokončenou.\n"
+"   *\n"
+"   * Proud dat by se měl automaticky zavřít, protože\n"
+"   * je zahozen poslední odkaz. */\n"
+"  g_clear_object (&amp;priv-&gt;connect_task);\n"
+"\n"
+"  if (error != NULL)\n"
+"    {\n"
+"      /* Zastavení operace a propagace chyby */\n"
+"      g_task_return_error (task, error);\n"
+"    }\n"
+"\n"
+"  g_clear_object (&amp;task);\n"
+"}\n"
+"\n"
+"void\n"
+"my_object_connect_to_server_finish (MyObject      *self,\n"
+"                                    GAsyncResult  *result,\n"
+"                                    GError       **error)\n"
+"{\n"
+"  g_return_if_fail (MY_IS_OBJECT (self));\n"
+"  g_return_if_fail (g_task_is_valid (result, self));\n"
+"  g_return_if_fail (error == NULL || *error == NULL);\n"
+"\n"
+"  g_task_propagate_boolean (G_TASK (result), error);\n"
+"}\n"
+"\n"
+"void\n"
+"my_object_close (MyObject *self)\n"
+"{\n"
+"  MyObjectPrivate *priv;\n"
+"\n"
+"  g_return_if_fail (MY_IS_OBJECT (self));\n"
+"\n"
+"  priv = my_object_get_instance_private (self);\n"
+"\n"
+"  if (priv-&gt;connect_task != NULL)\n"
+"    {\n"
+"      GCancellable *cancellable = g_task_get_cancellable (priv-&gt;connect_task);\n"
+"      g_cancellable_cancel (cancellable);\n"
+"    }\n"
+"}"
+
 #. (itstool) path: credit/name
 #: C/c-coding-style.page:15 C/documentation.page:21
 msgid "The GTK+ Team"
@@ -2522,7 +4772,7 @@ msgid ""
 "href=\"https://www.sqlite.org/c3ref/stmt.html\";>prepared statement</link> "
 "and <link href=\"https://www.sqlite.org/c3ref/bind_blob.html\";>value "
 "binding</link> API, rather than by constructing SQL strings then passing "
-"them to SQLite to parse. Constructing strings makes <link href=\"http://en.";
+"them to SQLite to parse. Constructing strings makes <link href=\"https://en.";
 "wikipedia.org/wiki/SQL_injection\">SQL injection</link> vulnerabilities very "
 "likely, which can give attackers access to arbitrary user data from the "
 "database."
@@ -2533,7 +4783,7 @@ msgstr ""
 "pomocí <link href=\"https://www.sqlite.org/c3ref/stmt.html";
 "\">předpřipravených výrazů</link> SQLite a API pro <link href=\"https://www.";
 "sqlite.org/c3ref/bind_blob.html\">napojení hodnot</link>. Přímé sestavování "
-"řetězců zvyšuje pravděpodobnost útoků typu <link href=\"http://en.wikipedia.";
+"řetězců zvyšuje pravděpodobnost útoků typu <link href=\"https://cs.wikipedia.";
 "org/wiki/SQL_injection\">injektování SQL</link>, pomocí kterých může útočník "
 "získat přístup k libovolným uživatelským datům v databázi."
 
@@ -2547,12 +4797,13 @@ msgstr "Používání GVDB"
 msgid ""
 "GVDB has a simple API which mirrors a conventional hash table. Presently, "
 "GVDB is only available as a copy-and-paste library; fetch the most recent "
-"copy of the code from <link href=\"https://git.gnome.org/browse/gvdb\";>GVDB "
-"git</link> and copy it into your project. It is licenced under LGPLv2.1+."
+"copy of the code from <link href=\"https://gitlab.gnome.org/GNOME/gvdb";
+"\">GVDB git</link> and copy it into your project. It is licensed under "
+"LGPLv2.1+."
 msgstr ""
 "GVDB má jednoduché API, které zrcadlí běžné hašovací tabulky. V současnosti "
 "je GVDB odstupné jen jako knihovna pro postup „kopírovat a vložit“. Stáhněte "
-"si nejnovější kopii kódu z <link href=\"https://git.gnome.org/browse/gvdb";
+"si nejnovější kopii kódu z <link href=\"https://gitlab.gnome.org/GNOME/gvdb";
 "\">gitu GVDB</link> a nakopírujte ji do svého projektu. Je licencována pod "
 "LGPLv2.1+."
 
@@ -3491,7 +5742,7 @@ msgstr ""
 #. (itstool) path: section/p
 #: C/file-system.page:172
 msgid ""
-"As a second line of defence, all projects which access the file system "
+"As a second line of defense, all projects which access the file system "
 "should consider providing a mandatory access control profile, using a system "
 "such as <link href=\"http://apparmor.net/\";>AppArmor</link> or <link href="
 "\"http://selinuxproject.org/\";>SELinux</link>, which limits the directories "
@@ -3524,7 +5775,7 @@ msgid ""
 "<link href=\"https://developer.gnome.org/glib/stable/glib-Error-Reporting.";
 "html\"><code>GError</code></link> is the standard error reporting mechanism "
 "for GLib-using code, and can be thought of as a C implementation of an <link "
-"href=\"http://en.wikipedia.org/wiki/Exception_handling\";>exception</link>."
+"href=\"https://en.wikipedia.org/wiki/Exception_handling\";>exception</link>."
 msgstr ""
 "<link href=\"https://developer.gnome.org/glib/stable/glib-Error-Reporting.";
 "html\"><code>GError</code></link> je standardní mechanizmus hlášení chyb pro "
@@ -3926,8 +6177,8 @@ msgid ""
 "<link href=\"https://wiki.gnome.org/Projects/GObjectIntrospection\";> GObject "
 "introspection</link> (abbreviated ‘GIR’) is a system which extracts APIs "
 "from C code and produces binary type libraries which can be used by non-C "
-"language bindings, and other tools, to <link href=\"http://en.wikipedia.org/";
-"wiki/Type_introspection\">introspect</link> or <link href=\"http://en.";
+"language bindings, and other tools, to <link href=\"https://en.wikipedia.org/";
+"wiki/Type_introspection\">introspect</link> or <link href=\"https://en.";
 "wikipedia.org/wiki/Language_binding\">wrap</link> the original C libraries. "
 "It uses a system of annotations in documentation comments in the C code to "
 "expose extra information about the APIs which is not machine readable from "
@@ -3936,12 +6187,12 @@ msgstr ""
 "<link href=\"https://wiki.gnome.org/Projects/GObjectIntrospection\";>GObject "
 "introspection</link> (zkráceně „GIR“) je systém, který získává API z kódu v "
 "jazyce C a na jejich základě vytváří binární knihovny, které můžete použít k "
-"navázání jiných programovacích jazyků a v nástrojích pro <link href=\"http://";
-"en.wikipedia.org/wiki/Type_introspection\">introspekci</link> nebo <link "
-"href=\"http://en.wikipedia.org/wiki/Language_binding\";>obalení</link> "
-"originálních knihoven v C. Používá se k tomu systém anotací v dokumentačních "
-"komentářích ve zdrojových kódech, pomocí kterých se zveřejní doplňující "
-"informace o API, které jsou přímo z kódu strojově čitelné."
+"navázání jiných programovacích jazyků a v nástrojích pro <link href="
+"\"https://en.wikipedia.org/wiki/Type_introspection\";>introspekci</link> nebo "
+"<link href=\"https://cs.wikipedia.org/wiki/Language_Binding\";>navázání</"
+"link> originálních knihoven v C. Používá se k tomu systém anotací v "
+"dokumentačních komentářích ve zdrojových kódech, pomocí kterých se zveřejní "
+"doplňující informace o API, které jsou přímo z kódu strojově čitelné."
 
 #. (itstool) path: synopsis/p
 #: C/introspection.page:37
@@ -4620,7 +6871,7 @@ msgstr "Co je to <code>GMainContext</code>?"
 msgid ""
 "<link href=\"https://developer.gnome.org/glib/stable/glib-The-Main-Event-";
 "Loop.html#GMainContext\"><code>GMainContext</code></link> is a generalized "
-"implementation of an <link href=\"http://en.wikipedia.org/wiki/Event_loop";
+"implementation of an <link href=\"https://en.wikipedia.org/wiki/Event_loop";
 "\">event loop</link>, useful for implementing polled file I/O or event-based "
 "widget systems (such as GTK+). It is at the core of almost every GLib "
 "application. To understand <code>GMainContext</code> requires understanding "
@@ -4628,7 +6879,7 @@ msgid ""
 msgstr ""
 "<link href=\"https://developer.gnome.org/glib/stable/glib-The-Main-Event-";
 "Loop.html#GMainContext\"><code>GMainContext</code></link> je zobecněná "
-"implementace <link href=\"http://en.wikipedia.org/wiki/Event_loop\";>smyčky "
+"implementace <link href=\"https://en.wikipedia.org/wiki/Event_loop\";>smyčky "
 "událostí</link>, která je vhodná pro implementaci skupinových V/V "
 "souborových operací nebo systému widgetů založeného na událostech (jako je "
 "GTK+). Je jádrem většiny aplikací GLib. Pochopení <code>GMainContext</code> "
@@ -5298,13 +7549,13 @@ msgid ""
 "Never iterate a context created outside the library, including the global-"
 "default or thread-default contexts. Otherwise, <code>GSource</code>s created "
 "in the application may be dispatched when the application is not expecting "
-"it, causing <link href=\"http://en.wikipedia.org/wiki/Reentrancy_%28computing";
-"%29\">re-entrancy problems</link> for the application code."
+"it, causing <link href=\"https://en.wikipedia.org/wiki/Reentrancy_";
+"%28computing%29\">re-entrancy problems</link> for the application code."
 msgstr ""
 "Nikdy neprovádějte iteraci kontextu vytvořeného mimo knihovnu. Týká se to i "
 "výchozího globálního kontextu a výchozího kontextu vlákna. V opačném případě "
 "může být <code>GSource</code> vytvořený v aplikaci vyslán, když to aplikace "
-"neočekává, což způsobí <link href=\"http://en.wikipedia.org/wiki/Reentrancy_";
+"neočekává, což způsobí <link href=\"https://en.wikipedia.org/wiki/Reentrancy_";
 "%28computing%29\">problém s opětovným vstupem (reentrance)</link> v kódu "
 "aplikace."
 
@@ -5379,26 +7630,32 @@ msgstr ""
 #. (itstool) path: section/p
 #: C/main-contexts.page:468
 msgid ""
-"Always write things asynchronously internally (using <link xref=\"#gtask"
-"\"><code>GTask</code></link> where appropriate), and keep synchronous "
-"wrappers at the very top level of an API, where they can be implemented by "
-"calling <code>g_main_context_iteration()</code> on a specific "
-"<code>GMainContext</code>. Again, this makes future refactoring easier. This "
-"is demonstrated in the above example: the thread uses "
-"<code>g_output_stream_write_async()</code> rather than "
-"<code>g_output_stream_write()</code>."
-msgstr ""
-"Věci vždy pište interně jako asynchronní (kde je to vhodné, tak pomocí <link "
-"xref=\"#gtask\"><code>GTask</code></link>) a na nejvyšší úrovni API pak "
-"udržujte synchronní obalující funkci, kterou můžete implementovat pomocí "
-"volání <code>g_main_context_iteration()</code> na příslušný "
-"<code>GMainContext</code>. Pro zopakování: umožní to v budoucnu snadnější "
-"přepracování kódu. Ukázáno je to na příkladu výše: vlákno používá raději "
-"<code>g_output_stream_write_async()</code> namísto "
-"<code>g_output_stream_write()</code>."
-
-#. (itstool) path: section/p
-#: C/main-contexts.page:479
+"<link xref=\"async-programming\">Write things asynchronously</link> "
+"internally (using <link xref=\"#gtask\"><code>GTask</code></link> where "
+"appropriate), and keep synchronous wrappers at the very top level of an API, "
+"where they can be implemented by calling <code>g_main_context_iteration()</"
+"code> on a specific <code>GMainContext</code>. Again, this makes future "
+"refactoring easier. This is demonstrated in the above example: the thread "
+"uses <code>g_output_stream_write_async()</code> rather than "
+"<code>g_output_stream_write()</code>. A worker thread may be used instead, "
+"and this can simplify the callback chain for long series of asynchronous "
+"calls; but at the cost of increased complexity in verifying the code is race-"
+"free."
+msgstr ""
+"Věci interně <link xref=\"async-programming\">pište jako asynchronní</link> "
+"(kde je to vhodné, tak pomocí <link xref=\"#gtask\"><code>GTask</code></"
+"link>) a na nejvyšší úrovni API pak udržujte synchronní obalující funkci, "
+"kterou můžete implementovat pomocí volání <code>g_main_context_iteration()</"
+"code> na příslušný <code>GMainContext</code>. Pro zopakování: umožní to v "
+"budoucnu snadnější přepracování kódu. Ukázáno je to na příkladu výše: vlákno "
+"používá raději <code>g_output_stream_write_async()</code> namísto "
+"<code>g_output_stream_write()</code>. Místo toho může být použito pracovní "
+"vlákno a tím se může zjednodušit řetěz zpětných volání pro dlouhé "
+"posloupnosti asynchronních volání, ale za cenu nárustu složitosti ověřování "
+"kódu vůči souběhu podmínek."
+
+#. (itstool) path: section/p
+#: C/main-contexts.page:483
 msgid ""
 "Always match pushes and pops of the thread-default main context: "
 "<code>g_main_context_push_thread_default()</code> and "
@@ -5409,34 +7666,34 @@ msgstr ""
 "<code>g_main_context_pop_thread_default()</code>."
 
 #. (itstool) path: section/title
-#: C/main-contexts.page:487
+#: C/main-contexts.page:491
 msgid "Ensuring Functions are Called in the Right Context"
 msgstr "Zajištění, aby funkce byly volány ve správném kontextu"
 
 #. (itstool) path: section/p
-#: C/main-contexts.page:489
+#: C/main-contexts.page:493
 msgid ""
 "The ‘right context’ is the thread-default main context of the <em>thread the "
 "function should be executing in</em>. This assumes the typical case that "
 "every thread has a <em>single</em> main context running in a main loop. A "
-"main context effectively provides a work or <link href=\"http://en.wikipedia.";
-"org/wiki/Message_queue\">message queue</link> for the thread — something "
-"which the thread can periodically check to determine if there is work "
-"pending from another thread. Putting a message on this queue – invoking a "
-"function in another main context – will result in it eventually being "
+"main context effectively provides a work or <link href=\"https://en.";
+"wikipedia.org/wiki/Message_queue\">message queue</link> for the thread — "
+"something which the thread can periodically check to determine if there is "
+"work pending from another thread. Putting a message on this queue – invoking "
+"a function in another main context – will result in it eventually being "
 "dispatched in that thread."
 msgstr ""
 "„Ten pravý kontext“ je výchozí hlavní kontext vlákna pro <em>vlákno, ve "
 "kterém má být funkce spuštěna</em>. Předpokládá to typický případ, kdy každé "
 "vlákno má <em>jeden</em> hlavní kontext, ve kterém běží hlavní smyčka. "
-"Hlavní kontext v podstatě poskytuje práci nebo <link href=\"http://en.";
+"Hlavní kontext v podstatě poskytuje práci nebo <link href=\"https://en.";
 "wikipedia.org/wiki/Message_queue\">frontu zpráv</link> pro vlákno – něco, v "
 "čem vlákno může pravidelně kontrolovat, jestli byla dokončena práce v jiném "
 "vlákně. Vložením zprávy do fronty – vyvoláním funkce v jiném hlavním "
 "kontextu – způsobí její případné vyslání v onom vlákně."
 
 #. (itstool) path: example/p
-#: C/main-contexts.page:503
+#: C/main-contexts.page:507
 msgid ""
 "For example, if an application does a long and CPU-intensive computation it "
 "should schedule this in a background thread so that UI updates in the main "
@@ -5452,13 +7709,13 @@ msgstr ""
 "vlákně."
 
 #. (itstool) path: example/p
-#: C/main-contexts.page:511
+#: C/main-contexts.page:515
 msgid ""
 "Furthermore, if the computation function can be limited to a single thread, "
 "it becomes easy to eliminate the need for locking a lot of the data it "
 "accesses. This assumes that other threads are implemented similarly and "
 "hence most data is only accessed by a single thread, with threads "
-"communicating by <link href=\"http://en.wikipedia.org/wiki/Message_passing";
+"communicating by <link href=\"https://en.wikipedia.org/wiki/Message_passing";
 "\">message passing</link>. This allows each thread to update its data at its "
 "leisure, which significantly simplifies locking."
 msgstr ""
@@ -5466,12 +7723,12 @@ msgstr ""
 "usnadnilo zamezení potřeby zamykat příliš dat při přístupu k nim. To "
 "předpokládá, že ostatní vlákna jsou implementována podobně a tudíž je k "
 "většině dat přistupováno jen z jediného vlákna a mezi vlákny se komunikuje "
-"pomocí <link href=\"http://en.wikipedia.org/wiki/Message_passing\";>předávání "
-"zpráv</link>. Umožní to jednotlivým vláknům aktualizovat svá data, kdy se "
-"jim to hodí, což významně zjednodušuje zamykání."
+"pomocí <link href=\"https://cs.wikipedia.org/wiki/Zas%C3%ADl%C3%A1n%C3%AD_zpr";
+"%C3%A1v\">předávání zpráv</link>. Umožní to jednotlivým vláknům aktualizovat "
+"svá data, kdy se jim to hodí, což významně zjednodušuje zamykání."
 
 #. (itstool) path: section/p
-#: C/main-contexts.page:523
+#: C/main-contexts.page:527
 msgid ""
 "For some functions, there might be no reason to care which context they’re "
 "executed in, perhaps because they’re asynchronous and hence do not block the "
@@ -5488,7 +7745,7 @@ msgstr ""
 "vyvolat."
 
 #. (itstool) path: example/p
-#: C/main-contexts.page:533
+#: C/main-contexts.page:537
 msgid ""
 "For example, the progress callback in <link href=\"https://developer.gnome.";
 "org/gio/stable/GFile.html#g-file-copy-async\"><code>g_file_copy_async()</"
@@ -5501,12 +7758,12 @@ msgstr ""
 "době volání inicializace."
 
 #. (itstool) path: section/title
-#: C/main-contexts.page:542
+#: C/main-contexts.page:546
 msgid "Principles of Invocation"
 msgstr "Principy vyvolání"
 
 #. (itstool) path: section/p
-#: C/main-contexts.page:544
+#: C/main-contexts.page:548
 msgid ""
 "The core principle of invoking a function in a specific context is simple, "
 "and is walked through below to explain the concepts. In practice the <link "
@@ -5519,7 +7776,7 @@ msgstr ""
 "<code>g_main_context_invoke_full()</code></link>."
 
 #. (itstool) path: section/p
-#: C/main-contexts.page:551
+#: C/main-contexts.page:555
 msgid ""
 "A <link href=\"https://developer.gnome.org/glib/stable/glib-The-Main-Event-";
 "Loop.html#GSource\"><code>GSource</code></link> has to be added to the "
@@ -5540,7 +7797,7 @@ msgstr ""
 "ona funkce bude spuštěna po nějaké prodlevě."
 
 #. (itstool) path: section/p
-#: C/main-contexts.page:562
+#: C/main-contexts.page:566
 msgid ""
 "The <code>GSource</code> will be <link xref=\"#what-is-gmaincontext"
 "\">dispatched as soon as it’s ready</link>, calling the function on the "
@@ -5562,7 +7819,7 @@ msgstr ""
 "to nemusí být ta samá situace)."
 
 #. (itstool) path: section/p
-#: C/main-contexts.page:574
+#: C/main-contexts.page:578
 msgid ""
 "Data can be passed between threads as the <code>user_data</code> passed to "
 "the <code>GSource</code>’s callback. This is set on the source using <link "
@@ -5581,7 +7838,7 @@ msgstr ""
 "musíte je zabalit do nějaké struktury, kterou si naalokujete."
 
 #. (itstool) path: example/p
-#: C/main-contexts.page:584
+#: C/main-contexts.page:588
 msgid ""
 "The example below demonstrates the underlying principles, but there are "
 "convenience methods explained below which simplify things."
@@ -5590,7 +7847,7 @@ msgstr ""
 "metody probrané dále, které vše zjednodušují."
 
 #. (itstool) path: example/code
-#: C/main-contexts.page:589
+#: C/main-contexts.page:593
 #, no-wrap
 msgid ""
 "\n"
@@ -5811,7 +8068,7 @@ msgstr ""
 "}"
 
 #. (itstool) path: example/p
-#: C/main-contexts.page:698
+#: C/main-contexts.page:702
 msgid ""
 "This invocation is <em style=\"strong\">uni-directional</em>: it calls "
 "<code>my_func()</code> in <code>thread1</code>, but there’s no way to return "
@@ -5827,11 +8084,11 @@ msgstr ""
 "rozebírat."
 
 #. (itstool) path: example/p
-#: C/main-contexts.page:706
+#: C/main-contexts.page:710
 msgid ""
 "To maintain thread safety, data which is potentially accessed by multiple "
 "threads must make those accesses mutually exclusive using a <link href="
-"\"http://en.wikipedia.org/wiki/Mutual_exclusion\";>mutex</link>. Data "
+"\"https://en.wikipedia.org/wiki/Mutual_exclusion\";>mutex</link>. Data "
 "potentially accessed by multiple threads: <code>thread1_main_context</code>, "
 "passed in the fork call to <code>thread1_main</code>; and <code>some_object</"
 "code>, a reference to which is passed in the data closure. Critically, GLib "
@@ -5841,17 +8098,18 @@ msgid ""
 msgstr ""
 "Aby byla zachována bezpečnost vlákna, musí být přístup k datům, ke kterým je "
 "potenciálně možné přistupovat z více vláken, vzájemně vyloučen pomocí <link "
-"href=\"http://en.wikipedia.org/wiki/Mutual_exclusion\";>mutexu</link>. Data s "
-"potenciálním přístupem z více vláken: <code>thread1_main_context</code>, "
-"předaný při rozvětvení do <code>thread1_main</code>, a <code>some_object</"
-"code>, reference, do které jsou předána zapouzdřená data. Podstatné je, že "
-"GLib zaručuje, že <code>GMainContext</code> je z hlediska vláken bezpečný, "
-"takže sdílení <code>thread1_main_context</code> mezi vlákny je bezpečné. "
-"Příklad předpokládá, že ostatní kód přistupující k <code>some_object</code> "
-"je z hlediska vláken bezpečný."
+"href=\"https://cs.wikipedia.org/wiki/Vz%C3%A1jemn%C3%A9_vylou%C4%8Den%C3%AD";
+"\">mutexu</link>. Data s potenciálním přístupem z více vláken: "
+"<code>thread1_main_context</code>, předaný při rozvětvení do "
+"<code>thread1_main</code>, a <code>some_object</code>, reference, do které "
+"jsou předána zapouzdřená data. Podstatné je, že GLib zaručuje, že "
+"<code>GMainContext</code> je z hlediska vláken bezpečný, takže sdílení "
+"<code>thread1_main_context</code> mezi vlákny je bezpečné. Příklad "
+"předpokládá, že ostatní kód přistupující k <code>some_object</code> je z "
+"hlediska vláken bezpečný."
 
 #. (itstool) path: example/p
-#: C/main-contexts.page:720
+#: C/main-contexts.page:724
 msgid ""
 "Note that <code>some_string</code> and <code>some_int</code> cannot be "
 "accessed from both threads, because <em>copies</em> of them are passed to "
@@ -5868,7 +8126,7 @@ msgstr ""
 "předejte problémům se synchronizací při uvolňování <code>some_string</code>."
 
 #. (itstool) path: example/p
-#: C/main-contexts.page:729
+#: C/main-contexts.page:733
 msgid ""
 "Similarly, a reference to <code>some_object</code> is transferred to "
 "<code>thread1</code>, which works around the issue of synchronizing "
@@ -5879,7 +8137,7 @@ msgstr ""
 "objektu (viz <link xref=\"memory-management\"/>)."
 
 #. (itstool) path: example/p
-#: C/main-contexts.page:735
+#: C/main-contexts.page:739
 msgid ""
 "<code>g_idle_source_new()</code> is used rather than the simpler "
 "<code>g_idle_add()</code> so the <code>GMainContext</code> to attach to can "
@@ -5890,12 +8148,12 @@ msgstr ""
 "<code>GMainContext</code>."
 
 #. (itstool) path: section/title
-#: C/main-contexts.page:744
+#: C/main-contexts.page:748
 msgid "Convenience Method: <code>g_main_context_invoke_full()</code>"
 msgstr "Užitečná metoda: <code>g_main_context_invoke_full()</code>"
 
 #. (itstool) path: section/p
-#: C/main-contexts.page:748
+#: C/main-contexts.page:752
 msgid ""
 "This is simplified greatly by the convenience method, <link href=\"https://";
 "developer.gnome.org/glib/stable/glib-The-Main-Event-Loop.html#g-main-context-"
@@ -5913,7 +8171,7 @@ msgstr ""
 "pádem je funkce vyvolána ve vlákně, pro které je určený kontext výchozí. "
 
 #. (itstool) path: section/p
-#: C/main-contexts.page:757
+#: C/main-contexts.page:761
 msgid ""
 "<code>g_main_context_invoke()</code> can be used instead if the user data "
 "does not need to be freed by a <code>GDestroyNotify</code> callback after "
@@ -5924,7 +8182,7 @@ msgstr ""
 "funkce <code>g_main_context_invoke()</code>."
 
 #. (itstool) path: example/p
-#: C/main-contexts.page:764
+#: C/main-contexts.page:768
 msgid ""
 "Modifying the earlier example, the <code>invoke_my_func()</code> function "
 "can be replaced by the following:"
@@ -5933,7 +8191,7 @@ msgstr ""
 "nahrazena následovně:"
 
 #. (itstool) path: example/code
-#: C/main-contexts.page:769
+#: C/main-contexts.page:773
 #, no-wrap
 msgid ""
 "\n"
@@ -5983,7 +8241,7 @@ msgstr ""
 "}"
 
 #. (itstool) path: example/p
-#: C/main-contexts.page:792
+#: C/main-contexts.page:796
 msgid ""
 "Consider what happens if <code>invoke_my_func()</code> were called from "
 "<code>thread1</code>, rather than from the main thread. With the original "
@@ -6007,7 +8265,7 @@ msgstr ""
 "iterace."
 
 #. (itstool) path: example/p
-#: C/main-contexts.page:806
+#: C/main-contexts.page:810
 msgid ""
 "This subtle behavior difference doesn’t matter in most cases, but is worth "
 "bearing in mind since it can affect blocking behavior "
@@ -6021,12 +8279,12 @@ msgstr ""
 "před návratem)."
 
 #. (itstool) path: section/title
-#: C/main-contexts.page:818
+#: C/main-contexts.page:822
 msgid "Checking Threading"
 msgstr "Kontrola vláken"
 
 #. (itstool) path: section/p
-#: C/main-contexts.page:820
+#: C/main-contexts.page:824
 msgid ""
 "It is useful to document which thread each function should be called in, in "
 "the form of an assertion:"
@@ -6035,7 +8293,7 @@ msgstr ""
 "formou aserce:"
 
 #. (itstool) path: section/code
-#: C/main-contexts.page:824
+#: C/main-contexts.page:828
 #, no-wrap
 msgid ""
 "\n"
@@ -6045,7 +8303,7 @@ msgstr ""
 "g_assert (g_main_context_is_owner (expected_main_context));"
 
 #. (itstool) path: section/p
-#: C/main-contexts.page:827
+#: C/main-contexts.page:831
 msgid ""
 "If that’s put at the top of each function, any assertion failure will "
 "highlight a case where a function has been called from the wrong thread. It "
@@ -6059,7 +8317,7 @@ msgstr ""
 "který může při volání funkce z nesprávného vlákna snadno nastat."
 
 #. (itstool) path: section/p
-#: C/main-contexts.page:835
+#: C/main-contexts.page:839
 msgid ""
 "This technique can also be applied to signal emissions and callbacks, "
 "improving type safety as well as asserting the right context is used. Note "
@@ -6075,12 +8333,12 @@ msgstr ""
 "hlavního kontextu."
 
 #. (itstool) path: example/p
-#: C/main-contexts.page:844
+#: C/main-contexts.page:848
 msgid "For example, instead of using the following when emitting a signal:"
 msgstr "Například místo použití následujícího kódu při vyslání signálu:"
 
 #. (itstool) path: example/code
-#: C/main-contexts.page:847
+#: C/main-contexts.page:851
 #, no-wrap
 msgid ""
 "\n"
@@ -6100,12 +8358,12 @@ msgstr ""
 "                       param1, param2, &amp;retval);"
 
 #. (itstool) path: example/p
-#: C/main-contexts.page:855
+#: C/main-contexts.page:859
 msgid "The following can be used:"
 msgstr "Může být použito následující:"
 
 #. (itstool) path: example/code
-#: C/main-contexts.page:858
+#: C/main-contexts.page:862
 #, no-wrap
 msgid ""
 "\n"
@@ -6141,12 +8399,12 @@ msgstr ""
 "}"
 
 #. (itstool) path: section/title
-#: C/main-contexts.page:877
+#: C/main-contexts.page:881
 msgid "<code>GTask</code>"
 msgstr "<code>GTask</code>"
 
 #. (itstool) path: section/p
-#: C/main-contexts.page:879
+#: C/main-contexts.page:883
 msgid ""
 "<link href=\"https://developer.gnome.org/gio/stable/GTask.html";
 "\"><code>GTask</code></link> provides a slightly different approach to "
@@ -6161,7 +8419,7 @@ msgstr ""
 "konkrétním."
 
 #. (itstool) path: section/p
-#: C/main-contexts.page:886
+#: C/main-contexts.page:890
 msgid ""
 "<code>GTask</code> takes a data closure and a function to execute, and "
 "provides ways to return the result from this function. It handles everything "
@@ -6174,7 +8432,7 @@ msgstr ""
 "sdílených interně v GLib."
 
 #. (itstool) path: example/p
-#: C/main-contexts.page:894
+#: C/main-contexts.page:898
 msgid ""
 "By combining <link xref=\"#g-main-context-invoke-full"
 "\"><code>g_main_context_invoke_full()</code></link> and <code>GTask</code>, "
@@ -6187,7 +8445,7 @@ msgstr ""
 "výsledek do aktuálního kontextu:"
 
 #. (itstool) path: example/code
-#: C/main-contexts.page:900
+#: C/main-contexts.page:904
 #, no-wrap
 msgid ""
 "\n"
@@ -7414,7 +9672,7 @@ msgid ""
 "always either <code>NULL</code>, or has ownership of a GObject (but which "
 "never points to a GObject it no longer owns)."
 msgstr ""
-"Díky tomu je snažší napsat programový kód, který zaručuje, že ukazatel na "
+"Díky tomu je snazší napsat programový kód, který zaručuje, že ukazatel na "
 "GObject je vždy buď <code>NULL</code> nebo je vlastněn objektem GObject (ale "
 "nikdy neukazuje na GObject, který již není vlastněn)."
 
@@ -9365,18 +11623,19 @@ msgid ""
 "When writing projects using GLib, the default approach should be to <em "
 "style=\"strong\">never use threads</em>. Instead, make proper use of the "
 "<link xref=\"main-contexts\">GLib main context</link> which, through the use "
-"of asynchronous operations, allows most blocking I/O operations to continue "
-"in the background while the main context continues to process other events. "
-"Analysis, review and debugging of threaded code becomes very hard, very "
-"quickly."
+"of <link xref=\"async-programming\">asynchronous operations</link>, allows "
+"most blocking I/O operations to continue in the background while the main "
+"context continues to process other events. Analysis, review and debugging of "
+"threaded code becomes very hard, very quickly."
 msgstr ""
 "Když píšete projekty s pomocí GLib, mělo by být výchozím přístupem pravidlo "
 "<em style=\"strong\">nikdy nepoužívat vlákna</em>. Místo toho správně "
 "používejte <link xref=\"main-contexts\">hlavní kontext GLib</link>, který, "
-"skrz použití asynchronních operací, umožňuje většině blokujících V/V operací "
-"pokračovat na pozadí, zatímco hlavní kontext pokračuje ve zpracování dalších "
-"událostí. Analýza, kontrola a ladění programového kódu vláken se velmi "
-"rychle dokáže zvrhnout ve velmi složitou věc."
+"skrz použití <link xref=\"async-programming\">asynchronních operací</link>, "
+"umožňuje většině blokujících V/V operací pokračovat na pozadí, zatímco "
+"hlavní kontext pokračuje ve zpracování dalších událostí. Analýza, kontrola a "
+"ladění programového kódu vláken se velmi rychle dokáže zvrhnout ve velmi "
+"složitou věc."
 
 #. (itstool) path: section/p
 #: C/threading.page:64
@@ -10019,7 +12278,7 @@ msgid ""
 "p=autoconf-archive.git;a=blob_plain;f=m4/ax_compiler_flags.m4\"> "
 "<file>ax_compiler_flags.m4</file></link> to the <file>m4/</file> directory "
 "of your project. Note that it depends on the following autoconf-archive "
-"macros which are GPL-licenced so potentially cannot be copied in-tree. They "
+"macros which are GPL-licensed so potentially cannot be copied in-tree. They "
 "may have to remain in autoconf-archive, with that as a build time dependency "
 "of the project:"
 msgstr ""
@@ -10563,12 +12822,12 @@ msgstr ""
 #. (itstool) path: section/p
 #: C/tooling.page:424
 msgid ""
-"lcov supports <link href=\"http://en.wikipedia.org/wiki/";
+"lcov supports <link href=\"https://en.wikipedia.org/wiki/";
 "Code_coverage#Basic_coverage_criteria\"> branch coverage measurement</link>, "
 "so is not suitable for demonstrating coverage of safety critical code. It is "
 "perfectly suitable for non-safety critical code."
 msgstr ""
-"lconv podporuje <link href=\"http://en.wikipedia.org/wiki/";
+"lconv podporuje <link href=\"https://en.wikipedia.org/wiki/";
 "Code_coverage#Basic_coverage_criteria\">měření pokrytí větve</link>, takže "
 "není vhodný jako ukázkové pokrytí kritického kódu z hlediska bezpečnosti. Je "
 "naopak perfektně vhodný pro kód, který není z hlediska bezpečnosti kritický."
@@ -11243,7 +13502,7 @@ msgstr "Generování testů"
 #: C/unit-testing.page:195
 msgid ""
 "Certain types of code are quite repetitive, and require a lot of unit tests "
-"to gain good coverage; but are appropriate for <link href=\"http://en.";
+"to gain good coverage; but are appropriate for <link href=\"https://en.";
 "wikipedia.org/wiki/Test_data_generation\">test data generation</link>, where "
 "a tool is used to automatically generate test vectors for the code. This can "
 "drastically reduce the time needed for writing unit tests, for code in these "
@@ -11251,7 +13510,7 @@ msgid ""
 msgstr ""
 "Některé formy kódu se dost často opakují a vyžadují hodně jednotkových "
 "testů, aby byly dobře pokryty. Na druhou stranu jsou ale vhodné pro <link "
-"href=\"http://en.wikipedia.org/wiki/Test_data_generation\";>generování "
+"href=\"https://en.wikipedia.org/wiki/Test_data_generation\";>generování "
 "testovacích dat</link> a na to existují nástroje, které pro kód automaticky "
 "vygenerují testovací vektory. Tím se výrazně sníží čas potřebný pro psaní "
 "jednotkových testů pro kód v této konkrétní oblasti."
@@ -11400,16 +13659,16 @@ msgstr ""
 #. (itstool) path: item/p
 #: C/unit-testing.page:282
 msgid ""
-"<link href=\"http://en.wikipedia.org/wiki/Software_testability\";>Software "
+"<link href=\"https://en.wikipedia.org/wiki/Software_testability\";>Software "
 "testability</link>"
 msgstr ""
-"<link href=\"http://en.wikipedia.org/wiki/Software_testability\";>Software "
+"<link href=\"https://en.wikipedia.org/wiki/Software_testability\";>Software "
 "testability</link>"
 
 #. (itstool) path: item/p
 #: C/unit-testing.page:286
 msgid ""
-"<link href=\"http://en.wikipedia.org/wiki/Dependency_injection\";>Dependency "
+"<link href=\"https://en.wikipedia.org/wiki/Dependency_injection\";>Dependency "
 "injection</link>"
 msgstr ""
 "<link href=\"https://cs.wikipedia.org/wiki/Vkládání_závislostí\";>Vkládání "
@@ -12354,11 +14613,11 @@ msgstr ""
 #. (itstool) path: item/p
 #: C/writing-good-code.page:137
 msgid ""
-"<link href=\"http://en.wikipedia.org/wiki/Design_Patterns\";> Design "
+"<link href=\"https://en.wikipedia.org/wiki/Design_Patterns\";> Design "
 "Patterns: Elements of Reusable Object-Oriented Software </link>, by Erich "
 "Gamma, Richard Helm, Ralph Johnson and John Vlissides."
 msgstr ""
-"<link href=\"http://en.wikipedia.org/wiki/Design_Patterns\";> Design "
+"<link href=\"https://en.wikipedia.org/wiki/Design_Patterns\";> Design "
 "Patterns: Elements of Reusable Object-Oriented Software </link>, kolektiv "
 "autorů Erich Gamma, Richard Helm, Ralph Johnson a John Vlissides."
 


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]