Merge ~3v1n0/ubuntu/+source/gnome-shell:ubuntu/bionic into ubuntu/+source/gnome-shell:ubuntu/bionic

Proposed by Marco Trevisan (Treviño)
Status: Superseded
Proposed branch: ~3v1n0/ubuntu/+source/gnome-shell:ubuntu/bionic
Merge into: ubuntu/+source/gnome-shell:ubuntu/bionic
Diff against target: 10663 lines (+5895/-50) (has conflicts)
92 files modified
NEWS (+31/-0)
debian/changelog (+147/-0)
debian/control (+15/-0)
debian/control.in (+15/-0)
debian/gbp.conf (+6/-0)
debian/patches/41-handle-logind-fail.patch (+18/-0)
debian/patches/50_add_ubuntu_desktop_detect.patch (+38/-0)
debian/patches/70_allow_sound_above_100.patch (+21/-0)
debian/patches/71_smarter_alt_tab.patch (+40/-0)
debian/patches/CVE-2019-3820-1.patch (+29/-0)
debian/patches/CVE-2019-3820-2.patch (+93/-0)
debian/patches/StIcon-only-compute-shadow-pipeline-when-the-texture-is-p.patch (+4/-0)
debian/patches/dialog-Really-set-ellipsize-mode-in-subtitle-and-body.patch (+40/-0)
debian/patches/dnd-Only-handle-touch-events-in-wayland.patch (+40/-0)
debian/patches/js-fix-invalid-access-errors.patch (+62/-0)
debian/patches/js-ui-Choose-some-actors-to-cache-on-the-GPU.patch (+22/-0)
debian/patches/keyboard-Filter-redundant-FocusTracker-position-changed-s.patch (+38/-0)
debian/patches/keyboard-Listen-to-IbusPanelService-focus-in-out-to-track.patch (+65/-0)
debian/patches/optional-hot-corner.patch (+23/-0)
debian/patches/power-Label-the-PENDING_CHARGE-state-as-Not-Charging.patch (+212/-0)
debian/patches/series (+25/-0)
debian/patches/st-adjustment-Mark-all-properties-as-EXPLICIT_NOTIFY.patch (+85/-0)
debian/patches/st-scroll-view-Handle-the-case-where-scrollbars-are-NULL.patch (+38/-0)
debian/patches/st-scroll-view-Remove-scrollbars-references-on-dispose.patch (+33/-0)
debian/patches/st-texture-cache-Cancel-sliced-image-loading-on-target-ac.patch (+46/-0)
debian/patches/st-widget-Add-missing-g_return_val_if_fail.patch (+32/-0)
debian/patches/switchMonitor-switch-to-next-config-upon-initial-keypress.patch (+58/-0)
debian/patches/ubuntu-lightdm-user-switching.patch (+13/-0)
debian/patches/ubuntu_background_login.patch (+20/-0)
debian/patches/ubuntu_block_mode_extension_update.patch (+38/-0)
debian/patches/ubuntu_gdm.patch (+20/-0)
debian/patches/ubuntu_gdm_alternatives.patch (+18/-0)
debian/patches/ubuntu_lock_on_suspend.patch (+38/-0)
debian/patches/volume-Add-back-sound-feedback-on-scroll.patch (+32/-0)
debian/patches/windowManager-listen-actively-to-windows-being-destroyed-.patch (+47/-0)
debian/patches/workaround_crasher_fractional_scaling.patch (+24/-0)
debian/ubuntu-session-mods/ubuntu.css (+12/-0)
js/gdm/authPrompt.js (+12/-0)
js/gdm/util.js (+14/-0)
js/misc/ibusManager.js (+12/-0)
js/misc/keyboardManager.js (+11/-0)
js/misc/objectManager.js (+9/-0)
js/ui/calendar.js (+38/-0)
js/ui/components/automountManager.js (+14/-0)
js/ui/components/networkAgent.js (+4/-0)
js/ui/components/polkitAgent.js (+6/-0)
js/ui/dash.js (+5/-0)
js/ui/dnd.js (+31/-0)
js/ui/endSessionDialog.js (+4/-0)
js/ui/extensionSystem.js (+26/-0)
js/ui/iconGrid.js (+19/-0)
js/ui/keyboard.js (+178/-0)
js/ui/layout.js (+9/-0)
js/ui/magnifier.js (+10/-0)
js/ui/main.js (+17/-0)
js/ui/messageList.js (+5/-0)
js/ui/messageTray.js (+8/-0)
js/ui/notificationDaemon.js (+5/-0)
js/ui/osdWindow.js (+30/-0)
js/ui/overview.js (+5/-0)
js/ui/overviewControls.js (+8/-0)
js/ui/panel.js (+18/-0)
js/ui/popupMenu.js (+20/-0)
js/ui/remoteSearch.js (+4/-0)
js/ui/runDialog.js (+13/-0)
js/ui/search.js (+13/-0)
js/ui/status/keyboard.js (+30/-0)
js/ui/status/network.js (+15/-0)
js/ui/status/system.js (+10/-0)
js/ui/viewSelector.js (+12/-0)
js/ui/windowManager.js (+24/-0)
js/ui/windowMenu.js (+7/-0)
js/ui/workspace.js (+97/-0)
js/ui/workspaceThumbnail.js (+64/-0)
js/ui/workspacesView.js (+4/-0)
meson.build (+4/-0)
po/af.po (+1985/-50)
po/cs.po (+4/-0)
po/gd.po (+1119/-0)
po/pt_BR.po (+86/-0)
po/ru.po (+83/-0)
src/st/meson.build (+4/-0)
src/st/st-bin.c (+17/-0)
src/st/st-box-layout.c (+45/-0)
src/st/st-button.c (+11/-0)
src/st/st-entry.c (+41/-0)
src/st/st-label.c (+4/-0)
src/st/st-scroll-view.c (+14/-0)
src/st/st-texture-cache.c (+53/-0)
src/st/st-theme-node-drawing.c (+56/-0)
src/st/st-theme-node.h (+6/-0)
src/st/st-widget.c (+14/-0)
Conflict in NEWS
Conflict in debian/changelog
Conflict in debian/control
Conflict in debian/control.in
Conflict in debian/patches/41-handle-logind-fail.patch
Conflict in debian/patches/50_add_ubuntu_desktop_detect.patch
Conflict in debian/patches/70_allow_sound_above_100.patch
Conflict in debian/patches/71_smarter_alt_tab.patch
Conflict in debian/patches/StIcon-only-compute-shadow-pipeline-when-the-texture-is-p.patch
Conflict in debian/patches/js-fix-invalid-access-errors.patch
Conflict in debian/patches/js-ui-Choose-some-actors-to-cache-on-the-GPU.patch
Conflict in debian/patches/optional-hot-corner.patch
Conflict in debian/patches/series
Conflict in debian/patches/st-texture-cache-Cancel-sliced-image-loading-on-target-ac.patch
Conflict in debian/patches/ubuntu-lightdm-user-switching.patch
Conflict in debian/patches/ubuntu_background_login.patch
Conflict in debian/patches/ubuntu_block_mode_extension_update.patch
Conflict in debian/patches/ubuntu_gdm.patch
Conflict in debian/patches/ubuntu_gdm_alternatives.patch
Conflict in debian/patches/ubuntu_lock_on_suspend.patch
Conflict in debian/patches/volume-Add-back-sound-feedback-on-scroll.patch
Conflict in debian/patches/workaround_crasher_fractional_scaling.patch
Conflict in debian/ubuntu-session-mods/ubuntu.css
Conflict in js/gdm/authPrompt.js
Conflict in js/gdm/util.js
Conflict in js/misc/ibusManager.js
Conflict in js/misc/keyboardManager.js
Conflict in js/misc/objectManager.js
Conflict in js/ui/calendar.js
Conflict in js/ui/components/automountManager.js
Conflict in js/ui/components/networkAgent.js
Conflict in js/ui/components/polkitAgent.js
Conflict in js/ui/dash.js
Conflict in js/ui/dnd.js
Conflict in js/ui/endSessionDialog.js
Conflict in js/ui/extensionSystem.js
Conflict in js/ui/iconGrid.js
Conflict in js/ui/keyboard.js
Conflict in js/ui/layout.js
Conflict in js/ui/magnifier.js
Conflict in js/ui/main.js
Conflict in js/ui/messageList.js
Conflict in js/ui/messageTray.js
Conflict in js/ui/notificationDaemon.js
Conflict in js/ui/osdWindow.js
Conflict in js/ui/overview.js
Conflict in js/ui/overviewControls.js
Conflict in js/ui/panel.js
Conflict in js/ui/popupMenu.js
Conflict in js/ui/remoteSearch.js
Conflict in js/ui/runDialog.js
Conflict in js/ui/search.js
Conflict in js/ui/status/keyboard.js
Conflict in js/ui/status/network.js
Conflict in js/ui/status/system.js
Conflict in js/ui/viewSelector.js
Conflict in js/ui/windowManager.js
Conflict in js/ui/windowMenu.js
Conflict in js/ui/workspace.js
Conflict in js/ui/workspaceThumbnail.js
Conflict in js/ui/workspacesView.js
Conflict in meson.build
Conflict in po/af.po
Conflict in po/cs.po
Conflict in po/gd.po
Conflict in po/pt_BR.po
Conflict in po/ru.po
Conflict in src/st/meson.build
Conflict in src/st/st-bin.c
Conflict in src/st/st-box-layout.c
Conflict in src/st/st-button.c
Conflict in src/st/st-entry.c
Conflict in src/st/st-label.c
Conflict in src/st/st-scroll-view.c
Conflict in src/st/st-texture-cache.c
Conflict in src/st/st-theme-node-drawing.c
Conflict in src/st/st-theme-node.h
Conflict in src/st/st-widget.c
Reviewer Review Type Date Requested Status
git-ubuntu developers Pending
Review via email: mp+367148@code.launchpad.net

This proposal has been superseded by a proposal from 2019-05-08.

To post a comment you must log in.

Unmerged commits

bf58e0e... by Marco Trevisan (Treviño)

Refresh patches

9129caa... by Marco Trevisan (Treviño)

debian/patches: Fix regression on missing spread animation

Fixes LP: #1827284

96192ec... by Iain Lane

Finalise changelog

2445e97... by Iain Lane

Merge commit 'd65babeab' into ubuntu/bionic

68d3d29... by Leonidas S. Barbosa

Import Debian changes 3.28.3+git20190124-0ubuntu18.04.2

gnome-shell (3.28.3+git20190124-0ubuntu18.04.2) bionic-security; urgency=medium

  * SECURITY UPDATE: Potential keyboard shortcuts and other actions
    - debian/patches/CVE-2019-3820-*.patch: fix in
      js/ui/panel.js, js/gdm/authPrompt.js, js/gdm/loginDialog.js,
      js/ui/shellEntry.js.
    - CVE-2019-3820

d65babe... by Marco Trevisan (Treviño)

debian/patches: Really set ellipsize mode in subtitle and body

Fixes LP: #1809788

78e6f42... by Marco Trevisan (Treviño)

debian/patches: listen actively to windows being destroyed during WS switch

Fixes LP: #1812527

42d662e... by Marco Trevisan (Treviño)

debian/patches: Protect from NULL obj in get_theme_node

Fixes LP: #1796606

57bb933... by Marco Trevisan (Treviño)

dnd: Only handle touch events in wayland

Fixes LP: #1817020

4848160... by Marco Trevisan (Treviño)

Ensure switch display mode is cyclic

