Merge ~3v1n0/ubuntu/+source/gnome-shell:ubuntu/master into ~ubuntu-desktop/ubuntu/+source/gnome-shell:ubuntu/master
- Git
- lp:~3v1n0/ubuntu/+source/gnome-shell
- ubuntu/master
- Merge into 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) |
||||||||
Related bugs: |
|
Reviewer | Review Type | Date Requested | Status |
---|---|---|---|
Marco Trevisan (Treviño) | Disapprove | ||
Ubuntu Desktop | Pending | ||
Review via email: mp+371252@code.launchpad.net |
Commit message
Description of the change
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
Unmerged commits
- 0458c28... by Marco Trevisan (Treviño)
-
Update changelog
- 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
1 | diff --git a/NEWS b/NEWS |
2 | index 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] |
51 | diff --git a/config.h.meson b/config.h.meson |
52 | index 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 |
62 | diff --git a/data/gnome-shell-disable-extensions.service b/data/gnome-shell-disable-extensions.service |
63 | index 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 |
83 | diff --git a/data/theme/gnome-shell-sass/_common.scss b/data/theme/gnome-shell-sass/_common.scss |
84 | index 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; } |
138 | diff --git a/debian/changelog b/debian/changelog |
139 | index 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: |
230 | diff --git a/debian/control b/debian/control |
231 | index 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. |
287 | diff --git a/debian/control.in b/debian/control.in |
288 | index 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. |
344 | diff --git a/debian/gbp.conf b/debian/gbp.conf |
345 | index 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 | |
357 | diff --git a/debian/gnome-shell.lintian-overrides b/debian/gnome-shell.lintian-overrides |
358 | index 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-* |
367 | diff --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 |
368 | index 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 | } |
429 | diff --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 |
430 | index 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 | |
464 | diff --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 |
465 | index 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' |
481 | diff --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 |
482 | index 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 |
498 | diff --git a/debian/patches/ubuntu/lock_on_suspend.patch b/debian/patches/ubuntu/lock_on_suspend.patch |
499 | index 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) { |
542 | diff --git a/debian/patches/ubuntu/secure_mode_extension.patch b/debian/patches/ubuntu/secure_mode_extension.patch |
543 | index 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; |
577 | diff --git a/debian/watch b/debian/watch |
578 | index 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 |
586 | diff --git a/js/misc/introspect.js b/js/misc/introspect.js |
587 | index 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) { |
615 | diff --git a/js/misc/util.js b/js/misc/util.js |
616 | index 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 |
643 | diff --git a/js/misc/weather.js b/js/misc/weather.js |
644 | index 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() { |
678 | diff --git a/js/ui/animation.js b/js/ui/animation.js |
679 | index 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 | }; |
744 | diff --git a/js/ui/appDisplay.js b/js/ui/appDisplay.js |
745 | index 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); |
1115 | diff --git a/js/ui/closeDialog.js b/js/ui/closeDialog.js |
1116 | index 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, |
1182 | diff --git a/js/ui/components/keyring.js b/js/ui/components/keyring.js |
1183 | index 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); |
1197 | diff --git a/js/ui/components/polkitAgent.js b/js/ui/components/polkitAgent.js |
1198 | index 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) { |
1406 | diff --git a/js/ui/dnd.js b/js/ui/dnd.js |
1407 | index 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) { |
1431 | diff --git a/js/ui/extensionSystem.js b/js/ui/extensionSystem.js |
1432 | index 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 | |
1468 | diff --git a/js/ui/keyboard.js b/js/ui/keyboard.js |
1469 | index 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 | |
1494 | diff --git a/js/ui/layout.js b/js/ui/layout.js |
1495 | index 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() { |
1506 | diff --git a/js/ui/magnifier.js b/js/ui/magnifier.js |
1507 | index 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); |
1537 | diff --git a/js/ui/messageList.js b/js/ui/messageList.js |
1538 | index 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 }); |
1553 | diff --git a/js/ui/modalDialog.js b/js/ui/modalDialog.js |
1554 | index 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(); |
1566 | diff --git a/js/ui/panel.js b/js/ui/panel.js |
1567 | index 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); |
1597 | diff --git a/js/ui/popupMenu.js b/js/ui/popupMenu.js |
1598 | index 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 | }; |
1633 | diff --git a/js/ui/screenShield.js b/js/ui/screenShield.js |
1634 | index 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 | } |
1718 | diff --git a/js/ui/shellMountOperation.js b/js/ui/shellMountOperation.js |
1719 | index 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) { |
1733 | diff --git a/js/ui/status/power.js b/js/ui/status/power.js |
1734 | index 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 |
1753 | diff --git a/js/ui/switcherPopup.js b/js/ui/switcherPopup.js |
1754 | index 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 | |
1813 | diff --git a/js/ui/windowManager.js b/js/ui/windowManager.js |
1814 | index 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); |
2043 | diff --git a/meson.build b/meson.build |
2044 | index 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 | ) |
2082 | diff --git a/po/ms.po b/po/ms.po |
2083 | index 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 & Install" |
4058 | -msgstr "" |
4059 | +msgstr "Mula Semula & Pasang" |
4060 | |
4061 | -#: ../js/ui/endSessionDialog.js:128 |
4062 | +#: js/ui/endSessionDialog.js:101 |
4063 | msgctxt "button" |
4064 | msgid "Install & Power Off" |
4065 | -msgstr "" |
4066 | +msgstr "Pasang & 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.
This was redone as part of 3.32.3, so closing.