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

Proposed by Marco Trevisan (Treviño)
Status: Rejected
Rejected by: Iain Lane
Proposed branch: ~3v1n0/ubuntu/+source/gnome-shell:ubuntu/master
Merge into: ~ubuntu-desktop/ubuntu/+source/gnome-shell:ubuntu/master
Diff against target: 13783 lines (+4804/-2565)
48 files modified
NEWS (+42/-0)
config.h.meson (+3/-0)
data/gnome-shell-disable-extensions.service (+5/-4)
data/theme/gnome-shell-sass/_common.scss (+13/-7)
debian/changelog (+84/-0)
debian/control (+4/-8)
debian/control.in (+4/-8)
debian/gbp.conf (+1/-1)
debian/gnome-shell.lintian-overrides (+0/-1)
debian/patches/global-make-possible-to-set-debug-flags-dynamically.patch (+7/-7)
debian/patches/magnifier-Show-cursor-when-magnifier-is-enabled-and-scale.patch (+4/-4)
debian/patches/main-add-backtrace-crashes-all-and-backtrace-all.patch (+2/-2)
debian/patches/main-increase-the-granularity-of-backtraces-in-SHELL_DEBU.patch (+2/-2)
debian/patches/ubuntu/lock_on_suspend.patch (+5/-5)
debian/patches/ubuntu/secure_mode_extension.patch (+4/-4)
debian/watch (+1/-1)
js/misc/introspect.js (+10/-1)
js/misc/util.js (+9/-1)
js/misc/weather.js (+9/-1)
js/ui/animation.js (+23/-3)
js/ui/appDisplay.js (+111/-57)
js/ui/closeDialog.js (+22/-5)
js/ui/components/keyring.js (+3/-1)
js/ui/components/polkitAgent.js (+77/-55)
js/ui/dnd.js (+9/-5)
js/ui/extensionSystem.js (+18/-1)
js/ui/keyboard.js (+11/-4)
js/ui/layout.js (+1/-0)
js/ui/magnifier.js (+5/-1)
js/ui/messageList.js (+4/-1)
js/ui/modalDialog.js (+2/-0)
js/ui/panel.js (+9/-2)
js/ui/popupMenu.js (+11/-0)
js/ui/screenShield.js (+17/-14)
js/ui/shellMountOperation.js (+3/-1)
js/ui/status/power.js (+6/-3)
js/ui/switcherPopup.js (+16/-3)
js/ui/windowManager.js (+31/-34)
meson.build (+8/-1)
po/ms.po (+1975/-1157)
po/pt_BR.po (+231/-231)
po/ru.po (+936/-457)
po/zh_TW.po (+952/-451)
src/calendar-server/gnome-shell-calendar-server.c (+42/-17)
src/extensions-tool/main.c (+3/-2)
src/meson.build (+1/-1)
src/shell-global.c (+39/-0)
src/st/st-texture-cache.c (+29/-1)
Reviewer Review Type Date Requested Status
Marco Trevisan (Treviño) Disapprove
Ubuntu Desktop Pending
Review via email: mp+371252@code.launchpad.net
To post a comment you must log in.
0509cf5... by Marco Trevisan (Treviño)

Merge branch 'debian/master' into ubuntu/master

91df156... by Marco Trevisan (Treviño)

debian/patches: Refresh

0458c28... by Marco Trevisan (Treviño)

Update changelog

Fixes LP: #1857037, LP: #1853112

Revision history for this message
Marco Trevisan (Treviño) (3v1n0) wrote :

This was redone as part of 3.32.3, so closing.

review: Disapprove

Unmerged commits

0458c28... by Marco Trevisan (Treviño)

Update changelog

Fixes LP: #1857037, LP: #1853112

91df156... by Marco Trevisan (Treviño)

debian/patches: Refresh

0509cf5... by Marco Trevisan (Treviño)