Fixes LP: #1772811

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1diff --git a/NEWS b/NEWS
2index 0c56e7e..6b0f9e1 100644
3--- a/NEWS
4+++ b/NEWS
5@@ -1,3 +1,34 @@
6+<<<<<<< NEWS
7+=======
8+3.28.3
9+======
10+* Fix lagging pointer when zoomed [Daniel; #682013]
11+* Fix "Clear All" for calendar events [Florian; #325]
12+* Misc. bug fixes [Florian, Mario, Marco; #136, #214, #788931, #791233]
13+
14+Contributors:
15+ Carlos Garnacho, Florian Müllner, Mario Sanchez Prada, Joe Rabinoff,
16+ Didier Roche, Marco Trevisan (Treviño), Daniel van Vugt
17+
18+Translators:
19+ Pieter Schalk Schoeman [af], Gun Chleoc [gd]
20+
21+3.28.2
22+======
23+* Fix lock-up on cancelling polkit dialog [Florian; #221]
24+* Guard against untimely keyboard map changes [Carlos; #240]
25+* Fix blurriness of OSD under some resolutions [Silvère; #782011]
26+* Fix icons in search provider results [Florian; #249]
27+* Misc. bug fixes [Marco, Florian; #792687, #781471]
28+
29+Contributors:
30+ Carlos Garnacho, Silvère Latchurié, Florian Müllner, Mario Sanchez Prada,
31+ Ray Strode, Marco Trevisan (Treviño)
32+
33+Translators:
34+ Stas Solovey [ru], Rafael Fontenelle [pt_BR]
35+
36+>>>>>>> NEWS
37 3.28.1
38 ======
39 * Fix compose characters in shell entries [Carlos; #115]
40diff --git a/debian/changelog b/debian/changelog
41index 1ecd17a..f4df414 100644
42--- a/debian/changelog
43+++ b/debian/changelog
44@@ -1,3 +1,150 @@
45+<<<<<<< debian/changelog
46+=======
47+gnome-shell (3.28.3+git20190124-0ubuntu18.04.4) UNRELEASED; urgency=medium
48+
49+ * d/p/st-adjustment-Mark-all-properties-as-EXPLICIT_NOTIFY.patch:
50+ - Fix regression on missing spread animation (LP: #1827284)
51+ * Refreshed patches
52+
53+ -- Marco Trevisan (Treviño) <marco@ubuntu.com> Wed, 08 May 2019 14:49:43 -0500
54+
55+gnome-shell (3.28.3+git20190124-0ubuntu18.04.3) bionic; urgency=medium
56+
57+ * d/p/switchMonitor-switch-to-next-config-upon-initial-keypress.patch
58+ - Ensure switch display mode is cyclic (LP: #1772811)
59+ * debian/control:
60+ - Depends on mutter 3.28.3+git20190124-0ubuntu18.04.3
61+ * d/p/dnd-Only-handle-touch-events-in-wayland.patch:
62+ - dnd: Only handle touch events in wayland (LP: #1817020)
63+ * d/p/st-widget-Add-missing-g_return_val_if_fail.patch:
64+ - st-widget: Protect from NULL obj in get_theme_node (LP: #1796606)
65+ * d/p/windowManager-listen-actively-to-windows-being-destroyed-.patch:
66+ - windowManager: listen actively to windows being destroyed during WS switch
67+ (LP: #1812527)
68+ * d/p/dialog-Really-set-ellipsize-mode-in-subtitle-and-body.patch:
69+ - Really set ellipsize mode in subtitle and body (LP: #1809788)
70+
71+ -- Marco Trevisan (Treviño) <marco@ubuntu.com> Tue, 07 May 2019 18:37:41 +0100
72+
73+gnome-shell (3.28.3+git20190124-0ubuntu18.04.2) bionic-security; urgency=medium
74+
75+ * SECURITY UPDATE: Potential keyboard shortcuts and other actions
76+ - debian/patches/CVE-2019-3820-*.patch: fix in
77+ js/ui/panel.js, js/gdm/authPrompt.js, js/gdm/loginDialog.js,
78+ js/ui/shellEntry.js.
79+ - CVE-2019-3820
80+
81+ -- Leonidas S. Barbosa <leo.barbosa@canonical.com> Mon, 25 Feb 2019 12:53:33 -0300
82+
83+gnome-shell (3.28.3+git20190124-0ubuntu18.04.1) bionic; urgency=medium
84+
85+ * New git snapshot release up to commit 24cdcc56d (LP: #1811900)
86+ - Don't fill journal with osdWindow errors (LP: #1772677)
87+ - Fix missing icon in keyboard indicator (LP: #1812266)
88+ * d/p/authPrompt-Do-not-enable-sensitivity-if-retries-are-disal.patch,
89+ d/p/authPrompt-Unset-preemptiveAnswer-on-reset.patch,
90+ d/p/gdm-util-Always-allow-to-retry-login-in-unlock-mode.patch,
91+ d/p/ibus-set-content-type-no-holdKeyboard.patch,
92+ d/p/popupMenu-Don-t-handle-key-presses-directly-if-there-are-.patch,
93+ d/p/st-button-Ignore-pointer-emulated-touch-events.patch,
94+ d/p/shell-ignore-invalid-window-monitor-index.patch,
95+ d/p/workspace-fix-repositioned-windows-in-activities.patch:
96+ - Removed patches applied upstream
97+ * d/p/StIcon-only-compute-shadow-pipeline-when-the-texture-is-p.patch,
98+ d/p/js-fix-invalid-access-errors.patch,
99+ d/p/js-ui-Choose-some-actors-to-cache-on-the-GPU.patch,
100+ d/p/optional-hot-corner.patch,
101+ d/p/st-texture-cache-Cancel-sliced-image-loading-on-target-ac.patch,
102+ d/p/workaround_crasher_fractional_scaling.patch:
103+ - Refreshed as per upstream changes
104+ * d/p/keyboard-Filter-redundant-FocusTracker-position-changed-s.patch,
105+ d/p/keyboard-Listen-to-IbusPanelService-focus-in-out-to-track.patch:
106+ - Fix OSK activation on X11 (LP: #1760399)
107+ * d/p/power-Label-the-PENDING_CHARGE-state-as-Not-Charging.patch:
108+ - Label the PENDING_CHARGE state as "Not Charging" (LP: #1745032)
109+ * d/p/debian/patches/volume-Add-back-sound-feedback-on-scroll.patch:
110+ - Add missing include (LP: #1811908)
111+
112+ -- Marco Trevisan (Treviño) <marco@ubuntu.com> Fri, 25 Jan 2019 18:29:40 +0000
113+
114+gnome-shell (3.28.3-0ubuntu0.18.04.4) bionic; urgency=medium
115+
116+ * debian/patches/ibus-set-content-type-no-holdKeyboard.patch:
117+ - Cherry-pick upstream commit to prevent focus stealing on password fields
118+ in firefox when ibus is used (LP: #1765304)
119+
120+ -- Olivier Tilloy <olivier.tilloy@canonical.com> Wed, 05 Dec 2018 13:08:10 +0000
121+
122+gnome-shell (3.28.3-0ubuntu0.18.04.3) bionic; urgency=medium
123+
124+ * debian/ubuntu.css:
125+ - use defined color for menu separators (LP: #1739931)
126+ - set StEntry minimun height to work properly with Ubuntu font (LP: #1743058)
127+ * debian/patches/st-button-Ignore-pointer-emulated-touch-events.patch:
128+ - Don't emit two click events on touch under X11 (LP: #1745888)
129+ * d/p/st-scroll-view-Handle-the-case-where-scrollbars-are-NULL.patch,
130+ d/p/st-scroll-view-Remove-scrollbars-references-on-dispose.patch:
131+ - Handle NULL scroll bars in st-scroll-view (LP: #1725312)
132+
133+ -- Marco Trevisan (Treviño) <marco@ubuntu.com> Tue, 06 Nov 2018 17:49:17 +0000
134+
135+gnome-shell (3.28.3-0ubuntu0.18.04.2) bionic; urgency=medium
136+
137+ * New upstream release (LP: #1718931, LP: #1782614)
138+ * debian/patches/30-remoteMenu-Prevent-the-shell-from-becoming-unrespons.patch,
139+ debian/patches/magnifier.js-Fix-zoom-juddering.patch,
140+ debian/patches/st-label-Unset-clutter-text-instance-on-disposal.patch,
141+ debian/patches/st-texture-cache-Don-t-add-NULL-textures-to-cache.patch,
142+ debian/patches/st-texture-cache-Save-cairo-surfaces-to-a-different-map.patch,
143+ debian/patches/ui-Theme-lookup-should-respect-XDG_DATA_DIRS.patch:
144+ - Drop patches applied on the 3.28 branch
145+ * debian/patches/js-fix-invalid-access-errors.patch:
146+ - Refreshed to reflect upstream changes
147+ * d/p/popupMenu-Don-t-handle-key-presses-directly-if-there-are-.patch
148+ - Don't handle key presses directly if there are modifiers (LP: #1784671)
149+ * debian/patches/workspace-fix-repositioned-windows-in-activities.patch:
150+ - Cherry-pick from upstream 3.28 branch
151+
152+ -- Marco Trevisan (Treviño) <marco@ubuntu.com> Fri, 03 Aug 2018 07:18:24 +0100
153+
154+gnome-shell (3.28.2-0ubuntu0.18.04.1) bionic; urgency=medium
155+
156+ [ Olivier Tilloy ]
157+ * New upstream release (LP: #1775145)
158+ - fixes valid password rejection at login screen (LP: #1765261)
159+ * Drop patches applied upstream:
160+ - debian/patches/polkitAgent-Guard-against-repeated-close-calls.patch
161+ - debian/patches/popupMenu-Fix-wrong-call-to-clutter_actor_add_child.patch
162+ - debian/patches/workspaceThumbnail-initialize-porthole-based-on-workArea.patch
163+ - debian/patches/workspaceThumbnail-only-update-_porthole-if-the-overview-.patch
164+ - debian/patches/workspaceThumbnail-rebuild-thumbnails-if-workareas-size-c.patch
165+
166+ [ Andrea Azzarone ]
167+ * debian/patches/ubuntu_lock_on_suspend.patch: inhibit suspend until the
168+ screen is locked also in the case where automatic screen lock is disabled
169+ and screen lock on suspend is enabled (LP: #1768786)
170+
171+ [ Marco Trevisan (Treviño) ]
172+ * Cherry pick upstream patches:
173+ - debian/patches/st-label-Unset-clutter-text-instance-on-disposal.patch (LP: #1714989)
174+ * debian/patches/st-texture-cache-Don-t-add-NULL-textures-to-cache.patch:
175+ - Cherry pick updated version from upstream, splitted in:
176+ + debian/patches/st-texture-cache-Don-t-add-NULL-textures-to-cache.patch
177+ + debian/patches/st-texture-cache-Save-cairo-surfaces-to-a-different-map.patch
178+ * debian/patches/authPrompt-Do-not-enable-sensitivity-if-retries-are-disal.patch
179+ debian/patches/authPrompt-Unset-preemptiveAnswer-on-reset.patch
180+ debian/patches/gdm-util-Always-allow-to-retry-login-in-unlock-mode.patch:
181+ - GDM gnome-shell greeter fix to fix unneeded login attempts (LP: #1777956)
182+ * debian/patches/series:
183+ - reorder to apply upstream cherry-picks before the others
184+
185+ [ Daniel van Vugt ]
186+ * debian/patches/magnifier.js-Fix-zoom-juddering.patch:
187+ - magnifier.js: Fix zoom juddering (LP: #1691675)
188+
189+ -- Marco Trevisan <marco@ubuntu.com> Tue, 21 Jun 2018 01:45:42 +0200
190+
191+>>>>>>> debian/changelog
192 gnome-shell (3.28.1-0ubuntu2) bionic; urgency=medium
193
194 [ Marco Trevisan (Treviño) ]
195diff --git a/debian/control b/debian/control
196index 739dae9..3990429 100644
197--- a/debian/control
198+++ b/debian/control
199@@ -59,7 +59,14 @@ Build-Depends: debhelper (>= 10.3~),
200 sassc,
201 Standards-Version: 4.0.0
202 Homepage: https://wiki.gnome.org/Projects/GnomeShell
203+<<<<<<< debian/control
204 Vcs-Bzr: https://code.launchpad.net/~ubuntu-desktop/gnome-shell/ubuntu
205+=======
206+XS-Debian-Vcs-Browser: https://salsa.debian.org/gnome-team/gnome-shell
207+XS-Debian-Vcs-Git: https://salsa.debian.org/gnome-team/gnome-shell
208+Vcs-Browser: https://code.launchpad.net/~ubuntu-desktop/ubuntu/+source/gnome-shell/+git/gnome-shell/+ref/ubuntu/bionic
209+Vcs-Git: https://git.launchpad.net/~ubuntu-desktop/ubuntu/+source/gnome-shell -b ubuntu/bionic
210+>>>>>>> debian/control
211
212 Package: gnome-shell
213 Architecture: linux-any
214@@ -80,7 +87,11 @@ Depends: ${gir:Depends},
215 gir1.2-gtk-3.0 (>= 3.16),
216 gir1.2-gweather-3.0,
217 gir1.2-ibus-1.0 (>= 1.5.2),
218+<<<<<<< debian/control
219 gir1.2-mutter-2 (>= 3.27.91),
220+=======
221+ gir1.2-mutter-2 (>= 3.28.3+git20190124-0ubuntu18.04.3),
222+>>>>>>> debian/control
223 gir1.2-nm-1.0 [linux-any],
224 gir1.2-nma-1.0 [linux-any],
225 gir1.2-pango-1.0,
226@@ -93,7 +104,11 @@ Depends: ${gir:Depends},
227 gnome-shell-common (= ${source:Version}),
228 ubuntu-wallpapers,
229 gsettings-desktop-schemas (>= 3.21.3),
230+<<<<<<< debian/control
231 mutter (>= 3.27.91),
232+=======
233+ mutter (>= 3.28.3+git20190124-0ubuntu18.04.3),
234+>>>>>>> debian/control
235 python3,
236 libglib2.0-bin (>= 2.53.0),
237 Recommends: xserver-xorg-legacy,
238diff --git a/debian/control.in b/debian/control.in
239index d01981b..06744c2 100644
240--- a/debian/control.in
241+++ b/debian/control.in
242@@ -55,7 +55,14 @@ Build-Depends: debhelper (>= 10.3~),
243 sassc,
244 Standards-Version: 4.0.0
245 Homepage: https://wiki.gnome.org/Projects/GnomeShell
246+<<<<<<< debian/control.in
247 Vcs-Bzr: https://code.launchpad.net/~ubuntu-desktop/gnome-shell/ubuntu
248+=======
249+XS-Debian-Vcs-Browser: https://salsa.debian.org/gnome-team/gnome-shell
250+XS-Debian-Vcs-Git: https://salsa.debian.org/gnome-team/gnome-shell
251+Vcs-Browser: https://code.launchpad.net/~ubuntu-desktop/ubuntu/+source/gnome-shell/+git/gnome-shell/+ref/ubuntu/bionic
252+Vcs-Git: https://git.launchpad.net/~ubuntu-desktop/ubuntu/+source/gnome-shell -b ubuntu/bionic
253+>>>>>>> debian/control.in
254
255 Package: gnome-shell
256 Architecture: linux-any
257@@ -76,7 +83,11 @@ Depends: ${gir:Depends},
258 gir1.2-gtk-3.0 (>= 3.16),
259 gir1.2-gweather-3.0,
260 gir1.2-ibus-1.0 (>= 1.5.2),
261+<<<<<<< debian/control.in
262 gir1.2-mutter-2 (>= 3.27.91),
263+=======
264+ gir1.2-mutter-2 (>= 3.28.3+git20190124-0ubuntu18.04.3),
265+>>>>>>> debian/control.in
266 gir1.2-nm-1.0 [linux-any],
267 gir1.2-nma-1.0 [linux-any],
268 gir1.2-pango-1.0,
269@@ -89,7 +100,11 @@ Depends: ${gir:Depends},
270 gnome-shell-common (= ${source:Version}),
271 ubuntu-wallpapers,
272 gsettings-desktop-schemas (>= 3.21.3),
273+<<<<<<< debian/control.in
274 mutter (>= 3.27.91),
275+=======
276+ mutter (>= 3.28.3+git20190124-0ubuntu18.04.3),
277+>>>>>>> debian/control.in
278 python3,
279 libglib2.0-bin (>= 2.53.0),
280 Recommends: xserver-xorg-legacy,
281diff --git a/debian/gbp.conf b/debian/gbp.conf
282new file mode 100644
283index 0000000..bb36f7c
284--- /dev/null
285+++ b/debian/gbp.conf
286@@ -0,0 +1,6 @@
287+[DEFAULT]
288+debian-branch=ubuntu/bionic
289+upstream-branch=upstream/3.28.x
290+debian-tag=ubuntu/%(version)s
291+upstream-vcs-tag=%(version)s
292+pristine-tar=True
293diff --git a/debian/patches/41-handle-logind-fail.patch b/debian/patches/41-handle-logind-fail.patch
294index bdf612e..2cba8d1 100644
295--- a/debian/patches/41-handle-logind-fail.patch
296+++ b/debian/patches/41-handle-logind-fail.patch
297@@ -1,4 +1,10 @@
298+<<<<<<< debian/patches/41-handle-logind-fail.patch
299 Author: Emilio Pozuelo Monfort <pochu@debian.org>
300+=======
301+From: Emilio Pozuelo Monfort <pochu@debian.org>
302+Date: Wed, 20 Jun 2018 19:22:06 +0200
303+Subject: handle-logind-fail
304+>>>>>>> debian/patches/41-handle-logind-fail.patch
305
306 Even if logind is running (which is what haveSystemd() is checking), it may
307 fail to create a session, e.g. if the kernel doesn't have cgroups support.
308@@ -8,10 +14,22 @@ start. Thus talk to logind if XDG_SESSION_ID is set, which is a sign that
309 logind actually created our session. Otherwise, fall back to ConsoleKit.
310
311 http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=729877
312+<<<<<<< debian/patches/41-handle-logind-fail.patch
313
314 --- a/js/misc/loginManager.js
315 +++ b/js/misc/loginManager.js
316 @@ -93,7 +93,7 @@
317+=======
318+---
319+ js/misc/loginManager.js | 2 +-
320+ 1 file changed, 1 insertion(+), 1 deletion(-)
321+
322+diff --git a/js/misc/loginManager.js b/js/misc/loginManager.js
323+index 4eb0686..3d3c4b4 100644
324+--- a/js/misc/loginManager.js
325++++ b/js/misc/loginManager.js
326+@@ -93,7 +93,7 @@ let _loginManager = null;
327+>>>>>>> debian/patches/41-handle-logind-fail.patch
328 */
329 function getLoginManager() {
330 if (_loginManager == null) {
331diff --git a/debian/patches/50_add_ubuntu_desktop_detect.patch b/debian/patches/50_add_ubuntu_desktop_detect.patch
332index 08318cb..40b407a 100644
333--- a/debian/patches/50_add_ubuntu_desktop_detect.patch
334+++ b/debian/patches/50_add_ubuntu_desktop_detect.patch
335@@ -1,3 +1,4 @@
336+<<<<<<< debian/patches/50_add_ubuntu_desktop_detect.patch
337 Description: Add an helper to detect current desktop
338 We will differentiate some behavior depending on current desktop. Add an
339 helper to centralize the current desktop detection.
340@@ -8,6 +9,40 @@ Index: gnome-shell-3.24.3/js/misc/desktop.js
341 ===================================================================
342 --- /dev/null
343 +++ gnome-shell-3.24.3/js/misc/desktop.js
344+=======
345+From: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
346+Date: Wed, 20 Jun 2018 19:22:06 +0200
347+Subject: Add an helper to detect current desktop
348+
349+We will differentiate some behavior depending on current desktop. Add an
350+helper to centralize the current desktop detection.
351+Forwarded: not-needed
352+Origin: ubuntu
353+===================================================================
354+---
355+ js/js-resources.gresource.xml | 1 +
356+ js/misc/desktop.js | 39 +++++++++++++++++++++++++++++++++++++++
357+ 2 files changed, 40 insertions(+)
358+ create mode 100644 js/misc/desktop.js
359+
360+diff --git a/js/js-resources.gresource.xml b/js/js-resources.gresource.xml
361+index 883b62d..3909dc8 100644
362+--- a/js/js-resources.gresource.xml
363++++ b/js/js-resources.gresource.xml
364+@@ -13,6 +13,7 @@
365+
366+ <file>misc/config.js</file>
367+ <file>misc/extensionUtils.js</file>
368++ <file>misc/desktop.js</file>
369+ <file>misc/fileUtils.js</file>
370+ <file>misc/gnomeSession.js</file>
371+ <file>misc/history.js</file>
372+diff --git a/js/misc/desktop.js b/js/misc/desktop.js
373+new file mode 100644
374+index 0000000..3b0d128
375+--- /dev/null
376++++ b/js/misc/desktop.js
377+>>>>>>> debian/patches/50_add_ubuntu_desktop_detect.patch
378 @@ -0,0 +1,39 @@
379 +// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
380 +
381@@ -48,6 +83,7 @@ Index: gnome-shell-3.24.3/js/misc/desktop.js
382 + _currentDesktopsMatches[name] = false;
383 + return false;
384 +}
385+<<<<<<< debian/patches/50_add_ubuntu_desktop_detect.patch
386 Index: gnome-shell-3.24.3/js/js-resources.gresource.xml
387 ===================================================================
388 --- gnome-shell-3.24.3.orig/js/js-resources.gresource.xml
389@@ -60,3 +96,5 @@ Index: gnome-shell-3.24.3/js/js-resources.gresource.xml
390 <file>misc/fileUtils.js</file>
391 <file>misc/gnomeSession.js</file>
392 <file>misc/history.js</file>
393+=======
394+>>>>>>> debian/patches/50_add_ubuntu_desktop_detect.patch
395diff --git a/debian/patches/70_allow_sound_above_100.patch b/debian/patches/70_allow_sound_above_100.patch
396index b1eda45..7ea4f7a 100644
397--- a/debian/patches/70_allow_sound_above_100.patch
398+++ b/debian/patches/70_allow_sound_above_100.patch
399@@ -1,3 +1,4 @@
400+<<<<<<< debian/patches/70_allow_sound_above_100.patch
401 Description: Allow volume to be set above 100%.
402 Some systems have low maximum volume set (like x220), allow, from an option
403 in gnome-control-center to set it above that 100% limit from g-s-d
404@@ -14,6 +15,26 @@ Index: gnome-shell-3.27.91/js/ui/status/volume.js
405 ===================================================================
406 --- gnome-shell-3.27.91.orig/js/ui/status/volume.js
407 +++ gnome-shell-3.27.91/js/ui/status/volume.js
408+=======
409+From: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
410+Date: Wed, 20 Jun 2018 19:22:06 +0200
411+Subject: Allow volume to be set above 100%.
412+
413+Some systems have low maximum volume set (like x220), allow, from an option
414+in gnome-control-center to set it above that 100% limit from g-s-d
415+(keyboard) and gnome-shell.
416+Origin: ubuntu
417+Bug-Ubuntu: https://launchpad.net/bugs/1706524
418+Bug: https://bugzilla.gnome.org/show_bug.cgi?id=710424
419+---
420+ js/ui/status/volume.js | 32 +++++++++++++++++++++++++++++---
421+ 1 file changed, 29 insertions(+), 3 deletions(-)
422+
423+diff --git a/js/ui/status/volume.js b/js/ui/status/volume.js
424+index d814ef6..65c4c42 100644
425+--- a/js/ui/status/volume.js
426++++ b/js/ui/status/volume.js
427+>>>>>>> debian/patches/70_allow_sound_above_100.patch
428 @@ -7,6 +7,7 @@ const Gvc = imports.gi.Gvc;
429 const St = imports.gi.St;
430 const Signals = imports.signals;
431diff --git a/debian/patches/71_smarter_alt_tab.patch b/debian/patches/71_smarter_alt_tab.patch
432index f281909..06a3ce0 100644
433--- a/debian/patches/71_smarter_alt_tab.patch
434+++ b/debian/patches/71_smarter_alt_tab.patch
435@@ -1,3 +1,4 @@
436+<<<<<<< debian/patches/71_smarter_alt_tab.patch
437 Description: Build a smarter alt-tab in the ubuntu session
438 In case of a quick alt-tab (before the switcher UI shows up), we want to cover
439 the power user use-case, which is to switch quickly between 2 windows.
440@@ -21,6 +22,38 @@ Index: gnome-shell-3.27.91/js/ui/altTab.js
441 ===================================================================
442 --- gnome-shell-3.27.91.orig/js/ui/altTab.js
443 +++ gnome-shell-3.27.91/js/ui/altTab.js
444+=======
445+From: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
446+Date: Wed, 20 Jun 2018 19:22:06 +0200
447+Subject: Build a smarter alt-tab in the ubuntu session
448+
449+In case of a quick alt-tab (before the switcher UI shows up), we want to cover
450+the power user use-case, which is to switch quickly between 2 windows.
451+The issue with current behavior is say:
452+- you have an application with one instance, maximized
453+- you have another application with multiple instances, like multiple
454+ terminals, not maximized.
455+If you press alt-tab, even quickly, the whole second application would be
456+raised (as no window has been selected). The consequence is that you have
457+all terminal in front of, for instance, your browser or documentation viewer
458+you are using.
459+The behavior we implement enables this. However, as soon as the switcher ui
460+is displayed to the user, not selecting a particular window instance will
461+raise the whole applications. Consequently only "quick alt-tab" flow is
462+impacted.
463+Origin: ubuntu
464+Bug-Ubuntu: https://launchpad.net/bugs/1716921
465+Forwarded: https://bugzilla.gnome.org/show_bug.cgi?id=787627
466+---
467+ js/ui/altTab.js | 10 ++++++++++
468+ js/ui/switcherPopup.js | 4 +++-
469+ 2 files changed, 13 insertions(+), 1 deletion(-)
470+
471+diff --git a/js/ui/altTab.js b/js/ui/altTab.js
472+index 97dddce..764d308 100644
473+--- a/js/ui/altTab.js
474++++ b/js/ui/altTab.js
475+>>>>>>> debian/patches/71_smarter_alt_tab.patch
476 @@ -13,6 +13,7 @@ const Atk = imports.gi.Atk;
477 const Main = imports.ui.main;
478 const SwitcherPopup = imports.ui.switcherPopup;
479@@ -45,10 +78,17 @@ Index: gnome-shell-3.27.91/js/ui/altTab.js
480 if (this._currentWindow < 0)
481 appIcon.app.activate_window(appIcon.cachedWindows[0], timestamp);
482 else if (appIcon.cachedWindows[this._currentWindow])
483+<<<<<<< debian/patches/71_smarter_alt_tab.patch
484 Index: gnome-shell-3.27.91/js/ui/switcherPopup.js
485 ===================================================================
486 --- gnome-shell-3.27.91.orig/js/ui/switcherPopup.js
487 +++ gnome-shell-3.27.91/js/ui/switcherPopup.js
488+=======
489+diff --git a/js/ui/switcherPopup.js b/js/ui/switcherPopup.js
490+index a53b1e6..71911c8 100644
491+--- a/js/ui/switcherPopup.js
492++++ b/js/ui/switcherPopup.js
493+>>>>>>> debian/patches/71_smarter_alt_tab.patch
494 @@ -12,8 +12,10 @@ const St = imports.gi.St;
495
496 const Main = imports.ui.main;
497diff --git a/debian/patches/CVE-2019-3820-1.patch b/debian/patches/CVE-2019-3820-1.patch
498new file mode 100644
499index 0000000..f704252
500--- /dev/null
501+++ b/debian/patches/CVE-2019-3820-1.patch
502@@ -0,0 +1,29 @@
503+From: =?utf-8?q?Florian_M=C3=BCllner?= <fmuellner@gnome.org>
504+Date: Wed, 23 Jan 2019 23:55:12 +0100
505+Subject: [PATCH] panel: Don't allow opening hidden menus via keybindings
506+
507+We shouldn't allow toggling menus that aren't supported by the
508+current session mode, but as indicators are hidden rather than
509+destroyed on mode switches, it is not enough to check for an
510+indicator's existence.
511+
512+https://gitlab.gnome.org/GNOME/gnome-shell/issues/851
513+---
514+ js/ui/panel.js | 4 ++--
515+ 1 file changed, 2 insertions(+), 2 deletions(-)
516+
517+diff --git a/js/ui/panel.js b/js/ui/panel.js
518+index a76916b..85572e2 100644
519+--- a/js/ui/panel.js
520++++ b/js/ui/panel.js
521+@@ -992,8 +992,8 @@ var Panel = new Lang.Class({
522+ },
523+
524+ _toggleMenu(indicator) {
525+- if (!indicator) // menu not supported by current session mode
526+- return;
527++ if (!indicator || !indicator.container.visible)
528++ return; // menu not supported by current session mode
529+
530+ let menu = indicator.menu;
531+ if (!indicator.actor.reactive)
532diff --git a/debian/patches/CVE-2019-3820-2.patch b/debian/patches/CVE-2019-3820-2.patch
533new file mode 100644
534index 0000000..dc6e562
535--- /dev/null
536+++ b/debian/patches/CVE-2019-3820-2.patch
537@@ -0,0 +1,93 @@
538+From: Ray Strode <rstrode@redhat.com>
539+Date: Wed, 23 Jan 2019 15:59:42 -0500
540+Subject: [PATCH] shellActionModes: disable POPUP keybindings in unlock screen
541+
542+Certain keybindings should continue to work even when a popup
543+menu is on screen. For instance, the keybinding for showing
544+the app menu and the keyinding for showing the calendar are
545+examples.
546+
547+This is achieved by putting in place a special "POPUP" action
548+mode, whenever a popup menu is active. This mode replaces
549+the (e.g., "NORMAL" or "OVERVIEW") action mode that was in place
550+for as long as the popup menu is active.
551+
552+But those keybindings should not work when the user is at the
553+unlock dialog (which uses an action mode of "UNLOCK").
554+
555+Unfortunately, since commit c79d24b6 they do.
556+
557+This commit addresses the problem by forcing the action mode
558+to NONE at the unlock screen when popups are visible.
559+
560+CVE-2019-3820
561+
562+Closes https://gitlab.gnome.org/GNOME/gnome-shell/issues/851
563+---
564+ js/gdm/authPrompt.js | 3 ++-
565+ js/gdm/loginDialog.js | 3 ++-
566+ js/ui/shellEntry.js | 6 ++++--
567+ 3 files changed, 8 insertions(+), 4 deletions(-)
568+
569+diff --git a/js/gdm/authPrompt.js b/js/gdm/authPrompt.js
570+index a0a4a21..78e0454 100644
571+--- a/js/gdm/authPrompt.js
572++++ b/js/gdm/authPrompt.js
573+@@ -11,6 +11,7 @@ const Animation = imports.ui.animation;
574+ const Batch = imports.gdm.batch;
575+ const GdmUtil = imports.gdm.util;
576+ const Params = imports.misc.params;
577++const Shell = imports.gi.Shell;
578+ const ShellEntry = imports.ui.shellEntry;
579+ const Tweener = imports.ui.tweener;
580+ const UserWidget = imports.ui.userWidget;
581+@@ -99,7 +100,7 @@ var AuthPrompt = new Lang.Class({
582+ x_align: St.Align.START });
583+ this._entry = new St.Entry({ style_class: 'login-dialog-prompt-entry',
584+ can_focus: true });
585+- ShellEntry.addContextMenu(this._entry, { isPassword: true });
586++ ShellEntry.addContextMenu(this._entry, { isPassword: true, actionMode: Shell.ActionMode.NONE });
587+
588+ this.actor.add(this._entry,
589+ { expand: true,
590+diff --git a/js/gdm/loginDialog.js b/js/gdm/loginDialog.js
591+index 4a93545..5ab8525 100644
592+--- a/js/gdm/loginDialog.js
593++++ b/js/gdm/loginDialog.js
594+@@ -338,7 +338,8 @@ var SessionMenuButton = new Lang.Class({
595+ this._button.remove_style_pseudo_class('active');
596+ });
597+
598+- this._manager = new PopupMenu.PopupMenuManager({ actor: this._button });
599++ this._manager = new PopupMenu.PopupMenuManager({ actor: this._button },
600++ { actionMode: Shell.ActionMode.NONE });
601+ this._manager.addMenu(this._menu);
602+
603+ this._button.connect('clicked', () => { this._menu.toggle(); });
604+diff --git a/js/ui/shellEntry.js b/js/ui/shellEntry.js
605+index 9db5136..09bb9bb 100644
606+--- a/js/ui/shellEntry.js
607++++ b/js/ui/shellEntry.js
608+@@ -9,6 +9,7 @@ const BoxPointer = imports.ui.boxpointer;
609+ const Main = imports.ui.main;
610+ const Params = imports.misc.params;
611+ const PopupMenu = imports.ui.popupMenu;
612++const Shell = imports.gi.Shell;
613+
614+ var EntryMenu = new Lang.Class({
615+ Name: 'ShellEntryMenu',
616+@@ -150,11 +151,12 @@ function addContextMenu(entry, params) {
617+ if (entry.menu)
618+ return;
619+
620+- params = Params.parse (params, { isPassword: false });
621++ params = Params.parse (params, { isPassword: false, actionMode: Shell.ActionMode.POPUP });
622+
623+ entry.menu = new EntryMenu(entry);
624+ entry.menu.isPassword = params.isPassword;
625+- entry._menuManager = new PopupMenu.PopupMenuManager({ actor: entry });
626++ entry._menuManager = new PopupMenu.PopupMenuManager({ actor: entry },
627++ { actionMode: params.actionMode });
628+ entry._menuManager.addMenu(entry.menu);
629+
630+ // Add an event handler to both the entry and its clutter_text; the former
631diff --git a/debian/patches/StIcon-only-compute-shadow-pipeline-when-the-texture-is-p.patch b/debian/patches/StIcon-only-compute-shadow-pipeline-when-the-texture-is-p.patch
632index 96b2cf0..6645cf9 100644
633--- a/debian/patches/StIcon-only-compute-shadow-pipeline-when-the-texture-is-p.patch
634+++ b/debian/patches/StIcon-only-compute-shadow-pipeline-when-the-texture-is-p.patch
635@@ -1,5 +1,9 @@
636 From: =?utf-8?b?Ik1hcmNvIFRyZXZpc2FuIChUcmV2acOxbyki?= <mail@3v1n0.net>
637+<<<<<<< debian/patches/StIcon-only-compute-shadow-pipeline-when-the-texture-is-p.patch
638 Date: Wed, 18 Oct 2017 05:32:22 -0500
639+=======
640+Date: Wed, 18 Oct 2017 12:32:22 +0200
641+>>>>>>> debian/patches/StIcon-only-compute-shadow-pipeline-when-the-texture-is-p.patch
642 Subject: StIcon: only compute shadow pipeline when the texture is properly
643 allocated
644
645diff --git a/debian/patches/dialog-Really-set-ellipsize-mode-in-subtitle-and-body.patch b/debian/patches/dialog-Really-set-ellipsize-mode-in-subtitle-and-body.patch
646new file mode 100644
647index 0000000..9f1787e
648--- /dev/null
649+++ b/debian/patches/dialog-Really-set-ellipsize-mode-in-subtitle-and-body.patch
650@@ -0,0 +1,40 @@
651+From: =?utf-8?b?Ik1hcmNvIFRyZXZpc2FuIChUcmV2acOxbyki?= <mail@3v1n0.net>
652+Date: Fri, 3 May 2019 15:27:13 -0500
653+Subject: dialog: Really set ellipsize mode in subtitle and body
654+
655+Dialog's subtitle or body could not be properly wrapped, while it's ellipsized
656+when the text's width doesn't exceed the container size.
657+
658+Clutter text has an `ellipsize` property, however in dialog's subtitle and body
659+we have been setting the `ellipsize-mode` property to Pango.EllipsizeMode.NONE
660+that is not present in the underlying GObject.
661+
662+Not being an error in javascript, gjs didn't warn us about this, while at the
663+same time the St.Label's default Pango.EllipsizeMode.END was used.
664+
665+Fixes https://gitlab.gnome.org/GNOME/gnome-shell/issues/922
666+
667+https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/531
668+
669+(cherry picked from commit 3121c9aa29406ad85e949b697e90092f1fa6fc2e)
670+
671+Origin: https://gitlab.gnome.org/GNOME/gnome-shell/commit/5703a25e
672+Bug-Ubuntu: https://bugs.launchpad.net/oem-priority/+bug/1809788
673+Applied: 3.28.4
674+---
675+ js/ui/dialog.js | 2 +-
676+ 1 file changed, 1 insertion(+), 1 deletion(-)
677+
678+diff --git a/js/ui/dialog.js b/js/ui/dialog.js
679+index 89db963..3377957 100644
680+--- a/js/ui/dialog.js
681++++ b/js/ui/dialog.js
682+@@ -185,7 +185,7 @@ var MessageDialogContent = new Lang.Class({
683+ this[`_${prop}`].add_style_class_name(`message-dialog-${prop}`);
684+ });
685+
686+- let textProps = { ellipsize_mode: Pango.EllipsizeMode.NONE,
687++ let textProps = { ellipsize: Pango.EllipsizeMode.NONE,
688+ line_wrap: true };
689+ Object.assign(this._subtitle.clutter_text, textProps);
690+ Object.assign(this._body.clutter_text, textProps);
691diff --git a/debian/patches/dnd-Only-handle-touch-events-in-wayland.patch b/debian/patches/dnd-Only-handle-touch-events-in-wayland.patch
692new file mode 100644
693index 0000000..adb0ad8
694--- /dev/null
695+++ b/debian/patches/dnd-Only-handle-touch-events-in-wayland.patch
696@@ -0,0 +1,40 @@
697+From: Andrea Azzarone <andrea.azzarone@canonical.com>
698+Date: Mon, 4 Mar 2019 16:14:22 +0000
699+Subject: dnd: Only handle touch events in wayland
700+
701+There are serveral issues around touch passive grab and touch/pointer doubly
702+handling to use these on X11, so we stick to single-touch/pointer there.
703+
704+Cherry picked from commit 60ccdc2deb746c0d96b0268ee5034b65478ce779
705+
706+Closes: https://gitlab.gnome.org/GNOME/gnome-shell/issues/1015
707+
708+Ubuntu-Bug: https://bugs.launchpad.net/ubuntu/+source/gnome-shell/+bug/1817020
709+GNOME-Bug: https://gitlab.gnome.org/GNOME/gnome-shell/issues/1015
710+Origin: https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/457
711+Applied-Upstream: 3.28.4
712+---
713+ js/ui/dnd.js | 10 ++++++++++
714+ 1 file changed, 10 insertions(+)
715+
716+diff --git a/js/ui/dnd.js b/js/ui/dnd.js
717+index 9e961a1..af7a27a 100644
718+--- a/js/ui/dnd.js
719++++ b/js/ui/dnd.js
720+@@ -132,6 +132,16 @@ var _Draggable = new Lang.Class({
721+ },
722+
723+ _onTouchEvent(actor, event) {
724++ // Here we only handle touch events on wayland. On X11
725++ // we do get emulated pointer events, which already works
726++ // for single-touch cases. Besides, the X11 passive touch grab
727++ // set up by Mutter will make us see first the touch events
728++ // and later the pointer events, so it will look like two
729++ // unrelated series of events, we want to avoid double handling
730++ // in these cases.
731++ if (!Meta.is_wayland_compositor())
732++ return Clutter.EVENT_PROPAGATE;
733++
734+ if (event.type() != Clutter.EventType.TOUCH_BEGIN ||
735+ !global.display.is_pointer_emulating_sequence(event.get_event_sequence()))
736+ return Clutter.EVENT_PROPAGATE;
737diff --git a/debian/patches/js-fix-invalid-access-errors.patch b/debian/patches/js-fix-invalid-access-errors.patch
738index dec3a60..5f3dbff 100644
739--- a/debian/patches/js-fix-invalid-access-errors.patch
740+++ b/debian/patches/js-fix-invalid-access-errors.patch
741@@ -1,5 +1,9 @@
742 From: =?utf-8?b?Ik1hcmNvIFRyZXZpc2FuIChUcmV2acOxbyki?= <mail@3v1n0.net>
743+<<<<<<< debian/patches/js-fix-invalid-access-errors.patch
744 Date: Mon, 4 Dec 2017 19:41:50 -0600
745+=======
746+Date: Tue, 5 Dec 2017 02:41:50 +0100
747+>>>>>>> debian/patches/js-fix-invalid-access-errors.patch
748 Subject: js: fix invalid-access errors
749
750 tweener: Save handlers on target and remove them on destroy
751@@ -24,6 +28,7 @@ Remove duplicated handler on 'destroy' and just use a generic one.
752
753 https://bugzilla.gnome.org/show_bug.cgi?id=791233
754
755+<<<<<<< debian/patches/js-fix-invalid-access-errors.patch
756 workspaceThumbnail: Disconnect from window signals on destruction
757
758 Avoid to try to destroy the window clone content more than once
759@@ -68,10 +73,13 @@ good practice).
760
761 https://bugzilla.gnome.org/show_bug.cgi?id=791233
762
763+=======
764+>>>>>>> debian/patches/js-fix-invalid-access-errors.patch
765 Bug-GNOME: https://bugzilla.gnome.org/show_bug.cgi?id=791233
766 Bug-Ubuntu: https://bugs.launchpad.net/ubuntu/bionic/+source/gnome-shell/+bug/1747566
767 Forwarded: yes, https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/4
768 ---
769+<<<<<<< debian/patches/js-fix-invalid-access-errors.patch
770 js/ui/dnd.js | 65 +++++++++++++++++++++++++++------------------
771 js/ui/tweener.js | 64 +++++++++++++++++++++++++++++++++++---------
772 js/ui/workspace.js | 35 +++++++++++++++++-------
773@@ -80,6 +88,14 @@ Forwarded: yes, https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/4
774
775 diff --git a/js/ui/dnd.js b/js/ui/dnd.js
776 index a38607c..431c60d 100644
777+=======
778+ js/ui/dnd.js | 65 +++++++++++++++++++++++++++++++++-----------------------
779+ js/ui/tweener.js | 63 ++++++++++++++++++++++++++++++++++++++++++------------
780+ 2 files changed, 89 insertions(+), 39 deletions(-)
781+
782+diff --git a/js/ui/dnd.js b/js/ui/dnd.js
783+index ec1ba1d..9e961a1 100644
784+>>>>>>> debian/patches/js-fix-invalid-access-errors.patch
785 --- a/js/ui/dnd.js
786 +++ b/js/ui/dnd.js
787 @@ -27,6 +27,12 @@ var DragMotionResult = {
788@@ -175,7 +191,11 @@ index a38607c..431c60d 100644
789 this._dragOrigOpacity = this._dragActor.opacity;
790 if (this._dragActorOpacity != undefined)
791 this._dragActor.opacity = this._dragActorOpacity;
792+<<<<<<< debian/patches/js-fix-invalid-access-errors.patch
793 @@ -500,7 +515,7 @@ var _Draggable = new Lang.Class({
794+=======
795+@@ -518,7 +533,7 @@ var _Draggable = new Lang.Class({
796+>>>>>>> debian/patches/js-fix-invalid-access-errors.patch
797 event.get_time())) {
798 // If it accepted the drop without taking the actor,
799 // handle it ourselves.
800@@ -184,7 +204,11 @@ index a38607c..431c60d 100644
801 if (this._restoreOnSuccess) {
802 this._restoreDragActor(event.get_time());
803 return true;
804+<<<<<<< debian/patches/js-fix-invalid-access-errors.patch
805 @@ -508,7 +523,7 @@ var _Draggable = new Lang.Class({
806+=======
807+@@ -526,7 +541,7 @@ var _Draggable = new Lang.Class({
808+>>>>>>> debian/patches/js-fix-invalid-access-errors.patch
809 this._dragActor.destroy();
810 }
811
812@@ -193,7 +217,11 @@ index a38607c..431c60d 100644
813 global.screen.set_cursor(Meta.Cursor.DEFAULT);
814 this.emit('drag-end', event.get_time(), true);
815 this._dragComplete();
816+<<<<<<< debian/patches/js-fix-invalid-access-errors.patch
817 @@ -557,20 +572,22 @@ var _Draggable = new Lang.Class({
818+=======
819+@@ -575,20 +590,22 @@ var _Draggable = new Lang.Class({
820+>>>>>>> debian/patches/js-fix-invalid-access-errors.patch
821
822 _cancelDrag(eventTime) {
823 this.emit('drag-cancelled', eventTime);
824@@ -220,7 +248,11 @@ index a38607c..431c60d 100644
825 this._animateDragEnd(eventTime,
826 { x: snapBackX,
827 y: snapBackY,
828+<<<<<<< debian/patches/js-fix-invalid-access-errors.patch
829 @@ -581,7 +598,7 @@ var _Draggable = new Lang.Class({
830+=======
831+@@ -599,7 +616,7 @@ var _Draggable = new Lang.Class({
832+>>>>>>> debian/patches/js-fix-invalid-access-errors.patch
833 },
834
835 _restoreDragActor(eventTime) {
836@@ -229,7 +261,11 @@ index a38607c..431c60d 100644
837 let [restoreX, restoreY, restoreScale] = this._getRestoreLocation();
838
839 // fade the actor back in at its original location
840+<<<<<<< debian/patches/js-fix-invalid-access-errors.patch
841 @@ -596,12 +613,6 @@ var _Draggable = new Lang.Class({
842+=======
843+@@ -614,12 +631,6 @@ var _Draggable = new Lang.Class({
844+>>>>>>> debian/patches/js-fix-invalid-access-errors.patch
845 _animateDragEnd(eventTime, params) {
846 this._animationInProgress = true;
847
848@@ -242,7 +278,11 @@ index a38607c..431c60d 100644
849 params['opacity'] = this._dragOrigOpacity;
850 params['transition'] = 'easeOutQuad';
851 params['onComplete'] = this._onAnimationComplete;
852+<<<<<<< debian/patches/js-fix-invalid-access-errors.patch
853 @@ -624,9 +635,6 @@ var _Draggable = new Lang.Class({
854+=======
855+@@ -642,9 +653,6 @@ var _Draggable = new Lang.Class({
856+>>>>>>> debian/patches/js-fix-invalid-access-errors.patch
857 },
858
859 _onAnimationComplete(dragActor, eventTime) {
860@@ -252,7 +292,11 @@ index a38607c..431c60d 100644
861 if (this._dragOrigParent) {
862 Main.uiGroup.remove_child(this._dragActor);
863 this._dragOrigParent.add_actor(this._dragActor);
864+<<<<<<< debian/patches/js-fix-invalid-access-errors.patch
865 @@ -641,7 +649,7 @@ var _Draggable = new Lang.Class({
866+=======
867+@@ -659,7 +667,7 @@ var _Draggable = new Lang.Class({
868+>>>>>>> debian/patches/js-fix-invalid-access-errors.patch
869 },
870
871 _dragComplete() {
872@@ -261,7 +305,11 @@ index a38607c..431c60d 100644
873 Shell.util_set_hidden_from_pick(this._dragActor, false);
874
875 this._ungrabEvents();
876+<<<<<<< debian/patches/js-fix-invalid-access-errors.patch
877 @@ -652,7 +660,12 @@ var _Draggable = new Lang.Class({
878+=======
879+@@ -670,7 +678,12 @@ var _Draggable = new Lang.Class({
880+>>>>>>> debian/patches/js-fix-invalid-access-errors.patch
881 this._updateHoverId = 0;
882 }
883
884@@ -276,10 +324,17 @@ index a38607c..431c60d 100644
885 }
886 });
887 diff --git a/js/ui/tweener.js b/js/ui/tweener.js
888+<<<<<<< debian/patches/js-fix-invalid-access-errors.patch
889 index 1a85e2f..663b97b 100644
890 --- a/js/ui/tweener.js
891 +++ b/js/ui/tweener.js
892 @@ -69,30 +69,68 @@ function _getTweenState(target) {
893+=======
894+index 1a85e2f..22818ba 100644
895+--- a/js/ui/tweener.js
896++++ b/js/ui/tweener.js
897+@@ -69,30 +69,67 @@ function _getTweenState(target) {
898+>>>>>>> debian/patches/js-fix-invalid-access-errors.patch
899 return target.__ShellTweenerState;
900 }
901
902@@ -320,8 +375,12 @@ index 1a85e2f..663b97b 100644
903 + let wrapperNeeded = false;
904 + let tweenerHandlers = _ensureHandlers(target);
905 +
906+<<<<<<< debian/patches/js-fix-invalid-access-errors.patch
907 + if (!(name in tweenerHandlers))
908 + {
909+=======
910++ if (!(name in tweenerHandlers)) {
911+>>>>>>> debian/patches/js-fix-invalid-access-errors.patch
912 + tweenerHandlers[name] = [];
913 + wrapperNeeded = true;
914 + }
915@@ -361,6 +420,7 @@ index 1a85e2f..663b97b 100644
916 }
917
918 function _actorDestroyed(target) {
919+<<<<<<< debian/patches/js-fix-invalid-access-errors.patch
920 diff --git a/js/ui/workspace.js b/js/ui/workspace.js
921 index 1e121b7..8836537 100644
922 --- a/js/ui/workspace.js
923@@ -562,3 +622,5 @@ index c1b4bdd..0c72e74 100644
924
925 return clone;
926 },
927+=======
928+>>>>>>> debian/patches/js-fix-invalid-access-errors.patch
929diff --git a/debian/patches/js-ui-Choose-some-actors-to-cache-on-the-GPU.patch b/debian/patches/js-ui-Choose-some-actors-to-cache-on-the-GPU.patch
930index 1402949..79767a4 100644
931--- a/debian/patches/js-ui-Choose-some-actors-to-cache-on-the-GPU.patch
932+++ b/debian/patches/js-ui-Choose-some-actors-to-cache-on-the-GPU.patch
933@@ -1,5 +1,9 @@
934 From: Daniel van Vugt <daniel.van.vugt@canonical.com>
935+<<<<<<< debian/patches/js-ui-Choose-some-actors-to-cache-on-the-GPU.patch
936 Date: Fri, 6 Apr 2018 05:26:58 -0500
937+=======
938+Date: Fri, 6 Apr 2018 12:26:58 +0200
939+>>>>>>> debian/patches/js-ui-Choose-some-actors-to-cache-on-the-GPU.patch
940 Subject: js/ui: Choose some actors to cache on the GPU
941
942 Adds a wrapper function to flag actors that are good candidates for
943@@ -64,10 +68,17 @@ index 47f718a..602646a 100644
944 this._container.connect('get-preferred-height', this._getPreferredHeight.bind(this));
945 this._container.connect('allocate', this._allocate.bind(this));
946 diff --git a/js/ui/dash.js b/js/ui/dash.js
947+<<<<<<< debian/patches/js-ui-Choose-some-actors-to-cache-on-the-GPU.patch
948 index 5ee2476..14864f1 100644
949 --- a/js/ui/dash.js
950 +++ b/js/ui/dash.js
951 @@ -402,6 +402,7 @@ var Dash = new Lang.Class({
952+=======
953+index d75af65..4d3fe73 100644
954+--- a/js/ui/dash.js
955++++ b/js/ui/dash.js
956+@@ -404,6 +404,7 @@ var Dash = new Lang.Class({
957+>>>>>>> debian/patches/js-ui-Choose-some-actors-to-cache-on-the-GPU.patch
958 clip_to_allocation: true });
959 this._box._delegate = this;
960 this._container.add_actor(this._box);
961@@ -96,10 +107,17 @@ index cfa192d..89db963 100644
962 this.contentLayout = new St.BoxLayout({ vertical: true,
963 style_class: "modal-dialog-content-box" });
964 diff --git a/js/ui/main.js b/js/ui/main.js
965+<<<<<<< debian/patches/js-ui-Choose-some-actors-to-cache-on-the-GPU.patch
966 index d86cf9e..5277cf7 100644
967 --- a/js/ui/main.js
968 +++ b/js/ui/main.js
969 @@ -716,3 +716,19 @@ function showRestartMessage(message) {
970+=======
971+index 2c54bb6..baca1c2 100644
972+--- a/js/ui/main.js
973++++ b/js/ui/main.js
974+@@ -719,3 +719,19 @@ function showRestartMessage(message) {
975+>>>>>>> debian/patches/js-ui-Choose-some-actors-to-cache-on-the-GPU.patch
976 let restartMessage = new RestartMessage(message);
977 restartMessage.open();
978 }
979@@ -120,7 +138,11 @@ index d86cf9e..5277cf7 100644
980 + actor.set_offscreen_redirect(Clutter.OffscreenRedirect.ALWAYS);
981 +}
982 diff --git a/js/ui/panel.js b/js/ui/panel.js
983+<<<<<<< debian/patches/js-ui-Choose-some-actors-to-cache-on-the-GPU.patch
984 index 2f59324..2237ead 100644
985+=======
986+index ef14ddf..a76916b 100644
987+>>>>>>> debian/patches/js-ui-Choose-some-actors-to-cache-on-the-GPU.patch
988 --- a/js/ui/panel.js
989 +++ b/js/ui/panel.js
990 @@ -772,6 +772,7 @@ var Panel = new Lang.Class({
991diff --git a/debian/patches/keyboard-Filter-redundant-FocusTracker-position-changed-s.patch b/debian/patches/keyboard-Filter-redundant-FocusTracker-position-changed-s.patch
992new file mode 100644
993index 0000000..a694dce
994--- /dev/null
995+++ b/debian/patches/keyboard-Filter-redundant-FocusTracker-position-changed-s.patch
996@@ -0,0 +1,38 @@
997+From: Carlos Garnacho <carlosg@gnome.org>
998+Date: Mon, 17 Sep 2018 21:04:48 +0200
999+Subject: keyboard: Filter redundant FocusTracker::position-changed signals
1000+
1001+Just emit the signal if it did actually change.
1002+
1003+Bug-Ubuntu: https://bugs.launchpad.net/ubuntu/+source/gnome-shell/+bug/1812735
1004+Origin: https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/239
1005+---
1006+ js/ui/keyboard.js | 8 ++++++++
1007+ 1 file changed, 8 insertions(+)
1008+
1009+diff --git a/js/ui/keyboard.js b/js/ui/keyboard.js
1010+index 4413846..4a923ad 100644
1011+--- a/js/ui/keyboard.js
1012++++ b/js/ui/keyboard.js
1013+@@ -491,6 +491,7 @@ var FocusTracker = new Lang.Class({
1014+ _init() {
1015+ this._currentWindow = null;
1016+ this._currentWindowPositionId = 0;
1017++ this._rect = null;
1018+
1019+ global.screen.get_display().connect('notify::focus-window', () => {
1020+ this._setCurrentWindow(global.screen.get_display().focus_window);
1021+@@ -539,6 +540,13 @@ var FocusTracker = new Lang.Class({
1022+ rect.y -= frameRect.y;
1023+ }
1024+
1025++ if (this._rect &&
1026++ this._rect.x == rect.x &&
1027++ this._rect.y == rect.y &&
1028++ this._rect.width == rect.width &&
1029++ this._rect.height == rect.height)
1030++ return;
1031++
1032+ this._rect = rect;
1033+ this.emit('position-changed');
1034+ },
1035diff --git a/debian/patches/keyboard-Listen-to-IbusPanelService-focus-in-out-to-track.patch b/debian/patches/keyboard-Listen-to-IbusPanelService-focus-in-out-to-track.patch
1036new file mode 100644
1037index 0000000..0f4122f
1038--- /dev/null
1039+++ b/debian/patches/keyboard-Listen-to-IbusPanelService-focus-in-out-to-track.patch
1040@@ -0,0 +1,65 @@
1041+From: Carlos Garnacho <carlosg@gnome.org>
1042+Date: Tue, 18 Sep 2018 12:54:29 +0200
1043+Subject: keyboard: Listen to IbusPanelService::focus-in/out to track focus
1044+ changes
1045+
1046+In X11 there's no input panel state requests, so restore the previous behavior
1047+that focused entries would always toggle the OSK on there.
1048+
1049+Bug-Ubuntu: https://bugs.launchpad.net/ubuntu/+source/gnome-shell/+bug/1760399
1050+Origin: https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/239
1051+---
1052+ js/misc/ibusManager.js | 5 +++++
1053+ js/ui/keyboard.js | 16 ++++++++++++++++
1054+ 2 files changed, 21 insertions(+)
1055+
1056+diff --git a/js/misc/ibusManager.js b/js/misc/ibusManager.js
1057+index ad2e0fc..33ad877 100644
1058+--- a/js/misc/ibusManager.js
1059++++ b/js/misc/ibusManager.js
1060+@@ -119,6 +119,11 @@ var IBusManager = new Lang.Class({
1061+ let cursorLocation = { x, y, width: w, height: h };
1062+ this.emit('set-cursor-location', cursorLocation);
1063+ });
1064++ this._panelService.connect('focus-in', (panel, path) => {
1065++ if (!GLib.str_has_suffix(path, '/InputContext_1'))
1066++ this.emit ('focus-in');
1067++ });
1068++ this._panelService.connect('focus-out', () => { this.emit('focus-out'); });
1069+
1070+ try {
1071+ // IBus versions older than 1.5.10 have a bug which
1072+diff --git a/js/ui/keyboard.js b/js/ui/keyboard.js
1073+index 4a923ad..7dba1a8 100644
1074+--- a/js/ui/keyboard.js
1075++++ b/js/ui/keyboard.js
1076+@@ -512,6 +512,12 @@ var FocusTracker = new Lang.Class({
1077+
1078+ this._setCurrentRect(rect);
1079+ });
1080++ this._ibusManager.connect('focus-in', () => {
1081++ this.emit('focus-changed', true);
1082++ });
1083++ this._ibusManager.connect('focus-out', () => {
1084++ this.emit('focus-changed', false);
1085++ });
1086+ },
1087+
1088+ get currentWindow() {
1089+@@ -594,6 +600,16 @@ var Keyboard = new Lang.Class({
1090+ this._animFocusedWindow = null;
1091+ this._oskFocusWindow = null;
1092+ });
1093++ this._focusTracker.connect('focus-changed', (tracker, focused) => {
1094++ // Valid only for X11
1095++ if (Meta.is_wayland_compositor())
1096++ return;
1097++
1098++ if (focused)
1099++ this.show(Main.layoutManager.focusIndex);
1100++ else
1101++ this.hide();
1102++ });
1103+
1104+ Meta.get_backend().connect('last-device-changed',
1105+ (backend, deviceId) => {
1106diff --git a/debian/patches/optional-hot-corner.patch b/debian/patches/optional-hot-corner.patch
1107index 0ae5f0f..484a5da 100644
1108--- a/debian/patches/optional-hot-corner.patch
1109+++ b/debian/patches/optional-hot-corner.patch
1110@@ -1,5 +1,9 @@
1111+<<<<<<< debian/patches/optional-hot-corner.patch
1112 From 9d7ad6b631470b28efcdb49d24ca4a835d3df17d Mon Sep 17 00:00:00 2001
1113 From: =?UTF-8?q?Florian=20M=C3=BCllner?= <fmuellner@gnome.org>
1114+=======
1115+From: =?utf-8?q?Florian_M=C3=BCllner?= <fmuellner@gnome.org>
1116+>>>>>>> debian/patches/optional-hot-corner.patch
1117 Date: Thu, 8 Jun 2017 17:07:56 +0200
1118 Subject: [PATCH] layout: Make the hot corner optional
1119
1120@@ -14,10 +18,17 @@ https://bugzilla.gnome.org/show_bug.cgi?id=688320
1121 js/ui/layout.js | 8 ++++++++
1122 2 files changed, 16 insertions(+)
1123
1124+<<<<<<< debian/patches/optional-hot-corner.patch
1125 Index: gnome-shell-3.27.91/data/org.gnome.shell.gschema.xml.in
1126 ===================================================================
1127 --- gnome-shell-3.27.91.orig/data/org.gnome.shell.gschema.xml.in
1128 +++ gnome-shell-3.27.91/data/org.gnome.shell.gschema.xml.in
1129+=======
1130+diff --git a/data/org.gnome.shell.gschema.xml.in b/data/org.gnome.shell.gschema.xml.in
1131+index 63a1903..8ec1d26 100644
1132+--- a/data/org.gnome.shell.gschema.xml.in
1133++++ b/data/org.gnome.shell.gschema.xml.in
1134+>>>>>>> debian/patches/optional-hot-corner.patch
1135 @@ -38,6 +38,14 @@
1136 load all extensions regardless of the versions they claim to support.
1137 </description>
1138@@ -33,11 +44,19 @@ Index: gnome-shell-3.27.91/data/org.gnome.shell.gschema.xml.in
1139 <key name="favorite-apps" type="as">
1140 <default>[ 'epiphany.desktop', 'evolution.desktop', 'rhythmbox.desktop', 'shotwell.desktop', 'org.gnome.Nautilus.desktop', 'org.gnome.Software.desktop' ]</default>
1141 <summary>List of desktop file IDs for favorite applications</summary>
1142+<<<<<<< debian/patches/optional-hot-corner.patch
1143 Index: gnome-shell-3.27.91/js/ui/layout.js
1144 ===================================================================
1145 --- gnome-shell-3.27.91.orig/js/ui/layout.js
1146 +++ gnome-shell-3.27.91/js/ui/layout.js
1147 @@ -268,6 +268,9 @@ var LayoutManager = new Lang.Class({
1148+=======
1149+diff --git a/js/ui/layout.js b/js/ui/layout.js
1150+index e615e56..fa21ef8 100644
1151+--- a/js/ui/layout.js
1152++++ b/js/ui/layout.js
1153+@@ -269,6 +269,9 @@ var LayoutManager = new Lang.Class({
1154+>>>>>>> debian/patches/optional-hot-corner.patch
1155 this._backgroundGroup.lower_bottom();
1156 this._bgManagers = [];
1157
1158@@ -47,7 +66,11 @@ Index: gnome-shell-3.27.91/js/ui/layout.js
1159 // Need to update struts on new workspaces when they are added
1160 global.screen.connect('notify::n-workspaces',
1161 this._queueUpdateRegions.bind(this));
1162+<<<<<<< debian/patches/optional-hot-corner.patch
1163 @@ -364,6 +367,11 @@ var LayoutManager = new Lang.Class({
1164+=======
1165+@@ -365,6 +368,11 @@ var LayoutManager = new Lang.Class({
1166+>>>>>>> debian/patches/optional-hot-corner.patch
1167 });
1168 this.hotCorners = [];
1169
1170diff --git a/debian/patches/power-Label-the-PENDING_CHARGE-state-as-Not-Charging.patch b/debian/patches/power-Label-the-PENDING_CHARGE-state-as-Not-Charging.patch
1171new file mode 100644
1172index 0000000..d74b23c
1173--- /dev/null
1174+++ b/debian/patches/power-Label-the-PENDING_CHARGE-state-as-Not-Charging.patch
1175@@ -0,0 +1,212 @@
1176+From: =?utf-8?q?Jo=C3=A3o_Paulo_Rechi_Vita?= <jprvita@endlessm.com>
1177+Date: Fri, 2 Nov 2018 21:51:33 +0100
1178+Subject: power: Label the PENDING_CHARGE state as "Not Charging"
1179+
1180+The pending-charge state means AC power is on but the battery is not
1181+being charged. This can happen because its charge is above a certain
1182+threshold, to avoid short charging cycles and prolong the battery's
1183+life, or because the PSU is not powerful enough to charge the batteries.
1184+
1185+Instead of lying to the user about something being estimated, we should
1186+simply tell the truth and set the label to "Not Charging".
1187+
1188+Closes: #701.
1189+
1190+Bug-Ubuntu: https://bugs.launchpad.net/ubuntu/+source/linux/+bug/1745032
1191+Bug-GNOME: https://gitlab.gnome.org/GNOME/gnome-shell/issues/701
1192+Origin: https://gitlab.gnome.org/GNOME/gnome-shell/commit/52c59ac0dd7ddbe064
1193+---
1194+ js/ui/status/power.js | 4 +++-
1195+ po/ca.po | 4 ++++
1196+ po/de.po | 4 ++++
1197+ po/el.po | 4 ++++
1198+ po/eo.po | 4 ++++
1199+ po/es.po | 4 ++++
1200+ po/fur.po | 4 ++++
1201+ po/it.po | 4 ++++
1202+ po/ja.po | 4 ++++
1203+ po/sl.po | 4 ++++
1204+ po/sv.po | 4 ++++
1205+ po/tr.po | 4 ++++
1206+ 12 files changed, 47 insertions(+), 1 deletion(-)
1207+
1208+diff --git a/js/ui/status/power.js b/js/ui/status/power.js
1209+index a2bfd75..bfd0de5 100644
1210+--- a/js/ui/status/power.js
1211++++ b/js/ui/status/power.js
1212+@@ -79,7 +79,9 @@ var Indicator = new Lang.Class({
1213+ seconds = this._proxy.TimeToFull;
1214+ else if (this._proxy.State == UPower.DeviceState.DISCHARGING)
1215+ seconds = this._proxy.TimeToEmpty;
1216+- // state is one of PENDING_CHARGING, PENDING_DISCHARGING
1217++ else if (this._proxy.State == UPower.DeviceState.PENDING_CHARGE)
1218++ return _("Not Charging");
1219++ // state is PENDING_DISCHARGE
1220+ else
1221+ return _("Estimating…");
1222+
1223+diff --git a/po/ca.po b/po/ca.po
1224+index 5858f87..0bd69fd 100644
1225+--- a/po/ca.po
1226++++ b/po/ca.po
1227+@@ -1922,6 +1922,10 @@ msgstr "Paràmetres d'energia"
1228+ msgid "Fully Charged"
1229+ msgstr "Totalment carregada"
1230+
1231++#: js/ui/status/power.js:74
1232++msgid "Not Charging"
1233++msgstr ""
1234++
1235+ #. 0 is reported when UPower does not have enough data
1236+ #. to estimate battery life
1237+ #: js/ui/status/power.js:84 js/ui/status/power.js:90
1238+diff --git a/po/de.po b/po/de.po
1239+index bb83a6e..5565f9e 100644
1240+--- a/po/de.po
1241++++ b/po/de.po
1242+@@ -1935,6 +1935,10 @@ msgstr "Energieeinstellungen"
1243+ msgid "Fully Charged"
1244+ msgstr "Vollständig geladen"
1245+
1246++#: js/ui/status/power.js:74
1247++msgid "Not Charging"
1248++msgstr "Lädt nicht"
1249++
1250+ #. 0 is reported when UPower does not have enough data
1251+ #. to estimate battery life
1252+ #: js/ui/status/power.js:84 js/ui/status/power.js:90
1253+diff --git a/po/el.po b/po/el.po
1254+index c822608..2061c24 100644
1255+--- a/po/el.po
1256++++ b/po/el.po
1257+@@ -1795,6 +1795,10 @@ msgstr "Ρυθμίσεις τροφοδοσίας"
1258+ msgid "Fully Charged"
1259+ msgstr "Πλήρως φορτισμένη"
1260+
1261++#: js/ui/status/power.js:74
1262++msgid "Not Charging"
1263++msgstr "Δεν φορτίζεται"
1264++
1265+ #. 0 is reported when UPower does not have enough data
1266+ #. to estimate battery life
1267+ #: js/ui/status/power.js:84 js/ui/status/power.js:90
1268+diff --git a/po/eo.po b/po/eo.po
1269+index 4ee0b5e..1d7278b 100644
1270+--- a/po/eo.po
1271++++ b/po/eo.po
1272+@@ -1527,6 +1527,10 @@ msgstr "Energiagordoj"
1273+ msgid "Fully Charged"
1274+ msgstr "Plene ŝargita"
1275+
1276++#: js/ui/status/power.js:74
1277++msgid "Not Charging"
1278++msgstr "Ne ŝargante"
1279++
1280+ #. 0 is reported when UPower does not have enough data
1281+ #. to estimate battery life
1282+ #: ../js/ui/status/power.js:84 ../js/ui/status/power.js:90
1283+diff --git a/po/es.po b/po/es.po
1284+index e2c935c..28dd56c 100644
1285+--- a/po/es.po
1286++++ b/po/es.po
1287+@@ -1914,6 +1914,10 @@ msgstr "Configuración de energía"
1288+ msgid "Fully Charged"
1289+ msgstr "Cargada completamente"
1290+
1291++#: js/ui/status/power.js:74
1292++msgid "Not Charging"
1293++msgstr "No está cargando"
1294++
1295+ #. 0 is reported when UPower does not have enough data
1296+ #. to estimate battery life
1297+ #: js/ui/status/power.js:84 js/ui/status/power.js:90
1298+diff --git a/po/fur.po b/po/fur.po
1299+index f416ed0..6e485a8 100644
1300+--- a/po/fur.po
1301++++ b/po/fur.po
1302+@@ -1910,6 +1910,10 @@ msgstr "Impostazions di alimentazion"
1303+ msgid "Fully Charged"
1304+ msgstr "Cjarie"
1305+
1306++#: js/ui/status/power.js:74
1307++msgid "Not Charging"
1308++msgstr "Nol sta cjariant"
1309++
1310+ #. 0 is reported when UPower does not have enough data
1311+ #. to estimate battery life
1312+ #: js/ui/status/power.js:84 js/ui/status/power.js:90
1313+diff --git a/po/it.po b/po/it.po
1314+index ab18794..bcc2438 100644
1315+--- a/po/it.po
1316++++ b/po/it.po
1317+@@ -1931,6 +1931,10 @@ msgstr "Impostazioni alimentazione"
1318+ msgid "Fully Charged"
1319+ msgstr "Carica"
1320+
1321++#: js/ui/status/power.js:74
1322++msgid "Not Charging"
1323++msgstr "Non in carica"
1324++
1325+ #. 0 is reported when UPower does not have enough data
1326+ #. to estimate battery life
1327+ #: js/ui/status/power.js:84 js/ui/status/power.js:90
1328+diff --git a/po/ja.po b/po/ja.po
1329+index 0264e97..e6ef9a6 100644
1330+--- a/po/ja.po
1331++++ b/po/ja.po
1332+@@ -1800,6 +1800,10 @@ msgstr "電源設定"
1333+ msgid "Fully Charged"
1334+ msgstr "充電完了"
1335+
1336++#: js/ui/status/power.js:74
1337++msgid "Not Charging"
1338++msgstr "放電中"
1339++
1340+ #. 0 is reported when UPower does not have enough data
1341+ #. to estimate battery life
1342+ #: js/ui/status/power.js:84 js/ui/status/power.js:90
1343+diff --git a/po/sl.po b/po/sl.po
1344+index b7e9798..75b7b62 100644
1345+--- a/po/sl.po
1346++++ b/po/sl.po
1347+@@ -1937,6 +1937,10 @@ msgstr "Upravljanje napajanja"
1348+ msgid "Fully Charged"
1349+ msgstr "Polno napolnjeno"
1350+
1351++#: js/ui/status/power.js:74
1352++msgid "Not Charging"
1353++msgstr "Naprava se ne polni"
1354++
1355+ #. 0 is reported when UPower does not have enough data
1356+ #. to estimate battery life
1357+ #: js/ui/status/power.js:84 js/ui/status/power.js:90
1358+diff --git a/po/sv.po b/po/sv.po
1359+index 5345657..edd66ff 100644
1360+--- a/po/sv.po
1361++++ b/po/sv.po
1362+@@ -1899,6 +1899,10 @@ msgstr "Ströminställningar"
1363+ msgid "Fully Charged"
1364+ msgstr "Fulladdad"
1365+
1366++#: js/ui/status/power.js:74
1367++msgid "Not Charging"
1368++msgstr "Laddar inte"
1369++
1370+ #. 0 is reported when UPower does not have enough data
1371+ #. to estimate battery life
1372+ #: js/ui/status/power.js:84 js/ui/status/power.js:90
1373+diff --git a/po/tr.po b/po/tr.po
1374+index 0304eb8..409362e 100644
1375+--- a/po/tr.po
1376++++ b/po/tr.po
1377+@@ -1889,6 +1889,10 @@ msgstr "Güç Ayarları"
1378+ msgid "Fully Charged"
1379+ msgstr "Tümüyle Dolu"
1380+
1381++#: js/ui/status/power.js:74
1382++msgid "Not Charging"
1383++msgstr "Şarj Olmuyor"
1384++
1385+ #. 0 is reported when UPower does not have enough data
1386+ #. to estimate battery life
1387+ #: js/ui/status/power.js:84 js/ui/status/power.js:90
1388diff --git a/debian/patches/series b/debian/patches/series
1389index aaf1b09..deee978 100644
1390--- a/debian/patches/series
1391+++ b/debian/patches/series
1392@@ -1,4 +1,7 @@
1393+<<<<<<< debian/patches/series
1394 #30-remoteMenu-Prevent-the-shell-from-becoming-unrespons.patch
1395+=======
1396+>>>>>>> debian/patches/series
1397 41-handle-logind-fail.patch
1398 50_add_ubuntu_desktop_detect.patch
1399 70_allow_sound_above_100.patch
1400@@ -11,6 +14,7 @@ ubuntu_gdm.patch
1401 ubuntu_background_login.patch
1402 ubuntu_gdm_alternatives.patch
1403 ubuntu_block_mode_extension_update.patch
1404+<<<<<<< debian/patches/series
1405 # Cherry picks from upstream
1406 ui-Theme-lookup-should-respect-XDG_DATA_DIRS.patch
1407 workspaceThumbnail-only-update-_porthole-if-the-overview-.patch
1408@@ -28,3 +32,24 @@ workspace-fix-repositioned-windows-in-activities.patch
1409 st-texture-cache-Cancel-sliced-image-loading-on-target-ac.patch
1410 st-texture-cache-Don-t-add-NULL-textures-to-cache.patch
1411 js-ui-Choose-some-actors-to-cache-on-the-GPU.patch
1412+=======
1413+volume-Add-back-sound-feedback-on-scroll.patch
1414+workaround_crasher_fractional_scaling.patch
1415+StIcon-only-compute-shadow-pipeline-when-the-texture-is-p.patch
1416+js-fix-invalid-access-errors.patch
1417+st-texture-cache-Cancel-sliced-image-loading-on-target-ac.patch
1418+js-ui-Choose-some-actors-to-cache-on-the-GPU.patch
1419+st-scroll-view-Handle-the-case-where-scrollbars-are-NULL.patch
1420+st-scroll-view-Remove-scrollbars-references-on-dispose.patch
1421+keyboard-Filter-redundant-FocusTracker-position-changed-s.patch
1422+keyboard-Listen-to-IbusPanelService-focus-in-out-to-track.patch
1423+power-Label-the-PENDING_CHARGE-state-as-Not-Charging.patch
1424+CVE-2019-3820-1.patch
1425+CVE-2019-3820-2.patch
1426+switchMonitor-switch-to-next-config-upon-initial-keypress.patch
1427+dnd-Only-handle-touch-events-in-wayland.patch
1428+st-widget-Add-missing-g_return_val_if_fail.patch
1429+windowManager-listen-actively-to-windows-being-destroyed-.patch
1430+dialog-Really-set-ellipsize-mode-in-subtitle-and-body.patch
1431+st-adjustment-Mark-all-properties-as-EXPLICIT_NOTIFY.patch
1432+>>>>>>> debian/patches/series
1433diff --git a/debian/patches/st-adjustment-Mark-all-properties-as-EXPLICIT_NOTIFY.patch b/debian/patches/st-adjustment-Mark-all-properties-as-EXPLICIT_NOTIFY.patch
1434new file mode 100644
1435index 0000000..65a15de
1436--- /dev/null
1437+++ b/debian/patches/st-adjustment-Mark-all-properties-as-EXPLICIT_NOTIFY.patch
1438@@ -0,0 +1,85 @@
1439+From: Carlos Garnacho <carlosg@gnome.org>
1440+Date: Thu, 28 Jun 2018 20:22:40 +0200
1441+Subject: st-adjustment: Mark all properties as EXPLICIT_NOTIFY
1442+
1443+All adjustment setter functions take good care of avoiding emission of
1444+notify:: when it's not needed. The set_property() implementation already
1445+calls into the setter functions, so mark the properties as EXPLICITY_NOTIFY
1446+in order to optimize notify:: emission away through g_object_set (rather
1447+common from JS code).
1448+
1449+(cherry picked from commit b1b455ff1a0e856149142747e77fb1c98df34c03)
1450+
1451+Closes: https://gitlab.gnome.org/GNOME/gnome-shell/issues/1270
1452+
1453+Origin: https://gitlab.gnome.org/GNOME/gnome-shell/commit/8702d66
1454+Bug-Ubuntu: https://bugs.launchpad.net/ubuntu/+source/gnome-shell/+bug/1827284
1455+Applied-Upstream: 3.28.4
1456+---
1457+ src/st/st-adjustment.c | 18 ++++++++++++------
1458+ 1 file changed, 12 insertions(+), 6 deletions(-)
1459+
1460+diff --git a/src/st/st-adjustment.c b/src/st/st-adjustment.c
1461+index 005c6eb..598df4e 100644
1462+--- a/src/st/st-adjustment.c
1463++++ b/src/st/st-adjustment.c
1464+@@ -205,7 +205,8 @@ st_adjustment_class_init (StAdjustmentClass *klass)
1465+ G_MAXDOUBLE,
1466+ 0.0,
1467+ ST_PARAM_READWRITE |
1468+- G_PARAM_CONSTRUCT));
1469++ G_PARAM_CONSTRUCT |
1470++ G_PARAM_EXPLICIT_NOTIFY));
1471+ g_object_class_install_property (object_class,
1472+ PROP_UPPER,
1473+ g_param_spec_double ("upper",
1474+@@ -215,7 +216,8 @@ st_adjustment_class_init (StAdjustmentClass *klass)
1475+ G_MAXDOUBLE,
1476+ 0.0,
1477+ ST_PARAM_READWRITE |
1478+- G_PARAM_CONSTRUCT));
1479++ G_PARAM_CONSTRUCT |
1480++ G_PARAM_EXPLICIT_NOTIFY));
1481+ g_object_class_install_property (object_class,
1482+ PROP_VALUE,
1483+ g_param_spec_double ("value",
1484+@@ -225,7 +227,8 @@ st_adjustment_class_init (StAdjustmentClass *klass)
1485+ G_MAXDOUBLE,
1486+ 0.0,
1487+ ST_PARAM_READWRITE |
1488+- G_PARAM_CONSTRUCT));
1489++ G_PARAM_CONSTRUCT |
1490++ G_PARAM_EXPLICIT_NOTIFY));
1491+ g_object_class_install_property (object_class,
1492+ PROP_STEP_INC,
1493+ g_param_spec_double ("step-increment",
1494+@@ -235,7 +238,8 @@ st_adjustment_class_init (StAdjustmentClass *klass)
1495+ G_MAXDOUBLE,
1496+ 0.0,
1497+ ST_PARAM_READWRITE |
1498+- G_PARAM_CONSTRUCT));
1499++ G_PARAM_CONSTRUCT |
1500++ G_PARAM_EXPLICIT_NOTIFY));
1501+ g_object_class_install_property (object_class,
1502+ PROP_PAGE_INC,
1503+ g_param_spec_double ("page-increment",
1504+@@ -245,7 +249,8 @@ st_adjustment_class_init (StAdjustmentClass *klass)
1505+ G_MAXDOUBLE,
1506+ 0.0,
1507+ ST_PARAM_READWRITE |
1508+- G_PARAM_CONSTRUCT));
1509++ G_PARAM_CONSTRUCT |
1510++ G_PARAM_EXPLICIT_NOTIFY));
1511+ g_object_class_install_property (object_class,
1512+ PROP_PAGE_SIZE,
1513+ g_param_spec_double ("page-size",
1514+@@ -255,7 +260,8 @@ st_adjustment_class_init (StAdjustmentClass *klass)
1515+ G_MAXDOUBLE,
1516+ 0.0,
1517+ ST_PARAM_READWRITE |
1518+- G_PARAM_CONSTRUCT));
1519++ G_PARAM_CONSTRUCT |
1520++ G_PARAM_EXPLICIT_NOTIFY));
1521+ /**
1522+ * StAdjustment::changed:
1523+ * @self: the #StAdjustment
1524diff --git a/debian/patches/st-scroll-view-Handle-the-case-where-scrollbars-are-NULL.patch b/debian/patches/st-scroll-view-Handle-the-case-where-scrollbars-are-NULL.patch
1525new file mode 100644
1526index 0000000..0c5e93d
1527--- /dev/null
1528+++ b/debian/patches/st-scroll-view-Handle-the-case-where-scrollbars-are-NULL.patch
1529@@ -0,0 +1,38 @@
1530+From: =?utf-8?b?Ik1hcmNvIFRyZXZpc2FuIChUcmV2acOxbyki?= <mail@3v1n0.net>
1531+Date: Fri, 3 Aug 2018 18:51:24 +0200
1532+Subject: st/scroll-view: Handle the case where scrollbars are NULL
1533+
1534+The scrollbars actors in a scroll view can be NULL, in case they get removed
1535+with a call to `clutter_actor_remove_child` on a scroll-view (and this is
1536+implemented in st_scroll_view_remove).
1537+
1538+So, we should support the case where `priv->{h,v}scroll` are NULL, not to crash
1539+in `st_widget_style_changed`.
1540+
1541+Fixes #467
1542+
1543+Bug-GNOME: https://gitlab.gnome.org/GNOME/gnome-shell/issues/467
1544+BUG-Ubuntu: https://bugs.launchpad.net/ubuntu/+source/gnome-shell/+bug/1725312
1545+Forwarded: yes, https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/190
1546+---
1547+ src/st/st-scroll-view.c | 7 +++++--
1548+ 1 file changed, 5 insertions(+), 2 deletions(-)
1549+
1550+diff --git a/src/st/st-scroll-view.c b/src/st/st-scroll-view.c
1551+index fc0db1c..a8b6d2e 100644
1552+--- a/src/st/st-scroll-view.c
1553++++ b/src/st/st-scroll-view.c
1554+@@ -741,8 +741,11 @@ st_scroll_view_style_changed (StWidget *widget)
1555+ gdouble hfade_offset = st_theme_node_get_length (theme_node, "-st-hfade-offset");
1556+ st_scroll_view_update_fade_effect (self, vfade_offset, hfade_offset);
1557+
1558+- st_widget_style_changed (ST_WIDGET (priv->hscroll));
1559+- st_widget_style_changed (ST_WIDGET (priv->vscroll));
1560++ if (priv->hscroll)
1561++ st_widget_style_changed (ST_WIDGET (priv->hscroll));
1562++
1563++ if (priv->vscroll)
1564++ st_widget_style_changed (ST_WIDGET (priv->vscroll));
1565+
1566+ ST_WIDGET_CLASS (st_scroll_view_parent_class)->style_changed (widget);
1567+ }
1568diff --git a/debian/patches/st-scroll-view-Remove-scrollbars-references-on-dispose.patch b/debian/patches/st-scroll-view-Remove-scrollbars-references-on-dispose.patch
1569new file mode 100644
1570index 0000000..f5f49be
1571--- /dev/null
1572+++ b/debian/patches/st-scroll-view-Remove-scrollbars-references-on-dispose.patch
1573@@ -0,0 +1,33 @@
1574+From: =?utf-8?b?Ik1hcmNvIFRyZXZpc2FuIChUcmV2acOxbyki?= <mail@3v1n0.net>
1575+Date: Fri, 3 Aug 2018 19:06:47 +0200
1576+Subject: st/scroll-view: Remove scrollbars references on dispose
1577+
1578+As we're destroying the scrollbars on destruction, we should remove any
1579+reference of it, not to cause multiple-calls to disposal to unreference them
1580+again.
1581+
1582+Bug-GNOME: https://gitlab.gnome.org/GNOME/gnome-shell/issues/467
1583+BUG-Ubuntu: https://bugs.launchpad.net/ubuntu/+source/gnome-shell/+bug/1725312
1584+Forwarded: yes, https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/190
1585+---
1586+ src/st/st-scroll-view.c | 7 ++-----
1587+ 1 file changed, 2 insertions(+), 5 deletions(-)
1588+
1589+diff --git a/src/st/st-scroll-view.c b/src/st/st-scroll-view.c
1590+index a8b6d2e..cb38aef 100644
1591+--- a/src/st/st-scroll-view.c
1592++++ b/src/st/st-scroll-view.c
1593+@@ -244,11 +244,8 @@ st_scroll_view_dispose (GObject *object)
1594+ priv->fade_effect = NULL;
1595+ }
1596+
1597+- if (priv->vscroll)
1598+- clutter_actor_destroy (priv->vscroll);
1599+-
1600+- if (priv->hscroll)
1601+- clutter_actor_destroy (priv->hscroll);
1602++ g_clear_pointer (&priv->vscroll, clutter_actor_destroy);
1603++ g_clear_pointer (&priv->hscroll, clutter_actor_destroy);
1604+
1605+ /* For most reliable freeing of memory, an object with signals
1606+ * like StAdjustment should be explicitly disposed. Since we own
1607diff --git a/debian/patches/st-texture-cache-Cancel-sliced-image-loading-on-target-ac.patch b/debian/patches/st-texture-cache-Cancel-sliced-image-loading-on-target-ac.patch
1608index 0ff18f9..4c361e7 100644
1609--- a/debian/patches/st-texture-cache-Cancel-sliced-image-loading-on-target-ac.patch
1610+++ b/debian/patches/st-texture-cache-Cancel-sliced-image-loading-on-target-ac.patch
1611@@ -1,5 +1,9 @@
1612 From: =?utf-8?b?Ik1hcmNvIFRyZXZpc2FuIChUcmV2acOxbyki?= <mail@3v1n0.net>
1613+<<<<<<< debian/patches/st-texture-cache-Cancel-sliced-image-loading-on-target-ac.patch
1614 Date: Wed, 29 Nov 2017 19:48:02 -0600
1615+=======
1616+Date: Thu, 30 Nov 2017 02:48:02 +0100
1617+>>>>>>> debian/patches/st-texture-cache-Cancel-sliced-image-loading-on-target-ac.patch
1618 Subject: st-texture-cache: Cancel sliced image loading on target actor
1619 destroy
1620
1621@@ -19,10 +23,17 @@ Forwarded: yes, https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/5
1622 1 file changed, 26 insertions(+), 4 deletions(-)
1623
1624 diff --git a/src/st/st-texture-cache.c b/src/st/st-texture-cache.c
1625+<<<<<<< debian/patches/st-texture-cache-Cancel-sliced-image-loading-on-target-ac.patch
1626 index e8a832d..13b019e 100644
1627 --- a/src/st/st-texture-cache.c
1628 +++ b/src/st/st-texture-cache.c
1629 @@ -1019,6 +1019,7 @@ typedef struct {
1630+=======
1631+index 6219071..fc81189 100644
1632+--- a/src/st/st-texture-cache.c
1633++++ b/src/st/st-texture-cache.c
1634+@@ -1027,6 +1027,7 @@ typedef struct {
1635+>>>>>>> debian/patches/st-texture-cache-Cancel-sliced-image-loading-on-target-ac.patch
1636 gint grid_width, grid_height;
1637 gint scale_factor;
1638 ClutterActor *actor;
1639@@ -30,7 +41,11 @@ index e8a832d..13b019e 100644
1640 GFunc load_callback;
1641 gpointer load_callback_data;
1642 } AsyncImageData;
1643+<<<<<<< debian/patches/st-texture-cache-Cancel-sliced-image-loading-on-target-ac.patch
1644 @@ -1029,10 +1030,21 @@ on_data_destroy (gpointer data)
1645+=======
1646+@@ -1037,9 +1038,20 @@ on_data_destroy (gpointer data)
1647+>>>>>>> debian/patches/st-texture-cache-Cancel-sliced-image-loading-on-target-ac.patch
1648 AsyncImageData *d = (AsyncImageData *)data;
1649 g_object_unref (d->gfile);
1650 g_object_unref (d->actor);
1651@@ -38,7 +53,11 @@ index e8a832d..13b019e 100644
1652 g_free (d);
1653 }
1654
1655+<<<<<<< debian/patches/st-texture-cache-Cancel-sliced-image-loading-on-target-ac.patch
1656 static void
1657+=======
1658++static void
1659+>>>>>>> debian/patches/st-texture-cache-Cancel-sliced-image-loading-on-target-ac.patch
1660 +on_sliced_image_actor_destroyed (ClutterActor *actor,
1661 + gpointer data)
1662 +{
1663@@ -48,11 +67,18 @@ index e8a832d..13b019e 100644
1664 + g_cancellable_cancel (cancellable);
1665 +}
1666 +
1667+<<<<<<< debian/patches/st-texture-cache-Cancel-sliced-image-loading-on-target-ac.patch
1668 +static void
1669 on_sliced_image_loaded (GObject *source_object,
1670 GAsyncResult *res,
1671 gpointer user_data)
1672 @@ -1042,7 +1054,7 @@ on_sliced_image_loaded (GObject *source_object,
1673+=======
1674+ static void
1675+ on_sliced_image_loaded (GObject *source_object,
1676+ GAsyncResult *res,
1677+@@ -1050,7 +1062,7 @@ on_sliced_image_loaded (GObject *source_object,
1678+>>>>>>> debian/patches/st-texture-cache-Cancel-sliced-image-loading-on-target-ac.patch
1679 GTask *task = G_TASK (res);
1680 GList *list, *pixbufs;
1681
1682@@ -61,7 +87,11 @@ index e8a832d..13b019e 100644
1683 return;
1684
1685 pixbufs = g_task_propagate_pointer (task, NULL);
1686+<<<<<<< debian/patches/st-texture-cache-Cancel-sliced-image-loading-on-target-ac.patch
1687 @@ -1056,6 +1068,10 @@ on_sliced_image_loaded (GObject *source_object,
1688+=======
1689+@@ -1064,6 +1076,10 @@ on_sliced_image_loaded (GObject *source_object,
1690+>>>>>>> debian/patches/st-texture-cache-Cancel-sliced-image-loading-on-target-ac.patch
1691
1692 g_list_free_full (pixbufs, g_object_unref);
1693
1694@@ -72,7 +102,11 @@ index e8a832d..13b019e 100644
1695 if (data->load_callback != NULL)
1696 data->load_callback (cache, data->load_callback_data);
1697 }
1698+<<<<<<< debian/patches/st-texture-cache-Cancel-sliced-image-loading-on-target-ac.patch
1699 @@ -1093,7 +1109,7 @@ load_sliced_image (GTask *result,
1700+=======
1701+@@ -1101,7 +1117,7 @@ load_sliced_image (GTask *result,
1702+>>>>>>> debian/patches/st-texture-cache-Cancel-sliced-image-loading-on-target-ac.patch
1703 gchar *buffer = NULL;
1704 gsize length;
1705
1706@@ -81,7 +115,11 @@ index e8a832d..13b019e 100644
1707
1708 data = task_data;
1709 g_assert (data);
1710+<<<<<<< debian/patches/st-texture-cache-Cancel-sliced-image-loading-on-target-ac.patch
1711 @@ -1101,7 +1117,7 @@ load_sliced_image (GTask *result,
1712+=======
1713+@@ -1109,7 +1125,7 @@ load_sliced_image (GTask *result,
1714+>>>>>>> debian/patches/st-texture-cache-Cancel-sliced-image-loading-on-target-ac.patch
1715 loader = gdk_pixbuf_loader_new ();
1716 g_signal_connect (loader, "size-prepared", G_CALLBACK (on_loader_size_prepared), data);
1717
1718@@ -90,7 +128,11 @@ index e8a832d..13b019e 100644
1719 {
1720 g_warning ("Failed to open sliced image: %s", error->message);
1721 goto out;
1722+<<<<<<< debian/patches/st-texture-cache-Cancel-sliced-image-loading-on-target-ac.patch
1723 @@ -1169,6 +1185,7 @@ st_texture_cache_load_sliced_image (StTextureCache *cache,
1724+=======
1725+@@ -1177,6 +1193,7 @@ st_texture_cache_load_sliced_image (StTextureCache *cache,
1726+>>>>>>> debian/patches/st-texture-cache-Cancel-sliced-image-loading-on-target-ac.patch
1727 AsyncImageData *data;
1728 GTask *result;
1729 ClutterActor *actor = clutter_actor_new ();
1730@@ -98,7 +140,11 @@ index e8a832d..13b019e 100644
1731
1732 data = g_new0 (AsyncImageData, 1);
1733 data->grid_width = grid_width;
1734+<<<<<<< debian/patches/st-texture-cache-Cancel-sliced-image-loading-on-target-ac.patch
1735 @@ -1176,11 +1193,16 @@ st_texture_cache_load_sliced_image (StTextureCache *cache,
1736+=======
1737+@@ -1184,11 +1201,16 @@ st_texture_cache_load_sliced_image (StTextureCache *cache,
1738+>>>>>>> debian/patches/st-texture-cache-Cancel-sliced-image-loading-on-target-ac.patch
1739 data->scale_factor = scale;
1740 data->gfile = g_object_ref (file);
1741 data->actor = actor;
1742diff --git a/debian/patches/st-widget-Add-missing-g_return_val_if_fail.patch b/debian/patches/st-widget-Add-missing-g_return_val_if_fail.patch
1743new file mode 100644
1744index 0000000..4af9547
1745--- /dev/null
1746+++ b/debian/patches/st-widget-Add-missing-g_return_val_if_fail.patch
1747@@ -0,0 +1,32 @@
1748+From: =?utf-8?q?Florian_M=C3=BCllner?= <fmuellner@gnome.org>
1749+Date: Tue, 5 Mar 2019 19:42:01 +0100
1750+Subject: st-widget: Add missing g_return_val_if_fail()
1751+
1752+It's a public function, so it's good practice to sanity-check its
1753+input (unless disabled at compile time of course).
1754+
1755+https://gitlab.gnome.org/GNOME/gnome-shell/issues/1018
1756+
1757+Origin: https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/438
1758+Bug-Ubuntu: https://bugs.launchpad.net/ubuntu/+source/gnome-shell/+bug/1796606
1759+---
1760+ src/st/st-widget.c | 6 +++++-
1761+ 1 file changed, 5 insertions(+), 1 deletion(-)
1762+
1763+diff --git a/src/st/st-widget.c b/src/st/st-widget.c
1764+index 7c39b35..09a06e7 100644
1765+--- a/src/st/st-widget.c
1766++++ b/src/st/st-widget.c
1767+@@ -571,7 +571,11 @@ get_root_theme_node (ClutterStage *stage)
1768+ StThemeNode *
1769+ st_widget_get_theme_node (StWidget *widget)
1770+ {
1771+- StWidgetPrivate *priv = st_widget_get_instance_private (widget);
1772++ StWidgetPrivate *priv;
1773++
1774++ g_return_val_if_fail (ST_IS_WIDGET (widget), NULL);
1775++
1776++ priv = st_widget_get_instance_private (widget);
1777+
1778+ if (priv->theme_node == NULL)
1779+ {
1780diff --git a/debian/patches/switchMonitor-switch-to-next-config-upon-initial-keypress.patch b/debian/patches/switchMonitor-switch-to-next-config-upon-initial-keypress.patch
1781new file mode 100644
1782index 0000000..4f9a217
1783--- /dev/null
1784+++ b/debian/patches/switchMonitor-switch-to-next-config-upon-initial-keypress.patch
1785@@ -0,0 +1,58 @@
1786+From: Daniel Drake <drake@endlessm.com>
1787+Date: Mon, 30 Jul 2018 21:17:44 -0300
1788+Subject: switchMonitor: switch to next config upon initial keypress
1789+
1790+In GNOME-3.24, pressing Super+P or a similar function key would cause
1791+a switch to the next available monitor configuration.
1792+
1793+However, in GNOME-3.26, this was reimplemented in mutter and gnome-shell
1794+and the behaviour is now different: pressing Super+P and releasing will
1795+cause no change in montor configuration[1]. In this new design you have
1796+to press Super+P and keep holding Super in order to keep the switcher
1797+open, then press P again (or use the arrow keys or mouse) to
1798+select the next one in the list.
1799+
1800+This is incompatible with many Asus products such as Asus X530UN, where
1801+pressing the presentation mode media key (Fn+F8) actually generates
1802+the following keypress events from the keyboard controller:
1803+
1804+Fn pressed: nothing
1805+F8 pressed: nothing
1806+F8 released: Super press, p press, p release, Super release (quick burst)
1807+Fn released: nothing
1808+
1809+With this firmware behaviour it's not possible to hold the keys and have
1810+the dialog come up so that you can select another new mode.
1811+
1812+To solve this, when the switcher is opened, select the next available
1813+display config by default, which is more similar to the pre-GNOME-3.26
1814+behaviour. Now pressing Fn+F8 on this laptop will result in the display
1815+mode switch taking place.
1816+
1817+[1]: The mentioned desired behaviour will at least happen after
1818+https://gitlab.gnome.org/GNOME/mutter/issues/281 has been fixed
1819+
1820+https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/208
1821+
1822+Ubuntu-Bug: https://bugs.launchpad.net/ubuntu/+source/gnome-shell/+bug/1772811
1823+Origin: https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/208
1824+Applied-Upstream: yes, 3.30.1
1825+---
1826+ js/ui/switchMonitor.js | 4 ++--
1827+ 1 file changed, 2 insertions(+), 2 deletions(-)
1828+
1829+diff --git a/js/ui/switchMonitor.js b/js/ui/switchMonitor.js
1830+index 96fb854..31b4f33 100644
1831+--- a/js/ui/switchMonitor.js
1832++++ b/js/ui/switchMonitor.js
1833+@@ -49,8 +49,8 @@ var SwitchMonitorPopup = new Lang.Class({
1834+
1835+ _initialSelection() {
1836+ let currentConfig = Meta.MonitorManager.get().get_switch_config();
1837+- currentConfig %= Meta.MonitorSwitchConfigType.UNKNOWN;
1838+- this._select(currentConfig);
1839++ let selectConfig = (currentConfig + 1) % Meta.MonitorSwitchConfigType.UNKNOWN;
1840++ this._select(selectConfig);
1841+ },
1842+
1843+ _keyPressHandler(keysym, action) {
1844diff --git a/debian/patches/ubuntu-lightdm-user-switching.patch b/debian/patches/ubuntu-lightdm-user-switching.patch
1845index b8a7d09..9186134 100644
1846--- a/debian/patches/ubuntu-lightdm-user-switching.patch
1847+++ b/debian/patches/ubuntu-lightdm-user-switching.patch
1848@@ -1,4 +1,7 @@
1849+<<<<<<< debian/patches/ubuntu-lightdm-user-switching.patch
1850 From b043396a553e047178fd2bc5e3b69870963580fc Mon Sep 17 00:00:00 2001
1851+=======
1852+>>>>>>> debian/patches/ubuntu-lightdm-user-switching.patch
1853 From: Tim Lunn <tim@feathertop.org>
1854 Date: Tue, 9 Oct 2012 20:18:28 +1100
1855 Subject: [PATCH] userMenu: allow user switching when using lightdm
1856@@ -9,6 +12,7 @@ switch to the lightdm greeter.
1857
1858 https://bugzilla.gnome.org/show_bug.cgi?id=685794
1859 ---
1860+<<<<<<< debian/patches/ubuntu-lightdm-user-switching.patch
1861 js/misc/systemActions.js | 38 ++++++++++++++++++++++++++++++--------
1862 1 file changed, 30 insertions(+), 8 deletions(-)
1863
1864@@ -16,6 +20,15 @@ Index: gnome-shell-3.27.91/js/misc/systemActions.js
1865 ===================================================================
1866 --- gnome-shell-3.27.91.orig/js/misc/systemActions.js
1867 +++ gnome-shell-3.27.91/js/misc/systemActions.js
1868+=======
1869+ js/misc/systemActions.js | 34 +++++++++++++++++++++++++++-------
1870+ 1 file changed, 27 insertions(+), 7 deletions(-)
1871+
1872+diff --git a/js/misc/systemActions.js b/js/misc/systemActions.js
1873+index bf8b460..fffa567 100644
1874+--- a/js/misc/systemActions.js
1875++++ b/js/misc/systemActions.js
1876+>>>>>>> debian/patches/ubuntu-lightdm-user-switching.patch
1877 @@ -218,6 +218,21 @@ const SystemActions = new Lang.Class({
1878 return this._actions.get(LOCK_ORIENTATION_ACTION_ID).iconName;
1879 },
1880diff --git a/debian/patches/ubuntu_background_login.patch b/debian/patches/ubuntu_background_login.patch
1881index e35797e..285c101 100644
1882--- a/debian/patches/ubuntu_background_login.patch
1883+++ b/debian/patches/ubuntu_background_login.patch
1884@@ -1,3 +1,4 @@
1885+<<<<<<< debian/patches/ubuntu_background_login.patch
1886 Description: Change default background color based on session.
1887 We changed default GDM color for our ubuntu session. Change it as well here,
1888 still applying the background noise loading.
1889@@ -8,6 +9,25 @@ Index: gnome-shell-3.25.91/js/ui/background.js
1890 ===================================================================
1891 --- gnome-shell-3.25.91.orig/js/ui/background.js
1892 +++ gnome-shell-3.25.91/js/ui/background.js
1893+=======
1894+From: Didier Roche <didrocks@ubuntu.com>
1895+Date: Wed, 20 Jun 2018 19:22:06 +0200
1896+Subject: Change default background color based on session.
1897+
1898+We changed default GDM color for our ubuntu session. Change it as well here,
1899+still applying the background noise loading.
1900+This screen is appearing for a slip second when the Shell is loading.
1901+Forwarded: not-needed
1902+===================================================================
1903+---
1904+ js/ui/background.js | 3 ++-
1905+ 1 file changed, 2 insertions(+), 1 deletion(-)
1906+
1907+diff --git a/js/ui/background.js b/js/ui/background.js
1908+index b24f825..9b0a4c1 100644
1909+--- a/js/ui/background.js
1910++++ b/js/ui/background.js
1911+>>>>>>> debian/patches/ubuntu_background_login.patch
1912 @@ -102,12 +102,13 @@ const Lang = imports.lang;
1913 const Meta = imports.gi.Meta;
1914 const Signals = imports.signals;
1915diff --git a/debian/patches/ubuntu_block_mode_extension_update.patch b/debian/patches/ubuntu_block_mode_extension_update.patch
1916index e42705c..3abc62a 100644
1917--- a/debian/patches/ubuntu_block_mode_extension_update.patch
1918+++ b/debian/patches/ubuntu_block_mode_extension_update.patch
1919@@ -1,4 +1,11 @@
1920+<<<<<<< debian/patches/ubuntu_block_mode_extension_update.patch
1921 Description: Don't allow ubuntu mode extension to update
1922+=======
1923+From: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
1924+Date: Wed, 20 Jun 2018 19:22:06 +0200
1925+Subject: Don't allow ubuntu mode extension to update
1926+
1927+>>>>>>> debian/patches/ubuntu_block_mode_extension_update.patch
1928 Ensure that no update is proposed or loaded if sideloaded (always
1929 prefer system version) on the ubuntu session.
1930 We want to ensure that the default code running is going through
1931@@ -13,11 +20,24 @@ The patch set is too large otherwise to keep it maintainable as a distro
1932 patch.
1933 Origin: ubuntu
1934 Forwarded: https://bugzilla.gnome.org/show_bug.cgi?id=789852
1935+<<<<<<< debian/patches/ubuntu_block_mode_extension_update.patch
1936
1937 Index: gnome-shell-3.27.91/js/misc/desktop.js
1938 ===================================================================
1939 --- gnome-shell-3.27.91.orig/js/misc/desktop.js
1940 +++ gnome-shell-3.27.91/js/misc/desktop.js
1941+=======
1942+---
1943+ js/misc/desktop.js | 13 +++++++++++++
1944+ js/misc/extensionUtils.js | 7 +++++++
1945+ js/ui/extensionDownloader.js | 13 +++++++++++++
1946+ 3 files changed, 33 insertions(+)
1947+
1948+diff --git a/js/misc/desktop.js b/js/misc/desktop.js
1949+index 3b0d128..82da582 100644
1950+--- a/js/misc/desktop.js
1951++++ b/js/misc/desktop.js
1952+>>>>>>> debian/patches/ubuntu_block_mode_extension_update.patch
1953 @@ -6,6 +6,8 @@ const GLib = imports.gi.GLib;
1954 // the env variable. It's safe to cache matching result
1955 let _currentDesktopsMatches = {};
1956@@ -42,10 +62,17 @@ Index: gnome-shell-3.27.91/js/misc/desktop.js
1957 +
1958 + return ubuntuModeExtensions.indexOf(uuid) !== -1;
1959 +}
1960+<<<<<<< debian/patches/ubuntu_block_mode_extension_update.patch
1961 Index: gnome-shell-3.27.91/js/misc/extensionUtils.js
1962 ===================================================================
1963 --- gnome-shell-3.27.91.orig/js/misc/extensionUtils.js
1964 +++ gnome-shell-3.27.91/js/misc/extensionUtils.js
1965+=======
1966+diff --git a/js/misc/extensionUtils.js b/js/misc/extensionUtils.js
1967+index 9f77b4c..685b98b 100644
1968+--- a/js/misc/extensionUtils.js
1969++++ b/js/misc/extensionUtils.js
1970+>>>>>>> debian/patches/ubuntu_block_mode_extension_update.patch
1971 @@ -9,6 +9,7 @@ const Signals = imports.signals;
1972 const Gio = imports.gi.Gio;
1973
1974@@ -67,10 +94,17 @@ Index: gnome-shell-3.27.91/js/misc/extensionUtils.js
1975 try {
1976 extension = createExtensionObject(uuid, extensionDir, type);
1977 } catch(e) {
1978+<<<<<<< debian/patches/ubuntu_block_mode_extension_update.patch
1979 Index: gnome-shell-3.27.91/js/ui/extensionDownloader.js
1980 ===================================================================
1981 --- gnome-shell-3.27.91.orig/js/ui/extensionDownloader.js
1982 +++ gnome-shell-3.27.91/js/ui/extensionDownloader.js
1983+=======
1984+diff --git a/js/ui/extensionDownloader.js b/js/ui/extensionDownloader.js
1985+index 9b6f7a3..034f964 100644
1986+--- a/js/ui/extensionDownloader.js
1987++++ b/js/ui/extensionDownloader.js
1988+>>>>>>> debian/patches/ubuntu_block_mode_extension_update.patch
1989 @@ -10,9 +10,11 @@ const St = imports.gi.St;
1990 const Shell = imports.gi.Shell;
1991
1992@@ -83,7 +117,11 @@ Index: gnome-shell-3.27.91/js/ui/extensionDownloader.js
1993 const ModalDialog = imports.ui.modalDialog;
1994
1995 const _signals = ExtensionSystem._signals;
1996+<<<<<<< debian/patches/ubuntu_block_mode_extension_update.patch
1997 @@ -28,6 +30,14 @@ function installExtension(uuid, invocati
1998+=======
1999+@@ -28,6 +30,14 @@ function installExtension(uuid, invocation) {
2000+>>>>>>> debian/patches/ubuntu_block_mode_extension_update.patch
2001 let params = { uuid: uuid,
2002 shell_version: Config.PACKAGE_VERSION };
2003
2004diff --git a/debian/patches/ubuntu_gdm.patch b/debian/patches/ubuntu_gdm.patch
2005index 77af4a4..22d85a9 100644
2006--- a/debian/patches/ubuntu_gdm.patch
2007+++ b/debian/patches/ubuntu_gdm.patch
2008@@ -1,3 +1,4 @@
2009+<<<<<<< debian/patches/ubuntu_gdm.patch
2010 Description: Ensure gdm has an ubuntu styling by default.
2011 As it's system-wide and not user-wide, use the ubuntu.css stylesheet
2012 for the gdm mode of GNOME Shell. This doesn't impact the aNOME
2013@@ -8,6 +9,25 @@ Index: gnome-shell-3.27.91/js/ui/sessionMode.js
2014 ===================================================================
2015 --- gnome-shell-3.27.91.orig/js/ui/sessionMode.js
2016 +++ gnome-shell-3.27.91/js/ui/sessionMode.js
2017+=======
2018+From: Didier Roche <didrocks@ubuntu.com>
2019+Date: Wed, 20 Jun 2018 19:22:06 +0200
2020+Subject: Ensure gdm has an ubuntu styling by default.
2021+
2022+As it's system-wide and not user-wide, use the ubuntu.css stylesheet
2023+for the gdm mode of GNOME Shell. This doesn't impact the aNOME
2024+user session though.
2025+Forwarded: not-needed
2026+===================================================================
2027+---
2028+ js/ui/sessionMode.js | 1 +
2029+ 1 file changed, 1 insertion(+)
2030+
2031+diff --git a/js/ui/sessionMode.js b/js/ui/sessionMode.js
2032+index aac29ae..97118dc 100644
2033+--- a/js/ui/sessionMode.js
2034++++ b/js/ui/sessionMode.js
2035+>>>>>>> debian/patches/ubuntu_gdm.patch
2036 @@ -42,6 +42,7 @@ const _modes = {
2037
2038 'gdm': {
2039diff --git a/debian/patches/ubuntu_gdm_alternatives.patch b/debian/patches/ubuntu_gdm_alternatives.patch
2040index 4a6026f..b7052ca 100644
2041--- a/debian/patches/ubuntu_gdm_alternatives.patch
2042+++ b/debian/patches/ubuntu_gdm_alternatives.patch
2043@@ -1,15 +1,33 @@
2044+<<<<<<< debian/patches/ubuntu_gdm_alternatives.patch
2045 Description: Add support for GDM3 theme alternatives
2046 GNOME vanilla and systemd76 derivative ships their own GDM theme.
2047 Author: Jeremy Soller <jeremy@system76.com>
2048+=======
2049+From: Jeremy Soller <jeremy@system76.com>
2050+Date: Wed, 20 Jun 2018 19:22:06 +0200
2051+Subject: Add support for GDM3 theme alternatives
2052+
2053+ GNOME vanilla and systemd76 derivative ships their own GDM theme.
2054+>>>>>>> debian/patches/ubuntu_gdm_alternatives.patch
2055 Bug: https://bugzilla.gnome.org/show_bug.cgi?id=787454
2056 Bug-Ubuntu: https://bugs.launchpad.net/ubuntu/+source/gnome-shell/+bug/1715722
2057 Last-Update: 2017-09-08
2058 ---
2059+<<<<<<< debian/patches/ubuntu_gdm_alternatives.patch
2060 This patch header follows DEP-3: http://dep.debian.net/deps/dep3/
2061 Index: gnome-shell-3.25.91/js/ui/sessionMode.js
2062 ===================================================================
2063 --- gnome-shell-3.25.91.orig/js/ui/sessionMode.js
2064 +++ gnome-shell-3.25.91/js/ui/sessionMode.js
2065+=======
2066+ js/ui/sessionMode.js | 2 +-
2067+ 1 file changed, 1 insertion(+), 1 deletion(-)
2068+
2069+diff --git a/js/ui/sessionMode.js b/js/ui/sessionMode.js
2070+index 97118dc..9ac12d6 100644
2071+--- a/js/ui/sessionMode.js
2072++++ b/js/ui/sessionMode.js
2073+>>>>>>> debian/patches/ubuntu_gdm_alternatives.patch
2074 @@ -42,7 +42,7 @@ const _modes = {
2075
2076 'gdm': {
2077diff --git a/debian/patches/ubuntu_lock_on_suspend.patch b/debian/patches/ubuntu_lock_on_suspend.patch
2078index 1ce5584..6d51766 100644
2079--- a/debian/patches/ubuntu_lock_on_suspend.patch
2080+++ b/debian/patches/ubuntu_lock_on_suspend.patch
2081@@ -1,3 +1,4 @@
2082+<<<<<<< debian/patches/ubuntu_lock_on_suspend.patch
2083 Description: add support for the ubuntu lock on suspend option
2084 Author: Tim Lunn <tim@feathertop.org>
2085 Bug-Ubuntu: https://bugs.launchpad.net/bugs/1063110
2086@@ -11,6 +12,21 @@ Index: gnome-shell-3.27.91/js/ui/screenShield.js
2087 ===================================================================
2088 --- gnome-shell-3.27.91.orig/js/ui/screenShield.js
2089 +++ gnome-shell-3.27.91/js/ui/screenShield.js
2090+=======
2091+From: Tim Lunn <tim@feathertop.org>
2092+Date: Wed, 20 Jun 2018 19:22:06 +0200
2093+Subject: add support for the ubuntu lock on suspend option
2094+
2095+Bug-Ubuntu: https://bugs.launchpad.net/bugs/1063110
2096+---
2097+ js/ui/screenShield.js | 7 +++++--
2098+ 1 file changed, 5 insertions(+), 2 deletions(-)
2099+
2100+diff --git a/js/ui/screenShield.js b/js/ui/screenShield.js
2101+index 2d8d9b3..5ceb993 100644
2102+--- a/js/ui/screenShield.js
2103++++ b/js/ui/screenShield.js
2104+>>>>>>> debian/patches/ubuntu_lock_on_suspend.patch
2105 @@ -32,6 +32,7 @@ const Util = imports.misc.util;
2106 const SCREENSAVER_SCHEMA = 'org.gnome.desktop.screensaver';
2107 const LOCK_ENABLED_KEY = 'lock-enabled';
2108@@ -19,7 +35,29 @@ Index: gnome-shell-3.27.91/js/ui/screenShield.js
2109
2110 const LOCKDOWN_SCHEMA = 'org.gnome.desktop.lockdown';
2111 const DISABLE_LOCK_KEY = 'disable-lock-screen';
2112+<<<<<<< debian/patches/ubuntu_lock_on_suspend.patch
2113 @@ -727,7 +728,7 @@ var ScreenShield = new Lang.Class({
2114+=======
2115+@@ -543,6 +544,7 @@ var ScreenShield = new Lang.Class({
2116+
2117+ this._settings = new Gio.Settings({ schema_id: SCREENSAVER_SCHEMA });
2118+ this._settings.connect('changed::' + LOCK_ENABLED_KEY, this._syncInhibitor.bind(this));
2119++ this._settings.connect('changed::' + SUSPEND_LOCK_ENABLED_KEY, this._syncInhibitor.bind(this));
2120+
2121+ this._lockSettings = new Gio.Settings({ schema_id: LOCKDOWN_SCHEMA });
2122+ this._lockSettings.connect('changed::' + DISABLE_LOCK_KEY, this._syncInhibitor.bind(this));
2123+@@ -707,7 +709,8 @@ var ScreenShield = new Lang.Class({
2124+ },
2125+
2126+ _syncInhibitor() {
2127+- let lockEnabled = this._settings.get_boolean(LOCK_ENABLED_KEY);
2128++ let lockEnabled = this._settings.get_boolean(LOCK_ENABLED_KEY) ||
2129++ this._settings.get_boolean(SUSPEND_LOCK_ENABLED_KEY);
2130+ let lockLocked = this._lockSettings.get_boolean(DISABLE_LOCK_KEY);
2131+ let inhibit = (this._loginSession && this._loginSession.Active &&
2132+ !this._isActive && lockEnabled && !lockLocked);
2133+@@ -727,7 +730,7 @@ var ScreenShield = new Lang.Class({
2134+>>>>>>> debian/patches/ubuntu_lock_on_suspend.patch
2135
2136 _prepareForSleep(loginManager, aboutToSuspend) {
2137 if (aboutToSuspend) {
2138diff --git a/debian/patches/volume-Add-back-sound-feedback-on-scroll.patch b/debian/patches/volume-Add-back-sound-feedback-on-scroll.patch
2139index f6ea268..633e9f1 100644
2140--- a/debian/patches/volume-Add-back-sound-feedback-on-scroll.patch
2141+++ b/debian/patches/volume-Add-back-sound-feedback-on-scroll.patch
2142@@ -1,5 +1,9 @@
2143 From: =?utf-8?q?Florian_M=C3=BCllner?= <fmuellner@gnome.org>
2144+<<<<<<< debian/patches/volume-Add-back-sound-feedback-on-scroll.patch
2145 Date: Fri, 23 Feb 2018 16:58:22 -0600
2146+=======
2147+Date: Fri, 23 Feb 2018 23:58:22 +0100
2148+>>>>>>> debian/patches/volume-Add-back-sound-feedback-on-scroll.patch
2149 Subject: volume: Add back sound feedback on scroll
2150
2151 Commit 8d4855f1008 accidentally removed the volume change feedback
2152@@ -34,8 +38,13 @@ Bug-GNOME: https://gitlab.gnome.org/GNOME/gnome-shell/issues/53
2153 Forwarded: yes, https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/51
2154 ---
2155 js/ui/slider.js | 2 --
2156+<<<<<<< debian/patches/volume-Add-back-sound-feedback-on-scroll.patch
2157 js/ui/status/volume.js | 19 ++++++++++++++++++-
2158 2 files changed, 18 insertions(+), 3 deletions(-)
2159+=======
2160+ js/ui/status/volume.js | 20 +++++++++++++++++++-
2161+ 2 files changed, 19 insertions(+), 3 deletions(-)
2162+>>>>>>> debian/patches/volume-Add-back-sound-feedback-on-scroll.patch
2163
2164 diff --git a/js/ui/slider.js b/js/ui/slider.js
2165 index 9853929..30295b4 100644
2166@@ -52,18 +61,33 @@ index 9853929..30295b4 100644
2167 }
2168 return Clutter.EVENT_PROPAGATE;
2169 diff --git a/js/ui/status/volume.js b/js/ui/status/volume.js
2170+<<<<<<< debian/patches/volume-Add-back-sound-feedback-on-scroll.patch
2171 index 65c4c42..c0f9cf3 100644
2172 --- a/js/ui/status/volume.js
2173 +++ b/js/ui/status/volume.js
2174 @@ -4,6 +4,7 @@ const Clutter = imports.gi.Clutter;
2175 const Lang = imports.lang;
2176 const Gio = imports.gi.Gio;
2177+=======
2178+index 65c4c42..de5f188 100644
2179+--- a/js/ui/status/volume.js
2180++++ b/js/ui/status/volume.js
2181+@@ -3,7 +3,9 @@
2182+ const Clutter = imports.gi.Clutter;
2183+ const Lang = imports.lang;
2184+ const Gio = imports.gi.Gio;
2185++const GLib = imports.gi.GLib;
2186+>>>>>>> debian/patches/volume-Add-back-sound-feedback-on-scroll.patch
2187 const Gvc = imports.gi.Gvc;
2188 +const Mainloop = imports.mainloop;
2189 const St = imports.gi.St;
2190 const Signals = imports.signals;
2191
2192+<<<<<<< debian/patches/volume-Add-back-sound-feedback-on-scroll.patch
2193 @@ -36,9 +37,16 @@ var StreamSlider = new Lang.Class({
2194+=======
2195+@@ -36,9 +38,16 @@ var StreamSlider = new Lang.Class({
2196+>>>>>>> debian/patches/volume-Add-back-sound-feedback-on-scroll.patch
2197
2198 this.item = new PopupMenu.PopupBaseMenuItem({ activate: false });
2199
2200@@ -81,7 +105,11 @@ index 65c4c42..c0f9cf3 100644
2201
2202 this._icon = new St.Icon({ style_class: 'popup-menu-icon' });
2203 this.item.actor.add(this._icon);
2204+<<<<<<< debian/patches/volume-Add-back-sound-feedback-on-scroll.patch
2205 @@ -135,6 +143,7 @@ var StreamSlider = new Lang.Class({
2206+=======
2207+@@ -135,6 +144,7 @@ var StreamSlider = new Lang.Class({
2208+>>>>>>> debian/patches/volume-Add-back-sound-feedback-on-scroll.patch
2209
2210 let volume = value * this._get_control_max_volume();
2211 let prevMuted = this._stream.is_muted;
2212@@ -89,7 +117,11 @@ index 65c4c42..c0f9cf3 100644
2213 if (volume < 1) {
2214 this._stream.volume = 0;
2215 if (!prevMuted)
2216+<<<<<<< debian/patches/volume-Add-back-sound-feedback-on-scroll.patch
2217 @@ -145,6 +154,14 @@ var StreamSlider = new Lang.Class({
2218+=======
2219+@@ -145,6 +155,14 @@ var StreamSlider = new Lang.Class({
2220+>>>>>>> debian/patches/volume-Add-back-sound-feedback-on-scroll.patch
2221 this._stream.change_is_muted(false);
2222 }
2223 this._stream.push_volume();
2224diff --git a/debian/patches/windowManager-listen-actively-to-windows-being-destroyed-.patch b/debian/patches/windowManager-listen-actively-to-windows-being-destroyed-.patch
2225new file mode 100644
2226index 0000000..76cbcf0
2227--- /dev/null
2228+++ b/debian/patches/windowManager-listen-actively-to-windows-being-destroyed-.patch
2229@@ -0,0 +1,47 @@
2230+From: Carlos Garnacho <carlosg@gnome.org>
2231+Date: Thu, 6 Sep 2018 21:50:21 +0200
2232+Subject: windowManager: listen actively to windows being destroyed during WS
2233+ switch
2234+
2235+Prevents gjs from dealing with already dispose()d objects.
2236+
2237+Closes: https://gitlab.gnome.org/GNOME/gnome-shell/issues/539
2238+
2239+(cherry-picked from b087752b5539a8cbb1d61979cb069aef8a3475be)
2240+
2241+Origin: https://gitlab.gnome.org/GNOME/gnome-shell/commit/b087752b
2242+Bug-Ubuntu: https://bugs.launchpad.net/ubuntu/+source/gnome-shell/+bug/1812527
2243+---
2244+ js/ui/windowManager.js | 12 ++++++++++--
2245+ 1 file changed, 10 insertions(+), 2 deletions(-)
2246+
2247+diff --git a/js/ui/windowManager.js b/js/ui/windowManager.js
2248+index 8e7e7a6..49d7035 100644
2249+--- a/js/ui/windowManager.js
2250++++ b/js/ui/windowManager.js
2251+@@ -1763,6 +1763,14 @@ var WindowManager = new Lang.Class({
2252+ }
2253+ }
2254+
2255++ for (let i = 0; i < switchData.windows.length; i++) {
2256++ let w = switchData.windows[i];
2257++
2258++ w.windowDestroyId = w.window.connect('destroy', () => {
2259++ switchData.windows.splice(switchData.windows.indexOf(w), 1);
2260++ });
2261++ }
2262++
2263+ switchData.inGroup.set_position(-xDest, -yDest);
2264+ switchData.inGroup.raise_top();
2265+
2266+@@ -1793,8 +1801,8 @@ var WindowManager = new Lang.Class({
2267+
2268+ for (let i = 0; i < switchData.windows.length; i++) {
2269+ let w = switchData.windows[i];
2270+- if (w.window.is_destroyed()) // Window gone
2271+- continue;
2272++ w.window.disconnect(w.windowDestroyId);
2273++
2274+ if (w.window.get_parent() == switchData.outGroup) {
2275+ w.window.reparent(w.parent);
2276+ w.window.hide();
2277diff --git a/debian/patches/workaround_crasher_fractional_scaling.patch b/debian/patches/workaround_crasher_fractional_scaling.patch
2278index 1421031..68cc306 100644
2279--- a/debian/patches/workaround_crasher_fractional_scaling.patch
2280+++ b/debian/patches/workaround_crasher_fractional_scaling.patch
2281@@ -1,3 +1,4 @@
2282+<<<<<<< debian/patches/workaround_crasher_fractional_scaling.patch
2283 Description: Avoid crashing if width or height are NaNs.
2284 This is a temporary workaround that avoid a crash if width or height are NaNs.
2285 The true fix would be to avoid width and height to get NaN values.
2286@@ -8,6 +9,26 @@ Bug: https://bugzilla.gnome.org/show_bug.cgi?id=788316
2287 --- a/src/st/st-theme-node-drawing.c
2288 +++ b/src/st/st-theme-node-drawing.c
2289 @@ -2505,7 +2505,7 @@
2290+=======
2291+From: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
2292+Date: Wed, 20 Jun 2018 19:22:06 +0200
2293+Subject: Avoid crashing if width or height are NaNs.
2294+
2295+This is a temporary workaround that avoid a crash if width or height are NaNs.
2296+The true fix would be to avoid width and height to get NaN values.
2297+Origin: ubuntu
2298+Bug-Ubuntu: https://launchpad.net/bugs/1714542
2299+Bug: https://bugzilla.gnome.org/show_bug.cgi?id=788316
2300+---
2301+ src/st/st-theme-node-drawing.c | 2 +-
2302+ 1 file changed, 1 insertion(+), 1 deletion(-)
2303+
2304+diff --git a/src/st/st-theme-node-drawing.c b/src/st/st-theme-node-drawing.c
2305+index 0637d97..7342c6c 100644
2306+--- a/src/st/st-theme-node-drawing.c
2307++++ b/src/st/st-theme-node-drawing.c
2308+@@ -2531,7 +2531,7 @@ st_theme_node_paint (StThemeNode *node,
2309+>>>>>>> debian/patches/workaround_crasher_fractional_scaling.patch
2310 allocation.x2 = width;
2311 allocation.y2 = height;
2312
2313@@ -16,4 +37,7 @@ Bug: https://bugzilla.gnome.org/show_bug.cgi?id=788316
2314 return;
2315
2316 /* Check whether we need to recreate the textures of the paint
2317+<<<<<<< debian/patches/workaround_crasher_fractional_scaling.patch
2318
2319+=======
2320+>>>>>>> debian/patches/workaround_crasher_fractional_scaling.patch
2321diff --git a/debian/ubuntu-session-mods/ubuntu.css b/debian/ubuntu-session-mods/ubuntu.css
2322index da34f04..1a17b4f 100644
2323--- a/debian/ubuntu-session-mods/ubuntu.css
2324+++ b/debian/ubuntu-session-mods/ubuntu.css
2325@@ -519,7 +519,11 @@ StScrollBar {
2326 height: 1px;
2327 margin: 6px 64px;
2328 background-color: transparent;
2329+<<<<<<< debian/ubuntu-session-mods/ubuntu.css
2330 border-color: #3a3a34;
2331+=======
2332+ border-color: #2c2c28;
2333+>>>>>>> debian/ubuntu-session-mods/ubuntu.css
2334 border-bottom-width: 1px;
2335 border-bottom-style: solid; }
2336
2337@@ -1911,6 +1915,14 @@ stage {
2338 font-family: Ubuntu, Cantarell, Sans-Serif;
2339 }
2340
2341+<<<<<<< debian/ubuntu-session-mods/ubuntu.css
2342+=======
2343+/* Set minimum height as per Ubuntu font usage, fixes password entries (LP: #1743058) */
2344+StEntry {
2345+ min-height: 19px;
2346+}
2347+
2348+>>>>>>> debian/ubuntu-session-mods/ubuntu.css
2349 /* switch colors */
2350 .toggle-switch-us:checked {
2351 background-image: url("ubuntu-toggle-on-us.svg");
2352diff --git a/js/gdm/authPrompt.js b/js/gdm/authPrompt.js
2353index 481cd3a..1bd9b02 100644
2354--- a/js/gdm/authPrompt.js
2355+++ b/js/gdm/authPrompt.js
2356@@ -242,11 +242,19 @@ var AuthPrompt = new Lang.Class({
2357 this.emit('prompted');
2358 },
2359
2360+<<<<<<< js/gdm/authPrompt.js
2361 _onVerificationFailed() {
2362 this._queryingService = null;
2363 this.clear();
2364
2365 this.updateSensitivity(true);
2366+=======
2367+ _onVerificationFailed(userVerifier, canRetry) {
2368+ this._queryingService = null;
2369+ this.clear();
2370+
2371+ this.updateSensitivity(canRetry);
2372+>>>>>>> js/gdm/authPrompt.js
2373 this.setActorInDefaultButtonWell(null);
2374 this.verificationStatus = AuthPromptStatus.VERIFICATION_FAILED;
2375 },
2376@@ -439,6 +447,10 @@ var AuthPrompt = new Lang.Class({
2377 this.verificationStatus = AuthPromptStatus.NOT_VERIFYING;
2378 this.cancelButton.reactive = true;
2379 this.nextButton.label = _("Next");
2380+<<<<<<< js/gdm/authPrompt.js
2381+=======
2382+ this._preemptiveAnswer = null;
2383+>>>>>>> js/gdm/authPrompt.js
2384
2385 if (this._userVerifier)
2386 this._userVerifier.cancel();
2387diff --git a/js/gdm/util.js b/js/gdm/util.js
2388index 261e1e4..082b680 100644
2389--- a/js/gdm/util.js
2390+++ b/js/gdm/util.js
2391@@ -534,12 +534,22 @@ var ShellUserVerifier = new Lang.Class({
2392 _verificationFailed(retry) {
2393 // For Not Listed / enterprise logins, immediately reset
2394 // the dialog
2395+<<<<<<< js/gdm/util.js
2396 // Otherwise, we allow ALLOWED_FAILURES attempts. After that, we
2397 // go back to the welcome screen.
2398
2399 this._failCounter++;
2400 let canRetry = retry && this._userName &&
2401 this._failCounter < this._settings.get_int(ALLOWED_FAILURES_KEY);
2402+=======
2403+ // Otherwise, when in login mode we allow ALLOWED_FAILURES attempts.
2404+ // After that, we go back to the welcome screen.
2405+
2406+ this._failCounter++;
2407+ let canRetry = retry && this._userName &&
2408+ (this._reauthOnly ||
2409+ this._failCounter < this._settings.get_int(ALLOWED_FAILURES_KEY));
2410+>>>>>>> js/gdm/util.js
2411
2412 if (canRetry) {
2413 if (!this.hasPendingMessages) {
2414@@ -562,7 +572,11 @@ var ShellUserVerifier = new Lang.Class({
2415 }
2416 }
2417
2418+<<<<<<< js/gdm/util.js
2419 this.emit('verification-failed');
2420+=======
2421+ this.emit('verification-failed', canRetry);
2422+>>>>>>> js/gdm/util.js
2423 },
2424
2425 _onConversationStopped(client, serviceName) {
2426diff --git a/js/misc/ibusManager.js b/js/misc/ibusManager.js
2427index 782b9ad..f943db2 100644
2428--- a/js/misc/ibusManager.js
2429+++ b/js/misc/ibusManager.js
2430@@ -115,6 +115,14 @@ var IBusManager = new Lang.Class({
2431 object_path: IBus.PATH_PANEL });
2432 this._candidatePopup.setPanelService(this._panelService);
2433 this._panelService.connect('update-property', this._updateProperty.bind(this));
2434+<<<<<<< js/misc/ibusManager.js
2435+=======
2436+ this._panelService.connect('set-cursor-location', (ps, x, y, w, h) => {
2437+ let cursorLocation = { x, y, width: w, height: h };
2438+ this.emit('set-cursor-location', cursorLocation);
2439+ });
2440+
2441+>>>>>>> js/misc/ibusManager.js
2442 try {
2443 // IBus versions older than 1.5.10 have a bug which
2444 // causes spurious set-content-type emissions when
2445@@ -200,7 +208,11 @@ var IBusManager = new Lang.Class({
2446 }
2447
2448 this._ibus.set_global_engine_async(id, this._MAX_INPUT_SOURCE_ACTIVATION_TIME,
2449+<<<<<<< js/misc/ibusManager.js
2450 null, callback);
2451+=======
2452+ null, callback || null);
2453+>>>>>>> js/misc/ibusManager.js
2454 },
2455
2456 preloadEngines(ids) {
2457diff --git a/js/misc/keyboardManager.js b/js/misc/keyboardManager.js
2458index b8984fe..c0c6560 100644
2459--- a/js/misc/keyboardManager.js
2460+++ b/js/misc/keyboardManager.js
2461@@ -89,6 +89,11 @@ var KeyboardManager = new Lang.Class({
2462 },
2463
2464 setUserLayouts(ids) {
2465+<<<<<<< js/misc/keyboardManager.js
2466+=======
2467+ let currentId = this._current ? this._current.id : null;
2468+ let currentGroupIndex = this._current ? this._current.groupIndex : null;
2469+>>>>>>> js/misc/keyboardManager.js
2470 this._current = null;
2471 this._layoutInfos = {};
2472
2473@@ -115,6 +120,12 @@ var KeyboardManager = new Lang.Class({
2474 info.group = group;
2475 info.groupIndex = groupIndex;
2476
2477+<<<<<<< js/misc/keyboardManager.js
2478+=======
2479+ if (currentId == id && currentGroupIndex == groupIndex)
2480+ this._current = info;
2481+
2482+>>>>>>> js/misc/keyboardManager.js
2483 i += 1;
2484 }
2485 },
2486diff --git a/js/misc/objectManager.js b/js/misc/objectManager.js
2487index 1ce4f83..7bffc23 100644
2488--- a/js/misc/objectManager.js
2489+++ b/js/misc/objectManager.js
2490@@ -236,11 +236,20 @@ var ObjectManager = new Lang.Class({
2491 _onNameVanished() {
2492 let objectPaths = Object.keys(this._objects);
2493 for (let i = 0; i < objectPaths.length; i++) {
2494+<<<<<<< js/misc/objectManager.js
2495 let object = this._objects[objectPaths];
2496
2497 let interfaceNames = Object.keys(object);
2498 for (let j = 0; i < interfaceNames.length; i++) {
2499 let interfaceName = interfaceNames[i];
2500+=======
2501+ let objectPath = objectPaths[i];
2502+ let object = this._objects[objectPath];
2503+
2504+ let interfaceNames = Object.keys(object);
2505+ for (let j = 0; j < interfaceNames.length; j++) {
2506+ let interfaceName = interfaceNames[j];
2507+>>>>>>> js/misc/objectManager.js
2508
2509 if (object[interfaceName])
2510 this._removeInterface(objectPath, interfaceName);
2511diff --git a/js/ui/calendar.js b/js/ui/calendar.js
2512index a46017a..486f5f8 100644
2513--- a/js/ui/calendar.js
2514+++ b/js/ui/calendar.js
2515@@ -802,6 +802,11 @@ var NotificationMessage = new Lang.Class({
2516 },
2517
2518 _onDestroy() {
2519+<<<<<<< js/ui/calendar.js
2520+=======
2521+ this.parent();
2522+
2523+>>>>>>> js/ui/calendar.js
2524 if (this._updatedId)
2525 this.notification.disconnect(this._updatedId);
2526 this._updatedId = 0;
2527@@ -821,6 +826,11 @@ var EventsSection = new Lang.Class({
2528 this._desktopSettings.connect('changed', this._reloadEvents.bind(this));
2529 this._eventSource = new EmptyEventSource();
2530
2531+<<<<<<< js/ui/calendar.js
2532+=======
2533+ this._messageById = new Map();
2534+
2535+>>>>>>> js/ui/calendar.js
2536 this.parent();
2537
2538 this._title = new St.Button({ style_class: 'events-section-title',
2539@@ -875,12 +885,16 @@ var EventsSection = new Lang.Class({
2540
2541 this._reloading = true;
2542
2543+<<<<<<< js/ui/calendar.js
2544 this._list.destroy_all_children();
2545
2546+=======
2547+>>>>>>> js/ui/calendar.js
2548 let periodBegin = _getBeginningOfDay(this._date);
2549 let periodEnd = _getEndOfDay(this._date);
2550 let events = this._eventSource.getEvents(periodBegin, periodEnd);
2551
2552+<<<<<<< js/ui/calendar.js
2553 for (let i = 0; i < events.length; i++) {
2554 let event = events[i];
2555
2556@@ -889,6 +903,30 @@ var EventsSection = new Lang.Class({
2557 this._ignoreEvent(event);
2558 });
2559 this.addMessage(message, false);
2560+=======
2561+ let ids = events.map(e => e.id);
2562+ this._messageById.forEach((message, id) => {
2563+ if (ids.includes(id))
2564+ return;
2565+ this._messageById.delete(id);
2566+ this.removeMessage(message);
2567+ });
2568+
2569+ for (let i = 0; i < events.length; i++) {
2570+ let event = events[i];
2571+
2572+ let message = this._messageById.get(event.id);
2573+ if (!message) {
2574+ message = new EventMessage(event, this._date);
2575+ message.connect('close', () => {
2576+ this._ignoreEvent(event);
2577+ });
2578+ this._messageById.set(event.id, message);
2579+ this.addMessage(message, false);
2580+ } else {
2581+ this.moveMessage(message, i, false);
2582+ }
2583+>>>>>>> js/ui/calendar.js
2584 }
2585
2586 this._reloading = false;
2587diff --git a/js/ui/components/automountManager.js b/js/ui/components/automountManager.js
2588index 2d8f3f8..cfd19db 100644
2589--- a/js/ui/components/automountManager.js
2590+++ b/js/ui/components/automountManager.js
2591@@ -210,6 +210,13 @@ var AutomountManager = new Lang.Class({
2592 },
2593
2594 _onVolumeRemoved(monitor, volume) {
2595+<<<<<<< js/ui/components/automountManager.js
2596+=======
2597+ if (volume._allowAutorunExpireId && volume._allowAutorunExpireId > 0) {
2598+ Mainloop.source_remove(volume._allowAutorunExpireId);
2599+ delete volume._allowAutorunExpireId;
2600+ }
2601+>>>>>>> js/ui/components/automountManager.js
2602 this._volumeQueue =
2603 this._volumeQueue.filter(element => (element != volume));
2604 },
2605@@ -234,8 +241,15 @@ var AutomountManager = new Lang.Class({
2606 _allowAutorunExpire(volume) {
2607 let id = Mainloop.timeout_add_seconds(AUTORUN_EXPIRE_TIMEOUT_SECS, () => {
2608 volume.allowAutorun = false;
2609+<<<<<<< js/ui/components/automountManager.js
2610+ return GLib.SOURCE_REMOVE;
2611+ });
2612+=======
2613+ delete volume._allowAutorunExpireId;
2614 return GLib.SOURCE_REMOVE;
2615 });
2616+ volume._allowAutorunExpireId = id;
2617+>>>>>>> js/ui/components/automountManager.js
2618 GLib.Source.set_name_by_id(id, '[gnome-shell] volume.allowAutorun');
2619 }
2620 });
2621diff --git a/js/ui/components/networkAgent.js b/js/ui/components/networkAgent.js
2622index 75f4203..447fb55 100644
2623--- a/js/ui/components/networkAgent.js
2624+++ b/js/ui/components/networkAgent.js
2625@@ -655,7 +655,11 @@ var NetworkAgent = new Lang.Class({
2626 switch (connectionType) {
2627 case '802-11-wireless':
2628 let wirelessSetting = connection.get_setting_wireless();
2629+<<<<<<< js/ui/components/networkAgent.js
2630 let ssid = NM.utils_ssid_to_utf8(wirelessSetting.get_ssid());
2631+=======
2632+ let ssid = NM.utils_ssid_to_utf8(wirelessSetting.get_ssid().get_data());
2633+>>>>>>> js/ui/components/networkAgent.js
2634 title = _("Authentication required by wireless network");
2635 body = _("Passwords or encryption keys are required to access the wireless network “%s”.").format(ssid);
2636 break;
2637diff --git a/js/ui/components/polkitAgent.js b/js/ui/components/polkitAgent.js
2638index 316bc2a..9180266 100644
2639--- a/js/ui/components/polkitAgent.js
2640+++ b/js/ui/components/polkitAgent.js
2641@@ -201,7 +201,13 @@ var AuthenticationDialog = new Lang.Class({
2642 close(timestamp) {
2643 this.parent(timestamp);
2644
2645+<<<<<<< js/ui/components/polkitAgent.js
2646 Main.sessionMode.disconnect(this._sessionUpdatedId);
2647+=======
2648+ if (this._sessionUpdatedId)
2649+ Main.sessionMode.disconnect(this._sessionUpdatedId);
2650+ this._sessionUpdatedId = 0;
2651+>>>>>>> js/ui/components/polkitAgent.js
2652 },
2653
2654 _ensureOpen() {
2655diff --git a/js/ui/dash.js b/js/ui/dash.js
2656index 5ee2476..83e73ce 100644
2657--- a/js/ui/dash.js
2658+++ b/js/ui/dash.js
2659@@ -52,6 +52,11 @@ var DashItemContainer = new Lang.Class({
2660 this.animatingOut = false;
2661
2662 this.connect('destroy', () => {
2663+<<<<<<< js/ui/dash.js
2664+=======
2665+ if (this.child != null)
2666+ this.child.destroy();
2667+>>>>>>> js/ui/dash.js
2668 this.label.destroy();
2669 });
2670 },
2671diff --git a/js/ui/dnd.js b/js/ui/dnd.js
2672index a38607c..25ae400 100644
2673--- a/js/ui/dnd.js
2674+++ b/js/ui/dnd.js
2675@@ -396,10 +396,22 @@ var _Draggable = new Lang.Class({
2676 return true;
2677 },
2678
2679+<<<<<<< js/ui/dnd.js
2680 _updateDragHover() {
2681 this._updateHoverId = 0;
2682 let target = this._dragActor.get_stage().get_actor_at_pos(Clutter.PickMode.ALL,
2683 this._dragX, this._dragY);
2684+=======
2685+ _pickTargetActor() {
2686+ return this._dragActor.get_stage().get_actor_at_pos(Clutter.PickMode.ALL,
2687+ this._dragX, this._dragY);
2688+ },
2689+
2690+ _updateDragHover() {
2691+ this._updateHoverId = 0;
2692+ let target = this._pickTargetActor();
2693+
2694+>>>>>>> js/ui/dnd.js
2695 let dragEvent = {
2696 x: this._dragX,
2697 y: this._dragY,
2698@@ -407,6 +419,21 @@ var _Draggable = new Lang.Class({
2699 source: this.actor._delegate,
2700 targetActor: target
2701 };
2702+<<<<<<< js/ui/dnd.js
2703+=======
2704+
2705+ let targetActorDestroyHandlerId;
2706+ let handleTargetActorDestroyClosure;
2707+ handleTargetActorDestroyClosure = () => {
2708+ target = this._pickTargetActor();
2709+ dragEvent.targetActor = target;
2710+ targetActorDestroyHandlerId =
2711+ target.connect('destroy', handleTargetActorDestroyClosure);
2712+ };
2713+ targetActorDestroyHandlerId =
2714+ target.connect('destroy', handleTargetActorDestroyClosure);
2715+
2716+>>>>>>> js/ui/dnd.js
2717 for (let i = 0; i < dragMonitors.length; i++) {
2718 let motionFunc = dragMonitors[i].dragMotion;
2719 if (motionFunc) {
2720@@ -417,6 +444,10 @@ var _Draggable = new Lang.Class({
2721 }
2722 }
2723 }
2724+<<<<<<< js/ui/dnd.js
2725+=======
2726+ dragEvent.targetActor.disconnect(targetActorDestroyHandlerId);
2727+>>>>>>> js/ui/dnd.js
2728
2729 while (target) {
2730 if (target._delegate && target._delegate.handleDragOver) {
2731diff --git a/js/ui/endSessionDialog.js b/js/ui/endSessionDialog.js
2732index 7d18d0b..e0fe505 100644
2733--- a/js/ui/endSessionDialog.js
2734+++ b/js/ui/endSessionDialog.js
2735@@ -760,7 +760,11 @@ var EndSessionDialog = new Lang.Class({
2736 let updatePrepared = this._pkOfflineProxy.UpdatePrepared;
2737 let updatesAllowed = this._updatesPermission && this._updatesPermission.allowed;
2738
2739+<<<<<<< js/ui/endSessionDialog.js
2740 _setCheckBoxLabel(this._checkBox, dialogContent.checkBoxText);
2741+=======
2742+ _setCheckBoxLabel(this._checkBox, dialogContent.checkBoxText || '');
2743+>>>>>>> js/ui/endSessionDialog.js
2744 this._checkBox.actor.visible = (dialogContent.checkBoxText && updatePrepared && updatesAllowed);
2745 this._checkBox.actor.checked = (updatePrepared && updateTriggered);
2746
2747diff --git a/js/ui/extensionSystem.js b/js/ui/extensionSystem.js
2748index e35c01a..36fbf92 100644
2749--- a/js/ui/extensionSystem.js
2750+++ b/js/ui/extensionSystem.js
2751@@ -76,6 +76,10 @@ function disableExtension(uuid) {
2752 if (extension.stylesheet) {
2753 let theme = St.ThemeContext.get_for_stage(global.stage).get_theme();
2754 theme.unload_stylesheet(extension.stylesheet);
2755+<<<<<<< js/ui/extensionSystem.js
2756+=======
2757+ delete extension.stylesheet;
2758+>>>>>>> js/ui/extensionSystem.js
2759 }
2760
2761 try {
2762@@ -115,6 +119,7 @@ function enableExtension(uuid) {
2763 extensionOrder.push(uuid);
2764
2765 let stylesheetNames = [global.session_mode + '.css', 'stylesheet.css'];
2766+<<<<<<< js/ui/extensionSystem.js
2767 for (let i = 0; i < stylesheetNames.length; i++) {
2768 let stylesheetFile = extension.dir.get_child(stylesheetNames[i]);
2769 if (stylesheetFile.query_exists(null)) {
2770@@ -122,6 +127,20 @@ function enableExtension(uuid) {
2771 theme.load_stylesheet(stylesheetFile);
2772 extension.stylesheet = stylesheetFile;
2773 break;
2774+=======
2775+ let theme = St.ThemeContext.get_for_stage(global.stage).get_theme();
2776+ for (let i = 0; i < stylesheetNames.length; i++) {
2777+ try {
2778+ let stylesheetFile = extension.dir.get_child(stylesheetNames[i]);
2779+ theme.load_stylesheet(stylesheetFile);
2780+ extension.stylesheet = stylesheetFile;
2781+ break;
2782+ } catch (e) {
2783+ if (e.matches(Gio.IOErrorEnum, Gio.IOErrorEnum.NOT_FOUND))
2784+ continue; // not an error
2785+ log(`Failed to load stylesheet for extension ${uuid}: ${e.message}`);
2786+ return;
2787+>>>>>>> js/ui/extensionSystem.js
2788 }
2789 }
2790
2791@@ -131,6 +150,13 @@ function enableExtension(uuid) {
2792 _signals.emit('extension-state-changed', extension);
2793 return;
2794 } catch(e) {
2795+<<<<<<< js/ui/extensionSystem.js
2796+=======
2797+ if (extension.stylesheet) {
2798+ theme.unload_stylesheet(extension.stylesheet);
2799+ delete extension.stylesheet;
2800+ }
2801+>>>>>>> js/ui/extensionSystem.js
2802 logExtensionError(uuid, e);
2803 return;
2804 }
2805diff --git a/js/ui/iconGrid.js b/js/ui/iconGrid.js
2806index 60f2653..2b2afae 100644
2807--- a/js/ui/iconGrid.js
2808+++ b/js/ui/iconGrid.js
2809@@ -418,6 +418,14 @@ var IconGrid = new Lang.Class({
2810 },
2811
2812 _animationDone() {
2813+<<<<<<< js/ui/iconGrid.js
2814+=======
2815+ this._clonesAnimating.forEach(clone => {
2816+ clone.source.reactive = true;
2817+ clone.source.opacity = 255;
2818+ clone.destroy();
2819+ });
2820+>>>>>>> js/ui/iconGrid.js
2821 this._clonesAnimating = [];
2822 this.emit('animation-done');
2823 },
2824@@ -538,10 +546,13 @@ var IconGrid = new Lang.Class({
2825 onComplete: () => {
2826 if (isLastItem)
2827 this._animationDone();
2828+<<<<<<< js/ui/iconGrid.js
2829
2830 actor.opacity = 255;
2831 actor.reactive = true;
2832 actorClone.destroy();
2833+=======
2834+>>>>>>> js/ui/iconGrid.js
2835 }};
2836 fadeParams = { time: ANIMATION_FADE_IN_TIME_FOR_ITEM,
2837 transition: 'easeInOutQuad',
2838@@ -562,12 +573,17 @@ var IconGrid = new Lang.Class({
2839 scale_x: scaleX,
2840 scale_y: scaleY,
2841 onComplete: () => {
2842+<<<<<<< js/ui/iconGrid.js
2843 if (isLastItem) {
2844 this._animationDone();
2845 this._restoreItemsOpacity();
2846 }
2847 actor.reactive = true;
2848 actorClone.destroy();
2849+=======
2850+ if (isLastItem)
2851+ this._animationDone();
2852+>>>>>>> js/ui/iconGrid.js
2853 }};
2854 fadeParams = { time: ANIMATION_FADE_IN_TIME_FOR_ITEM,
2855 transition: 'easeInOutQuad',
2856@@ -581,12 +597,15 @@ var IconGrid = new Lang.Class({
2857 }
2858 },
2859
2860+<<<<<<< js/ui/iconGrid.js
2861 _restoreItemsOpacity() {
2862 for (let index = 0; index < this._items.length; index++) {
2863 this._items[index].actor.opacity = 255;
2864 }
2865 },
2866
2867+=======
2868+>>>>>>> js/ui/iconGrid.js
2869 _getAllocatedChildSizeAndSpacing(child) {
2870 let [,, natWidth, natHeight] = child.get_preferred_size();
2871 let width = Math.min(this._getHItemSize(), natWidth);
2872diff --git a/js/ui/keyboard.js b/js/ui/keyboard.js
2873index e13c7b7..543c5a9 100644
2874--- a/js/ui/keyboard.js
2875+++ b/js/ui/keyboard.js
2876@@ -1,6 +1,9 @@
2877 // -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
2878
2879+<<<<<<< js/ui/keyboard.js
2880 const FocusCaretTracker = imports.ui.focusCaretTracker;
2881+=======
2882+>>>>>>> js/ui/keyboard.js
2883 const Atspi = imports.gi.Atspi;
2884 const Clutter = imports.gi.Clutter;
2885 const Gdk = imports.gi.Gdk;
2886@@ -13,6 +16,10 @@ const Signals = imports.signals;
2887 const St = imports.gi.St;
2888 const InputSourceManager = imports.ui.status.keyboard;
2889
2890+<<<<<<< js/ui/keyboard.js
2891+=======
2892+const IBusManager = imports.misc.ibusManager;
2893+>>>>>>> js/ui/keyboard.js
2894 const BoxPointer = imports.ui.boxpointer;
2895 const Layout = imports.ui.layout;
2896 const Main = imports.ui.main;
2897@@ -261,6 +268,10 @@ var Key = new Lang.Class({
2898 this._extended_keyboard = null;
2899 this._pressTimeoutId = 0;
2900 this._capturedPress = false;
2901+<<<<<<< js/ui/keyboard.js
2902+=======
2903+
2904+>>>>>>> js/ui/keyboard.js
2905 this._capturedEventId = 0;
2906 this._unmapId = 0;
2907 this._longPress = false;
2908@@ -484,6 +495,82 @@ var KeyboardModel = new Lang.Class({
2909 }
2910 });
2911
2912+<<<<<<< js/ui/keyboard.js
2913+=======
2914+var FocusTracker = new Lang.Class({
2915+ Name: 'FocusTracker',
2916+
2917+ _init() {
2918+ this._currentWindow = null;
2919+ this._currentWindowPositionId = 0;
2920+
2921+ global.screen.get_display().connect('notify::focus-window', () => {
2922+ this._setCurrentWindow(global.screen.get_display().focus_window);
2923+ this.emit('window-changed', this._currentWindow);
2924+ });
2925+
2926+ /* Valid for wayland clients */
2927+ Main.inputMethod.connect('cursor-location-changed', (o, rect) => {
2928+ let newRect = { x: rect.get_x(), y: rect.get_y(), width: rect.get_width(), height: rect.get_height() };
2929+ this._setCurrentRect(newRect);
2930+ });
2931+
2932+ this._ibusManager = IBusManager.getIBusManager();
2933+ this._ibusManager.connect('set-cursor-location', (manager, rect) => {
2934+ /* Valid for X11 clients only */
2935+ if (Main.inputMethod.currentFocus)
2936+ return;
2937+
2938+ this._setCurrentRect(rect);
2939+ });
2940+ },
2941+
2942+ get currentWindow() {
2943+ return this._currentWindow;
2944+ },
2945+
2946+ _setCurrentWindow(window) {
2947+ if (this._currentWindow)
2948+ this._currentWindow.disconnect(this._currentWindowPositionId);
2949+
2950+ this._currentWindow = window;
2951+ if (window) {
2952+ this._currentWindowPositionId = this._currentWindow.connect('position-changed', () => {
2953+ if (global.display.get_grab_op() == Meta.GrabOp.NONE)
2954+ this.emit('position-changed');
2955+ else
2956+ this.emit('reset');
2957+ });
2958+ }
2959+ },
2960+
2961+ _setCurrentRect(rect) {
2962+ if (this._currentWindow) {
2963+ let frameRect = this._currentWindow.get_frame_rect();
2964+ rect.x -= frameRect.x;
2965+ rect.y -= frameRect.y;
2966+ }
2967+
2968+ this._rect = rect;
2969+ this.emit('position-changed');
2970+ },
2971+
2972+ getCurrentRect() {
2973+ let rect = { x: this._rect.x, y: this._rect.y,
2974+ width: this._rect.width, height: this._rect.height };
2975+
2976+ if (this._currentWindow) {
2977+ let frameRect = this._currentWindow.get_frame_rect();
2978+ rect.x += frameRect.x;
2979+ rect.y += frameRect.y;
2980+ }
2981+
2982+ return rect;
2983+ }
2984+});
2985+Signals.addSignalMethods(FocusTracker.prototype);
2986+
2987+>>>>>>> js/ui/keyboard.js
2988 var Keyboard = new Lang.Class({
2989 Name: 'Keyboard',
2990
2991@@ -491,6 +578,7 @@ var Keyboard = new Lang.Class({
2992 this.actor = null;
2993 this._focusInExtendedKeys = false;
2994
2995+<<<<<<< js/ui/keyboard.js
2996 this._focusCaretTracker = new FocusCaretTracker.FocusCaretTracker();
2997 this._focusCaretTracker.connect('focus-changed', this._onFocusChanged.bind(this));
2998 this._focusCaretTracker.connect('caret-moved', this._onCaretMoved.bind(this));
2999@@ -500,6 +588,12 @@ var Keyboard = new Lang.Class({
3000 this._updateCaretPositionId = 0;
3001 this._currentFocusWindow = null;
3002 this._originalWindowY = null;
3003+=======
3004+ this._languagePopup = null;
3005+ this._currentFocusWindow = null;
3006+ this._animFocusedWindow = null;
3007+ this._delayedAnimFocusWindow = null;
3008+>>>>>>> js/ui/keyboard.js
3009
3010 this._enableKeyboard = false; // a11y settings value
3011 this._enabled = false; // enabled state (by setting or device type)
3012@@ -510,6 +604,17 @@ var Keyboard = new Lang.Class({
3013 this._lastDeviceId = null;
3014 this._suggestions = null;
3015
3016+<<<<<<< js/ui/keyboard.js
3017+=======
3018+ this._focusTracker = new FocusTracker();
3019+ this._focusTracker.connect('position-changed', this._onFocusPositionChanged.bind(this));
3020+ this._focusTracker.connect('reset', () => {
3021+ this._delayedAnimFocusWindow = null;
3022+ this._animFocusedWindow = null;
3023+ this._oskFocusWindow = null;
3024+ });
3025+
3026+>>>>>>> js/ui/keyboard.js
3027 Meta.get_backend().connect('last-device-changed',
3028 (backend, deviceId) => {
3029 let manager = Clutter.DeviceManager.get_default();
3030@@ -532,6 +637,7 @@ var Keyboard = new Lang.Class({
3031 this._keyboardRestingId = 0;
3032
3033 Main.layoutManager.connect('monitors-changed', this._relayout.bind(this));
3034+<<<<<<< js/ui/keyboard.js
3035 //Main.inputMethod.connect('cursor-location-changed', (o, rect) => {
3036 // if (this._keyboardVisible) {
3037 // let currentWindow = global.screen.get_display().focus_window;
3038@@ -539,12 +645,15 @@ var Keyboard = new Lang.Class({
3039 // rect.get_width(), rect.get_height());
3040 // }
3041 //});
3042+=======
3043+>>>>>>> js/ui/keyboard.js
3044 },
3045
3046 get visible() {
3047 return this._keyboardVisible;
3048 },
3049
3050+<<<<<<< js/ui/keyboard.js
3051 _setCaretTrackerEnabled(enabled) {
3052 if (this._caretTrackingEnabled == enabled)
3053 return;
3054@@ -628,6 +737,11 @@ var Keyboard = new Lang.Class({
3055 let accessible = event.source;
3056 if (this._currentAccessible == accessible)
3057 this._updateCaretPosition(accessible);
3058+=======
3059+ _onFocusPositionChanged(focusTracker) {
3060+ let rect = focusTracker.getCurrentRect();
3061+ this.setCursorLocation(focusTracker.currentWindow, rect.x, rect.y, rect.width, rect.height);
3062+>>>>>>> js/ui/keyboard.js
3063 },
3064
3065 _lastDeviceIsTouchscreen() {
3066@@ -650,8 +764,11 @@ var Keyboard = new Lang.Class({
3067 if (!this._enabled && !this._keyboardController)
3068 return;
3069
3070+<<<<<<< js/ui/keyboard.js
3071 this._setCaretTrackerEnabled(this._enabled);
3072
3073+=======
3074+>>>>>>> js/ui/keyboard.js
3075 if (this._enabled && !this._keyboardController)
3076 this._setupKeyboard();
3077 else if (!this._enabled)
3078@@ -936,9 +1053,17 @@ var Keyboard = new Lang.Class({
3079 },
3080
3081 _relayout() {
3082+<<<<<<< js/ui/keyboard.js
3083 if (this.actor == null)
3084 return;
3085 let monitor = Main.layoutManager.keyboardMonitor;
3086+=======
3087+ let monitor = Main.layoutManager.keyboardMonitor;
3088+
3089+ if (this.actor == null || monitor == null)
3090+ return;
3091+
3092+>>>>>>> js/ui/keyboard.js
3093 let maxHeight = monitor.height / 3;
3094 this.actor.width = monitor.width;
3095 this.actor.height = maxHeight;
3096@@ -1027,11 +1152,22 @@ var Keyboard = new Lang.Class({
3097 if (!this._keyboardRequested)
3098 return;
3099
3100+<<<<<<< js/ui/keyboard.js
3101 if (this._currentAccessible)
3102 this._updateCaretPosition(this._currentAccessible);
3103 Main.layoutManager.keyboardIndex = monitor;
3104 this._relayout();
3105 Main.layoutManager.showKeyboard();
3106+=======
3107+ Main.layoutManager.keyboardIndex = monitor;
3108+ this._relayout();
3109+ Main.layoutManager.showKeyboard();
3110+
3111+ if (this._delayedAnimFocusWindow) {
3112+ this._setAnimationWindow(this._delayedAnimFocusWindow);
3113+ this._delayedAnimFocusWindow = null;
3114+ }
3115+>>>>>>> js/ui/keyboard.js
3116 },
3117
3118 hide() {
3119@@ -1102,8 +1238,14 @@ var Keyboard = new Lang.Class({
3120 window.move_frame(true, frameRect.x, frameRect.y);
3121 },
3122
3123+<<<<<<< js/ui/keyboard.js
3124 _animateWindow(window, show, deltaY) {
3125 let windowActor = window.get_compositor_private();
3126+=======
3127+ _animateWindow(window, show) {
3128+ let windowActor = window.get_compositor_private();
3129+ let deltaY = Main.layoutManager.keyboardBox.height;
3130+>>>>>>> js/ui/keyboard.js
3131 if (!windowActor)
3132 return;
3133
3134@@ -1124,6 +1266,7 @@ var Keyboard = new Lang.Class({
3135 }
3136 },
3137
3138+<<<<<<< js/ui/keyboard.js
3139 setCursorLocation(window, x, y , w, h) {
3140 if (window == this._oskFocusWindow)
3141 return;
3142@@ -1153,6 +1296,41 @@ var Keyboard = new Lang.Class({
3143 this._oskFocusWindow = window;
3144 this._oskFocusWindowDelta = delta;
3145 }
3146+=======
3147+ _setAnimationWindow(window) {
3148+ if (this._animFocusedWindow == window)
3149+ return;
3150+
3151+ if (this._animFocusedWindow)
3152+ this._animateWindow(this._animFocusedWindow, false);
3153+ if (window)
3154+ this._animateWindow(window, true);
3155+
3156+ this._animFocusedWindow = window;
3157+ },
3158+
3159+ setCursorLocation(window, x, y , w, h) {
3160+ let monitor = Main.layoutManager.keyboardMonitor;
3161+
3162+ if (window && monitor) {
3163+ let keyboardHeight = Main.layoutManager.keyboardBox.height;
3164+ let focusObscured = false;
3165+
3166+ if (y + h >= monitor.y + monitor.height - keyboardHeight) {
3167+ if (this._keyboardVisible)
3168+ this._setAnimationWindow(window);
3169+ else
3170+ this._delayedAnimFocusWindow = window;
3171+ } else if (y < keyboardHeight) {
3172+ this._delayedAnimFocusWindow = null;
3173+ this._setAnimationWindow(null);
3174+ }
3175+ } else {
3176+ this._setAnimationWindow(null);
3177+ }
3178+
3179+ this._oskFocusWindow = window;
3180+>>>>>>> js/ui/keyboard.js
3181 },
3182 });
3183
3184diff --git a/js/ui/layout.js b/js/ui/layout.js
3185index 6f81039..e4e5e9e 100644
3186--- a/js/ui/layout.js
3187+++ b/js/ui/layout.js
3188@@ -203,6 +203,10 @@ var LayoutManager = new Lang.Class({
3189
3190 // Set up stage hierarchy to group all UI actors under one container.
3191 this.uiGroup = new Shell.GenericContainer({ name: 'uiGroup' });
3192+<<<<<<< js/ui/layout.js
3193+=======
3194+ this.uiGroup.set_flags(Clutter.ActorFlags.NO_LAYOUT);
3195+>>>>>>> js/ui/layout.js
3196 this.uiGroup.connect('allocate', (actor, box, flags) => {
3197 let children = actor.get_children();
3198 for (let i = 0; i < children.length; i++)
3199@@ -557,6 +561,11 @@ var LayoutManager = new Lang.Class({
3200 },
3201
3202 get focusMonitor() {
3203+<<<<<<< js/ui/layout.js
3204+=======
3205+ if (this.focusIndex < 0)
3206+ return null;
3207+>>>>>>> js/ui/layout.js
3208 return this.monitors[this.focusIndex];
3209 },
3210
3211diff --git a/js/ui/magnifier.js b/js/ui/magnifier.js
3212index b752b12..68511e7 100644
3213--- a/js/ui/magnifier.js
3214+++ b/js/ui/magnifier.js
3215@@ -19,7 +19,10 @@ const MagnifierDBus = imports.ui.magnifierDBus;
3216 const Params = imports.misc.params;
3217 const PointerWatcher = imports.ui.pointerWatcher;
3218
3219+<<<<<<< js/ui/magnifier.js
3220 var MOUSE_POLL_FREQUENCY = 50;
3221+=======
3222+>>>>>>> js/ui/magnifier.js
3223 var CROSSHAIRS_CLIP_SIZE = [100, 100];
3224 var NO_CHANGE = 0.0;
3225
3226@@ -152,8 +155,15 @@ var Magnifier = new Lang.Class({
3227 * Turn on mouse tracking, if not already doing so.
3228 */
3229 startTrackingMouse() {
3230+<<<<<<< js/ui/magnifier.js
3231 if (!this._pointerWatch)
3232 this._pointerWatch = PointerWatcher.getPointerWatcher().addWatch(MOUSE_POLL_FREQUENCY, this.scrollToMousePos.bind(this));
3233+=======
3234+ if (!this._pointerWatch) {
3235+ let interval = 1000 / Clutter.get_default_frame_rate();
3236+ this._pointerWatch = PointerWatcher.getPointerWatcher().addWatch(interval, this.scrollToMousePos.bind(this));
3237+ }
3238+>>>>>>> js/ui/magnifier.js
3239 },
3240
3241 /**
3242diff --git a/js/ui/main.js b/js/ui/main.js
3243index 2cfe941..d7742ee 100644
3244--- a/js/ui/main.js
3245+++ b/js/ui/main.js
3246@@ -256,6 +256,17 @@ function _getStylesheet(name) {
3247 if (stylesheet.query_exists(null))
3248 return stylesheet;
3249
3250+<<<<<<< js/ui/main.js
3251+=======
3252+ let dataDirs = GLib.get_system_data_dirs();
3253+ for (let i = 0; i < dataDirs.length; i++) {
3254+ let path = GLib.build_filenamev([dataDirs[i], 'gnome-shell', 'theme', name]);
3255+ let stylesheet = Gio.file_new_for_path(path);
3256+ if (stylesheet.query_exists(null))
3257+ return stylesheet;
3258+ }
3259+
3260+>>>>>>> js/ui/main.js
3261 stylesheet = Gio.File.new_for_path(global.datadir + '/theme/' + name);
3262 if (stylesheet.query_exists(null))
3263 return stylesheet;
3264@@ -335,6 +346,12 @@ function loadTheme() {
3265 let theme = new St.Theme ({ application_stylesheet: _cssStylesheet,
3266 default_stylesheet: _defaultCssStylesheet });
3267
3268+<<<<<<< js/ui/main.js
3269+=======
3270+ if (theme.default_stylesheet == null)
3271+ throw new Error("No valid stylesheet found for '%s'".format(sessionMode.stylesheetName));
3272+
3273+>>>>>>> js/ui/main.js
3274 if (previousTheme) {
3275 let customStylesheets = previousTheme.get_custom_stylesheets();
3276
3277diff --git a/js/ui/messageList.js b/js/ui/messageList.js
3278index aff201e..285d14a 100644
3279--- a/js/ui/messageList.js
3280+++ b/js/ui/messageList.js
3281@@ -362,7 +362,12 @@ var Message = new Lang.Class({
3282 this.setBody(body);
3283
3284 this._closeButton.connect('clicked', this.close.bind(this));
3285+<<<<<<< js/ui/messageList.js
3286 this.actor.connect('notify::hover', this._sync.bind(this));
3287+=======
3288+ let actorHoverId = this.actor.connect('notify::hover', this._sync.bind(this));
3289+ this._closeButton.connect('destroy', this.actor.disconnect.bind(this.actor, actorHoverId));
3290+>>>>>>> js/ui/messageList.js
3291 this.actor.connect('clicked', this._onClicked.bind(this));
3292 this.actor.connect('destroy', this._onDestroy.bind(this));
3293 this._sync();
3294diff --git a/js/ui/messageTray.js b/js/ui/messageTray.js
3295index 9ce5b44..20b635a 100644
3296--- a/js/ui/messageTray.js
3297+++ b/js/ui/messageTray.js
3298@@ -1320,6 +1320,10 @@ var MessageTray = new Lang.Class({
3299 this._bannerBin.y = -this._banner.actor.height;
3300 this.actor.show();
3301
3302+<<<<<<< js/ui/messageTray.js
3303+=======
3304+ Meta.disable_unredirect_for_screen(global.screen);
3305+>>>>>>> js/ui/messageTray.js
3306 this._updateShowingNotification();
3307
3308 let [x, y, mods] = global.get_pointer();
3309@@ -1457,6 +1461,10 @@ var MessageTray = new Lang.Class({
3310
3311 this._pointerInNotification = false;
3312 this._notificationRemoved = false;
3313+<<<<<<< js/ui/messageTray.js
3314+=======
3315+ Meta.enable_unredirect_for_screen(global.screen);
3316+>>>>>>> js/ui/messageTray.js
3317
3318 this._banner.actor.destroy();
3319 this._banner = null;
3320diff --git a/js/ui/notificationDaemon.js b/js/ui/notificationDaemon.js
3321index 9f08562..61dc4b3 100644
3322--- a/js/ui/notificationDaemon.js
3323+++ b/js/ui/notificationDaemon.js
3324@@ -117,10 +117,15 @@ var FdoNotificationDaemon = new Lang.Class({
3325 bitsPerSample, nChannels, data] = hints['image-data'];
3326 return Shell.util_create_pixbuf_from_data(data, GdkPixbuf.Colorspace.RGB, hasAlpha,
3327 bitsPerSample, width, height, rowStride);
3328+<<<<<<< js/ui/notificationDaemon.js
3329 } else if (hints['image-path']) {
3330 return new Gio.FileIcon({ file: Gio.File.new_for_path(hints['image-path']) });
3331 }
3332 return null;
3333+=======
3334+ }
3335+ return this._iconForNotificationData(hints['image-path']);
3336+>>>>>>> js/ui/notificationDaemon.js
3337 },
3338
3339 _fallbackIconForNotificationData(hints) {
3340diff --git a/js/ui/osdWindow.js b/js/ui/osdWindow.js
3341index f27f489..83d77f1 100644
3342--- a/js/ui/osdWindow.js
3343+++ b/js/ui/osdWindow.js
3344@@ -108,15 +108,41 @@ var OsdWindow = new Lang.Class({
3345 this._hideTimeoutId = 0;
3346 this._reset();
3347
3348+<<<<<<< js/ui/osdWindow.js
3349 Main.layoutManager.connect('monitors-changed',
3350 this._relayout.bind(this));
3351 let themeContext = St.ThemeContext.get_for_stage(global.stage);
3352 themeContext.connect('notify::scale-factor',
3353 this._relayout.bind(this));
3354+=======
3355+ this.actor.connect('destroy', this._onDestroy.bind(this));
3356+
3357+ this._monitorsChangedId =
3358+ Main.layoutManager.connect('monitors-changed',
3359+ this._relayout.bind(this));
3360+ let themeContext = St.ThemeContext.get_for_stage(global.stage);
3361+ this._scaleChangedId =
3362+ themeContext.connect('notify::scale-factor',
3363+ this._relayout.bind(this));
3364+>>>>>>> js/ui/osdWindow.js
3365 this._relayout();
3366 Main.uiGroup.add_child(this.actor);
3367 },
3368
3369+<<<<<<< js/ui/osdWindow.js
3370+=======
3371+ _onDestroy() {
3372+ if (this._monitorsChangedId)
3373+ Main.layoutManager.disconnect(this._monitorsChangedId);
3374+ this._monitorsChangedId = 0;
3375+
3376+ let themeContext = St.ThemeContext.get_for_stage(global.stage);
3377+ if (this._scaleChangedId)
3378+ themeContext.disconnect(this._scaleChangedId);
3379+ this._scaleChangedId = 0;
3380+ },
3381+
3382+>>>>>>> js/ui/osdWindow.js
3383 setIcon(icon) {
3384 this._icon.gicon = icon;
3385 },
3386@@ -204,7 +230,11 @@ var OsdWindow = new Lang.Class({
3387
3388 let scaleFactor = St.ThemeContext.get_for_stage(global.stage).scale_factor;
3389 this._icon.icon_size = popupSize / (2 * scaleFactor);
3390+<<<<<<< js/ui/osdWindow.js
3391 this._box.translation_y = monitor.height / 4;
3392+=======
3393+ this._box.translation_y = Math.round(monitor.height / 4);
3394+>>>>>>> js/ui/osdWindow.js
3395 this._boxConstraint.minSize = popupSize;
3396 }
3397 });
3398diff --git a/js/ui/overview.js b/js/ui/overview.js
3399index 2240576..8ee8de3 100644
3400--- a/js/ui/overview.js
3401+++ b/js/ui/overview.js
3402@@ -393,10 +393,15 @@ var Overview = new Lang.Class({
3403 if (!Main.layoutManager.primaryMonitor)
3404 return;
3405
3406+<<<<<<< js/ui/overview.js
3407 let workArea = Main.layoutManager.getWorkAreaForMonitor(Main.layoutManager.primaryIndex);
3408
3409 this._coverPane.set_position(0, workArea.y);
3410 this._coverPane.set_size(workArea.width, workArea.height);
3411+=======
3412+ this._coverPane.set_position(0, 0);
3413+ this._coverPane.set_size(global.screen_width, global.screen_height);
3414+>>>>>>> js/ui/overview.js
3415
3416 this._updateBackgrounds();
3417 },
3418diff --git a/js/ui/overviewControls.js b/js/ui/overviewControls.js
3419index a2905ab..6ff9a0b 100644
3420--- a/js/ui/overviewControls.js
3421+++ b/js/ui/overviewControls.js
3422@@ -284,6 +284,14 @@ var ThumbnailsSlider = new Lang.Class({
3423 return child.get_theme_node().get_length('visible-width');
3424 },
3425
3426+<<<<<<< js/ui/overviewControls.js
3427+=======
3428+ _onDragEnd() {
3429+ this.actor.sync_hover();
3430+ this.parent();
3431+ },
3432+
3433+>>>>>>> js/ui/overviewControls.js
3434 _getSlide() {
3435 if (!this._visible)
3436 return 0;
3437diff --git a/js/ui/panel.js b/js/ui/panel.js
3438index 2f59324..e02cf35 100644
3439--- a/js/ui/panel.js
3440+++ b/js/ui/panel.js
3441@@ -796,6 +796,10 @@ var Panel = new Lang.Class({
3442 this.actor.connect('get-preferred-height', this._getPreferredHeight.bind(this));
3443 this.actor.connect('allocate', this._allocate.bind(this));
3444 this.actor.connect('button-press-event', this._onButtonPress.bind(this));
3445+<<<<<<< js/ui/panel.js
3446+=======
3447+ this.actor.connect('touch-event', this._onButtonPress.bind(this));
3448+>>>>>>> js/ui/panel.js
3449 this.actor.connect('key-press-event', this._onKeyPress.bind(this));
3450
3451 Main.overview.connect('showing', () => {
3452@@ -939,8 +943,18 @@ var Panel = new Lang.Class({
3453 if (event.get_source() != actor)
3454 return Clutter.EVENT_PROPAGATE;
3455
3456+<<<<<<< js/ui/panel.js
3457 let button = event.get_button();
3458 if (button != 1)
3459+=======
3460+ let type = event.type();
3461+ let isPress = type == Clutter.EventType.BUTTON_PRESS;
3462+ if (!isPress && type != Clutter.EventType.TOUCH_BEGIN)
3463+ return Clutter.EVENT_PROPAGATE;
3464+
3465+ let button = isPress ? event.get_button() : -1;
3466+ if (isPress && button != 1)
3467+>>>>>>> js/ui/panel.js
3468 return Clutter.EVENT_PROPAGATE;
3469
3470 let focusWindow = global.display.focus_window;
3471@@ -1079,6 +1093,10 @@ var Panel = new Lang.Class({
3472 let windows = activeWorkspace.list_windows().filter(metaWindow => {
3473 return metaWindow.is_on_primary_monitor() &&
3474 metaWindow.showing_on_its_workspace() &&
3475+<<<<<<< js/ui/panel.js
3476+=======
3477+ !metaWindow.is_hidden() &&
3478+>>>>>>> js/ui/panel.js
3479 metaWindow.get_window_type() != Meta.WindowType.DESKTOP;
3480 });
3481
3482diff --git a/js/ui/popupMenu.js b/js/ui/popupMenu.js
3483index 67b928c..b161441 100644
3484--- a/js/ui/popupMenu.js
3485+++ b/js/ui/popupMenu.js
3486@@ -141,8 +141,22 @@ var PopupBaseMenuItem = new Lang.Class({
3487 },
3488
3489 _onKeyPressEvent(actor, event) {
3490+<<<<<<< js/ui/popupMenu.js
3491 let symbol = event.get_key_symbol();
3492
3493+=======
3494+ let state = event.get_state();
3495+
3496+ // if user has a modifier down (except capslock)
3497+ // then don't handle the key press here
3498+ state &= ~Clutter.ModifierType.LOCK_MASK;
3499+ state &= Clutter.ModifierType.MODIFIER_MASK;
3500+
3501+ if (state)
3502+ return Clutter.EVENT_PROPAGATE;
3503+
3504+ let symbol = event.get_key_symbol();
3505+>>>>>>> js/ui/popupMenu.js
3506 if (symbol == Clutter.KEY_space || symbol == Clutter.KEY_Return) {
3507 this.activate(event);
3508 return Clutter.EVENT_STOP;
3509@@ -394,8 +408,14 @@ var PopupImageMenuItem = new Lang.Class({
3510 _init(text, icon, params) {
3511 this.parent(params);
3512
3513+<<<<<<< js/ui/popupMenu.js
3514 this._icon = new St.Icon({ style_class: 'popup-menu-icon' });
3515 this.actor.add_child(this._icon, { align: St.Align.END });
3516+=======
3517+ this._icon = new St.Icon({ style_class: 'popup-menu-icon',
3518+ x_align: Clutter.ActorAlign.END });
3519+ this.actor.add_child(this._icon);
3520+>>>>>>> js/ui/popupMenu.js
3521 this.label = new St.Label({ text: text });
3522 this.actor.add_child(this.label);
3523 this.actor.label_actor = this.label;
3524diff --git a/js/ui/remoteSearch.js b/js/ui/remoteSearch.js
3525index 1e8e6c9..89c5e4c 100644
3526--- a/js/ui/remoteSearch.js
3527+++ b/js/ui/remoteSearch.js
3528@@ -295,7 +295,11 @@ var RemoteSearchProvider = new Lang.Class({
3529 name: metas[i]['name'],
3530 description: metas[i]['description'],
3531 createIcon: size => {
3532+<<<<<<< js/ui/remoteSearch.js
3533 this.createIcon(size, metas[i]);
3534+=======
3535+ return this.createIcon(size, metas[i]);
3536+>>>>>>> js/ui/remoteSearch.js
3537 },
3538 clipboardText: metas[i]['clipboardText'] });
3539 }
3540diff --git a/js/ui/runDialog.js b/js/ui/runDialog.js
3541index 82deab5..0a0218d 100644
3542--- a/js/ui/runDialog.js
3543+++ b/js/ui/runDialog.js
3544@@ -114,6 +114,7 @@ var RunDialog = new Lang.Class({
3545
3546 this._history = new History.HistoryManager({ gsettingsKey: HISTORY_KEY,
3547 entry: this._entryText });
3548+<<<<<<< js/ui/runDialog.js
3549 this._entryText.connect('key-press-event', (o, e) => {
3550 let symbol = e.get_key_symbol();
3551 if (symbol == Clutter.Return || symbol == Clutter.KP_Enter) {
3552@@ -126,6 +127,18 @@ var RunDialog = new Lang.Class({
3553
3554 return Clutter.EVENT_STOP;
3555 }
3556+=======
3557+ this._entryText.connect('activate', (o) => {
3558+ this.popModal();
3559+ this._run(o.get_text(),
3560+ Clutter.get_current_event().get_state() & Clutter.ModifierType.CONTROL_MASK);
3561+ if (!this._commandError ||
3562+ !this.pushModal())
3563+ this.close();
3564+ });
3565+ this._entryText.connect('key-press-event', (o, e) => {
3566+ let symbol = e.get_key_symbol();
3567+>>>>>>> js/ui/runDialog.js
3568 if (symbol == Clutter.Tab) {
3569 let text = o.get_text();
3570 let prefix;
3571diff --git a/js/ui/search.js b/js/ui/search.js
3572index 1fb54b4..59a4a11 100644
3573--- a/js/ui/search.js
3574+++ b/js/ui/search.js
3575@@ -192,6 +192,10 @@ var SearchResultsBase = new Lang.Class({
3576 },
3577
3578 clear() {
3579+<<<<<<< js/ui/search.js
3580+=======
3581+ this._cancellable.cancel();
3582+>>>>>>> js/ui/search.js
3583 for (let resultId in this._resultDisplays)
3584 this._resultDisplays[resultId].actor.destroy();
3585 this._resultDisplays = {};
3586@@ -225,6 +229,15 @@ var SearchResultsBase = new Lang.Class({
3587 this._cancellable.reset();
3588
3589 this.provider.getResultMetas(metasNeeded, metas => {
3590+<<<<<<< js/ui/search.js
3591+=======
3592+ if (this._cancellable.is_cancelled()) {
3593+ if (metas.length > 0)
3594+ log(`Search provider ${this.provider.id} returned results after the request was canceled`);
3595+ callback(false);
3596+ return;
3597+ }
3598+>>>>>>> js/ui/search.js
3599 if (metas.length != metasNeeded.length) {
3600 log('Wrong number of result metas returned by search provider ' + this.provider.id +
3601 ': expected ' + metasNeeded.length + ' but got ' + metas.length);
3602diff --git a/js/ui/status/keyboard.js b/js/ui/status/keyboard.js
3603index 3dce2c9..184a5cf 100644
3604--- a/js/ui/status/keyboard.js
3605+++ b/js/ui/status/keyboard.js
3606@@ -360,11 +360,22 @@ var InputSourceManager = new Lang.Class({
3607 this._settings.connect('per-window-changed', this._sourcesPerWindowChanged.bind(this));
3608 this._sourcesPerWindowChanged();
3609 this._disableIBus = false;
3610+<<<<<<< js/ui/status/keyboard.js
3611 },
3612
3613 reload() {
3614 this._keyboardManager.setKeyboardOptions(this._settings.keyboardOptions);
3615 this._inputSourcesChanged();
3616+=======
3617+ this._reloading = false;
3618+ },
3619+
3620+ reload() {
3621+ this._reloading = true;
3622+ this._keyboardManager.setKeyboardOptions(this._settings.keyboardOptions);
3623+ this._inputSourcesChanged();
3624+ this._reloading = false;
3625+>>>>>>> js/ui/status/keyboard.js
3626 },
3627
3628 _ibusReadyCallback(im, ready) {
3629@@ -458,7 +469,19 @@ var InputSourceManager = new Lang.Class({
3630 },
3631
3632 activateInputSource(is, interactive) {
3633+<<<<<<< js/ui/status/keyboard.js
3634 KeyboardManager.holdKeyboard();
3635+=======
3636+ // The focus changes during holdKeyboard/releaseKeyboard may trick
3637+ // the client into hiding UI containing the currently focused entry.
3638+ // So holdKeyboard/releaseKeyboard are not called when
3639+ // 'set-content-type' signal is received.
3640+ // E.g. Focusing on a password entry in a popup in Xorg Firefox
3641+ // will emit 'set-content-type' signal.
3642+ // https://gitlab.gnome.org/GNOME/gnome-shell/issues/391
3643+ if (!this._reloading)
3644+ KeyboardManager.holdKeyboard();
3645+>>>>>>> js/ui/status/keyboard.js
3646 this._keyboardManager.apply(is.xkbId);
3647
3648 // All the "xkb:..." IBus engines simply "echo" back symbols,
3649@@ -473,7 +496,14 @@ var InputSourceManager = new Lang.Class({
3650 else
3651 engine = 'xkb:us::eng';
3652
3653+<<<<<<< js/ui/status/keyboard.js
3654 this._ibusManager.setEngine(engine, KeyboardManager.releaseKeyboard);
3655+=======
3656+ if (!this._reloading)
3657+ this._ibusManager.setEngine(engine, KeyboardManager.releaseKeyboard);
3658+ else
3659+ this._ibusManager.setEngine(engine);
3660+>>>>>>> js/ui/status/keyboard.js
3661 this._currentInputSourceChanged(is);
3662
3663 if (interactive)
3664diff --git a/js/ui/status/network.js b/js/ui/status/network.js
3665index 54ed5ca..53a5c2e 100644
3666--- a/js/ui/status/network.js
3667+++ b/js/ui/status/network.js
3668@@ -419,12 +419,23 @@ var NMConnectionDevice = new Lang.Class({
3669 this._deactivateItem.actor.visible = this._device.state > NM.DeviceState.DISCONNECTED;
3670
3671 if (this._activeConnection == null) {
3672+<<<<<<< js/ui/status/network.js
3673 this._activeConnection = this._device.active_connection;
3674
3675 if (this._activeConnection) {
3676 ensureActiveConnectionProps(this._activeConnection, this._client);
3677 let item = this._connectionItems.get(this._activeConnection.connection.get_uuid());
3678 item.setActiveConnection(this._activeConnection);
3679+=======
3680+ let activeConnection = this._device.active_connection;
3681+ if (activeConnection && activeConnection.connection) {
3682+ let item = this._connectionItems.get(activeConnection.connection.get_uuid());
3683+ if (item) {
3684+ this._activeConnection = activeConnection;
3685+ ensureActiveConnectionProps(this._activeConnection, this._client);
3686+ item.setActiveConnection(this._activeConnection);
3687+ }
3688+>>>>>>> js/ui/status/network.js
3689 }
3690 }
3691
3692@@ -1944,6 +1955,10 @@ var NMApplet = new Lang.Class({
3693 this.indicators.visible = this._client.nm_running;
3694 this.menu.actor.visible = this._client.networking_enabled;
3695
3696+<<<<<<< js/ui/status/network.js
3697+=======
3698+ this._updateIcon();
3699+>>>>>>> js/ui/status/network.js
3700 this._syncConnectivity();
3701 },
3702
3703diff --git a/js/ui/status/system.js b/js/ui/status/system.js
3704index 68a0b4b..c1c92e8 100644
3705--- a/js/ui/status/system.js
3706+++ b/js/ui/status/system.js
3707@@ -58,6 +58,12 @@ var AltSwitcher = new Lang.Class({
3708 childToShow = this._standard;
3709 } else if (this._alternate.visible) {
3710 childToShow = this._alternate;
3711+<<<<<<< js/ui/status/system.js
3712+=======
3713+ } else {
3714+ this.actor.hide();
3715+ return;
3716+>>>>>>> js/ui/status/system.js
3717 }
3718
3719 let childShown = this.actor.get_child();
3720@@ -79,7 +85,11 @@ var AltSwitcher = new Lang.Class({
3721 global.sync_pointer();
3722 }
3723
3724+<<<<<<< js/ui/status/system.js
3725 this.actor.visible = (childToShow != null);
3726+=======
3727+ this.actor.show();
3728+>>>>>>> js/ui/status/system.js
3729 },
3730
3731 _onDestroy() {
3732diff --git a/js/ui/viewSelector.js b/js/ui/viewSelector.js
3733index 91bc222..832538a 100644
3734--- a/js/ui/viewSelector.js
3735+++ b/js/ui/viewSelector.js
3736@@ -311,6 +311,10 @@ var ViewSelector = new Lang.Class({
3737 },
3738
3739 hide() {
3740+<<<<<<< js/ui/viewSelector.js
3741+=======
3742+ this.reset();
3743+>>>>>>> js/ui/viewSelector.js
3744 this._workspacesDisplay.hide();
3745 },
3746
3747@@ -459,7 +463,15 @@ var ViewSelector = new Lang.Class({
3748 },
3749
3750 reset() {
3751+<<<<<<< js/ui/viewSelector.js
3752 global.stage.set_key_focus(null);
3753+=======
3754+ // Don't drop the key focus on Clutter's side if anything but the
3755+ // overview has pushed a modal (e.g. system modals when activated using
3756+ // the overview).
3757+ if (Main.modalCount <= 1)
3758+ global.stage.set_key_focus(null);
3759+>>>>>>> js/ui/viewSelector.js
3760
3761 this._entry.text = '';
3762
3763diff --git a/js/ui/windowManager.js b/js/ui/windowManager.js
3764index d450f35..c9b66a5 100644
3765--- a/js/ui/windowManager.js
3766+++ b/js/ui/windowManager.js
3767@@ -24,7 +24,11 @@ const EdgeDragAction = imports.ui.edgeDragAction;
3768 const CloseDialog = imports.ui.closeDialog;
3769 const SwitchMonitor = imports.ui.switchMonitor;
3770
3771+<<<<<<< js/ui/windowManager.js
3772 const SHELL_KEYBINDINGS_SCHEMA = 'org.gnome.shell.keybindings';
3773+=======
3774+var SHELL_KEYBINDINGS_SCHEMA = 'org.gnome.shell.keybindings';
3775+>>>>>>> js/ui/windowManager.js
3776 var MINIMIZE_WINDOW_ANIMATION_TIME = 0.2;
3777 var SHOW_WINDOW_ANIMATION_TIME = 0.15;
3778 var DIALOG_SHOW_WINDOW_ANIMATION_TIME = 0.1;
3779@@ -627,8 +631,13 @@ var AppSwitchAction = new Lang.Class({
3780
3781 if (this.get_n_current_points() == 3) {
3782 for (let i = 0; i < this.get_n_current_points(); i++) {
3783+<<<<<<< js/ui/windowManager.js
3784 [startX, startY] = this.get_press_coords(i);
3785 [x, y] = this.get_motion_coords(i);
3786+=======
3787+ let [startX, startY] = this.get_press_coords(i);
3788+ let [x, y] = this.get_motion_coords(i);
3789+>>>>>>> js/ui/windowManager.js
3790
3791 if (Math.abs(x - startX) > MOTION_THRESHOLD ||
3792 Math.abs(y - startY) > MOTION_THRESHOLD)
3793@@ -1173,6 +1182,13 @@ var WindowManager = new Lang.Class({
3794 yScale = geom.height / actor.height;
3795 } else {
3796 let monitor = Main.layoutManager.monitors[actor.meta_window.get_monitor()];
3797+<<<<<<< js/ui/windowManager.js
3798+=======
3799+ if (!monitor) {
3800+ this._minimizeWindowDone();
3801+ return;
3802+ }
3803+>>>>>>> js/ui/windowManager.js
3804 xDest = monitor.x;
3805 yDest = monitor.y;
3806 if (Clutter.get_default_text_direction() == Clutter.TextDirection.RTL)
3807@@ -1248,6 +1264,14 @@ var WindowManager = new Lang.Class({
3808 geom.height / actor.height);
3809 } else {
3810 let monitor = Main.layoutManager.monitors[actor.meta_window.get_monitor()];
3811+<<<<<<< js/ui/windowManager.js
3812+=======
3813+ if (!monitor) {
3814+ actor.show();
3815+ this._unminimizeWindowDone();
3816+ return;
3817+ }
3818+>>>>>>> js/ui/windowManager.js
3819 actor.set_position(monitor.x, monitor.y);
3820 if (Clutter.get_default_text_direction() == Clutter.TextDirection.RTL)
3821 actor.x += monitor.width;
3822diff --git a/js/ui/windowMenu.js b/js/ui/windowMenu.js
3823index f0e564b..cb6e795 100644
3824--- a/js/ui/windowMenu.js
3825+++ b/js/ui/windowMenu.js
3826@@ -128,11 +128,18 @@ var WindowMenu = new Lang.Class({
3827
3828 let screen = global.screen;
3829 let nMonitors = screen.get_n_monitors();
3830+<<<<<<< js/ui/windowMenu.js
3831 if (nMonitors > 1) {
3832 this.addMenuItem(new PopupMenu.PopupSeparatorMenuItem());
3833
3834 let monitorIndex = window.get_monitor();
3835
3836+=======
3837+ let monitorIndex = window.get_monitor();
3838+ if (nMonitors > 1 && monitorIndex >= 0) {
3839+ this.addMenuItem(new PopupMenu.PopupSeparatorMenuItem());
3840+
3841+>>>>>>> js/ui/windowMenu.js
3842 let dir = Meta.ScreenDirection.UP;
3843 let upMonitorIndex =
3844 screen.get_monitor_neighbor_index(monitorIndex, dir);
3845diff --git a/js/ui/workspace.js b/js/ui/workspace.js
3846index 1e121b7..bc2bb2f 100644
3847--- a/js/ui/workspace.js
3848+++ b/js/ui/workspace.js
3849@@ -137,8 +137,15 @@ var WindowClone = new Lang.Class({
3850 this._dragSlot = [0, 0, 0, 0];
3851 this._stackAbove = null;
3852
3853+<<<<<<< js/ui/workspace.js
3854 this._windowClone._updateId = this.metaWindow.connect('size-changed',
3855 this._onRealWindowSizeChanged.bind(this));
3856+=======
3857+ this._windowClone._sizeChangedId = this.metaWindow.connect('size-changed',
3858+ this._onMetaWindowSizeChanged.bind(this));
3859+ this._windowClone._posChangedId = this.metaWindow.connect('position-changed',
3860+ this._computeBoundingBox.bind(this));
3861+>>>>>>> js/ui/workspace.js
3862 this._windowClone._destroyId =
3863 this.realWindow.connect('destroy', () => {
3864 // First destroy the clone and then destroy everything
3865@@ -206,8 +213,12 @@ var WindowClone = new Lang.Class({
3866
3867 addAttachedDialog(win) {
3868 this._doAddAttachedDialog(win, win.get_compositor_private());
3869+<<<<<<< js/ui/workspace.js
3870 this._computeBoundingBox();
3871 this.emit('size-changed');
3872+=======
3873+ this._onMetaWindowSizeChanged();
3874+>>>>>>> js/ui/workspace.js
3875 },
3876
3877 hasAttachedDialogs() {
3878@@ -216,6 +227,7 @@ var WindowClone = new Lang.Class({
3879
3880 _doAddAttachedDialog(metaWin, realWin) {
3881 let clone = new Clutter.Clone({ source: realWin });
3882+<<<<<<< js/ui/workspace.js
3883 clone._updateId = metaWin.connect('size-changed', () => {
3884 this._computeBoundingBox();
3885 this.emit('size-changed');
3886@@ -225,6 +237,16 @@ var WindowClone = new Lang.Class({
3887
3888 this._computeBoundingBox();
3889 this.emit('size-changed');
3890+=======
3891+ clone._sizeChangedId = metaWin.connect('size-changed',
3892+ this._onMetaWindowSizeChanged.bind(this));
3893+ clone._posChangedId = metaWin.connect('position-changed',
3894+ this._onMetaWindowSizeChanged.bind(this));
3895+ clone._destroyId = realWin.connect('destroy', () => {
3896+ clone.destroy();
3897+
3898+ this._onMetaWindowSizeChanged();
3899+>>>>>>> js/ui/workspace.js
3900 });
3901 this.actor.add_child(clone);
3902 },
3903@@ -321,12 +343,21 @@ var WindowClone = new Lang.Class({
3904 else
3905 realWindow = child.source;
3906
3907+<<<<<<< js/ui/workspace.js
3908 realWindow.meta_window.disconnect(child._updateId);
3909+=======
3910+ realWindow.meta_window.disconnect(child._sizeChangedId);
3911+ realWindow.meta_window.disconnect(child._posChangedId);
3912+>>>>>>> js/ui/workspace.js
3913 realWindow.disconnect(child._destroyId);
3914 });
3915 },
3916
3917+<<<<<<< js/ui/workspace.js
3918 _onRealWindowSizeChanged() {
3919+=======
3920+ _onMetaWindowSizeChanged() {
3921+>>>>>>> js/ui/workspace.js
3922 this._computeBoundingBox();
3923 this.emit('size-changed');
3924 },
3925@@ -469,7 +500,10 @@ var WindowOverlay = new Lang.Class({
3926 this._windowAddedId = 0;
3927
3928 button.hide();
3929+<<<<<<< js/ui/workspace.js
3930 title.hide();
3931+=======
3932+>>>>>>> js/ui/workspace.js
3933
3934 this.title = title;
3935 this.closeButton = button;
3936@@ -544,12 +578,19 @@ var WindowOverlay = new Lang.Class({
3937 let titleX = cloneX + (cloneWidth - title.width) / 2;
3938 let titleY = cloneY + cloneHeight - (title.height - this.borderSize) / 2;
3939
3940+<<<<<<< js/ui/workspace.js
3941 if (animate) {
3942 this._animateOverlayActor(title, Math.floor(titleX), Math.floor(titleY), title.width);
3943 } else {
3944 title.width = title.width;
3945 title.set_position(Math.floor(titleX), Math.floor(titleY));
3946 }
3947+=======
3948+ if (animate)
3949+ this._animateOverlayActor(title, Math.floor(titleX), Math.floor(titleY));
3950+ else
3951+ title.set_position(Math.floor(titleX), Math.floor(titleY));
3952+>>>>>>> js/ui/workspace.js
3953
3954 let borderX = cloneX - this.borderSize;
3955 let borderY = cloneY - this.borderSize;
3956@@ -568,10 +609,19 @@ var WindowOverlay = new Lang.Class({
3957 _animateOverlayActor(actor, x, y, width, height) {
3958 let params = { x: x,
3959 y: y,
3960+<<<<<<< js/ui/workspace.js
3961 width: width,
3962 time: Overview.ANIMATION_TIME,
3963 transition: 'easeOutQuad' };
3964
3965+=======
3966+ time: Overview.ANIMATION_TIME,
3967+ transition: 'easeOutQuad' };
3968+
3969+ if (width !== undefined)
3970+ params.width = width;
3971+
3972+>>>>>>> js/ui/workspace.js
3973 if (height !== undefined)
3974 params.height = height;
3975
3976@@ -1431,6 +1481,7 @@ var Workspace = new Lang.Class({
3977 _doRemoveWindow(metaWin) {
3978 let win = metaWin.get_compositor_private();
3979
3980+<<<<<<< js/ui/workspace.js
3981 // find the position of the window in our list
3982 let index = this._lookupIndex (metaWin);
3983
3984@@ -1459,6 +1510,28 @@ var Workspace = new Lang.Class({
3985 }
3986 clone.destroy();
3987
3988+=======
3989+ let clone = this._removeWindowClone(metaWin);
3990+
3991+ if (clone) {
3992+ // If metaWin.get_compositor_private() returned non-NULL, that
3993+ // means the window still exists (and is just being moved to
3994+ // another workspace or something), so set its overviewHint
3995+ // accordingly. (If it returned NULL, then the window is being
3996+ // destroyed; we'd like to animate this, but it's too late at
3997+ // this point.)
3998+ if (win) {
3999+ let [stageX, stageY] = clone.actor.get_transformed_position();
4000+ let [stageWidth, stageHeight] = clone.actor.get_transformed_size();
4001+ win._overviewHint = {
4002+ x: stageX,
4003+ y: stageY,
4004+ scale: stageWidth / clone.actor.width
4005+ };
4006+ }
4007+ clone.destroy();
4008+ }
4009+>>>>>>> js/ui/workspace.js
4010
4011 // We need to reposition the windows; to avoid shuffling windows
4012 // around while the user is interacting with the workspace, we delay
4013@@ -1514,7 +1587,11 @@ var Workspace = new Lang.Class({
4014 if (metaWin.is_attached_dialog()) {
4015 let parent = metaWin.get_transient_for();
4016 while (parent.is_attached_dialog())
4017+<<<<<<< js/ui/workspace.js
4018 parent = metaWin.get_transient_for();
4019+=======
4020+ parent = parent.get_transient_for();
4021+>>>>>>> js/ui/workspace.js
4022
4023 let idx = this._lookupIndex (parent);
4024 if (idx < 0) {
4025@@ -1848,6 +1925,12 @@ var Workspace = new Lang.Class({
4026 clone.connect('size-changed', () => {
4027 this._recalculateWindowPositions(WindowPositionFlags.NONE);
4028 });
4029+<<<<<<< js/ui/workspace.js
4030+=======
4031+ clone.actor.connect('destroy', () => {
4032+ this._removeWindowClone(clone.metaWindow);
4033+ });
4034+>>>>>>> js/ui/workspace.js
4035
4036 this.actor.add_actor(clone.actor);
4037
4038@@ -1869,6 +1952,20 @@ var Workspace = new Lang.Class({
4039 return [clone, overlay];
4040 },
4041
4042+<<<<<<< js/ui/workspace.js
4043+=======
4044+ _removeWindowClone(metaWin) {
4045+ // find the position of the window in our list
4046+ let index = this._lookupIndex (metaWin);
4047+
4048+ if (index == -1)
4049+ return null;
4050+
4051+ this._windowOverlays.splice(index, 1);
4052+ return this._windows.splice(index, 1).pop();
4053+ },
4054+
4055+>>>>>>> js/ui/workspace.js
4056 _onShowOverlayClose(windowOverlay) {
4057 for (let i = 0; i < this._windowOverlays.length; i++) {
4058 let overlay = this._windowOverlays[i];
4059diff --git a/js/ui/workspaceThumbnail.js b/js/ui/workspaceThumbnail.js
4060index 7d5d2c0..0b55bea 100644
4061--- a/js/ui/workspaceThumbnail.js
4062+++ b/js/ui/workspaceThumbnail.js
4063@@ -31,7 +31,11 @@ var WORKSPACE_CUT_SIZE = 10;
4064
4065 var WORKSPACE_KEEP_ALIVE_TIME = 100;
4066
4067+<<<<<<< js/ui/workspaceThumbnail.js
4068 const OVERRIDE_SCHEMA = 'org.gnome.shell.overrides';
4069+=======
4070+var OVERRIDE_SCHEMA = 'org.gnome.shell.overrides';
4071+>>>>>>> js/ui/workspaceThumbnail.js
4072
4073 /* A layout manager that requests size only for primary_actor, but then allocates
4074 all using a fixed layout */
4075@@ -68,7 +72,11 @@ var WindowClone = new Lang.Class({
4076 this.realWindow = realWindow;
4077 this.metaWindow = realWindow.meta_window;
4078
4079+<<<<<<< js/ui/workspaceThumbnail.js
4080 this.clone._updateId = this.metaWindow.connect('position-changed',
4081+=======
4082+ this.clone._updateId = this.realWindow.connect('notify::position',
4083+>>>>>>> js/ui/workspaceThumbnail.js
4084 this._onPositionChanged.bind(this));
4085 this.clone._destroyId = this.realWindow.connect('destroy', () => {
4086 // First destroy the clone and then destroy everything
4087@@ -153,7 +161,11 @@ var WindowClone = new Lang.Class({
4088 let clone = new Clutter.Clone({ source: realDialog });
4089 this._updateDialogPosition(realDialog, clone);
4090
4091+<<<<<<< js/ui/workspaceThumbnail.js
4092 clone._updateId = metaDialog.connect('position-changed', dialog => {
4093+=======
4094+ clone._updateId = realDialog.connect('notify::position', dialog => {
4095+>>>>>>> js/ui/workspaceThumbnail.js
4096 this._updateDialogPosition(dialog, clone);
4097 });
4098 clone._destroyId = realDialog.connect('destroy', () => {
4099@@ -171,7 +183,10 @@ var WindowClone = new Lang.Class({
4100 },
4101
4102 _onPositionChanged() {
4103+<<<<<<< js/ui/workspaceThumbnail.js
4104 let rect = this.metaWindow.get_frame_rect();
4105+=======
4106+>>>>>>> js/ui/workspaceThumbnail.js
4107 this.actor.set_position(this.realWindow.x, this.realWindow.y);
4108 },
4109
4110@@ -179,7 +194,11 @@ var WindowClone = new Lang.Class({
4111 this.actor.get_children().forEach(child => {
4112 let realWindow = child.source;
4113
4114+<<<<<<< js/ui/workspaceThumbnail.js
4115 realWindow.meta_window.disconnect(child._updateId);
4116+=======
4117+ realWindow.disconnect(child._updateId);
4118+>>>>>>> js/ui/workspaceThumbnail.js
4119 realWindow.disconnect(child._destroyId);
4120 });
4121 },
4122@@ -241,7 +260,11 @@ var WindowClone = new Lang.Class({
4123 Signals.addSignalMethods(WindowClone.prototype);
4124
4125
4126+<<<<<<< js/ui/workspaceThumbnail.js
4127 const ThumbnailState = {
4128+=======
4129+var ThumbnailState = {
4130+>>>>>>> js/ui/workspaceThumbnail.js
4131 NEW : 0,
4132 ANIMATING_IN : 1,
4133 NORMAL: 2,
4134@@ -275,8 +298,13 @@ var WorkspaceThumbnail = new Lang.Class({
4135
4136 this._createBackground();
4137
4138+<<<<<<< js/ui/workspaceThumbnail.js
4139 let monitor = Main.layoutManager.primaryMonitor;
4140 this.setPorthole(monitor.x, monitor.y, monitor.width, monitor.height);
4141+=======
4142+ let workArea = Main.layoutManager.getWorkAreaForMonitor(this.monitorIndex);
4143+ this.setPorthole(workArea.x, workArea.y, workArea.width, workArea.height);
4144+>>>>>>> js/ui/workspaceThumbnail.js
4145
4146 let windows = global.get_window_actors().filter(actor => {
4147 let win = actor.meta_window;
4148@@ -321,8 +349,11 @@ var WorkspaceThumbnail = new Lang.Class({
4149 },
4150
4151 setPorthole(x, y, width, height) {
4152+<<<<<<< js/ui/workspaceThumbnail.js
4153 this._portholeX = x;
4154 this._portholeY = y;
4155+=======
4156+>>>>>>> js/ui/workspaceThumbnail.js
4157 this.actor.set_size(width, height);
4158 this._contents.set_position(-x, -y);
4159 },
4160@@ -374,6 +405,7 @@ var WorkspaceThumbnail = new Lang.Class({
4161 },
4162
4163 _doRemoveWindow(metaWin) {
4164+<<<<<<< js/ui/workspaceThumbnail.js
4165 let win = metaWin.get_compositor_private();
4166
4167 // find the position of the window in our list
4168@@ -386,6 +418,11 @@ var WorkspaceThumbnail = new Lang.Class({
4169 this._windows.splice(index, 1);
4170
4171 clone.destroy();
4172+=======
4173+ let clone = this._removeWindowClone(metaWin);
4174+ if (clone)
4175+ clone.destroy();
4176+>>>>>>> js/ui/workspaceThumbnail.js
4177 },
4178
4179 _doAddWindow(metaWin) {
4180@@ -428,7 +465,11 @@ var WorkspaceThumbnail = new Lang.Class({
4181 } else if (metaWin.is_attached_dialog()) {
4182 let parent = metaWin.get_transient_for();
4183 while (parent.is_attached_dialog())
4184+<<<<<<< js/ui/workspaceThumbnail.js
4185 parent = metaWin.get_transient_for();
4186+=======
4187+ parent = parent.get_transient_for();
4188+>>>>>>> js/ui/workspaceThumbnail.js
4189
4190 let idx = this._lookupIndex (parent);
4191 if (idx < 0) {
4192@@ -537,6 +578,12 @@ var WorkspaceThumbnail = new Lang.Class({
4193 clone.connect('drag-end', () => {
4194 Main.overview.endWindowDrag(clone.metaWindow);
4195 });
4196+<<<<<<< js/ui/workspaceThumbnail.js
4197+=======
4198+ clone.actor.connect('destroy', () => {
4199+ this._removeWindowClone(clone.metaWindow);
4200+ });
4201+>>>>>>> js/ui/workspaceThumbnail.js
4202 this._contents.add_actor(clone.actor);
4203
4204 if (this._windows.length == 0)
4205@@ -549,6 +596,19 @@ var WorkspaceThumbnail = new Lang.Class({
4206 return clone;
4207 },
4208
4209+<<<<<<< js/ui/workspaceThumbnail.js
4210+=======
4211+ _removeWindowClone(metaWin) {
4212+ // find the position of the window in our list
4213+ let index = this._lookupIndex (metaWin);
4214+
4215+ if (index == -1)
4216+ return null;
4217+
4218+ return this._windows.splice(index, 1).pop();
4219+ },
4220+
4221+>>>>>>> js/ui/workspaceThumbnail.js
4222 activate(time) {
4223 if (this.state > ThumbnailState.NORMAL)
4224 return;
4225@@ -1159,7 +1219,11 @@ var ThumbnailsBox = new Lang.Class({
4226 // The "porthole" is the portion of the screen that we show in the
4227 // workspaces
4228 _ensurePorthole() {
4229+<<<<<<< js/ui/workspaceThumbnail.js
4230 if (!Main.layoutManager.primaryMonitor)
4231+=======
4232+ if (!Main.layoutManager.primaryMonitor || !Main.overview.visible)
4233+>>>>>>> js/ui/workspaceThumbnail.js
4234 return false;
4235
4236 if (!this._porthole)
4237diff --git a/js/ui/workspacesView.js b/js/ui/workspacesView.js
4238index 563e43d..28b6d2e 100644
4239--- a/js/ui/workspacesView.js
4240+++ b/js/ui/workspacesView.js
4241@@ -470,6 +470,10 @@ var WorkspacesDisplay = new Lang.Class({
4242 this._switchWorkspaceNotifyId = 0;
4243
4244 this._notifyOpacityId = 0;
4245+<<<<<<< js/ui/workspacesView.js
4246+=======
4247+ this._restackedNotifyId = 0;
4248+>>>>>>> js/ui/workspacesView.js
4249 this._scrollEventId = 0;
4250 this._keyPressEventId = 0;
4251
4252diff --git a/meson.build b/meson.build
4253index bfc2ff7..298dbc3 100644
4254--- a/meson.build
4255+++ b/meson.build
4256@@ -1,5 +1,9 @@
4257 project('gnome-shell', 'c',
4258+<<<<<<< meson.build
4259 version: '3.28.1',
4260+=======
4261+ version: '3.28.3',
4262+>>>>>>> meson.build
4263 meson_version: '>= 0.42.0',
4264 license: 'GPLv2+'
4265 )
4266diff --git a/po/af.po b/po/af.po
4267index 72ecaa6..5b848c2 100644
4268--- a/po/af.po
4269+++ b/po/af.po
4270@@ -3,6 +3,7 @@
4271 # This file is distributed under the same license as the gnome-shell package.
4272 # F Wolff <friedel@translate.org.za>, 2011, 2013, 2014, 2015, 2016.
4273 # Dawid Loubser <dawid.loubser@ibi.co.za>, 2013.
4274+<<<<<<< po/af.po
4275 msgid ""
4276 msgstr ""
4277 "Project-Id-Version: gnome-shell master\n"
4278@@ -12,11 +13,24 @@ msgstr ""
4279 "PO-Revision-Date: 2016-02-29 19:51+0200\n"
4280 "Last-Translator: F Wolff <friedel@translate.org.za>\n"
4281 "Language-Team: translate-discuss-af@lists.sourceforge.net\n"
4282+=======
4283+# Pieter Schoeman <pieter@sonbesie.co.za>, 2017.
4284+#
4285+msgid ""
4286+msgstr ""
4287+"Project-Id-Version: gnome-shell master\n"
4288+"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-shell/issues\n"
4289+"POT-Creation-Date: 2018-01-30 15:45+0000\n"
4290+"PO-Revision-Date: 2018-02-10 11:12+0200\n"
4291+"Last-Translator: Pieter Schalk Schoeman <pieter@sonbesie.co.za>\n"
4292+"Language-Team: Afrikaans <pieter@sonbesie.co.za>\n"
4293+>>>>>>> po/af.po
4294 "Language: af\n"
4295 "MIME-Version: 1.0\n"
4296 "Content-Type: text/plain; charset=UTF-8\n"
4297 "Content-Transfer-Encoding: 8bit\n"
4298 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
4299+<<<<<<< po/af.po
4300 "X-Generator: Virtaal 1.0.0-beta1\n"
4301 "X-DamnedLies-Scope: partial\n"
4302 "X-Project-Style: gnome\n"
4303@@ -62,12 +76,64 @@ msgid "Window management and application launching"
4304 msgstr "Vensterbestuur en toepassinglansering"
4305
4306 #: ../data/org.gnome.shell.gschema.xml.in.in.h:1
4307+=======
4308+"X-Generator: Poedit 2.0.3\n"
4309+"X-DamnedLies-Scope: partial\n"
4310+"X-Project-Style: gnome\n"
4311+
4312+#: data/50-gnome-shell-system.xml:6
4313+msgid "System"
4314+msgstr "Stelsel"
4315+
4316+#: data/50-gnome-shell-system.xml:9
4317+msgid "Show the notification list"
4318+msgstr "Wys die lys van kennisgewings"
4319+
4320+#: data/50-gnome-shell-system.xml:12
4321+msgid "Focus the active notification"
4322+msgstr "Fokus op die aktiewe kennisgewing"
4323+
4324+#: data/50-gnome-shell-system.xml:15
4325+msgid "Show the overview"
4326+msgstr "Wys die oorsig"
4327+
4328+#: data/50-gnome-shell-system.xml:18
4329+msgid "Show all applications"
4330+msgstr "Wys alle toepassings"
4331+
4332+#: data/50-gnome-shell-system.xml:21
4333+msgid "Open the application menu"
4334+msgstr "Open die toepassingkieslys"
4335+
4336+#: data/gnome-shell-extension-prefs.desktop.in.in:4
4337+#: js/extensionPrefs/main.js:152
4338+msgid "Shell Extensions"
4339+msgstr "Shell uitbreidings"
4340+
4341+#: data/gnome-shell-extension-prefs.desktop.in.in:5
4342+msgid "Configure GNOME Shell Extensions"
4343+msgstr "Stel GNOME Shell-uitbreidings op"
4344+
4345+#: data/org.gnome.Shell.desktop.in.in:4
4346+msgid "GNOME Shell"
4347+msgstr "GNOME Shell"
4348+
4349+#: data/org.gnome.Shell.desktop.in.in:5
4350+msgid "Window management and application launching"
4351+msgstr "Vensterbestuur en toepassinglansering"
4352+
4353+#: data/org.gnome.shell.gschema.xml.in:6
4354+>>>>>>> po/af.po
4355 msgid "Enable internal tools useful for developers and testers from Alt-F2"
4356 msgstr ""
4357 "Aktiveer interne gereedskap wat nuttig is vir ontwikkelaars en toetsers "
4358 "vanaf Alt-F2"
4359
4360+<<<<<<< po/af.po
4361 #: ../data/org.gnome.shell.gschema.xml.in.in.h:2
4362+=======
4363+#: data/org.gnome.shell.gschema.xml.in:9
4364+>>>>>>> po/af.po
4365 msgid ""
4366 "Allows access to internal debugging and monitoring tools using the Alt-F2 "
4367 "dialog."
4368@@ -75,11 +141,19 @@ msgstr ""
4369 "Laat toegang na interne ontfout- en moniteringsgereedskap toe deur die Alt-"
4370 "F2-dialoog te gebruik."
4371
4372+<<<<<<< po/af.po
4373 #: ../data/org.gnome.shell.gschema.xml.in.in.h:3
4374 msgid "UUIDs of extensions to enable"
4375 msgstr "UUID's van uitbreidings om te aktiveer"
4376
4377 #: ../data/org.gnome.shell.gschema.xml.in.in.h:4
4378+=======
4379+#: data/org.gnome.shell.gschema.xml.in:16
4380+msgid "UUIDs of extensions to enable"
4381+msgstr "UUID's van uitbreidings om te aktiveer"
4382+
4383+#: data/org.gnome.shell.gschema.xml.in:17
4384+>>>>>>> po/af.po
4385 msgid ""
4386 "GNOME Shell extensions have a UUID property; this key lists extensions which "
4387 "should be loaded. Any extension that wants to be loaded needs to be in this "
4388@@ -91,11 +165,46 @@ msgstr ""
4389 "moet in hierdie lys verskyn. U kan ook hierdie lys manipuleer met die "
4390 "EnableExtension- en DisableExtension-DBus-metodes op org.gnome.Shell."
4391
4392+<<<<<<< po/af.po
4393 #: ../data/org.gnome.shell.gschema.xml.in.in.h:7
4394 msgid "List of desktop file IDs for favorite applications"
4395 msgstr "Lys van werkarealêer-ID's vir gunstelingtoepassings"
4396
4397 #: ../data/org.gnome.shell.gschema.xml.in.in.h:8
4398+=======
4399+#: data/org.gnome.shell.gschema.xml.in:26
4400+msgid "Disable user extensions"
4401+msgstr "Skakel gebruikers uitbreidings af"
4402+
4403+#: data/org.gnome.shell.gschema.xml.in:27
4404+msgid ""
4405+"Disable all extensions the user has enabled without affecting the “enabled-"
4406+"extension” setting."
4407+msgstr ""
4408+"Skakel alle uitbreidings wat die gebruiker aangeskakel het af sonder om die "
4409+"\"aangeskakelde-uitbreiding\" instelling te verander."
4410+
4411+#: data/org.gnome.shell.gschema.xml.in:34
4412+msgid "Disables the validation of extension version compatibility"
4413+msgstr "Skakel die validasie van uitbreidings weergawe versoenbaarheid af"
4414+
4415+#: data/org.gnome.shell.gschema.xml.in:35
4416+msgid ""
4417+"GNOME Shell will only load extensions that claim to support the current "
4418+"running version. Enabling this option will disable this check and try to "
4419+"load all extensions regardless of the versions they claim to support."
4420+msgstr ""
4421+"GNOME Shell sal slegs uitbreidings laai wat die huidig geïnstalleerde "
4422+"weergawe ondersteun. Deur die opsie te aktiveer sal die toets afgeskakel "
4423+"word en alle uitbreidings sal gelaai kan word ongeag of hulle die weergawe "
4424+"ondersteun of nie."
4425+
4426+#: data/org.gnome.shell.gschema.xml.in:43
4427+msgid "List of desktop file IDs for favorite applications"
4428+msgstr "Lys van werkarealêer-ID's vir gunstelingtoepassings"
4429+
4430+#: data/org.gnome.shell.gschema.xml.in:44
4431+>>>>>>> po/af.po
4432 msgid ""
4433 "The applications corresponding to these identifiers will be displayed in the "
4434 "favorites area."
4435@@ -103,6 +212,7 @@ msgstr ""
4436 "Die toepassings wat ooreenstem met dié identifiseerders sal in die "
4437 "gunstelinge-area vertoon word."
4438
4439+<<<<<<< po/af.po
4440 #: ../data/org.gnome.shell.gschema.xml.in.in.h:11
4441 msgid "History for command (Alt-F2) dialog"
4442 msgstr "Geskiedenis vir die opdrag-dialoogvenster (Alt-F2)"
4443@@ -119,28 +229,67 @@ msgstr "Wys altyd die 'Meld af'-kieslysitem in die gebruikerkieslys."
4444 #: ../data/org.gnome.shell.gschema.xml.in.in.h:15
4445 msgid ""
4446 "This key overrides the automatic hiding of the 'Log out' menu item in single-"
4447+=======
4448+#: data/org.gnome.shell.gschema.xml.in:51
4449+msgid "App Picker View"
4450+msgstr "Toepassingkieser oorsig"
4451+
4452+#: data/org.gnome.shell.gschema.xml.in:52
4453+msgid "Index of the currently selected view in the application picker."
4454+msgstr "Indeks van die huidige aansig in die toepassing kieser."
4455+
4456+#: data/org.gnome.shell.gschema.xml.in:58
4457+msgid "History for command (Alt-F2) dialog"
4458+msgstr "Geskiedenis vir die opdrag-dialoogvenster (Alt-F2)"
4459+
4460+#. Translators: looking glass is a debugger and inspector tool, see https://wiki.gnome.org/Projects/GnomeShell/LookingGlass
4461+#: data/org.gnome.shell.gschema.xml.in:63
4462+msgid "History for the looking glass dialog"
4463+msgstr "Geskiedenis vir die \"looking glass\"-dialoogvenster"
4464+
4465+#: data/org.gnome.shell.gschema.xml.in:67
4466+msgid "Always show the “Log out” menu item in the user menu."
4467+msgstr "Wys altyd die 'Meld af' opsie in die gebruikerkieslys."
4468+
4469+#: data/org.gnome.shell.gschema.xml.in:68
4470+msgid ""
4471+"This key overrides the automatic hiding of the “Log out” menu item in single-"
4472+>>>>>>> po/af.po
4473 "user, single-session situations."
4474 msgstr ""
4475 "Hierdie sleutel oorheers die outomatiese wegsteek van die 'Meld af'-"
4476 "kieslysitem in enkelgebruiker-, enkelsessie-situasies."
4477
4478+<<<<<<< po/af.po
4479 #: ../data/org.gnome.shell.gschema.xml.in.in.h:16
4480+=======
4481+#: data/org.gnome.shell.gschema.xml.in:75
4482+>>>>>>> po/af.po
4483 msgid ""
4484 "Whether to remember password for mounting encrypted or remote filesystems"
4485 msgstr ""
4486 "Of wagwoord onthou moet word vir die heg van geënkripteerde of afgeleë "
4487 "lêerstelsels"
4488
4489+<<<<<<< po/af.po
4490 #: ../data/org.gnome.shell.gschema.xml.in.in.h:17
4491 msgid ""
4492 "The shell will request a password when an encrypted device or a remote "
4493 "filesystem is mounted. If the password can be saved for future use a "
4494 "'Remember Password' checkbox will be present. This key sets the default "
4495+=======
4496+#: data/org.gnome.shell.gschema.xml.in:76
4497+msgid ""
4498+"The shell will request a password when an encrypted device or a remote "
4499+"filesystem is mounted. If the password can be saved for future use a "
4500+"“Remember Password” checkbox will be present. This key sets the default "
4501+>>>>>>> po/af.po
4502 "state of the checkbox."
4503 msgstr ""
4504 "'n Wagwoord sal versoek word wanneer 'n geënkripteerde toestel of afgeleë "
4505 "lêerstelsel geheg word. As die wagwoord vir toekomstige gebruik gestoor kan "
4506 "word sal 'n 'Onthou wagwoord'-keuseblokkie teenwoordig wees. Hierdie sleutel "
4507+<<<<<<< po/af.po
4508 "stel die verstektoestand van die keuseblokkie."
4509
4510 #: ../data/org.gnome.shell.gschema.xml.in.in.h:20
4511@@ -221,12 +370,138 @@ msgid "Attach modal dialog to the parent window"
4512 msgstr "Heg modale dialoogvenster vas aan die ouervenster"
4513
4514 #: ../data/org.gnome.shell.gschema.xml.in.in.h:41
4515+=======
4516+"stel die verstektoestand van die keuseblokkie stel."
4517+
4518+#: data/org.gnome.shell.gschema.xml.in:85
4519+msgid ""
4520+"Whether the default Bluetooth adapter had set up devices associated to it"
4521+msgstr ""
4522+"Of die verstek Bluetooth verwerker opgestelde toestelle het wat daarmee "
4523+"verband hou"
4524+
4525+#: data/org.gnome.shell.gschema.xml.in:86
4526+msgid ""
4527+"The shell will only show a Bluetooth menu item if a Bluetooth adapter is "
4528+"powered, or if there were devices set up associated with the default "
4529+"adapter. This will be reset if the default adapter is ever seen not to have "
4530+"devices associated to it."
4531+msgstr ""
4532+"Die shell sal slegs 'n Bluetooth-kieslysitem wys as 'n Bluetooth-verwerker "
4533+"aangeskakel is, of as daar toestelle ingestel is wat verband hou met die "
4534+"verstekverwerker. Dit sal herstel word as die verstekverwerker ooit gesien "
4535+"word om nie toestelle wat daarmee verband hou, te hê nie."
4536+
4537+#: data/org.gnome.shell.gschema.xml.in:101
4538+msgid "Keybinding to open the application menu"
4539+msgstr "Sleutelbinding om die toepassingskieslys oop te maak"
4540+
4541+#: data/org.gnome.shell.gschema.xml.in:102
4542+msgid "Keybinding to open the application menu."
4543+msgstr "Sleutelbinding om die toepassingskieslys oop te maak."
4544+
4545+#: data/org.gnome.shell.gschema.xml.in:108
4546+msgid "Keybinding to open the “Show Applications” view"
4547+msgstr "Sleutelkortpad om die \"Vertoon toepassings\"-aansig oop te maak"
4548+
4549+#: data/org.gnome.shell.gschema.xml.in:109
4550+msgid ""
4551+"Keybinding to open the “Show Applications” view of the Activities Overview."
4552+msgstr ""
4553+"Sleutelkortpad om die \"Vertoon toepassings\"-aansig van die Aktiwiteite-"
4554+"oorsig oop te maak."
4555+
4556+#: data/org.gnome.shell.gschema.xml.in:116
4557+msgid "Keybinding to open the overview"
4558+msgstr "Sleutelbinding om die oorsig oop te maak"
4559+
4560+#: data/org.gnome.shell.gschema.xml.in:117
4561+msgid "Keybinding to open the Activities Overview."
4562+msgstr "Sleutelbinding om die Aktiwiteite-oorsig oop te maak."
4563+
4564+#: data/org.gnome.shell.gschema.xml.in:123
4565+msgid "Keybinding to toggle the visibility of the notification list"
4566+msgstr "Sleutelbinding om die sigbaarheid van die kennisgewinglys te swik"
4567+
4568+#: data/org.gnome.shell.gschema.xml.in:124
4569+msgid "Keybinding to toggle the visibility of the notification list."
4570+msgstr "Sleutelbinding om die sigbaarheid van die kennisgewinglys te swik."
4571+
4572+#: data/org.gnome.shell.gschema.xml.in:130
4573+msgid "Keybinding to focus the active notification"
4574+msgstr "Sleutelbinding om die aktiewe kennisgewing te fokus"
4575+
4576+#: data/org.gnome.shell.gschema.xml.in:131
4577+msgid "Keybinding to focus the active notification."
4578+msgstr "Sleutelbinding om die aktiewe kennisgewing te fokus."
4579+
4580+#: data/org.gnome.shell.gschema.xml.in:137
4581+msgid ""
4582+"Keybinding that pauses and resumes all running tweens, for debugging purposes"
4583+msgstr ""
4584+"Sleutelkortpaaie wat alle uitvoerende tweens stop en weer begin vir "
4585+"ontvoutings doeleindes"
4586+
4587+#: data/org.gnome.shell.gschema.xml.in:146
4588+msgid "Which keyboard to use"
4589+msgstr "Watter sleutelbord om te gebruik"
4590+
4591+#: data/org.gnome.shell.gschema.xml.in:147
4592+msgid "The type of keyboard to use."
4593+msgstr "Die tipe sleutelbord om te gebruik."
4594+
4595+#: data/org.gnome.shell.gschema.xml.in:158
4596+#: data/org.gnome.shell.gschema.xml.in:185
4597+msgid "Limit switcher to current workspace."
4598+msgstr "Beperk wisselaar tot huidige werkspasie."
4599+
4600+#: data/org.gnome.shell.gschema.xml.in:159
4601+msgid ""
4602+"If true, only applications that have windows on the current workspace are "
4603+"shown in the switcher. Otherwise, all applications are included."
4604+msgstr ""
4605+"As waar sal slegs toepassings wat vensters in die huidige werkspasie het in "
4606+"die wisselaar vertoon word. Anders sal alle toepassings ingesluit word."
4607+
4608+#: data/org.gnome.shell.gschema.xml.in:176
4609+msgid "The application icon mode."
4610+msgstr "Die toepassingsikoon-modus."
4611+
4612+#: data/org.gnome.shell.gschema.xml.in:177
4613+msgid ""
4614+"Configures how the windows are shown in the switcher. Valid possibilities "
4615+"are “thumbnail-only” (shows a thumbnail of the window), “app-icon-"
4616+"only” (shows only the application icon) or “both”."
4617+msgstr ""
4618+"Stel op hoe die vensters vertoon word in die wisselaar. Geldige moontlikhede "
4619+"is 'slegs-duimnaelskets' (wys 'n duimnaelskets van die venster), 'slegs-toep-"
4620+"ikoon' (wys slegs die toepassing se ikoon), of 'altwee'."
4621+
4622+#: data/org.gnome.shell.gschema.xml.in:186
4623+msgid ""
4624+"If true, only windows from the current workspace are shown in the switcher. "
4625+"Otherwise, all windows are included."
4626+msgstr ""
4627+"As waar sal slegs vensters van die huidige werkspasie in die wisselaar "
4628+"vertoon word. Anders sal alle vensters ingesluit word."
4629+
4630+#: data/org.gnome.shell.gschema.xml.in:197
4631+msgid "Attach modal dialog to the parent window"
4632+msgstr "Heg modale dialoogvenster vas aan die ouervenster"
4633+
4634+#: data/org.gnome.shell.gschema.xml.in:198
4635+#: data/org.gnome.shell.gschema.xml.in:207
4636+#: data/org.gnome.shell.gschema.xml.in:215
4637+#: data/org.gnome.shell.gschema.xml.in:223
4638+#: data/org.gnome.shell.gschema.xml.in:231
4639+>>>>>>> po/af.po
4640 msgid ""
4641 "This key overrides the key in org.gnome.mutter when running GNOME Shell."
4642 msgstr ""
4643 "Hierdie sleutel oorskryf die sleutel in org.gnome.mutter wanneer GNOME Shell "
4644 "uitgevoer word."
4645
4646+<<<<<<< po/af.po
4647 #: ../data/org.gnome.shell.gschema.xml.in.in.h:42
4648 #, fuzzy
4649 msgid "Enable edge tiling when dropping windows on screen edges"
4650@@ -249,11 +524,40 @@ msgid "Network Login"
4651 msgstr "Netwerkaanmelding"
4652
4653 #: ../js/extensionPrefs/main.js:121
4654+=======
4655+#: data/org.gnome.shell.gschema.xml.in:206
4656+msgid "Enable edge tiling when dropping windows on screen edges"
4657+msgstr "Aktiveer rand-tilering wanneer vensters op skermrand laat val word"
4658+
4659+#: data/org.gnome.shell.gschema.xml.in:214
4660+msgid "Workspaces are managed dynamically"
4661+msgstr "Werkspasies word dinamies bestuur"
4662+
4663+#: data/org.gnome.shell.gschema.xml.in:222
4664+msgid "Workspaces only on primary monitor"
4665+msgstr "Werkspasies slegs op primêre monitor"
4666+
4667+#: data/org.gnome.shell.gschema.xml.in:230
4668+msgid "Delay focus changes in mouse mode until the pointer stops moving"
4669+msgstr "Vertraag fokusverandering in muismodus totdat die wyser ophou beweeg"
4670+
4671+#: data/org.gnome.Shell.PortalHelper.desktop.in.in:3
4672+msgid "Network Login"
4673+msgstr "Netwerkaanmelding"
4674+
4675+#. Translators: Do NOT translate or transliterate this text (this is an icon file name)!
4676+#: data/org.gnome.Shell.PortalHelper.desktop.in.in:9
4677+msgid "network-workgroup"
4678+msgstr "netwerk-werkgroep"
4679+
4680+#: js/extensionPrefs/main.js:120
4681+>>>>>>> po/af.po
4682 #, javascript-format
4683 msgid "There was an error loading the preferences dialog for %s:"
4684 msgstr ""
4685 "'n Fout het voorgekom tydens die lansering van die voorkeuredialoog vir %s:"
4686
4687+<<<<<<< po/af.po
4688 #: ../js/extensionPrefs/main.js:153
4689 msgid "GNOME Shell Extensions"
4690 msgstr "GNOME Shell-uitbreidings"
4691@@ -277,24 +581,55 @@ msgid "Unlock"
4692 msgstr "Sluit oop"
4693
4694 #: ../js/gdm/authPrompt.js:214
4695+=======
4696+#: js/gdm/authPrompt.js:149 js/ui/audioDeviceSelection.js:71
4697+#: js/ui/components/networkAgent.js:117 js/ui/components/polkitAgent.js:148
4698+#: js/ui/endSessionDialog.js:482 js/ui/extensionDownloader.js:197
4699+#: js/ui/shellMountOperation.js:344 js/ui/status/network.js:936
4700+msgid "Cancel"
4701+msgstr "Kanselleer"
4702+
4703+#: js/gdm/authPrompt.js:171 js/gdm/authPrompt.js:218 js/gdm/authPrompt.js:450
4704+msgid "Next"
4705+msgstr "Volgende"
4706+
4707+#: js/gdm/authPrompt.js:214 js/ui/shellMountOperation.js:348
4708+#: js/ui/unlockDialog.js:59
4709+msgid "Unlock"
4710+msgstr "Sluit oop"
4711+
4712+#: js/gdm/authPrompt.js:216
4713+>>>>>>> po/af.po
4714 msgctxt "button"
4715 msgid "Sign In"
4716 msgstr "Meld aan"
4717
4718+<<<<<<< po/af.po
4719 #: ../js/gdm/loginDialog.js:285
4720+=======
4721+#: js/gdm/loginDialog.js:308
4722+>>>>>>> po/af.po
4723 msgid "Choose Session"
4724 msgstr "Kies sessie"
4725
4726 #. translators: this message is shown below the user list on the
4727 #. login screen. It can be activated to reveal an entry for
4728 #. manually entering the username.
4729+<<<<<<< po/af.po
4730 #: ../js/gdm/loginDialog.js:435
4731+=======
4732+#: js/gdm/loginDialog.js:458
4733+>>>>>>> po/af.po
4734 msgid "Not listed?"
4735 msgstr "Nie op die lys nie?"
4736
4737 #. Translators: this message is shown below the username entry field
4738 #. to clue the user in on how to login to the local network realm
4739+<<<<<<< po/af.po
4740 #: ../js/gdm/loginDialog.js:854
4741+=======
4742+#: js/gdm/loginDialog.js:888
4743+>>>>>>> po/af.po
4744 #, javascript-format
4745 msgid "(e.g., user or %s)"
4746 msgstr "(bv. gebruiker of %s)"
4747@@ -302,6 +637,7 @@ msgstr "(bv. gebruiker of %s)"
4748 #. TTLS and PEAP are actually much more complicated, but this complication
4749 #. is not visible here since we only care about phase2 authentication
4750 #. (and don't even care of which one)
4751+<<<<<<< po/af.po
4752 #: ../js/gdm/loginDialog.js:859 ../js/ui/components/networkAgent.js:271
4753 #: ../js/ui/components/networkAgent.js:289
4754 msgid "Username: "
4755@@ -314,6 +650,18 @@ msgstr "Aanmeldvenster"
4756 #: ../js/gdm/util.js:341
4757 #, fuzzy
4758 #| msgid "Connection error"
4759+=======
4760+#: js/gdm/loginDialog.js:893 js/ui/components/networkAgent.js:243
4761+#: js/ui/components/networkAgent.js:261
4762+msgid "Username: "
4763+msgstr "Gebruikernaam: "
4764+
4765+#: js/gdm/loginDialog.js:1236
4766+msgid "Login Window"
4767+msgstr "Aanmeldvenster"
4768+
4769+#: js/gdm/util.js:346
4770+>>>>>>> po/af.po
4771 msgid "Authentication error"
4772 msgstr "Verifiëringsfout"
4773
4774@@ -322,40 +670,185 @@ msgstr "Verifiëringsfout"
4775 #. as a cue to display our own message.
4776 #. Translators: this message is shown below the password entry field
4777 #. to indicate the user can swipe their finger instead
4778+<<<<<<< po/af.po
4779 #: ../js/gdm/util.js:473
4780 msgid "(or swipe finger)"
4781 msgstr "(of veeg vinger)"
4782
4783 #: ../js/misc/util.js:119
4784+=======
4785+#: js/gdm/util.js:478
4786+msgid "(or swipe finger)"
4787+msgstr "(of veeg vinger)"
4788+
4789+#. Translators: The name of the power-off action in search
4790+#: js/misc/systemActions.js:99
4791+msgctxt "search-result"
4792+msgid "Power off"
4793+msgstr "Skakel af"
4794+
4795+#. Translators: A list of keywords that match the power-off action, separated by semicolons
4796+#: js/misc/systemActions.js:102
4797+msgid "power off;shutdown"
4798+msgstr "skakel af;afskakel"
4799+
4800+#. Translators: The name of the lock screen action in search
4801+#: js/misc/systemActions.js:106
4802+msgctxt "search-result"
4803+msgid "Lock screen"
4804+msgstr "Sluit skerm"
4805+
4806+#. Translators: A list of keywords that match the lock screen action, separated by semicolons
4807+#: js/misc/systemActions.js:109
4808+msgid "lock screen"
4809+msgstr "sluit skerm"
4810+
4811+#. Translators: The name of the logout action in search
4812+#: js/misc/systemActions.js:113
4813+msgctxt "search-result"
4814+msgid "Log out"
4815+msgstr "Meld af"
4816+
4817+#. Translators: A list of keywords that match the logout action, separated by semicolons
4818+#: js/misc/systemActions.js:116
4819+msgid "logout;sign off"
4820+msgstr "meld af;teken af"
4821+
4822+#. Translators: The name of the suspend action in search
4823+#: js/misc/systemActions.js:120
4824+msgctxt "search-result"
4825+msgid "Suspend"
4826+msgstr "Sluimer"
4827+
4828+#. Translators: A list of keywords that match the suspend action, separated by semicolons
4829+#: js/misc/systemActions.js:123
4830+msgid "suspend;sleep"
4831+msgstr "suspend;sleep;sluimer;slaap"
4832+
4833+#. Translators: The name of the switch user action in search
4834+#: js/misc/systemActions.js:127
4835+msgctxt "search-result"
4836+msgid "Switch user"
4837+msgstr "Wissel gebruiker"
4838+
4839+#. Translators: A list of keywords that match the switch user action, separated by semicolons
4840+#: js/misc/systemActions.js:130
4841+msgid "switch user"
4842+msgstr "wissel gebruiker"
4843+
4844+#. Translators: The name of the lock orientation action in search
4845+#: js/misc/systemActions.js:134
4846+msgctxt "search-result"
4847+msgid "Lock orientation"
4848+msgstr "Sluit oriëntasie"
4849+
4850+#. Translators: A list of keywords that match the lock orientation action, separated by semicolons
4851+#: js/misc/systemActions.js:137
4852+msgid "lock orientation"
4853+msgstr "sluit oriëntasie"
4854+
4855+#: js/misc/util.js:122
4856+>>>>>>> po/af.po
4857 msgid "Command not found"
4858 msgstr "Opdrag nie gevind nie"
4859
4860 #. Replace "Error invoking GLib.shell_parse_argv: " with
4861 #. something nicer
4862+<<<<<<< po/af.po
4863 #: ../js/misc/util.js:152
4864 msgid "Could not parse command:"
4865 msgstr "Kon nie opdrag ontleed nie:"
4866
4867 #: ../js/misc/util.js:160
4868+=======
4869+#: js/misc/util.js:155
4870+msgid "Could not parse command:"
4871+msgstr "Kon nie opdrag ontleed nie:"
4872+
4873+#: js/misc/util.js:163
4874+>>>>>>> po/af.po
4875 #, javascript-format
4876 msgid "Execution of “%s” failed:"
4877 msgstr "Uitvoer van “%s” het misluk:"
4878
4879+<<<<<<< po/af.po
4880 #. Translators: Time in 24h format
4881 #: ../js/misc/util.js:191
4882+=======
4883+#: js/misc/util.js:180
4884+msgid "Just now"
4885+msgstr "Nounet"
4886+
4887+#: js/misc/util.js:182
4888+#, javascript-format
4889+msgid "%d minute ago"
4890+msgid_plural "%d minutes ago"
4891+msgstr[0] "%d minuut gelede"
4892+msgstr[1] "%d minute gelede"
4893+
4894+#: js/misc/util.js:185
4895+#, javascript-format
4896+msgid "%d hour ago"
4897+msgid_plural "%d hours ago"
4898+msgstr[0] "%d uur gelede"
4899+msgstr[1] "%d ure gelede"
4900+
4901+#: js/misc/util.js:188
4902+msgid "Yesterday"
4903+msgstr "Gister"
4904+
4905+#: js/misc/util.js:190
4906+#, javascript-format
4907+msgid "%d day ago"
4908+msgid_plural "%d days ago"
4909+msgstr[0] "%d dag gelede"
4910+msgstr[1] "%d dae gelede"
4911+
4912+#: js/misc/util.js:193
4913+#, javascript-format
4914+msgid "%d week ago"
4915+msgid_plural "%d weeks ago"
4916+msgstr[0] "%d week gelede"
4917+msgstr[1] "%d weke gelede"
4918+
4919+#: js/misc/util.js:196
4920+#, javascript-format
4921+msgid "%d month ago"
4922+msgid_plural "%d months ago"
4923+msgstr[0] "%d maand gelede"
4924+msgstr[1] "%d maande gelede"
4925+
4926+#: js/misc/util.js:198
4927+#, javascript-format
4928+msgid "%d year ago"
4929+msgid_plural "%d years ago"
4930+msgstr[0] "%d jaar gelede"
4931+msgstr[1] "%d jaar gelede"
4932+
4933+#. Translators: Time in 24h format
4934+#: js/misc/util.js:228
4935+>>>>>>> po/af.po
4936 msgid "%H∶%M"
4937 msgstr "%H∶%M"
4938
4939 #. Translators: this is the word "Yesterday" followed by a
4940 #. time string in 24h format. i.e. "Yesterday, 14:30"
4941+<<<<<<< po/af.po
4942 #: ../js/misc/util.js:197
4943+=======
4944+#: js/misc/util.js:234
4945+>>>>>>> po/af.po
4946 #, no-c-format
4947 msgid "Yesterday, %H∶%M"
4948 msgstr "Gister, %H:%M"
4949
4950 #. Translators: this is the week day name followed by a time
4951 #. string in 24h format. i.e. "Monday, 14:30"
4952+<<<<<<< po/af.po
4953 #: ../js/misc/util.js:203
4954+=======
4955+#: js/misc/util.js:240
4956+>>>>>>> po/af.po
4957 #, no-c-format
4958 msgid "%A, %H∶%M"
4959 msgstr "%A %H:%M"
4960@@ -363,7 +856,11 @@ msgstr "%A %H:%M"
4961 #. Translators: this is the month name and day number
4962 #. followed by a time string in 24h format.
4963 #. i.e. "May 25, 14:30"
4964+<<<<<<< po/af.po
4965 #: ../js/misc/util.js:209
4966+=======
4967+#: js/misc/util.js:246
4968+>>>>>>> po/af.po
4969 #, no-c-format
4970 msgid "%B %d, %H∶%M"
4971 msgstr "%e %B %H∶%M"
4972@@ -371,26 +868,42 @@ msgstr "%e %B %H∶%M"
4973 #. Translators: this is the month name, day number, year
4974 #. number followed by a time string in 24h format.
4975 #. i.e. "May 25 2012, 14:30"
4976+<<<<<<< po/af.po
4977 #: ../js/misc/util.js:215
4978+=======
4979+#: js/misc/util.js:252
4980+>>>>>>> po/af.po
4981 #, no-c-format
4982 msgid "%B %d %Y, %H∶%M"
4983 msgstr "%e %B %Y, %H∶%M"
4984
4985 #. Translators: Time in 12h format
4986+<<<<<<< po/af.po
4987 #: ../js/misc/util.js:220
4988+=======
4989+#: js/misc/util.js:257
4990+>>>>>>> po/af.po
4991 msgid "%l∶%M %p"
4992 msgstr "%l:%M %p"
4993
4994 #. Translators: this is the word "Yesterday" followed by a
4995 #. time string in 12h format. i.e. "Yesterday, 2:30 pm"
4996+<<<<<<< po/af.po
4997 #: ../js/misc/util.js:226
4998+=======
4999+#: js/misc/util.js:263
5000+>>>>>>> po/af.po
The diff has been truncated for viewing.

Subscribers

People subscribed via source and target branches