Merge branch 'debian/master' into ubuntu/master

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1diff --git a/NEWS b/NEWS
2index 535e9af..2476e19 100644
3--- a/NEWS
4+++ b/NEWS
5@@ -1,3 +1,45 @@
6+3.34.2
7+======
8+* Fix unredirection after cancelled animations [Florian; #1788]
9+* Use cached coordinates for window sorting in overview [Andrew; !763]
10+* Include shadow in window screenshots [Robert; !762]
11+* Use correct timezones for events [Milan, Florian; !806, #1895]
12+* Adjust style of system menu action buttons [monday; !802]
13+* Fix windows getting stuck on screen if closed while animating [Florian; !815]
14+* Hide stopped spinner in top bar [Joonas; !834]
15+* Reuse existing icons when updating the app picker grid [Georges; !841]
16+* Fix not-responding dialog size when using geometry scaling [Jonas; !783]
17+* Fix battery icon glitch in "100% but charging" case [Philip; !814]
18+* Update window titles in app menu [Florian; #1830]
19+* Improve modifier-less keyboard navigation of switcher popups [Florian; #1883]
20+* Use better OSK layout fallback for unsupported variants [Florian; #1907]
21+* Fix creating app folders with no pre-existing folders [Jonas; #1652]
22+* Improve DND page switching in app picker [Florian, Jonas; #1693]
23+* Show polkit confirmation dialog for users with no password [Joaquim; !829]
24+* Fix interacting with applications when magnifier is enabled [Jonas; !754]
25+* Tweak styling of notifications/media constrols [Joonas; !855, !865]
26+* Fix disable command of gnome-extensions tool [Florian; #1946]
27+* Enable clean session shutdown after gnome-shell failure [Benjamin; !858]
28+* Also remove scaled keys when texture cache is cleared [Daniel; !567]
29+* Don't show overflow indicator in switchers that fit screen [Florian; #1834]
30+* Place launched applications into a systemd scope [Benjamin; !863]
31+* Fix weather forecasts for automatic location when Weather is not sandboxed
32+ [Florian; #1823]
33+* Dismiss switcher popups when a system modal dialogs opens [Florian; #1536]
34+* Misc. bug fixes and cleanups [Marco, Philip, Florian, cunidev, Jonas, Joonas;
35+ !758, !749, !777, !811, #1884, !823, !840, !782, !847, #1836, !852, !851,
36+ !788, #1916, !866, !884]
37+
38+Contributors:
39+ Marco Trevisan (Treviño), Benjamin Berg, Philip Chimento, Milan Crha,
40+ Jonas Dreßler, Joonas Henriksson, Robert Mader, Daniel García Moreno,
41+ Florian Müllner, Georges Basile Stavracas Neto, Joaquim Rocha, Andrew Watson,
42+ cunidev, monday
43+
44+Translators:
45+ Stas Solovey [ru], Ricardo Silva Veloso [pt_BR], Yi-Jyun Pan [zh_TW],
46+ Umarzuki Bin Mochlis Moktar [ms]
47+
48 3.34.1
49 ======
50 * Fix "Frequent" view icons disappearing on hover [Jonas D.; #1502]
51diff --git a/config.h.meson b/config.h.meson
52index 141b224..e5bdf0f 100644
53--- a/config.h.meson
54+++ b/config.h.meson
55@@ -30,3 +30,6 @@
56
57 /* Define if fdwalk is available in libc */
58 #mesondefine HAVE_FDWALK
59+
60+/* Define if we have gnome-desktop systemd utils */
61+#mesondefine HAVE_GNOME_SYSTEMD
62diff --git a/data/gnome-shell-disable-extensions.service b/data/gnome-shell-disable-extensions.service
63index d55d7ed..de91167 100644
64--- a/data/gnome-shell-disable-extensions.service
65+++ b/data/gnome-shell-disable-extensions.service
66@@ -1,11 +1,12 @@
67 [Unit]
68 Description=Disable GNOME Shell extensions after failure
69+# Note that this unit must not conflict with anything, and must
70+# be able to run in parallel with the gnome-session-shutdown.target.
71 DefaultDependencies=no
72
73-# Only disable extensions for a short period of time after login.
74-# This means we err on the side of failing the first login after a broken
75-# extension was installed.
76-Requisite=gnome-session-stable.timer
77+# We want to disable extensions only if gnome-shell has flagged the extensions
78+# to be a likely cause of trouble.
79+ConditionPathExists=%t/gnome-shell-disable-extensions
80
81 [Service]
82 Type=simple
83diff --git a/data/theme/gnome-shell-sass/_common.scss b/data/theme/gnome-shell-sass/_common.scss
84index 9724a8f..0b19b12 100644
85--- a/data/theme/gnome-shell-sass/_common.scss
86+++ b/data/theme/gnome-shell-sass/_common.scss
87@@ -1061,9 +1061,9 @@ StScrollBar {
88 }
89 .calendar-today {
90 font-weight: bold;
91- //color: lighten($fg_color,10%);
92- //background-color: darken($bg_color,5%);
93- border: 1px solid $_bubble_borders_color;
94+ color: lighten($fg_color,5%);
95+ background-color: darken($bg_color,5%);
96+ // border: 1px solid lighten($_bubble_borders_color,20%);
97 }
98 .calendar-day-with-events {
99 color: lighten($fg_color,10%);
100@@ -1153,14 +1153,21 @@ StScrollBar {
101 padding: 10px;
102 }
103
104+ .message-close-button {
105+ color: lighten($fg_color, 15%);
106+ &:hover { color: if($variant=='light', lighten($fg_color, 30%), darken($fg_color, 10%)); }
107+ &:active { color: if($variant=='light', lighten($fg_color, 40%), darken($fg_color, 20%)); }
108+ }
109+
110 .message-media-control {
111 padding: 12px;
112 color: lighten($fg_color, 15%);
113
114 &:last-child:ltr { padding-right: 18px; }
115 &:last-child:rtl { padding-left: 18px; }
116- &:hover { color: $fg_color; }
117- &:insensitive { color: darken($fg_color,40%); }
118+ &:hover { color: if($variant=='light', lighten($fg_color, 30%), darken($fg_color, 10%)); }
119+ &:active { color: if($variant=='light', lighten($fg_color, 40%), darken($fg_color, 20%)); }
120+ &:insensitive { color: if($variant=='light', lighten($fg_color, 50%), darken($fg_color, 40%)); }
121 }
122
123 .media-message-cover-icon {
124@@ -1209,12 +1216,11 @@ StScrollBar {
125 &:hover, &:focus {
126 background-color: $_hover_bg_color;
127 color: $fg_color;
128- border: none;
129- padding: 14px;
130 }
131 &:active {
132 background-color: $selected_bg_color;
133 color: $selected_fg_color;
134+ border-color: $selected_borders_color;
135 }
136
137 & > StIcon { icon-size: 16px; }
138diff --git a/debian/changelog b/debian/changelog
139index 85ce5c7..9b73c8e 100644
140--- a/debian/changelog
141+++ b/debian/changelog
142@@ -1,3 +1,87 @@
143+gnome-shell (3.34.2-1ubuntu1) UNRELEASED; urgency=medium
144+
145+ * Merge with debian including new upstream version 3.34.2 (LP: #1857037):
146+ - Include shadows in window screenshots
147+ - Use correct timezone for events
148+ - Fix windows stuck on screen if closed during animation
149+ - Key navigation fixes
150+ - Place launched applications into a systemd scope to prevent killing
151+ applications if the shell crashes in X11 (LP: #1853112)
152+ Remaining changes:
153+ + Replace gnome-backgrounds dep with ubuntu-wallpapers and Suggests
154+ gnome-themes-standard-data, gnome-backgrounds
155+ + Add some Recommends:
156+ - ubuntu-session (| gnome-session) to have the ubuntu session available
157+ - xserver-xorg-legacy
158+ - yaru-theme-gnome-shell for the default ubuntu theming
159+ + Update debian/gbp.conf with Ubuntu settings
160+ + gnome-shell-common.install: Install Ubuntu mode
161+ + gnome-shell-common.prerm: Remove deprecated ubuntu theme alternative
162+ + ubuntu/desktop_detect.patch:
163+ - add caching for desktop detection to avoid querying the current
164+ desktop env variable as iterate through the list each time. For the
165+ time of the Shell process, we can expect this env variable to stay
166+ stable.
167+ + ubuntu/smarter_alt_tab.patch:
168+ - quick alt-tab (without showing up the switcher) switch only between
169+ the last window of the last 2 applications to be focused instead of
170+ raising all windows of those apps.
171+ + ubuntu/lightdm-user-switching.patch:
172+ - Allow user switching when using LightDM.
173+ + ubuntu/lock_on_suspend.patch
174+ - Respect Ubuntu's lock-on-suspend setting.
175+ + ubuntu/gdm.patch
176+ - as gdm is system-wide and not session-wide, ensure gdm has an ubuntu
177+ styling by default, not impacting the gnome user session though.
178+ + ubuntu/background_login.patch
179+ - Change default background color as we modified the default GDM color
180+ for our ubuntu session. Change it as well here, still applying the
181+ background noise loading.
182+ + ubuntu/gdm_alternatives.patch
183+ - Add support for GDM3 theme alternatives
184+ + optional-hot-corner.patch
185+ - enable patch proposed by upstream developer already in package (but
186+ not in series) to add a settings for optional hot corner activation.
187+ + volume-Add-back-sound-feedback-on-scroll.patch
188+ - Fix regression causing missing feedback on volume slider scroll
189+ + main-show-an-error-message-on-gnome-shell-crash.patch,
190+ global-make-possible-to-set-debug-flags-dynamically.patch,
191+ main-increase-the-granularity-of-backtraces-in-SHELL_DEBU.patch,
192+ main-add-backtrace-crashes-all-and-backtrace-all.patch,
193+ sessionMode-add-support-for-debugFlags-parameter.patch:
194+ - Improve debug JS tracing for crash reports
195+ + st-scroll-view-Handle-the-case-where-scrollbars-are-NULL.patch,
196+ st-scroll-view-Remove-scrollbars-references-on-dispose.patch:
197+ - Fix crash on theme changes
198+ + ubuntu/search-call-XUbuntuCancel-method-on-providers-when-no-dat.patch:
199+ - stop searches when requested from UI
200+ + magnifier-Show-cursor-when-magnifier-is-enabled-and-scale.patch:
201+ - Show monitor scaled cursor when magnifier is enabled
202+ * Refresh patches
203+
204+ -- Marco Trevisan (Treviño) <marco@ubuntu.com> Thu, 19 Dec 2019 18:54:37 +0100
205+
206+gnome-shell (3.34.2-1) unstable; urgency=medium
207+
208+ * Team upload
209+
210+ [ Georges Basile Stavracas Neto ]
211+ * Add gnome-menus to Recommends.
212+ The files installed by gnome-menus are needed for the functionality of
213+ suggesting a name for a new folder to work.
214+
215+ [ Simon McVittie ]
216+ * d/watch: Only watch for stable releases
217+ * New upstream release
218+ * d/gbp.conf: Use upstream/3.34.x branch
219+ * Add build-dependency on libgnome-desktop-3-dev (>= 3.34.2) for new
220+ systemd scope functionality
221+ * Remove Breaks/Conflicts on packages older than Debian 9 (oldstable)
222+ * Remove unused Lintian override
223+ * Bump Standards-Version to 4.4.1
224+
225+ -- Simon McVittie <smcv@debian.org> Mon, 16 Dec 2019 16:55:02 +0000
226+
227 gnome-shell (3.34.1+git20191024-1ubuntu1) focal; urgency=medium
228
229 * Merge with Debian. Remaining changes:
230diff --git a/debian/control b/debian/control
231index 5b307b6..1a42154 100644
232--- a/debian/control
233+++ b/debian/control
234@@ -37,6 +37,7 @@ Build-Depends: asciidoc-base,
235 libglib2.0-dev (>= 2.57.2),
236 libgnome-autoar-0-dev,
237 libgnome-bluetooth-dev (>= 3.9.0) [linux-any],
238+ libgnome-desktop-3-dev (>= 3.34.2),
239 libgnome-menu-3-dev,
240 libgstreamer1.0-dev (>= 0.11.92),
241 libgtk-3-dev (>= 3.21.6),
242@@ -60,7 +61,7 @@ Build-Depends: asciidoc-base,
243 xvfb <!nocheck>,
244 xwayland <!nocheck>
245 Rules-Requires-Root: no
246-Standards-Version: 4.3.0
247+Standards-Version: 4.4.1
248 Homepage: https://wiki.gnome.org/Projects/GnomeShell
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.git
251@@ -106,6 +107,7 @@ Recommends: bolt (>= 0.3),
252 gdm3 (>= 3.10.0.1-3~),
253 gkbd-capplet,
254 gnome-control-center (>= 1:3.25.2),
255+ gnome-menus,
256 gnome-user-docs,
257 ibus,
258 iio-sensor-proxy,
259@@ -118,10 +120,7 @@ Suggests: chrome-gnome-shell,
260 gnome-themes-standard-data,
261 gnome-backgrounds (>= 3.13.90),
262 gir1.2-telepathylogger-0.2 (>= 0.8.0)
263-Breaks: gdm3 (<< 3.19.92),
264- gnome-session (<< 3.19),
265- gnome-shell-extension-appindicator (<< 30),
266- gnome-shell-extension-autohidetopbar (<< 20180511-2~),
267+Breaks: gnome-shell-extension-autohidetopbar (<< 20180511-2~),
268 gnome-shell-extension-caffeine (<< 0~git20171229-3~),
269 gnome-shell-extension-dash-to-panel (<= 18-1),
270 gnome-shell-extension-dashtodock (<= 64-1),
271@@ -135,7 +134,6 @@ Breaks: gdm3 (<< 3.19.92),
272 gnome-shell-pomodoro (<< 0.13.4-2.1~),
273 nautilus (<< 1:3.30),
274 yaru-theme (<< 19.10.1),
275-Conflicts: gnome-screensaver (<< 3.6)
276 Provides: notification-daemon,
277 polkit-1-auth-agent
278 Description: graphical shell for the GNOME desktop
279@@ -150,7 +148,5 @@ Package: gnome-shell-common
280 Architecture: all
281 Depends: ${misc:Depends}
282 Recommends: yaru-theme-gnome-shell
283-Breaks: gnome-calendar (<< 3.21.4),
284- gnome-tweak-tool (<< 3.21.91)
285 Description: common files for the GNOME graphical shell
286 This package contains translations and data files for the GNOME shell.
287diff --git a/debian/control.in b/debian/control.in
288index aeb4797..46a09e8 100644
289--- a/debian/control.in
290+++ b/debian/control.in
291@@ -33,6 +33,7 @@ Build-Depends: asciidoc-base,
292 libglib2.0-dev (>= 2.57.2),
293 libgnome-autoar-0-dev,
294 libgnome-bluetooth-dev (>= 3.9.0) [linux-any],
295+ libgnome-desktop-3-dev (>= 3.34.2),
296 libgnome-menu-3-dev,
297 libgstreamer1.0-dev (>= 0.11.92),
298 libgtk-3-dev (>= 3.21.6),
299@@ -56,7 +57,7 @@ Build-Depends: asciidoc-base,
300 xvfb <!nocheck>,
301 xwayland <!nocheck>
302 Rules-Requires-Root: no
303-Standards-Version: 4.3.0
304+Standards-Version: 4.4.1
305 Homepage: https://wiki.gnome.org/Projects/GnomeShell
306 XS-Debian-Vcs-Browser: https://salsa.debian.org/gnome-team/gnome-shell
307 XS-Debian-Vcs-Git: https://salsa.debian.org/gnome-team/gnome-shell.git
308@@ -102,6 +103,7 @@ Recommends: bolt (>= 0.3),
309 gdm3 (>= 3.10.0.1-3~),
310 gkbd-capplet,
311 gnome-control-center (>= 1:3.25.2),
312+ gnome-menus,
313 gnome-user-docs,
314 ibus,
315 iio-sensor-proxy,
316@@ -114,10 +116,7 @@ Suggests: chrome-gnome-shell,
317 gnome-themes-standard-data,
318 gnome-backgrounds (>= 3.13.90),
319 gir1.2-telepathylogger-0.2 (>= 0.8.0)
320-Breaks: gdm3 (<< 3.19.92),
321- gnome-session (<< 3.19),
322- gnome-shell-extension-appindicator (<< 30),
323- gnome-shell-extension-autohidetopbar (<< 20180511-2~),
324+Breaks: gnome-shell-extension-autohidetopbar (<< 20180511-2~),
325 gnome-shell-extension-caffeine (<< 0~git20171229-3~),
326 gnome-shell-extension-dash-to-panel (<= 18-1),
327 gnome-shell-extension-dashtodock (<= 64-1),
328@@ -131,7 +130,6 @@ Breaks: gdm3 (<< 3.19.92),
329 gnome-shell-pomodoro (<< 0.13.4-2.1~),
330 nautilus (<< 1:3.30),
331 yaru-theme (<< 19.10.1),
332-Conflicts: gnome-screensaver (<< 3.6)
333 Provides: notification-daemon,
334 polkit-1-auth-agent
335 Description: graphical shell for the GNOME desktop
336@@ -146,7 +144,5 @@ Package: gnome-shell-common
337 Architecture: all
338 Depends: ${misc:Depends}
339 Recommends: yaru-theme-gnome-shell
340-Breaks: gnome-calendar (<< 3.21.4),
341- gnome-tweak-tool (<< 3.21.91)
342 Description: common files for the GNOME graphical shell
343 This package contains translations and data files for the GNOME shell.
344diff --git a/debian/gbp.conf b/debian/gbp.conf
345index 117f766..91707dc 100644
346--- a/debian/gbp.conf
347+++ b/debian/gbp.conf
348@@ -1,7 +1,7 @@
349 [DEFAULT]
350 pristine-tar = True
351 debian-branch=ubuntu/master
352-upstream-branch = upstream/latest
353+upstream-branch = upstream/3.34.x
354 debian-tag=ubuntu/%(version)s
355 upstream-vcs-tag = %(version)s
356
357diff --git a/debian/gnome-shell.lintian-overrides b/debian/gnome-shell.lintian-overrides
358index caeb7a5..2283547 100644
359--- a/debian/gnome-shell.lintian-overrides
360+++ b/debian/gnome-shell.lintian-overrides
361@@ -2,5 +2,4 @@
362 gnome-shell: binary-or-shlib-defines-rpath usr/bin/gnome-shell /usr/lib/*/mutter-*
363 gnome-shell: binary-or-shlib-defines-rpath usr/lib/gnome-shell/libgnome-shell-menu.so /usr/lib/*/mutter-*
364 gnome-shell: binary-or-shlib-defines-rpath usr/lib/gnome-shell/libgnome-shell.so /usr/lib/*/mutter-*
365-gnome-shell: binary-or-shlib-defines-rpath usr/lib/gnome-shell/libgvc.so /usr/share/gnome-shell
366 gnome-shell: binary-or-shlib-defines-rpath usr/lib/gnome-shell/libst-1.0.so /usr/lib/*/mutter-*
367diff --git a/debian/patches/global-make-possible-to-set-debug-flags-dynamically.patch b/debian/patches/global-make-possible-to-set-debug-flags-dynamically.patch
368index 3a83dbe..e877864 100644
369--- a/debian/patches/global-make-possible-to-set-debug-flags-dynamically.patch
370+++ b/debian/patches/global-make-possible-to-set-debug-flags-dynamically.patch
371@@ -128,10 +128,10 @@ index f4440bf..6750586 100644
372 shell_profiler_init ();
373 ecode = meta_run ();
374 diff --git a/src/shell-global.c b/src/shell-global.c
375-index 77e167c..aded90a 100644
376+index d25d2ca..23a2d5d 100644
377 --- a/src/shell-global.c
378 +++ b/src/shell-global.c
379-@@ -57,6 +57,7 @@ struct _ShellGlobal {
380+@@ -63,6 +63,7 @@ struct _ShellGlobal {
381 Display *xdisplay;
382
383 char *session_mode;
384@@ -139,7 +139,7 @@ index 77e167c..aded90a 100644
385
386 XserverRegion input_region;
387
388-@@ -102,6 +103,7 @@ enum {
389+@@ -108,6 +109,7 @@ enum {
390 PROP_FOCUS_MANAGER,
391 PROP_FRAME_TIMESTAMPS,
392 PROP_FRAME_FINISH_TIMESTAMP,
393@@ -147,7 +147,7 @@ index 77e167c..aded90a 100644
394 };
395
396 /* Signals */
397-@@ -136,6 +138,9 @@ shell_global_set_property(GObject *object,
398+@@ -142,6 +144,9 @@ shell_global_set_property(GObject *object,
399 case PROP_FRAME_FINISH_TIMESTAMP:
400 global->frame_finish_timestamp = g_value_get_boolean (value);
401 break;
402@@ -157,7 +157,7 @@ index 77e167c..aded90a 100644
403 default:
404 G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
405 break;
406-@@ -210,6 +215,9 @@ shell_global_get_property(GObject *object,
407+@@ -216,6 +221,9 @@ shell_global_get_property(GObject *object,
408 case PROP_FRAME_FINISH_TIMESTAMP:
409 g_value_set_boolean (value, global->frame_finish_timestamp);
410 break;
411@@ -167,7 +167,7 @@ index 77e167c..aded90a 100644
412 default:
413 G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
414 break;
415-@@ -477,6 +485,13 @@ shell_global_class_init (ShellGlobalClass *klass)
416+@@ -483,6 +491,13 @@ shell_global_class_init (ShellGlobalClass *klass)
417 "Whether at the end of a frame to call glFinish and log paintCompletedTimestamp",
418 FALSE,
419 G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
420@@ -181,7 +181,7 @@ index 77e167c..aded90a 100644
421 }
422
423 /*
424-@@ -1680,3 +1695,40 @@ _shell_global_locate_pointer (ShellGlobal *global)
425+@@ -1719,3 +1734,40 @@ _shell_global_locate_pointer (ShellGlobal *global)
426 {
427 g_signal_emit (global, shell_global_signals[LOCATE_POINTER], 0);
428 }
429diff --git a/debian/patches/magnifier-Show-cursor-when-magnifier-is-enabled-and-scale.patch b/debian/patches/magnifier-Show-cursor-when-magnifier-is-enabled-and-scale.patch
430index ec77f26..4e4253f 100644
431--- a/debian/patches/magnifier-Show-cursor-when-magnifier-is-enabled-and-scale.patch
432+++ b/debian/patches/magnifier-Show-cursor-when-magnifier-is-enabled-and-scale.patch
433@@ -16,10 +16,10 @@ Forwarded: yes
434 2 files changed, 73 insertions(+), 6 deletions(-)
435
436 diff --git a/js/ui/layout.js b/js/ui/layout.js
437-index 744a8f1..8f09d15 100644
438+index 1441bfe..581ac7c 100644
439 --- a/js/ui/layout.js
440 +++ b/js/ui/layout.js
441-@@ -956,22 +956,38 @@ var LayoutManager = GObject.registerClass({
442+@@ -957,22 +957,38 @@ var LayoutManager = GObject.registerClass({
443 return ws.get_work_area_for_monitor(monitorIndex);
444 }
445
446@@ -63,7 +63,7 @@ index 744a8f1..8f09d15 100644
447 if (this._startingUp)
448 return;
449 diff --git a/js/ui/magnifier.js b/js/ui/magnifier.js
450-index 0ec30ee..5b2a071 100644
451+index 70b1291..7060296 100644
452 --- a/js/ui/magnifier.js
453 +++ b/js/ui/magnifier.js
454 @@ -45,6 +45,8 @@ var MouseSpriteContent = GObject.registerClass({
455@@ -161,7 +161,7 @@ index 0ec30ee..5b2a071 100644
456 /**
457 * showSystemCursor:
458 * Show the system mouse pointer.
459-@@ -231,6 +280,8 @@ var Magnifier = class Magnifier {
460+@@ -235,6 +284,8 @@ var Magnifier = class Magnifier {
461 this.xMouse = xMouse;
462 this.yMouse = yMouse;
463
464diff --git a/debian/patches/main-add-backtrace-crashes-all-and-backtrace-all.patch b/debian/patches/main-add-backtrace-crashes-all-and-backtrace-all.patch
465index 52e78e3..358b46d 100644
466--- a/debian/patches/main-add-backtrace-crashes-all-and-backtrace-all.patch
467+++ b/debian/patches/main-add-backtrace-crashes-all-and-backtrace-all.patch
468@@ -33,10 +33,10 @@ index 732a780..9c86d74 100644
469 static int _default_debug_flags = SHELL_DEBUG_BACKTRACE_ABORTS |
470 SHELL_DEBUG_BACKTRACE_FPE;
471 diff --git a/src/shell-global.c b/src/shell-global.c
472-index 2446806..f5ccdac 100644
473+index ec3a76b..e35ae13 100644
474 --- a/src/shell-global.c
475 +++ b/src/shell-global.c
476-@@ -1721,6 +1721,8 @@ shell_global_get_debug_flags (ShellGlobal *global)
477+@@ -1760,6 +1760,8 @@ shell_global_get_debug_flags (ShellGlobal *global)
478 * - 'backtrace-segfaults'
479 * - 'backtrace-aborts'
480 * - 'backtrace-math-errors'
481diff --git a/debian/patches/main-increase-the-granularity-of-backtraces-in-SHELL_DEBU.patch b/debian/patches/main-increase-the-granularity-of-backtraces-in-SHELL_DEBU.patch
482index 439c3e3..15984f4 100644
483--- a/debian/patches/main-increase-the-granularity-of-backtraces-in-SHELL_DEBU.patch
484+++ b/debian/patches/main-increase-the-granularity-of-backtraces-in-SHELL_DEBU.patch
485@@ -146,10 +146,10 @@ index 6750586..732a780 100644
486 g_signal_connect (shell_global_get (), "notify::debug-flags",
487 G_CALLBACK (global_notify_debug_flags), NULL);
488 diff --git a/src/shell-global.c b/src/shell-global.c
489-index aded90a..2446806 100644
490+index 23a2d5d..ec3a76b 100644
491 --- a/src/shell-global.c
492 +++ b/src/shell-global.c
493-@@ -1713,11 +1713,15 @@ shell_global_get_debug_flags (ShellGlobal *global)
494+@@ -1752,11 +1752,15 @@ shell_global_get_debug_flags (ShellGlobal *global)
495 /**
496 * shell_global_set_debug_flags:
497 * @global: a #ShellGlobal
498diff --git a/debian/patches/ubuntu/lock_on_suspend.patch b/debian/patches/ubuntu/lock_on_suspend.patch
499index 8672acc..1692f8c 100644
500--- a/debian/patches/ubuntu/lock_on_suspend.patch
501+++ b/debian/patches/ubuntu/lock_on_suspend.patch
502@@ -8,10 +8,10 @@ Bug-Ubuntu: https://bugs.launchpad.net/bugs/1063110
503 1 file changed, 5 insertions(+), 2 deletions(-)
504
505 diff --git a/js/ui/screenShield.js b/js/ui/screenShield.js
506-index 2e2e95a..90244ad 100644
507+index f915143..a4ca62d 100644
508 --- a/js/ui/screenShield.js
509 +++ b/js/ui/screenShield.js
510-@@ -20,6 +20,7 @@ const SmartcardManager = imports.misc.smartcardManager;
511+@@ -22,6 +22,7 @@ const { adjustAnimationTime } = imports.ui.environment;
512 const SCREENSAVER_SCHEMA = 'org.gnome.desktop.screensaver';
513 const LOCK_ENABLED_KEY = 'lock-enabled';
514 const LOCK_DELAY_KEY = 'lock-delay';
515@@ -19,7 +19,7 @@ index 2e2e95a..90244ad 100644
516
517 const LOCKDOWN_SCHEMA = 'org.gnome.desktop.lockdown';
518 const DISABLE_LOCK_KEY = 'disable-lock-screen';
519-@@ -537,6 +538,7 @@ var ScreenShield = class {
520+@@ -545,6 +546,7 @@ var ScreenShield = class {
521
522 this._settings = new Gio.Settings({ schema_id: SCREENSAVER_SCHEMA });
523 this._settings.connect(`changed::${LOCK_ENABLED_KEY}`, this._syncInhibitor.bind(this));
524@@ -27,7 +27,7 @@ index 2e2e95a..90244ad 100644
525
526 this._lockSettings = new Gio.Settings({ schema_id: LOCKDOWN_SCHEMA });
527 this._lockSettings.connect(`changed::${DISABLE_LOCK_KEY}`, this._syncInhibitor.bind(this));
528-@@ -701,7 +703,8 @@ var ScreenShield = class {
529+@@ -709,7 +711,8 @@ var ScreenShield = class {
530 }
531
532 _syncInhibitor() {
533@@ -37,7 +37,7 @@ index 2e2e95a..90244ad 100644
534 let lockLocked = this._lockSettings.get_boolean(DISABLE_LOCK_KEY);
535 let inhibit = (this._loginSession && this._loginSession.Active &&
536 !this._isActive && lockEnabled && !lockLocked);
537-@@ -721,7 +724,7 @@ var ScreenShield = class {
538+@@ -729,7 +732,7 @@ var ScreenShield = class {
539
540 _prepareForSleep(loginManager, aboutToSuspend) {
541 if (aboutToSuspend) {
542diff --git a/debian/patches/ubuntu/secure_mode_extension.patch b/debian/patches/ubuntu/secure_mode_extension.patch
543index d825106..10285e8 100644
544--- a/debian/patches/ubuntu/secure_mode_extension.patch
545+++ b/debian/patches/ubuntu/secure_mode_extension.patch
546@@ -55,18 +55,18 @@ index dc3f1d5..4158a18 100644
547 });
548
549 diff --git a/js/ui/extensionSystem.js b/js/ui/extensionSystem.js
550-index 7c36d70..7077f80 100644
551+index a7a3869..f182b9d 100644
552 --- a/js/ui/extensionSystem.js
553 +++ b/js/ui/extensionSystem.js
554 @@ -4,6 +4,7 @@
555- const { Gio, St } = imports.gi;
556+ const { GLib, Gio, St } = imports.gi;
557 const Signals = imports.signals;
558
559 +const Desktop = imports.misc.desktop;
560 const ExtensionUtils = imports.misc.extensionUtils;
561 const FileUtils = imports.misc.fileUtils;
562 const Main = imports.ui.main;
563-@@ -303,6 +304,10 @@ var ExtensionManager = class {
564+@@ -320,6 +321,10 @@ var ExtensionManager = class {
565 this.loadExtension(newExtension);
566 }
567
568@@ -77,7 +77,7 @@ index 7c36d70..7077f80 100644
569 _callExtensionInit(uuid) {
570 if (!Main.sessionMode.allowExtensions)
571 return false;
572-@@ -464,6 +469,10 @@ var ExtensionManager = class {
573+@@ -481,6 +486,10 @@ var ExtensionManager = class {
574 let type = dir.has_prefix(perUserDir)
575 ? ExtensionType.PER_USER
576 : ExtensionType.SYSTEM;
577diff --git a/debian/watch b/debian/watch
578index 35b7b17..ac38817 100644
579--- a/debian/watch
580+++ b/debian/watch
581@@ -1,3 +1,3 @@
582 version=4
583-https://download.gnome.org/sources/@PACKAGE@/([\d\.]+)/ \
584+https://download.gnome.org/sources/@PACKAGE@/([\d\.]+[02468])/ \
585 @PACKAGE@@ANY_VERSION@\.tar\.xz
586diff --git a/js/misc/introspect.js b/js/misc/introspect.js
587index f256555..f99ea84 100644
588--- a/js/misc/introspect.js
589+++ b/js/misc/introspect.js
590@@ -40,6 +40,15 @@ var IntrospectService = class {
591 });
592
593 this._syncRunningApplications();
594+
595+ this._whitelistMap = new Map();
596+ APP_WHITELIST.forEach(appName => {
597+ Gio.DBus.watch_name(Gio.BusType.SESSION,
598+ appName,
599+ Gio.BusNameWatcherFlags.NONE,
600+ (conn, name, owner) => this._whitelistMap.set(name, owner),
601+ (conn, name) => this._whitelistMap.delete(name));
602+ });
603 }
604
605 _isStandaloneApp(app) {
606@@ -51,7 +60,7 @@ var IntrospectService = class {
607 }
608
609 _isSenderWhitelisted(sender) {
610- return APP_WHITELIST.includes(sender);
611+ return [...this._whitelistMap.values()].includes(sender);
612 }
613
614 _getSandboxedAppId(app) {
615diff --git a/js/misc/util.js b/js/misc/util.js
616index db3742e..2110602 100644
617--- a/js/misc/util.js
618+++ b/js/misc/util.js
619@@ -3,7 +3,7 @@
620 formatTime, formatTimeSpan, createTimeLabel, insertSorted,
621 makeCloseButton, ensureActorVisibleInScrollView */
622
623-const { Clutter, Gio, GLib, GObject, Shell, St } = imports.gi;
624+const { Clutter, Gio, GLib, GObject, Shell, St, GnomeDesktop } = imports.gi;
625 const Gettext = imports.gettext;
626
627 const Main = imports.ui.main;
628@@ -127,6 +127,14 @@ function trySpawn(argv) {
629 throw err;
630 }
631 }
632+
633+ // Async call, we don't need the reply though
634+ try {
635+ GnomeDesktop.start_systemd_scope(argv[0], pid, null, null, null, () => {});
636+ } catch (err) {
637+ // Ignore error; it likely means GnomeDesktop is too old
638+ }
639+
640 // Dummy child watch; we don't want to double-fork internally
641 // because then we lose the parent-child relationship, which
642 // can break polkit. See https://bugzilla.redhat.com//show_bug.cgi?id=819275
643diff --git a/js/misc/weather.js b/js/misc/weather.js
644index 51dd8ac..16d8aae 100644
645--- a/js/misc/weather.js
646+++ b/js/misc/weather.js
647@@ -32,6 +32,7 @@ var WeatherClient = class {
648 this._gclueStarting = false;
649 this._gclueLocationChangedId = 0;
650
651+ this._needsAuth = true;
652 this._weatherAuthorized = false;
653 this._permStore = new PermissionStore.PermissionStore((proxy, error) => {
654 if (error) {
655@@ -142,7 +143,7 @@ var WeatherClient = class {
656 get _useAutoLocation() {
657 return this._autoLocationRequested &&
658 this._locationSettings.get_boolean('enabled') &&
659- this._weatherAuthorized;
660+ (!this._needsAuth || this._weatherAuthorized);
661 }
662
663 _onWeatherProxyReady(o, res) {
664@@ -175,6 +176,13 @@ var WeatherClient = class {
665
666 if (hadApp !== haveApp)
667 this.emit('changed');
668+
669+ let neededAuth = this._needsAuth;
670+ this._needsAuth = this._weatherApp === null ||
671+ this._weatherApp.app_info.has_key('X-Flatpak');
672+
673+ if (neededAuth !== this._needsAuth)
674+ this._updateAutoLocation();
675 }
676
677 _loadInfo() {
678diff --git a/js/ui/animation.js b/js/ui/animation.js
679index 18c837e..cae0b5f 100644
680--- a/js/ui/animation.js
681+++ b/js/ui/animation.js
682@@ -3,6 +3,8 @@
683
684 const { Clutter, GLib, Gio, St } = imports.gi;
685
686+const Params = imports.misc.params;
687+
688 var ANIMATED_ICON_UPDATE_TIMEOUT = 16;
689 var SPINNER_ANIMATION_TIME = 300;
690 var SPINNER_ANIMATION_DELAY = 1000;
691@@ -131,12 +133,22 @@ var AnimatedIcon = class extends Animation {
692 };
693
694 var Spinner = class extends AnimatedIcon {
695- constructor(size, animate = false) {
696+ constructor(size, params) {
697+ // Compatibility with older callers
698+ if (params === true || params === false)
699+ params = { animate: params };
700+
701+ params = Params.parse(params, {
702+ animate: false,
703+ hideOnStop: false,
704+ });
705 let file = Gio.File.new_for_uri('resource:///org/gnome/shell/theme/process-working.svg');
706 super(file, size);
707
708 this.actor.opacity = 0;
709- this._animate = animate;
710+ this._animate = params.animate;
711+ this._hideOnStop = params.hideOnStop;
712+ this.actor.visible = !this._hideOnStop;
713 }
714
715 _onDestroy() {
716@@ -146,6 +158,7 @@ var Spinner = class extends AnimatedIcon {
717
718 play() {
719 this.actor.remove_all_transitions();
720+ this.actor.show();
721
722 if (this._animate) {
723 super.play();
724@@ -169,11 +182,18 @@ var Spinner = class extends AnimatedIcon {
725 opacity: 0,
726 duration: SPINNER_ANIMATION_TIME,
727 mode: Clutter.AnimationMode.LINEAR,
728- onComplete: () => super.stop()
729+ onComplete: () => {
730+ super.stop();
731+ if (this._hideOnStop)
732+ this.actor.hide();
733+ },
734 });
735 } else {
736 this.actor.opacity = 0;
737 super.stop();
738+
739+ if (this._hideOnStop)
740+ this.actor.hide();
741 }
742 }
743 };
744diff --git a/js/ui/appDisplay.js b/js/ui/appDisplay.js
745index cc946f0..ac9ae3b 100644
746--- a/js/ui/appDisplay.js
747+++ b/js/ui/appDisplay.js
748@@ -40,6 +40,9 @@ var PAGE_SWITCH_TIME = 300;
749 var APP_ICON_SCALE_IN_TIME = 500;
750 var APP_ICON_SCALE_IN_DELAY = 700;
751
752+const OVERSHOOT_THRESHOLD = 20;
753+const OVERSHOOT_TIMEOUT = 1000;
754+
755 const SWITCHEROO_BUS_NAME = 'net.hadess.SwitcherooControl';
756 const SWITCHEROO_OBJECT_PATH = '/net/hadess/SwitcherooControl';
757
758@@ -97,7 +100,10 @@ function _findBestFolderName(apps) {
759 let commonCategories = [];
760
761 appInfos.reduce((categories, appInfo) => {
762- for (let category of appInfo.get_categories().split(';')) {
763+ const appCategories = appInfo.get_categories();
764+ if (!appCategories)
765+ return categories;
766+ for (let category of appCategories.split(';')) {
767 if (!(category in categoryCounter))
768 categoryCounter[category] = 0;
769
770@@ -173,10 +179,11 @@ class BaseAppView {
771 // Remove old app icons
772 removedApps.forEach(icon => {
773 let iconIndex = this._allItems.indexOf(icon);
774+ let id = icon.id;
775
776 this._allItems.splice(iconIndex, 1);
777- this._grid.removeItem(icon);
778- delete this._items[icon.id];
779+ icon.actor.destroy();
780+ delete this._items[id];
781 });
782
783 // Add new app icons
784@@ -308,7 +315,12 @@ var AllView = class AllView extends BaseAppView {
785
786 this._grid.currentPage = 0;
787 this._stack.add_actor(this._grid);
788- this._eventBlocker = new St.Widget({ x_expand: true, y_expand: true });
789+ this._eventBlocker = new St.Widget({
790+ x_expand: true,
791+ y_expand: true,
792+ reactive: true,
793+ visible: false,
794+ });
795 this._stack.add_actor(this._eventBlocker);
796
797 box.add_actor(this._stack);
798@@ -335,12 +347,16 @@ var AllView = class AllView extends BaseAppView {
799 });
800 this._eventBlocker.add_action(this._clickAction);
801
802+ this._currentPopup = null;
803 this._displayingPopup = false;
804 this._currentPopupDestroyId = 0;
805
806 this._availWidth = 0;
807 this._availHeight = 0;
808
809+ this._lastOvershootY = -1;
810+ this._lastOvershootTimeoutId = 0;
811+
812 Main.overview.connect('hidden', () => this.goToPage(0));
813 this._grid.connect('space-opened', () => {
814 let fadeEffect = this._scrollView.get_effect('fade');
815@@ -377,8 +393,6 @@ var AllView = class AllView extends BaseAppView {
816
817 Main.overview.connect('item-drag-begin', this._onDragBegin.bind(this));
818 Main.overview.connect('item-drag-end', this._onDragEnd.bind(this));
819-
820- this._nEventBlockerInhibits = 0;
821 }
822
823 _redisplay() {
824@@ -425,7 +439,7 @@ var AllView = class AllView extends BaseAppView {
825 }
826
827 _loadApps() {
828- let newApps = [];
829+ let appIcons = [];
830 this._appInfoList = Shell.AppSystem.get_default().get_installed().filter(appInfo => {
831 try {
832 (appInfo.get_id()); // catch invalid file encodings
833@@ -450,7 +464,7 @@ var AllView = class AllView extends BaseAppView {
834 icon.connect('name-changed', this._itemNameChanged.bind(this));
835 icon.connect('apps-changed', this._redisplay.bind(this));
836 }
837- newApps.push(icon);
838+ appIcons.push(icon);
839 this.folderIcons.push(icon);
840 });
841
842@@ -463,14 +477,19 @@ var AllView = class AllView extends BaseAppView {
843 let favoritesWritable = global.settings.is_writable('favorite-apps');
844
845 apps.forEach(appId => {
846- let app = appSys.lookup_app(appId);
847+ let icon = this._items[appId];
848+ if (!icon) {
849+ let app = appSys.lookup_app(appId);
850
851- let icon = new AppIcon(app,
852- { isDraggable: favoritesWritable });
853- newApps.push(icon);
854+ icon = new AppIcon(app, {
855+ isDraggable: favoritesWritable,
856+ });
857+ }
858+
859+ appIcons.push(icon);
860 });
861
862- return newApps;
863+ return appIcons;
864 }
865
866 // Overridden from BaseAppView
867@@ -648,7 +667,7 @@ var AllView = class AllView extends BaseAppView {
868 addFolderPopup(popup) {
869 this._stack.add_actor(popup.actor);
870 popup.connect('open-state-changed', (popup, isOpen) => {
871- this._eventBlocker.reactive = isOpen;
872+ this._eventBlocker.visible = isOpen;
873
874 if (this._currentPopup) {
875 this._currentPopup.actor.disconnect(this._currentPopupDestroyId);
876@@ -662,7 +681,7 @@ var AllView = class AllView extends BaseAppView {
877 this._currentPopupDestroyId = popup.actor.connect('destroy', () => {
878 this._currentPopup = null;
879 this._currentPopupDestroyId = 0;
880- this._eventBlocker.reactive = false;
881+ this._eventBlocker.visible = false;
882 });
883 }
884 this._updateIconOpacities(isOpen);
885@@ -730,29 +749,58 @@ var AllView = class AllView extends BaseAppView {
886 this.folderIcons[i].adaptToSize(availWidth, availHeight);
887 }
888
889+ _resetOvershoot() {
890+ if (this._lastOvershootTimeoutId)
891+ GLib.source_remove(this._lastOvershootTimeoutId);
892+ this._lastOvershootTimeoutId = 0;
893+ this._lastOvershootY = -1;
894+ }
895+
896 _handleDragOvershoot(dragEvent) {
897 let [, gridY] = this.actor.get_transformed_position();
898 let [, gridHeight] = this.actor.get_transformed_size();
899 let gridBottom = gridY + gridHeight;
900
901- // Within the grid boundaries, or already animating
902- if (dragEvent.y > gridY && dragEvent.y < gridBottom ||
903- this._adjustment.get_transition('value') != null) {
904+ // Already animating
905+ if (this._adjustment.get_transition('value') !== null)
906 return;
907- }
908
909- // Moving above the grid
910- let currentY = this._adjustment.value;
911- if (dragEvent.y <= gridY && currentY > 0) {
912- this.goToPage(this._grid.currentPage - 1);
913+ // Within the grid boundaries
914+ if (dragEvent.y > gridY && dragEvent.y < gridBottom) {
915+ // Check whether we moved out the area of the last switch
916+ if (Math.abs(this._lastOvershootY - dragEvent.y) > OVERSHOOT_THRESHOLD)
917+ this._resetOvershoot();
918+
919 return;
920 }
921
922- // Moving below the grid
923+ // Still in the area of the previous page switch
924+ if (this._lastOvershootY >= 0)
925+ return;
926+
927+ let currentY = this._adjustment.value;
928 let maxY = this._adjustment.upper - this._adjustment.page_size;
929- if (dragEvent.y >= gridBottom && currentY < maxY) {
930+
931+ if (dragEvent.y <= gridY && currentY > 0)
932+ this.goToPage(this._grid.currentPage - 1);
933+ else if (dragEvent.y >= gridBottom && currentY < maxY)
934 this.goToPage(this._grid.currentPage + 1);
935- }
936+ else
937+ return; // don't go beyond first/last page
938+
939+ this._lastOvershootY = dragEvent.y;
940+
941+ if (this._lastOvershootTimeoutId > 0)
942+ GLib.source_remove(this._lastOvershootTimeoutId);
943+
944+ this._lastOvershootTimeoutId =
945+ GLib.timeout_add(GLib.PRIORITY_DEFAULT, OVERSHOOT_TIMEOUT, () => {
946+ this._resetOvershoot();
947+ this._handleDragOvershoot(dragEvent);
948+ return GLib.SOURCE_REMOVE;
949+ });
950+ GLib.Source.set_name_by_id(this._lastOvershootTimeoutId,
951+ '[gnome-shell] this._lastOvershootTimeoutId');
952 }
953
954 _onDragBegin() {
955@@ -760,6 +808,8 @@ var AllView = class AllView extends BaseAppView {
956 dragMotion: this._onDragMotion.bind(this)
957 };
958 DND.addDragMonitor(this._dragMonitor);
959+
960+ this._eventBlocker.visible = false;
961 }
962
963 _onDragMotion(dragEvent) {
964@@ -782,6 +832,9 @@ var AllView = class AllView extends BaseAppView {
965 DND.removeDragMonitor(this._dragMonitor);
966 this._dragMonitor = null;
967 }
968+
969+ this._eventBlocker.visible = this._currentPopup !== null;
970+ this._resetOvershoot();
971 }
972
973 _canAccept(source) {
974@@ -815,19 +868,6 @@ var AllView = class AllView extends BaseAppView {
975 return true;
976 }
977
978- inhibitEventBlocker() {
979- this._nEventBlockerInhibits++;
980- this._eventBlocker.visible = this._nEventBlockerInhibits == 0;
981- }
982-
983- uninhibitEventBlocker() {
984- if (this._nEventBlockerInhibits === 0)
985- throw new Error('Not inhibited');
986-
987- this._nEventBlockerInhibits--;
988- this._eventBlocker.visible = this._nEventBlockerInhibits == 0;
989- }
990-
991 createFolder(apps) {
992 let newFolderId = GLib.uuid_string_random();
993
994@@ -918,8 +958,12 @@ var FrequentView = class FrequentView extends BaseAppView {
995 for (let i = 0; i < mostUsed.length; i++) {
996 if (!mostUsed[i].get_app_info().should_show())
997 continue;
998- let appIcon = new AppIcon(mostUsed[i],
999- { isDraggable: favoritesWritable });
1000+ let appIcon = this._items[mostUsed[i].get_id()];
1001+ if (!appIcon) {
1002+ appIcon = new AppIcon(mostUsed[i], {
1003+ isDraggable: favoritesWritable,
1004+ });
1005+ }
1006 apps.push(appIcon);
1007 }
1008
1009@@ -1349,7 +1393,10 @@ var FolderView = class FolderView extends BaseAppView {
1010 if (apps.some(appIcon => appIcon.id == appId))
1011 return;
1012
1013- let icon = new AppIcon(app);
1014+ let icon = this._items[appId];
1015+ if (!icon)
1016+ icon = new AppIcon(app);
1017+
1018 apps.push(icon);
1019 };
1020
1021@@ -1387,15 +1434,15 @@ var FolderView = class FolderView extends BaseAppView {
1022 // Remove the folder if this is the last app icon; otherwise,
1023 // just remove the icon
1024 if (folderApps.length == 0) {
1025- let settings = new Gio.Settings({ schema_id: 'org.gnome.desktop.app-folders' });
1026- let folders = settings.get_strv('folder-children');
1027- folders.splice(folders.indexOf(this._id), 1);
1028- settings.set_strv('folder-children', folders);
1029-
1030 // Resetting all keys deletes the relocatable schema
1031 let keys = this._folder.settings_schema.list_keys();
1032 for (let key of keys)
1033 this._folder.reset(key);
1034+
1035+ let settings = new Gio.Settings({ schema_id: 'org.gnome.desktop.app-folders' });
1036+ let folders = settings.get_strv('folder-children');
1037+ folders.splice(folders.indexOf(this._id), 1);
1038+ settings.set_strv('folder-children', folders);
1039 } else {
1040 this._folder.set_strv('apps', folderApps);
1041 }
1042@@ -1487,8 +1534,6 @@ var FolderIcon = class FolderIcon {
1043 dragMotion: this._onDragMotion.bind(this),
1044 };
1045 DND.addDragMonitor(this._dragMonitor);
1046-
1047- this._parentView.inhibitEventBlocker();
1048 }
1049
1050 _onDragMotion(dragEvent) {
1051@@ -1504,7 +1549,6 @@ var FolderIcon = class FolderIcon {
1052
1053 _onDragEnd() {
1054 this.actor.remove_style_pseudo_class('drop');
1055- this._parentView.uninhibitEventBlocker();
1056 DND.removeDragMonitor(this._dragMonitor);
1057 }
1058
1059@@ -1994,17 +2038,10 @@ var AppIcon = class AppIcon {
1060 x_fill: true,
1061 y_fill: true });
1062
1063- this._dot = new St.Widget({ style_class: 'app-well-app-running-dot',
1064- layout_manager: new Clutter.BinLayout(),
1065- x_expand: true, y_expand: true,
1066- x_align: Clutter.ActorAlign.CENTER,
1067- y_align: Clutter.ActorAlign.END });
1068-
1069 this._iconContainer = new St.Widget({ layout_manager: new Clutter.BinLayout(),
1070 x_expand: true, y_expand: true });
1071
1072 this.actor.set_child(this._iconContainer);
1073- this._iconContainer.add_child(this._dot);
1074
1075 this.actor._delegate = this;
1076
1077@@ -2021,6 +2058,16 @@ var AppIcon = class AppIcon {
1078 this.icon = new IconGrid.BaseIcon(app.get_name(), iconParams);
1079 this._iconContainer.add_child(this.icon);
1080
1081+ this._dot = new St.Widget({
1082+ style_class: 'app-well-app-running-dot',
1083+ layout_manager: new Clutter.BinLayout(),
1084+ x_expand: true,
1085+ y_expand: true,
1086+ x_align: Clutter.ActorAlign.CENTER,
1087+ y_align: Clutter.ActorAlign.END,
1088+ });
1089+ this._iconContainer.add_child(this._dot);
1090+
1091 this.actor.label_actor = this.icon.label;
1092
1093 this.actor.connect('leave-event', this._onLeaveEvent.bind(this));
1094@@ -2051,6 +2098,7 @@ var AppIcon = class AppIcon {
1095 });
1096 }
1097
1098+ this._dragMonitor = null;
1099 this._itemDragBeginId = Main.overview.connect(
1100 'item-drag-begin', this._onDragBegin.bind(this));
1101 this._itemDragEndId = Main.overview.connect(
1102@@ -2075,6 +2123,12 @@ var AppIcon = class AppIcon {
1103 }
1104 if (this._stateChangedId > 0)
1105 this.app.disconnect(this._stateChangedId);
1106+
1107+ if (this._dragMonitor) {
1108+ DND.removeDragMonitor(this._dragMonitor);
1109+ this._dragMonitor = null;
1110+ }
1111+
1112 if (this._draggable) {
1113 if (this._dragging)
1114 Main.overview.endItemDrag(this);
1115diff --git a/js/ui/closeDialog.js b/js/ui/closeDialog.js
1116index 6d0519f..b943e85 100644
1117--- a/js/ui/closeDialog.js
1118+++ b/js/ui/closeDialog.js
1119@@ -1,7 +1,7 @@
1120 // -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
1121 /* exported CloseDialog */
1122
1123-const { Clutter, Gio, GLib, GObject, Meta, Shell } = imports.gi;
1124+const { Clutter, Gio, GLib, GObject, Meta, Shell, St } = imports.gi;
1125
1126 const Dialog = imports.ui.dialog;
1127 const Main = imports.ui.main;
1128@@ -46,6 +46,18 @@ var CloseDialog = GObject.registerClass({
1129 return new Dialog.MessageDialogContent({ icon, title, subtitle });
1130 }
1131
1132+ _updateScale() {
1133+ // Since this is a child of MetaWindowActor (which, for Wayland clients,
1134+ // applies the geometry scale factor to its children itself, see
1135+ // meta_window_actor_set_geometry_scale()), make sure we don't apply
1136+ // the factor twice in the end.
1137+ if (this._window.get_client_type() !== Meta.WindowClientType.WAYLAND)
1138+ return;
1139+
1140+ let { scaleFactor } = St.ThemeContext.get_for_stage(global.stage);
1141+ this._dialog.set_scale(1 / scaleFactor, 1 / scaleFactor);
1142+ }
1143+
1144 _initDialog() {
1145 if (this._dialog)
1146 return;
1147@@ -64,6 +76,11 @@ var CloseDialog = GObject.registerClass({
1148 key: Clutter.Escape });
1149
1150 global.focus_manager.add_group(this._dialog);
1151+
1152+ let themeContext = St.ThemeContext.get_for_stage(global.stage);
1153+ themeContext.connect('notify::scale-factor', this._updateScale.bind(this));
1154+
1155+ this._updateScale();
1156 }
1157
1158 _addWindowEffect() {
1159@@ -145,10 +162,10 @@ var CloseDialog = GObject.registerClass({
1160 this._addWindowEffect();
1161 this._initDialog();
1162
1163- this._dialog.scale_y = 0;
1164- this._dialog.set_pivot_point(0.5, 0.5);
1165+ this._dialog._dialog.scale_y = 0;
1166+ this._dialog._dialog.set_pivot_point(0.5, 0.5);
1167
1168- this._dialog.ease({
1169+ this._dialog._dialog.ease({
1170 scale_y: 1,
1171 mode: Clutter.AnimationMode.LINEAR,
1172 duration: DIALOG_TRANSITION_TIME,
1173@@ -175,7 +192,7 @@ var CloseDialog = GObject.registerClass({
1174 this._dialog = null;
1175 this._removeWindowEffect();
1176
1177- dialog.ease({
1178+ dialog._dialog.ease({
1179 scale_y: 0,
1180 mode: Clutter.AnimationMode.LINEAR,
1181 duration: DIALOG_TRANSITION_TIME,
1182diff --git a/js/ui/components/keyring.js b/js/ui/components/keyring.js
1183index 66948b6..24bcc6c 100644
1184--- a/js/ui/components/keyring.js
1185+++ b/js/ui/components/keyring.js
1186@@ -74,7 +74,9 @@ class KeyringDialog extends ModalDialog.ModalDialog {
1187 ShellEntry.addContextMenu(this._passwordEntry, { isPassword: true });
1188 this._passwordEntry.clutter_text.connect('activate', this._onPasswordActivate.bind(this));
1189
1190- this._workSpinner = new Animation.Spinner(WORK_SPINNER_ICON_SIZE, true);
1191+ this._workSpinner = new Animation.Spinner(WORK_SPINNER_ICON_SIZE, {
1192+ animate: true,
1193+ });
1194
1195 if (rtl) {
1196 layout.attach(this._workSpinner.actor, 0, row, 1, 1);
1197diff --git a/js/ui/components/polkitAgent.js b/js/ui/components/polkitAgent.js
1198index 1c1b8e6..bd05526 100644
1199--- a/js/ui/components/polkitAgent.js
1200+++ b/js/ui/components/polkitAgent.js
1201@@ -11,6 +11,11 @@ const ModalDialog = imports.ui.modalDialog;
1202 const ShellEntry = imports.ui.shellEntry;
1203 const UserWidget = imports.ui.userWidget;
1204
1205+const DialogMode = {
1206+ AUTH: 0,
1207+ CONFIRM: 1,
1208+};
1209+
1210 var DIALOG_ICON_SIZE = 48;
1211
1212 var WORK_SPINNER_ICON_SIZE = 16;
1213@@ -51,47 +56,32 @@ var AuthenticationDialog = GObject.registerClass({
1214 userName = userNames[0];
1215
1216 this._user = AccountsService.UserManager.get_default().get_user(userName);
1217- let userRealName = this._user.get_real_name();
1218- this._userLoadedId = this._user.connect('notify::is_loaded',
1219- this._onUserChanged.bind(this));
1220- this._userChangedId = this._user.connect('changed',
1221- this._onUserChanged.bind(this));
1222
1223- // Special case 'root'
1224- let userIsRoot = false;
1225- if (userName == 'root') {
1226- userIsRoot = true;
1227- userRealName = _("Administrator");
1228- }
1229+ let userBox = new St.BoxLayout({
1230+ style_class: 'polkit-dialog-user-layout',
1231+ vertical: false,
1232+ });
1233+ content.messageBox.add(userBox);
1234
1235- if (userIsRoot) {
1236- let userLabel = new St.Label(({ style_class: 'polkit-dialog-user-root-label',
1237- text: userRealName }));
1238- content.messageBox.add(userLabel, { x_fill: false,
1239- x_align: St.Align.START });
1240- } else {
1241- let userBox = new St.BoxLayout({ style_class: 'polkit-dialog-user-layout',
1242- vertical: false });
1243- content.messageBox.add(userBox);
1244- this._userAvatar = new UserWidget.Avatar(this._user,
1245- { iconSize: DIALOG_ICON_SIZE,
1246- styleClass: 'polkit-dialog-user-icon' });
1247- this._userAvatar.actor.hide();
1248- userBox.add(this._userAvatar.actor,
1249- { x_fill: true,
1250- y_fill: false,
1251- x_align: St.Align.END,
1252- y_align: St.Align.START });
1253- let userLabel = new St.Label(({ style_class: 'polkit-dialog-user-label',
1254- text: userRealName }));
1255- userBox.add(userLabel,
1256- { x_fill: true,
1257- y_fill: false,
1258- x_align: St.Align.END,
1259- y_align: St.Align.MIDDLE });
1260- }
1261+ this._userAvatar = new UserWidget.Avatar(this._user, {
1262+ iconSize: DIALOG_ICON_SIZE,
1263+ styleClass: 'polkit-dialog-user-icon',
1264+ });
1265+ this._userAvatar.actor.hide();
1266+ userBox.add_child(this._userAvatar.actor);
1267+
1268+ this._userLabel = new St.Label({
1269+ style_class: userName === 'root'
1270+ ? 'polkit-dialog-user-root-label'
1271+ : 'polkit-dialog-user-label',
1272+ x_expand: true,
1273+ y_align: Clutter.ActorAlign.CENTER,
1274+ });
1275
1276- this._onUserChanged();
1277+ if (userName === 'root')
1278+ this._userLabel.text = _('Administrator');
1279+
1280+ userBox.add_child(this._userLabel);
1281
1282 this._passwordBox = new St.BoxLayout({ vertical: false, style_class: 'prompt-dialog-password-box' });
1283 content.messageBox.add(this._passwordBox);
1284@@ -105,7 +95,9 @@ var AuthenticationDialog = GObject.registerClass({
1285 this._passwordBox.add(this._passwordEntry,
1286 { expand: true });
1287
1288- this._workSpinner = new Animation.Spinner(WORK_SPINNER_ICON_SIZE, true);
1289+ this._workSpinner = new Animation.Spinner(WORK_SPINNER_ICON_SIZE, {
1290+ animate: true,
1291+ });
1292 this._passwordBox.add(this._workSpinner.actor);
1293
1294 this.setInitialKeyFocus(this._passwordEntry);
1295@@ -144,8 +136,16 @@ var AuthenticationDialog = GObject.registerClass({
1296
1297 this._doneEmitted = false;
1298
1299+ this._mode = -1;
1300+
1301 this._identityToAuth = Polkit.UnixUser.new_for_name(userName);
1302 this._cookie = cookie;
1303+
1304+ this._userLoadedId = this._user.connect('notify::is-loaded',
1305+ this._onUserChanged.bind(this));
1306+ this._userChangedId = this._user.connect('changed',
1307+ this._onUserChanged.bind(this));
1308+ this._onUserChanged();
1309 }
1310
1311 _setWorking(working) {
1312@@ -155,8 +155,9 @@ var AuthenticationDialog = GObject.registerClass({
1313 this._workSpinner.stop();
1314 }
1315
1316- performAuthentication() {
1317+ _initiateSession() {
1318 this._destroySession();
1319+
1320 this._session = new PolkitAgent.Session({ identity: this._identityToAuth,
1321 cookie: this._cookie });
1322 this._sessionCompletedId = this._session.connect('completed', this._onSessionCompleted.bind(this));
1323@@ -216,7 +217,10 @@ var AuthenticationDialog = GObject.registerClass({
1324 }
1325
1326 _onAuthenticateButtonPressed() {
1327- this._onEntryActivate();
1328+ if (this._mode === DialogMode.CONFIRM)
1329+ this._initiateSession();
1330+ else
1331+ this._onEntryActivate();
1332 }
1333
1334 _onSessionCompleted(session, gainedAuthorization) {
1335@@ -247,7 +251,7 @@ var AuthenticationDialog = GObject.registerClass({
1336 }
1337
1338 /* Try and authenticate again */
1339- this.performAuthentication();
1340+ this._initiateSession();
1341 }
1342 }
1343
1344@@ -303,10 +307,40 @@ var AuthenticationDialog = GObject.registerClass({
1345 }
1346
1347 _onUserChanged() {
1348- if (this._user.is_loaded && this._userAvatar) {
1349+ if (!this._user.is_loaded)
1350+ return;
1351+
1352+ let userName = this._user.get_user_name();
1353+ let realName = this._user.get_real_name();
1354+
1355+ if (userName !== 'root') {
1356+ this._userLabel.set_text(realName);
1357+
1358 this._userAvatar.update();
1359 this._userAvatar.actor.show();
1360 }
1361+
1362+ if (this._user.get_password_mode() === AccountsService.UserPasswordMode.NONE) {
1363+ if (this._mode === DialogMode.CONFIRM)
1364+ return;
1365+
1366+ this._mode = DialogMode.CONFIRM;
1367+ this._destroySession();
1368+
1369+ this._okButton.reactive = true;
1370+
1371+ /* We normally open the dialog when we get a "request" signal, but
1372+ * since in this case initiating a session would perform the
1373+ * authentication, only open the dialog and initiate the session
1374+ * when the user confirmed. */
1375+ this._ensureOpen();
1376+ } else {
1377+ if (this._mode === DialogMode.AUTH)
1378+ return;
1379+
1380+ this._mode = DialogMode.AUTH;
1381+ this._initiateSession();
1382+ }
1383 }
1384
1385 cancel() {
1386@@ -369,19 +403,7 @@ var AuthenticationAgent = class {
1387 }
1388
1389 this._currentDialog = new AuthenticationDialog(actionId, message, cookie, userNames);
1390-
1391- // We actually don't want to open the dialog until we know for
1392- // sure that we're going to interact with the user. For
1393- // example, if the password for the identity to auth is blank
1394- // (which it will be on a live CD) then there will be no
1395- // conversation at all... of course, we don't *know* that
1396- // until we actually try it.
1397- //
1398- // See https://bugzilla.gnome.org/show_bug.cgi?id=643062 for more
1399- // discussion.
1400-
1401 this._currentDialog.connect('done', this._onDialogDone.bind(this));
1402- this._currentDialog.performAuthentication();
1403 }
1404
1405 _onCancel(_nativeAgent) {
1406diff --git a/js/ui/dnd.js b/js/ui/dnd.js
1407index 786d654..7d3929d 100644
1408--- a/js/ui/dnd.js
1409+++ b/js/ui/dnd.js
1410@@ -573,11 +573,15 @@ var _Draggable = class _Draggable {
1411 while (target) {
1412 if (target._delegate && target._delegate.acceptDrop) {
1413 let [r_, targX, targY] = target.transform_stage_point(dropX, dropY);
1414- if (target._delegate.acceptDrop(this.actor._delegate,
1415- this._dragActor,
1416- targX,
1417- targY,
1418- event.get_time())) {
1419+ let accepted = false;
1420+ try {
1421+ accepted = target._delegate.acceptDrop(this.actor._delegate,
1422+ this._dragActor, targX, targY, event.get_time());
1423+ } catch (e) {
1424+ // On error, skip this target
1425+ logError(e, "Skipping drag target");
1426+ }
1427+ if (accepted) {
1428 // If it accepted the drop without taking the actor,
1429 // handle it ourselves.
1430 if (this._dragActor && this._dragActor.get_parent() == Main.uiGroup) {
1431diff --git a/js/ui/extensionSystem.js b/js/ui/extensionSystem.js
1432index 7c36d70..a7a3869 100644
1433--- a/js/ui/extensionSystem.js
1434+++ b/js/ui/extensionSystem.js
1435@@ -1,7 +1,7 @@
1436 // -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
1437 /* exported init connect disconnect */
1438
1439-const { Gio, St } = imports.gi;
1440+const { GLib, Gio, St } = imports.gi;
1441 const Signals = imports.signals;
1442
1443 const ExtensionUtils = imports.misc.extensionUtils;
1444@@ -28,6 +28,23 @@ var ExtensionManager = class {
1445 }
1446
1447 init() {
1448+ // The following file should exist for a period of time when extensions
1449+ // are enabled after start. If it exists, then the systemd unit will
1450+ // disable extensions should gnome-shell crash.
1451+ // Should the file already exist from a previous login, then this is OK.
1452+ let disableFilename = GLib.build_filenamev([GLib.get_user_runtime_dir(), 'gnome-shell-disable-extensions']);
1453+ let disableFile = Gio.File.new_for_path(disableFilename);
1454+ try {
1455+ disableFile.create(Gio.FileCreateFlags.REPLACE_DESTINATION, null);
1456+ } catch (e) {
1457+ log(`Failed to create file ${disableFilename}: ${e.message}`);
1458+ }
1459+
1460+ GLib.timeout_add_seconds(GLib.PRIORITY_DEFAULT, 60, () => {
1461+ FileUtils.deleteGFile(disableFile);
1462+ return GLib.SOURCE_REMOVE;
1463+ });
1464+
1465 this._sessionUpdated();
1466 }
1467
1468diff --git a/js/ui/keyboard.js b/js/ui/keyboard.js
1469index 45eb5ce..3d8e84f 100644
1470--- a/js/ui/keyboard.js
1471+++ b/js/ui/keyboard.js
1472@@ -466,10 +466,17 @@ Signals.addSignalMethods(Key.prototype);
1473
1474 var KeyboardModel = class {
1475 constructor(groupName) {
1476- try {
1477- this._model = this._loadModel(groupName);
1478- } catch (e) {
1479- this._model = this._loadModel('us');
1480+ let names = [groupName];
1481+ if (names.includes('+'))
1482+ names.push(groupName.replace(/\+.*/, ''));
1483+ names.push('us');
1484+
1485+ for (let i = 0; i < names.length; i++) {
1486+ try {
1487+ this._model = this._loadModel(names[i]);
1488+ break;
1489+ } catch (e) {
1490+ }
1491 }
1492 }
1493
1494diff --git a/js/ui/layout.js b/js/ui/layout.js
1495index 744a8f1..1441bfe 100644
1496--- a/js/ui/layout.js
1497+++ b/js/ui/layout.js
1498@@ -189,6 +189,7 @@ var LayoutManager = GObject.registerClass({
1499 'startup-complete': {},
1500 'startup-prepared': {},
1501 'monitors-changed': {},
1502+ 'system-modal-opened': {},
1503 'keyboard-visible-changed': { param_types: [GObject.TYPE_BOOLEAN] } },
1504 }, class LayoutManager extends GObject.Object {
1505 _init() {
1506diff --git a/js/ui/magnifier.js b/js/ui/magnifier.js
1507index 0ec30ee..70b1291 100644
1508--- a/js/ui/magnifier.js
1509+++ b/js/ui/magnifier.js
1510@@ -127,6 +127,8 @@ var Magnifier = class Magnifier {
1511 * Show the system mouse pointer.
1512 */
1513 showSystemCursor() {
1514+ if (this._cursorTracker.set_keep_focus_while_hidden)
1515+ this._cursorTracker.set_keep_focus_while_hidden(false);
1516 this._cursorTracker.set_pointer_visible(true);
1517 }
1518
1519@@ -135,6 +137,8 @@ var Magnifier = class Magnifier {
1520 * Hide the system mouse pointer.
1521 */
1522 hideSystemCursor() {
1523+ if (this._cursorTracker.set_keep_focus_while_hidden)
1524+ this._cursorTracker.set_keep_focus_while_hidden(true);
1525 this._cursorTracker.set_pointer_visible(false);
1526 }
1527
1528@@ -169,7 +173,7 @@ var Magnifier = class Magnifier {
1529 // Make sure system mouse pointer is shown when all zoom regions are
1530 // invisible.
1531 if (!activate)
1532- this._cursorTracker.set_pointer_visible(true);
1533+ this.showSystemCursor();
1534
1535 // Notify interested parties of this change
1536 this.emit('active-changed', activate);
1537diff --git a/js/ui/messageList.js b/js/ui/messageList.js
1538index 4dcdb6d..45f2963 100644
1539--- a/js/ui/messageList.js
1540+++ b/js/ui/messageList.js
1541@@ -333,7 +333,10 @@ var Message = class Message {
1542
1543 let closeIcon = new St.Icon({ icon_name: 'window-close-symbolic',
1544 icon_size: 16 });
1545- this._closeButton = new St.Button({ child: closeIcon, opacity: 0 });
1546+ this._closeButton = new St.Button({
1547+ style_class: 'message-close-button',
1548+ child: closeIcon, opacity: 0,
1549+ });
1550 titleBox.add_actor(this._closeButton);
1551
1552 this._bodyStack = new St.Widget({ x_expand: true });
1553diff --git a/js/ui/modalDialog.js b/js/ui/modalDialog.js
1554index 1eeb15a..64d0200 100644
1555--- a/js/ui/modalDialog.js
1556+++ b/js/ui/modalDialog.js
1557@@ -216,6 +216,8 @@ var ModalDialog = GObject.registerClass({
1558 if (!Main.pushModal(this, params))
1559 return false;
1560
1561+ Main.layoutManager.emit('system-modal-opened');
1562+
1563 this._hasModal = true;
1564 if (this._savedKeyFocus) {
1565 this._savedKeyFocus.grab_key_focus();
1566diff --git a/js/ui/panel.js b/js/ui/panel.js
1567index 49c0038..77163a7 100644
1568--- a/js/ui/panel.js
1569+++ b/js/ui/panel.js
1570@@ -170,9 +170,13 @@ class AppMenu extends PopupMenu.PopupMenu {
1571 let windows = this._app.get_windows();
1572 windows.forEach(window => {
1573 let title = window.title || this._app.get_name();
1574- this._windowSection.addAction(title, event => {
1575+ let item = this._windowSection.addAction(title, event => {
1576 Main.activateWindow(window, event.get_time());
1577 });
1578+ let id = window.connect('notify::title', () => {
1579+ item.label.text = window.title || this._app.get_name();
1580+ });
1581+ item.connect('destroy', () => window.disconnect(id));
1582 });
1583 }
1584 }
1585@@ -234,7 +238,10 @@ var AppMenuButton = GObject.registerClass({
1586 this._overviewHidingId = Main.overview.connect('hiding', this._sync.bind(this));
1587 this._overviewShowingId = Main.overview.connect('showing', this._sync.bind(this));
1588
1589- this._spinner = new Animation.Spinner(PANEL_ICON_SIZE, true);
1590+ this._spinner = new Animation.Spinner(PANEL_ICON_SIZE, {
1591+ animate: true,
1592+ hideOnStop: true,
1593+ });
1594 this._container.add_actor(this._spinner.actor);
1595
1596 let menu = new AppMenu(this);
1597diff --git a/js/ui/popupMenu.js b/js/ui/popupMenu.js
1598index 49ed823..b5eb992 100644
1599--- a/js/ui/popupMenu.js
1600+++ b/js/ui/popupMenu.js
1601@@ -804,6 +804,7 @@ var PopupMenu = class extends PopupMenuBase {
1602 this._keyPressId = this.sourceActor.connect('key-press-event',
1603 this._onKeyPress.bind(this));
1604
1605+ this._systemModalOpenedId = 0;
1606 this._openedSubMenu = null;
1607 }
1608
1609@@ -878,6 +879,11 @@ var PopupMenu = class extends PopupMenuBase {
1610 if (this.isEmpty())
1611 return;
1612
1613+ if (!this._systemModalOpenedId) {
1614+ this._systemModalOpenedId =
1615+ Main.layoutManager.connect('system-modal-opened', () => this.close());
1616+ }
1617+
1618 this.isOpen = true;
1619
1620 this._boxPointer.setPosition(this.sourceActor, this._arrowAlignment);
1621@@ -908,6 +914,11 @@ var PopupMenu = class extends PopupMenuBase {
1622 destroy() {
1623 if (this._keyPressId)
1624 this.sourceActor.disconnect(this._keyPressId);
1625+
1626+ if (this._systemModalOpenedId)
1627+ Main.layoutManager.disconnect(this._systemModalOpenedId);
1628+ this._systemModalOpenedId = 0;
1629+
1630 super.destroy();
1631 }
1632 };
1633diff --git a/js/ui/screenShield.js b/js/ui/screenShield.js
1634index ba50ef9..f915143 100644
1635--- a/js/ui/screenShield.js
1636+++ b/js/ui/screenShield.js
1637@@ -53,11 +53,17 @@ var Clock = class {
1638 this.actor = new St.BoxLayout({ style_class: 'screen-shield-clock',
1639 vertical: true });
1640
1641- this._time = new St.Label({ style_class: 'screen-shield-clock-time' });
1642- this._date = new St.Label({ style_class: 'screen-shield-clock-date' });
1643+ this._time = new St.Label({
1644+ style_class: 'screen-shield-clock-time',
1645+ x_align: Clutter.ActorAlign.CENTER,
1646+ });
1647+ this._date = new St.Label({
1648+ style_class: 'screen-shield-clock-date',
1649+ x_align: Clutter.ActorAlign.CENTER,
1650+ });
1651
1652- this.actor.add(this._time, { x_align: St.Align.MIDDLE });
1653- this.actor.add(this._date, { x_align: St.Align.MIDDLE });
1654+ this.actor.add_child(this._time);
1655+ this.actor.add_child(this._date);
1656
1657 this._wallClock = new GnomeDesktop.WallClock({ time_only: true });
1658 this._wallClock.connect('notify::clock', this._updateClock.bind(this));
1659@@ -93,7 +99,7 @@ var NotificationsBox = class {
1660 style_class: 'screen-shield-notifications-container' });
1661 this._scrollView.add_actor(this._notificationBox);
1662
1663- this.actor.add(this._scrollView, { x_fill: true, x_align: St.Align.START });
1664+ this.actor.add_child(this._scrollView);
1665
1666 this._sources = new Map();
1667 Main.messageTray.getSources().forEach(source => {
1668@@ -134,10 +140,10 @@ var NotificationsBox = class {
1669
1670 _makeNotificationSource(source, box) {
1671 let sourceActor = new MessageTray.SourceActor(source, SUMMARY_ICON_SIZE);
1672- box.add(sourceActor, { y_fill: true });
1673+ box.add_child(sourceActor);
1674
1675 let textBox = new St.BoxLayout({ vertical: true });
1676- box.add(textBox, { y_fill: false, y_align: St.Align.START });
1677+ box.add_child(textBox);
1678
1679 let title = new St.Label({ text: source.title,
1680 style_class: 'screen-shield-notification-label' });
1681@@ -160,7 +166,7 @@ var NotificationsBox = class {
1682 box.add(sourceBin);
1683
1684 let textBox = new St.BoxLayout({ vertical: true });
1685- box.add(textBox, { y_fill: false, y_align: St.Align.START });
1686+ box.add_child(textBox);
1687
1688 let title = new St.Label({ text: source.title,
1689 style_class: 'screen-shield-notification-label' });
1690@@ -222,7 +228,7 @@ var NotificationsBox = class {
1691 obj.sourceBox = new St.BoxLayout({ style_class: 'screen-shield-notification-source',
1692 x_expand: true });
1693 this._showSource(source, obj, obj.sourceBox);
1694- this._notificationBox.add(obj.sourceBox, { x_fill: false, x_align: St.Align.START });
1695+ this._notificationBox.add_child(obj.sourceBox);
1696
1697 obj.sourceCountChangedId = source.connect('count-updated', source => {
1698 this._countChanged(source, obj);
1699@@ -1133,16 +1139,13 @@ var ScreenShield = class {
1700 vertical: true,
1701 style_class: 'screen-shield-contents-box' });
1702 this._clock = new Clock();
1703- this._lockScreenContentsBox.add(this._clock.actor, { x_fill: true,
1704- y_fill: true });
1705+ this._lockScreenContentsBox.add_child(this._clock.actor);
1706
1707 this._lockScreenContents.add_actor(this._lockScreenContentsBox);
1708
1709 this._notificationsBox = new NotificationsBox();
1710 this._wakeUpScreenId = this._notificationsBox.connect('wake-up-screen', this._wakeUpScreen.bind(this));
1711- this._lockScreenContentsBox.add(this._notificationsBox.actor, { x_fill: true,
1712- y_fill: true,
1713- expand: true });
1714+ this._lockScreenContentsBox.add_child(this._notificationsBox.actor);
1715
1716 this._hasLockScreen = true;
1717 }
1718diff --git a/js/ui/shellMountOperation.js b/js/ui/shellMountOperation.js
1719index ff5cb23..5c08c36 100644
1720--- a/js/ui/shellMountOperation.js
1721+++ b/js/ui/shellMountOperation.js
1722@@ -359,7 +359,9 @@ var ShellMountPasswordDialog = GObject.registerClass({
1723 this._passwordEntry.clutter_text.set_password_char('\u25cf'); // ● U+25CF BLACK CIRCLE
1724 ShellEntry.addContextMenu(this._passwordEntry, { isPassword: true });
1725 this.setInitialKeyFocus(this._passwordEntry);
1726- this._workSpinner = new Animation.Spinner(WORK_SPINNER_ICON_SIZE, true);
1727+ this._workSpinner = new Animation.Spinner(WORK_SPINNER_ICON_SIZE, {
1728+ animate: true,
1729+ });
1730 this._passwordEntry.secondary_icon = this._workSpinner.actor;
1731
1732 if (rtl) {
1733diff --git a/js/ui/status/power.js b/js/ui/status/power.js
1734index 486a7fd..24edc53 100644
1735--- a/js/ui/status/power.js
1736+++ b/js/ui/status/power.js
1737@@ -111,9 +111,12 @@ var Indicator = class extends PanelMenu.SystemIndicator {
1738 let chargingState = this._proxy.State == UPower.DeviceState.CHARGING
1739 ? '-charging' : '';
1740 let fillLevel = 10 * Math.floor(this._proxy.Percentage / 10);
1741- let icon = this._proxy.State == UPower.DeviceState.FULLY_CHARGED
1742- ? 'battery-level-100-charged-symbolic'
1743- : `battery-level-${fillLevel}${chargingState}-symbolic`;
1744+ let icon;
1745+ if (this._proxy.State == UPower.DeviceState.FULLY_CHARGED ||
1746+ fillLevel === 100)
1747+ icon = 'battery-level-100-charged-symbolic';
1748+ else
1749+ icon = `battery-level-${fillLevel}${chargingState}-symbolic`;
1750
1751 // Make sure we fall back to fallback-icon-name and not GThemedIcon's
1752 // default fallbacks
1753diff --git a/js/ui/switcherPopup.js b/js/ui/switcherPopup.js
1754index 9bb690c..693a415 100644
1755--- a/js/ui/switcherPopup.js
1756+++ b/js/ui/switcherPopup.js
1757@@ -46,6 +46,9 @@ var SwitcherPopup = GObject.registerClass({
1758
1759 Main.uiGroup.add_actor(this);
1760
1761+ this._systemModalOpenedId =
1762+ Main.layoutManager.connect('system-modal-opened', () => this.destroy());
1763+
1764 this._haveModal = false;
1765 this._modifierMask = 0;
1766
1767@@ -180,6 +183,14 @@ var SwitcherPopup = GObject.registerClass({
1768 if (keysym == Clutter.Escape || keysym == Clutter.Tab)
1769 this.fadeAndDestroy();
1770
1771+ // Allow to explicitly select the current item; this is particularly
1772+ // useful for no-modifier popups
1773+ if (keysym === Clutter.KEY_space ||
1774+ keysym === Clutter.KEY_Return ||
1775+ keysym === Clutter.KEY_KP_Enter ||
1776+ keysym === Clutter.KEY_ISO_Enter)
1777+ this._finish(event.get_time());
1778+
1779 return Clutter.EVENT_STOP;
1780 }
1781
1782@@ -270,7 +281,7 @@ var SwitcherPopup = GObject.registerClass({
1783 GLib.PRIORITY_DEFAULT,
1784 NO_MODS_TIMEOUT,
1785 () => {
1786- this._finish(global.get_current_time());
1787+ this._finish(global.display.get_current_time_roundtrip());
1788 this._noModsTimeoutId = 0;
1789 return GLib.SOURCE_REMOVE;
1790 });
1791@@ -304,6 +315,8 @@ var SwitcherPopup = GObject.registerClass({
1792 _onDestroy() {
1793 this._popModal();
1794
1795+ Main.layoutManager.disconnect(this._systemModalOpenedId);
1796+
1797 if (this._motionTimeoutId != 0)
1798 GLib.source_remove(this._motionTimeoutId);
1799 if (this._initialDelayTimeoutId != 0)
1800@@ -560,10 +573,10 @@ var SwitcherList = GObject.registerClass({
1801 let leftPadding = this.get_theme_node().get_padding(St.Side.LEFT);
1802 let rightPadding = this.get_theme_node().get_padding(St.Side.RIGHT);
1803
1804- let [, natScrollViewWidth] = this._scrollView.get_preferred_width(height);
1805+ let [minListWidth] = this._list.get_preferred_width(height);
1806
1807 let childBox = new Clutter.ActorBox();
1808- let scrollable = natScrollViewWidth > width;
1809+ let scrollable = minListWidth > width;
1810
1811 this._scrollView.allocate(contentBox, flags);
1812
1813diff --git a/js/ui/windowManager.js b/js/ui/windowManager.js
1814index c9e48e7..7ea2b81 100644
1815--- a/js/ui/windowManager.js
1816+++ b/js/ui/windowManager.js
1817@@ -700,16 +700,17 @@ var WindowManager = class {
1818 constructor() {
1819 this._shellwm = global.window_manager;
1820
1821- this._minimizing = [];
1822- this._unminimizing = [];
1823- this._mapping = [];
1824- this._resizing = [];
1825- this._destroying = [];
1826+ this._minimizing = new Set();
1827+ this._unminimizing = new Set();
1828+ this._mapping = new Set();
1829+ this._resizing = new Set();
1830+ this._resizePending = new Set();
1831+ this._destroying = new Set();
1832 this._movingWindow = null;
1833
1834 this._dimmedWindows = [];
1835
1836- this._skippedActors = [];
1837+ this._skippedActors = new Set();
1838
1839 this._allowedKeybindings = {};
1840
1841@@ -1257,7 +1258,7 @@ var WindowManager = class {
1842 }
1843
1844 skipNextEffect(actor) {
1845- this._skippedActors.push(actor);
1846+ this._skippedActors.add(actor);
1847 }
1848
1849 setCustomKeybindingHandler(name, modes, handler) {
1850@@ -1286,7 +1287,7 @@ var WindowManager = class {
1851 }
1852
1853 _shouldAnimateActor(actor, types) {
1854- if (this._removeEffect(this._skippedActors, actor))
1855+ if (this._skippedActors.delete(actor))
1856 return false;
1857
1858 if (!this._shouldAnimate())
1859@@ -1299,15 +1300,6 @@ var WindowManager = class {
1860 return types.includes(type);
1861 }
1862
1863- _removeEffect(list, actor) {
1864- let idx = list.indexOf(actor);
1865- if (idx != -1) {
1866- list.splice(idx, 1);
1867- return true;
1868- }
1869- return false;
1870- }
1871-
1872 _minimizeWindow(shellwm, actor) {
1873 let types = [Meta.WindowType.NORMAL,
1874 Meta.WindowType.MODAL_DIALOG,
1875@@ -1319,7 +1311,7 @@ var WindowManager = class {
1876
1877 actor.set_scale(1.0, 1.0);
1878
1879- this._minimizing.push(actor);
1880+ this._minimizing.add(actor);
1881
1882 if (actor.meta_window.is_monitor_sized()) {
1883 actor.ease({
1884@@ -1373,7 +1365,7 @@ var WindowManager = class {
1885 }
1886
1887 _minimizeWindowDone(shellwm, actor) {
1888- if (this._removeEffect(this._minimizing, actor)) {
1889+ if (this._minimizing.delete(actor)) {
1890 actor.remove_all_transitions();
1891 actor.set_scale(1.0, 1.0);
1892 actor.set_opacity(255);
1893@@ -1384,7 +1376,7 @@ var WindowManager = class {
1894 }
1895
1896 _minimizeWindowOverwritten(shellwm, actor) {
1897- if (this._removeEffect(this._minimizing, actor)) {
1898+ if (this._minimizing.delete(actor)) {
1899 shellwm.completed_minimize(actor);
1900 }
1901 }
1902@@ -1398,7 +1390,7 @@ var WindowManager = class {
1903 return;
1904 }
1905
1906- this._unminimizing.push(actor);
1907+ this._unminimizing.add(actor);
1908
1909 if (actor.meta_window.is_monitor_sized()) {
1910 actor.opacity = 0;
1911@@ -1455,7 +1447,7 @@ var WindowManager = class {
1912 }
1913
1914 _unminimizeWindowDone(shellwm, actor) {
1915- if (this._removeEffect(this._unminimizing, actor)) {
1916+ if (this._unminimizing.delete(actor)) {
1917 actor.remove_all_transitions();
1918 actor.set_scale(1.0, 1.0);
1919 actor.set_opacity(255);
1920@@ -1466,7 +1458,7 @@ var WindowManager = class {
1921 }
1922
1923 _unminimizeWindowOverwritten(shellwm, actor) {
1924- if (this._removeEffect(this._unminimizing, actor)) {
1925+ if (this._unminimizing.delete(actor)) {
1926 shellwm.completed_unminimize(actor);
1927 }
1928 }
1929@@ -1501,6 +1493,7 @@ var WindowManager = class {
1930 this._clearAnimationInfo(actor);
1931 });
1932
1933+ this._resizePending.add(actor);
1934 actor.__animationInfo = { clone: actorClone,
1935 oldRect: oldFrameRect,
1936 destroyId: destroyId };
1937@@ -1509,7 +1502,7 @@ var WindowManager = class {
1938 _sizeChangedWindow(shellwm, actor) {
1939 if (!actor.__animationInfo)
1940 return;
1941- if (this._resizing.includes(actor))
1942+ if (this._resizing.has(actor))
1943 return;
1944
1945 let actorClone = actor.__animationInfo.clone;
1946@@ -1519,7 +1512,8 @@ var WindowManager = class {
1947 let scaleX = targetRect.width / sourceRect.width;
1948 let scaleY = targetRect.height / sourceRect.height;
1949
1950- this._resizing.push(actor);
1951+ this._resizePending.delete(actor);
1952+ this._resizing.add(actor);
1953
1954 // Now scale and fade out the clone
1955 actorClone.ease({
1956@@ -1572,7 +1566,7 @@ var WindowManager = class {
1957 }
1958
1959 _sizeChangeWindowDone(shellwm, actor) {
1960- if (this._removeEffect(this._resizing, actor)) {
1961+ if (this._resizing.delete(actor)) {
1962 actor.remove_all_transitions();
1963 actor.scale_x = 1.0;
1964 actor.scale_y = 1.0;
1965@@ -1580,10 +1574,13 @@ var WindowManager = class {
1966 actor.translation_y = 0;
1967 this._clearAnimationInfo(actor);
1968 }
1969+
1970+ if (this._resizePending.delete(actor))
1971+ this._shellwm.completed_size_change(actor);
1972 }
1973
1974 _sizeChangeWindowOverwritten(shellwm, actor) {
1975- if (this._removeEffect(this._resizing, actor))
1976+ if (this._resizing.delete(actor))
1977 this._clearAnimationInfo(actor);
1978 }
1979
1980@@ -1676,7 +1673,7 @@ var WindowManager = class {
1981 actor.scale_y = 0.05;
1982 actor.opacity = 0;
1983 actor.show();
1984- this._mapping.push(actor);
1985+ this._mapping.add(actor);
1986
1987 actor.ease({
1988 opacity: 255,
1989@@ -1698,7 +1695,7 @@ var WindowManager = class {
1990 actor.scale_y = 0;
1991 actor.opacity = 0;
1992 actor.show();
1993- this._mapping.push(actor);
1994+ this._mapping.add(actor);
1995
1996 actor.ease({
1997 opacity: 255,
1998@@ -1720,7 +1717,7 @@ var WindowManager = class {
1999 }
2000
2001 _mapWindowDone(shellwm, actor) {
2002- if (this._removeEffect(this._mapping, actor)) {
2003+ if (this._mapping.delete(actor)) {
2004 actor.remove_all_transitions();
2005 actor.opacity = 255;
2006 actor.set_pivot_point(0, 0);
2007@@ -1733,7 +1730,7 @@ var WindowManager = class {
2008 }
2009
2010 _mapWindowOverwrite(shellwm, actor) {
2011- if (this._removeEffect(this._mapping, actor)) {
2012+ if (this._mapping.delete(actor)) {
2013 shellwm.completed_map(actor);
2014 }
2015 }
2016@@ -1763,7 +1760,7 @@ var WindowManager = class {
2017 switch (actor.meta_window.window_type) {
2018 case Meta.WindowType.NORMAL:
2019 actor.set_pivot_point(0.5, 0.5);
2020- this._destroying.push(actor);
2021+ this._destroying.add(actor);
2022
2023 actor.ease({
2024 opacity: 0,
2025@@ -1777,7 +1774,7 @@ var WindowManager = class {
2026 case Meta.WindowType.MODAL_DIALOG:
2027 case Meta.WindowType.DIALOG:
2028 actor.set_pivot_point(0.5, 0.5);
2029- this._destroying.push(actor);
2030+ this._destroying.add(actor);
2031
2032 if (window.is_attached_dialog()) {
2033 let parent = window.get_transient_for();
2034@@ -1800,7 +1797,7 @@ var WindowManager = class {
2035 }
2036
2037 _destroyWindowDone(shellwm, actor) {
2038- if (this._removeEffect(this._destroying, actor)) {
2039+ if (this._destroying.delete(actor)) {
2040 let parent = actor.get_meta_window().get_transient_for();
2041 if (parent && actor._parentDestroyId) {
2042 parent.disconnect(actor._parentDestroyId);
2043diff --git a/meson.build b/meson.build
2044index 402aff3..c637328 100644
2045--- a/meson.build
2046+++ b/meson.build
2047@@ -1,5 +1,5 @@
2048 project('gnome-shell', 'c',
2049- version: '3.34.1',
2050+ version: '3.34.2',
2051 meson_version: '>= 0.47.0',
2052 license: 'GPLv2+'
2053 )
2054@@ -31,6 +31,7 @@ polkit_req = '>= 0.100'
2055 schemas_req = '>= 3.33.1'
2056 startup_req = '>= 0.11'
2057 ibus_req = '>= 1.5.2'
2058+gnome_desktop_req = '>= 3.32'
2059
2060 bt_req = '>= 3.9.0'
2061 gst_req = '>= 0.11.92'
2062@@ -97,6 +98,7 @@ startup_dep = dependency('libstartup-notification-1.0', version: startup_req)
2063 ibus_dep = dependency('ibus-1.0', version: ibus_req)
2064 x11_dep = dependency('x11')
2065 schemas_dep = dependency('gsettings-desktop-schemas', version: schemas_req)
2066+gnome_desktop_dep = dependency('gnome-desktop-3.0', version: gnome_desktop_req)
2067
2068 bt_dep = dependency('gnome-bluetooth-1.0', version: bt_req, required: false)
2069 gst_dep = dependency('gstreamer-1.0', version: gst_req, required: false)
2070@@ -177,6 +179,11 @@ cdata.set('HAVE__NL_TIME_FIRST_WEEKDAY',
2071 cc.has_header_symbol('langinfo.h', '_NL_TIME_FIRST_WEEKDAY')
2072 )
2073
2074+# New API added in gnome-desktop3 3.34.2/3.35.2
2075+cdata.set('HAVE_GNOME_SYSTEMD',
2076+ cc.has_header('libgnome-desktop/gnome-systemd.h', dependencies: gnome_desktop_dep)
2077+)
2078+
2079 cdata.set('HAVE_FDWALK',
2080 cc.has_function('fdwalk')
2081 )
2082diff --git a/po/ms.po b/po/ms.po
2083index a328c9f..a072e63 100644
2084--- a/po/ms.po
2085+++ b/po/ms.po
2086@@ -6,1865 +6,2683 @@
2087 msgid ""
2088 msgstr ""
2089 "Project-Id-Version: gnome-shell master ms\n"
2090-"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-shell&keywords=I18N+L10N&component=general\n"
2091-"POT-Creation-Date: 2014-09-12 17:00+0000\n"
2092-"PO-Revision-Date: 2014-09-15 19:21+0730\n"
2093-"Last-Translator: Umarzuki Mochlis Moktar <umar@umarzuki.org>\n"
2094-"Language-Team: GNOME Malay Team <gnome-ms@googlegroups.com>\n"
2095+"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-shell/issues\n"
2096+"POT-Creation-Date: 2019-10-21 09:47+0000\n"
2097+"PO-Revision-Date: 2019-12-09 18:21+0800\n"
2098+"Last-Translator: abuyop <abuyop@gmail.com>\n"
2099+"Language-Team: Pasukan Terjemahan GNOME Malaysia\n"
2100 "Language: ms\n"
2101 "MIME-Version: 1.0\n"
2102 "Content-Type: text/plain; charset=UTF-8\n"
2103 "Content-Transfer-Encoding: 8bit\n"
2104-"Plural-Forms: nplurals=2; plural=(n > 1);\n"
2105+"Plural-Forms: nplurals=1; plural=0;\n"
2106+"X-Generator: Poedit 2.2.4\n"
2107
2108-#: ../data/50-gnome-shell-system.xml.in.h:1
2109-#| msgid "File System"
2110+#: data/50-gnome-shell-system.xml:6
2111 msgid "System"
2112 msgstr "Sistem"
2113
2114-#: ../data/50-gnome-shell-system.xml.in.h:2
2115-msgid "Show the message tray"
2116-msgstr "Tunjukkan talam mesej"
2117+#: data/50-gnome-shell-system.xml:9
2118+msgid "Show the notification list"
2119+msgstr "Tunjuk senarai pemberitahuan"
2120
2121-#: ../data/50-gnome-shell-system.xml.in.h:3
2122+#: data/50-gnome-shell-system.xml:12
2123 msgid "Focus the active notification"
2124-msgstr "Fokus pada notifikasi yang aktif"
2125+msgstr "Fokus pada pemberitahuan aktif"
2126
2127-#: ../data/50-gnome-shell-system.xml.in.h:4
2128+#: data/50-gnome-shell-system.xml:15
2129 msgid "Show the overview"
2130-msgstr "Tunjukkan gambaran keseluruhan"
2131+msgstr "Tunjuk selayang pandang"
2132
2133-#: ../data/50-gnome-shell-system.xml.in.h:5
2134-#| msgid "No such application"
2135+#: data/50-gnome-shell-system.xml:18
2136 msgid "Show all applications"
2137 msgstr "Tunjuk semua aplikasi"
2138
2139-#: ../data/50-gnome-shell-system.xml.in.h:6
2140-#| msgid "No such application"
2141+#: data/50-gnome-shell-system.xml:21
2142 msgid "Open the application menu"
2143 msgstr "Buka menu aplikasi"
2144
2145-#: ../data/gnome-shell.desktop.in.in.h:1
2146+#: data/gnome-shell-extension-prefs.desktop.in.in:4
2147+#: js/extensionPrefs/main.js:211
2148+msgid "Shell Extensions"
2149+msgstr "Sambungan-Sambungan Shell"
2150+
2151+#: data/gnome-shell-extension-prefs.desktop.in.in:5
2152+msgid "Configure GNOME Shell Extensions"
2153+msgstr "Konfigur Sambungan-Sambungan Shell GNOME"
2154+
2155+#: data/org.gnome.Shell.desktop.in.in:4
2156 msgid "GNOME Shell"
2157-msgstr "GNOME Shell"
2158+msgstr "Shell GNOME"
2159
2160-#: ../data/gnome-shell.desktop.in.in.h:2
2161-#: ../data/gnome-shell-wayland.desktop.in.in.h:2
2162+#: data/org.gnome.Shell.desktop.in.in:5
2163 msgid "Window management and application launching"
2164 msgstr "Pengurusan tetingkap dan pelancaran aplikasi"
2165
2166-#: ../data/gnome-shell-extension-prefs.desktop.in.in.h:1
2167-msgid "GNOME Shell Extension Preferences"
2168-msgstr ""
2169-
2170-#: ../data/gnome-shell-extension-prefs.desktop.in.in.h:2
2171-msgid "Configure GNOME Shell Extensions"
2172+#: data/org.gnome.shell.gschema.xml.in:6
2173+msgid "Enable internal tools useful for developers and testers from Alt-F2"
2174 msgstr ""
2175+"Benarkan alatan dalaman yang berguna untuk para pembangun dan penguji "
2176+"melalui Alt-F2"
2177
2178-#: ../data/gnome-shell-wayland.desktop.in.in.h:1
2179-msgid "GNOME Shell (wayland compositor)"
2180+#: data/org.gnome.shell.gschema.xml.in:9
2181+msgid ""
2182+"Allows access to internal debugging and monitoring tools using the Alt-F2 "
2183+"dialog."
2184 msgstr ""
2185+"Benarkan capaian pada alatan penyahpepijatan dan pemantauan dalaman melalui "
2186+"dialog Alt-F2."
2187
2188-#: ../data/org.gnome.shell.gschema.xml.in.in.h:1
2189-msgid "Enable internal tools useful for developers and testers from Alt-F2"
2190-msgstr "Bolehkan radas dalaman yang berguna untuk para pembangun dan penguji menerusi Alt-F2"
2191-
2192-#: ../data/org.gnome.shell.gschema.xml.in.in.h:2
2193-msgid "Allows access to internal debugging and monitoring tools using the Alt-F2 dialog."
2194-msgstr "Membolehkan radas menyahpepijat dan memantau dalaman dicapai dengan dialog Alt-F2"
2195-
2196-#: ../data/org.gnome.shell.gschema.xml.in.in.h:3
2197-#| msgid "Uuids of extensions to enable"
2198+#: data/org.gnome.shell.gschema.xml.in:16
2199 msgid "UUIDs of extensions to enable"
2200-msgstr "UUID ciri tambahan yang hendak dibenarkan"
2201+msgstr "Sambungan UUID untuk dibenarkan"
2202
2203-#: ../data/org.gnome.shell.gschema.xml.in.in.h:4
2204-#| msgid ""
2205-#| "GNOME Shell extensions have a uuid property; this key lists extensions "
2206-#| "which should not be loaded. This setting overrides enabled-extensions for "
2207-#| "extensions that appear in both lists."
2208-msgid "GNOME Shell extensions have a UUID property; this key lists extensions which should be loaded. Any extension that wants to be loaded needs to be in this list. You can also manipulate this list with the EnableExtension and DisableExtension D-Bus methods on org.gnome.Shell."
2209-msgstr "Ciri tambahan GNOME Shell menpunyai sifat UUID. Senarai utama ciri tambahan ini yang patut dimuatkan. Sebarang ciri tambahan yang hendak dimuatkan perlu berada di dalam senarai ini. Anda boleh mengubah senarai ini dengan kaedah D-Bus EnableExtension dan DisableExtension yang terdapat di org.gnome.Shell."
2210+#: data/org.gnome.shell.gschema.xml.in:17
2211+msgid ""
2212+"GNOME Shell extensions have a UUID property; this key lists extensions which "
2213+"should be loaded. Any extension that wants to be loaded needs to be in this "
2214+"list. You can also manipulate this list with the EnableExtension and "
2215+"DisableExtension D-Bus methods on org.gnome.Shell."
2216+msgstr ""
2217+"Sambungan-sambungan GNOME Shell mempunyai satu sifat UUID; kunci ini "
2218+"menyenaraikan sambungan-sambungan yang patut dimuatkan. Sebarang sambungan "
2219+"yang hendak dimuatkan perlu berada di dalam senarai ini. Anda juga boleh "
2220+"memanipulasi senarai ini dengan kaedah D-Bus EnableExtension dan "
2221+"DisableExtension yang terdapat di org.gnome.Shell."
2222+
2223+#: data/org.gnome.shell.gschema.xml.in:26
2224+msgid "UUIDs of extensions to force disabling"
2225+msgstr "UUID sambungan yang memaksa pelumpuhan"
2226+
2227+#: data/org.gnome.shell.gschema.xml.in:27
2228+msgid ""
2229+"GNOME Shell extensions have a UUID property; this key lists extensions which "
2230+"should be disabled, even if loaded as part of the current mode. You can also "
2231+"manipulate this list with the EnableExtension and DisableExtension D-Bus "
2232+"methods on org.gnome.Shell. This key takes precedence over the “enabled-"
2233+"extensions” setting."
2234+msgstr ""
2235+"Sambungan Shell GNOME mempunyai sifat UUID; kunci ini menyenaraikan "
2236+"sambungan-sambungan yang patut dilumpuhkan, walaupun jika ia telah dimuatkan "
2237+"sebagai sebahagian daripada mod semasa. Anda boleh memanipulasikan senarai "
2238+"ini dengan kaedah D-Bus EnableExtension dan DisableExtension D-Bus yang "
2239+"terdapat di dalam org.gnome.Shell. Kunci ini mengikut keutamaan di dalam "
2240+"tetapan \"enabled-extensions”."
2241+
2242+#: data/org.gnome.shell.gschema.xml.in:37
2243+msgid "Disable user extensions"
2244+msgstr "Lumpuhkan sambungan-sambungan pengguna"
2245+
2246+#: data/org.gnome.shell.gschema.xml.in:38
2247+msgid ""
2248+"Disable all extensions the user has enabled without affecting the “enabled-"
2249+"extension” setting."
2250+msgstr ""
2251+"Lumpuhkan semua sambungan yang dibenarkan oleh pengguna tanpa mempengaruhi "
2252+"tetapan \"enabled-extension\"."
2253
2254-#: ../data/org.gnome.shell.gschema.xml.in.in.h:5
2255+#: data/org.gnome.shell.gschema.xml.in:45
2256 msgid "Disables the validation of extension version compatibility"
2257-msgstr ""
2258+msgstr "Lumpuhkan pengesahan keserasian versi sambungan"
2259
2260-#: ../data/org.gnome.shell.gschema.xml.in.in.h:6
2261-msgid "GNOME Shell will only load extensions that claim to support the current running version. Enabling this option will disable this check and try to load all extensions regardless of the versions they claim to support."
2262+#: data/org.gnome.shell.gschema.xml.in:46
2263+msgid ""
2264+"GNOME Shell will only load extensions that claim to support the current "
2265+"running version. Enabling this option will disable this check and try to "
2266+"load all extensions regardless of the versions they claim to support."
2267 msgstr ""
2268+"GNOME Shell hanya akan memuatkan sambungan-sambungan yang menyokong versi "
2269+"semasa. Dengan membenarkan pilihan ini, kotak tanda dinyahtanda dan semua "
2270+"sambungan akan dimuatkan tanpa mengira sama ada versi yang menyokong atau "
2271+"sebaliknya."
2272
2273-#: ../data/org.gnome.shell.gschema.xml.in.in.h:7
2274+#: data/org.gnome.shell.gschema.xml.in:54
2275 msgid "List of desktop file IDs for favorite applications"
2276 msgstr "Senarai ID fail desktop untuk aplikasi kegemaran"
2277
2278-#: ../data/org.gnome.shell.gschema.xml.in.in.h:8
2279-msgid "The applications corresponding to these identifiers will be displayed in the favorites area."
2280-msgstr "Aplikasi-aplikasi bagi setiap pengenal pasti ini akan dipaparkan di kawasan kegemaran."
2281+#: data/org.gnome.shell.gschema.xml.in:55
2282+msgid ""
2283+"The applications corresponding to these identifiers will be displayed in the "
2284+"favorites area."
2285+msgstr ""
2286+"Aplikasi-aplikasi bagi setiap pengenal pasti ini akan dipaparkan di kawasan "
2287+"kegemaran."
2288
2289-#: ../data/org.gnome.shell.gschema.xml.in.in.h:9
2290+#: data/org.gnome.shell.gschema.xml.in:62
2291 msgid "App Picker View"
2292-msgstr ""
2293+msgstr "Pandangan Pemilih Apl"
2294
2295-#: ../data/org.gnome.shell.gschema.xml.in.in.h:10
2296+#: data/org.gnome.shell.gschema.xml.in:63
2297 msgid "Index of the currently selected view in the application picker."
2298-msgstr ""
2299+msgstr "Indeks bagi pandangan terpilih semasa di dalam pemilih aplikasi."
2300
2301-#: ../data/org.gnome.shell.gschema.xml.in.in.h:11
2302+#: data/org.gnome.shell.gschema.xml.in:69
2303 msgid "History for command (Alt-F2) dialog"
2304 msgstr "Sejarah untuk dialog perintah (Alt-F2)"
2305
2306-#: ../data/org.gnome.shell.gschema.xml.in.in.h:12
2307+#. Translators: looking glass is a debugger and inspector tool, see https://wiki.gnome.org/Projects/GnomeShell/LookingGlass
2308+#: data/org.gnome.shell.gschema.xml.in:74
2309 msgid "History for the looking glass dialog"
2310 msgstr "Sejarah untuk dialog looking glass"
2311
2312-#: ../data/org.gnome.shell.gschema.xml.in.in.h:13
2313-msgid "Always show the 'Log out' menu item in the user menu."
2314+#: data/org.gnome.shell.gschema.xml.in:78
2315+msgid "Always show the “Log out” menu item in the user menu."
2316+msgstr "Sentiasa tunjuk item menu \"Daftar keluar\" di dalam menu pengguna."
2317+
2318+#: data/org.gnome.shell.gschema.xml.in:79
2319+msgid ""
2320+"This key overrides the automatic hiding of the “Log out” menu item in single-"
2321+"user, single-session situations."
2322 msgstr ""
2323+"Kunci ini membatalkan penyembunyian automatik bagi item menu \"Daftar keluar"
2324+"\" dalam situasi pengguna-tunggal, sesi-tunggal."
2325
2326-#: ../data/org.gnome.shell.gschema.xml.in.in.h:14
2327-msgid "This key overrides the automatic hiding of the 'Log out' menu item in single-user, single-session situations."
2328+#: data/org.gnome.shell.gschema.xml.in:86
2329+msgid ""
2330+"Whether to remember password for mounting encrypted or remote filesystems"
2331 msgstr ""
2332+"Sama ada hendak mengingati kata laluan untuk melekap tersulit atau sistem "
2333+"fail jauh"
2334
2335-#: ../data/org.gnome.shell.gschema.xml.in.in.h:15
2336-msgid "Whether to remember password for mounting encrypted or remote filesystems"
2337+#: data/org.gnome.shell.gschema.xml.in:87
2338+msgid ""
2339+"The shell will request a password when an encrypted device or a remote "
2340+"filesystem is mounted. If the password can be saved for future use a "
2341+"“Remember Password” checkbox will be present. This key sets the default "
2342+"state of the checkbox."
2343 msgstr ""
2344+"Shell akan meminta satu kata laluan ketika peranti tersulit atau sistem fail "
2345+"jauh dilekapkan. Sekiranya kata laluan boleh disimpan untuk kegunaan akan "
2346+"datang gunakan kotak tanda \"Ingat Kata Laluan\" akan hadir. Kunci ini "
2347+"menetapkan keadaan lalai bagi kotak tanda."
2348
2349-#: ../data/org.gnome.shell.gschema.xml.in.in.h:16
2350-msgid "The shell will request a password when an encrypted device or a remote filesystem is mounted. If the password can be saved for future use a 'Remember Password' checkbox will be present. This key sets the default state of the checkbox."
2351+#: data/org.gnome.shell.gschema.xml.in:96
2352+msgid ""
2353+"Whether the default Bluetooth adapter had set up devices associated to it"
2354 msgstr ""
2355+"Sama ada penyesuai Bluetooth lalai telah pasangkan peranti-peranti yang "
2356+"berkaitan dengannya"
2357
2358-#: ../data/org.gnome.shell.gschema.xml.in.in.h:17
2359-msgid "Show the week date in the calendar"
2360-msgstr "Tunjuk minggu pada kalendar"
2361+#: data/org.gnome.shell.gschema.xml.in:97
2362+msgid ""
2363+"The shell will only show a Bluetooth menu item if a Bluetooth adapter is "
2364+"powered, or if there were devices set up associated with the default "
2365+"adapter. This will be reset if the default adapter is ever seen not to have "
2366+"devices associated to it."
2367+msgstr ""
2368+"Shell hanya menunjukkan item menu Bluetooth sekiranya penyesuai Bluetooth "
2369+"telah dihidupkan, atau jika terdapat peranti-peranti yang dipasang berkaitan "
2370+"dengan penyesuai lalai. Ia akan ditetapkan semula jika penyesuai lalai tidak "
2371+"mempunyai peranti-peranti yang berkaitan dengannya."
2372
2373-#: ../data/org.gnome.shell.gschema.xml.in.in.h:18
2374-msgid "If true, display the ISO week date in the calendar."
2375-msgstr "Jika benar, papar tarikh minggu ISO pada kalendar."
2376+#: data/org.gnome.shell.gschema.xml.in:106
2377+msgid "Enable introspection API"
2378+msgstr "Benarkan API introspection"
2379
2380-#: ../data/org.gnome.shell.gschema.xml.in.in.h:19
2381-msgid "Keybinding to open the application menu"
2382+#: data/org.gnome.shell.gschema.xml.in:107
2383+msgid ""
2384+"Enables a D-Bus API that allows to introspect the application state of the "
2385+"shell."
2386 msgstr ""
2387+"Benarkan satu API D-Bus yang membolehkan kaji semua keadaan aplikasi shell."
2388
2389-#: ../data/org.gnome.shell.gschema.xml.in.in.h:20
2390+#: data/org.gnome.shell.gschema.xml.in:119
2391+msgid "Keybinding to open the application menu"
2392+msgstr "Pengikatan kekunci untuk membuka menu aplikasi"
2393+
2394+#: data/org.gnome.shell.gschema.xml.in:120
2395 msgid "Keybinding to open the application menu."
2396-msgstr ""
2397+msgstr "Pengikatan kekunci untuk membuka menu aplikasi."
2398
2399-#: ../data/org.gnome.shell.gschema.xml.in.in.h:21
2400-msgid "Keybinding to open the \"Show Applications\" view"
2401+#: data/org.gnome.shell.gschema.xml.in:126
2402+msgid "Keybinding to open the “Show Applications” view"
2403 msgstr ""
2404+"Pengikatan kekunci untuk membuka pandangan \"Tunjuk Aplikasi-Aplikasi\""
2405
2406-#: ../data/org.gnome.shell.gschema.xml.in.in.h:22
2407-msgid "Keybinding to open the \"Show Applications\" view of the Activities Overview."
2408+#: data/org.gnome.shell.gschema.xml.in:127
2409+msgid ""
2410+"Keybinding to open the “Show Applications” view of the Activities Overview."
2411 msgstr ""
2412+"Pengikatan kekunci untuk membuka pandangan \"Tunjuk Aplikasi-Aplikasi\" bagi "
2413+"Selayang Pandang Aktiviti."
2414
2415-#: ../data/org.gnome.shell.gschema.xml.in.in.h:23
2416+#: data/org.gnome.shell.gschema.xml.in:134
2417 msgid "Keybinding to open the overview"
2418-msgstr ""
2419+msgstr "Pengikatan kekunci untuk membuka selayang pandang"
2420
2421-#: ../data/org.gnome.shell.gschema.xml.in.in.h:24
2422+#: data/org.gnome.shell.gschema.xml.in:135
2423 msgid "Keybinding to open the Activities Overview."
2424-msgstr ""
2425+msgstr "Pengikatan kekunci untuk membuka Selayang Pandang Aktiviti-Aktiviti."
2426
2427-#: ../data/org.gnome.shell.gschema.xml.in.in.h:25
2428-msgid "Keybinding to toggle the visibility of the message tray"
2429-msgstr ""
2430+#: data/org.gnome.shell.gschema.xml.in:141
2431+msgid "Keybinding to toggle the visibility of the notification list"
2432+msgstr "Pengikatan untuk togol ketampakan senarai pemberitahuan"
2433
2434-#: ../data/org.gnome.shell.gschema.xml.in.in.h:26
2435-msgid "Keybinding to toggle the visibility of the message tray."
2436-msgstr ""
2437+#: data/org.gnome.shell.gschema.xml.in:142
2438+msgid "Keybinding to toggle the visibility of the notification list."
2439+msgstr "Pengikatan untuk togol ketampakan senarai pemberitahuan."
2440
2441-#: ../data/org.gnome.shell.gschema.xml.in.in.h:27
2442+#: data/org.gnome.shell.gschema.xml.in:148
2443 msgid "Keybinding to focus the active notification"
2444-msgstr ""
2445+msgstr "Pengikatan kekunci untuk fokuskan pemberitahuan aktif"
2446
2447-#: ../data/org.gnome.shell.gschema.xml.in.in.h:28
2448+#: data/org.gnome.shell.gschema.xml.in:149
2449 msgid "Keybinding to focus the active notification."
2450-msgstr ""
2451+msgstr "Pengikatan kekunci untuk fokuskan pemberitahuan aktif."
2452
2453-#: ../data/org.gnome.shell.gschema.xml.in.in.h:29
2454-msgid "Keybinding that pauses and resumes all running tweens, for debugging purposes"
2455-msgstr ""
2456+#: data/org.gnome.shell.gschema.xml.in:155
2457+msgid "Switch to application 1"
2458+msgstr "Beralih ke aplikasi 1"
2459+
2460+#: data/org.gnome.shell.gschema.xml.in:159
2461+msgid "Switch to application 2"
2462+msgstr "Beralih ke aplikasi 2"
2463+
2464+#: data/org.gnome.shell.gschema.xml.in:163
2465+msgid "Switch to application 3"
2466+msgstr "Beralih ke aplikasi 3"
2467+
2468+#: data/org.gnome.shell.gschema.xml.in:167
2469+msgid "Switch to application 4"
2470+msgstr "Beralih ke aplikasi 4"
2471
2472-#: ../data/org.gnome.shell.gschema.xml.in.in.h:30
2473-msgid "Which keyboard to use"
2474-msgstr "Pilih papan kekunci"
2475+#: data/org.gnome.shell.gschema.xml.in:171
2476+msgid "Switch to application 5"
2477+msgstr "Beralih ke aplikasi 5"
2478
2479-#: ../data/org.gnome.shell.gschema.xml.in.in.h:31
2480-msgid "The type of keyboard to use."
2481-msgstr "Jenis papan kekunci untuk digunakan."
2482+#: data/org.gnome.shell.gschema.xml.in:175
2483+msgid "Switch to application 6"
2484+msgstr "Beralih ke aplikasi 6"
2485
2486-#: ../data/org.gnome.shell.gschema.xml.in.in.h:32
2487+#: data/org.gnome.shell.gschema.xml.in:179
2488+msgid "Switch to application 7"
2489+msgstr "Beralih ke aplikasi 7"
2490+
2491+#: data/org.gnome.shell.gschema.xml.in:183
2492+msgid "Switch to application 8"
2493+msgstr "Beralih ke aplikasi 8"
2494+
2495+#: data/org.gnome.shell.gschema.xml.in:187
2496+msgid "Switch to application 9"
2497+msgstr "Beralih ke aplikasi 9"
2498+
2499+#: data/org.gnome.shell.gschema.xml.in:196
2500+#: data/org.gnome.shell.gschema.xml.in:223
2501 msgid "Limit switcher to current workspace."
2502-msgstr ""
2503+msgstr "Hadkan penukar ke ruang kerja semasa."
2504
2505-#: ../data/org.gnome.shell.gschema.xml.in.in.h:33
2506-msgid "If true, only applications that have windows on the current workspace are shown in the switcher. Otherwise, all applications are included."
2507+#: data/org.gnome.shell.gschema.xml.in:197
2508+msgid ""
2509+"If true, only applications that have windows on the current workspace are "
2510+"shown in the switcher. Otherwise, all applications are included."
2511 msgstr ""
2512+"Jika benar, hanya aplikasi-aplikasi yang ada tetingkap pada ruang kerja "
2513+"semasa ditunjukkan dalam penukar. Jika sebaliknya, semua aplikasi terlibat."
2514
2515-#: ../data/org.gnome.shell.gschema.xml.in.in.h:34
2516+#: data/org.gnome.shell.gschema.xml.in:214
2517 msgid "The application icon mode."
2518-msgstr ""
2519+msgstr "Mod ikon aplikasi."
2520
2521-#: ../data/org.gnome.shell.gschema.xml.in.in.h:35
2522-msgid "Configures how the windows are shown in the switcher. Valid possibilities are 'thumbnail-only' (shows a thumbnail of the window), 'app-icon-only' (shows only the application icon) or 'both'."
2523+#: data/org.gnome.shell.gschema.xml.in:215
2524+msgid ""
2525+"Configures how the windows are shown in the switcher. Valid possibilities "
2526+"are “thumbnail-only” (shows a thumbnail of the window), “app-icon-"
2527+"only” (shows only the application icon) or “both”."
2528 msgstr ""
2529+"Konfigur bagaimanakah tetingkap-tetingkap ditunjukkan dalam penukar. "
2530+"Kemungkinan yang sah adalah \"lakaran-kenit-sahaja\" (tunjuk satu lakaran "
2531+"kenit bagi tetingkap), \"ikon-apl-sahaja\" (hanya tunjuk ikon aplikasi) atau "
2532+"\"kedua-duanya\"."
2533
2534-#: ../data/org.gnome.shell.gschema.xml.in.in.h:36
2535-msgid "If true, only windows from the current workspace are shown in the switcher. Otherwise, all windows are included."
2536+#: data/org.gnome.shell.gschema.xml.in:224
2537+msgid ""
2538+"If true, only windows from the current workspace are shown in the switcher. "
2539+"Otherwise, all windows are included."
2540 msgstr ""
2541+"Jika benar, hanya tetingkap-tetingkap pada ruang kerja semasa ditunjukkan "
2542+"dalam penukar. Jika sebaliknya, semua tetingkap terlibat."
2543+
2544+#: data/org.gnome.shell.gschema.xml.in:234
2545+msgid "Locations"
2546+msgstr "Lokasi"
2547+
2548+#: data/org.gnome.shell.gschema.xml.in:235
2549+msgid "The locations to show in world clocks"
2550+msgstr "Lokasi yang dipaparkan dalam jam dunia"
2551
2552-#: ../data/org.gnome.shell.gschema.xml.in.in.h:37
2553+#: data/org.gnome.shell.gschema.xml.in:245
2554+msgid "Automatic location"
2555+msgstr "Lokasi automatik"
2556+
2557+#: data/org.gnome.shell.gschema.xml.in:246
2558+msgid "Whether to fetch the current location or not"
2559+msgstr "Sama ada hendak dapatkan lokasi semasa atau sebaliknya"
2560+
2561+#: data/org.gnome.shell.gschema.xml.in:253
2562+msgid "Location"
2563+msgstr "Lokasi"
2564+
2565+#: data/org.gnome.shell.gschema.xml.in:254
2566+msgid "The location for which to show a forecast"
2567+msgstr "Lokasi yang dapat menunjukkan ramalan"
2568+
2569+#: data/org.gnome.shell.gschema.xml.in:266
2570 msgid "Attach modal dialog to the parent window"
2571-msgstr ""
2572+msgstr "Lampir dialog modal kepada tetingkap induk"
2573
2574-#: ../data/org.gnome.shell.gschema.xml.in.in.h:38
2575-msgid "This key overrides the key in org.gnome.mutter when running GNOME Shell."
2576+#: data/org.gnome.shell.gschema.xml.in:267
2577+#: data/org.gnome.shell.gschema.xml.in:276
2578+#: data/org.gnome.shell.gschema.xml.in:284
2579+#: data/org.gnome.shell.gschema.xml.in:292
2580+#: data/org.gnome.shell.gschema.xml.in:300
2581+msgid ""
2582+"This key overrides the key in org.gnome.mutter when running GNOME Shell."
2583 msgstr ""
2584+"Kunci ini membatalkan kunci dalam org.gnome.mutter ketika menjalankan GNOME "
2585+"Shell."
2586
2587-#: ../data/org.gnome.shell.gschema.xml.in.in.h:39
2588+#: data/org.gnome.shell.gschema.xml.in:275
2589 msgid "Enable edge tiling when dropping windows on screen edges"
2590 msgstr ""
2591+"Benarkan penjubinan pinggir ketika melepaskan tetingkap-tetingkap di atas "
2592+"pinggir skrin"
2593
2594-#: ../data/org.gnome.shell.gschema.xml.in.in.h:40
2595+#: data/org.gnome.shell.gschema.xml.in:283
2596 msgid "Workspaces are managed dynamically"
2597-msgstr ""
2598+msgstr "Ruang-ruang kerja diurus secara dinamik"
2599
2600-#: ../data/org.gnome.shell.gschema.xml.in.in.h:41
2601+#: data/org.gnome.shell.gschema.xml.in:291
2602 msgid "Workspaces only on primary monitor"
2603-msgstr ""
2604+msgstr "Ruang-ruang kerja hanya berada pada monitor utama"
2605
2606-#: ../data/org.gnome.shell.gschema.xml.in.in.h:42
2607+#: data/org.gnome.shell.gschema.xml.in:299
2608 msgid "Delay focus changes in mouse mode until the pointer stops moving"
2609 msgstr ""
2610+"Fokus lengah berubah dalam mod tetikus sehinggalah penuding berhenti bergerak"
2611+
2612+#: data/org.gnome.Shell.PortalHelper.desktop.in.in:3
2613+msgid "Network Login"
2614+msgstr "Daftar Masuk Rangkaian"
2615
2616-#: ../data/org.gnome.Shell.PortalHelper.desktop.in.h:1
2617-msgid "Captive Portal"
2618+#: js/extensionPrefs/main.js:104 js/extensionPrefs/main.js:535
2619+msgid "Something’s gone wrong"
2620+msgstr "Adalah masalah telah berlaku"
2621+
2622+#: js/extensionPrefs/main.js:111
2623+msgid ""
2624+"We’re very sorry, but there’s been a problem: the settings for this "
2625+"extension can’t be displayed. We recommend that you report the issue to the "
2626+"extension authors."
2627 msgstr ""
2628+"Mohon maaf, adalah masalah telah berlaku: tetapan bagi sambungan ini tidak "
2629+"dapat dipaparkan. Kami menyarankan anda laporkan masalah ini kepada para "
2630+"pengarang sambungan."
2631
2632-#: ../js/extensionPrefs/main.js:123
2633-#, javascript-format
2634-msgid "There was an error loading the preferences dialog for %s:"
2635+#: js/extensionPrefs/main.js:118
2636+msgid "Technical Details"
2637+msgstr "Perincian Teknikal"
2638+
2639+#: js/extensionPrefs/main.js:153
2640+msgid "Copy Error"
2641+msgstr "Salin Ralat"
2642+
2643+#: js/extensionPrefs/main.js:180
2644+msgid "Homepage"
2645+msgstr "Laman Sesawang"
2646+
2647+#: js/extensionPrefs/main.js:181
2648+msgid "Visit extension homepage"
2649+msgstr "Lawati laman sesawang sambungan"
2650+
2651+#: js/extensionPrefs/main.js:477
2652+msgid "No Extensions Installed"
2653+msgstr "Tiada Sambungan Dipasang"
2654+
2655+#: js/extensionPrefs/main.js:487
2656+msgid ""
2657+"Extensions can be installed through Software or <a href=\"https://extensions."
2658+"gnome.org\">extensions.gnome.org</a>."
2659 msgstr ""
2660+"Sambungan-sambungan boleh dipasang melalui Perisian atau <a href=\"https://"
2661+"extensions.gnome.org\">extensions.gnome.org</a>."
2662
2663-#: ../js/extensionPrefs/main.js:155
2664-#| msgid "GNOME Shell"
2665-msgid "GNOME Shell Extensions"
2666-msgstr "Ciri Tambahan GNOME Shell"
2667-
2668-#: ../js/gdm/authPrompt.js:147
2669-#: ../js/ui/components/networkAgent.js:143
2670-#: ../js/ui/components/polkitAgent.js:166
2671-#: ../js/ui/endSessionDialog.js:452
2672-#: ../js/ui/extensionDownloader.js:195
2673-#: ../js/ui/shellMountOperation.js:399
2674-#: ../js/ui/status/network.js:915
2675+#: js/extensionPrefs/main.js:502
2676+msgid "Browse in Software"
2677+msgstr "Layar dalam Perisian"
2678+
2679+#: js/extensionPrefs/main.js:542
2680+msgid ""
2681+"We’re very sorry, but it was not possible to get the list of installed "
2682+"extensions. Make sure you are logged into GNOME and try again."
2683+msgstr ""
2684+"Mohon maaf, berkemungkinan boleh dapatkan senarai sambungan terpasang. "
2685+"Pastikan anda telah mendaftar masuk ke dalam GNOME dan cuba sekali lagi."
2686+
2687+#: js/gdm/authPrompt.js:139 js/ui/audioDeviceSelection.js:53
2688+#: js/ui/components/networkAgent.js:122 js/ui/components/polkitAgent.js:138
2689+#: js/ui/endSessionDialog.js:446 js/ui/extensionDownloader.js:190
2690+#: js/ui/shellMountOperation.js:392 js/ui/shellMountOperation.js:402
2691+#: js/ui/status/network.js:898
2692 msgid "Cancel"
2693 msgstr "Batal"
2694
2695-#: ../js/gdm/authPrompt.js:169
2696-#: ../js/gdm/authPrompt.js:217
2697-#| msgid "Next week"
2698+#: js/gdm/authPrompt.js:158 js/gdm/authPrompt.js:201 js/gdm/authPrompt.js:433
2699 msgid "Next"
2700-msgstr "Seterusnya"
2701+msgstr "Berikutnya"
2702
2703-#: ../js/gdm/authPrompt.js:213
2704-#: ../js/ui/shellMountOperation.js:403
2705-#: ../js/ui/unlockDialog.js:59
2706+#: js/gdm/authPrompt.js:197 js/ui/shellMountOperation.js:396
2707+#: js/ui/unlockDialog.js:45
2708 msgid "Unlock"
2709-msgstr ""
2710+msgstr "Nyahkunci"
2711
2712-#: ../js/gdm/authPrompt.js:215
2713+#: js/gdm/authPrompt.js:199
2714 msgctxt "button"
2715 msgid "Sign In"
2716 msgstr "Daftar Masuk"
2717
2718-#: ../js/gdm/loginDialog.js:269
2719+#: js/gdm/loginDialog.js:299
2720 msgid "Choose Session"
2721-msgstr ""
2722+msgstr "Pilih Sesi"
2723
2724-#: ../js/gdm/loginDialog.js:429
2725+#. translators: this message is shown below the user list on the
2726+#. login screen. It can be activated to reveal an entry for
2727+#. manually entering the username.
2728+#: js/gdm/loginDialog.js:443
2729 msgid "Not listed?"
2730 msgstr "Tidak tersenarai?"
2731
2732-#: ../js/gdm/loginDialog.js:614
2733+#. Translators: this message is shown below the username entry field
2734+#. to clue the user in on how to login to the local network realm
2735+#: js/gdm/loginDialog.js:879
2736 #, javascript-format
2737 msgid "(e.g., user or %s)"
2738-msgstr ""
2739+msgstr "(cth., pengguna atau %s)"
2740
2741-#: ../js/gdm/loginDialog.js:619
2742-#: ../js/ui/components/networkAgent.js:269
2743-#: ../js/ui/components/networkAgent.js:287
2744+#. TTLS and PEAP are actually much more complicated, but this complication
2745+#. is not visible here since we only care about phase2 authentication
2746+#. (and don't even care of which one)
2747+#: js/gdm/loginDialog.js:884 js/ui/components/networkAgent.js:248
2748+#: js/ui/components/networkAgent.js:268 js/ui/components/networkAgent.js:286
2749 msgid "Username: "
2750-msgstr "Nama pengguna:"
2751+msgstr "Nama Pengguna: "
2752
2753-#: ../js/gdm/loginDialog.js:922
2754+#: js/gdm/loginDialog.js:1219
2755 msgid "Login Window"
2756-msgstr "Tetingkap Log Masuk"
2757+msgstr "Tetingkap Daftar Masuk"
2758
2759-#: ../js/gdm/util.js:323
2760-#| msgid "Authentication Required"
2761+#: js/gdm/util.js:338
2762 msgid "Authentication error"
2763-msgstr "Ralat pengesahan"
2764-
2765-#: ../js/gdm/util.js:453
2766+msgstr "Ralat pengesahihan"
2767+
2768+#. We don't show fingerprint messages directly since it's
2769+#. not the main auth service. Instead we use the messages
2770+#. as a cue to display our own message.
2771+#. Translators: this message is shown below the password entry field
2772+#. to indicate the user can swipe their finger instead
2773+#: js/gdm/util.js:473
2774 msgid "(or swipe finger)"
2775-msgstr ""
2776+msgstr "(atau leret jari)"
2777+
2778+#. Translators: The name of the power-off action in search
2779+#: js/misc/systemActions.js:89
2780+msgctxt "search-result"
2781+msgid "Power Off"
2782+msgstr "Matikan"
2783
2784-#: ../js/misc/util.js:115
2785+#. Translators: A list of keywords that match the power-off action, separated by semicolons
2786+#: js/misc/systemActions.js:92
2787+msgid "power off;shutdown;reboot;restart"
2788+msgstr "tutup;matikan;but semula;mula semula"
2789+
2790+#. Translators: The name of the lock screen action in search
2791+#: js/misc/systemActions.js:97
2792+msgctxt "search-result"
2793+msgid "Lock Screen"
2794+msgstr "Skrin Kunci"
2795+
2796+#. Translators: A list of keywords that match the lock screen action, separated by semicolons
2797+#: js/misc/systemActions.js:100
2798+msgid "lock screen"
2799+msgstr "kunci skrin"
2800+
2801+#. Translators: The name of the logout action in search
2802+#: js/misc/systemActions.js:105
2803+msgctxt "search-result"
2804+msgid "Log Out"
2805+msgstr "Daftar Keluar"
2806+
2807+#. Translators: A list of keywords that match the logout action, separated by semicolons
2808+#: js/misc/systemActions.js:108
2809+msgid "logout;log out;sign off"
2810+msgstr "daftarkeluar;daftar keluar;keluar"
2811+
2812+#. Translators: The name of the suspend action in search
2813+#: js/misc/systemActions.js:113
2814+msgctxt "search-result"
2815+msgid "Suspend"
2816+msgstr "Tangguh"
2817+
2818+#. Translators: A list of keywords that match the suspend action, separated by semicolons
2819+#: js/misc/systemActions.js:116
2820+msgid "suspend;sleep"
2821+msgstr "tangguh;tidur"
2822+
2823+#. Translators: The name of the switch user action in search
2824+#: js/misc/systemActions.js:121
2825+msgctxt "search-result"
2826+msgid "Switch User"
2827+msgstr "Tukar Pengguna"
2828+
2829+#. Translators: A list of keywords that match the switch user action, separated by semicolons
2830+#: js/misc/systemActions.js:124
2831+msgid "switch user"
2832+msgstr "tukar pengguna"
2833+
2834+#. Translators: The name of the lock orientation action in search
2835+#: js/misc/systemActions.js:129
2836+msgctxt "search-result"
2837+msgid "Lock Orientation"
2838+msgstr "Kunci Orientasi"
2839+
2840+#. Translators: A list of keywords that match the lock orientation action, separated by semicolons
2841+#: js/misc/systemActions.js:132
2842+msgid "lock orientation;screen;rotation"
2843+msgstr "kunci orientasi;skrin;putaran"
2844+
2845+#: js/misc/util.js:116
2846 msgid "Command not found"
2847 msgstr "Perintah tidak ditemui"
2848
2849-#: ../js/misc/util.js:148
2850+#. Replace "Error invoking GLib.shell_parse_argv: " with
2851+#. something nicer
2852+#: js/misc/util.js:149
2853 msgid "Could not parse command:"
2854 msgstr "Tidak dapat menghurai perintah:"
2855
2856-#: ../js/misc/util.js:156
2857+#: js/misc/util.js:157
2858 #, javascript-format
2859-#| msgid "Execution of '%s' failed:"
2860 msgid "Execution of “%s” failed:"
2861 msgstr "Perlaksanaan “%s” telah gagal:"
2862
2863-#: ../js/portalHelper/main.js:85
2864-#| msgid "Authentication Required"
2865-msgid "Web Authentication Redirect"
2866-msgstr "Lencongan Pengesahan Web"
2867+#: js/misc/util.js:174
2868+msgid "Just now"
2869+msgstr "Baru berlaku"
2870
2871-#: ../js/ui/appDisplay.js:772
2872-msgid "Frequently used applications will appear here"
2873+#: js/misc/util.js:176
2874+#, javascript-format
2875+msgid "%d minute ago"
2876+msgid_plural "%d minutes ago"
2877+msgstr[0] "%d minit yang lalu"
2878+
2879+#: js/misc/util.js:179
2880+#, javascript-format
2881+msgid "%d hour ago"
2882+msgid_plural "%d hours ago"
2883+msgstr[0] "%d jam yang lalu"
2884+
2885+#: js/misc/util.js:182
2886+msgid "Yesterday"
2887+msgstr "Semalam"
2888+
2889+#: js/misc/util.js:184
2890+#, javascript-format
2891+msgid "%d day ago"
2892+msgid_plural "%d days ago"
2893+msgstr[0] "%d hari yang lalu"
2894+
2895+#: js/misc/util.js:187
2896+#, javascript-format
2897+msgid "%d week ago"
2898+msgid_plural "%d weeks ago"
2899+msgstr[0] "%d minggu yang lalu"
2900+
2901+#: js/misc/util.js:190
2902+#, javascript-format
2903+msgid "%d month ago"
2904+msgid_plural "%d months ago"
2905+msgstr[0] "%d bulan yang lalu"
2906+
2907+#: js/misc/util.js:192
2908+#, javascript-format
2909+msgid "%d year ago"
2910+msgid_plural "%d years ago"
2911+msgstr[0] "%d tahun yang lalu"
2912+
2913+#. Translators: Time in 24h format
2914+#: js/misc/util.js:222
2915+msgid "%H∶%M"
2916+msgstr "%H∶%M"
2917+
2918+#. Translators: this is the word "Yesterday" followed by a
2919+#. time string in 24h format. i.e. "Yesterday, 14:30"
2920+#: js/misc/util.js:228
2921+#, no-c-format
2922+msgid "Yesterday, %H∶%M"
2923+msgstr "Semalam, %H∶%M"
2924+
2925+#. Translators: this is the week day name followed by a time
2926+#. string in 24h format. i.e. "Monday, 14:30"
2927+#: js/misc/util.js:234
2928+#, no-c-format
2929+msgid "%A, %H∶%M"
2930+msgstr "%A, %H∶%M"
2931+
2932+#. Translators: this is the month name and day number
2933+#. followed by a time string in 24h format.
2934+#. i.e. "May 25, 14:30"
2935+#: js/misc/util.js:240
2936+#, no-c-format
2937+msgid "%B %-d, %H∶%M"
2938+msgstr "%-d %B, %H∶%M"
2939+
2940+#. Translators: this is the month name, day number, year
2941+#. number followed by a time string in 24h format.
2942+#. i.e. "May 25 2012, 14:30"
2943+#: js/misc/util.js:246
2944+#, no-c-format
2945+msgid "%B %-d %Y, %H∶%M"
2946+msgstr "%-d %B %Y, %H∶%M"
2947+
2948+#. Translators: Time in 12h format
2949+#: js/misc/util.js:251
2950+msgid "%l∶%M %p"
2951+msgstr "%l:%M %p"
2952+
2953+#. Translators: this is the word "Yesterday" followed by a
2954+#. time string in 12h format. i.e. "Yesterday, 2:30 pm"
2955+#: js/misc/util.js:257
2956+#, no-c-format
2957+msgid "Yesterday, %l∶%M %p"
2958+msgstr "Semalam, %l∶%M %p"
2959+
2960+#. Translators: this is the week day name followed by a time
2961+#. string in 12h format. i.e. "Monday, 2:30 pm"
2962+#: js/misc/util.js:263
2963+#, no-c-format
2964+msgid "%A, %l∶%M %p"
2965+msgstr "%A, %l∶%M %p"
2966+
2967+#. Translators: this is the month name and day number
2968+#. followed by a time string in 12h format.
2969+#. i.e. "May 25, 2:30 pm"
2970+#: js/misc/util.js:269
2971+#, no-c-format
2972+msgid "%B %-d, %l∶%M %p"
2973+msgstr "%-d %B, %l∶%M %p"
2974+
2975+#. Translators: this is the month name, day number, year
2976+#. number followed by a time string in 12h format.
2977+#. i.e. "May 25 2012, 2:30 pm"
2978+#: js/misc/util.js:275
2979+#, no-c-format
2980+msgid "%B %-d %Y, %l∶%M %p"
2981+msgstr "%-d %B %Y, %l∶%M %p"
2982+
2983+#. TRANSLATORS: this is the title of the wifi captive portal login window
2984+#: js/portalHelper/main.js:40
2985+msgid "Hotspot Login"
2986+msgstr "Daftar Masuk Kawasan Khas"
2987+
2988+#: js/portalHelper/main.js:86
2989+msgid ""
2990+"Your connection to this hotspot login is not secure. Passwords or other "
2991+"information you enter on this page can be viewed by people nearby."
2992 msgstr ""
2993+"Sambungan anda dengan daftar masuk kawasan khas ini adalah tidak selamat. "
2994+"Kata laluan atau lain-lain maklumat yang anda telah masukkan di dalam "
2995+"halaman ini boleh dilihat oleh individu berhampiran."
2996+
2997+#. No support for non-modal system dialogs, so ignore the option
2998+#. let modal = options['modal'] || true;
2999+#: js/ui/accessDialog.js:39 js/ui/status/location.js:363
3000+msgid "Deny Access"
3001+msgstr "Nafi Capaian"
3002+
3003+#: js/ui/accessDialog.js:40 js/ui/status/location.js:366
3004+msgid "Grant Access"
3005+msgstr "Beri Capaian"
3006+
3007+#: js/ui/appDisplay.js:852
3008+msgid "Unnamed Folder"
3009+msgstr "Folder Tiada Nama"
3010+
3011+#: js/ui/appDisplay.js:872
3012+msgid "Frequently used applications will appear here"
3013+msgstr "Aplikasi kerap digunakan akan muncul di sini"
3014
3015-#: ../js/ui/appDisplay.js:883
3016+#: js/ui/appDisplay.js:995
3017 msgid "Frequent"
3018-msgstr ""
3019+msgstr "Kerap"
3020
3021-#: ../js/ui/appDisplay.js:890
3022+#: js/ui/appDisplay.js:1002
3023 msgid "All"
3024 msgstr "Semua"
3025
3026-#: ../js/ui/appDisplay.js:1789
3027+#: js/ui/appDisplay.js:1745
3028+msgid "Rename"
3029+msgstr "Nama Semula"
3030+
3031+#. Translators: This is the heading of a list of open windows
3032+#: js/ui/appDisplay.js:2418 js/ui/panel.js:76
3033+msgid "Open Windows"
3034+msgstr "Buka Tetingkap"
3035+
3036+#: js/ui/appDisplay.js:2437 js/ui/panel.js:83
3037 msgid "New Window"
3038-msgstr "Tetingkap Baru"
3039+msgstr "Tetingkap Baharu"
3040+
3041+#: js/ui/appDisplay.js:2449
3042+msgid "Launch using Dedicated Graphics Card"
3043+msgstr "Lancar menggunakan Kad Grafik Khusus"
3044
3045-#: ../js/ui/appDisplay.js:1815
3046-#: ../js/ui/dash.js:285
3047+#: js/ui/appDisplay.js:2478 js/ui/dash.js:239
3048 msgid "Remove from Favorites"
3049 msgstr "Buang daripada Kegemaran"
3050
3051-#: ../js/ui/appDisplay.js:1821
3052+#: js/ui/appDisplay.js:2484
3053 msgid "Add to Favorites"
3054 msgstr "Tambah ke Kegemaran"
3055
3056-#: ../js/ui/appDisplay.js:1830
3057+#: js/ui/appDisplay.js:2494 js/ui/panel.js:94
3058 msgid "Show Details"
3059-msgstr ""
3060+msgstr "Tunjuk Perincian"
3061
3062-#: ../js/ui/appFavorites.js:124
3063+#: js/ui/appFavorites.js:150
3064 #, javascript-format
3065 msgid "%s has been added to your favorites."
3066 msgstr "%s telah ditambah ke kegemaran anda."
3067
3068-#: ../js/ui/appFavorites.js:158
3069+#: js/ui/appFavorites.js:183
3070 #, javascript-format
3071 msgid "%s has been removed from your favorites."
3072 msgstr "%s telah dibuang daripada kegemaran anda."
3073
3074-#: ../js/ui/backgroundMenu.js:19
3075-#: ../js/ui/panel.js:813
3076-#: ../js/ui/status/system.js:337
3077-#| msgid "Mouse Settings"
3078-msgid "Settings"
3079-msgstr "Tetapan"
3080+#: js/ui/audioDeviceSelection.js:40
3081+msgid "Select Audio Device"
3082+msgstr "Pilih Peranti Audio"
3083+
3084+#: js/ui/audioDeviceSelection.js:51
3085+msgid "Sound Settings"
3086+msgstr "Tetapan Bunyi"
3087+
3088+#: js/ui/audioDeviceSelection.js:60
3089+msgid "Headphones"
3090+msgstr "Fon Kepala"
3091+
3092+#: js/ui/audioDeviceSelection.js:62
3093+msgid "Headset"
3094+msgstr "Set Kepala"
3095
3096-#: ../js/ui/backgroundMenu.js:21
3097+#: js/ui/audioDeviceSelection.js:64 js/ui/status/volume.js:248
3098+msgid "Microphone"
3099+msgstr "Mikrofon"
3100+
3101+#: js/ui/backgroundMenu.js:14
3102 msgid "Change Background…"
3103-msgstr ""
3104+msgstr "Ubah Latar Belakang..."
3105
3106-#. Translators: Shown in calendar event list for all day events
3107-#. * Keep it short, best if you can use less then 10 characters
3108-#. */
3109-#: ../js/ui/calendar.js:67
3110-msgctxt "event list time"
3111-msgid "All Day"
3112-msgstr "Sepanjang Hari"
3113+#: js/ui/backgroundMenu.js:16 js/ui/status/nightLight.js:44
3114+msgid "Display Settings"
3115+msgstr "Tetapan Paparan"
3116
3117-#. Translators: Shown in calendar event list, if 24h format,
3118-#. \u2236 is a ratio character, similar to : */
3119-#: ../js/ui/calendar.js:73
3120-msgctxt "event list time"
3121-msgid "%H∶%M"
3122-msgstr ""
3123+#: js/ui/backgroundMenu.js:17
3124+msgid "Settings"
3125+msgstr "Tetapan"
3126
3127-#. Translators: Shown in calendar event list, if 12h format,
3128-#. \u2236 is a ratio character, similar to : and \u2009 is
3129-#. a thin space */
3130-#: ../js/ui/calendar.js:82
3131-msgctxt "event list time"
3132-msgid "%l∶%M %p"
3133-msgstr ""
3134+#. Translators: Enter 0-6 (Sunday-Saturday) for non-work days. Examples: "0" (Sunday) "6" (Saturday) "06" (Sunday and Saturday).
3135+#: js/ui/calendar.js:41
3136+msgctxt "calendar-no-work"
3137+msgid "06"
3138+msgstr "06"
3139
3140 #. Translators: Calendar grid abbreviation for Sunday.
3141 #. *
3142 #. * NOTE: These grid abbreviations are always shown together
3143 #. * and in order, e.g. "S M T W T F S".
3144-#. */
3145-#: ../js/ui/calendar.js:113
3146+#.
3147+#: js/ui/calendar.js:70
3148 msgctxt "grid sunday"
3149 msgid "S"
3150 msgstr "A"
3151
3152-#. Translators: Calendar grid abbreviation for Monday */
3153-#: ../js/ui/calendar.js:115
3154+#. Translators: Calendar grid abbreviation for Monday
3155+#: js/ui/calendar.js:72
3156 msgctxt "grid monday"
3157 msgid "M"
3158 msgstr "I"
3159
3160-#. Translators: Calendar grid abbreviation for Tuesday */
3161-#: ../js/ui/calendar.js:117
3162+#. Translators: Calendar grid abbreviation for Tuesday
3163+#: js/ui/calendar.js:74
3164 msgctxt "grid tuesday"
3165 msgid "T"
3166 msgstr "S"
3167
3168-#. Translators: Calendar grid abbreviation for Wednesday */
3169-#: ../js/ui/calendar.js:119
3170+#. Translators: Calendar grid abbreviation for Wednesday
3171+#: js/ui/calendar.js:76
3172 msgctxt "grid wednesday"
3173 msgid "W"
3174 msgstr "R"
3175
3176-#. Translators: Calendar grid abbreviation for Thursday */
3177-#: ../js/ui/calendar.js:121
3178+#. Translators: Calendar grid abbreviation for Thursday
3179+#: js/ui/calendar.js:78
3180 msgctxt "grid thursday"
3181 msgid "T"
3182 msgstr "K"
3183
3184-#. Translators: Calendar grid abbreviation for Friday */
3185-#: ../js/ui/calendar.js:123
3186+#. Translators: Calendar grid abbreviation for Friday
3187+#: js/ui/calendar.js:80
3188 msgctxt "grid friday"
3189 msgid "F"
3190 msgstr "J"
3191
3192-#. Translators: Calendar grid abbreviation for Saturday */
3193-#: ../js/ui/calendar.js:125
3194+#. Translators: Calendar grid abbreviation for Saturday
3195+#: js/ui/calendar.js:82
3196 msgctxt "grid saturday"
3197 msgid "S"
3198 msgstr "S"
3199
3200-#. Translators: Event list abbreviation for Sunday.
3201 #. *
3202-#. * NOTE: These list abbreviations are normally not shown together
3203-#. * so they need to be unique (e.g. Tuesday and Thursday cannot
3204-#. * both be 'T').
3205-#. */
3206-#: ../js/ui/calendar.js:138
3207-msgctxt "list sunday"
3208-msgid "Su"
3209-msgstr "A"
3210-
3211-#. Translators: Event list abbreviation for Monday */
3212-#: ../js/ui/calendar.js:140
3213-msgctxt "list monday"
3214-msgid "M"
3215-msgstr "I"
3216+#. * Translators: The header displaying just the month name
3217+#. * standalone, when this is a month of the current year.
3218+#. * "%OB" is the new format specifier introduced in glibc 2.27,
3219+#. * in most cases you should not change it.
3220+#.
3221+#: js/ui/calendar.js:330
3222+msgid "%OB"
3223+msgstr "%OB"
3224
3225-#. Translators: Event list abbreviation for Tuesday */
3226-#: ../js/ui/calendar.js:142
3227-msgctxt "list tuesday"
3228-msgid "T"
3229-msgstr "Se"
3230+#. *
3231+#. * Translators: The header displaying the month name and the year
3232+#. * number, when this is a month of a different year. You can
3233+#. * reorder the format specifiers or add other modifications
3234+#. * according to the requirements of your language.
3235+#. * "%OB" is the new format specifier introduced in glibc 2.27,
3236+#. * in most cases you should not use the old "%B" here unless you
3237+#. * absolutely know what you are doing.
3238+#.
3239+#: js/ui/calendar.js:340
3240+msgid "%OB %Y"
3241+msgstr "%OB %Y"
3242+
3243+#: js/ui/calendar.js:397
3244+msgid "Previous month"
3245+msgstr "Bulan terdahulu"
3246
3247-#. Translators: Event list abbreviation for Wednesday */
3248-#: ../js/ui/calendar.js:144
3249-msgctxt "list wednesday"
3250-msgid "W"
3251-msgstr "R"
3252+#: js/ui/calendar.js:408
3253+msgid "Next month"
3254+msgstr "Bulan berikutnya"
3255
3256-#. Translators: Event list abbreviation for Thursday */
3257-#: ../js/ui/calendar.js:146
3258-msgctxt "list thursday"
3259-msgid "Th"
3260-msgstr "K"
3261+#: js/ui/calendar.js:558
3262+#, no-javascript-format
3263+msgctxt "date day number format"
3264+msgid "%d"
3265+msgstr "%d"
3266
3267-#. Translators: Event list abbreviation for Friday */
3268-#: ../js/ui/calendar.js:148
3269-msgctxt "list friday"
3270-msgid "F"
3271-msgstr "J"
3272+#: js/ui/calendar.js:614
3273+msgid "Week %V"
3274+msgstr "Minggu %V"
3275
3276-#. Translators: Event list abbreviation for Saturday */
3277-#: ../js/ui/calendar.js:150
3278-msgctxt "list saturday"
3279-msgid "S"
3280-msgstr "S"
3281+#. Translators: Shown in calendar event list for all day events
3282+#. * Keep it short, best if you can use less then 10 characters
3283+#.
3284+#: js/ui/calendar.js:682
3285+msgctxt "event list time"
3286+msgid "All Day"
3287+msgstr "Sepanjang Hari"
3288
3289-#: ../js/ui/calendar.js:453
3290-msgid "Previous month"
3291-msgstr ""
3292+#: js/ui/calendar.js:815
3293+msgctxt "calendar heading"
3294+msgid "%A, %B %-d"
3295+msgstr "%A, %B %-d"
3296
3297-#: ../js/ui/calendar.js:463
3298-msgid "Next month"
3299-msgstr ""
3300+#: js/ui/calendar.js:819
3301+msgctxt "calendar heading"
3302+msgid "%A, %B %-d, %Y"
3303+msgstr "%A, %B %-d, %Y"
3304
3305-#. Translators: Text to show if there are no events */
3306-#: ../js/ui/calendar.js:781
3307-msgid "Nothing Scheduled"
3308-msgstr "Jadual Kosong"
3309+#: js/ui/calendar.js:1042
3310+msgid "No Notifications"
3311+msgstr "Tiada Pemberitahuan"
3312
3313-#. Translators: Shown on calendar heading when selected day occurs on current year */
3314-#: ../js/ui/calendar.js:799
3315-msgctxt "calendar heading"
3316-msgid "%A, %B %d"
3317-msgstr "%A, %d %B"
3318+#: js/ui/calendar.js:1045
3319+msgid "No Events"
3320+msgstr "Tiada Peristiwa"
3321
3322-#. Translators: Shown on calendar heading when selected day occurs on different year */
3323-#: ../js/ui/calendar.js:802
3324-msgctxt "calendar heading"
3325-msgid "%A, %B %d, %Y"
3326-msgstr "%A, %d %B %Y"
3327+#: js/ui/calendar.js:1071
3328+msgid "Clear"
3329+msgstr "Kosongkan"
3330
3331-#: ../js/ui/calendar.js:813
3332-msgid "Today"
3333-msgstr "Hari ini"
3334+#. Translators: %s is an application name
3335+#: js/ui/closeDialog.js:42
3336+#, javascript-format
3337+msgid "“%s” is not responding."
3338+msgstr "“%s” tidak memberi respons."
3339
3340-#: ../js/ui/calendar.js:817
3341-msgid "Tomorrow"
3342-msgstr "Esok"
3343+#: js/ui/closeDialog.js:43
3344+msgid ""
3345+"You may choose to wait a short while for it to continue or force the "
3346+"application to quit entirely."
3347+msgstr ""
3348+"Anda boleh tunggu sebentar untuk teruskan atau paksa aplikasi ditutup "
3349+"sepenuhnya."
3350
3351-#: ../js/ui/calendar.js:828
3352-msgid "This week"
3353-msgstr "Minggu ini"
3354+#: js/ui/closeDialog.js:59
3355+msgid "Force Quit"
3356+msgstr "Paksa Keluar"
3357
3358-#: ../js/ui/calendar.js:836
3359-msgid "Next week"
3360-msgstr "Minggu depan"
3361+#: js/ui/closeDialog.js:62
3362+msgid "Wait"
3363+msgstr "Tunggu"
3364
3365-#: ../js/ui/components/automountManager.js:91
3366+#: js/ui/components/automountManager.js:87
3367 msgid "External drive connected"
3368-msgstr ""
3369+msgstr "Pemacu luar bersambung"
3370
3371-#: ../js/ui/components/automountManager.js:102
3372+#: js/ui/components/automountManager.js:99
3373 msgid "External drive disconnected"
3374-msgstr ""
3375+msgstr "Pemacu luar ditanggalkan"
3376
3377-#: ../js/ui/components/autorunManager.js:296
3378-msgid "Removable Devices"
3379-msgstr ""
3380+#: js/ui/components/automountManager.js:209
3381+msgid "Unable to unlock volume"
3382+msgstr "Gagal menyahkunci volum"
3383
3384-#: ../js/ui/components/autorunManager.js:596
3385+#: js/ui/components/automountManager.js:210
3386+msgid "The installed udisks version does not support the PIM setting"
3387+msgstr "Versi udisks terpasang tidak menyokong tetapan PIM"
3388+
3389+#: js/ui/components/autorunManager.js:328
3390 #, javascript-format
3391 msgid "Open with %s"
3392 msgstr "Buka dengan %s"
3393
3394-#: ../js/ui/components/autorunManager.js:622
3395-#| msgid "Reject"
3396-msgid "Eject"
3397-msgstr "Lentingkan"
3398-
3399-#: ../js/ui/components/keyring.js:94
3400-#: ../js/ui/components/polkitAgent.js:285
3401+#: js/ui/components/keyring.js:67 js/ui/components/polkitAgent.js:257
3402 msgid "Password:"
3403-msgstr "Katalaluan:"
3404+msgstr "Kata Laluan:"
3405
3406-#: ../js/ui/components/keyring.js:120
3407+#: js/ui/components/keyring.js:98
3408 msgid "Type again:"
3409+msgstr "Taip sekali lagi:"
3410+
3411+#: js/ui/components/networkAgent.js:105
3412+msgid ""
3413+"Alternatively you can connect by pushing the “WPS” button on your router."
3414 msgstr ""
3415+"Selain itu anda boleh sambung dengan menekan butang \"WPS\" yang ada pada "
3416+"penghala anda."
3417
3418-#: ../js/ui/components/networkAgent.js:138
3419-#: ../js/ui/status/network.js:277
3420-#: ../js/ui/status/network.js:359
3421-#: ../js/ui/status/network.js:918
3422+#: js/ui/components/networkAgent.js:116 js/ui/status/network.js:222
3423+#: js/ui/status/network.js:313 js/ui/status/network.js:901
3424 msgid "Connect"
3425 msgstr "Sambung"
3426
3427-#: ../js/ui/components/networkAgent.js:231
3428-#: ../js/ui/components/networkAgent.js:243
3429-#: ../js/ui/components/networkAgent.js:271
3430-#: ../js/ui/components/networkAgent.js:291
3431-#: ../js/ui/components/networkAgent.js:301
3432+#. Cisco LEAP
3433+#: js/ui/components/networkAgent.js:217 js/ui/components/networkAgent.js:229
3434+#: js/ui/components/networkAgent.js:251 js/ui/components/networkAgent.js:270
3435+#: js/ui/components/networkAgent.js:290 js/ui/components/networkAgent.js:300
3436 msgid "Password: "
3437-msgstr "Kata laluan:"
3438+msgstr "Kata Laluan: "
3439
3440-#: ../js/ui/components/networkAgent.js:236
3441+#. static WEP
3442+#: js/ui/components/networkAgent.js:222
3443 msgid "Key: "
3444-msgstr "Kekunci:"
3445-
3446-#: ../js/ui/components/networkAgent.js:275
3447-msgid "Identity: "
3448-msgstr "Identiti:"
3449+msgstr "Kunci: "
3450
3451-#: ../js/ui/components/networkAgent.js:277
3452+#: js/ui/components/networkAgent.js:254 js/ui/components/networkAgent.js:276
3453 msgid "Private key password: "
3454-msgstr "Katalaluan kekunci peribadi:"
3455+msgstr "Kata laluan kunci persendirian: "
3456+
3457+#: js/ui/components/networkAgent.js:274
3458+msgid "Identity: "
3459+msgstr "Identiti: "
3460
3461-#: ../js/ui/components/networkAgent.js:289
3462+#: js/ui/components/networkAgent.js:288
3463 msgid "Service: "
3464-msgstr "Perkhidmatan:"
3465+msgstr "Perkhidmatan: "
3466
3467-#: ../js/ui/components/networkAgent.js:318
3468+#: js/ui/components/networkAgent.js:317 js/ui/components/networkAgent.js:692
3469 msgid "Authentication required by wireless network"
3470-msgstr "Pengesahan diperlukan untuk rangkaian wayarles"
3471+msgstr "Pengesahihan diperlukan untuk rangkaian tanpa wayar"
3472
3473-#: ../js/ui/components/networkAgent.js:319
3474+#: js/ui/components/networkAgent.js:318 js/ui/components/networkAgent.js:693
3475 #, javascript-format
3476-#| msgid ""
3477-#| "Passwords or encryption keys are required to access the wireless network "
3478-#| "'%s'."
3479-msgid "Passwords or encryption keys are required to access the wireless network “%s”."
3480-msgstr "Katalaluan atau kekunci penyulitan diperlukan untuk mencapai rangkaian wayarles “%s”."
3481+msgid ""
3482+"Passwords or encryption keys are required to access the wireless network "
3483+"“%s”."
3484+msgstr ""
3485+"Kata laluan atau kunci penyulitan diperlukan untuk mencapai rangkaian tanpa "
3486+"wayar “%s”."
3487
3488-#: ../js/ui/components/networkAgent.js:323
3489+#: js/ui/components/networkAgent.js:322 js/ui/components/networkAgent.js:697
3490 msgid "Wired 802.1X authentication"
3491 msgstr "Pengesahan berwayar 802.1X"
3492
3493-#: ../js/ui/components/networkAgent.js:325
3494+#: js/ui/components/networkAgent.js:324
3495 msgid "Network name: "
3496-msgstr "Nama rangkaian:"
3497+msgstr "Nama rangkaian: "
3498
3499-#: ../js/ui/components/networkAgent.js:330
3500+#: js/ui/components/networkAgent.js:329 js/ui/components/networkAgent.js:701
3501 msgid "DSL authentication"
3502 msgstr "Pengesahan DSL"
3503
3504-#: ../js/ui/components/networkAgent.js:337
3505+#: js/ui/components/networkAgent.js:336 js/ui/components/networkAgent.js:706
3506 msgid "PIN code required"
3507 msgstr "Kod PIN diperlukan"
3508
3509-#: ../js/ui/components/networkAgent.js:338
3510+#: js/ui/components/networkAgent.js:337 js/ui/components/networkAgent.js:707
3511 msgid "PIN code is needed for the mobile broadband device"
3512 msgstr "Kod PIN diperlukan untuk peranti jalur lebar mudah alih"
3513
3514-#: ../js/ui/components/networkAgent.js:339
3515+#: js/ui/components/networkAgent.js:338
3516 msgid "PIN: "
3517-msgstr "PIN:"
3518+msgstr "PIN: "
3519
3520-#: ../js/ui/components/networkAgent.js:345
3521+#: js/ui/components/networkAgent.js:345 js/ui/components/networkAgent.js:713
3522 msgid "Mobile broadband network password"
3523 msgstr "Kata laluan rangkaian jalur lebar mudah alih"
3524
3525-#: ../js/ui/components/networkAgent.js:346
3526+#: js/ui/components/networkAgent.js:346 js/ui/components/networkAgent.js:698
3527+#: js/ui/components/networkAgent.js:702 js/ui/components/networkAgent.js:714
3528 #, javascript-format
3529-#| msgid "A password is required to connect to '%s'."
3530 msgid "A password is required to connect to “%s”."
3531-msgstr "Kata laluan diperlukan untuk disambungkan ke “%s”."
3532+msgstr "Kata laluan diperlukan untuk bersambung dengan “%s”."
3533+
3534+#: js/ui/components/networkAgent.js:681 js/ui/status/network.js:1675
3535+msgid "Network Manager"
3536+msgstr "Pengurus Rangkaian"
3537
3538-#: ../js/ui/components/polkitAgent.js:54
3539+#: js/ui/components/polkitAgent.js:36
3540 msgid "Authentication Required"
3541-msgstr "Pengesahan Diperlukan"
3542+msgstr "Pengesahihan Diperlukan"
3543
3544-#: ../js/ui/components/polkitAgent.js:96
3545+#: js/ui/components/polkitAgent.js:64
3546 msgid "Administrator"
3547-msgstr "Pengurus"
3548+msgstr "Pentadbir"
3549
3550-#: ../js/ui/components/polkitAgent.js:175
3551+#: js/ui/components/polkitAgent.js:141
3552 msgid "Authenticate"
3553-msgstr "Pengesahan"
3554+msgstr "Sahihkan"
3555
3556 #. Translators: "that didn't work" refers to the fact that the
3557 #. * requested authentication was not gained; this can happen
3558 #. * because of an authentication error (like invalid password),
3559-#. * for instance. */
3560-#: ../js/ui/components/polkitAgent.js:271
3561-#: ../js/ui/shellMountOperation.js:383
3562-msgid "Sorry, that didn't work. Please try again."
3563-msgstr "Maaf, tidak berjaya. Sila cuba lagi."
3564-
3565-#: ../js/ui/components/telepathyClient.js:240
3566-msgid "Invitation"
3567-msgstr "Jemputan"
3568-
3569-#: ../js/ui/components/telepathyClient.js:300
3570-msgid "Call"
3571-msgstr "Panggilan"
3572-
3573-#: ../js/ui/components/telepathyClient.js:316
3574-msgid "File Transfer"
3575-msgstr "Pemindahan Fail"
3576-
3577-#: ../js/ui/components/telepathyClient.js:420
3578-msgid "Chat"
3579-msgstr ""
3580-
3581-#: ../js/ui/components/telepathyClient.js:483
3582-msgid "Unmute"
3583-msgstr ""
3584-
3585-#: ../js/ui/components/telepathyClient.js:483
3586-msgid "Mute"
3587-msgstr ""
3588-
3589-#. Translators: Time in 24h format */
3590-#: ../js/ui/components/telepathyClient.js:953
3591-msgid "%H∶%M"
3592-msgstr ""
3593-
3594-#. Translators: this is the word "Yesterday" followed by a
3595-#. time string in 24h format. i.e. "Yesterday, 14:30" */
3596-#: ../js/ui/components/telepathyClient.js:960
3597-msgid "Yesterday, %H∶%M"
3598-msgstr ""
3599-
3600-#. Translators: this is the week day name followed by a time
3601-#. string in 24h format. i.e. "Monday, 14:30" */
3602-#: ../js/ui/components/telepathyClient.js:967
3603-msgid "%A, %H∶%M"
3604-msgstr ""
3605-
3606-#. Translators: this is the month name and day number
3607-#. followed by a time string in 24h format.
3608-#. i.e. "May 25, 14:30" */
3609-#: ../js/ui/components/telepathyClient.js:974
3610-msgid "%B %d, %H∶%M"
3611-msgstr ""
3612-
3613-#. Translators: this is the month name, day number, year
3614-#. number followed by a time string in 24h format.
3615-#. i.e. "May 25 2012, 14:30" */
3616-#: ../js/ui/components/telepathyClient.js:980
3617-msgid "%B %d %Y, %H∶%M"
3618-msgstr ""
3619-
3620-#. Translators: Time in 24h format */
3621-#: ../js/ui/components/telepathyClient.js:986
3622-#| msgctxt "event list time"
3623-#| msgid "%l:%M %p"
3624-msgid "%l∶%M %p"
3625-msgstr "%l:%M %p"
3626-
3627-#. Translators: this is the word "Yesterday" followed by a
3628-#. time string in 12h format. i.e. "Yesterday, 2:30 pm" */
3629-#: ../js/ui/components/telepathyClient.js:993
3630-msgid "Yesterday, %l∶%M %p"
3631-msgstr ""
3632-
3633-#. Translators: this is the week day name followed by a time
3634-#. string in 12h format. i.e. "Monday, 2:30 pm" */
3635-#: ../js/ui/components/telepathyClient.js:1000
3636-#| msgid "%a %l:%M %p"
3637-msgid "%A, %l∶%M %p"
3638-msgstr "%A, %l∶%M %p"
3639-
3640-#. Translators: this is the month name and day number
3641-#. followed by a time string in 12h format.
3642-#. i.e. "May 25, 2:30 pm" */
3643-#: ../js/ui/components/telepathyClient.js:1007
3644-#| msgid "%a %b %e, %l:%M %p"
3645-msgid "%B %d, %l∶%M %p"
3646-msgstr "%B %d, %l∶%M %p"
3647-
3648-#. Translators: this is the month name, day number, year
3649-#. number followed by a time string in 12h format.
3650-#. i.e. "May 25 2012, 2:30 pm"*/
3651-#: ../js/ui/components/telepathyClient.js:1013
3652-#| msgid "%a %b %e, %l:%M %p"
3653-msgid "%B %d %Y, %l∶%M %p"
3654-msgstr "%B %d %Y, %l∶%M %p"
3655+#. * for instance.
3656+#: js/ui/components/polkitAgent.js:243 js/ui/shellMountOperation.js:376
3657+msgid "Sorry, that didn’t work. Please try again."
3658+msgstr "Maaf, nampaknya tidak berjaya. Cuba sekali lagi."
3659
3660 #. Translators: this is the other person changing their old IM name to their new
3661-#. IM name. */
3662-#: ../js/ui/components/telepathyClient.js:1045
3663+#. IM name.
3664+#: js/ui/components/telepathyClient.js:777
3665 #, javascript-format
3666 msgid "%s is now known as %s"
3667 msgstr "%s kini dikenali sebagai %s"
3668
3669-#. translators: argument is a room name like
3670-#. * room@jabber.org for example. */
3671-#: ../js/ui/components/telepathyClient.js:1149
3672-#, javascript-format
3673-msgid "Invitation to %s"
3674-msgstr "Jemputan untuk %s"
3675-
3676-#. translators: first argument is the name of a contact and the second
3677-#. * one the name of a room. "Alice is inviting you to join room@jabber.org
3678-#. * for example. */
3679-#: ../js/ui/components/telepathyClient.js:1157
3680-#, javascript-format
3681-msgid "%s is inviting you to join %s"
3682-msgstr "%s menjemput anda untuk menyertai %s"
3683-
3684-#: ../js/ui/components/telepathyClient.js:1159
3685-#: ../js/ui/components/telepathyClient.js:1194
3686-#: ../js/ui/components/telepathyClient.js:1228
3687-#: ../js/ui/components/telepathyClient.js:1286
3688-msgid "Decline"
3689-msgstr "Tolak"
3690-
3691-#: ../js/ui/components/telepathyClient.js:1165
3692-#: ../js/ui/components/telepathyClient.js:1234
3693-#: ../js/ui/components/telepathyClient.js:1291
3694-msgid "Accept"
3695-msgstr "Terima"
3696-
3697-#. translators: argument is a contact name like Alice for example. */
3698-#: ../js/ui/components/telepathyClient.js:1184
3699-#, javascript-format
3700-msgid "Video call from %s"
3701-msgstr "Panggilan video dari %s"
3702-
3703-#. translators: argument is a contact name like Alice for example. */
3704-#: ../js/ui/components/telepathyClient.js:1187
3705-#, javascript-format
3706-msgid "Call from %s"
3707-msgstr "Panggilan dari %s"
3708-
3709-#. translators: this is a button label (verb), not a noun */
3710-#: ../js/ui/components/telepathyClient.js:1201
3711-msgid "Answer"
3712-msgstr "Jawapan"
3713-
3714-#. To translators: The first parameter is
3715-#. * the contact's alias and the second one is the
3716-#. * file name. The string will be something
3717-#. * like: "Alice is sending you test.ogg"
3718-#. */
3719-#: ../js/ui/components/telepathyClient.js:1222
3720-#, javascript-format
3721-msgid "%s is sending you %s"
3722-msgstr "%s menghantarkan %s kepada anda"
3723-
3724-#. To translators: The parameter is the contact's alias */
3725-#: ../js/ui/components/telepathyClient.js:1251
3726-#, javascript-format
3727-msgid "%s would like permission to see when you are online"
3728-msgstr "%s mahukan kebenaran untuk melihat bila anda akan ada di talian"
3729-
3730-#: ../js/ui/components/telepathyClient.js:1337
3731-msgid "Network error"
3732-msgstr "Ralat rangkaian"
3733-
3734-#: ../js/ui/components/telepathyClient.js:1339
3735-msgid "Authentication failed"
3736-msgstr "Pengesahan gagal"
3737-
3738-#: ../js/ui/components/telepathyClient.js:1341
3739-msgid "Encryption error"
3740-msgstr "Ralat penyulitan"
3741-
3742-#: ../js/ui/components/telepathyClient.js:1343
3743-msgid "Certificate not provided"
3744-msgstr "Perakuan tidak diberikan"
3745-
3746-#: ../js/ui/components/telepathyClient.js:1345
3747-msgid "Certificate untrusted"
3748-msgstr "Perakuan tidak dipercayai"
3749-
3750-#: ../js/ui/components/telepathyClient.js:1347
3751-msgid "Certificate expired"
3752-msgstr "Perakuan habis tempoh"
3753-
3754-#: ../js/ui/components/telepathyClient.js:1349
3755-msgid "Certificate not activated"
3756-msgstr "Perakuan tidak diaktifkan"
3757-
3758-#: ../js/ui/components/telepathyClient.js:1351
3759-msgid "Certificate hostname mismatch"
3760-msgstr "Nama hos perakuan tak padan"
3761-
3762-#: ../js/ui/components/telepathyClient.js:1353
3763-msgid "Certificate fingerprint mismatch"
3764-msgstr "Fingerprint perakuan tak padan"
3765-
3766-#: ../js/ui/components/telepathyClient.js:1355
3767-msgid "Certificate self-signed"
3768-msgstr "Perakuan didaftar sendiri"
3769-
3770-#: ../js/ui/components/telepathyClient.js:1357
3771-msgid "Status is set to offline"
3772-msgstr "Status ditetapkan kepada luar talian"
3773-
3774-#: ../js/ui/components/telepathyClient.js:1359
3775-msgid "Encryption is not available"
3776-msgstr "Penyulitan tiada"
3777-
3778-#: ../js/ui/components/telepathyClient.js:1361
3779-msgid "Certificate is invalid"
3780-msgstr "Perakuan tak sah"
3781-
3782-#: ../js/ui/components/telepathyClient.js:1363
3783-msgid "Connection has been refused"
3784-msgstr "Sambungan telah ditolak"
3785-
3786-#: ../js/ui/components/telepathyClient.js:1365
3787-msgid "Connection can't be established"
3788-msgstr "Sambungan tidak dapat dibuat"
3789-
3790-#: ../js/ui/components/telepathyClient.js:1367
3791-msgid "Connection has been lost"
3792-msgstr "Sambungan telah terputus"
3793-
3794-#: ../js/ui/components/telepathyClient.js:1369
3795-#| msgid "This resource is already connected to the server"
3796-msgid "This account is already connected to the server"
3797-msgstr "Akaun ini telah pun disambungkan ke pelayan"
3798-
3799-#: ../js/ui/components/telepathyClient.js:1371
3800-msgid "Connection has been replaced by a new connection using the same resource"
3801-msgstr "Sambungan telah digantikan dengan sambungan baru dengan sumber yang sama"
3802-
3803-#: ../js/ui/components/telepathyClient.js:1373
3804-msgid "The account already exists on the server"
3805-msgstr "Akaun berkenaan telah pun wujud pada pelayan"
3806-
3807-#: ../js/ui/components/telepathyClient.js:1375
3808-msgid "Server is currently too busy to handle the connection"
3809-msgstr "Pelayan sedang terlalu sibuk untuk mengendalikan sambungan"
3810-
3811-#: ../js/ui/components/telepathyClient.js:1377
3812-msgid "Certificate has been revoked"
3813-msgstr "Perakuan telah dibatalkan"
3814-
3815-#: ../js/ui/components/telepathyClient.js:1379
3816-msgid "Certificate uses an insecure cipher algorithm or is cryptographically weak"
3817-msgstr "Perakuan menggunakan algoritma sifer yang tak selamat atau rapuh dari segi kriptografi"
3818-
3819-#: ../js/ui/components/telepathyClient.js:1381
3820-msgid "The length of the server certificate, or the depth of the server certificate chain, exceed the limits imposed by the cryptography library"
3821-msgstr "Panjang perakuan pelayan, atau kedalaman rantai perakuan pelayan, melebihi had yang dikenakan oleh pustaka kriptografi"
3822-
3823-#: ../js/ui/components/telepathyClient.js:1383
3824-#| msgid "Connection error"
3825-msgid "Internal error"
3826-msgstr "Ralat dalaman"
3827-
3828-#. translators: argument is the account name, like
3829-#. * name@jabber.org for example. */
3830-#: ../js/ui/components/telepathyClient.js:1393
3831-#, javascript-format
3832-msgid "Unable to connect to %s"
3833-msgstr ""
3834-
3835-#: ../js/ui/components/telepathyClient.js:1398
3836-#| msgid "Edit account"
3837-msgid "View account"
3838-msgstr "Tunjukkan akaun"
3839-
3840-#: ../js/ui/components/telepathyClient.js:1435
3841-msgid "Unknown reason"
3842-msgstr "Sebab tak diketahui"
3843-
3844-#: ../js/ui/ctrlAltTab.js:29
3845-#: ../js/ui/viewSelector.js:154
3846+#: js/ui/ctrlAltTab.js:21 js/ui/viewSelector.js:169
3847 msgid "Windows"
3848 msgstr "Tetingkap"
3849
3850-#: ../js/ui/dash.js:249
3851-#: ../js/ui/dash.js:287
3852-#| msgid "Applications"
3853+#: js/ui/dash.js:200 js/ui/dash.js:241
3854 msgid "Show Applications"
3855 msgstr "Tunjukkan Aplikasi"
3856
3857-#: ../js/ui/dash.js:445
3858+#. Translators: this is the name of the dock/favorites area on
3859+#. the left of the overview
3860+#: js/ui/dash.js:389
3861 msgid "Dash"
3862-msgstr "Dash"
3863+msgstr "Pemuka"
3864
3865-#: ../js/ui/dateMenu.js:96
3866-msgid "Open Calendar"
3867-msgstr "Buka Kalendar"
3868+#. Translators: This is the date format to use when the calendar popup is
3869+#. * shown - it is shown just below the time in the top bar (e.g.,
3870+#. * "Tue 9:29 AM"). The string itself should become a full date, e.g.,
3871+#. * "February 17 2015".
3872+#.
3873+#: js/ui/dateMenu.js:70
3874+msgid "%B %-d %Y"
3875+msgstr "%-d %B %Y"
3876+
3877+#. Translators: This is the accessible name of the date button shown
3878+#. * below the time in the shell; it should combine the weekday and the
3879+#. * date, e.g. "Tuesday February 17 2015".
3880+#.
3881+#: js/ui/dateMenu.js:77
3882+msgid "%A %B %e %Y"
3883+msgstr "%A %e %B %Y"
3884
3885-#: ../js/ui/dateMenu.js:100
3886-msgid "Open Clocks"
3887-msgstr ""
3888+#: js/ui/dateMenu.js:152
3889+msgid "Add world clocks…"
3890+msgstr "Tambah jam dunia..."
3891
3892-#: ../js/ui/dateMenu.js:107
3893-#| msgid "Date and Time Settings"
3894-msgid "Date & Time Settings"
3895-msgstr "Tetapan Tarikh dan Waktu"
3896+#: js/ui/dateMenu.js:153
3897+msgid "World Clocks"
3898+msgstr "Jam Dunia"
3899
3900-#. Translators: This is the date format to use when the calendar popup is
3901-#. * shown - it is shown just below the time in the shell (e.g. "Tue 9:29 AM").
3902-#. */
3903-#: ../js/ui/dateMenu.js:204
3904-msgid "%A %B %e, %Y"
3905-msgstr "%A %e %B %Y"
3906+#: js/ui/dateMenu.js:268
3907+msgid "Weather"
3908+msgstr "Cuaca"
3909+
3910+#: js/ui/dateMenu.js:351
3911+msgid "Select a location…"
3912+msgstr "Pilih satu lokasi..."
3913+
3914+#: js/ui/dateMenu.js:359
3915+msgid "Loading…"
3916+msgstr "Memuatkan..."
3917
3918-#: ../js/ui/endSessionDialog.js:64
3919+#: js/ui/dateMenu.js:369
3920+msgid "Go online for weather information"
3921+msgstr "Pergi dalam talian untuk dapatkan maklumat cuaca"
3922+
3923+#: js/ui/dateMenu.js:371
3924+msgid "Weather information is currently unavailable"
3925+msgstr "Maklumat cuaca buat masa ini tidak tersedia"
3926+
3927+#: js/ui/endSessionDialog.js:37
3928 #, javascript-format
3929-#| msgid "Log Out %s"
3930 msgctxt "title"
3931 msgid "Log Out %s"
3932-msgstr "Log Keluar %s"
3933+msgstr "Daftar Keluar %s"
3934
3935-#: ../js/ui/endSessionDialog.js:65
3936-#| msgid "Log Out"
3937+#: js/ui/endSessionDialog.js:38
3938 msgctxt "title"
3939 msgid "Log Out"
3940-msgstr "Log Keluar"
3941+msgstr "Daftar Keluar"
3942
3943-#: ../js/ui/endSessionDialog.js:67
3944+#: js/ui/endSessionDialog.js:40
3945 #, javascript-format
3946 msgid "%s will be logged out automatically in %d second."
3947 msgid_plural "%s will be logged out automatically in %d seconds."
3948-msgstr[0] "%s akan dilog keluar secara automatik dalam %d saat."
3949-msgstr[1] "%s akan dilog keluar secara automatik dalam %d saat."
3950+msgstr[0] "%s akan mendaftar keluar secara automatik dalam tempoh %d saat."
3951
3952-#: ../js/ui/endSessionDialog.js:72
3953+#: js/ui/endSessionDialog.js:45
3954 #, javascript-format
3955-#| msgid "You will be logged out automatically in %d seconds."
3956 msgid "You will be logged out automatically in %d second."
3957 msgid_plural "You will be logged out automatically in %d seconds."
3958-msgstr[0] "Anda akan dilog keluar secara automatik dalam %d saat."
3959-msgstr[1] "Anda akan dilog keluar secara automatik dalam %d saat."
3960+msgstr[0] "Anda akan mendaftar keluar secara automatik dalam tempoh %d saat."
3961
3962-#: ../js/ui/endSessionDialog.js:78
3963-#| msgid "Log Out"
3964+#: js/ui/endSessionDialog.js:51
3965 msgctxt "button"
3966 msgid "Log Out"
3967-msgstr "Log Keluar"
3968+msgstr "Daftar Keluar"
3969
3970-#: ../js/ui/endSessionDialog.js:84
3971-#| msgid "Power Off"
3972+#: js/ui/endSessionDialog.js:57
3973 msgctxt "title"
3974 msgid "Power Off"
3975 msgstr "Matikan"
3976
3977-#: ../js/ui/endSessionDialog.js:85
3978+#: js/ui/endSessionDialog.js:58
3979 msgctxt "title"
3980 msgid "Install Updates & Power Off"
3981-msgstr ""
3982+msgstr "Pasang Kemas Kini & Matikan"
3983
3984-#: ../js/ui/endSessionDialog.js:87
3985+#: js/ui/endSessionDialog.js:60
3986 #, javascript-format
3987-#| msgid "The system will power off automatically in %d seconds."
3988 msgid "The system will power off automatically in %d second."
3989 msgid_plural "The system will power off automatically in %d seconds."
3990-msgstr[0] "Sistem akan dimatikan secara automatik dalam %d saat."
3991-msgstr[1] "Sistem akan dimatikan secara automatik dalam %d saat."
3992+msgstr[0] "Sistem akan dimatikan secara automatik dalam tempoh %d saat."
3993
3994-#: ../js/ui/endSessionDialog.js:91
3995+#: js/ui/endSessionDialog.js:64
3996 msgctxt "checkbox"
3997 msgid "Install pending software updates"
3998-msgstr ""
3999+msgstr "Pasang kemas kini-kemas kini perisian tertangguh"
4000
4001-#: ../js/ui/endSessionDialog.js:94
4002-#: ../js/ui/endSessionDialog.js:111
4003-#| msgid "Restart"
4004+#: js/ui/endSessionDialog.js:67 js/ui/endSessionDialog.js:84
4005 msgctxt "button"
4006 msgid "Restart"
4007 msgstr "Mula Semula"
4008
4009-#: ../js/ui/endSessionDialog.js:96
4010-#| msgid "Power Off"
4011+#: js/ui/endSessionDialog.js:69
4012 msgctxt "button"
4013 msgid "Power Off"
4014 msgstr "Matikan"
4015
4016-#: ../js/ui/endSessionDialog.js:103
4017-#| msgid "Restart"
4018+#: js/ui/endSessionDialog.js:76
4019 msgctxt "title"
4020 msgid "Restart"
4021 msgstr "Mula Semula"
4022
4023-#: ../js/ui/endSessionDialog.js:105
4024+#: js/ui/endSessionDialog.js:78
4025 #, javascript-format
4026-#| msgid "The system will restart automatically in %d seconds."
4027 msgid "The system will restart automatically in %d second."
4028 msgid_plural "The system will restart automatically in %d seconds."
4029-msgstr[0] "Sistem akan mula semula secara automatik dalam %d saat."
4030-msgstr[1] "Sistem akan mula semula secara automatik dalam %d saat."
4031+msgstr[0] "Sistem akan mula semula secara automatik dalam tempoh %d saat."
4032
4033-#: ../js/ui/endSessionDialog.js:119
4034+#: js/ui/endSessionDialog.js:92
4035 msgctxt "title"
4036 msgid "Restart & Install Updates"
4037-msgstr ""
4038+msgstr "Mulas Semula & Pasang Kemas Kini"
4039
4040-#: ../js/ui/endSessionDialog.js:121
4041+#: js/ui/endSessionDialog.js:94
4042 #, javascript-format
4043-#| msgid "The system will restart automatically in %d seconds."
4044 msgid "The system will automatically restart and install updates in %d second."
4045-msgid_plural "The system will automatically restart and install updates in %d seconds."
4046-msgstr[0] "Sistem akan mula semula secara automatik dan mengemaskini dalam %d saat."
4047-msgstr[1] "Sistem akan mula semula secara automatik dan mengemaskini dalam %d saat."
4048+msgid_plural ""
4049+"The system will automatically restart and install updates in %d seconds."
4050+msgstr[0] ""
4051+"Sistem akan mula semula secara automatik dan mengemas kini dalam tempoh %d "
4052+"saat."
4053
4054-#: ../js/ui/endSessionDialog.js:127
4055+#: js/ui/endSessionDialog.js:100 js/ui/endSessionDialog.js:120
4056 msgctxt "button"
4057 msgid "Restart &amp; Install"
4058-msgstr ""
4059+msgstr "Mula Semula &amp; Pasang"
4060
4061-#: ../js/ui/endSessionDialog.js:128
4062+#: js/ui/endSessionDialog.js:101
4063 msgctxt "button"
4064 msgid "Install &amp; Power Off"
4065-msgstr ""
4066+msgstr "Pasang &amp; Matikan"
4067
4068-#: ../js/ui/endSessionDialog.js:129
4069+#: js/ui/endSessionDialog.js:102
4070 msgctxt "checkbox"
4071 msgid "Power off after updates are installed"
4072+msgstr "Matikan selepas kemas kini-kemas kini telah dipasang"
4073+
4074+#: js/ui/endSessionDialog.js:110
4075+msgctxt "title"
4076+msgid "Restart & Install Upgrade"
4077+msgstr "Mula Semula & Pasang Penataran"
4078+
4079+#. Translators: This is the text displayed for system upgrades in the
4080+#. shut down dialog. First %s gets replaced with the distro name and
4081+#. second %s with the distro version to upgrade to
4082+#: js/ui/endSessionDialog.js:115
4083+#, javascript-format
4084+msgid ""
4085+"%s %s will be installed after restart. Upgrade installation can take a long "
4086+"time: ensure that you have backed up and that the computer is plugged in."
4087 msgstr ""
4088+"%s%s akan dipasang selepas mula semula. Pemasangan penataran mengambil masa "
4089+"yang agak lama: pastikan anda telah menyandar dan komputer anda menggunakan "
4090+"kuasa AC."
4091
4092-#: ../js/ui/endSessionDialog.js:338
4093+#: js/ui/endSessionDialog.js:304
4094 msgid "Running on battery power: please plug in before installing updates."
4095 msgstr ""
4096+"Berjalan dengan kuasa bateri: sila palamkan sebelum memasang kemas kini-"
4097+"kemas kini."
4098
4099-#: ../js/ui/endSessionDialog.js:355
4100+#: js/ui/endSessionDialog.js:321
4101 msgid "Some applications are busy or have unsaved work."
4102 msgstr ""
4103+"Sesetengah aplikasi masih sibuk atau mempunyai kerja-kerja yang belum "
4104+"disimpan."
4105
4106-#: ../js/ui/endSessionDialog.js:362
4107+#: js/ui/endSessionDialog.js:328
4108 msgid "Other users are logged in."
4109-msgstr ""
4110+msgstr "Ada pengguna lain masih mendaftar masuk."
4111
4112-#. Translators: Remote here refers to a remote session, like a ssh login */
4113-#: ../js/ui/endSessionDialog.js:640
4114+#. Translators: Remote here refers to a remote session, like a ssh login
4115+#: js/ui/endSessionDialog.js:650
4116 #, javascript-format
4117 msgid "%s (remote)"
4118-msgstr ""
4119+msgstr "%s (jauh)"
4120
4121-#. Translators: Console here refers to a tty like a VT console */
4122-#: ../js/ui/endSessionDialog.js:643
4123+#. Translators: Console here refers to a tty like a VT console
4124+#: js/ui/endSessionDialog.js:653
4125 #, javascript-format
4126 msgid "%s (console)"
4127-msgstr ""
4128+msgstr "%s (konsol)"
4129
4130-#: ../js/ui/extensionDownloader.js:199
4131+#: js/ui/extensionDownloader.js:194
4132 msgid "Install"
4133 msgstr "Pasang"
4134
4135-#: ../js/ui/extensionDownloader.js:204
4136+#: js/ui/extensionDownloader.js:200
4137 #, javascript-format
4138-#| msgid "Download and install '%s' from extensions.gnome.org?"
4139 msgid "Download and install “%s” from extensions.gnome.org?"
4140 msgstr "Muat turun dan pasang “%s” dari extensions.gnome.org?"
4141
4142-#: ../js/ui/keyboard.js:692
4143-#: ../js/ui/status/keyboard.js:523
4144-msgid "Keyboard"
4145-msgstr "Papan kekunci"
4146+#: js/ui/inhibitShortcutsDialog.js:80
4147+#, javascript-format
4148+msgid "%s wants to inhibit shortcuts"
4149+msgstr "%s mahu menyekat pintasan-pintasan"
4150+
4151+#: js/ui/inhibitShortcutsDialog.js:81
4152+msgid "Application wants to inhibit shortcuts"
4153+msgstr "Aplikasi mahu menyekat pintasan-pintasan"
4154+
4155+#. Translators: %s is a keyboard shortcut like "Super+x"
4156+#: js/ui/inhibitShortcutsDialog.js:90
4157+#, javascript-format
4158+msgid "You can restore shortcuts by pressing %s."
4159+msgstr "Anda boleh memulihkan pintasan-pintasan dengan menekan %s."
4160+
4161+#: js/ui/inhibitShortcutsDialog.js:95
4162+msgid "Deny"
4163+msgstr "Nafi"
4164+
4165+#: js/ui/inhibitShortcutsDialog.js:102
4166+msgid "Allow"
4167+msgstr "Benarkan"
4168+
4169+#: js/ui/kbdA11yDialog.js:32
4170+msgid "Slow Keys Turned On"
4171+msgstr "Kekunci Lambat Hidup"
4172+
4173+#: js/ui/kbdA11yDialog.js:33
4174+msgid "Slow Keys Turned Off"
4175+msgstr "Kekunci Lambat Mati"
4176+
4177+#: js/ui/kbdA11yDialog.js:34
4178+msgid ""
4179+"You just held down the Shift key for 8 seconds. This is the shortcut for the "
4180+"Slow Keys feature, which affects the way your keyboard works."
4181+msgstr ""
4182+"Anda baru sahaja menahan kekunci Shift selama 8 saat. Tindakan ini adalah "
4183+"pintasan untuk fitur Kekunci-Kekunci Lambat, yang mungkin mempengaruhi "
4184+"fungsi papan kekunci anda."
4185+
4186+#: js/ui/kbdA11yDialog.js:41
4187+msgid "Sticky Keys Turned On"
4188+msgstr "Kekunci Lekat Hidup"
4189+
4190+#: js/ui/kbdA11yDialog.js:42
4191+msgid "Sticky Keys Turned Off"
4192+msgstr "Kekunci Lekat Mati"
4193+
4194+#: js/ui/kbdA11yDialog.js:44
4195+msgid ""
4196+"You just pressed the Shift key 5 times in a row. This is the shortcut for "
4197+"the Sticky Keys feature, which affects the way your keyboard works."
4198+msgstr ""
4199+"Anda baru sahaja menekan kekunci Shift sebanyak 5 kali berturutan. Tindakan "
4200+"ini adalah pintasan untuk fitur Kekunci-Kekunci Lekat, yang mungkin "
4201+"mempengaruhi fungsi papan kekunci anda."
4202+
4203+#: js/ui/kbdA11yDialog.js:46
4204+msgid ""
4205+"You just pressed two keys at once, or pressed the Shift key 5 times in a "
4206+"row. This turns off the Sticky Keys feature, which affects the way your "
4207+"keyboard works."
4208+msgstr ""
4209+"Anda baru sahaja menekan dua kekunci sekaligus, atau menekan kekunci Shift "
4210+"sebanyak 5 kali berturutan. Tindakan ini mematikan fitur Kekunci-Kekunci "
4211+"Lekat, yang mungkin mempengaruhi fungsi papan kekunci anda."
4212+
4213+#: js/ui/kbdA11yDialog.js:58
4214+msgid "Leave On"
4215+msgstr "Biarkan"
4216+
4217+#: js/ui/kbdA11yDialog.js:58 js/ui/status/bluetooth.js:134
4218+#: js/ui/status/network.js:1274
4219+msgid "Turn On"
4220+msgstr "Hidup"
4221
4222-#: ../js/ui/lookingGlass.js:643
4223+#: js/ui/kbdA11yDialog.js:66 js/ui/status/bluetooth.js:134
4224+#: js/ui/status/network.js:131 js/ui/status/network.js:314
4225+#: js/ui/status/network.js:1274 js/ui/status/network.js:1386
4226+#: js/ui/status/nightLight.js:40 js/ui/status/rfkill.js:80
4227+#: js/ui/status/rfkill.js:107
4228+msgid "Turn Off"
4229+msgstr "Mati"
4230+
4231+#: js/ui/kbdA11yDialog.js:66
4232+msgid "Leave Off"
4233+msgstr "Tinggalkan"
4234+
4235+#: js/ui/keyboard.js:201
4236+msgid "Region & Language Settings"
4237+msgstr "Tetapan-Tetapan Wilayah & Bahasa"
4238+
4239+#: js/ui/lookingGlass.js:629
4240 msgid "No extensions installed"
4241 msgstr "Tiada sambungan dipasang"
4242
4243-#. Translators: argument is an extension UUID. */
4244-#: ../js/ui/lookingGlass.js:697
4245+#. Translators: argument is an extension UUID.
4246+#: js/ui/lookingGlass.js:684
4247 #, javascript-format
4248 msgid "%s has not emitted any errors."
4249-msgstr ""
4250+msgstr "%s tidak menghasilkan apa-apa ralat."
4251
4252-#: ../js/ui/lookingGlass.js:703
4253-#| msgid "Error"
4254+#: js/ui/lookingGlass.js:690
4255 msgid "Hide Errors"
4256 msgstr "Sembunyikan Ralat"
4257
4258-#: ../js/ui/lookingGlass.js:707
4259-#: ../js/ui/lookingGlass.js:767
4260-#| msgid "Error"
4261+#: js/ui/lookingGlass.js:694 js/ui/lookingGlass.js:753
4262 msgid "Show Errors"
4263 msgstr "Tunjukkan Ralat"
4264
4265-#: ../js/ui/lookingGlass.js:716
4266-#: ../js/ui/status/location.js:71
4267-#: ../js/ui/status/location.js:176
4268+#: js/ui/lookingGlass.js:703
4269 msgid "Enabled"
4270 msgstr "Dibolehkan"
4271
4272-#. Translators: this is for a network device that cannot be activated
4273-#. because it's disabled by rfkill (airplane mode) */
4274 #. translators:
4275 #. * The device has been disabled
4276-#: ../js/ui/lookingGlass.js:719
4277-#: ../js/ui/status/location.js:179
4278-#: ../js/ui/status/network.js:592
4279-#: ../src/gvc/gvc-mixer-control.c:1830
4280+#: js/ui/lookingGlass.js:706 subprojects/gvc/gvc-mixer-control.c:1864
4281 msgid "Disabled"
4282 msgstr "Dilumpuhkan"
4283
4284-#: ../js/ui/lookingGlass.js:721
4285+#: js/ui/lookingGlass.js:708
4286 msgid "Error"
4287 msgstr "Ralat"
4288
4289-#: ../js/ui/lookingGlass.js:723
4290+#: js/ui/lookingGlass.js:710
4291 msgid "Out of date"
4292 msgstr "Lapuk"
4293
4294-#: ../js/ui/lookingGlass.js:725
4295+#: js/ui/lookingGlass.js:712
4296 msgid "Downloading"
4297 msgstr "Memuat turun"
4298
4299-#: ../js/ui/lookingGlass.js:749
4300-msgid "View Source"
4301-msgstr "Lihat Sumber"
4302-
4303-#: ../js/ui/lookingGlass.js:758
4304-msgid "Web Page"
4305-msgstr "Laman Web"
4306-
4307-#: ../js/ui/messageTray.js:1326
4308-msgid "Open"
4309-msgstr "Buka"
4310-
4311-#: ../js/ui/messageTray.js:1333
4312-msgid "Remove"
4313-msgstr "Buang"
4314-
4315-#: ../js/ui/messageTray.js:1630
4316-msgid "Notifications"
4317-msgstr "Makluman"
4318-
4319-#: ../js/ui/messageTray.js:1637
4320-msgid "Clear Messages"
4321-msgstr ""
4322-
4323-#: ../js/ui/messageTray.js:1656
4324-#| msgid "Notifications"
4325-msgid "Notification Settings"
4326-msgstr "Tetapan Makluman"
4327-
4328-#: ../js/ui/messageTray.js:1709
4329-msgid "Tray Menu"
4330-msgstr ""
4331-
4332-#: ../js/ui/messageTray.js:1926
4333-msgid "No Messages"
4334-msgstr ""
4335+#: js/ui/lookingGlass.js:735
4336+msgid "View Source"
4337+msgstr "Lihat Sumber"
4338
4339-#: ../js/ui/messageTray.js:1968
4340-msgid "Message Tray"
4341-msgstr ""
4342+#: js/ui/lookingGlass.js:744
4343+msgid "Web Page"
4344+msgstr "Laman Sesawang"
4345
4346-#: ../js/ui/messageTray.js:2971
4347+#: js/ui/messageTray.js:1465
4348 msgid "System Information"
4349 msgstr "Maklumat Sistem"
4350
4351-#: ../js/ui/notificationDaemon.js:513
4352-#: ../src/shell-app.c:425
4353-#| msgid "Unknown"
4354-msgctxt "program"
4355-msgid "Unknown"
4356-msgstr "Tidak diketahui"
4357+#: js/ui/mpris.js:179
4358+msgid "Unknown artist"
4359+msgstr "Artis tidak diketahui"
4360
4361-#: ../js/ui/overviewControls.js:482
4362-#: ../js/ui/screenShield.js:151
4363-#, javascript-format
4364-msgid "%d new message"
4365-msgid_plural "%d new messages"
4366-msgstr[0] ""
4367-msgstr[1] ""
4368+#: js/ui/mpris.js:180
4369+msgid "Unknown title"
4370+msgstr "Tajuk tidak diketahui"
4371
4372-#: ../js/ui/overview.js:84
4373+#: js/ui/overview.js:73
4374 msgid "Undo"
4375 msgstr "Buat asal"
4376
4377-#: ../js/ui/overview.js:124
4378+#. Translators: This is the main view to select
4379+#. activities. See also note for "Activities" string.
4380+#: js/ui/overview.js:100
4381 msgid "Overview"
4382-msgstr ""
4383+msgstr "Selayang Pandang"
4384
4385 #. Translators: this is the text displayed
4386 #. in the search entry when no search is
4387 #. active; it should not exceed ~30
4388-#. characters. */
4389-#: ../js/ui/overview.js:246
4390-#| msgid "Type to search..."
4391+#. characters.
4392+#: js/ui/overview.js:230
4393 msgid "Type to search…"
4394-msgstr "Taip untuk cari..."
4395+msgstr "Taip untuk gelintar..."
4396+
4397+#: js/ui/padOsd.js:93
4398+msgid "New shortcut…"
4399+msgstr "Pintasan baharu..."
4400+
4401+#: js/ui/padOsd.js:142
4402+msgid "Application defined"
4403+msgstr "Aplikasi ditakrifkan"
4404+
4405+#: js/ui/padOsd.js:143
4406+msgid "Show on-screen help"
4407+msgstr "Tunjuk bantuan atas-skrin"
4408+
4409+#: js/ui/padOsd.js:144
4410+msgid "Switch monitor"
4411+msgstr "Tukar monitor"
4412
4413-#: ../js/ui/panel.js:515
4414-#| msgid "Quit %s"
4415+#: js/ui/padOsd.js:145
4416+msgid "Assign keystroke"
4417+msgstr "Umpuk ketukan kekunci"
4418+
4419+#: js/ui/padOsd.js:210
4420+msgid "Done"
4421+msgstr "Selesai"
4422+
4423+#: js/ui/padOsd.js:728
4424+msgid "Edit…"
4425+msgstr "Sunting..."
4426+
4427+#: js/ui/padOsd.js:769 js/ui/padOsd.js:874
4428+msgid "None"
4429+msgstr "Tiada"
4430+
4431+#: js/ui/padOsd.js:828
4432+msgid "Press a button to configure"
4433+msgstr "Tekan satu butang untuk dikonfigurkan"
4434+
4435+#: js/ui/padOsd.js:829
4436+msgid "Press Esc to exit"
4437+msgstr "Tekan Esc untuk keluar"
4438+
4439+#: js/ui/padOsd.js:832
4440+msgid "Press any key to exit"
4441+msgstr "Tekan mana-mana kekunci untuk keluar"
4442+
4443+#: js/ui/panel.js:110
4444 msgid "Quit"
4445-msgstr "Berhenti"
4446+msgstr "Keluar"
4447
4448 #. Translators: If there is no suitable word for "Activities"
4449-#. in your language, you can use the word for "Overview". */
4450-#: ../js/ui/panel.js:567
4451+#. in your language, you can use the word for "Overview".
4452+#: js/ui/panel.js:427
4453 msgid "Activities"
4454-msgstr "Aktiviti"
4455+msgstr "Aktiviti-Aktiviti"
4456
4457-#: ../js/ui/panel.js:918
4458-msgid "Top Bar"
4459-msgstr "Bar Atas"
4460+#: js/ui/panel.js:700
4461+msgctxt "System menu in the top bar"
4462+msgid "System"
4463+msgstr "Sistem"
4464
4465-#: ../js/ui/popupMenu.js:269
4466-msgid "toggle-switch-us"
4467-msgstr "toggle-switch-us"
4468+#: js/ui/panel.js:819
4469+msgid "Top Bar"
4470+msgstr "Palang Atas"
4471
4472-#: ../js/ui/runDialog.js:70
4473-#| msgid "Please enter a command:"
4474+#: js/ui/runDialog.js:58
4475 msgid "Enter a Command"
4476-msgstr "Masukkan arahan"
4477+msgstr "Masukkan satu Perintah"
4478
4479-#: ../js/ui/runDialog.js:110
4480-#: ../js/ui/windowMenu.js:120
4481+#: js/ui/runDialog.js:99 js/ui/windowMenu.js:167
4482 msgid "Close"
4483-msgstr ""
4484+msgstr "Tutup"
4485
4486-#: ../js/ui/runDialog.js:277
4487-#| msgid "Restart"
4488+#: js/ui/runDialog.js:262
4489+msgid "Restart is not available on Wayland"
4490+msgstr "Mula Semula tidak tersedia dalam Wayland"
4491+
4492+#: js/ui/runDialog.js:267
4493 msgid "Restarting…"
4494 msgstr "Memulakan semula..."
4495
4496 #. Translators: This is a time format for a date in
4497-#. long format */
4498-#: ../js/ui/screenShield.js:88
4499-#| msgctxt "calendar heading"
4500-#| msgid "%A, %B %d"
4501+#. long format
4502+#: js/ui/screenShield.js:74
4503 msgid "%A, %B %d"
4504 msgstr "%A, %B %d"
4505
4506-#: ../js/ui/screenShield.js:153
4507+#: js/ui/screenShield.js:130
4508+#, javascript-format
4509+msgid "%d new message"
4510+msgid_plural "%d new messages"
4511+msgstr[0] "%d mesej baharu"
4512+
4513+#: js/ui/screenShield.js:132
4514 #, javascript-format
4515-#| msgid "Notifications"
4516 msgid "%d new notification"
4517 msgid_plural "%d new notifications"
4518-msgstr[0] "%d notifikasi baharu"
4519-msgstr[1] "%d notifikasi baharu"
4520+msgstr[0] "%d pemberitahuan baharu"
4521
4522-#: ../js/ui/screenShield.js:472
4523-#: ../js/ui/status/system.js:345
4524+#: js/ui/screenShield.js:447 js/ui/status/system.js:260
4525 msgid "Lock"
4526-msgstr ""
4527+msgstr "Kunci"
4528
4529-#: ../js/ui/screenShield.js:706
4530+#: js/ui/screenShield.js:711
4531 msgid "GNOME needs to lock the screen"
4532-msgstr ""
4533-
4534-#: ../js/ui/screenShield.js:833
4535-#: ../js/ui/screenShield.js:1304
4536+msgstr "GNOME perlu mengunci skrin ini"
4537+
4538+#. We could not become modal, so we can't activate the
4539+#. screenshield. The user is probably very upset at this
4540+#. point, but any application using global grabs is broken
4541+#. Just tell him to stop using this app
4542+#.
4543+#. XXX: another option is to kick the user into the gdm login
4544+#. screen, where we're not affected by grabs
4545+#: js/ui/screenShield.js:825 js/ui/screenShield.js:1299
4546 msgid "Unable to lock"
4547-msgstr ""
4548+msgstr "Gagal dikuncikan"
4549
4550-#: ../js/ui/screenShield.js:834
4551-#: ../js/ui/screenShield.js:1305
4552-#| msgid "No such application"
4553+#: js/ui/screenShield.js:826 js/ui/screenShield.js:1300
4554 msgid "Lock was blocked by an application"
4555 msgstr "Kunci disekat oleh suatu aplikasi"
4556
4557-#: ../js/ui/search.js:594
4558-#| msgid "Searching..."
4559+#: js/ui/search.js:668
4560 msgid "Searching…"
4561-msgstr "Mencari..."
4562+msgstr "Menggelintar..."
4563
4564-#: ../js/ui/search.js:596
4565-#| msgid "No matching results."
4566+#: js/ui/search.js:670
4567 msgid "No results."
4568 msgstr "Tiada padanan."
4569
4570-#: ../js/ui/shellEntry.js:25
4571+#: js/ui/search.js:795
4572+#, javascript-format
4573+msgid "%d more"
4574+msgid_plural "%d more"
4575+msgstr[0] "%d lagi"
4576+
4577+#: js/ui/shellEntry.js:20
4578 msgid "Copy"
4579-msgstr ""
4580+msgstr "Salin"
4581
4582-#: ../js/ui/shellEntry.js:30
4583+#: js/ui/shellEntry.js:25
4584 msgid "Paste"
4585-msgstr ""
4586+msgstr "Tampal"
4587
4588-#: ../js/ui/shellEntry.js:97
4589+#: js/ui/shellEntry.js:91
4590 msgid "Show Text"
4591-msgstr ""
4592+msgstr "Tunjuk Teks"
4593
4594-#: ../js/ui/shellEntry.js:99
4595-#| msgid "Large Text"
4596+#: js/ui/shellEntry.js:93
4597 msgid "Hide Text"
4598 msgstr "Sembunyikan Teks"
4599
4600-#: ../js/ui/shellMountOperation.js:370
4601-#| msgid "Password:"
4602+#: js/ui/shellMountOperation.js:305
4603+msgid "Hidden Volume"
4604+msgstr "Volum Tersembunyi"
4605+
4606+#: js/ui/shellMountOperation.js:308
4607+msgid "Windows System Volume"
4608+msgstr "Volum Sistem Tetingkap"
4609+
4610+#: js/ui/shellMountOperation.js:311
4611+msgid "Uses Keyfiles"
4612+msgstr "Guna Fail Kunci"
4613+
4614+#. Translators: %s is the Disks application
4615+#: js/ui/shellMountOperation.js:317
4616+#, javascript-format
4617+msgid ""
4618+"To unlock a volume that uses keyfiles, use the <i>%s</i> utility instead."
4619+msgstr ""
4620+"Untuk menyahkunci volum yang menggunakan fail kunci, gunakan utiliti <i>%s</"
4621+"i> sebagai ganti."
4622+
4623+#: js/ui/shellMountOperation.js:324
4624+msgid "PIM Number"
4625+msgstr "Nombor PIM"
4626+
4627+#: js/ui/shellMountOperation.js:342
4628+msgid "The PIM must be a number or empty."
4629+msgstr "PIM mestilah nombor atau dikosongkan."
4630+
4631+#: js/ui/shellMountOperation.js:353
4632 msgid "Password"
4633-msgstr "Katalaluan"
4634+msgstr "Kata Laluan"
4635
4636-#: ../js/ui/shellMountOperation.js:391
4637-#| msgid "Password:"
4638+#: js/ui/shellMountOperation.js:383
4639 msgid "Remember Password"
4640-msgstr "Ingatkan Katalaluan"
4641+msgstr "Ingat Kata Laluan"
4642+
4643+#. Translators: %s is the Disks application
4644+#: js/ui/shellMountOperation.js:407
4645+#, javascript-format
4646+msgid "Open %s"
4647+msgstr "Buka %s"
4648+
4649+#. Translators: %s is the Disks application
4650+#: js/ui/shellMountOperation.js:479
4651+#, javascript-format
4652+msgid "Unable to start %s"
4653+msgstr "Gagal memulakan %s"
4654+
4655+#. Translators: %s is the Disks application
4656+#: js/ui/shellMountOperation.js:481
4657+#, javascript-format
4658+msgid "Couldn’t find the %s application"
4659+msgstr "Tidak dapat mencari aplikasi %s"
4660
4661-#: ../js/ui/status/accessibility.js:42
4662-#| msgid "Visibility"
4663+#: js/ui/status/accessibility.js:35
4664 msgid "Accessibility"
4665-msgstr "Ketersampaian"
4666+msgstr "Kebolehcapaian"
4667
4668-#: ../js/ui/status/accessibility.js:57
4669+#: js/ui/status/accessibility.js:50
4670 msgid "Zoom"
4671 msgstr "Zum"
4672
4673-#: ../js/ui/status/accessibility.js:64
4674+#: js/ui/status/accessibility.js:57
4675 msgid "Screen Reader"
4676 msgstr "Pembaca Skrin"
4677
4678-#: ../js/ui/status/accessibility.js:68
4679-#| msgid "Screen Reader"
4680+#: js/ui/status/accessibility.js:61
4681 msgid "Screen Keyboard"
4682 msgstr "Papan Kekunci Skrin"
4683
4684-#: ../js/ui/status/accessibility.js:72
4685+#: js/ui/status/accessibility.js:65
4686 msgid "Visual Alerts"
4687-msgstr "Awasan Visual"
4688+msgstr "Amaran Visual"
4689
4690-#: ../js/ui/status/accessibility.js:75
4691+#: js/ui/status/accessibility.js:68
4692 msgid "Sticky Keys"
4693 msgstr "Kekunci Sticky"
4694
4695-#: ../js/ui/status/accessibility.js:78
4696+#: js/ui/status/accessibility.js:71
4697 msgid "Slow Keys"
4698 msgstr "Kekunci Lembab"
4699
4700 # Kekunci untuk OKU yang tangan bergetar.
4701-#: ../js/ui/status/accessibility.js:81
4702+#: js/ui/status/accessibility.js:74
4703 msgid "Bounce Keys"
4704 msgstr "Kekunci Lantun"
4705
4706-#: ../js/ui/status/accessibility.js:84
4707+#: js/ui/status/accessibility.js:77
4708 msgid "Mouse Keys"
4709 msgstr "Kekunci Tetikus"
4710
4711 # contrast boleh juga diterjemah "beza jelas", tapi "senjang" (/sénjang/) dipilih kerana lebih pendek.
4712-#: ../js/ui/status/accessibility.js:144
4713+#: js/ui/status/accessibility.js:135
4714 msgid "High Contrast"
4715-msgstr "Kontras Tinggi"
4716+msgstr "Beza Jelas Tinggi"
4717
4718-#: ../js/ui/status/accessibility.js:193
4719+#: js/ui/status/accessibility.js:177
4720 msgid "Large Text"
4721 msgstr "Teks Besar"
4722
4723-#: ../js/ui/status/bluetooth.js:49
4724+#: js/ui/status/bluetooth.js:39
4725 msgid "Bluetooth"
4726 msgstr "Bluetooth"
4727
4728-#: ../js/ui/status/bluetooth.js:51
4729-#: ../js/ui/status/network.js:178
4730-#: ../js/ui/status/network.js:360
4731-#: ../js/ui/status/network.js:1281
4732-#: ../js/ui/status/network.js:1392
4733-#: ../js/ui/status/rfkill.js:86
4734-#: ../js/ui/status/rfkill.js:114
4735-msgid "Turn Off"
4736-msgstr ""
4737-
4738-#: ../js/ui/status/bluetooth.js:54
4739+#: js/ui/status/bluetooth.js:48 js/ui/status/network.js:590
4740 msgid "Bluetooth Settings"
4741 msgstr "Tetapan Bluetooth"
4742
4743-#: ../js/ui/status/bluetooth.js:104
4744+#. Translators: this is the number of connected bluetooth devices
4745+#: js/ui/status/bluetooth.js:128
4746 #, javascript-format
4747-#| msgid "Connected (private)"
4748-msgid "%d Connected Device"
4749-msgid_plural "%d Connected Devices"
4750-msgstr[0] "%d Peranti Tersambung"
4751-msgstr[1] "%d Peranti Tersambung"
4752-
4753-#: ../js/ui/status/bluetooth.js:106
4754-#: ../js/ui/status/network.js:1309
4755-#| msgid "Connect"
4756-msgid "Not Connected"
4757-msgstr "Tidak Disambung"
4758-
4759-#: ../js/ui/status/brightness.js:44
4760+msgid "%d Connected"
4761+msgid_plural "%d Connected"
4762+msgstr[0] "%d Bersambung"
4763+
4764+#: js/ui/status/bluetooth.js:130
4765+msgid "Off"
4766+msgstr "Tutup"
4767+
4768+#: js/ui/status/bluetooth.js:132
4769+msgid "On"
4770+msgstr "Buka"
4771+
4772+#: js/ui/status/brightness.js:38
4773 msgid "Brightness"
4774-msgstr ""
4775+msgstr "Kecerahan"
4776+
4777+#: js/ui/status/dwellClick.js:13
4778+msgid "Single Click"
4779+msgstr "Seklik"
4780+
4781+#: js/ui/status/dwellClick.js:18
4782+msgid "Double Click"
4783+msgstr "Dwi-Klik"
4784
4785-#: ../js/ui/status/keyboard.js:547
4786+#: js/ui/status/dwellClick.js:23
4787+msgid "Drag"
4788+msgstr "Seret"
4789+
4790+#: js/ui/status/dwellClick.js:28
4791+msgid "Secondary Click"
4792+msgstr "Klik Sekunder"
4793+
4794+#: js/ui/status/dwellClick.js:37
4795+msgid "Dwell Click"
4796+msgstr "Klik Inap"
4797+
4798+#: js/ui/status/keyboard.js:814
4799+msgid "Keyboard"
4800+msgstr "Papan kekunci"
4801+
4802+#: js/ui/status/keyboard.js:836
4803 msgid "Show Keyboard Layout"
4804 msgstr "Tunjuk Susun Atur Papan Kekunci"
4805
4806-#: ../js/ui/status/location.js:65
4807-#| msgid "Notifications"
4808-msgid "Location"
4809-msgstr "Lokasi"
4810+#: js/ui/status/location.js:64 js/ui/status/location.js:173
4811+msgid "Location Enabled"
4812+msgstr "Lokasi Dibenarkan"
4813
4814-#: ../js/ui/status/location.js:72
4815-#: ../js/ui/status/location.js:177
4816-#| msgid "Disabled"
4817+#: js/ui/status/location.js:65 js/ui/status/location.js:174
4818 msgid "Disable"
4819 msgstr "Lumpuhkan"
4820
4821-#: ../js/ui/status/location.js:73
4822-#| msgid "Power Settings"
4823+#: js/ui/status/location.js:66
4824 msgid "Privacy Settings"
4825-msgstr "Tetapan Privasi"
4826+msgstr "Tetapan Kerahsiaan"
4827
4828-#: ../js/ui/status/location.js:176
4829-msgid "In Use"
4830-msgstr ""
4831+#: js/ui/status/location.js:172
4832+msgid "Location In Use"
4833+msgstr "Lokasi Digunakan"
4834+
4835+#: js/ui/status/location.js:176
4836+msgid "Location Disabled"
4837+msgstr "Lokasi Dilumpuhkan"
4838
4839-#: ../js/ui/status/location.js:180
4840-#| msgid "Enabled"
4841+#: js/ui/status/location.js:177
4842 msgid "Enable"
4843-msgstr "Bolehkan"
4844+msgstr "Benarkan"
4845+
4846+#. Translators: %s is an application name
4847+#: js/ui/status/location.js:356
4848+#, javascript-format
4849+msgid "Give %s access to your location?"
4850+msgstr "Berikan %s capaian ke lokasi anda?"
4851
4852-#: ../js/ui/status/network.js:101
4853+#: js/ui/status/location.js:357
4854+msgid "Location access can be changed at any time from the privacy settings."
4855+msgstr ""
4856+"Capaian lokasi boleh diubah pada bila-bila masa melalui tetapan kerahsiaan."
4857+
4858+#: js/ui/status/network.js:66
4859 msgid "<unknown>"
4860-msgstr "<unknown>"
4861+msgstr "<tidak diketahui>"
4862
4863-#: ../js/ui/status/network.js:457
4864-#: ../js/ui/status/network.js:1307
4865-#: ../js/ui/status/network.js:1511
4866-#| msgid "Offline"
4867-msgid "Off"
4868-msgstr "Tutup"
4869+#. Translators: %s is a network identifier
4870+#: js/ui/status/network.js:420 js/ui/status/network.js:1303
4871+#, javascript-format
4872+msgid "%s Off"
4873+msgstr "%s Mati"
4874
4875-#: ../js/ui/status/network.js:459
4876-#| msgid "Connect"
4877-msgid "Connected"
4878-msgstr "Tersambung"
4879+#. Translators: %s is a network identifier
4880+#: js/ui/status/network.js:423
4881+#, javascript-format
4882+msgid "%s Connected"
4883+msgstr "%s Bersambung"
4884
4885 #. Translators: this is for network devices that are physically present but are not
4886-#. under NetworkManager's control (and thus cannot be used in the menu) */
4887-#: ../js/ui/status/network.js:463
4888-#| msgid "unmanaged"
4889-msgid "Unmanaged"
4890-msgstr "Tidak diuruskan"
4891-
4892-#: ../js/ui/status/network.js:465
4893-#| msgid "disconnecting..."
4894-msgid "Disconnecting"
4895-msgstr "Memutuskan"
4896-
4897-#: ../js/ui/status/network.js:471
4898-#: ../js/ui/status/network.js:1301
4899-#| msgid "Connection"
4900-msgid "Connecting"
4901-msgstr "Menyambung"
4902-
4903-#. Translators: this is for network connections that require some kind of key or password */
4904-#: ../js/ui/status/network.js:474
4905-#| msgid "authentication required"
4906-msgid "Authentication required"
4907-msgstr "Pengesahan diperlukan"
4908+#. under NetworkManager's control (and thus cannot be used in the menu);
4909+#. %s is a network identifier
4910+#: js/ui/status/network.js:428
4911+#, javascript-format
4912+msgid "%s Unmanaged"
4913+msgstr "%s Tidak Diurus"
4914+
4915+#. Translators: %s is a network identifier
4916+#: js/ui/status/network.js:431
4917+#, javascript-format
4918+msgid "%s Disconnecting"
4919+msgstr "%s Terputus"
4920+
4921+#. Translators: %s is a network identifier
4922+#: js/ui/status/network.js:438 js/ui/status/network.js:1295
4923+#, javascript-format
4924+msgid "%s Connecting"
4925+msgstr "%s Menyambung"
4926+
4927+#. Translators: this is for network connections that require some kind of key or password; %s is a network identifier
4928+#: js/ui/status/network.js:441
4929+#, javascript-format
4930+msgid "%s Requires Authentication"
4931+msgstr "%s Memerlukan Pengesahihan"
4932
4933 #. Translators: this is for devices that require some kind of firmware or kernel
4934-#. module, which is missing */
4935-#: ../js/ui/status/network.js:482
4936-#| msgid "firmware missing"
4937-msgid "Firmware missing"
4938-msgstr "Perisian tegar tidak dijumpai"
4939+#. module, which is missing; %s is a network identifier
4940+#: js/ui/status/network.js:449
4941+#, javascript-format
4942+msgid "Firmware Missing For %s"
4943+msgstr "Perisian Tegar Untuk %s Hilang"
4944
4945 #. Translators: this is for a network device that cannot be activated (for example it
4946-#. is disabled by rfkill, or it has no coverage */
4947-#: ../js/ui/status/network.js:486
4948-msgid "Unavailable"
4949-msgstr "Tiada"
4950+#. is disabled by rfkill, or it has no coverage; %s is a network identifier
4951+#: js/ui/status/network.js:453
4952+#, javascript-format
4953+msgid "%s Unavailable"
4954+msgstr "%s Tidak Tersedia"
4955
4956-#: ../js/ui/status/network.js:488
4957-#: ../js/ui/status/network.js:1695
4958-msgid "Connection failed"
4959-msgstr "Gagal menyambung"
4960+#. Translators: %s is a network identifier
4961+#: js/ui/status/network.js:456
4962+#, javascript-format
4963+msgid "%s Connection Failed"
4964+msgstr "%s Sambungan Mengalami Kegagalan"
4965
4966-#: ../js/ui/status/network.js:504
4967-#| msgid "Sound Settings"
4968+#: js/ui/status/network.js:468
4969 msgid "Wired Settings"
4970 msgstr "Tetapan Berwayar"
4971
4972-#: ../js/ui/status/network.js:546
4973-#: ../js/ui/status/network.js:624
4974-#| msgid "Mobile broadband"
4975+#: js/ui/status/network.js:511
4976 msgid "Mobile Broadband Settings"
4977-msgstr "Tetapan Jalurlebar Mudahalih"
4978+msgstr "Tetapan Jalur Lebar Mudah Alih"
4979+
4980+#. Translators: %s is a network identifier
4981+#: js/ui/status/network.js:558 js/ui/status/network.js:1300
4982+#, javascript-format
4983+msgid "%s Hardware Disabled"
4984+msgstr "%s Perkakasan Dilumpuhkan"
4985
4986-#: ../js/ui/status/network.js:588
4987-#: ../js/ui/status/network.js:1305
4988-#| msgid "hardware disabled"
4989-msgid "Hardware Disabled"
4990-msgstr "Perkakas dilumpuhkan"
4991+#. Translators: this is for a network device that cannot be activated
4992+#. because it's disabled by rfkill (airplane mode); %s is a network identifier
4993+#: js/ui/status/network.js:562
4994+#, javascript-format
4995+msgid "%s Disabled"
4996+msgstr "%s Dilumpuhkan"
4997
4998-#: ../js/ui/status/network.js:632
4999-msgid "Use as Internet connection"
5000-msgstr ""
The diff has been truncated for viewing.

Subscribers

People subscribed via source and target branches