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

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

Merge branch 'debian/master' into ubuntu/master

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

debian/patches: Refresh

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

Update changelog

Fixes LP: #1857037, LP: #1853112

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

This was redone as part of 3.32.3, so closing.

review: Disapprove

Unmerged commits

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

Update changelog

Fixes LP: #1857037, LP: #1853112

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

debian/patches: Refresh

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

Merge branch 'debian/master' into ubuntu/master

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
diff --git a/NEWS b/NEWS
index 535e9af..2476e19 100644
--- a/NEWS
+++ b/NEWS
@@ -1,3 +1,45 @@
13.34.2
2======
3* Fix unredirection after cancelled animations [Florian; #1788]
4* Use cached coordinates for window sorting in overview [Andrew; !763]
5* Include shadow in window screenshots [Robert; !762]
6* Use correct timezones for events [Milan, Florian; !806, #1895]
7* Adjust style of system menu action buttons [monday; !802]
8* Fix windows getting stuck on screen if closed while animating [Florian; !815]
9* Hide stopped spinner in top bar [Joonas; !834]
10* Reuse existing icons when updating the app picker grid [Georges; !841]
11* Fix not-responding dialog size when using geometry scaling [Jonas; !783]
12* Fix battery icon glitch in "100% but charging" case [Philip; !814]
13* Update window titles in app menu [Florian; #1830]
14* Improve modifier-less keyboard navigation of switcher popups [Florian; #1883]
15* Use better OSK layout fallback for unsupported variants [Florian; #1907]
16* Fix creating app folders with no pre-existing folders [Jonas; #1652]
17* Improve DND page switching in app picker [Florian, Jonas; #1693]
18* Show polkit confirmation dialog for users with no password [Joaquim; !829]
19* Fix interacting with applications when magnifier is enabled [Jonas; !754]
20* Tweak styling of notifications/media constrols [Joonas; !855, !865]
21* Fix disable command of gnome-extensions tool [Florian; #1946]
22* Enable clean session shutdown after gnome-shell failure [Benjamin; !858]
23* Also remove scaled keys when texture cache is cleared [Daniel; !567]
24* Don't show overflow indicator in switchers that fit screen [Florian; #1834]
25* Place launched applications into a systemd scope [Benjamin; !863]
26* Fix weather forecasts for automatic location when Weather is not sandboxed
27 [Florian; #1823]
28* Dismiss switcher popups when a system modal dialogs opens [Florian; #1536]
29* Misc. bug fixes and cleanups [Marco, Philip, Florian, cunidev, Jonas, Joonas;
30 !758, !749, !777, !811, #1884, !823, !840, !782, !847, #1836, !852, !851,
31 !788, #1916, !866, !884]
32
33Contributors:
34 Marco Trevisan (Treviño), Benjamin Berg, Philip Chimento, Milan Crha,
35 Jonas Dreßler, Joonas Henriksson, Robert Mader, Daniel García Moreno,
36 Florian Müllner, Georges Basile Stavracas Neto, Joaquim Rocha, Andrew Watson,
37 cunidev, monday
38
39Translators:
40 Stas Solovey [ru], Ricardo Silva Veloso [pt_BR], Yi-Jyun Pan [zh_TW],
41 Umarzuki Bin Mochlis Moktar [ms]
42
13.34.1433.34.1
2======44======
3* Fix "Frequent" view icons disappearing on hover [Jonas D.; #1502]45* Fix "Frequent" view icons disappearing on hover [Jonas D.; #1502]
diff --git a/config.h.meson b/config.h.meson
index 141b224..e5bdf0f 100644
--- a/config.h.meson
+++ b/config.h.meson
@@ -30,3 +30,6 @@
3030
31/* Define if fdwalk is available in libc */31/* Define if fdwalk is available in libc */
32#mesondefine HAVE_FDWALK32#mesondefine HAVE_FDWALK
33
34/* Define if we have gnome-desktop systemd utils */
35#mesondefine HAVE_GNOME_SYSTEMD
diff --git a/data/gnome-shell-disable-extensions.service b/data/gnome-shell-disable-extensions.service
index d55d7ed..de91167 100644
--- a/data/gnome-shell-disable-extensions.service
+++ b/data/gnome-shell-disable-extensions.service
@@ -1,11 +1,12 @@
1[Unit]1[Unit]
2Description=Disable GNOME Shell extensions after failure2Description=Disable GNOME Shell extensions after failure
3# Note that this unit must not conflict with anything, and must
4# be able to run in parallel with the gnome-session-shutdown.target.
3DefaultDependencies=no5DefaultDependencies=no
46
5# Only disable extensions for a short period of time after login.7# We want to disable extensions only if gnome-shell has flagged the extensions
6# This means we err on the side of failing the first login after a broken8# to be a likely cause of trouble.
7# extension was installed.9ConditionPathExists=%t/gnome-shell-disable-extensions
8Requisite=gnome-session-stable.timer
910
10[Service]11[Service]
11Type=simple12Type=simple
diff --git a/data/theme/gnome-shell-sass/_common.scss b/data/theme/gnome-shell-sass/_common.scss
index 9724a8f..0b19b12 100644
--- a/data/theme/gnome-shell-sass/_common.scss
+++ b/data/theme/gnome-shell-sass/_common.scss
@@ -1061,9 +1061,9 @@ StScrollBar {
1061 }1061 }
1062 .calendar-today {1062 .calendar-today {
1063 font-weight: bold;1063 font-weight: bold;
1064 //color: lighten($fg_color,10%);1064 color: lighten($fg_color,5%);
1065 //background-color: darken($bg_color,5%);1065 background-color: darken($bg_color,5%);
1066 border: 1px solid $_bubble_borders_color;1066 // border: 1px solid lighten($_bubble_borders_color,20%);
1067 }1067 }
1068 .calendar-day-with-events {1068 .calendar-day-with-events {
1069 color: lighten($fg_color,10%);1069 color: lighten($fg_color,10%);
@@ -1153,14 +1153,21 @@ StScrollBar {
1153 padding: 10px;1153 padding: 10px;
1154 }1154 }
11551155
1156 .message-close-button {
1157 color: lighten($fg_color, 15%);
1158 &:hover { color: if($variant=='light', lighten($fg_color, 30%), darken($fg_color, 10%)); }
1159 &:active { color: if($variant=='light', lighten($fg_color, 40%), darken($fg_color, 20%)); }
1160 }
1161
1156 .message-media-control {1162 .message-media-control {
1157 padding: 12px;1163 padding: 12px;
1158 color: lighten($fg_color, 15%);1164 color: lighten($fg_color, 15%);
11591165
1160 &:last-child:ltr { padding-right: 18px; }1166 &:last-child:ltr { padding-right: 18px; }
1161 &:last-child:rtl { padding-left: 18px; }1167 &:last-child:rtl { padding-left: 18px; }
1162 &:hover { color: $fg_color; }1168 &:hover { color: if($variant=='light', lighten($fg_color, 30%), darken($fg_color, 10%)); }
1163 &:insensitive { color: darken($fg_color,40%); }1169 &:active { color: if($variant=='light', lighten($fg_color, 40%), darken($fg_color, 20%)); }
1170 &:insensitive { color: if($variant=='light', lighten($fg_color, 50%), darken($fg_color, 40%)); }
1164 }1171 }
11651172
1166 .media-message-cover-icon {1173 .media-message-cover-icon {
@@ -1209,12 +1216,11 @@ StScrollBar {
1209 &:hover, &:focus {1216 &:hover, &:focus {
1210 background-color: $_hover_bg_color;1217 background-color: $_hover_bg_color;
1211 color: $fg_color;1218 color: $fg_color;
1212 border: none;
1213 padding: 14px;
1214 }1219 }
1215 &:active { 1220 &:active {
1216 background-color: $selected_bg_color;1221 background-color: $selected_bg_color;
1217 color: $selected_fg_color;1222 color: $selected_fg_color;
1223 border-color: $selected_borders_color;
1218 }1224 }
12191225
1220 & > StIcon { icon-size: 16px; }1226 & > StIcon { icon-size: 16px; }
diff --git a/debian/changelog b/debian/changelog
index 85ce5c7..9b73c8e 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,87 @@
1gnome-shell (3.34.2-1ubuntu1) UNRELEASED; urgency=medium
2
3 * Merge with debian including new upstream version 3.34.2 (LP: #1857037):
4 - Include shadows in window screenshots
5 - Use correct timezone for events
6 - Fix windows stuck on screen if closed during animation
7 - Key navigation fixes
8 - Place launched applications into a systemd scope to prevent killing
9 applications if the shell crashes in X11 (LP: #1853112)
10 Remaining changes:
11 + Replace gnome-backgrounds dep with ubuntu-wallpapers and Suggests
12 gnome-themes-standard-data, gnome-backgrounds
13 + Add some Recommends:
14 - ubuntu-session (| gnome-session) to have the ubuntu session available
15 - xserver-xorg-legacy
16 - yaru-theme-gnome-shell for the default ubuntu theming
17 + Update debian/gbp.conf with Ubuntu settings
18 + gnome-shell-common.install: Install Ubuntu mode
19 + gnome-shell-common.prerm: Remove deprecated ubuntu theme alternative
20 + ubuntu/desktop_detect.patch:
21 - add caching for desktop detection to avoid querying the current
22 desktop env variable as iterate through the list each time. For the
23 time of the Shell process, we can expect this env variable to stay
24 stable.
25 + ubuntu/smarter_alt_tab.patch:
26 - quick alt-tab (without showing up the switcher) switch only between
27 the last window of the last 2 applications to be focused instead of
28 raising all windows of those apps.
29 + ubuntu/lightdm-user-switching.patch:
30 - Allow user switching when using LightDM.
31 + ubuntu/lock_on_suspend.patch
32 - Respect Ubuntu's lock-on-suspend setting.
33 + ubuntu/gdm.patch
34 - as gdm is system-wide and not session-wide, ensure gdm has an ubuntu
35 styling by default, not impacting the gnome user session though.
36 + ubuntu/background_login.patch
37 - Change default background color as we modified the default GDM color
38 for our ubuntu session. Change it as well here, still applying the
39 background noise loading.
40 + ubuntu/gdm_alternatives.patch
41 - Add support for GDM3 theme alternatives
42 + optional-hot-corner.patch
43 - enable patch proposed by upstream developer already in package (but
44 not in series) to add a settings for optional hot corner activation.
45 + volume-Add-back-sound-feedback-on-scroll.patch
46 - Fix regression causing missing feedback on volume slider scroll
47 + main-show-an-error-message-on-gnome-shell-crash.patch,
48 global-make-possible-to-set-debug-flags-dynamically.patch,
49 main-increase-the-granularity-of-backtraces-in-SHELL_DEBU.patch,
50 main-add-backtrace-crashes-all-and-backtrace-all.patch,
51 sessionMode-add-support-for-debugFlags-parameter.patch:
52 - Improve debug JS tracing for crash reports
53 + st-scroll-view-Handle-the-case-where-scrollbars-are-NULL.patch,
54 st-scroll-view-Remove-scrollbars-references-on-dispose.patch:
55 - Fix crash on theme changes
56 + ubuntu/search-call-XUbuntuCancel-method-on-providers-when-no-dat.patch:
57 - stop searches when requested from UI
58 + magnifier-Show-cursor-when-magnifier-is-enabled-and-scale.patch:
59 - Show monitor scaled cursor when magnifier is enabled
60 * Refresh patches
61
62 -- Marco Trevisan (Treviño) <marco@ubuntu.com> Thu, 19 Dec 2019 18:54:37 +0100
63
64gnome-shell (3.34.2-1) unstable; urgency=medium
65
66 * Team upload
67
68 [ Georges Basile Stavracas Neto ]
69 * Add gnome-menus to Recommends.
70 The files installed by gnome-menus are needed for the functionality of
71 suggesting a name for a new folder to work.
72
73 [ Simon McVittie ]
74 * d/watch: Only watch for stable releases
75 * New upstream release
76 * d/gbp.conf: Use upstream/3.34.x branch
77 * Add build-dependency on libgnome-desktop-3-dev (>= 3.34.2) for new
78 systemd scope functionality
79 * Remove Breaks/Conflicts on packages older than Debian 9 (oldstable)
80 * Remove unused Lintian override
81 * Bump Standards-Version to 4.4.1
82
83 -- Simon McVittie <smcv@debian.org> Mon, 16 Dec 2019 16:55:02 +0000
84
1gnome-shell (3.34.1+git20191024-1ubuntu1) focal; urgency=medium85gnome-shell (3.34.1+git20191024-1ubuntu1) focal; urgency=medium
286
3 * Merge with Debian. Remaining changes:87 * Merge with Debian. Remaining changes:
diff --git a/debian/control b/debian/control
index 5b307b6..1a42154 100644
--- a/debian/control
+++ b/debian/control
@@ -37,6 +37,7 @@ Build-Depends: asciidoc-base,
37 libglib2.0-dev (>= 2.57.2),37 libglib2.0-dev (>= 2.57.2),
38 libgnome-autoar-0-dev,38 libgnome-autoar-0-dev,
39 libgnome-bluetooth-dev (>= 3.9.0) [linux-any],39 libgnome-bluetooth-dev (>= 3.9.0) [linux-any],
40 libgnome-desktop-3-dev (>= 3.34.2),
40 libgnome-menu-3-dev,41 libgnome-menu-3-dev,
41 libgstreamer1.0-dev (>= 0.11.92),42 libgstreamer1.0-dev (>= 0.11.92),
42 libgtk-3-dev (>= 3.21.6),43 libgtk-3-dev (>= 3.21.6),
@@ -60,7 +61,7 @@ Build-Depends: asciidoc-base,
60 xvfb <!nocheck>,61 xvfb <!nocheck>,
61 xwayland <!nocheck>62 xwayland <!nocheck>
62Rules-Requires-Root: no63Rules-Requires-Root: no
63Standards-Version: 4.3.064Standards-Version: 4.4.1
64Homepage: https://wiki.gnome.org/Projects/GnomeShell65Homepage: https://wiki.gnome.org/Projects/GnomeShell
65XS-Debian-Vcs-Browser: https://salsa.debian.org/gnome-team/gnome-shell66XS-Debian-Vcs-Browser: https://salsa.debian.org/gnome-team/gnome-shell
66XS-Debian-Vcs-Git: https://salsa.debian.org/gnome-team/gnome-shell.git67XS-Debian-Vcs-Git: https://salsa.debian.org/gnome-team/gnome-shell.git
@@ -106,6 +107,7 @@ Recommends: bolt (>= 0.3),
106 gdm3 (>= 3.10.0.1-3~),107 gdm3 (>= 3.10.0.1-3~),
107 gkbd-capplet,108 gkbd-capplet,
108 gnome-control-center (>= 1:3.25.2),109 gnome-control-center (>= 1:3.25.2),
110 gnome-menus,
109 gnome-user-docs,111 gnome-user-docs,
110 ibus,112 ibus,
111 iio-sensor-proxy,113 iio-sensor-proxy,
@@ -118,10 +120,7 @@ Suggests: chrome-gnome-shell,
118 gnome-themes-standard-data,120 gnome-themes-standard-data,
119 gnome-backgrounds (>= 3.13.90),121 gnome-backgrounds (>= 3.13.90),
120 gir1.2-telepathylogger-0.2 (>= 0.8.0)122 gir1.2-telepathylogger-0.2 (>= 0.8.0)
121Breaks: gdm3 (<< 3.19.92),123Breaks: gnome-shell-extension-autohidetopbar (<< 20180511-2~),
122 gnome-session (<< 3.19),
123 gnome-shell-extension-appindicator (<< 30),
124 gnome-shell-extension-autohidetopbar (<< 20180511-2~),
125 gnome-shell-extension-caffeine (<< 0~git20171229-3~),124 gnome-shell-extension-caffeine (<< 0~git20171229-3~),
126 gnome-shell-extension-dash-to-panel (<= 18-1),125 gnome-shell-extension-dash-to-panel (<= 18-1),
127 gnome-shell-extension-dashtodock (<= 64-1),126 gnome-shell-extension-dashtodock (<= 64-1),
@@ -135,7 +134,6 @@ Breaks: gdm3 (<< 3.19.92),
135 gnome-shell-pomodoro (<< 0.13.4-2.1~),134 gnome-shell-pomodoro (<< 0.13.4-2.1~),
136 nautilus (<< 1:3.30),135 nautilus (<< 1:3.30),
137 yaru-theme (<< 19.10.1),136 yaru-theme (<< 19.10.1),
138Conflicts: gnome-screensaver (<< 3.6)
139Provides: notification-daemon,137Provides: notification-daemon,
140 polkit-1-auth-agent138 polkit-1-auth-agent
141Description: graphical shell for the GNOME desktop139Description: graphical shell for the GNOME desktop
@@ -150,7 +148,5 @@ Package: gnome-shell-common
150Architecture: all148Architecture: all
151Depends: ${misc:Depends}149Depends: ${misc:Depends}
152Recommends: yaru-theme-gnome-shell150Recommends: yaru-theme-gnome-shell
153Breaks: gnome-calendar (<< 3.21.4),
154 gnome-tweak-tool (<< 3.21.91)
155Description: common files for the GNOME graphical shell151Description: common files for the GNOME graphical shell
156 This package contains translations and data files for the GNOME shell.152 This package contains translations and data files for the GNOME shell.
diff --git a/debian/control.in b/debian/control.in
index aeb4797..46a09e8 100644
--- a/debian/control.in
+++ b/debian/control.in
@@ -33,6 +33,7 @@ Build-Depends: asciidoc-base,
33 libglib2.0-dev (>= 2.57.2),33 libglib2.0-dev (>= 2.57.2),
34 libgnome-autoar-0-dev,34 libgnome-autoar-0-dev,
35 libgnome-bluetooth-dev (>= 3.9.0) [linux-any],35 libgnome-bluetooth-dev (>= 3.9.0) [linux-any],
36 libgnome-desktop-3-dev (>= 3.34.2),
36 libgnome-menu-3-dev,37 libgnome-menu-3-dev,
37 libgstreamer1.0-dev (>= 0.11.92),38 libgstreamer1.0-dev (>= 0.11.92),
38 libgtk-3-dev (>= 3.21.6),39 libgtk-3-dev (>= 3.21.6),
@@ -56,7 +57,7 @@ Build-Depends: asciidoc-base,
56 xvfb <!nocheck>,57 xvfb <!nocheck>,
57 xwayland <!nocheck>58 xwayland <!nocheck>
58Rules-Requires-Root: no59Rules-Requires-Root: no
59Standards-Version: 4.3.060Standards-Version: 4.4.1
60Homepage: https://wiki.gnome.org/Projects/GnomeShell61Homepage: https://wiki.gnome.org/Projects/GnomeShell
61XS-Debian-Vcs-Browser: https://salsa.debian.org/gnome-team/gnome-shell62XS-Debian-Vcs-Browser: https://salsa.debian.org/gnome-team/gnome-shell
62XS-Debian-Vcs-Git: https://salsa.debian.org/gnome-team/gnome-shell.git63XS-Debian-Vcs-Git: https://salsa.debian.org/gnome-team/gnome-shell.git
@@ -102,6 +103,7 @@ Recommends: bolt (>= 0.3),
102 gdm3 (>= 3.10.0.1-3~),103 gdm3 (>= 3.10.0.1-3~),
103 gkbd-capplet,104 gkbd-capplet,
104 gnome-control-center (>= 1:3.25.2),105 gnome-control-center (>= 1:3.25.2),
106 gnome-menus,
105 gnome-user-docs,107 gnome-user-docs,
106 ibus,108 ibus,
107 iio-sensor-proxy,109 iio-sensor-proxy,
@@ -114,10 +116,7 @@ Suggests: chrome-gnome-shell,
114 gnome-themes-standard-data,116 gnome-themes-standard-data,
115 gnome-backgrounds (>= 3.13.90),117 gnome-backgrounds (>= 3.13.90),
116 gir1.2-telepathylogger-0.2 (>= 0.8.0)118 gir1.2-telepathylogger-0.2 (>= 0.8.0)
117Breaks: gdm3 (<< 3.19.92),119Breaks: gnome-shell-extension-autohidetopbar (<< 20180511-2~),
118 gnome-session (<< 3.19),
119 gnome-shell-extension-appindicator (<< 30),
120 gnome-shell-extension-autohidetopbar (<< 20180511-2~),
121 gnome-shell-extension-caffeine (<< 0~git20171229-3~),120 gnome-shell-extension-caffeine (<< 0~git20171229-3~),
122 gnome-shell-extension-dash-to-panel (<= 18-1),121 gnome-shell-extension-dash-to-panel (<= 18-1),
123 gnome-shell-extension-dashtodock (<= 64-1),122 gnome-shell-extension-dashtodock (<= 64-1),
@@ -131,7 +130,6 @@ Breaks: gdm3 (<< 3.19.92),
131 gnome-shell-pomodoro (<< 0.13.4-2.1~),130 gnome-shell-pomodoro (<< 0.13.4-2.1~),
132 nautilus (<< 1:3.30),131 nautilus (<< 1:3.30),
133 yaru-theme (<< 19.10.1),132 yaru-theme (<< 19.10.1),
134Conflicts: gnome-screensaver (<< 3.6)
135Provides: notification-daemon,133Provides: notification-daemon,
136 polkit-1-auth-agent134 polkit-1-auth-agent
137Description: graphical shell for the GNOME desktop135Description: graphical shell for the GNOME desktop
@@ -146,7 +144,5 @@ Package: gnome-shell-common
146Architecture: all144Architecture: all
147Depends: ${misc:Depends}145Depends: ${misc:Depends}
148Recommends: yaru-theme-gnome-shell146Recommends: yaru-theme-gnome-shell
149Breaks: gnome-calendar (<< 3.21.4),
150 gnome-tweak-tool (<< 3.21.91)
151Description: common files for the GNOME graphical shell147Description: common files for the GNOME graphical shell
152 This package contains translations and data files for the GNOME shell.148 This package contains translations and data files for the GNOME shell.
diff --git a/debian/gbp.conf b/debian/gbp.conf
index 117f766..91707dc 100644
--- a/debian/gbp.conf
+++ b/debian/gbp.conf
@@ -1,7 +1,7 @@
1[DEFAULT]1[DEFAULT]
2pristine-tar = True2pristine-tar = True
3debian-branch=ubuntu/master3debian-branch=ubuntu/master
4upstream-branch = upstream/latest4upstream-branch = upstream/3.34.x
5debian-tag=ubuntu/%(version)s5debian-tag=ubuntu/%(version)s
6upstream-vcs-tag = %(version)s6upstream-vcs-tag = %(version)s
77
diff --git a/debian/gnome-shell.lintian-overrides b/debian/gnome-shell.lintian-overrides
index caeb7a5..2283547 100644
--- a/debian/gnome-shell.lintian-overrides
+++ b/debian/gnome-shell.lintian-overrides
@@ -2,5 +2,4 @@
2gnome-shell: binary-or-shlib-defines-rpath usr/bin/gnome-shell /usr/lib/*/mutter-*2gnome-shell: binary-or-shlib-defines-rpath usr/bin/gnome-shell /usr/lib/*/mutter-*
3gnome-shell: binary-or-shlib-defines-rpath usr/lib/gnome-shell/libgnome-shell-menu.so /usr/lib/*/mutter-*3gnome-shell: binary-or-shlib-defines-rpath usr/lib/gnome-shell/libgnome-shell-menu.so /usr/lib/*/mutter-*
4gnome-shell: binary-or-shlib-defines-rpath usr/lib/gnome-shell/libgnome-shell.so /usr/lib/*/mutter-*4gnome-shell: binary-or-shlib-defines-rpath usr/lib/gnome-shell/libgnome-shell.so /usr/lib/*/mutter-*
5gnome-shell: binary-or-shlib-defines-rpath usr/lib/gnome-shell/libgvc.so /usr/share/gnome-shell
6gnome-shell: binary-or-shlib-defines-rpath usr/lib/gnome-shell/libst-1.0.so /usr/lib/*/mutter-*5gnome-shell: binary-or-shlib-defines-rpath usr/lib/gnome-shell/libst-1.0.so /usr/lib/*/mutter-*
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
index 3a83dbe..e877864 100644
--- a/debian/patches/global-make-possible-to-set-debug-flags-dynamically.patch
+++ b/debian/patches/global-make-possible-to-set-debug-flags-dynamically.patch
@@ -128,10 +128,10 @@ index f4440bf..6750586 100644
128 shell_profiler_init ();128 shell_profiler_init ();
129 ecode = meta_run ();129 ecode = meta_run ();
130diff --git a/src/shell-global.c b/src/shell-global.c130diff --git a/src/shell-global.c b/src/shell-global.c
131index 77e167c..aded90a 100644131index d25d2ca..23a2d5d 100644
132--- a/src/shell-global.c132--- a/src/shell-global.c
133+++ b/src/shell-global.c133+++ b/src/shell-global.c
134@@ -57,6 +57,7 @@ struct _ShellGlobal {134@@ -63,6 +63,7 @@ struct _ShellGlobal {
135 Display *xdisplay;135 Display *xdisplay;
136 136
137 char *session_mode;137 char *session_mode;
@@ -139,7 +139,7 @@ index 77e167c..aded90a 100644
139 139
140 XserverRegion input_region;140 XserverRegion input_region;
141 141
142@@ -102,6 +103,7 @@ enum {142@@ -108,6 +109,7 @@ enum {
143 PROP_FOCUS_MANAGER,143 PROP_FOCUS_MANAGER,
144 PROP_FRAME_TIMESTAMPS,144 PROP_FRAME_TIMESTAMPS,
145 PROP_FRAME_FINISH_TIMESTAMP,145 PROP_FRAME_FINISH_TIMESTAMP,
@@ -147,7 +147,7 @@ index 77e167c..aded90a 100644
147 };147 };
148 148
149 /* Signals */149 /* Signals */
150@@ -136,6 +138,9 @@ shell_global_set_property(GObject *object,150@@ -142,6 +144,9 @@ shell_global_set_property(GObject *object,
151 case PROP_FRAME_FINISH_TIMESTAMP:151 case PROP_FRAME_FINISH_TIMESTAMP:
152 global->frame_finish_timestamp = g_value_get_boolean (value);152 global->frame_finish_timestamp = g_value_get_boolean (value);
153 break;153 break;
@@ -157,7 +157,7 @@ index 77e167c..aded90a 100644
157 default:157 default:
158 G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);158 G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
159 break;159 break;
160@@ -210,6 +215,9 @@ shell_global_get_property(GObject *object,160@@ -216,6 +221,9 @@ shell_global_get_property(GObject *object,
161 case PROP_FRAME_FINISH_TIMESTAMP:161 case PROP_FRAME_FINISH_TIMESTAMP:
162 g_value_set_boolean (value, global->frame_finish_timestamp);162 g_value_set_boolean (value, global->frame_finish_timestamp);
163 break;163 break;
@@ -167,7 +167,7 @@ index 77e167c..aded90a 100644
167 default:167 default:
168 G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);168 G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
169 break;169 break;
170@@ -477,6 +485,13 @@ shell_global_class_init (ShellGlobalClass *klass)170@@ -483,6 +491,13 @@ shell_global_class_init (ShellGlobalClass *klass)
171 "Whether at the end of a frame to call glFinish and log paintCompletedTimestamp",171 "Whether at the end of a frame to call glFinish and log paintCompletedTimestamp",
172 FALSE,172 FALSE,
173 G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));173 G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
@@ -181,7 +181,7 @@ index 77e167c..aded90a 100644
181 }181 }
182 182
183 /*183 /*
184@@ -1680,3 +1695,40 @@ _shell_global_locate_pointer (ShellGlobal *global)184@@ -1719,3 +1734,40 @@ _shell_global_locate_pointer (ShellGlobal *global)
185 {185 {
186 g_signal_emit (global, shell_global_signals[LOCATE_POINTER], 0);186 g_signal_emit (global, shell_global_signals[LOCATE_POINTER], 0);
187 }187 }
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
index ec77f26..4e4253f 100644
--- 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
@@ -16,10 +16,10 @@ Forwarded: yes
16 2 files changed, 73 insertions(+), 6 deletions(-)16 2 files changed, 73 insertions(+), 6 deletions(-)
1717
18diff --git a/js/ui/layout.js b/js/ui/layout.js18diff --git a/js/ui/layout.js b/js/ui/layout.js
19index 744a8f1..8f09d15 10064419index 1441bfe..581ac7c 100644
20--- a/js/ui/layout.js20--- a/js/ui/layout.js
21+++ b/js/ui/layout.js21+++ b/js/ui/layout.js
22@@ -956,22 +956,38 @@ var LayoutManager = GObject.registerClass({22@@ -957,22 +957,38 @@ var LayoutManager = GObject.registerClass({
23 return ws.get_work_area_for_monitor(monitorIndex);23 return ws.get_work_area_for_monitor(monitorIndex);
24 }24 }
25 25
@@ -63,7 +63,7 @@ index 744a8f1..8f09d15 100644
63 if (this._startingUp)63 if (this._startingUp)
64 return;64 return;
65diff --git a/js/ui/magnifier.js b/js/ui/magnifier.js65diff --git a/js/ui/magnifier.js b/js/ui/magnifier.js
66index 0ec30ee..5b2a071 10064466index 70b1291..7060296 100644
67--- a/js/ui/magnifier.js67--- a/js/ui/magnifier.js
68+++ b/js/ui/magnifier.js68+++ b/js/ui/magnifier.js
69@@ -45,6 +45,8 @@ var MouseSpriteContent = GObject.registerClass({69@@ -45,6 +45,8 @@ var MouseSpriteContent = GObject.registerClass({
@@ -161,7 +161,7 @@ index 0ec30ee..5b2a071 100644
161 /**161 /**
162 * showSystemCursor:162 * showSystemCursor:
163 * Show the system mouse pointer.163 * Show the system mouse pointer.
164@@ -231,6 +280,8 @@ var Magnifier = class Magnifier {164@@ -235,6 +284,8 @@ var Magnifier = class Magnifier {
165 this.xMouse = xMouse;165 this.xMouse = xMouse;
166 this.yMouse = yMouse;166 this.yMouse = yMouse;
167 167
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
index 52e78e3..358b46d 100644
--- a/debian/patches/main-add-backtrace-crashes-all-and-backtrace-all.patch
+++ b/debian/patches/main-add-backtrace-crashes-all-and-backtrace-all.patch
@@ -33,10 +33,10 @@ index 732a780..9c86d74 100644
33 static int _default_debug_flags = SHELL_DEBUG_BACKTRACE_ABORTS |33 static int _default_debug_flags = SHELL_DEBUG_BACKTRACE_ABORTS |
34 SHELL_DEBUG_BACKTRACE_FPE;34 SHELL_DEBUG_BACKTRACE_FPE;
35diff --git a/src/shell-global.c b/src/shell-global.c35diff --git a/src/shell-global.c b/src/shell-global.c
36index 2446806..f5ccdac 10064436index ec3a76b..e35ae13 100644
37--- a/src/shell-global.c37--- a/src/shell-global.c
38+++ b/src/shell-global.c38+++ b/src/shell-global.c
39@@ -1721,6 +1721,8 @@ shell_global_get_debug_flags (ShellGlobal *global)39@@ -1760,6 +1760,8 @@ shell_global_get_debug_flags (ShellGlobal *global)
40 * - 'backtrace-segfaults'40 * - 'backtrace-segfaults'
41 * - 'backtrace-aborts'41 * - 'backtrace-aborts'
42 * - 'backtrace-math-errors'42 * - 'backtrace-math-errors'
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
index 439c3e3..15984f4 100644
--- 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
@@ -146,10 +146,10 @@ index 6750586..732a780 100644
146 g_signal_connect (shell_global_get (), "notify::debug-flags",146 g_signal_connect (shell_global_get (), "notify::debug-flags",
147 G_CALLBACK (global_notify_debug_flags), NULL);147 G_CALLBACK (global_notify_debug_flags), NULL);
148diff --git a/src/shell-global.c b/src/shell-global.c148diff --git a/src/shell-global.c b/src/shell-global.c
149index aded90a..2446806 100644149index 23a2d5d..ec3a76b 100644
150--- a/src/shell-global.c150--- a/src/shell-global.c
151+++ b/src/shell-global.c151+++ b/src/shell-global.c
152@@ -1713,11 +1713,15 @@ shell_global_get_debug_flags (ShellGlobal *global)152@@ -1752,11 +1752,15 @@ shell_global_get_debug_flags (ShellGlobal *global)
153 /**153 /**
154 * shell_global_set_debug_flags:154 * shell_global_set_debug_flags:
155 * @global: a #ShellGlobal155 * @global: a #ShellGlobal
diff --git a/debian/patches/ubuntu/lock_on_suspend.patch b/debian/patches/ubuntu/lock_on_suspend.patch
index 8672acc..1692f8c 100644
--- a/debian/patches/ubuntu/lock_on_suspend.patch
+++ b/debian/patches/ubuntu/lock_on_suspend.patch
@@ -8,10 +8,10 @@ Bug-Ubuntu: https://bugs.launchpad.net/bugs/1063110
8 1 file changed, 5 insertions(+), 2 deletions(-)8 1 file changed, 5 insertions(+), 2 deletions(-)
99
10diff --git a/js/ui/screenShield.js b/js/ui/screenShield.js10diff --git a/js/ui/screenShield.js b/js/ui/screenShield.js
11index 2e2e95a..90244ad 10064411index f915143..a4ca62d 100644
12--- a/js/ui/screenShield.js12--- a/js/ui/screenShield.js
13+++ b/js/ui/screenShield.js13+++ b/js/ui/screenShield.js
14@@ -20,6 +20,7 @@ const SmartcardManager = imports.misc.smartcardManager;14@@ -22,6 +22,7 @@ const { adjustAnimationTime } = imports.ui.environment;
15 const SCREENSAVER_SCHEMA = 'org.gnome.desktop.screensaver';15 const SCREENSAVER_SCHEMA = 'org.gnome.desktop.screensaver';
16 const LOCK_ENABLED_KEY = 'lock-enabled';16 const LOCK_ENABLED_KEY = 'lock-enabled';
17 const LOCK_DELAY_KEY = 'lock-delay';17 const LOCK_DELAY_KEY = 'lock-delay';
@@ -19,7 +19,7 @@ index 2e2e95a..90244ad 100644
19 19
20 const LOCKDOWN_SCHEMA = 'org.gnome.desktop.lockdown';20 const LOCKDOWN_SCHEMA = 'org.gnome.desktop.lockdown';
21 const DISABLE_LOCK_KEY = 'disable-lock-screen';21 const DISABLE_LOCK_KEY = 'disable-lock-screen';
22@@ -537,6 +538,7 @@ var ScreenShield = class {22@@ -545,6 +546,7 @@ var ScreenShield = class {
23 23
24 this._settings = new Gio.Settings({ schema_id: SCREENSAVER_SCHEMA });24 this._settings = new Gio.Settings({ schema_id: SCREENSAVER_SCHEMA });
25 this._settings.connect(`changed::${LOCK_ENABLED_KEY}`, this._syncInhibitor.bind(this));25 this._settings.connect(`changed::${LOCK_ENABLED_KEY}`, this._syncInhibitor.bind(this));
@@ -27,7 +27,7 @@ index 2e2e95a..90244ad 100644
27 27
28 this._lockSettings = new Gio.Settings({ schema_id: LOCKDOWN_SCHEMA });28 this._lockSettings = new Gio.Settings({ schema_id: LOCKDOWN_SCHEMA });
29 this._lockSettings.connect(`changed::${DISABLE_LOCK_KEY}`, this._syncInhibitor.bind(this));29 this._lockSettings.connect(`changed::${DISABLE_LOCK_KEY}`, this._syncInhibitor.bind(this));
30@@ -701,7 +703,8 @@ var ScreenShield = class {30@@ -709,7 +711,8 @@ var ScreenShield = class {
31 }31 }
32 32
33 _syncInhibitor() {33 _syncInhibitor() {
@@ -37,7 +37,7 @@ index 2e2e95a..90244ad 100644
37 let lockLocked = this._lockSettings.get_boolean(DISABLE_LOCK_KEY);37 let lockLocked = this._lockSettings.get_boolean(DISABLE_LOCK_KEY);
38 let inhibit = (this._loginSession && this._loginSession.Active &&38 let inhibit = (this._loginSession && this._loginSession.Active &&
39 !this._isActive && lockEnabled && !lockLocked);39 !this._isActive && lockEnabled && !lockLocked);
40@@ -721,7 +724,7 @@ var ScreenShield = class {40@@ -729,7 +732,7 @@ var ScreenShield = class {
41 41
42 _prepareForSleep(loginManager, aboutToSuspend) {42 _prepareForSleep(loginManager, aboutToSuspend) {
43 if (aboutToSuspend) {43 if (aboutToSuspend) {
diff --git a/debian/patches/ubuntu/secure_mode_extension.patch b/debian/patches/ubuntu/secure_mode_extension.patch
index d825106..10285e8 100644
--- a/debian/patches/ubuntu/secure_mode_extension.patch
+++ b/debian/patches/ubuntu/secure_mode_extension.patch
@@ -55,18 +55,18 @@ index dc3f1d5..4158a18 100644
55 });55 });
56 56
57diff --git a/js/ui/extensionSystem.js b/js/ui/extensionSystem.js57diff --git a/js/ui/extensionSystem.js b/js/ui/extensionSystem.js
58index 7c36d70..7077f80 10064458index a7a3869..f182b9d 100644
59--- a/js/ui/extensionSystem.js59--- a/js/ui/extensionSystem.js
60+++ b/js/ui/extensionSystem.js60+++ b/js/ui/extensionSystem.js
61@@ -4,6 +4,7 @@61@@ -4,6 +4,7 @@
62 const { Gio, St } = imports.gi;62 const { GLib, Gio, St } = imports.gi;
63 const Signals = imports.signals;63 const Signals = imports.signals;
64 64
65+const Desktop = imports.misc.desktop;65+const Desktop = imports.misc.desktop;
66 const ExtensionUtils = imports.misc.extensionUtils;66 const ExtensionUtils = imports.misc.extensionUtils;
67 const FileUtils = imports.misc.fileUtils;67 const FileUtils = imports.misc.fileUtils;
68 const Main = imports.ui.main;68 const Main = imports.ui.main;
69@@ -303,6 +304,10 @@ var ExtensionManager = class {69@@ -320,6 +321,10 @@ var ExtensionManager = class {
70 this.loadExtension(newExtension);70 this.loadExtension(newExtension);
71 }71 }
72 72
@@ -77,7 +77,7 @@ index 7c36d70..7077f80 100644
77 _callExtensionInit(uuid) {77 _callExtensionInit(uuid) {
78 if (!Main.sessionMode.allowExtensions)78 if (!Main.sessionMode.allowExtensions)
79 return false;79 return false;
80@@ -464,6 +469,10 @@ var ExtensionManager = class {80@@ -481,6 +486,10 @@ var ExtensionManager = class {
81 let type = dir.has_prefix(perUserDir)81 let type = dir.has_prefix(perUserDir)
82 ? ExtensionType.PER_USER82 ? ExtensionType.PER_USER
83 : ExtensionType.SYSTEM;83 : ExtensionType.SYSTEM;
diff --git a/debian/watch b/debian/watch
index 35b7b17..ac38817 100644
--- a/debian/watch
+++ b/debian/watch
@@ -1,3 +1,3 @@
1version=41version=4
2https://download.gnome.org/sources/@PACKAGE@/([\d\.]+)/ \2https://download.gnome.org/sources/@PACKAGE@/([\d\.]+[02468])/ \
3 @PACKAGE@@ANY_VERSION@\.tar\.xz3 @PACKAGE@@ANY_VERSION@\.tar\.xz
diff --git a/js/misc/introspect.js b/js/misc/introspect.js
index f256555..f99ea84 100644
--- a/js/misc/introspect.js
+++ b/js/misc/introspect.js
@@ -40,6 +40,15 @@ var IntrospectService = class {
40 });40 });
4141
42 this._syncRunningApplications();42 this._syncRunningApplications();
43
44 this._whitelistMap = new Map();
45 APP_WHITELIST.forEach(appName => {
46 Gio.DBus.watch_name(Gio.BusType.SESSION,
47 appName,
48 Gio.BusNameWatcherFlags.NONE,
49 (conn, name, owner) => this._whitelistMap.set(name, owner),
50 (conn, name) => this._whitelistMap.delete(name));
51 });
43 }52 }
4453
45 _isStandaloneApp(app) {54 _isStandaloneApp(app) {
@@ -51,7 +60,7 @@ var IntrospectService = class {
51 }60 }
5261
53 _isSenderWhitelisted(sender) {62 _isSenderWhitelisted(sender) {
54 return APP_WHITELIST.includes(sender);63 return [...this._whitelistMap.values()].includes(sender);
55 }64 }
5665
57 _getSandboxedAppId(app) {66 _getSandboxedAppId(app) {
diff --git a/js/misc/util.js b/js/misc/util.js
index db3742e..2110602 100644
--- a/js/misc/util.js
+++ b/js/misc/util.js
@@ -3,7 +3,7 @@
3 formatTime, formatTimeSpan, createTimeLabel, insertSorted,3 formatTime, formatTimeSpan, createTimeLabel, insertSorted,
4 makeCloseButton, ensureActorVisibleInScrollView */4 makeCloseButton, ensureActorVisibleInScrollView */
55
6const { Clutter, Gio, GLib, GObject, Shell, St } = imports.gi;6const { Clutter, Gio, GLib, GObject, Shell, St, GnomeDesktop } = imports.gi;
7const Gettext = imports.gettext;7const Gettext = imports.gettext;
88
9const Main = imports.ui.main;9const Main = imports.ui.main;
@@ -127,6 +127,14 @@ function trySpawn(argv) {
127 throw err;127 throw err;
128 }128 }
129 }129 }
130
131 // Async call, we don't need the reply though
132 try {
133 GnomeDesktop.start_systemd_scope(argv[0], pid, null, null, null, () => {});
134 } catch (err) {
135 // Ignore error; it likely means GnomeDesktop is too old
136 }
137
130 // Dummy child watch; we don't want to double-fork internally138 // Dummy child watch; we don't want to double-fork internally
131 // because then we lose the parent-child relationship, which139 // because then we lose the parent-child relationship, which
132 // can break polkit. See https://bugzilla.redhat.com//show_bug.cgi?id=819275140 // can break polkit. See https://bugzilla.redhat.com//show_bug.cgi?id=819275
diff --git a/js/misc/weather.js b/js/misc/weather.js
index 51dd8ac..16d8aae 100644
--- a/js/misc/weather.js
+++ b/js/misc/weather.js
@@ -32,6 +32,7 @@ var WeatherClient = class {
32 this._gclueStarting = false;32 this._gclueStarting = false;
33 this._gclueLocationChangedId = 0;33 this._gclueLocationChangedId = 0;
3434
35 this._needsAuth = true;
35 this._weatherAuthorized = false;36 this._weatherAuthorized = false;
36 this._permStore = new PermissionStore.PermissionStore((proxy, error) => {37 this._permStore = new PermissionStore.PermissionStore((proxy, error) => {
37 if (error) {38 if (error) {
@@ -142,7 +143,7 @@ var WeatherClient = class {
142 get _useAutoLocation() {143 get _useAutoLocation() {
143 return this._autoLocationRequested &&144 return this._autoLocationRequested &&
144 this._locationSettings.get_boolean('enabled') &&145 this._locationSettings.get_boolean('enabled') &&
145 this._weatherAuthorized;146 (!this._needsAuth || this._weatherAuthorized);
146 }147 }
147148
148 _onWeatherProxyReady(o, res) {149 _onWeatherProxyReady(o, res) {
@@ -175,6 +176,13 @@ var WeatherClient = class {
175176
176 if (hadApp !== haveApp)177 if (hadApp !== haveApp)
177 this.emit('changed');178 this.emit('changed');
179
180 let neededAuth = this._needsAuth;
181 this._needsAuth = this._weatherApp === null ||
182 this._weatherApp.app_info.has_key('X-Flatpak');
183
184 if (neededAuth !== this._needsAuth)
185 this._updateAutoLocation();
178 }186 }
179187
180 _loadInfo() {188 _loadInfo() {
diff --git a/js/ui/animation.js b/js/ui/animation.js
index 18c837e..cae0b5f 100644
--- a/js/ui/animation.js
+++ b/js/ui/animation.js
@@ -3,6 +3,8 @@
33
4const { Clutter, GLib, Gio, St } = imports.gi;4const { Clutter, GLib, Gio, St } = imports.gi;
55
6const Params = imports.misc.params;
7
6var ANIMATED_ICON_UPDATE_TIMEOUT = 16;8var ANIMATED_ICON_UPDATE_TIMEOUT = 16;
7var SPINNER_ANIMATION_TIME = 300;9var SPINNER_ANIMATION_TIME = 300;
8var SPINNER_ANIMATION_DELAY = 1000;10var SPINNER_ANIMATION_DELAY = 1000;
@@ -131,12 +133,22 @@ var AnimatedIcon = class extends Animation {
131};133};
132134
133var Spinner = class extends AnimatedIcon {135var Spinner = class extends AnimatedIcon {
134 constructor(size, animate = false) {136 constructor(size, params) {
137 // Compatibility with older callers
138 if (params === true || params === false)
139 params = { animate: params };
140
141 params = Params.parse(params, {
142 animate: false,
143 hideOnStop: false,
144 });
135 let file = Gio.File.new_for_uri('resource:///org/gnome/shell/theme/process-working.svg');145 let file = Gio.File.new_for_uri('resource:///org/gnome/shell/theme/process-working.svg');
136 super(file, size);146 super(file, size);
137147
138 this.actor.opacity = 0;148 this.actor.opacity = 0;
139 this._animate = animate;149 this._animate = params.animate;
150 this._hideOnStop = params.hideOnStop;
151 this.actor.visible = !this._hideOnStop;
140 }152 }
141153
142 _onDestroy() {154 _onDestroy() {
@@ -146,6 +158,7 @@ var Spinner = class extends AnimatedIcon {
146158
147 play() {159 play() {
148 this.actor.remove_all_transitions();160 this.actor.remove_all_transitions();
161 this.actor.show();
149162
150 if (this._animate) {163 if (this._animate) {
151 super.play();164 super.play();
@@ -169,11 +182,18 @@ var Spinner = class extends AnimatedIcon {
169 opacity: 0,182 opacity: 0,
170 duration: SPINNER_ANIMATION_TIME,183 duration: SPINNER_ANIMATION_TIME,
171 mode: Clutter.AnimationMode.LINEAR,184 mode: Clutter.AnimationMode.LINEAR,
172 onComplete: () => super.stop()185 onComplete: () => {
186 super.stop();
187 if (this._hideOnStop)
188 this.actor.hide();
189 },
173 });190 });
174 } else {191 } else {
175 this.actor.opacity = 0;192 this.actor.opacity = 0;
176 super.stop();193 super.stop();
194
195 if (this._hideOnStop)
196 this.actor.hide();
177 }197 }
178 }198 }
179};199};
diff --git a/js/ui/appDisplay.js b/js/ui/appDisplay.js
index cc946f0..ac9ae3b 100644
--- a/js/ui/appDisplay.js
+++ b/js/ui/appDisplay.js
@@ -40,6 +40,9 @@ var PAGE_SWITCH_TIME = 300;
40var APP_ICON_SCALE_IN_TIME = 500;40var APP_ICON_SCALE_IN_TIME = 500;
41var APP_ICON_SCALE_IN_DELAY = 700;41var APP_ICON_SCALE_IN_DELAY = 700;
4242
43const OVERSHOOT_THRESHOLD = 20;
44const OVERSHOOT_TIMEOUT = 1000;
45
43const SWITCHEROO_BUS_NAME = 'net.hadess.SwitcherooControl';46const SWITCHEROO_BUS_NAME = 'net.hadess.SwitcherooControl';
44const SWITCHEROO_OBJECT_PATH = '/net/hadess/SwitcherooControl';47const SWITCHEROO_OBJECT_PATH = '/net/hadess/SwitcherooControl';
4548
@@ -97,7 +100,10 @@ function _findBestFolderName(apps) {
97 let commonCategories = [];100 let commonCategories = [];
98101
99 appInfos.reduce((categories, appInfo) => {102 appInfos.reduce((categories, appInfo) => {
100 for (let category of appInfo.get_categories().split(';')) {103 const appCategories = appInfo.get_categories();
104 if (!appCategories)
105 return categories;
106 for (let category of appCategories.split(';')) {
101 if (!(category in categoryCounter))107 if (!(category in categoryCounter))
102 categoryCounter[category] = 0;108 categoryCounter[category] = 0;
103109
@@ -173,10 +179,11 @@ class BaseAppView {
173 // Remove old app icons179 // Remove old app icons
174 removedApps.forEach(icon => {180 removedApps.forEach(icon => {
175 let iconIndex = this._allItems.indexOf(icon);181 let iconIndex = this._allItems.indexOf(icon);
182 let id = icon.id;
176183
177 this._allItems.splice(iconIndex, 1);184 this._allItems.splice(iconIndex, 1);
178 this._grid.removeItem(icon);185 icon.actor.destroy();
179 delete this._items[icon.id];186 delete this._items[id];
180 });187 });
181188
182 // Add new app icons189 // Add new app icons
@@ -308,7 +315,12 @@ var AllView = class AllView extends BaseAppView {
308315
309 this._grid.currentPage = 0;316 this._grid.currentPage = 0;
310 this._stack.add_actor(this._grid);317 this._stack.add_actor(this._grid);
311 this._eventBlocker = new St.Widget({ x_expand: true, y_expand: true });318 this._eventBlocker = new St.Widget({
319 x_expand: true,
320 y_expand: true,
321 reactive: true,
322 visible: false,
323 });
312 this._stack.add_actor(this._eventBlocker);324 this._stack.add_actor(this._eventBlocker);
313325
314 box.add_actor(this._stack);326 box.add_actor(this._stack);
@@ -335,12 +347,16 @@ var AllView = class AllView extends BaseAppView {
335 });347 });
336 this._eventBlocker.add_action(this._clickAction);348 this._eventBlocker.add_action(this._clickAction);
337349
350 this._currentPopup = null;
338 this._displayingPopup = false;351 this._displayingPopup = false;
339 this._currentPopupDestroyId = 0;352 this._currentPopupDestroyId = 0;
340353
341 this._availWidth = 0;354 this._availWidth = 0;
342 this._availHeight = 0;355 this._availHeight = 0;
343356
357 this._lastOvershootY = -1;
358 this._lastOvershootTimeoutId = 0;
359
344 Main.overview.connect('hidden', () => this.goToPage(0));360 Main.overview.connect('hidden', () => this.goToPage(0));
345 this._grid.connect('space-opened', () => {361 this._grid.connect('space-opened', () => {
346 let fadeEffect = this._scrollView.get_effect('fade');362 let fadeEffect = this._scrollView.get_effect('fade');
@@ -377,8 +393,6 @@ var AllView = class AllView extends BaseAppView {
377393
378 Main.overview.connect('item-drag-begin', this._onDragBegin.bind(this));394 Main.overview.connect('item-drag-begin', this._onDragBegin.bind(this));
379 Main.overview.connect('item-drag-end', this._onDragEnd.bind(this));395 Main.overview.connect('item-drag-end', this._onDragEnd.bind(this));
380
381 this._nEventBlockerInhibits = 0;
382 }396 }
383397
384 _redisplay() {398 _redisplay() {
@@ -425,7 +439,7 @@ var AllView = class AllView extends BaseAppView {
425 }439 }
426440
427 _loadApps() {441 _loadApps() {
428 let newApps = [];442 let appIcons = [];
429 this._appInfoList = Shell.AppSystem.get_default().get_installed().filter(appInfo => {443 this._appInfoList = Shell.AppSystem.get_default().get_installed().filter(appInfo => {
430 try {444 try {
431 (appInfo.get_id()); // catch invalid file encodings445 (appInfo.get_id()); // catch invalid file encodings
@@ -450,7 +464,7 @@ var AllView = class AllView extends BaseAppView {
450 icon.connect('name-changed', this._itemNameChanged.bind(this));464 icon.connect('name-changed', this._itemNameChanged.bind(this));
451 icon.connect('apps-changed', this._redisplay.bind(this));465 icon.connect('apps-changed', this._redisplay.bind(this));
452 }466 }
453 newApps.push(icon);467 appIcons.push(icon);
454 this.folderIcons.push(icon);468 this.folderIcons.push(icon);
455 });469 });
456470
@@ -463,14 +477,19 @@ var AllView = class AllView extends BaseAppView {
463 let favoritesWritable = global.settings.is_writable('favorite-apps');477 let favoritesWritable = global.settings.is_writable('favorite-apps');
464478
465 apps.forEach(appId => {479 apps.forEach(appId => {
466 let app = appSys.lookup_app(appId);480 let icon = this._items[appId];
481 if (!icon) {
482 let app = appSys.lookup_app(appId);
467483
468 let icon = new AppIcon(app,484 icon = new AppIcon(app, {
469 { isDraggable: favoritesWritable });485 isDraggable: favoritesWritable,
470 newApps.push(icon);486 });
487 }
488
489 appIcons.push(icon);
471 });490 });
472491
473 return newApps;492 return appIcons;
474 }493 }
475494
476 // Overridden from BaseAppView495 // Overridden from BaseAppView
@@ -648,7 +667,7 @@ var AllView = class AllView extends BaseAppView {
648 addFolderPopup(popup) {667 addFolderPopup(popup) {
649 this._stack.add_actor(popup.actor);668 this._stack.add_actor(popup.actor);
650 popup.connect('open-state-changed', (popup, isOpen) => {669 popup.connect('open-state-changed', (popup, isOpen) => {
651 this._eventBlocker.reactive = isOpen;670 this._eventBlocker.visible = isOpen;
652671
653 if (this._currentPopup) {672 if (this._currentPopup) {
654 this._currentPopup.actor.disconnect(this._currentPopupDestroyId);673 this._currentPopup.actor.disconnect(this._currentPopupDestroyId);
@@ -662,7 +681,7 @@ var AllView = class AllView extends BaseAppView {
662 this._currentPopupDestroyId = popup.actor.connect('destroy', () => {681 this._currentPopupDestroyId = popup.actor.connect('destroy', () => {
663 this._currentPopup = null;682 this._currentPopup = null;
664 this._currentPopupDestroyId = 0;683 this._currentPopupDestroyId = 0;
665 this._eventBlocker.reactive = false;684 this._eventBlocker.visible = false;
666 });685 });
667 }686 }
668 this._updateIconOpacities(isOpen);687 this._updateIconOpacities(isOpen);
@@ -730,29 +749,58 @@ var AllView = class AllView extends BaseAppView {
730 this.folderIcons[i].adaptToSize(availWidth, availHeight);749 this.folderIcons[i].adaptToSize(availWidth, availHeight);
731 }750 }
732751
752 _resetOvershoot() {
753 if (this._lastOvershootTimeoutId)
754 GLib.source_remove(this._lastOvershootTimeoutId);
755 this._lastOvershootTimeoutId = 0;
756 this._lastOvershootY = -1;
757 }
758
733 _handleDragOvershoot(dragEvent) {759 _handleDragOvershoot(dragEvent) {
734 let [, gridY] = this.actor.get_transformed_position();760 let [, gridY] = this.actor.get_transformed_position();
735 let [, gridHeight] = this.actor.get_transformed_size();761 let [, gridHeight] = this.actor.get_transformed_size();
736 let gridBottom = gridY + gridHeight;762 let gridBottom = gridY + gridHeight;
737763
738 // Within the grid boundaries, or already animating764 // Already animating
739 if (dragEvent.y > gridY && dragEvent.y < gridBottom ||765 if (this._adjustment.get_transition('value') !== null)
740 this._adjustment.get_transition('value') != null) {
741 return;766 return;
742 }
743767
744 // Moving above the grid768 // Within the grid boundaries
745 let currentY = this._adjustment.value;769 if (dragEvent.y > gridY && dragEvent.y < gridBottom) {
746 if (dragEvent.y <= gridY && currentY > 0) {770 // Check whether we moved out the area of the last switch
747 this.goToPage(this._grid.currentPage - 1);771 if (Math.abs(this._lastOvershootY - dragEvent.y) > OVERSHOOT_THRESHOLD)
772 this._resetOvershoot();
773
748 return;774 return;
749 }775 }
750776
751 // Moving below the grid777 // Still in the area of the previous page switch
778 if (this._lastOvershootY >= 0)
779 return;
780
781 let currentY = this._adjustment.value;
752 let maxY = this._adjustment.upper - this._adjustment.page_size;782 let maxY = this._adjustment.upper - this._adjustment.page_size;
753 if (dragEvent.y >= gridBottom && currentY < maxY) {783
784 if (dragEvent.y <= gridY && currentY > 0)
785 this.goToPage(this._grid.currentPage - 1);
786 else if (dragEvent.y >= gridBottom && currentY < maxY)
754 this.goToPage(this._grid.currentPage + 1);787 this.goToPage(this._grid.currentPage + 1);
755 }788 else
789 return; // don't go beyond first/last page
790
791 this._lastOvershootY = dragEvent.y;
792
793 if (this._lastOvershootTimeoutId > 0)
794 GLib.source_remove(this._lastOvershootTimeoutId);
795
796 this._lastOvershootTimeoutId =
797 GLib.timeout_add(GLib.PRIORITY_DEFAULT, OVERSHOOT_TIMEOUT, () => {
798 this._resetOvershoot();
799 this._handleDragOvershoot(dragEvent);
800 return GLib.SOURCE_REMOVE;
801 });
802 GLib.Source.set_name_by_id(this._lastOvershootTimeoutId,
803 '[gnome-shell] this._lastOvershootTimeoutId');
756 }804 }
757805
758 _onDragBegin() {806 _onDragBegin() {
@@ -760,6 +808,8 @@ var AllView = class AllView extends BaseAppView {
760 dragMotion: this._onDragMotion.bind(this)808 dragMotion: this._onDragMotion.bind(this)
761 };809 };
762 DND.addDragMonitor(this._dragMonitor);810 DND.addDragMonitor(this._dragMonitor);
811
812 this._eventBlocker.visible = false;
763 }813 }
764814
765 _onDragMotion(dragEvent) {815 _onDragMotion(dragEvent) {
@@ -782,6 +832,9 @@ var AllView = class AllView extends BaseAppView {
782 DND.removeDragMonitor(this._dragMonitor);832 DND.removeDragMonitor(this._dragMonitor);
783 this._dragMonitor = null;833 this._dragMonitor = null;
784 }834 }
835
836 this._eventBlocker.visible = this._currentPopup !== null;
837 this._resetOvershoot();
785 }838 }
786839
787 _canAccept(source) {840 _canAccept(source) {
@@ -815,19 +868,6 @@ var AllView = class AllView extends BaseAppView {
815 return true;868 return true;
816 }869 }
817870
818 inhibitEventBlocker() {
819 this._nEventBlockerInhibits++;
820 this._eventBlocker.visible = this._nEventBlockerInhibits == 0;
821 }
822
823 uninhibitEventBlocker() {
824 if (this._nEventBlockerInhibits === 0)
825 throw new Error('Not inhibited');
826
827 this._nEventBlockerInhibits--;
828 this._eventBlocker.visible = this._nEventBlockerInhibits == 0;
829 }
830
831 createFolder(apps) {871 createFolder(apps) {
832 let newFolderId = GLib.uuid_string_random();872 let newFolderId = GLib.uuid_string_random();
833873
@@ -918,8 +958,12 @@ var FrequentView = class FrequentView extends BaseAppView {
918 for (let i = 0; i < mostUsed.length; i++) {958 for (let i = 0; i < mostUsed.length; i++) {
919 if (!mostUsed[i].get_app_info().should_show())959 if (!mostUsed[i].get_app_info().should_show())
920 continue;960 continue;
921 let appIcon = new AppIcon(mostUsed[i],961 let appIcon = this._items[mostUsed[i].get_id()];
922 { isDraggable: favoritesWritable });962 if (!appIcon) {
963 appIcon = new AppIcon(mostUsed[i], {
964 isDraggable: favoritesWritable,
965 });
966 }
923 apps.push(appIcon);967 apps.push(appIcon);
924 }968 }
925969
@@ -1349,7 +1393,10 @@ var FolderView = class FolderView extends BaseAppView {
1349 if (apps.some(appIcon => appIcon.id == appId))1393 if (apps.some(appIcon => appIcon.id == appId))
1350 return;1394 return;
13511395
1352 let icon = new AppIcon(app);1396 let icon = this._items[appId];
1397 if (!icon)
1398 icon = new AppIcon(app);
1399
1353 apps.push(icon);1400 apps.push(icon);
1354 };1401 };
13551402
@@ -1387,15 +1434,15 @@ var FolderView = class FolderView extends BaseAppView {
1387 // Remove the folder if this is the last app icon; otherwise,1434 // Remove the folder if this is the last app icon; otherwise,
1388 // just remove the icon1435 // just remove the icon
1389 if (folderApps.length == 0) {1436 if (folderApps.length == 0) {
1390 let settings = new Gio.Settings({ schema_id: 'org.gnome.desktop.app-folders' });
1391 let folders = settings.get_strv('folder-children');
1392 folders.splice(folders.indexOf(this._id), 1);
1393 settings.set_strv('folder-children', folders);
1394
1395 // Resetting all keys deletes the relocatable schema1437 // Resetting all keys deletes the relocatable schema
1396 let keys = this._folder.settings_schema.list_keys();1438 let keys = this._folder.settings_schema.list_keys();
1397 for (let key of keys)1439 for (let key of keys)
1398 this._folder.reset(key);1440 this._folder.reset(key);
1441
1442 let settings = new Gio.Settings({ schema_id: 'org.gnome.desktop.app-folders' });
1443 let folders = settings.get_strv('folder-children');
1444 folders.splice(folders.indexOf(this._id), 1);
1445 settings.set_strv('folder-children', folders);
1399 } else {1446 } else {
1400 this._folder.set_strv('apps', folderApps);1447 this._folder.set_strv('apps', folderApps);
1401 }1448 }
@@ -1487,8 +1534,6 @@ var FolderIcon = class FolderIcon {
1487 dragMotion: this._onDragMotion.bind(this),1534 dragMotion: this._onDragMotion.bind(this),
1488 };1535 };
1489 DND.addDragMonitor(this._dragMonitor);1536 DND.addDragMonitor(this._dragMonitor);
1490
1491 this._parentView.inhibitEventBlocker();
1492 }1537 }
14931538
1494 _onDragMotion(dragEvent) {1539 _onDragMotion(dragEvent) {
@@ -1504,7 +1549,6 @@ var FolderIcon = class FolderIcon {
15041549
1505 _onDragEnd() {1550 _onDragEnd() {
1506 this.actor.remove_style_pseudo_class('drop');1551 this.actor.remove_style_pseudo_class('drop');
1507 this._parentView.uninhibitEventBlocker();
1508 DND.removeDragMonitor(this._dragMonitor);1552 DND.removeDragMonitor(this._dragMonitor);
1509 }1553 }
15101554
@@ -1994,17 +2038,10 @@ var AppIcon = class AppIcon {
1994 x_fill: true,2038 x_fill: true,
1995 y_fill: true });2039 y_fill: true });
19962040
1997 this._dot = new St.Widget({ style_class: 'app-well-app-running-dot',
1998 layout_manager: new Clutter.BinLayout(),
1999 x_expand: true, y_expand: true,
2000 x_align: Clutter.ActorAlign.CENTER,
2001 y_align: Clutter.ActorAlign.END });
2002
2003 this._iconContainer = new St.Widget({ layout_manager: new Clutter.BinLayout(),2041 this._iconContainer = new St.Widget({ layout_manager: new Clutter.BinLayout(),
2004 x_expand: true, y_expand: true });2042 x_expand: true, y_expand: true });
20052043
2006 this.actor.set_child(this._iconContainer);2044 this.actor.set_child(this._iconContainer);
2007 this._iconContainer.add_child(this._dot);
20082045
2009 this.actor._delegate = this;2046 this.actor._delegate = this;
20102047
@@ -2021,6 +2058,16 @@ var AppIcon = class AppIcon {
2021 this.icon = new IconGrid.BaseIcon(app.get_name(), iconParams);2058 this.icon = new IconGrid.BaseIcon(app.get_name(), iconParams);
2022 this._iconContainer.add_child(this.icon);2059 this._iconContainer.add_child(this.icon);
20232060
2061 this._dot = new St.Widget({
2062 style_class: 'app-well-app-running-dot',
2063 layout_manager: new Clutter.BinLayout(),
2064 x_expand: true,
2065 y_expand: true,
2066 x_align: Clutter.ActorAlign.CENTER,
2067 y_align: Clutter.ActorAlign.END,
2068 });
2069 this._iconContainer.add_child(this._dot);
2070
2024 this.actor.label_actor = this.icon.label;2071 this.actor.label_actor = this.icon.label;
20252072
2026 this.actor.connect('leave-event', this._onLeaveEvent.bind(this));2073 this.actor.connect('leave-event', this._onLeaveEvent.bind(this));
@@ -2051,6 +2098,7 @@ var AppIcon = class AppIcon {
2051 });2098 });
2052 }2099 }
20532100
2101 this._dragMonitor = null;
2054 this._itemDragBeginId = Main.overview.connect(2102 this._itemDragBeginId = Main.overview.connect(
2055 'item-drag-begin', this._onDragBegin.bind(this));2103 'item-drag-begin', this._onDragBegin.bind(this));
2056 this._itemDragEndId = Main.overview.connect(2104 this._itemDragEndId = Main.overview.connect(
@@ -2075,6 +2123,12 @@ var AppIcon = class AppIcon {
2075 }2123 }
2076 if (this._stateChangedId > 0)2124 if (this._stateChangedId > 0)
2077 this.app.disconnect(this._stateChangedId);2125 this.app.disconnect(this._stateChangedId);
2126
2127 if (this._dragMonitor) {
2128 DND.removeDragMonitor(this._dragMonitor);
2129 this._dragMonitor = null;
2130 }
2131
2078 if (this._draggable) {2132 if (this._draggable) {
2079 if (this._dragging)2133 if (this._dragging)
2080 Main.overview.endItemDrag(this);2134 Main.overview.endItemDrag(this);
diff --git a/js/ui/closeDialog.js b/js/ui/closeDialog.js
index 6d0519f..b943e85 100644
--- a/js/ui/closeDialog.js
+++ b/js/ui/closeDialog.js
@@ -1,7 +1,7 @@
1// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-1// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
2/* exported CloseDialog */2/* exported CloseDialog */
33
4const { Clutter, Gio, GLib, GObject, Meta, Shell } = imports.gi;4const { Clutter, Gio, GLib, GObject, Meta, Shell, St } = imports.gi;
55
6const Dialog = imports.ui.dialog;6const Dialog = imports.ui.dialog;
7const Main = imports.ui.main;7const Main = imports.ui.main;
@@ -46,6 +46,18 @@ var CloseDialog = GObject.registerClass({
46 return new Dialog.MessageDialogContent({ icon, title, subtitle });46 return new Dialog.MessageDialogContent({ icon, title, subtitle });
47 }47 }
4848
49 _updateScale() {
50 // Since this is a child of MetaWindowActor (which, for Wayland clients,
51 // applies the geometry scale factor to its children itself, see
52 // meta_window_actor_set_geometry_scale()), make sure we don't apply
53 // the factor twice in the end.
54 if (this._window.get_client_type() !== Meta.WindowClientType.WAYLAND)
55 return;
56
57 let { scaleFactor } = St.ThemeContext.get_for_stage(global.stage);
58 this._dialog.set_scale(1 / scaleFactor, 1 / scaleFactor);
59 }
60
49 _initDialog() {61 _initDialog() {
50 if (this._dialog)62 if (this._dialog)
51 return;63 return;
@@ -64,6 +76,11 @@ var CloseDialog = GObject.registerClass({
64 key: Clutter.Escape });76 key: Clutter.Escape });
6577
66 global.focus_manager.add_group(this._dialog);78 global.focus_manager.add_group(this._dialog);
79
80 let themeContext = St.ThemeContext.get_for_stage(global.stage);
81 themeContext.connect('notify::scale-factor', this._updateScale.bind(this));
82
83 this._updateScale();
67 }84 }
6885
69 _addWindowEffect() {86 _addWindowEffect() {
@@ -145,10 +162,10 @@ var CloseDialog = GObject.registerClass({
145 this._addWindowEffect();162 this._addWindowEffect();
146 this._initDialog();163 this._initDialog();
147164
148 this._dialog.scale_y = 0;165 this._dialog._dialog.scale_y = 0;
149 this._dialog.set_pivot_point(0.5, 0.5);166 this._dialog._dialog.set_pivot_point(0.5, 0.5);
150167
151 this._dialog.ease({168 this._dialog._dialog.ease({
152 scale_y: 1,169 scale_y: 1,
153 mode: Clutter.AnimationMode.LINEAR,170 mode: Clutter.AnimationMode.LINEAR,
154 duration: DIALOG_TRANSITION_TIME,171 duration: DIALOG_TRANSITION_TIME,
@@ -175,7 +192,7 @@ var CloseDialog = GObject.registerClass({
175 this._dialog = null;192 this._dialog = null;
176 this._removeWindowEffect();193 this._removeWindowEffect();
177194
178 dialog.ease({195 dialog._dialog.ease({
179 scale_y: 0,196 scale_y: 0,
180 mode: Clutter.AnimationMode.LINEAR,197 mode: Clutter.AnimationMode.LINEAR,
181 duration: DIALOG_TRANSITION_TIME,198 duration: DIALOG_TRANSITION_TIME,
diff --git a/js/ui/components/keyring.js b/js/ui/components/keyring.js
index 66948b6..24bcc6c 100644
--- a/js/ui/components/keyring.js
+++ b/js/ui/components/keyring.js
@@ -74,7 +74,9 @@ class KeyringDialog extends ModalDialog.ModalDialog {
74 ShellEntry.addContextMenu(this._passwordEntry, { isPassword: true });74 ShellEntry.addContextMenu(this._passwordEntry, { isPassword: true });
75 this._passwordEntry.clutter_text.connect('activate', this._onPasswordActivate.bind(this));75 this._passwordEntry.clutter_text.connect('activate', this._onPasswordActivate.bind(this));
7676
77 this._workSpinner = new Animation.Spinner(WORK_SPINNER_ICON_SIZE, true);77 this._workSpinner = new Animation.Spinner(WORK_SPINNER_ICON_SIZE, {
78 animate: true,
79 });
7880
79 if (rtl) {81 if (rtl) {
80 layout.attach(this._workSpinner.actor, 0, row, 1, 1);82 layout.attach(this._workSpinner.actor, 0, row, 1, 1);
diff --git a/js/ui/components/polkitAgent.js b/js/ui/components/polkitAgent.js
index 1c1b8e6..bd05526 100644
--- a/js/ui/components/polkitAgent.js
+++ b/js/ui/components/polkitAgent.js
@@ -11,6 +11,11 @@ const ModalDialog = imports.ui.modalDialog;
11const ShellEntry = imports.ui.shellEntry;11const ShellEntry = imports.ui.shellEntry;
12const UserWidget = imports.ui.userWidget;12const UserWidget = imports.ui.userWidget;
1313
14const DialogMode = {
15 AUTH: 0,
16 CONFIRM: 1,
17};
18
14var DIALOG_ICON_SIZE = 48;19var DIALOG_ICON_SIZE = 48;
1520
16var WORK_SPINNER_ICON_SIZE = 16;21var WORK_SPINNER_ICON_SIZE = 16;
@@ -51,47 +56,32 @@ var AuthenticationDialog = GObject.registerClass({
51 userName = userNames[0];56 userName = userNames[0];
5257
53 this._user = AccountsService.UserManager.get_default().get_user(userName);58 this._user = AccountsService.UserManager.get_default().get_user(userName);
54 let userRealName = this._user.get_real_name();
55 this._userLoadedId = this._user.connect('notify::is_loaded',
56 this._onUserChanged.bind(this));
57 this._userChangedId = this._user.connect('changed',
58 this._onUserChanged.bind(this));
5959
60 // Special case 'root'60 let userBox = new St.BoxLayout({
61 let userIsRoot = false;61 style_class: 'polkit-dialog-user-layout',
62 if (userName == 'root') {62 vertical: false,
63 userIsRoot = true;63 });
64 userRealName = _("Administrator");64 content.messageBox.add(userBox);
65 }
6665
67 if (userIsRoot) {66 this._userAvatar = new UserWidget.Avatar(this._user, {
68 let userLabel = new St.Label(({ style_class: 'polkit-dialog-user-root-label',67 iconSize: DIALOG_ICON_SIZE,
69 text: userRealName }));68 styleClass: 'polkit-dialog-user-icon',
70 content.messageBox.add(userLabel, { x_fill: false,69 });
71 x_align: St.Align.START });70 this._userAvatar.actor.hide();
72 } else {71 userBox.add_child(this._userAvatar.actor);
73 let userBox = new St.BoxLayout({ style_class: 'polkit-dialog-user-layout',72
74 vertical: false });73 this._userLabel = new St.Label({
75 content.messageBox.add(userBox);74 style_class: userName === 'root'
76 this._userAvatar = new UserWidget.Avatar(this._user,75 ? 'polkit-dialog-user-root-label'
77 { iconSize: DIALOG_ICON_SIZE,76 : 'polkit-dialog-user-label',
78 styleClass: 'polkit-dialog-user-icon' });77 x_expand: true,
79 this._userAvatar.actor.hide();78 y_align: Clutter.ActorAlign.CENTER,
80 userBox.add(this._userAvatar.actor,79 });
81 { x_fill: true,
82 y_fill: false,
83 x_align: St.Align.END,
84 y_align: St.Align.START });
85 let userLabel = new St.Label(({ style_class: 'polkit-dialog-user-label',
86 text: userRealName }));
87 userBox.add(userLabel,
88 { x_fill: true,
89 y_fill: false,
90 x_align: St.Align.END,
91 y_align: St.Align.MIDDLE });
92 }
9380
94 this._onUserChanged();81 if (userName === 'root')
82 this._userLabel.text = _('Administrator');
83
84 userBox.add_child(this._userLabel);
9585
96 this._passwordBox = new St.BoxLayout({ vertical: false, style_class: 'prompt-dialog-password-box' });86 this._passwordBox = new St.BoxLayout({ vertical: false, style_class: 'prompt-dialog-password-box' });
97 content.messageBox.add(this._passwordBox);87 content.messageBox.add(this._passwordBox);
@@ -105,7 +95,9 @@ var AuthenticationDialog = GObject.registerClass({
105 this._passwordBox.add(this._passwordEntry,95 this._passwordBox.add(this._passwordEntry,
106 { expand: true });96 { expand: true });
10797
108 this._workSpinner = new Animation.Spinner(WORK_SPINNER_ICON_SIZE, true);98 this._workSpinner = new Animation.Spinner(WORK_SPINNER_ICON_SIZE, {
99 animate: true,
100 });
109 this._passwordBox.add(this._workSpinner.actor);101 this._passwordBox.add(this._workSpinner.actor);
110102
111 this.setInitialKeyFocus(this._passwordEntry);103 this.setInitialKeyFocus(this._passwordEntry);
@@ -144,8 +136,16 @@ var AuthenticationDialog = GObject.registerClass({
144136
145 this._doneEmitted = false;137 this._doneEmitted = false;
146138
139 this._mode = -1;
140
147 this._identityToAuth = Polkit.UnixUser.new_for_name(userName);141 this._identityToAuth = Polkit.UnixUser.new_for_name(userName);
148 this._cookie = cookie;142 this._cookie = cookie;
143
144 this._userLoadedId = this._user.connect('notify::is-loaded',
145 this._onUserChanged.bind(this));
146 this._userChangedId = this._user.connect('changed',
147 this._onUserChanged.bind(this));
148 this._onUserChanged();
149 }149 }
150150
151 _setWorking(working) {151 _setWorking(working) {
@@ -155,8 +155,9 @@ var AuthenticationDialog = GObject.registerClass({
155 this._workSpinner.stop();155 this._workSpinner.stop();
156 }156 }
157157
158 performAuthentication() {158 _initiateSession() {
159 this._destroySession();159 this._destroySession();
160
160 this._session = new PolkitAgent.Session({ identity: this._identityToAuth,161 this._session = new PolkitAgent.Session({ identity: this._identityToAuth,
161 cookie: this._cookie });162 cookie: this._cookie });
162 this._sessionCompletedId = this._session.connect('completed', this._onSessionCompleted.bind(this));163 this._sessionCompletedId = this._session.connect('completed', this._onSessionCompleted.bind(this));
@@ -216,7 +217,10 @@ var AuthenticationDialog = GObject.registerClass({
216 }217 }
217218
218 _onAuthenticateButtonPressed() {219 _onAuthenticateButtonPressed() {
219 this._onEntryActivate();220 if (this._mode === DialogMode.CONFIRM)
221 this._initiateSession();
222 else
223 this._onEntryActivate();
220 }224 }
221225
222 _onSessionCompleted(session, gainedAuthorization) {226 _onSessionCompleted(session, gainedAuthorization) {
@@ -247,7 +251,7 @@ var AuthenticationDialog = GObject.registerClass({
247 }251 }
248252
249 /* Try and authenticate again */253 /* Try and authenticate again */
250 this.performAuthentication();254 this._initiateSession();
251 }255 }
252 }256 }
253257
@@ -303,10 +307,40 @@ var AuthenticationDialog = GObject.registerClass({
303 }307 }
304308
305 _onUserChanged() {309 _onUserChanged() {
306 if (this._user.is_loaded && this._userAvatar) {310 if (!this._user.is_loaded)
311 return;
312
313 let userName = this._user.get_user_name();
314 let realName = this._user.get_real_name();
315
316 if (userName !== 'root') {
317 this._userLabel.set_text(realName);
318
307 this._userAvatar.update();319 this._userAvatar.update();
308 this._userAvatar.actor.show();320 this._userAvatar.actor.show();
309 }321 }
322
323 if (this._user.get_password_mode() === AccountsService.UserPasswordMode.NONE) {
324 if (this._mode === DialogMode.CONFIRM)
325 return;
326
327 this._mode = DialogMode.CONFIRM;
328 this._destroySession();
329
330 this._okButton.reactive = true;
331
332 /* We normally open the dialog when we get a "request" signal, but
333 * since in this case initiating a session would perform the
334 * authentication, only open the dialog and initiate the session
335 * when the user confirmed. */
336 this._ensureOpen();
337 } else {
338 if (this._mode === DialogMode.AUTH)
339 return;
340
341 this._mode = DialogMode.AUTH;
342 this._initiateSession();
343 }
310 }344 }
311345
312 cancel() {346 cancel() {
@@ -369,19 +403,7 @@ var AuthenticationAgent = class {
369 }403 }
370404
371 this._currentDialog = new AuthenticationDialog(actionId, message, cookie, userNames);405 this._currentDialog = new AuthenticationDialog(actionId, message, cookie, userNames);
372
373 // We actually don't want to open the dialog until we know for
374 // sure that we're going to interact with the user. For
375 // example, if the password for the identity to auth is blank
376 // (which it will be on a live CD) then there will be no
377 // conversation at all... of course, we don't *know* that
378 // until we actually try it.
379 //
380 // See https://bugzilla.gnome.org/show_bug.cgi?id=643062 for more
381 // discussion.
382
383 this._currentDialog.connect('done', this._onDialogDone.bind(this));406 this._currentDialog.connect('done', this._onDialogDone.bind(this));
384 this._currentDialog.performAuthentication();
385 }407 }
386408
387 _onCancel(_nativeAgent) {409 _onCancel(_nativeAgent) {
diff --git a/js/ui/dnd.js b/js/ui/dnd.js
index 786d654..7d3929d 100644
--- a/js/ui/dnd.js
+++ b/js/ui/dnd.js
@@ -573,11 +573,15 @@ var _Draggable = class _Draggable {
573 while (target) {573 while (target) {
574 if (target._delegate && target._delegate.acceptDrop) {574 if (target._delegate && target._delegate.acceptDrop) {
575 let [r_, targX, targY] = target.transform_stage_point(dropX, dropY);575 let [r_, targX, targY] = target.transform_stage_point(dropX, dropY);
576 if (target._delegate.acceptDrop(this.actor._delegate,576 let accepted = false;
577 this._dragActor,577 try {
578 targX,578 accepted = target._delegate.acceptDrop(this.actor._delegate,
579 targY,579 this._dragActor, targX, targY, event.get_time());
580 event.get_time())) {580 } catch (e) {
581 // On error, skip this target
582 logError(e, "Skipping drag target");
583 }
584 if (accepted) {
581 // If it accepted the drop without taking the actor,585 // If it accepted the drop without taking the actor,
582 // handle it ourselves.586 // handle it ourselves.
583 if (this._dragActor && this._dragActor.get_parent() == Main.uiGroup) {587 if (this._dragActor && this._dragActor.get_parent() == Main.uiGroup) {
diff --git a/js/ui/extensionSystem.js b/js/ui/extensionSystem.js
index 7c36d70..a7a3869 100644
--- a/js/ui/extensionSystem.js
+++ b/js/ui/extensionSystem.js
@@ -1,7 +1,7 @@
1// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-1// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
2/* exported init connect disconnect */2/* exported init connect disconnect */
33
4const { Gio, St } = imports.gi;4const { GLib, Gio, St } = imports.gi;
5const Signals = imports.signals;5const Signals = imports.signals;
66
7const ExtensionUtils = imports.misc.extensionUtils;7const ExtensionUtils = imports.misc.extensionUtils;
@@ -28,6 +28,23 @@ var ExtensionManager = class {
28 }28 }
2929
30 init() {30 init() {
31 // The following file should exist for a period of time when extensions
32 // are enabled after start. If it exists, then the systemd unit will
33 // disable extensions should gnome-shell crash.
34 // Should the file already exist from a previous login, then this is OK.
35 let disableFilename = GLib.build_filenamev([GLib.get_user_runtime_dir(), 'gnome-shell-disable-extensions']);
36 let disableFile = Gio.File.new_for_path(disableFilename);
37 try {
38 disableFile.create(Gio.FileCreateFlags.REPLACE_DESTINATION, null);
39 } catch (e) {
40 log(`Failed to create file ${disableFilename}: ${e.message}`);
41 }
42
43 GLib.timeout_add_seconds(GLib.PRIORITY_DEFAULT, 60, () => {
44 FileUtils.deleteGFile(disableFile);
45 return GLib.SOURCE_REMOVE;
46 });
47
31 this._sessionUpdated();48 this._sessionUpdated();
32 }49 }
3350
diff --git a/js/ui/keyboard.js b/js/ui/keyboard.js
index 45eb5ce..3d8e84f 100644
--- a/js/ui/keyboard.js
+++ b/js/ui/keyboard.js
@@ -466,10 +466,17 @@ Signals.addSignalMethods(Key.prototype);
466466
467var KeyboardModel = class {467var KeyboardModel = class {
468 constructor(groupName) {468 constructor(groupName) {
469 try {469 let names = [groupName];
470 this._model = this._loadModel(groupName);470 if (names.includes('+'))
471 } catch (e) {471 names.push(groupName.replace(/\+.*/, ''));
472 this._model = this._loadModel('us');472 names.push('us');
473
474 for (let i = 0; i < names.length; i++) {
475 try {
476 this._model = this._loadModel(names[i]);
477 break;
478 } catch (e) {
479 }
473 }480 }
474 }481 }
475482
diff --git a/js/ui/layout.js b/js/ui/layout.js
index 744a8f1..1441bfe 100644
--- a/js/ui/layout.js
+++ b/js/ui/layout.js
@@ -189,6 +189,7 @@ var LayoutManager = GObject.registerClass({
189 'startup-complete': {},189 'startup-complete': {},
190 'startup-prepared': {},190 'startup-prepared': {},
191 'monitors-changed': {},191 'monitors-changed': {},
192 'system-modal-opened': {},
192 'keyboard-visible-changed': { param_types: [GObject.TYPE_BOOLEAN] } },193 'keyboard-visible-changed': { param_types: [GObject.TYPE_BOOLEAN] } },
193}, class LayoutManager extends GObject.Object {194}, class LayoutManager extends GObject.Object {
194 _init() {195 _init() {
diff --git a/js/ui/magnifier.js b/js/ui/magnifier.js
index 0ec30ee..70b1291 100644
--- a/js/ui/magnifier.js
+++ b/js/ui/magnifier.js
@@ -127,6 +127,8 @@ var Magnifier = class Magnifier {
127 * Show the system mouse pointer.127 * Show the system mouse pointer.
128 */128 */
129 showSystemCursor() {129 showSystemCursor() {
130 if (this._cursorTracker.set_keep_focus_while_hidden)
131 this._cursorTracker.set_keep_focus_while_hidden(false);
130 this._cursorTracker.set_pointer_visible(true);132 this._cursorTracker.set_pointer_visible(true);
131 }133 }
132134
@@ -135,6 +137,8 @@ var Magnifier = class Magnifier {
135 * Hide the system mouse pointer.137 * Hide the system mouse pointer.
136 */138 */
137 hideSystemCursor() {139 hideSystemCursor() {
140 if (this._cursorTracker.set_keep_focus_while_hidden)
141 this._cursorTracker.set_keep_focus_while_hidden(true);
138 this._cursorTracker.set_pointer_visible(false);142 this._cursorTracker.set_pointer_visible(false);
139 }143 }
140144
@@ -169,7 +173,7 @@ var Magnifier = class Magnifier {
169 // Make sure system mouse pointer is shown when all zoom regions are173 // Make sure system mouse pointer is shown when all zoom regions are
170 // invisible.174 // invisible.
171 if (!activate)175 if (!activate)
172 this._cursorTracker.set_pointer_visible(true);176 this.showSystemCursor();
173177
174 // Notify interested parties of this change178 // Notify interested parties of this change
175 this.emit('active-changed', activate);179 this.emit('active-changed', activate);
diff --git a/js/ui/messageList.js b/js/ui/messageList.js
index 4dcdb6d..45f2963 100644
--- a/js/ui/messageList.js
+++ b/js/ui/messageList.js
@@ -333,7 +333,10 @@ var Message = class Message {
333333
334 let closeIcon = new St.Icon({ icon_name: 'window-close-symbolic',334 let closeIcon = new St.Icon({ icon_name: 'window-close-symbolic',
335 icon_size: 16 });335 icon_size: 16 });
336 this._closeButton = new St.Button({ child: closeIcon, opacity: 0 });336 this._closeButton = new St.Button({
337 style_class: 'message-close-button',
338 child: closeIcon, opacity: 0,
339 });
337 titleBox.add_actor(this._closeButton);340 titleBox.add_actor(this._closeButton);
338341
339 this._bodyStack = new St.Widget({ x_expand: true });342 this._bodyStack = new St.Widget({ x_expand: true });
diff --git a/js/ui/modalDialog.js b/js/ui/modalDialog.js
index 1eeb15a..64d0200 100644
--- a/js/ui/modalDialog.js
+++ b/js/ui/modalDialog.js
@@ -216,6 +216,8 @@ var ModalDialog = GObject.registerClass({
216 if (!Main.pushModal(this, params))216 if (!Main.pushModal(this, params))
217 return false;217 return false;
218218
219 Main.layoutManager.emit('system-modal-opened');
220
219 this._hasModal = true;221 this._hasModal = true;
220 if (this._savedKeyFocus) {222 if (this._savedKeyFocus) {
221 this._savedKeyFocus.grab_key_focus();223 this._savedKeyFocus.grab_key_focus();
diff --git a/js/ui/panel.js b/js/ui/panel.js
index 49c0038..77163a7 100644
--- a/js/ui/panel.js
+++ b/js/ui/panel.js
@@ -170,9 +170,13 @@ class AppMenu extends PopupMenu.PopupMenu {
170 let windows = this._app.get_windows();170 let windows = this._app.get_windows();
171 windows.forEach(window => {171 windows.forEach(window => {
172 let title = window.title || this._app.get_name();172 let title = window.title || this._app.get_name();
173 this._windowSection.addAction(title, event => {173 let item = this._windowSection.addAction(title, event => {
174 Main.activateWindow(window, event.get_time());174 Main.activateWindow(window, event.get_time());
175 });175 });
176 let id = window.connect('notify::title', () => {
177 item.label.text = window.title || this._app.get_name();
178 });
179 item.connect('destroy', () => window.disconnect(id));
176 });180 });
177 }181 }
178}182}
@@ -234,7 +238,10 @@ var AppMenuButton = GObject.registerClass({
234 this._overviewHidingId = Main.overview.connect('hiding', this._sync.bind(this));238 this._overviewHidingId = Main.overview.connect('hiding', this._sync.bind(this));
235 this._overviewShowingId = Main.overview.connect('showing', this._sync.bind(this));239 this._overviewShowingId = Main.overview.connect('showing', this._sync.bind(this));
236240
237 this._spinner = new Animation.Spinner(PANEL_ICON_SIZE, true);241 this._spinner = new Animation.Spinner(PANEL_ICON_SIZE, {
242 animate: true,
243 hideOnStop: true,
244 });
238 this._container.add_actor(this._spinner.actor);245 this._container.add_actor(this._spinner.actor);
239246
240 let menu = new AppMenu(this);247 let menu = new AppMenu(this);
diff --git a/js/ui/popupMenu.js b/js/ui/popupMenu.js
index 49ed823..b5eb992 100644
--- a/js/ui/popupMenu.js
+++ b/js/ui/popupMenu.js
@@ -804,6 +804,7 @@ var PopupMenu = class extends PopupMenuBase {
804 this._keyPressId = this.sourceActor.connect('key-press-event',804 this._keyPressId = this.sourceActor.connect('key-press-event',
805 this._onKeyPress.bind(this));805 this._onKeyPress.bind(this));
806806
807 this._systemModalOpenedId = 0;
807 this._openedSubMenu = null;808 this._openedSubMenu = null;
808 }809 }
809810
@@ -878,6 +879,11 @@ var PopupMenu = class extends PopupMenuBase {
878 if (this.isEmpty())879 if (this.isEmpty())
879 return;880 return;
880881
882 if (!this._systemModalOpenedId) {
883 this._systemModalOpenedId =
884 Main.layoutManager.connect('system-modal-opened', () => this.close());
885 }
886
881 this.isOpen = true;887 this.isOpen = true;
882888
883 this._boxPointer.setPosition(this.sourceActor, this._arrowAlignment);889 this._boxPointer.setPosition(this.sourceActor, this._arrowAlignment);
@@ -908,6 +914,11 @@ var PopupMenu = class extends PopupMenuBase {
908 destroy() {914 destroy() {
909 if (this._keyPressId)915 if (this._keyPressId)
910 this.sourceActor.disconnect(this._keyPressId);916 this.sourceActor.disconnect(this._keyPressId);
917
918 if (this._systemModalOpenedId)
919 Main.layoutManager.disconnect(this._systemModalOpenedId);
920 this._systemModalOpenedId = 0;
921
911 super.destroy();922 super.destroy();
912 }923 }
913};924};
diff --git a/js/ui/screenShield.js b/js/ui/screenShield.js
index ba50ef9..f915143 100644
--- a/js/ui/screenShield.js
+++ b/js/ui/screenShield.js
@@ -53,11 +53,17 @@ var Clock = class {
53 this.actor = new St.BoxLayout({ style_class: 'screen-shield-clock',53 this.actor = new St.BoxLayout({ style_class: 'screen-shield-clock',
54 vertical: true });54 vertical: true });
5555
56 this._time = new St.Label({ style_class: 'screen-shield-clock-time' });56 this._time = new St.Label({
57 this._date = new St.Label({ style_class: 'screen-shield-clock-date' });57 style_class: 'screen-shield-clock-time',
58 x_align: Clutter.ActorAlign.CENTER,
59 });
60 this._date = new St.Label({
61 style_class: 'screen-shield-clock-date',
62 x_align: Clutter.ActorAlign.CENTER,
63 });
5864
59 this.actor.add(this._time, { x_align: St.Align.MIDDLE });65 this.actor.add_child(this._time);
60 this.actor.add(this._date, { x_align: St.Align.MIDDLE });66 this.actor.add_child(this._date);
6167
62 this._wallClock = new GnomeDesktop.WallClock({ time_only: true });68 this._wallClock = new GnomeDesktop.WallClock({ time_only: true });
63 this._wallClock.connect('notify::clock', this._updateClock.bind(this));69 this._wallClock.connect('notify::clock', this._updateClock.bind(this));
@@ -93,7 +99,7 @@ var NotificationsBox = class {
93 style_class: 'screen-shield-notifications-container' });99 style_class: 'screen-shield-notifications-container' });
94 this._scrollView.add_actor(this._notificationBox);100 this._scrollView.add_actor(this._notificationBox);
95101
96 this.actor.add(this._scrollView, { x_fill: true, x_align: St.Align.START });102 this.actor.add_child(this._scrollView);
97103
98 this._sources = new Map();104 this._sources = new Map();
99 Main.messageTray.getSources().forEach(source => {105 Main.messageTray.getSources().forEach(source => {
@@ -134,10 +140,10 @@ var NotificationsBox = class {
134140
135 _makeNotificationSource(source, box) {141 _makeNotificationSource(source, box) {
136 let sourceActor = new MessageTray.SourceActor(source, SUMMARY_ICON_SIZE);142 let sourceActor = new MessageTray.SourceActor(source, SUMMARY_ICON_SIZE);
137 box.add(sourceActor, { y_fill: true });143 box.add_child(sourceActor);
138144
139 let textBox = new St.BoxLayout({ vertical: true });145 let textBox = new St.BoxLayout({ vertical: true });
140 box.add(textBox, { y_fill: false, y_align: St.Align.START });146 box.add_child(textBox);
141147
142 let title = new St.Label({ text: source.title,148 let title = new St.Label({ text: source.title,
143 style_class: 'screen-shield-notification-label' });149 style_class: 'screen-shield-notification-label' });
@@ -160,7 +166,7 @@ var NotificationsBox = class {
160 box.add(sourceBin);166 box.add(sourceBin);
161167
162 let textBox = new St.BoxLayout({ vertical: true });168 let textBox = new St.BoxLayout({ vertical: true });
163 box.add(textBox, { y_fill: false, y_align: St.Align.START });169 box.add_child(textBox);
164170
165 let title = new St.Label({ text: source.title,171 let title = new St.Label({ text: source.title,
166 style_class: 'screen-shield-notification-label' });172 style_class: 'screen-shield-notification-label' });
@@ -222,7 +228,7 @@ var NotificationsBox = class {
222 obj.sourceBox = new St.BoxLayout({ style_class: 'screen-shield-notification-source',228 obj.sourceBox = new St.BoxLayout({ style_class: 'screen-shield-notification-source',
223 x_expand: true });229 x_expand: true });
224 this._showSource(source, obj, obj.sourceBox);230 this._showSource(source, obj, obj.sourceBox);
225 this._notificationBox.add(obj.sourceBox, { x_fill: false, x_align: St.Align.START });231 this._notificationBox.add_child(obj.sourceBox);
226232
227 obj.sourceCountChangedId = source.connect('count-updated', source => {233 obj.sourceCountChangedId = source.connect('count-updated', source => {
228 this._countChanged(source, obj);234 this._countChanged(source, obj);
@@ -1133,16 +1139,13 @@ var ScreenShield = class {
1133 vertical: true,1139 vertical: true,
1134 style_class: 'screen-shield-contents-box' });1140 style_class: 'screen-shield-contents-box' });
1135 this._clock = new Clock();1141 this._clock = new Clock();
1136 this._lockScreenContentsBox.add(this._clock.actor, { x_fill: true,1142 this._lockScreenContentsBox.add_child(this._clock.actor);
1137 y_fill: true });
11381143
1139 this._lockScreenContents.add_actor(this._lockScreenContentsBox);1144 this._lockScreenContents.add_actor(this._lockScreenContentsBox);
11401145
1141 this._notificationsBox = new NotificationsBox();1146 this._notificationsBox = new NotificationsBox();
1142 this._wakeUpScreenId = this._notificationsBox.connect('wake-up-screen', this._wakeUpScreen.bind(this));1147 this._wakeUpScreenId = this._notificationsBox.connect('wake-up-screen', this._wakeUpScreen.bind(this));
1143 this._lockScreenContentsBox.add(this._notificationsBox.actor, { x_fill: true,1148 this._lockScreenContentsBox.add_child(this._notificationsBox.actor);
1144 y_fill: true,
1145 expand: true });
11461149
1147 this._hasLockScreen = true;1150 this._hasLockScreen = true;
1148 }1151 }
diff --git a/js/ui/shellMountOperation.js b/js/ui/shellMountOperation.js
index ff5cb23..5c08c36 100644
--- a/js/ui/shellMountOperation.js
+++ b/js/ui/shellMountOperation.js
@@ -359,7 +359,9 @@ var ShellMountPasswordDialog = GObject.registerClass({
359 this._passwordEntry.clutter_text.set_password_char('\u25cf'); // ● U+25CF BLACK CIRCLE359 this._passwordEntry.clutter_text.set_password_char('\u25cf'); // ● U+25CF BLACK CIRCLE
360 ShellEntry.addContextMenu(this._passwordEntry, { isPassword: true });360 ShellEntry.addContextMenu(this._passwordEntry, { isPassword: true });
361 this.setInitialKeyFocus(this._passwordEntry);361 this.setInitialKeyFocus(this._passwordEntry);
362 this._workSpinner = new Animation.Spinner(WORK_SPINNER_ICON_SIZE, true);362 this._workSpinner = new Animation.Spinner(WORK_SPINNER_ICON_SIZE, {
363 animate: true,
364 });
363 this._passwordEntry.secondary_icon = this._workSpinner.actor;365 this._passwordEntry.secondary_icon = this._workSpinner.actor;
364366
365 if (rtl) {367 if (rtl) {
diff --git a/js/ui/status/power.js b/js/ui/status/power.js
index 486a7fd..24edc53 100644
--- a/js/ui/status/power.js
+++ b/js/ui/status/power.js
@@ -111,9 +111,12 @@ var Indicator = class extends PanelMenu.SystemIndicator {
111 let chargingState = this._proxy.State == UPower.DeviceState.CHARGING111 let chargingState = this._proxy.State == UPower.DeviceState.CHARGING
112 ? '-charging' : '';112 ? '-charging' : '';
113 let fillLevel = 10 * Math.floor(this._proxy.Percentage / 10);113 let fillLevel = 10 * Math.floor(this._proxy.Percentage / 10);
114 let icon = this._proxy.State == UPower.DeviceState.FULLY_CHARGED114 let icon;
115 ? 'battery-level-100-charged-symbolic'115 if (this._proxy.State == UPower.DeviceState.FULLY_CHARGED ||
116 : `battery-level-${fillLevel}${chargingState}-symbolic`;116 fillLevel === 100)
117 icon = 'battery-level-100-charged-symbolic';
118 else
119 icon = `battery-level-${fillLevel}${chargingState}-symbolic`;
117120
118 // Make sure we fall back to fallback-icon-name and not GThemedIcon's121 // Make sure we fall back to fallback-icon-name and not GThemedIcon's
119 // default fallbacks122 // default fallbacks
diff --git a/js/ui/switcherPopup.js b/js/ui/switcherPopup.js
index 9bb690c..693a415 100644
--- a/js/ui/switcherPopup.js
+++ b/js/ui/switcherPopup.js
@@ -46,6 +46,9 @@ var SwitcherPopup = GObject.registerClass({
4646
47 Main.uiGroup.add_actor(this);47 Main.uiGroup.add_actor(this);
4848
49 this._systemModalOpenedId =
50 Main.layoutManager.connect('system-modal-opened', () => this.destroy());
51
49 this._haveModal = false;52 this._haveModal = false;
50 this._modifierMask = 0;53 this._modifierMask = 0;
5154
@@ -180,6 +183,14 @@ var SwitcherPopup = GObject.registerClass({
180 if (keysym == Clutter.Escape || keysym == Clutter.Tab)183 if (keysym == Clutter.Escape || keysym == Clutter.Tab)
181 this.fadeAndDestroy();184 this.fadeAndDestroy();
182185
186 // Allow to explicitly select the current item; this is particularly
187 // useful for no-modifier popups
188 if (keysym === Clutter.KEY_space ||
189 keysym === Clutter.KEY_Return ||
190 keysym === Clutter.KEY_KP_Enter ||
191 keysym === Clutter.KEY_ISO_Enter)
192 this._finish(event.get_time());
193
183 return Clutter.EVENT_STOP;194 return Clutter.EVENT_STOP;
184 }195 }
185196
@@ -270,7 +281,7 @@ var SwitcherPopup = GObject.registerClass({
270 GLib.PRIORITY_DEFAULT,281 GLib.PRIORITY_DEFAULT,
271 NO_MODS_TIMEOUT,282 NO_MODS_TIMEOUT,
272 () => {283 () => {
273 this._finish(global.get_current_time());284 this._finish(global.display.get_current_time_roundtrip());
274 this._noModsTimeoutId = 0;285 this._noModsTimeoutId = 0;
275 return GLib.SOURCE_REMOVE;286 return GLib.SOURCE_REMOVE;
276 });287 });
@@ -304,6 +315,8 @@ var SwitcherPopup = GObject.registerClass({
304 _onDestroy() {315 _onDestroy() {
305 this._popModal();316 this._popModal();
306317
318 Main.layoutManager.disconnect(this._systemModalOpenedId);
319
307 if (this._motionTimeoutId != 0)320 if (this._motionTimeoutId != 0)
308 GLib.source_remove(this._motionTimeoutId);321 GLib.source_remove(this._motionTimeoutId);
309 if (this._initialDelayTimeoutId != 0)322 if (this._initialDelayTimeoutId != 0)
@@ -560,10 +573,10 @@ var SwitcherList = GObject.registerClass({
560 let leftPadding = this.get_theme_node().get_padding(St.Side.LEFT);573 let leftPadding = this.get_theme_node().get_padding(St.Side.LEFT);
561 let rightPadding = this.get_theme_node().get_padding(St.Side.RIGHT);574 let rightPadding = this.get_theme_node().get_padding(St.Side.RIGHT);
562575
563 let [, natScrollViewWidth] = this._scrollView.get_preferred_width(height);576 let [minListWidth] = this._list.get_preferred_width(height);
564577
565 let childBox = new Clutter.ActorBox();578 let childBox = new Clutter.ActorBox();
566 let scrollable = natScrollViewWidth > width;579 let scrollable = minListWidth > width;
567580
568 this._scrollView.allocate(contentBox, flags);581 this._scrollView.allocate(contentBox, flags);
569582
diff --git a/js/ui/windowManager.js b/js/ui/windowManager.js
index c9e48e7..7ea2b81 100644
--- a/js/ui/windowManager.js
+++ b/js/ui/windowManager.js
@@ -700,16 +700,17 @@ var WindowManager = class {
700 constructor() {700 constructor() {
701 this._shellwm = global.window_manager;701 this._shellwm = global.window_manager;
702702
703 this._minimizing = [];703 this._minimizing = new Set();
704 this._unminimizing = [];704 this._unminimizing = new Set();
705 this._mapping = [];705 this._mapping = new Set();
706 this._resizing = [];706 this._resizing = new Set();
707 this._destroying = [];707 this._resizePending = new Set();
708 this._destroying = new Set();
708 this._movingWindow = null;709 this._movingWindow = null;
709710
710 this._dimmedWindows = [];711 this._dimmedWindows = [];
711712
712 this._skippedActors = [];713 this._skippedActors = new Set();
713714
714 this._allowedKeybindings = {};715 this._allowedKeybindings = {};
715716
@@ -1257,7 +1258,7 @@ var WindowManager = class {
1257 }1258 }
12581259
1259 skipNextEffect(actor) {1260 skipNextEffect(actor) {
1260 this._skippedActors.push(actor);1261 this._skippedActors.add(actor);
1261 }1262 }
12621263
1263 setCustomKeybindingHandler(name, modes, handler) {1264 setCustomKeybindingHandler(name, modes, handler) {
@@ -1286,7 +1287,7 @@ var WindowManager = class {
1286 }1287 }
12871288
1288 _shouldAnimateActor(actor, types) {1289 _shouldAnimateActor(actor, types) {
1289 if (this._removeEffect(this._skippedActors, actor))1290 if (this._skippedActors.delete(actor))
1290 return false;1291 return false;
12911292
1292 if (!this._shouldAnimate())1293 if (!this._shouldAnimate())
@@ -1299,15 +1300,6 @@ var WindowManager = class {
1299 return types.includes(type);1300 return types.includes(type);
1300 }1301 }
13011302
1302 _removeEffect(list, actor) {
1303 let idx = list.indexOf(actor);
1304 if (idx != -1) {
1305 list.splice(idx, 1);
1306 return true;
1307 }
1308 return false;
1309 }
1310
1311 _minimizeWindow(shellwm, actor) {1303 _minimizeWindow(shellwm, actor) {
1312 let types = [Meta.WindowType.NORMAL,1304 let types = [Meta.WindowType.NORMAL,
1313 Meta.WindowType.MODAL_DIALOG,1305 Meta.WindowType.MODAL_DIALOG,
@@ -1319,7 +1311,7 @@ var WindowManager = class {
13191311
1320 actor.set_scale(1.0, 1.0);1312 actor.set_scale(1.0, 1.0);
13211313
1322 this._minimizing.push(actor);1314 this._minimizing.add(actor);
13231315
1324 if (actor.meta_window.is_monitor_sized()) {1316 if (actor.meta_window.is_monitor_sized()) {
1325 actor.ease({1317 actor.ease({
@@ -1373,7 +1365,7 @@ var WindowManager = class {
1373 }1365 }
13741366
1375 _minimizeWindowDone(shellwm, actor) {1367 _minimizeWindowDone(shellwm, actor) {
1376 if (this._removeEffect(this._minimizing, actor)) {1368 if (this._minimizing.delete(actor)) {
1377 actor.remove_all_transitions();1369 actor.remove_all_transitions();
1378 actor.set_scale(1.0, 1.0);1370 actor.set_scale(1.0, 1.0);
1379 actor.set_opacity(255);1371 actor.set_opacity(255);
@@ -1384,7 +1376,7 @@ var WindowManager = class {
1384 }1376 }
13851377
1386 _minimizeWindowOverwritten(shellwm, actor) {1378 _minimizeWindowOverwritten(shellwm, actor) {
1387 if (this._removeEffect(this._minimizing, actor)) {1379 if (this._minimizing.delete(actor)) {
1388 shellwm.completed_minimize(actor);1380 shellwm.completed_minimize(actor);
1389 }1381 }
1390 }1382 }
@@ -1398,7 +1390,7 @@ var WindowManager = class {
1398 return;1390 return;
1399 }1391 }
14001392
1401 this._unminimizing.push(actor);1393 this._unminimizing.add(actor);
14021394
1403 if (actor.meta_window.is_monitor_sized()) {1395 if (actor.meta_window.is_monitor_sized()) {
1404 actor.opacity = 0;1396 actor.opacity = 0;
@@ -1455,7 +1447,7 @@ var WindowManager = class {
1455 }1447 }
14561448
1457 _unminimizeWindowDone(shellwm, actor) {1449 _unminimizeWindowDone(shellwm, actor) {
1458 if (this._removeEffect(this._unminimizing, actor)) {1450 if (this._unminimizing.delete(actor)) {
1459 actor.remove_all_transitions();1451 actor.remove_all_transitions();
1460 actor.set_scale(1.0, 1.0);1452 actor.set_scale(1.0, 1.0);
1461 actor.set_opacity(255);1453 actor.set_opacity(255);
@@ -1466,7 +1458,7 @@ var WindowManager = class {
1466 }1458 }
14671459
1468 _unminimizeWindowOverwritten(shellwm, actor) {1460 _unminimizeWindowOverwritten(shellwm, actor) {
1469 if (this._removeEffect(this._unminimizing, actor)) {1461 if (this._unminimizing.delete(actor)) {
1470 shellwm.completed_unminimize(actor);1462 shellwm.completed_unminimize(actor);
1471 }1463 }
1472 }1464 }
@@ -1501,6 +1493,7 @@ var WindowManager = class {
1501 this._clearAnimationInfo(actor);1493 this._clearAnimationInfo(actor);
1502 });1494 });
15031495
1496 this._resizePending.add(actor);
1504 actor.__animationInfo = { clone: actorClone,1497 actor.__animationInfo = { clone: actorClone,
1505 oldRect: oldFrameRect,1498 oldRect: oldFrameRect,
1506 destroyId: destroyId };1499 destroyId: destroyId };
@@ -1509,7 +1502,7 @@ var WindowManager = class {
1509 _sizeChangedWindow(shellwm, actor) {1502 _sizeChangedWindow(shellwm, actor) {
1510 if (!actor.__animationInfo)1503 if (!actor.__animationInfo)
1511 return;1504 return;
1512 if (this._resizing.includes(actor))1505 if (this._resizing.has(actor))
1513 return;1506 return;
15141507
1515 let actorClone = actor.__animationInfo.clone;1508 let actorClone = actor.__animationInfo.clone;
@@ -1519,7 +1512,8 @@ var WindowManager = class {
1519 let scaleX = targetRect.width / sourceRect.width;1512 let scaleX = targetRect.width / sourceRect.width;
1520 let scaleY = targetRect.height / sourceRect.height;1513 let scaleY = targetRect.height / sourceRect.height;
15211514
1522 this._resizing.push(actor);1515 this._resizePending.delete(actor);
1516 this._resizing.add(actor);
15231517
1524 // Now scale and fade out the clone1518 // Now scale and fade out the clone
1525 actorClone.ease({1519 actorClone.ease({
@@ -1572,7 +1566,7 @@ var WindowManager = class {
1572 }1566 }
15731567
1574 _sizeChangeWindowDone(shellwm, actor) {1568 _sizeChangeWindowDone(shellwm, actor) {
1575 if (this._removeEffect(this._resizing, actor)) {1569 if (this._resizing.delete(actor)) {
1576 actor.remove_all_transitions();1570 actor.remove_all_transitions();
1577 actor.scale_x = 1.0;1571 actor.scale_x = 1.0;
1578 actor.scale_y = 1.0;1572 actor.scale_y = 1.0;
@@ -1580,10 +1574,13 @@ var WindowManager = class {
1580 actor.translation_y = 0;1574 actor.translation_y = 0;
1581 this._clearAnimationInfo(actor);1575 this._clearAnimationInfo(actor);
1582 }1576 }
1577
1578 if (this._resizePending.delete(actor))
1579 this._shellwm.completed_size_change(actor);
1583 }1580 }
15841581
1585 _sizeChangeWindowOverwritten(shellwm, actor) {1582 _sizeChangeWindowOverwritten(shellwm, actor) {
1586 if (this._removeEffect(this._resizing, actor))1583 if (this._resizing.delete(actor))
1587 this._clearAnimationInfo(actor);1584 this._clearAnimationInfo(actor);
1588 }1585 }
15891586
@@ -1676,7 +1673,7 @@ var WindowManager = class {
1676 actor.scale_y = 0.05;1673 actor.scale_y = 0.05;
1677 actor.opacity = 0;1674 actor.opacity = 0;
1678 actor.show();1675 actor.show();
1679 this._mapping.push(actor);1676 this._mapping.add(actor);
16801677
1681 actor.ease({1678 actor.ease({
1682 opacity: 255,1679 opacity: 255,
@@ -1698,7 +1695,7 @@ var WindowManager = class {
1698 actor.scale_y = 0;1695 actor.scale_y = 0;
1699 actor.opacity = 0;1696 actor.opacity = 0;
1700 actor.show();1697 actor.show();
1701 this._mapping.push(actor);1698 this._mapping.add(actor);
17021699
1703 actor.ease({1700 actor.ease({
1704 opacity: 255,1701 opacity: 255,
@@ -1720,7 +1717,7 @@ var WindowManager = class {
1720 }1717 }
17211718
1722 _mapWindowDone(shellwm, actor) {1719 _mapWindowDone(shellwm, actor) {
1723 if (this._removeEffect(this._mapping, actor)) {1720 if (this._mapping.delete(actor)) {
1724 actor.remove_all_transitions();1721 actor.remove_all_transitions();
1725 actor.opacity = 255;1722 actor.opacity = 255;
1726 actor.set_pivot_point(0, 0);1723 actor.set_pivot_point(0, 0);
@@ -1733,7 +1730,7 @@ var WindowManager = class {
1733 }1730 }
17341731
1735 _mapWindowOverwrite(shellwm, actor) {1732 _mapWindowOverwrite(shellwm, actor) {
1736 if (this._removeEffect(this._mapping, actor)) {1733 if (this._mapping.delete(actor)) {
1737 shellwm.completed_map(actor);1734 shellwm.completed_map(actor);
1738 }1735 }
1739 }1736 }
@@ -1763,7 +1760,7 @@ var WindowManager = class {
1763 switch (actor.meta_window.window_type) {1760 switch (actor.meta_window.window_type) {
1764 case Meta.WindowType.NORMAL:1761 case Meta.WindowType.NORMAL:
1765 actor.set_pivot_point(0.5, 0.5);1762 actor.set_pivot_point(0.5, 0.5);
1766 this._destroying.push(actor);1763 this._destroying.add(actor);
17671764
1768 actor.ease({1765 actor.ease({
1769 opacity: 0,1766 opacity: 0,
@@ -1777,7 +1774,7 @@ var WindowManager = class {
1777 case Meta.WindowType.MODAL_DIALOG:1774 case Meta.WindowType.MODAL_DIALOG:
1778 case Meta.WindowType.DIALOG:1775 case Meta.WindowType.DIALOG:
1779 actor.set_pivot_point(0.5, 0.5);1776 actor.set_pivot_point(0.5, 0.5);
1780 this._destroying.push(actor);1777 this._destroying.add(actor);
17811778
1782 if (window.is_attached_dialog()) {1779 if (window.is_attached_dialog()) {
1783 let parent = window.get_transient_for();1780 let parent = window.get_transient_for();
@@ -1800,7 +1797,7 @@ var WindowManager = class {
1800 }1797 }
18011798
1802 _destroyWindowDone(shellwm, actor) {1799 _destroyWindowDone(shellwm, actor) {
1803 if (this._removeEffect(this._destroying, actor)) {1800 if (this._destroying.delete(actor)) {
1804 let parent = actor.get_meta_window().get_transient_for();1801 let parent = actor.get_meta_window().get_transient_for();
1805 if (parent && actor._parentDestroyId) {1802 if (parent && actor._parentDestroyId) {
1806 parent.disconnect(actor._parentDestroyId);1803 parent.disconnect(actor._parentDestroyId);
diff --git a/meson.build b/meson.build
index 402aff3..c637328 100644
--- a/meson.build
+++ b/meson.build
@@ -1,5 +1,5 @@
1project('gnome-shell', 'c',1project('gnome-shell', 'c',
2 version: '3.34.1',2 version: '3.34.2',
3 meson_version: '>= 0.47.0',3 meson_version: '>= 0.47.0',
4 license: 'GPLv2+'4 license: 'GPLv2+'
5)5)
@@ -31,6 +31,7 @@ polkit_req = '>= 0.100'
31schemas_req = '>= 3.33.1'31schemas_req = '>= 3.33.1'
32startup_req = '>= 0.11'32startup_req = '>= 0.11'
33ibus_req = '>= 1.5.2'33ibus_req = '>= 1.5.2'
34gnome_desktop_req = '>= 3.32'
3435
35bt_req = '>= 3.9.0'36bt_req = '>= 3.9.0'
36gst_req = '>= 0.11.92'37gst_req = '>= 0.11.92'
@@ -97,6 +98,7 @@ startup_dep = dependency('libstartup-notification-1.0', version: startup_req)
97ibus_dep = dependency('ibus-1.0', version: ibus_req)98ibus_dep = dependency('ibus-1.0', version: ibus_req)
98x11_dep = dependency('x11')99x11_dep = dependency('x11')
99schemas_dep = dependency('gsettings-desktop-schemas', version: schemas_req)100schemas_dep = dependency('gsettings-desktop-schemas', version: schemas_req)
101gnome_desktop_dep = dependency('gnome-desktop-3.0', version: gnome_desktop_req)
100102
101bt_dep = dependency('gnome-bluetooth-1.0', version: bt_req, required: false)103bt_dep = dependency('gnome-bluetooth-1.0', version: bt_req, required: false)
102gst_dep = dependency('gstreamer-1.0', version: gst_req, required: false)104gst_dep = dependency('gstreamer-1.0', version: gst_req, required: false)
@@ -177,6 +179,11 @@ cdata.set('HAVE__NL_TIME_FIRST_WEEKDAY',
177 cc.has_header_symbol('langinfo.h', '_NL_TIME_FIRST_WEEKDAY')179 cc.has_header_symbol('langinfo.h', '_NL_TIME_FIRST_WEEKDAY')
178)180)
179181
182# New API added in gnome-desktop3 3.34.2/3.35.2
183cdata.set('HAVE_GNOME_SYSTEMD',
184 cc.has_header('libgnome-desktop/gnome-systemd.h', dependencies: gnome_desktop_dep)
185)
186
180cdata.set('HAVE_FDWALK',187cdata.set('HAVE_FDWALK',
181 cc.has_function('fdwalk')188 cc.has_function('fdwalk')
182)189)
diff --git a/po/ms.po b/po/ms.po
index a328c9f..a072e63 100644
--- a/po/ms.po
+++ b/po/ms.po
@@ -6,1865 +6,2683 @@
6msgid ""6msgid ""
7msgstr ""7msgstr ""
8"Project-Id-Version: gnome-shell master ms\n"8"Project-Id-Version: gnome-shell master ms\n"
9"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-shell&keywords=I18N+L10N&component=general\n"9"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/gnome-shell/issues\n"
10"POT-Creation-Date: 2014-09-12 17:00+0000\n"10"POT-Creation-Date: 2019-10-21 09:47+0000\n"
11"PO-Revision-Date: 2014-09-15 19:21+0730\n"11"PO-Revision-Date: 2019-12-09 18:21+0800\n"
12"Last-Translator: Umarzuki Mochlis Moktar <umar@umarzuki.org>\n"12"Last-Translator: abuyop <abuyop@gmail.com>\n"
13"Language-Team: GNOME Malay Team <gnome-ms@googlegroups.com>\n"13"Language-Team: Pasukan Terjemahan GNOME Malaysia\n"
14"Language: ms\n"14"Language: ms\n"
15"MIME-Version: 1.0\n"15"MIME-Version: 1.0\n"
16"Content-Type: text/plain; charset=UTF-8\n"16"Content-Type: text/plain; charset=UTF-8\n"
17"Content-Transfer-Encoding: 8bit\n"17"Content-Transfer-Encoding: 8bit\n"
18"Plural-Forms: nplurals=2; plural=(n > 1);\n"18"Plural-Forms: nplurals=1; plural=0;\n"
19"X-Generator: Poedit 2.2.4\n"
1920
20#: ../data/50-gnome-shell-system.xml.in.h:121#: data/50-gnome-shell-system.xml:6
21#| msgid "File System"
22msgid "System"22msgid "System"
23msgstr "Sistem"23msgstr "Sistem"
2424
25#: ../data/50-gnome-shell-system.xml.in.h:225#: data/50-gnome-shell-system.xml:9
26msgid "Show the message tray"26msgid "Show the notification list"
27msgstr "Tunjukkan talam mesej"27msgstr "Tunjuk senarai pemberitahuan"
2828
29#: ../data/50-gnome-shell-system.xml.in.h:329#: data/50-gnome-shell-system.xml:12
30msgid "Focus the active notification"30msgid "Focus the active notification"
31msgstr "Fokus pada notifikasi yang aktif"31msgstr "Fokus pada pemberitahuan aktif"
3232
33#: ../data/50-gnome-shell-system.xml.in.h:433#: data/50-gnome-shell-system.xml:15
34msgid "Show the overview"34msgid "Show the overview"
35msgstr "Tunjukkan gambaran keseluruhan"35msgstr "Tunjuk selayang pandang"
3636
37#: ../data/50-gnome-shell-system.xml.in.h:537#: data/50-gnome-shell-system.xml:18
38#| msgid "No such application"
39msgid "Show all applications"38msgid "Show all applications"
40msgstr "Tunjuk semua aplikasi"39msgstr "Tunjuk semua aplikasi"
4140
42#: ../data/50-gnome-shell-system.xml.in.h:641#: data/50-gnome-shell-system.xml:21
43#| msgid "No such application"
44msgid "Open the application menu"42msgid "Open the application menu"
45msgstr "Buka menu aplikasi"43msgstr "Buka menu aplikasi"
4644
47#: ../data/gnome-shell.desktop.in.in.h:145#: data/gnome-shell-extension-prefs.desktop.in.in:4
46#: js/extensionPrefs/main.js:211
47msgid "Shell Extensions"
48msgstr "Sambungan-Sambungan Shell"
49
50#: data/gnome-shell-extension-prefs.desktop.in.in:5
51msgid "Configure GNOME Shell Extensions"
52msgstr "Konfigur Sambungan-Sambungan Shell GNOME"
53
54#: data/org.gnome.Shell.desktop.in.in:4
48msgid "GNOME Shell"55msgid "GNOME Shell"
49msgstr "GNOME Shell"56msgstr "Shell GNOME"
5057
51#: ../data/gnome-shell.desktop.in.in.h:258#: data/org.gnome.Shell.desktop.in.in:5
52#: ../data/gnome-shell-wayland.desktop.in.in.h:2
53msgid "Window management and application launching"59msgid "Window management and application launching"
54msgstr "Pengurusan tetingkap dan pelancaran aplikasi"60msgstr "Pengurusan tetingkap dan pelancaran aplikasi"
5561
56#: ../data/gnome-shell-extension-prefs.desktop.in.in.h:162#: data/org.gnome.shell.gschema.xml.in:6
57msgid "GNOME Shell Extension Preferences"63msgid "Enable internal tools useful for developers and testers from Alt-F2"
58msgstr ""
59
60#: ../data/gnome-shell-extension-prefs.desktop.in.in.h:2
61msgid "Configure GNOME Shell Extensions"
62msgstr ""64msgstr ""
65"Benarkan alatan dalaman yang berguna untuk para pembangun dan penguji "
66"melalui Alt-F2"
6367
64#: ../data/gnome-shell-wayland.desktop.in.in.h:168#: data/org.gnome.shell.gschema.xml.in:9
65msgid "GNOME Shell (wayland compositor)"69msgid ""
70"Allows access to internal debugging and monitoring tools using the Alt-F2 "
71"dialog."
66msgstr ""72msgstr ""
73"Benarkan capaian pada alatan penyahpepijatan dan pemantauan dalaman melalui "
74"dialog Alt-F2."
6775
68#: ../data/org.gnome.shell.gschema.xml.in.in.h:176#: data/org.gnome.shell.gschema.xml.in:16
69msgid "Enable internal tools useful for developers and testers from Alt-F2"
70msgstr "Bolehkan radas dalaman yang berguna untuk para pembangun dan penguji menerusi Alt-F2"
71
72#: ../data/org.gnome.shell.gschema.xml.in.in.h:2
73msgid "Allows access to internal debugging and monitoring tools using the Alt-F2 dialog."
74msgstr "Membolehkan radas menyahpepijat dan memantau dalaman dicapai dengan dialog Alt-F2"
75
76#: ../data/org.gnome.shell.gschema.xml.in.in.h:3
77#| msgid "Uuids of extensions to enable"
78msgid "UUIDs of extensions to enable"77msgid "UUIDs of extensions to enable"
79msgstr "UUID ciri tambahan yang hendak dibenarkan"78msgstr "Sambungan UUID untuk dibenarkan"
8079
81#: ../data/org.gnome.shell.gschema.xml.in.in.h:480#: data/org.gnome.shell.gschema.xml.in:17
82#| msgid ""81msgid ""
83#| "GNOME Shell extensions have a uuid property; this key lists extensions "82"GNOME Shell extensions have a UUID property; this key lists extensions which "
84#| "which should not be loaded. This setting overrides enabled-extensions for "83"should be loaded. Any extension that wants to be loaded needs to be in this "
85#| "extensions that appear in both lists."84"list. You can also manipulate this list with the EnableExtension and "
86msgid "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."85"DisableExtension D-Bus methods on org.gnome.Shell."
87msgstr "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."86msgstr ""
87"Sambungan-sambungan GNOME Shell mempunyai satu sifat UUID; kunci ini "
88"menyenaraikan sambungan-sambungan yang patut dimuatkan. Sebarang sambungan "
89"yang hendak dimuatkan perlu berada di dalam senarai ini. Anda juga boleh "
90"memanipulasi senarai ini dengan kaedah D-Bus EnableExtension dan "
91"DisableExtension yang terdapat di org.gnome.Shell."
92
93#: data/org.gnome.shell.gschema.xml.in:26
94msgid "UUIDs of extensions to force disabling"
95msgstr "UUID sambungan yang memaksa pelumpuhan"
96
97#: data/org.gnome.shell.gschema.xml.in:27
98msgid ""
99"GNOME Shell extensions have a UUID property; this key lists extensions which "
100"should be disabled, even if loaded as part of the current mode. You can also "
101"manipulate this list with the EnableExtension and DisableExtension D-Bus "
102"methods on org.gnome.Shell. This key takes precedence over the “enabled-"
103"extensions” setting."
104msgstr ""
105"Sambungan Shell GNOME mempunyai sifat UUID; kunci ini menyenaraikan "
106"sambungan-sambungan yang patut dilumpuhkan, walaupun jika ia telah dimuatkan "
107"sebagai sebahagian daripada mod semasa. Anda boleh memanipulasikan senarai "
108"ini dengan kaedah D-Bus EnableExtension dan DisableExtension D-Bus yang "
109"terdapat di dalam org.gnome.Shell. Kunci ini mengikut keutamaan di dalam "
110"tetapan \"enabled-extensions”."
111
112#: data/org.gnome.shell.gschema.xml.in:37
113msgid "Disable user extensions"
114msgstr "Lumpuhkan sambungan-sambungan pengguna"
115
116#: data/org.gnome.shell.gschema.xml.in:38
117msgid ""
118"Disable all extensions the user has enabled without affecting the “enabled-"
119"extension” setting."
120msgstr ""
121"Lumpuhkan semua sambungan yang dibenarkan oleh pengguna tanpa mempengaruhi "
122"tetapan \"enabled-extension\"."
88123
89#: ../data/org.gnome.shell.gschema.xml.in.in.h:5124#: data/org.gnome.shell.gschema.xml.in:45
90msgid "Disables the validation of extension version compatibility"125msgid "Disables the validation of extension version compatibility"
91msgstr ""126msgstr "Lumpuhkan pengesahan keserasian versi sambungan"
92127
93#: ../data/org.gnome.shell.gschema.xml.in.in.h:6128#: data/org.gnome.shell.gschema.xml.in:46
94msgid "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."129msgid ""
130"GNOME Shell will only load extensions that claim to support the current "
131"running version. Enabling this option will disable this check and try to "
132"load all extensions regardless of the versions they claim to support."
95msgstr ""133msgstr ""
134"GNOME Shell hanya akan memuatkan sambungan-sambungan yang menyokong versi "
135"semasa. Dengan membenarkan pilihan ini, kotak tanda dinyahtanda dan semua "
136"sambungan akan dimuatkan tanpa mengira sama ada versi yang menyokong atau "
137"sebaliknya."
96138
97#: ../data/org.gnome.shell.gschema.xml.in.in.h:7139#: data/org.gnome.shell.gschema.xml.in:54
98msgid "List of desktop file IDs for favorite applications"140msgid "List of desktop file IDs for favorite applications"
99msgstr "Senarai ID fail desktop untuk aplikasi kegemaran"141msgstr "Senarai ID fail desktop untuk aplikasi kegemaran"
100142
101#: ../data/org.gnome.shell.gschema.xml.in.in.h:8143#: data/org.gnome.shell.gschema.xml.in:55
102msgid "The applications corresponding to these identifiers will be displayed in the favorites area."144msgid ""
103msgstr "Aplikasi-aplikasi bagi setiap pengenal pasti ini akan dipaparkan di kawasan kegemaran."145"The applications corresponding to these identifiers will be displayed in the "
146"favorites area."
147msgstr ""
148"Aplikasi-aplikasi bagi setiap pengenal pasti ini akan dipaparkan di kawasan "
149"kegemaran."
104150
105#: ../data/org.gnome.shell.gschema.xml.in.in.h:9151#: data/org.gnome.shell.gschema.xml.in:62
106msgid "App Picker View"152msgid "App Picker View"
107msgstr ""153msgstr "Pandangan Pemilih Apl"
108154
109#: ../data/org.gnome.shell.gschema.xml.in.in.h:10155#: data/org.gnome.shell.gschema.xml.in:63
110msgid "Index of the currently selected view in the application picker."156msgid "Index of the currently selected view in the application picker."
111msgstr ""157msgstr "Indeks bagi pandangan terpilih semasa di dalam pemilih aplikasi."
112158
113#: ../data/org.gnome.shell.gschema.xml.in.in.h:11159#: data/org.gnome.shell.gschema.xml.in:69
114msgid "History for command (Alt-F2) dialog"160msgid "History for command (Alt-F2) dialog"
115msgstr "Sejarah untuk dialog perintah (Alt-F2)"161msgstr "Sejarah untuk dialog perintah (Alt-F2)"
116162
117#: ../data/org.gnome.shell.gschema.xml.in.in.h:12163#. Translators: looking glass is a debugger and inspector tool, see https://wiki.gnome.org/Projects/GnomeShell/LookingGlass
164#: data/org.gnome.shell.gschema.xml.in:74
118msgid "History for the looking glass dialog"165msgid "History for the looking glass dialog"
119msgstr "Sejarah untuk dialog looking glass"166msgstr "Sejarah untuk dialog looking glass"
120167
121#: ../data/org.gnome.shell.gschema.xml.in.in.h:13168#: data/org.gnome.shell.gschema.xml.in:78
122msgid "Always show the 'Log out' menu item in the user menu."169msgid "Always show the “Log out” menu item in the user menu."
170msgstr "Sentiasa tunjuk item menu \"Daftar keluar\" di dalam menu pengguna."
171
172#: data/org.gnome.shell.gschema.xml.in:79
173msgid ""
174"This key overrides the automatic hiding of the “Log out” menu item in single-"
175"user, single-session situations."
123msgstr ""176msgstr ""
177"Kunci ini membatalkan penyembunyian automatik bagi item menu \"Daftar keluar"
178"\" dalam situasi pengguna-tunggal, sesi-tunggal."
124179
125#: ../data/org.gnome.shell.gschema.xml.in.in.h:14180#: data/org.gnome.shell.gschema.xml.in:86
126msgid "This key overrides the automatic hiding of the 'Log out' menu item in single-user, single-session situations."181msgid ""
182"Whether to remember password for mounting encrypted or remote filesystems"
127msgstr ""183msgstr ""
184"Sama ada hendak mengingati kata laluan untuk melekap tersulit atau sistem "
185"fail jauh"
128186
129#: ../data/org.gnome.shell.gschema.xml.in.in.h:15187#: data/org.gnome.shell.gschema.xml.in:87
130msgid "Whether to remember password for mounting encrypted or remote filesystems"188msgid ""
189"The shell will request a password when an encrypted device or a remote "
190"filesystem is mounted. If the password can be saved for future use a "
191"“Remember Password” checkbox will be present. This key sets the default "
192"state of the checkbox."
131msgstr ""193msgstr ""
194"Shell akan meminta satu kata laluan ketika peranti tersulit atau sistem fail "
195"jauh dilekapkan. Sekiranya kata laluan boleh disimpan untuk kegunaan akan "
196"datang gunakan kotak tanda \"Ingat Kata Laluan\" akan hadir. Kunci ini "
197"menetapkan keadaan lalai bagi kotak tanda."
132198
133#: ../data/org.gnome.shell.gschema.xml.in.in.h:16199#: data/org.gnome.shell.gschema.xml.in:96
134msgid "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."200msgid ""
201"Whether the default Bluetooth adapter had set up devices associated to it"
135msgstr ""202msgstr ""
203"Sama ada penyesuai Bluetooth lalai telah pasangkan peranti-peranti yang "
204"berkaitan dengannya"
136205
137#: ../data/org.gnome.shell.gschema.xml.in.in.h:17206#: data/org.gnome.shell.gschema.xml.in:97
138msgid "Show the week date in the calendar"207msgid ""
139msgstr "Tunjuk minggu pada kalendar"208"The shell will only show a Bluetooth menu item if a Bluetooth adapter is "
209"powered, or if there were devices set up associated with the default "
210"adapter. This will be reset if the default adapter is ever seen not to have "
211"devices associated to it."
212msgstr ""
213"Shell hanya menunjukkan item menu Bluetooth sekiranya penyesuai Bluetooth "
214"telah dihidupkan, atau jika terdapat peranti-peranti yang dipasang berkaitan "
215"dengan penyesuai lalai. Ia akan ditetapkan semula jika penyesuai lalai tidak "
216"mempunyai peranti-peranti yang berkaitan dengannya."
140217
141#: ../data/org.gnome.shell.gschema.xml.in.in.h:18218#: data/org.gnome.shell.gschema.xml.in:106
142msgid "If true, display the ISO week date in the calendar."219msgid "Enable introspection API"
143msgstr "Jika benar, papar tarikh minggu ISO pada kalendar."220msgstr "Benarkan API introspection"
144221
145#: ../data/org.gnome.shell.gschema.xml.in.in.h:19222#: data/org.gnome.shell.gschema.xml.in:107
146msgid "Keybinding to open the application menu"223msgid ""
224"Enables a D-Bus API that allows to introspect the application state of the "
225"shell."
147msgstr ""226msgstr ""
227"Benarkan satu API D-Bus yang membolehkan kaji semua keadaan aplikasi shell."
148228
149#: ../data/org.gnome.shell.gschema.xml.in.in.h:20229#: data/org.gnome.shell.gschema.xml.in:119
230msgid "Keybinding to open the application menu"
231msgstr "Pengikatan kekunci untuk membuka menu aplikasi"
232
233#: data/org.gnome.shell.gschema.xml.in:120
150msgid "Keybinding to open the application menu."234msgid "Keybinding to open the application menu."
151msgstr ""235msgstr "Pengikatan kekunci untuk membuka menu aplikasi."
152236
153#: ../data/org.gnome.shell.gschema.xml.in.in.h:21237#: data/org.gnome.shell.gschema.xml.in:126
154msgid "Keybinding to open the \"Show Applications\" view"238msgid "Keybinding to open the “Show Applications” view"
155msgstr ""239msgstr ""
240"Pengikatan kekunci untuk membuka pandangan \"Tunjuk Aplikasi-Aplikasi\""
156241
157#: ../data/org.gnome.shell.gschema.xml.in.in.h:22242#: data/org.gnome.shell.gschema.xml.in:127
158msgid "Keybinding to open the \"Show Applications\" view of the Activities Overview."243msgid ""
244"Keybinding to open the “Show Applications” view of the Activities Overview."
159msgstr ""245msgstr ""
246"Pengikatan kekunci untuk membuka pandangan \"Tunjuk Aplikasi-Aplikasi\" bagi "
247"Selayang Pandang Aktiviti."
160248
161#: ../data/org.gnome.shell.gschema.xml.in.in.h:23249#: data/org.gnome.shell.gschema.xml.in:134
162msgid "Keybinding to open the overview"250msgid "Keybinding to open the overview"
163msgstr ""251msgstr "Pengikatan kekunci untuk membuka selayang pandang"
164252
165#: ../data/org.gnome.shell.gschema.xml.in.in.h:24253#: data/org.gnome.shell.gschema.xml.in:135
166msgid "Keybinding to open the Activities Overview."254msgid "Keybinding to open the Activities Overview."
167msgstr ""255msgstr "Pengikatan kekunci untuk membuka Selayang Pandang Aktiviti-Aktiviti."
168256
169#: ../data/org.gnome.shell.gschema.xml.in.in.h:25257#: data/org.gnome.shell.gschema.xml.in:141
170msgid "Keybinding to toggle the visibility of the message tray"258msgid "Keybinding to toggle the visibility of the notification list"
171msgstr ""259msgstr "Pengikatan untuk togol ketampakan senarai pemberitahuan"
172260
173#: ../data/org.gnome.shell.gschema.xml.in.in.h:26261#: data/org.gnome.shell.gschema.xml.in:142
174msgid "Keybinding to toggle the visibility of the message tray."262msgid "Keybinding to toggle the visibility of the notification list."
175msgstr ""263msgstr "Pengikatan untuk togol ketampakan senarai pemberitahuan."
176264
177#: ../data/org.gnome.shell.gschema.xml.in.in.h:27265#: data/org.gnome.shell.gschema.xml.in:148
178msgid "Keybinding to focus the active notification"266msgid "Keybinding to focus the active notification"
179msgstr ""267msgstr "Pengikatan kekunci untuk fokuskan pemberitahuan aktif"
180268
181#: ../data/org.gnome.shell.gschema.xml.in.in.h:28269#: data/org.gnome.shell.gschema.xml.in:149
182msgid "Keybinding to focus the active notification."270msgid "Keybinding to focus the active notification."
183msgstr ""271msgstr "Pengikatan kekunci untuk fokuskan pemberitahuan aktif."
184272
185#: ../data/org.gnome.shell.gschema.xml.in.in.h:29273#: data/org.gnome.shell.gschema.xml.in:155
186msgid "Keybinding that pauses and resumes all running tweens, for debugging purposes"274msgid "Switch to application 1"
187msgstr ""275msgstr "Beralih ke aplikasi 1"
276
277#: data/org.gnome.shell.gschema.xml.in:159
278msgid "Switch to application 2"
279msgstr "Beralih ke aplikasi 2"
280
281#: data/org.gnome.shell.gschema.xml.in:163
282msgid "Switch to application 3"
283msgstr "Beralih ke aplikasi 3"
284
285#: data/org.gnome.shell.gschema.xml.in:167
286msgid "Switch to application 4"
287msgstr "Beralih ke aplikasi 4"
188288
189#: ../data/org.gnome.shell.gschema.xml.in.in.h:30289#: data/org.gnome.shell.gschema.xml.in:171
190msgid "Which keyboard to use"290msgid "Switch to application 5"
191msgstr "Pilih papan kekunci"291msgstr "Beralih ke aplikasi 5"
192292
193#: ../data/org.gnome.shell.gschema.xml.in.in.h:31293#: data/org.gnome.shell.gschema.xml.in:175
194msgid "The type of keyboard to use."294msgid "Switch to application 6"
195msgstr "Jenis papan kekunci untuk digunakan."295msgstr "Beralih ke aplikasi 6"
196296
197#: ../data/org.gnome.shell.gschema.xml.in.in.h:32297#: data/org.gnome.shell.gschema.xml.in:179
298msgid "Switch to application 7"
299msgstr "Beralih ke aplikasi 7"
300
301#: data/org.gnome.shell.gschema.xml.in:183
302msgid "Switch to application 8"
303msgstr "Beralih ke aplikasi 8"
304
305#: data/org.gnome.shell.gschema.xml.in:187
306msgid "Switch to application 9"
307msgstr "Beralih ke aplikasi 9"
308
309#: data/org.gnome.shell.gschema.xml.in:196
310#: data/org.gnome.shell.gschema.xml.in:223
198msgid "Limit switcher to current workspace."311msgid "Limit switcher to current workspace."
199msgstr ""312msgstr "Hadkan penukar ke ruang kerja semasa."
200313
201#: ../data/org.gnome.shell.gschema.xml.in.in.h:33314#: data/org.gnome.shell.gschema.xml.in:197
202msgid "If true, only applications that have windows on the current workspace are shown in the switcher. Otherwise, all applications are included."315msgid ""
316"If true, only applications that have windows on the current workspace are "
317"shown in the switcher. Otherwise, all applications are included."
203msgstr ""318msgstr ""
319"Jika benar, hanya aplikasi-aplikasi yang ada tetingkap pada ruang kerja "
320"semasa ditunjukkan dalam penukar. Jika sebaliknya, semua aplikasi terlibat."
204321
205#: ../data/org.gnome.shell.gschema.xml.in.in.h:34322#: data/org.gnome.shell.gschema.xml.in:214
206msgid "The application icon mode."323msgid "The application icon mode."
207msgstr ""324msgstr "Mod ikon aplikasi."
208325
209#: ../data/org.gnome.shell.gschema.xml.in.in.h:35326#: data/org.gnome.shell.gschema.xml.in:215
210msgid "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'."327msgid ""
328"Configures how the windows are shown in the switcher. Valid possibilities "
329"are “thumbnail-only” (shows a thumbnail of the window), “app-icon-"
330"only” (shows only the application icon) or “both”."
211msgstr ""331msgstr ""
332"Konfigur bagaimanakah tetingkap-tetingkap ditunjukkan dalam penukar. "
333"Kemungkinan yang sah adalah \"lakaran-kenit-sahaja\" (tunjuk satu lakaran "
334"kenit bagi tetingkap), \"ikon-apl-sahaja\" (hanya tunjuk ikon aplikasi) atau "
335"\"kedua-duanya\"."
212336
213#: ../data/org.gnome.shell.gschema.xml.in.in.h:36337#: data/org.gnome.shell.gschema.xml.in:224
214msgid "If true, only windows from the current workspace are shown in the switcher. Otherwise, all windows are included."338msgid ""
339"If true, only windows from the current workspace are shown in the switcher. "
340"Otherwise, all windows are included."
215msgstr ""341msgstr ""
342"Jika benar, hanya tetingkap-tetingkap pada ruang kerja semasa ditunjukkan "
343"dalam penukar. Jika sebaliknya, semua tetingkap terlibat."
344
345#: data/org.gnome.shell.gschema.xml.in:234
346msgid "Locations"
347msgstr "Lokasi"
348
349#: data/org.gnome.shell.gschema.xml.in:235
350msgid "The locations to show in world clocks"
351msgstr "Lokasi yang dipaparkan dalam jam dunia"
216352
217#: ../data/org.gnome.shell.gschema.xml.in.in.h:37353#: data/org.gnome.shell.gschema.xml.in:245
354msgid "Automatic location"
355msgstr "Lokasi automatik"
356
357#: data/org.gnome.shell.gschema.xml.in:246
358msgid "Whether to fetch the current location or not"
359msgstr "Sama ada hendak dapatkan lokasi semasa atau sebaliknya"
360
361#: data/org.gnome.shell.gschema.xml.in:253
362msgid "Location"
363msgstr "Lokasi"
364
365#: data/org.gnome.shell.gschema.xml.in:254
366msgid "The location for which to show a forecast"
367msgstr "Lokasi yang dapat menunjukkan ramalan"
368
369#: data/org.gnome.shell.gschema.xml.in:266
218msgid "Attach modal dialog to the parent window"370msgid "Attach modal dialog to the parent window"
219msgstr ""371msgstr "Lampir dialog modal kepada tetingkap induk"
220372
221#: ../data/org.gnome.shell.gschema.xml.in.in.h:38373#: data/org.gnome.shell.gschema.xml.in:267
222msgid "This key overrides the key in org.gnome.mutter when running GNOME Shell."374#: data/org.gnome.shell.gschema.xml.in:276
375#: data/org.gnome.shell.gschema.xml.in:284
376#: data/org.gnome.shell.gschema.xml.in:292
377#: data/org.gnome.shell.gschema.xml.in:300
378msgid ""
379"This key overrides the key in org.gnome.mutter when running GNOME Shell."
223msgstr ""380msgstr ""
381"Kunci ini membatalkan kunci dalam org.gnome.mutter ketika menjalankan GNOME "
382"Shell."
224383
225#: ../data/org.gnome.shell.gschema.xml.in.in.h:39384#: data/org.gnome.shell.gschema.xml.in:275
226msgid "Enable edge tiling when dropping windows on screen edges"385msgid "Enable edge tiling when dropping windows on screen edges"
227msgstr ""386msgstr ""
387"Benarkan penjubinan pinggir ketika melepaskan tetingkap-tetingkap di atas "
388"pinggir skrin"
228389
229#: ../data/org.gnome.shell.gschema.xml.in.in.h:40390#: data/org.gnome.shell.gschema.xml.in:283
230msgid "Workspaces are managed dynamically"391msgid "Workspaces are managed dynamically"
231msgstr ""392msgstr "Ruang-ruang kerja diurus secara dinamik"
232393
233#: ../data/org.gnome.shell.gschema.xml.in.in.h:41394#: data/org.gnome.shell.gschema.xml.in:291
234msgid "Workspaces only on primary monitor"395msgid "Workspaces only on primary monitor"
235msgstr ""396msgstr "Ruang-ruang kerja hanya berada pada monitor utama"
236397
237#: ../data/org.gnome.shell.gschema.xml.in.in.h:42398#: data/org.gnome.shell.gschema.xml.in:299
238msgid "Delay focus changes in mouse mode until the pointer stops moving"399msgid "Delay focus changes in mouse mode until the pointer stops moving"
239msgstr ""400msgstr ""
401"Fokus lengah berubah dalam mod tetikus sehinggalah penuding berhenti bergerak"
402
403#: data/org.gnome.Shell.PortalHelper.desktop.in.in:3
404msgid "Network Login"
405msgstr "Daftar Masuk Rangkaian"
240406
241#: ../data/org.gnome.Shell.PortalHelper.desktop.in.h:1407#: js/extensionPrefs/main.js:104 js/extensionPrefs/main.js:535
242msgid "Captive Portal"408msgid "Something’s gone wrong"
409msgstr "Adalah masalah telah berlaku"
410
411#: js/extensionPrefs/main.js:111
412msgid ""
413"We’re very sorry, but there’s been a problem: the settings for this "
414"extension can’t be displayed. We recommend that you report the issue to the "
415"extension authors."
243msgstr ""416msgstr ""
417"Mohon maaf, adalah masalah telah berlaku: tetapan bagi sambungan ini tidak "
418"dapat dipaparkan. Kami menyarankan anda laporkan masalah ini kepada para "
419"pengarang sambungan."
244420
245#: ../js/extensionPrefs/main.js:123421#: js/extensionPrefs/main.js:118
246#, javascript-format422msgid "Technical Details"
247msgid "There was an error loading the preferences dialog for %s:"423msgstr "Perincian Teknikal"
424
425#: js/extensionPrefs/main.js:153
426msgid "Copy Error"
427msgstr "Salin Ralat"
428
429#: js/extensionPrefs/main.js:180
430msgid "Homepage"
431msgstr "Laman Sesawang"
432
433#: js/extensionPrefs/main.js:181
434msgid "Visit extension homepage"
435msgstr "Lawati laman sesawang sambungan"
436
437#: js/extensionPrefs/main.js:477
438msgid "No Extensions Installed"
439msgstr "Tiada Sambungan Dipasang"
440
441#: js/extensionPrefs/main.js:487
442msgid ""
443"Extensions can be installed through Software or <a href=\"https://extensions."
444"gnome.org\">extensions.gnome.org</a>."
248msgstr ""445msgstr ""
446"Sambungan-sambungan boleh dipasang melalui Perisian atau <a href=\"https://"
447"extensions.gnome.org\">extensions.gnome.org</a>."
249448
250#: ../js/extensionPrefs/main.js:155449#: js/extensionPrefs/main.js:502
251#| msgid "GNOME Shell"450msgid "Browse in Software"
252msgid "GNOME Shell Extensions"451msgstr "Layar dalam Perisian"
253msgstr "Ciri Tambahan GNOME Shell"452
254453#: js/extensionPrefs/main.js:542
255#: ../js/gdm/authPrompt.js:147454msgid ""
256#: ../js/ui/components/networkAgent.js:143455"We’re very sorry, but it was not possible to get the list of installed "
257#: ../js/ui/components/polkitAgent.js:166456"extensions. Make sure you are logged into GNOME and try again."
258#: ../js/ui/endSessionDialog.js:452457msgstr ""
259#: ../js/ui/extensionDownloader.js:195458"Mohon maaf, berkemungkinan boleh dapatkan senarai sambungan terpasang. "
260#: ../js/ui/shellMountOperation.js:399459"Pastikan anda telah mendaftar masuk ke dalam GNOME dan cuba sekali lagi."
261#: ../js/ui/status/network.js:915460
461#: js/gdm/authPrompt.js:139 js/ui/audioDeviceSelection.js:53
462#: js/ui/components/networkAgent.js:122 js/ui/components/polkitAgent.js:138
463#: js/ui/endSessionDialog.js:446 js/ui/extensionDownloader.js:190
464#: js/ui/shellMountOperation.js:392 js/ui/shellMountOperation.js:402
465#: js/ui/status/network.js:898
262msgid "Cancel"466msgid "Cancel"
263msgstr "Batal"467msgstr "Batal"
264468
265#: ../js/gdm/authPrompt.js:169469#: js/gdm/authPrompt.js:158 js/gdm/authPrompt.js:201 js/gdm/authPrompt.js:433
266#: ../js/gdm/authPrompt.js:217
267#| msgid "Next week"
268msgid "Next"470msgid "Next"
269msgstr "Seterusnya"471msgstr "Berikutnya"
270472
271#: ../js/gdm/authPrompt.js:213473#: js/gdm/authPrompt.js:197 js/ui/shellMountOperation.js:396
272#: ../js/ui/shellMountOperation.js:403474#: js/ui/unlockDialog.js:45
273#: ../js/ui/unlockDialog.js:59
274msgid "Unlock"475msgid "Unlock"
275msgstr ""476msgstr "Nyahkunci"
276477
277#: ../js/gdm/authPrompt.js:215478#: js/gdm/authPrompt.js:199
278msgctxt "button"479msgctxt "button"
279msgid "Sign In"480msgid "Sign In"
280msgstr "Daftar Masuk"481msgstr "Daftar Masuk"
281482
282#: ../js/gdm/loginDialog.js:269483#: js/gdm/loginDialog.js:299
283msgid "Choose Session"484msgid "Choose Session"
284msgstr ""485msgstr "Pilih Sesi"
285486
286#: ../js/gdm/loginDialog.js:429487#. translators: this message is shown below the user list on the
488#. login screen. It can be activated to reveal an entry for
489#. manually entering the username.
490#: js/gdm/loginDialog.js:443
287msgid "Not listed?"491msgid "Not listed?"
288msgstr "Tidak tersenarai?"492msgstr "Tidak tersenarai?"
289493
290#: ../js/gdm/loginDialog.js:614494#. Translators: this message is shown below the username entry field
495#. to clue the user in on how to login to the local network realm
496#: js/gdm/loginDialog.js:879
291#, javascript-format497#, javascript-format
292msgid "(e.g., user or %s)"498msgid "(e.g., user or %s)"
293msgstr ""499msgstr "(cth., pengguna atau %s)"
294500
295#: ../js/gdm/loginDialog.js:619501#. TTLS and PEAP are actually much more complicated, but this complication
296#: ../js/ui/components/networkAgent.js:269502#. is not visible here since we only care about phase2 authentication
297#: ../js/ui/components/networkAgent.js:287503#. (and don't even care of which one)
504#: js/gdm/loginDialog.js:884 js/ui/components/networkAgent.js:248
505#: js/ui/components/networkAgent.js:268 js/ui/components/networkAgent.js:286
298msgid "Username: "506msgid "Username: "
299msgstr "Nama pengguna:"507msgstr "Nama Pengguna: "
300508
301#: ../js/gdm/loginDialog.js:922509#: js/gdm/loginDialog.js:1219
302msgid "Login Window"510msgid "Login Window"
303msgstr "Tetingkap Log Masuk"511msgstr "Tetingkap Daftar Masuk"
304512
305#: ../js/gdm/util.js:323513#: js/gdm/util.js:338
306#| msgid "Authentication Required"
307msgid "Authentication error"514msgid "Authentication error"
308msgstr "Ralat pengesahan"515msgstr "Ralat pengesahihan"
309516
310#: ../js/gdm/util.js:453517#. We don't show fingerprint messages directly since it's
518#. not the main auth service. Instead we use the messages
519#. as a cue to display our own message.
520#. Translators: this message is shown below the password entry field
521#. to indicate the user can swipe their finger instead
522#: js/gdm/util.js:473
311msgid "(or swipe finger)"523msgid "(or swipe finger)"
312msgstr ""524msgstr "(atau leret jari)"
525
526#. Translators: The name of the power-off action in search
527#: js/misc/systemActions.js:89
528msgctxt "search-result"
529msgid "Power Off"
530msgstr "Matikan"
313531
314#: ../js/misc/util.js:115532#. Translators: A list of keywords that match the power-off action, separated by semicolons
533#: js/misc/systemActions.js:92
534msgid "power off;shutdown;reboot;restart"
535msgstr "tutup;matikan;but semula;mula semula"
536
537#. Translators: The name of the lock screen action in search
538#: js/misc/systemActions.js:97
539msgctxt "search-result"
540msgid "Lock Screen"
541msgstr "Skrin Kunci"
542
543#. Translators: A list of keywords that match the lock screen action, separated by semicolons
544#: js/misc/systemActions.js:100
545msgid "lock screen"
546msgstr "kunci skrin"
547
548#. Translators: The name of the logout action in search
549#: js/misc/systemActions.js:105
550msgctxt "search-result"
551msgid "Log Out"
552msgstr "Daftar Keluar"
553
554#. Translators: A list of keywords that match the logout action, separated by semicolons
555#: js/misc/systemActions.js:108
556msgid "logout;log out;sign off"
557msgstr "daftarkeluar;daftar keluar;keluar"
558
559#. Translators: The name of the suspend action in search
560#: js/misc/systemActions.js:113
561msgctxt "search-result"
562msgid "Suspend"
563msgstr "Tangguh"
564
565#. Translators: A list of keywords that match the suspend action, separated by semicolons
566#: js/misc/systemActions.js:116
567msgid "suspend;sleep"
568msgstr "tangguh;tidur"
569
570#. Translators: The name of the switch user action in search
571#: js/misc/systemActions.js:121
572msgctxt "search-result"
573msgid "Switch User"
574msgstr "Tukar Pengguna"
575
576#. Translators: A list of keywords that match the switch user action, separated by semicolons
577#: js/misc/systemActions.js:124
578msgid "switch user"
579msgstr "tukar pengguna"
580
581#. Translators: The name of the lock orientation action in search
582#: js/misc/systemActions.js:129
583msgctxt "search-result"
584msgid "Lock Orientation"
585msgstr "Kunci Orientasi"
586
587#. Translators: A list of keywords that match the lock orientation action, separated by semicolons
588#: js/misc/systemActions.js:132
589msgid "lock orientation;screen;rotation"
590msgstr "kunci orientasi;skrin;putaran"
591
592#: js/misc/util.js:116
315msgid "Command not found"593msgid "Command not found"
316msgstr "Perintah tidak ditemui"594msgstr "Perintah tidak ditemui"
317595
318#: ../js/misc/util.js:148596#. Replace "Error invoking GLib.shell_parse_argv: " with
597#. something nicer
598#: js/misc/util.js:149
319msgid "Could not parse command:"599msgid "Could not parse command:"
320msgstr "Tidak dapat menghurai perintah:"600msgstr "Tidak dapat menghurai perintah:"
321601
322#: ../js/misc/util.js:156602#: js/misc/util.js:157
323#, javascript-format603#, javascript-format
324#| msgid "Execution of '%s' failed:"
325msgid "Execution of “%s” failed:"604msgid "Execution of “%s” failed:"
326msgstr "Perlaksanaan “%s” telah gagal:"605msgstr "Perlaksanaan “%s” telah gagal:"
327606
328#: ../js/portalHelper/main.js:85607#: js/misc/util.js:174
329#| msgid "Authentication Required"608msgid "Just now"
330msgid "Web Authentication Redirect"609msgstr "Baru berlaku"
331msgstr "Lencongan Pengesahan Web"
332610
333#: ../js/ui/appDisplay.js:772611#: js/misc/util.js:176
334msgid "Frequently used applications will appear here"612#, javascript-format
613msgid "%d minute ago"
614msgid_plural "%d minutes ago"
615msgstr[0] "%d minit yang lalu"
616
617#: js/misc/util.js:179
618#, javascript-format
619msgid "%d hour ago"
620msgid_plural "%d hours ago"
621msgstr[0] "%d jam yang lalu"
622
623#: js/misc/util.js:182
624msgid "Yesterday"
625msgstr "Semalam"
626
627#: js/misc/util.js:184
628#, javascript-format
629msgid "%d day ago"
630msgid_plural "%d days ago"
631msgstr[0] "%d hari yang lalu"
632
633#: js/misc/util.js:187
634#, javascript-format
635msgid "%d week ago"
636msgid_plural "%d weeks ago"
637msgstr[0] "%d minggu yang lalu"
638
639#: js/misc/util.js:190
640#, javascript-format
641msgid "%d month ago"
642msgid_plural "%d months ago"
643msgstr[0] "%d bulan yang lalu"
644
645#: js/misc/util.js:192
646#, javascript-format
647msgid "%d year ago"
648msgid_plural "%d years ago"
649msgstr[0] "%d tahun yang lalu"
650
651#. Translators: Time in 24h format
652#: js/misc/util.js:222
653msgid "%H∶%M"
654msgstr "%H∶%M"
655
656#. Translators: this is the word "Yesterday" followed by a
657#. time string in 24h format. i.e. "Yesterday, 14:30"
658#: js/misc/util.js:228
659#, no-c-format
660msgid "Yesterday, %H∶%M"
661msgstr "Semalam, %H∶%M"
662
663#. Translators: this is the week day name followed by a time
664#. string in 24h format. i.e. "Monday, 14:30"
665#: js/misc/util.js:234
666#, no-c-format
667msgid "%A, %H∶%M"
668msgstr "%A, %H∶%M"
669
670#. Translators: this is the month name and day number
671#. followed by a time string in 24h format.
672#. i.e. "May 25, 14:30"
673#: js/misc/util.js:240
674#, no-c-format
675msgid "%B %-d, %H∶%M"
676msgstr "%-d %B, %H∶%M"
677
678#. Translators: this is the month name, day number, year
679#. number followed by a time string in 24h format.
680#. i.e. "May 25 2012, 14:30"
681#: js/misc/util.js:246
682#, no-c-format
683msgid "%B %-d %Y, %H∶%M"
684msgstr "%-d %B %Y, %H∶%M"
685
686#. Translators: Time in 12h format
687#: js/misc/util.js:251
688msgid "%l∶%M %p"
689msgstr "%l:%M %p"
690
691#. Translators: this is the word "Yesterday" followed by a
692#. time string in 12h format. i.e. "Yesterday, 2:30 pm"
693#: js/misc/util.js:257
694#, no-c-format
695msgid "Yesterday, %l∶%M %p"
696msgstr "Semalam, %l∶%M %p"
697
698#. Translators: this is the week day name followed by a time
699#. string in 12h format. i.e. "Monday, 2:30 pm"
700#: js/misc/util.js:263
701#, no-c-format
702msgid "%A, %l∶%M %p"
703msgstr "%A, %l∶%M %p"
704
705#. Translators: this is the month name and day number
706#. followed by a time string in 12h format.
707#. i.e. "May 25, 2:30 pm"
708#: js/misc/util.js:269
709#, no-c-format
710msgid "%B %-d, %l∶%M %p"
711msgstr "%-d %B, %l∶%M %p"
712
713#. Translators: this is the month name, day number, year
714#. number followed by a time string in 12h format.
715#. i.e. "May 25 2012, 2:30 pm"
716#: js/misc/util.js:275
717#, no-c-format
718msgid "%B %-d %Y, %l∶%M %p"
719msgstr "%-d %B %Y, %l∶%M %p"
720
721#. TRANSLATORS: this is the title of the wifi captive portal login window
722#: js/portalHelper/main.js:40
723msgid "Hotspot Login"
724msgstr "Daftar Masuk Kawasan Khas"
725
726#: js/portalHelper/main.js:86
727msgid ""
728"Your connection to this hotspot login is not secure. Passwords or other "
729"information you enter on this page can be viewed by people nearby."
335msgstr ""730msgstr ""
731"Sambungan anda dengan daftar masuk kawasan khas ini adalah tidak selamat. "
732"Kata laluan atau lain-lain maklumat yang anda telah masukkan di dalam "
733"halaman ini boleh dilihat oleh individu berhampiran."
734
735#. No support for non-modal system dialogs, so ignore the option
736#. let modal = options['modal'] || true;
737#: js/ui/accessDialog.js:39 js/ui/status/location.js:363
738msgid "Deny Access"
739msgstr "Nafi Capaian"
740
741#: js/ui/accessDialog.js:40 js/ui/status/location.js:366
742msgid "Grant Access"
743msgstr "Beri Capaian"
744
745#: js/ui/appDisplay.js:852
746msgid "Unnamed Folder"
747msgstr "Folder Tiada Nama"
748
749#: js/ui/appDisplay.js:872
750msgid "Frequently used applications will appear here"
751msgstr "Aplikasi kerap digunakan akan muncul di sini"
336752
337#: ../js/ui/appDisplay.js:883753#: js/ui/appDisplay.js:995
338msgid "Frequent"754msgid "Frequent"
339msgstr ""755msgstr "Kerap"
340756
341#: ../js/ui/appDisplay.js:890757#: js/ui/appDisplay.js:1002
342msgid "All"758msgid "All"
343msgstr "Semua"759msgstr "Semua"
344760
345#: ../js/ui/appDisplay.js:1789761#: js/ui/appDisplay.js:1745
762msgid "Rename"
763msgstr "Nama Semula"
764
765#. Translators: This is the heading of a list of open windows
766#: js/ui/appDisplay.js:2418 js/ui/panel.js:76
767msgid "Open Windows"
768msgstr "Buka Tetingkap"
769
770#: js/ui/appDisplay.js:2437 js/ui/panel.js:83
346msgid "New Window"771msgid "New Window"
347msgstr "Tetingkap Baru"772msgstr "Tetingkap Baharu"
773
774#: js/ui/appDisplay.js:2449
775msgid "Launch using Dedicated Graphics Card"
776msgstr "Lancar menggunakan Kad Grafik Khusus"
348777
349#: ../js/ui/appDisplay.js:1815778#: js/ui/appDisplay.js:2478 js/ui/dash.js:239
350#: ../js/ui/dash.js:285
351msgid "Remove from Favorites"779msgid "Remove from Favorites"
352msgstr "Buang daripada Kegemaran"780msgstr "Buang daripada Kegemaran"
353781
354#: ../js/ui/appDisplay.js:1821782#: js/ui/appDisplay.js:2484
355msgid "Add to Favorites"783msgid "Add to Favorites"
356msgstr "Tambah ke Kegemaran"784msgstr "Tambah ke Kegemaran"
357785
358#: ../js/ui/appDisplay.js:1830786#: js/ui/appDisplay.js:2494 js/ui/panel.js:94
359msgid "Show Details"787msgid "Show Details"
360msgstr ""788msgstr "Tunjuk Perincian"
361789
362#: ../js/ui/appFavorites.js:124790#: js/ui/appFavorites.js:150
363#, javascript-format791#, javascript-format
364msgid "%s has been added to your favorites."792msgid "%s has been added to your favorites."
365msgstr "%s telah ditambah ke kegemaran anda."793msgstr "%s telah ditambah ke kegemaran anda."
366794
367#: ../js/ui/appFavorites.js:158795#: js/ui/appFavorites.js:183
368#, javascript-format796#, javascript-format
369msgid "%s has been removed from your favorites."797msgid "%s has been removed from your favorites."
370msgstr "%s telah dibuang daripada kegemaran anda."798msgstr "%s telah dibuang daripada kegemaran anda."
371799
372#: ../js/ui/backgroundMenu.js:19800#: js/ui/audioDeviceSelection.js:40
373#: ../js/ui/panel.js:813801msgid "Select Audio Device"
374#: ../js/ui/status/system.js:337802msgstr "Pilih Peranti Audio"
375#| msgid "Mouse Settings"803
376msgid "Settings"804#: js/ui/audioDeviceSelection.js:51
377msgstr "Tetapan"805msgid "Sound Settings"
806msgstr "Tetapan Bunyi"
807
808#: js/ui/audioDeviceSelection.js:60
809msgid "Headphones"
810msgstr "Fon Kepala"
811
812#: js/ui/audioDeviceSelection.js:62
813msgid "Headset"
814msgstr "Set Kepala"
378815
379#: ../js/ui/backgroundMenu.js:21816#: js/ui/audioDeviceSelection.js:64 js/ui/status/volume.js:248
817msgid "Microphone"
818msgstr "Mikrofon"
819
820#: js/ui/backgroundMenu.js:14
380msgid "Change Background…"821msgid "Change Background…"
381msgstr ""822msgstr "Ubah Latar Belakang..."
382823
383#. Translators: Shown in calendar event list for all day events824#: js/ui/backgroundMenu.js:16 js/ui/status/nightLight.js:44
384#. * Keep it short, best if you can use less then 10 characters825msgid "Display Settings"
385#. */826msgstr "Tetapan Paparan"
386#: ../js/ui/calendar.js:67
387msgctxt "event list time"
388msgid "All Day"
389msgstr "Sepanjang Hari"
390827
391#. Translators: Shown in calendar event list, if 24h format,828#: js/ui/backgroundMenu.js:17
392#. \u2236 is a ratio character, similar to : */829msgid "Settings"
393#: ../js/ui/calendar.js:73830msgstr "Tetapan"
394msgctxt "event list time"
395msgid "%H∶%M"
396msgstr ""
397831
398#. Translators: Shown in calendar event list, if 12h format,832#. Translators: Enter 0-6 (Sunday-Saturday) for non-work days. Examples: "0" (Sunday) "6" (Saturday) "06" (Sunday and Saturday).
399#. \u2236 is a ratio character, similar to : and \u2009 is833#: js/ui/calendar.js:41
400#. a thin space */834msgctxt "calendar-no-work"
401#: ../js/ui/calendar.js:82835msgid "06"
402msgctxt "event list time"836msgstr "06"
403msgid "%l∶%M %p"
404msgstr ""
405837
406#. Translators: Calendar grid abbreviation for Sunday.838#. Translators: Calendar grid abbreviation for Sunday.
407#. *839#. *
408#. * NOTE: These grid abbreviations are always shown together840#. * NOTE: These grid abbreviations are always shown together
409#. * and in order, e.g. "S M T W T F S".841#. * and in order, e.g. "S M T W T F S".
410#. */842#.
411#: ../js/ui/calendar.js:113843#: js/ui/calendar.js:70
412msgctxt "grid sunday"844msgctxt "grid sunday"
413msgid "S"845msgid "S"
414msgstr "A"846msgstr "A"
415847
416#. Translators: Calendar grid abbreviation for Monday */848#. Translators: Calendar grid abbreviation for Monday
417#: ../js/ui/calendar.js:115849#: js/ui/calendar.js:72
418msgctxt "grid monday"850msgctxt "grid monday"
419msgid "M"851msgid "M"
420msgstr "I"852msgstr "I"
421853
422#. Translators: Calendar grid abbreviation for Tuesday */854#. Translators: Calendar grid abbreviation for Tuesday
423#: ../js/ui/calendar.js:117855#: js/ui/calendar.js:74
424msgctxt "grid tuesday"856msgctxt "grid tuesday"
425msgid "T"857msgid "T"
426msgstr "S"858msgstr "S"
427859
428#. Translators: Calendar grid abbreviation for Wednesday */860#. Translators: Calendar grid abbreviation for Wednesday
429#: ../js/ui/calendar.js:119861#: js/ui/calendar.js:76
430msgctxt "grid wednesday"862msgctxt "grid wednesday"
431msgid "W"863msgid "W"
432msgstr "R"864msgstr "R"
433865
434#. Translators: Calendar grid abbreviation for Thursday */866#. Translators: Calendar grid abbreviation for Thursday
435#: ../js/ui/calendar.js:121867#: js/ui/calendar.js:78
436msgctxt "grid thursday"868msgctxt "grid thursday"
437msgid "T"869msgid "T"
438msgstr "K"870msgstr "K"
439871
440#. Translators: Calendar grid abbreviation for Friday */872#. Translators: Calendar grid abbreviation for Friday
441#: ../js/ui/calendar.js:123873#: js/ui/calendar.js:80
442msgctxt "grid friday"874msgctxt "grid friday"
443msgid "F"875msgid "F"
444msgstr "J"876msgstr "J"
445877
446#. Translators: Calendar grid abbreviation for Saturday */878#. Translators: Calendar grid abbreviation for Saturday
447#: ../js/ui/calendar.js:125879#: js/ui/calendar.js:82
448msgctxt "grid saturday"880msgctxt "grid saturday"
449msgid "S"881msgid "S"
450msgstr "S"882msgstr "S"
451883
452#. Translators: Event list abbreviation for Sunday.
453#. *884#. *
454#. * NOTE: These list abbreviations are normally not shown together885#. * Translators: The header displaying just the month name
455#. * so they need to be unique (e.g. Tuesday and Thursday cannot886#. * standalone, when this is a month of the current year.
456#. * both be 'T').887#. * "%OB" is the new format specifier introduced in glibc 2.27,
457#. */888#. * in most cases you should not change it.
458#: ../js/ui/calendar.js:138889#.
459msgctxt "list sunday"890#: js/ui/calendar.js:330
460msgid "Su"891msgid "%OB"
461msgstr "A"892msgstr "%OB"
462
463#. Translators: Event list abbreviation for Monday */
464#: ../js/ui/calendar.js:140
465msgctxt "list monday"
466msgid "M"
467msgstr "I"
468893
469#. Translators: Event list abbreviation for Tuesday */894#. *
470#: ../js/ui/calendar.js:142895#. * Translators: The header displaying the month name and the year
471msgctxt "list tuesday"896#. * number, when this is a month of a different year. You can
472msgid "T"897#. * reorder the format specifiers or add other modifications
473msgstr "Se"898#. * according to the requirements of your language.
899#. * "%OB" is the new format specifier introduced in glibc 2.27,
900#. * in most cases you should not use the old "%B" here unless you
901#. * absolutely know what you are doing.
902#.
903#: js/ui/calendar.js:340
904msgid "%OB %Y"
905msgstr "%OB %Y"
906
907#: js/ui/calendar.js:397
908msgid "Previous month"
909msgstr "Bulan terdahulu"
474910
475#. Translators: Event list abbreviation for Wednesday */911#: js/ui/calendar.js:408
476#: ../js/ui/calendar.js:144912msgid "Next month"
477msgctxt "list wednesday"913msgstr "Bulan berikutnya"
478msgid "W"
479msgstr "R"
480914
481#. Translators: Event list abbreviation for Thursday */915#: js/ui/calendar.js:558
482#: ../js/ui/calendar.js:146916#, no-javascript-format
483msgctxt "list thursday"917msgctxt "date day number format"
484msgid "Th"918msgid "%d"
485msgstr "K"919msgstr "%d"
486920
487#. Translators: Event list abbreviation for Friday */921#: js/ui/calendar.js:614
488#: ../js/ui/calendar.js:148922msgid "Week %V"
489msgctxt "list friday"923msgstr "Minggu %V"
490msgid "F"
491msgstr "J"
492924
493#. Translators: Event list abbreviation for Saturday */925#. Translators: Shown in calendar event list for all day events
494#: ../js/ui/calendar.js:150926#. * Keep it short, best if you can use less then 10 characters
495msgctxt "list saturday"927#.
496msgid "S"928#: js/ui/calendar.js:682
497msgstr "S"929msgctxt "event list time"
930msgid "All Day"
931msgstr "Sepanjang Hari"
498932
499#: ../js/ui/calendar.js:453933#: js/ui/calendar.js:815
500msgid "Previous month"934msgctxt "calendar heading"
501msgstr ""935msgid "%A, %B %-d"
936msgstr "%A, %B %-d"
502937
503#: ../js/ui/calendar.js:463938#: js/ui/calendar.js:819
504msgid "Next month"939msgctxt "calendar heading"
505msgstr ""940msgid "%A, %B %-d, %Y"
941msgstr "%A, %B %-d, %Y"
506942
507#. Translators: Text to show if there are no events */943#: js/ui/calendar.js:1042
508#: ../js/ui/calendar.js:781944msgid "No Notifications"
509msgid "Nothing Scheduled"945msgstr "Tiada Pemberitahuan"
510msgstr "Jadual Kosong"
511946
512#. Translators: Shown on calendar heading when selected day occurs on current year */947#: js/ui/calendar.js:1045
513#: ../js/ui/calendar.js:799948msgid "No Events"
514msgctxt "calendar heading"949msgstr "Tiada Peristiwa"
515msgid "%A, %B %d"
516msgstr "%A, %d %B"
517950
518#. Translators: Shown on calendar heading when selected day occurs on different year */951#: js/ui/calendar.js:1071
519#: ../js/ui/calendar.js:802952msgid "Clear"
520msgctxt "calendar heading"953msgstr "Kosongkan"
521msgid "%A, %B %d, %Y"
522msgstr "%A, %d %B %Y"
523954
524#: ../js/ui/calendar.js:813955#. Translators: %s is an application name
525msgid "Today"956#: js/ui/closeDialog.js:42
526msgstr "Hari ini"957#, javascript-format
958msgid "“%s” is not responding."
959msgstr "“%s” tidak memberi respons."
527960
528#: ../js/ui/calendar.js:817961#: js/ui/closeDialog.js:43
529msgid "Tomorrow"962msgid ""
530msgstr "Esok"963"You may choose to wait a short while for it to continue or force the "
964"application to quit entirely."
965msgstr ""
966"Anda boleh tunggu sebentar untuk teruskan atau paksa aplikasi ditutup "
967"sepenuhnya."
531968
532#: ../js/ui/calendar.js:828969#: js/ui/closeDialog.js:59
533msgid "This week"970msgid "Force Quit"
534msgstr "Minggu ini"971msgstr "Paksa Keluar"
535972
536#: ../js/ui/calendar.js:836973#: js/ui/closeDialog.js:62
537msgid "Next week"974msgid "Wait"
538msgstr "Minggu depan"975msgstr "Tunggu"
539976
540#: ../js/ui/components/automountManager.js:91977#: js/ui/components/automountManager.js:87
541msgid "External drive connected"978msgid "External drive connected"
542msgstr ""979msgstr "Pemacu luar bersambung"
543980
544#: ../js/ui/components/automountManager.js:102981#: js/ui/components/automountManager.js:99
545msgid "External drive disconnected"982msgid "External drive disconnected"
546msgstr ""983msgstr "Pemacu luar ditanggalkan"
547984
548#: ../js/ui/components/autorunManager.js:296985#: js/ui/components/automountManager.js:209
549msgid "Removable Devices"986msgid "Unable to unlock volume"
550msgstr ""987msgstr "Gagal menyahkunci volum"
551988
552#: ../js/ui/components/autorunManager.js:596989#: js/ui/components/automountManager.js:210
990msgid "The installed udisks version does not support the PIM setting"
991msgstr "Versi udisks terpasang tidak menyokong tetapan PIM"
992
993#: js/ui/components/autorunManager.js:328
553#, javascript-format994#, javascript-format
554msgid "Open with %s"995msgid "Open with %s"
555msgstr "Buka dengan %s"996msgstr "Buka dengan %s"
556997
557#: ../js/ui/components/autorunManager.js:622998#: js/ui/components/keyring.js:67 js/ui/components/polkitAgent.js:257
558#| msgid "Reject"
559msgid "Eject"
560msgstr "Lentingkan"
561
562#: ../js/ui/components/keyring.js:94
563#: ../js/ui/components/polkitAgent.js:285
564msgid "Password:"999msgid "Password:"
565msgstr "Katalaluan:"1000msgstr "Kata Laluan:"
5661001
567#: ../js/ui/components/keyring.js:1201002#: js/ui/components/keyring.js:98
568msgid "Type again:"1003msgid "Type again:"
1004msgstr "Taip sekali lagi:"
1005
1006#: js/ui/components/networkAgent.js:105
1007msgid ""
1008"Alternatively you can connect by pushing the “WPS” button on your router."
569msgstr ""1009msgstr ""
1010"Selain itu anda boleh sambung dengan menekan butang \"WPS\" yang ada pada "
1011"penghala anda."
5701012
571#: ../js/ui/components/networkAgent.js:1381013#: js/ui/components/networkAgent.js:116 js/ui/status/network.js:222
572#: ../js/ui/status/network.js:2771014#: js/ui/status/network.js:313 js/ui/status/network.js:901
573#: ../js/ui/status/network.js:359
574#: ../js/ui/status/network.js:918
575msgid "Connect"1015msgid "Connect"
576msgstr "Sambung"1016msgstr "Sambung"
5771017
578#: ../js/ui/components/networkAgent.js:2311018#. Cisco LEAP
579#: ../js/ui/components/networkAgent.js:2431019#: js/ui/components/networkAgent.js:217 js/ui/components/networkAgent.js:229
580#: ../js/ui/components/networkAgent.js:2711020#: js/ui/components/networkAgent.js:251 js/ui/components/networkAgent.js:270
581#: ../js/ui/components/networkAgent.js:2911021#: js/ui/components/networkAgent.js:290 js/ui/components/networkAgent.js:300
582#: ../js/ui/components/networkAgent.js:301
583msgid "Password: "1022msgid "Password: "
584msgstr "Kata laluan:"1023msgstr "Kata Laluan: "
5851024
586#: ../js/ui/components/networkAgent.js:2361025#. static WEP
1026#: js/ui/components/networkAgent.js:222
587msgid "Key: "1027msgid "Key: "
588msgstr "Kekunci:"1028msgstr "Kunci: "
589
590#: ../js/ui/components/networkAgent.js:275
591msgid "Identity: "
592msgstr "Identiti:"
5931029
594#: ../js/ui/components/networkAgent.js:2771030#: js/ui/components/networkAgent.js:254 js/ui/components/networkAgent.js:276
595msgid "Private key password: "1031msgid "Private key password: "
596msgstr "Katalaluan kekunci peribadi:"1032msgstr "Kata laluan kunci persendirian: "
1033
1034#: js/ui/components/networkAgent.js:274
1035msgid "Identity: "
1036msgstr "Identiti: "
5971037
598#: ../js/ui/components/networkAgent.js:2891038#: js/ui/components/networkAgent.js:288
599msgid "Service: "1039msgid "Service: "
600msgstr "Perkhidmatan:"1040msgstr "Perkhidmatan: "
6011041
602#: ../js/ui/components/networkAgent.js:3181042#: js/ui/components/networkAgent.js:317 js/ui/components/networkAgent.js:692
603msgid "Authentication required by wireless network"1043msgid "Authentication required by wireless network"
604msgstr "Pengesahan diperlukan untuk rangkaian wayarles"1044msgstr "Pengesahihan diperlukan untuk rangkaian tanpa wayar"
6051045
606#: ../js/ui/components/networkAgent.js:3191046#: js/ui/components/networkAgent.js:318 js/ui/components/networkAgent.js:693
607#, javascript-format1047#, javascript-format
608#| msgid ""1048msgid ""
609#| "Passwords or encryption keys are required to access the wireless network "1049"Passwords or encryption keys are required to access the wireless network "
610#| "'%s'."1050"“%s”."
611msgid "Passwords or encryption keys are required to access the wireless network “%s”."1051msgstr ""
612msgstr "Katalaluan atau kekunci penyulitan diperlukan untuk mencapai rangkaian wayarles “%s”."1052"Kata laluan atau kunci penyulitan diperlukan untuk mencapai rangkaian tanpa "
1053"wayar “%s”."
6131054
614#: ../js/ui/components/networkAgent.js:3231055#: js/ui/components/networkAgent.js:322 js/ui/components/networkAgent.js:697
615msgid "Wired 802.1X authentication"1056msgid "Wired 802.1X authentication"
616msgstr "Pengesahan berwayar 802.1X"1057msgstr "Pengesahan berwayar 802.1X"
6171058
618#: ../js/ui/components/networkAgent.js:3251059#: js/ui/components/networkAgent.js:324
619msgid "Network name: "1060msgid "Network name: "
620msgstr "Nama rangkaian:"1061msgstr "Nama rangkaian: "
6211062
622#: ../js/ui/components/networkAgent.js:3301063#: js/ui/components/networkAgent.js:329 js/ui/components/networkAgent.js:701
623msgid "DSL authentication"1064msgid "DSL authentication"
624msgstr "Pengesahan DSL"1065msgstr "Pengesahan DSL"
6251066
626#: ../js/ui/components/networkAgent.js:3371067#: js/ui/components/networkAgent.js:336 js/ui/components/networkAgent.js:706
627msgid "PIN code required"1068msgid "PIN code required"
628msgstr "Kod PIN diperlukan"1069msgstr "Kod PIN diperlukan"
6291070
630#: ../js/ui/components/networkAgent.js:3381071#: js/ui/components/networkAgent.js:337 js/ui/components/networkAgent.js:707
631msgid "PIN code is needed for the mobile broadband device"1072msgid "PIN code is needed for the mobile broadband device"
632msgstr "Kod PIN diperlukan untuk peranti jalur lebar mudah alih"1073msgstr "Kod PIN diperlukan untuk peranti jalur lebar mudah alih"
6331074
634#: ../js/ui/components/networkAgent.js:3391075#: js/ui/components/networkAgent.js:338
635msgid "PIN: "1076msgid "PIN: "
636msgstr "PIN:"1077msgstr "PIN: "
6371078
638#: ../js/ui/components/networkAgent.js:3451079#: js/ui/components/networkAgent.js:345 js/ui/components/networkAgent.js:713
639msgid "Mobile broadband network password"1080msgid "Mobile broadband network password"
640msgstr "Kata laluan rangkaian jalur lebar mudah alih"1081msgstr "Kata laluan rangkaian jalur lebar mudah alih"
6411082
642#: ../js/ui/components/networkAgent.js:3461083#: js/ui/components/networkAgent.js:346 js/ui/components/networkAgent.js:698
1084#: js/ui/components/networkAgent.js:702 js/ui/components/networkAgent.js:714
643#, javascript-format1085#, javascript-format
644#| msgid "A password is required to connect to '%s'."
645msgid "A password is required to connect to “%s”."1086msgid "A password is required to connect to “%s”."
646msgstr "Kata laluan diperlukan untuk disambungkan ke “%s”."1087msgstr "Kata laluan diperlukan untuk bersambung dengan “%s”."
1088
1089#: js/ui/components/networkAgent.js:681 js/ui/status/network.js:1675
1090msgid "Network Manager"
1091msgstr "Pengurus Rangkaian"
6471092
648#: ../js/ui/components/polkitAgent.js:541093#: js/ui/components/polkitAgent.js:36
649msgid "Authentication Required"1094msgid "Authentication Required"
650msgstr "Pengesahan Diperlukan"1095msgstr "Pengesahihan Diperlukan"
6511096
652#: ../js/ui/components/polkitAgent.js:961097#: js/ui/components/polkitAgent.js:64
653msgid "Administrator"1098msgid "Administrator"
654msgstr "Pengurus"1099msgstr "Pentadbir"
6551100
656#: ../js/ui/components/polkitAgent.js:1751101#: js/ui/components/polkitAgent.js:141
657msgid "Authenticate"1102msgid "Authenticate"
658msgstr "Pengesahan"1103msgstr "Sahihkan"
6591104
660#. Translators: "that didn't work" refers to the fact that the1105#. Translators: "that didn't work" refers to the fact that the
661#. * requested authentication was not gained; this can happen1106#. * requested authentication was not gained; this can happen
662#. * because of an authentication error (like invalid password),1107#. * because of an authentication error (like invalid password),
663#. * for instance. */1108#. * for instance.
664#: ../js/ui/components/polkitAgent.js:2711109#: js/ui/components/polkitAgent.js:243 js/ui/shellMountOperation.js:376
665#: ../js/ui/shellMountOperation.js:3831110msgid "Sorry, that didn’t work. Please try again."
666msgid "Sorry, that didn't work. Please try again."1111msgstr "Maaf, nampaknya tidak berjaya. Cuba sekali lagi."
667msgstr "Maaf, tidak berjaya. Sila cuba lagi."
668
669#: ../js/ui/components/telepathyClient.js:240
670msgid "Invitation"
671msgstr "Jemputan"
672
673#: ../js/ui/components/telepathyClient.js:300
674msgid "Call"
675msgstr "Panggilan"
676
677#: ../js/ui/components/telepathyClient.js:316
678msgid "File Transfer"
679msgstr "Pemindahan Fail"
680
681#: ../js/ui/components/telepathyClient.js:420
682msgid "Chat"
683msgstr ""
684
685#: ../js/ui/components/telepathyClient.js:483
686msgid "Unmute"
687msgstr ""
688
689#: ../js/ui/components/telepathyClient.js:483
690msgid "Mute"
691msgstr ""
692
693#. Translators: Time in 24h format */
694#: ../js/ui/components/telepathyClient.js:953
695msgid "%H∶%M"
696msgstr ""
697
698#. Translators: this is the word "Yesterday" followed by a
699#. time string in 24h format. i.e. "Yesterday, 14:30" */
700#: ../js/ui/components/telepathyClient.js:960
701msgid "Yesterday, %H∶%M"
702msgstr ""
703
704#. Translators: this is the week day name followed by a time
705#. string in 24h format. i.e. "Monday, 14:30" */
706#: ../js/ui/components/telepathyClient.js:967
707msgid "%A, %H∶%M"
708msgstr ""
709
710#. Translators: this is the month name and day number
711#. followed by a time string in 24h format.
712#. i.e. "May 25, 14:30" */
713#: ../js/ui/components/telepathyClient.js:974
714msgid "%B %d, %H∶%M"
715msgstr ""
716
717#. Translators: this is the month name, day number, year
718#. number followed by a time string in 24h format.
719#. i.e. "May 25 2012, 14:30" */
720#: ../js/ui/components/telepathyClient.js:980
721msgid "%B %d %Y, %H∶%M"
722msgstr ""
723
724#. Translators: Time in 24h format */
725#: ../js/ui/components/telepathyClient.js:986
726#| msgctxt "event list time"
727#| msgid "%l:%M %p"
728msgid "%l∶%M %p"
729msgstr "%l:%M %p"
730
731#. Translators: this is the word "Yesterday" followed by a
732#. time string in 12h format. i.e. "Yesterday, 2:30 pm" */
733#: ../js/ui/components/telepathyClient.js:993
734msgid "Yesterday, %l∶%M %p"
735msgstr ""
736
737#. Translators: this is the week day name followed by a time
738#. string in 12h format. i.e. "Monday, 2:30 pm" */
739#: ../js/ui/components/telepathyClient.js:1000
740#| msgid "%a %l:%M %p"
741msgid "%A, %l∶%M %p"
742msgstr "%A, %l∶%M %p"
743
744#. Translators: this is the month name and day number
745#. followed by a time string in 12h format.
746#. i.e. "May 25, 2:30 pm" */
747#: ../js/ui/components/telepathyClient.js:1007
748#| msgid "%a %b %e, %l:%M %p"
749msgid "%B %d, %l∶%M %p"
750msgstr "%B %d, %l∶%M %p"
751
752#. Translators: this is the month name, day number, year
753#. number followed by a time string in 12h format.
754#. i.e. "May 25 2012, 2:30 pm"*/
755#: ../js/ui/components/telepathyClient.js:1013
756#| msgid "%a %b %e, %l:%M %p"
757msgid "%B %d %Y, %l∶%M %p"
758msgstr "%B %d %Y, %l∶%M %p"
7591112
760#. Translators: this is the other person changing their old IM name to their new1113#. Translators: this is the other person changing their old IM name to their new
761#. IM name. */1114#. IM name.
762#: ../js/ui/components/telepathyClient.js:10451115#: js/ui/components/telepathyClient.js:777
763#, javascript-format1116#, javascript-format
764msgid "%s is now known as %s"1117msgid "%s is now known as %s"
765msgstr "%s kini dikenali sebagai %s"1118msgstr "%s kini dikenali sebagai %s"
7661119
767#. translators: argument is a room name like1120#: js/ui/ctrlAltTab.js:21 js/ui/viewSelector.js:169
768#. * room@jabber.org for example. */
769#: ../js/ui/components/telepathyClient.js:1149
770#, javascript-format
771msgid "Invitation to %s"
772msgstr "Jemputan untuk %s"
773
774#. translators: first argument is the name of a contact and the second
775#. * one the name of a room. "Alice is inviting you to join room@jabber.org
776#. * for example. */
777#: ../js/ui/components/telepathyClient.js:1157
778#, javascript-format
779msgid "%s is inviting you to join %s"
780msgstr "%s menjemput anda untuk menyertai %s"
781
782#: ../js/ui/components/telepathyClient.js:1159
783#: ../js/ui/components/telepathyClient.js:1194
784#: ../js/ui/components/telepathyClient.js:1228
785#: ../js/ui/components/telepathyClient.js:1286
786msgid "Decline"
787msgstr "Tolak"
788
789#: ../js/ui/components/telepathyClient.js:1165
790#: ../js/ui/components/telepathyClient.js:1234
791#: ../js/ui/components/telepathyClient.js:1291
792msgid "Accept"
793msgstr "Terima"
794
795#. translators: argument is a contact name like Alice for example. */
796#: ../js/ui/components/telepathyClient.js:1184
797#, javascript-format
798msgid "Video call from %s"
799msgstr "Panggilan video dari %s"
800
801#. translators: argument is a contact name like Alice for example. */
802#: ../js/ui/components/telepathyClient.js:1187
803#, javascript-format
804msgid "Call from %s"
805msgstr "Panggilan dari %s"
806
807#. translators: this is a button label (verb), not a noun */
808#: ../js/ui/components/telepathyClient.js:1201
809msgid "Answer"
810msgstr "Jawapan"
811
812#. To translators: The first parameter is
813#. * the contact's alias and the second one is the
814#. * file name. The string will be something
815#. * like: "Alice is sending you test.ogg"
816#. */
817#: ../js/ui/components/telepathyClient.js:1222
818#, javascript-format
819msgid "%s is sending you %s"
820msgstr "%s menghantarkan %s kepada anda"
821
822#. To translators: The parameter is the contact's alias */
823#: ../js/ui/components/telepathyClient.js:1251
824#, javascript-format
825msgid "%s would like permission to see when you are online"
826msgstr "%s mahukan kebenaran untuk melihat bila anda akan ada di talian"
827
828#: ../js/ui/components/telepathyClient.js:1337
829msgid "Network error"
830msgstr "Ralat rangkaian"
831
832#: ../js/ui/components/telepathyClient.js:1339
833msgid "Authentication failed"
834msgstr "Pengesahan gagal"
835
836#: ../js/ui/components/telepathyClient.js:1341
837msgid "Encryption error"
838msgstr "Ralat penyulitan"
839
840#: ../js/ui/components/telepathyClient.js:1343
841msgid "Certificate not provided"
842msgstr "Perakuan tidak diberikan"
843
844#: ../js/ui/components/telepathyClient.js:1345
845msgid "Certificate untrusted"
846msgstr "Perakuan tidak dipercayai"
847
848#: ../js/ui/components/telepathyClient.js:1347
849msgid "Certificate expired"
850msgstr "Perakuan habis tempoh"
851
852#: ../js/ui/components/telepathyClient.js:1349
853msgid "Certificate not activated"
854msgstr "Perakuan tidak diaktifkan"
855
856#: ../js/ui/components/telepathyClient.js:1351
857msgid "Certificate hostname mismatch"
858msgstr "Nama hos perakuan tak padan"
859
860#: ../js/ui/components/telepathyClient.js:1353
861msgid "Certificate fingerprint mismatch"
862msgstr "Fingerprint perakuan tak padan"
863
864#: ../js/ui/components/telepathyClient.js:1355
865msgid "Certificate self-signed"
866msgstr "Perakuan didaftar sendiri"
867
868#: ../js/ui/components/telepathyClient.js:1357
869msgid "Status is set to offline"
870msgstr "Status ditetapkan kepada luar talian"
871
872#: ../js/ui/components/telepathyClient.js:1359
873msgid "Encryption is not available"
874msgstr "Penyulitan tiada"
875
876#: ../js/ui/components/telepathyClient.js:1361
877msgid "Certificate is invalid"
878msgstr "Perakuan tak sah"
879
880#: ../js/ui/components/telepathyClient.js:1363
881msgid "Connection has been refused"
882msgstr "Sambungan telah ditolak"
883
884#: ../js/ui/components/telepathyClient.js:1365
885msgid "Connection can't be established"
886msgstr "Sambungan tidak dapat dibuat"
887
888#: ../js/ui/components/telepathyClient.js:1367
889msgid "Connection has been lost"
890msgstr "Sambungan telah terputus"
891
892#: ../js/ui/components/telepathyClient.js:1369
893#| msgid "This resource is already connected to the server"
894msgid "This account is already connected to the server"
895msgstr "Akaun ini telah pun disambungkan ke pelayan"
896
897#: ../js/ui/components/telepathyClient.js:1371
898msgid "Connection has been replaced by a new connection using the same resource"
899msgstr "Sambungan telah digantikan dengan sambungan baru dengan sumber yang sama"
900
901#: ../js/ui/components/telepathyClient.js:1373
902msgid "The account already exists on the server"
903msgstr "Akaun berkenaan telah pun wujud pada pelayan"
904
905#: ../js/ui/components/telepathyClient.js:1375
906msgid "Server is currently too busy to handle the connection"
907msgstr "Pelayan sedang terlalu sibuk untuk mengendalikan sambungan"
908
909#: ../js/ui/components/telepathyClient.js:1377
910msgid "Certificate has been revoked"
911msgstr "Perakuan telah dibatalkan"
912
913#: ../js/ui/components/telepathyClient.js:1379
914msgid "Certificate uses an insecure cipher algorithm or is cryptographically weak"
915msgstr "Perakuan menggunakan algoritma sifer yang tak selamat atau rapuh dari segi kriptografi"
916
917#: ../js/ui/components/telepathyClient.js:1381
918msgid "The length of the server certificate, or the depth of the server certificate chain, exceed the limits imposed by the cryptography library"
919msgstr "Panjang perakuan pelayan, atau kedalaman rantai perakuan pelayan, melebihi had yang dikenakan oleh pustaka kriptografi"
920
921#: ../js/ui/components/telepathyClient.js:1383
922#| msgid "Connection error"
923msgid "Internal error"
924msgstr "Ralat dalaman"
925
926#. translators: argument is the account name, like
927#. * name@jabber.org for example. */
928#: ../js/ui/components/telepathyClient.js:1393
929#, javascript-format
930msgid "Unable to connect to %s"
931msgstr ""
932
933#: ../js/ui/components/telepathyClient.js:1398
934#| msgid "Edit account"
935msgid "View account"
936msgstr "Tunjukkan akaun"
937
938#: ../js/ui/components/telepathyClient.js:1435
939msgid "Unknown reason"
940msgstr "Sebab tak diketahui"
941
942#: ../js/ui/ctrlAltTab.js:29
943#: ../js/ui/viewSelector.js:154
944msgid "Windows"1121msgid "Windows"
945msgstr "Tetingkap"1122msgstr "Tetingkap"
9461123
947#: ../js/ui/dash.js:2491124#: js/ui/dash.js:200 js/ui/dash.js:241
948#: ../js/ui/dash.js:287
949#| msgid "Applications"
950msgid "Show Applications"1125msgid "Show Applications"
951msgstr "Tunjukkan Aplikasi"1126msgstr "Tunjukkan Aplikasi"
9521127
953#: ../js/ui/dash.js:4451128#. Translators: this is the name of the dock/favorites area on
1129#. the left of the overview
1130#: js/ui/dash.js:389
954msgid "Dash"1131msgid "Dash"
955msgstr "Dash"1132msgstr "Pemuka"
9561133
957#: ../js/ui/dateMenu.js:961134#. Translators: This is the date format to use when the calendar popup is
958msgid "Open Calendar"1135#. * shown - it is shown just below the time in the top bar (e.g.,
959msgstr "Buka Kalendar"1136#. * "Tue 9:29 AM"). The string itself should become a full date, e.g.,
1137#. * "February 17 2015".
1138#.
1139#: js/ui/dateMenu.js:70
1140msgid "%B %-d %Y"
1141msgstr "%-d %B %Y"
1142
1143#. Translators: This is the accessible name of the date button shown
1144#. * below the time in the shell; it should combine the weekday and the
1145#. * date, e.g. "Tuesday February 17 2015".
1146#.
1147#: js/ui/dateMenu.js:77
1148msgid "%A %B %e %Y"
1149msgstr "%A %e %B %Y"
9601150
961#: ../js/ui/dateMenu.js:1001151#: js/ui/dateMenu.js:152
962msgid "Open Clocks"1152msgid "Add world clocks…"
963msgstr ""1153msgstr "Tambah jam dunia..."
9641154
965#: ../js/ui/dateMenu.js:1071155#: js/ui/dateMenu.js:153
966#| msgid "Date and Time Settings"1156msgid "World Clocks"
967msgid "Date & Time Settings"1157msgstr "Jam Dunia"
968msgstr "Tetapan Tarikh dan Waktu"
9691158
970#. Translators: This is the date format to use when the calendar popup is1159#: js/ui/dateMenu.js:268
971#. * shown - it is shown just below the time in the shell (e.g. "Tue 9:29 AM").1160msgid "Weather"
972#. */1161msgstr "Cuaca"
973#: ../js/ui/dateMenu.js:2041162
974msgid "%A %B %e, %Y"1163#: js/ui/dateMenu.js:351
975msgstr "%A %e %B %Y"1164msgid "Select a location…"
1165msgstr "Pilih satu lokasi..."
1166
1167#: js/ui/dateMenu.js:359
1168msgid "Loading…"
1169msgstr "Memuatkan..."
9761170
977#: ../js/ui/endSessionDialog.js:641171#: js/ui/dateMenu.js:369
1172msgid "Go online for weather information"
1173msgstr "Pergi dalam talian untuk dapatkan maklumat cuaca"
1174
1175#: js/ui/dateMenu.js:371
1176msgid "Weather information is currently unavailable"
1177msgstr "Maklumat cuaca buat masa ini tidak tersedia"
1178
1179#: js/ui/endSessionDialog.js:37
978#, javascript-format1180#, javascript-format
979#| msgid "Log Out %s"
980msgctxt "title"1181msgctxt "title"
981msgid "Log Out %s"1182msgid "Log Out %s"
982msgstr "Log Keluar %s"1183msgstr "Daftar Keluar %s"
9831184
984#: ../js/ui/endSessionDialog.js:651185#: js/ui/endSessionDialog.js:38
985#| msgid "Log Out"
986msgctxt "title"1186msgctxt "title"
987msgid "Log Out"1187msgid "Log Out"
988msgstr "Log Keluar"1188msgstr "Daftar Keluar"
9891189
990#: ../js/ui/endSessionDialog.js:671190#: js/ui/endSessionDialog.js:40
991#, javascript-format1191#, javascript-format
992msgid "%s will be logged out automatically in %d second."1192msgid "%s will be logged out automatically in %d second."
993msgid_plural "%s will be logged out automatically in %d seconds."1193msgid_plural "%s will be logged out automatically in %d seconds."
994msgstr[0] "%s akan dilog keluar secara automatik dalam %d saat."1194msgstr[0] "%s akan mendaftar keluar secara automatik dalam tempoh %d saat."
995msgstr[1] "%s akan dilog keluar secara automatik dalam %d saat."
9961195
997#: ../js/ui/endSessionDialog.js:721196#: js/ui/endSessionDialog.js:45
998#, javascript-format1197#, javascript-format
999#| msgid "You will be logged out automatically in %d seconds."
1000msgid "You will be logged out automatically in %d second."1198msgid "You will be logged out automatically in %d second."
1001msgid_plural "You will be logged out automatically in %d seconds."1199msgid_plural "You will be logged out automatically in %d seconds."
1002msgstr[0] "Anda akan dilog keluar secara automatik dalam %d saat."1200msgstr[0] "Anda akan mendaftar keluar secara automatik dalam tempoh %d saat."
1003msgstr[1] "Anda akan dilog keluar secara automatik dalam %d saat."
10041201
1005#: ../js/ui/endSessionDialog.js:781202#: js/ui/endSessionDialog.js:51
1006#| msgid "Log Out"
1007msgctxt "button"1203msgctxt "button"
1008msgid "Log Out"1204msgid "Log Out"
1009msgstr "Log Keluar"1205msgstr "Daftar Keluar"
10101206
1011#: ../js/ui/endSessionDialog.js:841207#: js/ui/endSessionDialog.js:57
1012#| msgid "Power Off"
1013msgctxt "title"1208msgctxt "title"
1014msgid "Power Off"1209msgid "Power Off"
1015msgstr "Matikan"1210msgstr "Matikan"
10161211
1017#: ../js/ui/endSessionDialog.js:851212#: js/ui/endSessionDialog.js:58
1018msgctxt "title"1213msgctxt "title"
1019msgid "Install Updates & Power Off"1214msgid "Install Updates & Power Off"
1020msgstr ""1215msgstr "Pasang Kemas Kini & Matikan"
10211216
1022#: ../js/ui/endSessionDialog.js:871217#: js/ui/endSessionDialog.js:60
1023#, javascript-format1218#, javascript-format
1024#| msgid "The system will power off automatically in %d seconds."
1025msgid "The system will power off automatically in %d second."1219msgid "The system will power off automatically in %d second."
1026msgid_plural "The system will power off automatically in %d seconds."1220msgid_plural "The system will power off automatically in %d seconds."
1027msgstr[0] "Sistem akan dimatikan secara automatik dalam %d saat."1221msgstr[0] "Sistem akan dimatikan secara automatik dalam tempoh %d saat."
1028msgstr[1] "Sistem akan dimatikan secara automatik dalam %d saat."
10291222
1030#: ../js/ui/endSessionDialog.js:911223#: js/ui/endSessionDialog.js:64
1031msgctxt "checkbox"1224msgctxt "checkbox"
1032msgid "Install pending software updates"1225msgid "Install pending software updates"
1033msgstr ""1226msgstr "Pasang kemas kini-kemas kini perisian tertangguh"
10341227
1035#: ../js/ui/endSessionDialog.js:941228#: js/ui/endSessionDialog.js:67 js/ui/endSessionDialog.js:84
1036#: ../js/ui/endSessionDialog.js:111
1037#| msgid "Restart"
1038msgctxt "button"1229msgctxt "button"
1039msgid "Restart"1230msgid "Restart"
1040msgstr "Mula Semula"1231msgstr "Mula Semula"
10411232
1042#: ../js/ui/endSessionDialog.js:961233#: js/ui/endSessionDialog.js:69
1043#| msgid "Power Off"
1044msgctxt "button"1234msgctxt "button"
1045msgid "Power Off"1235msgid "Power Off"
1046msgstr "Matikan"1236msgstr "Matikan"
10471237
1048#: ../js/ui/endSessionDialog.js:1031238#: js/ui/endSessionDialog.js:76
1049#| msgid "Restart"
1050msgctxt "title"1239msgctxt "title"
1051msgid "Restart"1240msgid "Restart"
1052msgstr "Mula Semula"1241msgstr "Mula Semula"
10531242
1054#: ../js/ui/endSessionDialog.js:1051243#: js/ui/endSessionDialog.js:78
1055#, javascript-format1244#, javascript-format
1056#| msgid "The system will restart automatically in %d seconds."
1057msgid "The system will restart automatically in %d second."1245msgid "The system will restart automatically in %d second."
1058msgid_plural "The system will restart automatically in %d seconds."1246msgid_plural "The system will restart automatically in %d seconds."
1059msgstr[0] "Sistem akan mula semula secara automatik dalam %d saat."1247msgstr[0] "Sistem akan mula semula secara automatik dalam tempoh %d saat."
1060msgstr[1] "Sistem akan mula semula secara automatik dalam %d saat."
10611248
1062#: ../js/ui/endSessionDialog.js:1191249#: js/ui/endSessionDialog.js:92
1063msgctxt "title"1250msgctxt "title"
1064msgid "Restart & Install Updates"1251msgid "Restart & Install Updates"
1065msgstr ""1252msgstr "Mulas Semula & Pasang Kemas Kini"
10661253
1067#: ../js/ui/endSessionDialog.js:1211254#: js/ui/endSessionDialog.js:94
1068#, javascript-format1255#, javascript-format
1069#| msgid "The system will restart automatically in %d seconds."
1070msgid "The system will automatically restart and install updates in %d second."1256msgid "The system will automatically restart and install updates in %d second."
1071msgid_plural "The system will automatically restart and install updates in %d seconds."1257msgid_plural ""
1072msgstr[0] "Sistem akan mula semula secara automatik dan mengemaskini dalam %d saat."1258"The system will automatically restart and install updates in %d seconds."
1073msgstr[1] "Sistem akan mula semula secara automatik dan mengemaskini dalam %d saat."1259msgstr[0] ""
1260"Sistem akan mula semula secara automatik dan mengemas kini dalam tempoh %d "
1261"saat."
10741262
1075#: ../js/ui/endSessionDialog.js:1271263#: js/ui/endSessionDialog.js:100 js/ui/endSessionDialog.js:120
1076msgctxt "button"1264msgctxt "button"
1077msgid "Restart &amp; Install"1265msgid "Restart &amp; Install"
1078msgstr ""1266msgstr "Mula Semula &amp; Pasang"
10791267
1080#: ../js/ui/endSessionDialog.js:1281268#: js/ui/endSessionDialog.js:101
1081msgctxt "button"1269msgctxt "button"
1082msgid "Install &amp; Power Off"1270msgid "Install &amp; Power Off"
1083msgstr ""1271msgstr "Pasang &amp; Matikan"
10841272
1085#: ../js/ui/endSessionDialog.js:1291273#: js/ui/endSessionDialog.js:102
1086msgctxt "checkbox"1274msgctxt "checkbox"
1087msgid "Power off after updates are installed"1275msgid "Power off after updates are installed"
1276msgstr "Matikan selepas kemas kini-kemas kini telah dipasang"
1277
1278#: js/ui/endSessionDialog.js:110
1279msgctxt "title"
1280msgid "Restart & Install Upgrade"
1281msgstr "Mula Semula & Pasang Penataran"
1282
1283#. Translators: This is the text displayed for system upgrades in the
1284#. shut down dialog. First %s gets replaced with the distro name and
1285#. second %s with the distro version to upgrade to
1286#: js/ui/endSessionDialog.js:115
1287#, javascript-format
1288msgid ""
1289"%s %s will be installed after restart. Upgrade installation can take a long "
1290"time: ensure that you have backed up and that the computer is plugged in."
1088msgstr ""1291msgstr ""
1292"%s%s akan dipasang selepas mula semula. Pemasangan penataran mengambil masa "
1293"yang agak lama: pastikan anda telah menyandar dan komputer anda menggunakan "
1294"kuasa AC."
10891295
1090#: ../js/ui/endSessionDialog.js:3381296#: js/ui/endSessionDialog.js:304
1091msgid "Running on battery power: please plug in before installing updates."1297msgid "Running on battery power: please plug in before installing updates."
1092msgstr ""1298msgstr ""
1299"Berjalan dengan kuasa bateri: sila palamkan sebelum memasang kemas kini-"
1300"kemas kini."
10931301
1094#: ../js/ui/endSessionDialog.js:3551302#: js/ui/endSessionDialog.js:321
1095msgid "Some applications are busy or have unsaved work."1303msgid "Some applications are busy or have unsaved work."
1096msgstr ""1304msgstr ""
1305"Sesetengah aplikasi masih sibuk atau mempunyai kerja-kerja yang belum "
1306"disimpan."
10971307
1098#: ../js/ui/endSessionDialog.js:3621308#: js/ui/endSessionDialog.js:328
1099msgid "Other users are logged in."1309msgid "Other users are logged in."
1100msgstr ""1310msgstr "Ada pengguna lain masih mendaftar masuk."
11011311
1102#. Translators: Remote here refers to a remote session, like a ssh login */1312#. Translators: Remote here refers to a remote session, like a ssh login
1103#: ../js/ui/endSessionDialog.js:6401313#: js/ui/endSessionDialog.js:650
1104#, javascript-format1314#, javascript-format
1105msgid "%s (remote)"1315msgid "%s (remote)"
1106msgstr ""1316msgstr "%s (jauh)"
11071317
1108#. Translators: Console here refers to a tty like a VT console */1318#. Translators: Console here refers to a tty like a VT console
1109#: ../js/ui/endSessionDialog.js:6431319#: js/ui/endSessionDialog.js:653
1110#, javascript-format1320#, javascript-format
1111msgid "%s (console)"1321msgid "%s (console)"
1112msgstr ""1322msgstr "%s (konsol)"
11131323
1114#: ../js/ui/extensionDownloader.js:1991324#: js/ui/extensionDownloader.js:194
1115msgid "Install"1325msgid "Install"
1116msgstr "Pasang"1326msgstr "Pasang"
11171327
1118#: ../js/ui/extensionDownloader.js:2041328#: js/ui/extensionDownloader.js:200
1119#, javascript-format1329#, javascript-format
1120#| msgid "Download and install '%s' from extensions.gnome.org?"
1121msgid "Download and install “%s” from extensions.gnome.org?"1330msgid "Download and install “%s” from extensions.gnome.org?"
1122msgstr "Muat turun dan pasang “%s” dari extensions.gnome.org?"1331msgstr "Muat turun dan pasang “%s” dari extensions.gnome.org?"
11231332
1124#: ../js/ui/keyboard.js:6921333#: js/ui/inhibitShortcutsDialog.js:80
1125#: ../js/ui/status/keyboard.js:5231334#, javascript-format
1126msgid "Keyboard"1335msgid "%s wants to inhibit shortcuts"
1127msgstr "Papan kekunci"1336msgstr "%s mahu menyekat pintasan-pintasan"
1337
1338#: js/ui/inhibitShortcutsDialog.js:81
1339msgid "Application wants to inhibit shortcuts"
1340msgstr "Aplikasi mahu menyekat pintasan-pintasan"
1341
1342#. Translators: %s is a keyboard shortcut like "Super+x"
1343#: js/ui/inhibitShortcutsDialog.js:90
1344#, javascript-format
1345msgid "You can restore shortcuts by pressing %s."
1346msgstr "Anda boleh memulihkan pintasan-pintasan dengan menekan %s."
1347
1348#: js/ui/inhibitShortcutsDialog.js:95
1349msgid "Deny"
1350msgstr "Nafi"
1351
1352#: js/ui/inhibitShortcutsDialog.js:102
1353msgid "Allow"
1354msgstr "Benarkan"
1355
1356#: js/ui/kbdA11yDialog.js:32
1357msgid "Slow Keys Turned On"
1358msgstr "Kekunci Lambat Hidup"
1359
1360#: js/ui/kbdA11yDialog.js:33
1361msgid "Slow Keys Turned Off"
1362msgstr "Kekunci Lambat Mati"
1363
1364#: js/ui/kbdA11yDialog.js:34
1365msgid ""
1366"You just held down the Shift key for 8 seconds. This is the shortcut for the "
1367"Slow Keys feature, which affects the way your keyboard works."
1368msgstr ""
1369"Anda baru sahaja menahan kekunci Shift selama 8 saat. Tindakan ini adalah "
1370"pintasan untuk fitur Kekunci-Kekunci Lambat, yang mungkin mempengaruhi "
1371"fungsi papan kekunci anda."
1372
1373#: js/ui/kbdA11yDialog.js:41
1374msgid "Sticky Keys Turned On"
1375msgstr "Kekunci Lekat Hidup"
1376
1377#: js/ui/kbdA11yDialog.js:42
1378msgid "Sticky Keys Turned Off"
1379msgstr "Kekunci Lekat Mati"
1380
1381#: js/ui/kbdA11yDialog.js:44
1382msgid ""
1383"You just pressed the Shift key 5 times in a row. This is the shortcut for "
1384"the Sticky Keys feature, which affects the way your keyboard works."
1385msgstr ""
1386"Anda baru sahaja menekan kekunci Shift sebanyak 5 kali berturutan. Tindakan "
1387"ini adalah pintasan untuk fitur Kekunci-Kekunci Lekat, yang mungkin "
1388"mempengaruhi fungsi papan kekunci anda."
1389
1390#: js/ui/kbdA11yDialog.js:46
1391msgid ""
1392"You just pressed two keys at once, or pressed the Shift key 5 times in a "
1393"row. This turns off the Sticky Keys feature, which affects the way your "
1394"keyboard works."
1395msgstr ""
1396"Anda baru sahaja menekan dua kekunci sekaligus, atau menekan kekunci Shift "
1397"sebanyak 5 kali berturutan. Tindakan ini mematikan fitur Kekunci-Kekunci "
1398"Lekat, yang mungkin mempengaruhi fungsi papan kekunci anda."
1399
1400#: js/ui/kbdA11yDialog.js:58
1401msgid "Leave On"
1402msgstr "Biarkan"
1403
1404#: js/ui/kbdA11yDialog.js:58 js/ui/status/bluetooth.js:134
1405#: js/ui/status/network.js:1274
1406msgid "Turn On"
1407msgstr "Hidup"
11281408
1129#: ../js/ui/lookingGlass.js:6431409#: js/ui/kbdA11yDialog.js:66 js/ui/status/bluetooth.js:134
1410#: js/ui/status/network.js:131 js/ui/status/network.js:314
1411#: js/ui/status/network.js:1274 js/ui/status/network.js:1386
1412#: js/ui/status/nightLight.js:40 js/ui/status/rfkill.js:80
1413#: js/ui/status/rfkill.js:107
1414msgid "Turn Off"
1415msgstr "Mati"
1416
1417#: js/ui/kbdA11yDialog.js:66
1418msgid "Leave Off"
1419msgstr "Tinggalkan"
1420
1421#: js/ui/keyboard.js:201
1422msgid "Region & Language Settings"
1423msgstr "Tetapan-Tetapan Wilayah & Bahasa"
1424
1425#: js/ui/lookingGlass.js:629
1130msgid "No extensions installed"1426msgid "No extensions installed"
1131msgstr "Tiada sambungan dipasang"1427msgstr "Tiada sambungan dipasang"
11321428
1133#. Translators: argument is an extension UUID. */1429#. Translators: argument is an extension UUID.
1134#: ../js/ui/lookingGlass.js:6971430#: js/ui/lookingGlass.js:684
1135#, javascript-format1431#, javascript-format
1136msgid "%s has not emitted any errors."1432msgid "%s has not emitted any errors."
1137msgstr ""1433msgstr "%s tidak menghasilkan apa-apa ralat."
11381434
1139#: ../js/ui/lookingGlass.js:7031435#: js/ui/lookingGlass.js:690
1140#| msgid "Error"
1141msgid "Hide Errors"1436msgid "Hide Errors"
1142msgstr "Sembunyikan Ralat"1437msgstr "Sembunyikan Ralat"
11431438
1144#: ../js/ui/lookingGlass.js:7071439#: js/ui/lookingGlass.js:694 js/ui/lookingGlass.js:753
1145#: ../js/ui/lookingGlass.js:767
1146#| msgid "Error"
1147msgid "Show Errors"1440msgid "Show Errors"
1148msgstr "Tunjukkan Ralat"1441msgstr "Tunjukkan Ralat"
11491442
1150#: ../js/ui/lookingGlass.js:7161443#: js/ui/lookingGlass.js:703
1151#: ../js/ui/status/location.js:71
1152#: ../js/ui/status/location.js:176
1153msgid "Enabled"1444msgid "Enabled"
1154msgstr "Dibolehkan"1445msgstr "Dibolehkan"
11551446
1156#. Translators: this is for a network device that cannot be activated
1157#. because it's disabled by rfkill (airplane mode) */
1158#. translators:1447#. translators:
1159#. * The device has been disabled1448#. * The device has been disabled
1160#: ../js/ui/lookingGlass.js:7191449#: js/ui/lookingGlass.js:706 subprojects/gvc/gvc-mixer-control.c:1864
1161#: ../js/ui/status/location.js:179
1162#: ../js/ui/status/network.js:592
1163#: ../src/gvc/gvc-mixer-control.c:1830
1164msgid "Disabled"1450msgid "Disabled"
1165msgstr "Dilumpuhkan"1451msgstr "Dilumpuhkan"
11661452
1167#: ../js/ui/lookingGlass.js:7211453#: js/ui/lookingGlass.js:708
1168msgid "Error"1454msgid "Error"
1169msgstr "Ralat"1455msgstr "Ralat"
11701456
1171#: ../js/ui/lookingGlass.js:7231457#: js/ui/lookingGlass.js:710
1172msgid "Out of date"1458msgid "Out of date"
1173msgstr "Lapuk"1459msgstr "Lapuk"
11741460
1175#: ../js/ui/lookingGlass.js:7251461#: js/ui/lookingGlass.js:712
1176msgid "Downloading"1462msgid "Downloading"
1177msgstr "Memuat turun"1463msgstr "Memuat turun"
11781464
1179#: ../js/ui/lookingGlass.js:7491465#: js/ui/lookingGlass.js:735
1180msgid "View Source"1466msgid "View Source"
1181msgstr "Lihat Sumber"1467msgstr "Lihat Sumber"
1182
1183#: ../js/ui/lookingGlass.js:758
1184msgid "Web Page"
1185msgstr "Laman Web"
1186
1187#: ../js/ui/messageTray.js:1326
1188msgid "Open"
1189msgstr "Buka"
1190
1191#: ../js/ui/messageTray.js:1333
1192msgid "Remove"
1193msgstr "Buang"
1194
1195#: ../js/ui/messageTray.js:1630
1196msgid "Notifications"
1197msgstr "Makluman"
1198
1199#: ../js/ui/messageTray.js:1637
1200msgid "Clear Messages"
1201msgstr ""
1202
1203#: ../js/ui/messageTray.js:1656
1204#| msgid "Notifications"
1205msgid "Notification Settings"
1206msgstr "Tetapan Makluman"
1207
1208#: ../js/ui/messageTray.js:1709
1209msgid "Tray Menu"
1210msgstr ""
1211
1212#: ../js/ui/messageTray.js:1926
1213msgid "No Messages"
1214msgstr ""
12151468
1216#: ../js/ui/messageTray.js:19681469#: js/ui/lookingGlass.js:744
1217msgid "Message Tray"1470msgid "Web Page"
1218msgstr ""1471msgstr "Laman Sesawang"
12191472
1220#: ../js/ui/messageTray.js:29711473#: js/ui/messageTray.js:1465
1221msgid "System Information"1474msgid "System Information"
1222msgstr "Maklumat Sistem"1475msgstr "Maklumat Sistem"
12231476
1224#: ../js/ui/notificationDaemon.js:5131477#: js/ui/mpris.js:179
1225#: ../src/shell-app.c:4251478msgid "Unknown artist"
1226#| msgid "Unknown"1479msgstr "Artis tidak diketahui"
1227msgctxt "program"
1228msgid "Unknown"
1229msgstr "Tidak diketahui"
12301480
1231#: ../js/ui/overviewControls.js:4821481#: js/ui/mpris.js:180
1232#: ../js/ui/screenShield.js:1511482msgid "Unknown title"
1233#, javascript-format1483msgstr "Tajuk tidak diketahui"
1234msgid "%d new message"
1235msgid_plural "%d new messages"
1236msgstr[0] ""
1237msgstr[1] ""
12381484
1239#: ../js/ui/overview.js:841485#: js/ui/overview.js:73
1240msgid "Undo"1486msgid "Undo"
1241msgstr "Buat asal"1487msgstr "Buat asal"
12421488
1243#: ../js/ui/overview.js:1241489#. Translators: This is the main view to select
1490#. activities. See also note for "Activities" string.
1491#: js/ui/overview.js:100
1244msgid "Overview"1492msgid "Overview"
1245msgstr ""1493msgstr "Selayang Pandang"
12461494
1247#. Translators: this is the text displayed1495#. Translators: this is the text displayed
1248#. in the search entry when no search is1496#. in the search entry when no search is
1249#. active; it should not exceed ~301497#. active; it should not exceed ~30
1250#. characters. */1498#. characters.
1251#: ../js/ui/overview.js:2461499#: js/ui/overview.js:230
1252#| msgid "Type to search..."
1253msgid "Type to search…"1500msgid "Type to search…"
1254msgstr "Taip untuk cari..."1501msgstr "Taip untuk gelintar..."
1502
1503#: js/ui/padOsd.js:93
1504msgid "New shortcut…"
1505msgstr "Pintasan baharu..."
1506
1507#: js/ui/padOsd.js:142
1508msgid "Application defined"
1509msgstr "Aplikasi ditakrifkan"
1510
1511#: js/ui/padOsd.js:143
1512msgid "Show on-screen help"
1513msgstr "Tunjuk bantuan atas-skrin"
1514
1515#: js/ui/padOsd.js:144
1516msgid "Switch monitor"
1517msgstr "Tukar monitor"
12551518
1256#: ../js/ui/panel.js:5151519#: js/ui/padOsd.js:145
1257#| msgid "Quit %s"1520msgid "Assign keystroke"
1521msgstr "Umpuk ketukan kekunci"
1522
1523#: js/ui/padOsd.js:210
1524msgid "Done"
1525msgstr "Selesai"
1526
1527#: js/ui/padOsd.js:728
1528msgid "Edit…"
1529msgstr "Sunting..."
1530
1531#: js/ui/padOsd.js:769 js/ui/padOsd.js:874
1532msgid "None"
1533msgstr "Tiada"
1534
1535#: js/ui/padOsd.js:828
1536msgid "Press a button to configure"
1537msgstr "Tekan satu butang untuk dikonfigurkan"
1538
1539#: js/ui/padOsd.js:829
1540msgid "Press Esc to exit"
1541msgstr "Tekan Esc untuk keluar"
1542
1543#: js/ui/padOsd.js:832
1544msgid "Press any key to exit"
1545msgstr "Tekan mana-mana kekunci untuk keluar"
1546
1547#: js/ui/panel.js:110
1258msgid "Quit"1548msgid "Quit"
1259msgstr "Berhenti"1549msgstr "Keluar"
12601550
1261#. Translators: If there is no suitable word for "Activities"1551#. Translators: If there is no suitable word for "Activities"
1262#. in your language, you can use the word for "Overview". */1552#. in your language, you can use the word for "Overview".
1263#: ../js/ui/panel.js:5671553#: js/ui/panel.js:427
1264msgid "Activities"1554msgid "Activities"
1265msgstr "Aktiviti"1555msgstr "Aktiviti-Aktiviti"
12661556
1267#: ../js/ui/panel.js:9181557#: js/ui/panel.js:700
1268msgid "Top Bar"1558msgctxt "System menu in the top bar"
1269msgstr "Bar Atas"1559msgid "System"
1560msgstr "Sistem"
12701561
1271#: ../js/ui/popupMenu.js:2691562#: js/ui/panel.js:819
1272msgid "toggle-switch-us"1563msgid "Top Bar"
1273msgstr "toggle-switch-us"1564msgstr "Palang Atas"
12741565
1275#: ../js/ui/runDialog.js:701566#: js/ui/runDialog.js:58
1276#| msgid "Please enter a command:"
1277msgid "Enter a Command"1567msgid "Enter a Command"
1278msgstr "Masukkan arahan"1568msgstr "Masukkan satu Perintah"
12791569
1280#: ../js/ui/runDialog.js:1101570#: js/ui/runDialog.js:99 js/ui/windowMenu.js:167
1281#: ../js/ui/windowMenu.js:120
1282msgid "Close"1571msgid "Close"
1283msgstr ""1572msgstr "Tutup"
12841573
1285#: ../js/ui/runDialog.js:2771574#: js/ui/runDialog.js:262
1286#| msgid "Restart"1575msgid "Restart is not available on Wayland"
1576msgstr "Mula Semula tidak tersedia dalam Wayland"
1577
1578#: js/ui/runDialog.js:267
1287msgid "Restarting…"1579msgid "Restarting…"
1288msgstr "Memulakan semula..."1580msgstr "Memulakan semula..."
12891581
1290#. Translators: This is a time format for a date in1582#. Translators: This is a time format for a date in
1291#. long format */1583#. long format
1292#: ../js/ui/screenShield.js:881584#: js/ui/screenShield.js:74
1293#| msgctxt "calendar heading"
1294#| msgid "%A, %B %d"
1295msgid "%A, %B %d"1585msgid "%A, %B %d"
1296msgstr "%A, %B %d"1586msgstr "%A, %B %d"
12971587
1298#: ../js/ui/screenShield.js:1531588#: js/ui/screenShield.js:130
1589#, javascript-format
1590msgid "%d new message"
1591msgid_plural "%d new messages"
1592msgstr[0] "%d mesej baharu"
1593
1594#: js/ui/screenShield.js:132
1299#, javascript-format1595#, javascript-format
1300#| msgid "Notifications"
1301msgid "%d new notification"1596msgid "%d new notification"
1302msgid_plural "%d new notifications"1597msgid_plural "%d new notifications"
1303msgstr[0] "%d notifikasi baharu"1598msgstr[0] "%d pemberitahuan baharu"
1304msgstr[1] "%d notifikasi baharu"
13051599
1306#: ../js/ui/screenShield.js:4721600#: js/ui/screenShield.js:447 js/ui/status/system.js:260
1307#: ../js/ui/status/system.js:345
1308msgid "Lock"1601msgid "Lock"
1309msgstr ""1602msgstr "Kunci"
13101603
1311#: ../js/ui/screenShield.js:7061604#: js/ui/screenShield.js:711
1312msgid "GNOME needs to lock the screen"1605msgid "GNOME needs to lock the screen"
1313msgstr ""1606msgstr "GNOME perlu mengunci skrin ini"
13141607
1315#: ../js/ui/screenShield.js:8331608#. We could not become modal, so we can't activate the
1316#: ../js/ui/screenShield.js:13041609#. screenshield. The user is probably very upset at this
1610#. point, but any application using global grabs is broken
1611#. Just tell him to stop using this app
1612#.
1613#. XXX: another option is to kick the user into the gdm login
1614#. screen, where we're not affected by grabs
1615#: js/ui/screenShield.js:825 js/ui/screenShield.js:1299
1317msgid "Unable to lock"1616msgid "Unable to lock"
1318msgstr ""1617msgstr "Gagal dikuncikan"
13191618
1320#: ../js/ui/screenShield.js:8341619#: js/ui/screenShield.js:826 js/ui/screenShield.js:1300
1321#: ../js/ui/screenShield.js:1305
1322#| msgid "No such application"
1323msgid "Lock was blocked by an application"1620msgid "Lock was blocked by an application"
1324msgstr "Kunci disekat oleh suatu aplikasi"1621msgstr "Kunci disekat oleh suatu aplikasi"
13251622
1326#: ../js/ui/search.js:5941623#: js/ui/search.js:668
1327#| msgid "Searching..."
1328msgid "Searching…"1624msgid "Searching…"
1329msgstr "Mencari..."1625msgstr "Menggelintar..."
13301626
1331#: ../js/ui/search.js:5961627#: js/ui/search.js:670
1332#| msgid "No matching results."
1333msgid "No results."1628msgid "No results."
1334msgstr "Tiada padanan."1629msgstr "Tiada padanan."
13351630
1336#: ../js/ui/shellEntry.js:251631#: js/ui/search.js:795
1632#, javascript-format
1633msgid "%d more"
1634msgid_plural "%d more"
1635msgstr[0] "%d lagi"
1636
1637#: js/ui/shellEntry.js:20
1337msgid "Copy"1638msgid "Copy"
1338msgstr ""1639msgstr "Salin"
13391640
1340#: ../js/ui/shellEntry.js:301641#: js/ui/shellEntry.js:25
1341msgid "Paste"1642msgid "Paste"
1342msgstr ""1643msgstr "Tampal"
13431644
1344#: ../js/ui/shellEntry.js:971645#: js/ui/shellEntry.js:91
1345msgid "Show Text"1646msgid "Show Text"
1346msgstr ""1647msgstr "Tunjuk Teks"
13471648
1348#: ../js/ui/shellEntry.js:991649#: js/ui/shellEntry.js:93
1349#| msgid "Large Text"
1350msgid "Hide Text"1650msgid "Hide Text"
1351msgstr "Sembunyikan Teks"1651msgstr "Sembunyikan Teks"
13521652
1353#: ../js/ui/shellMountOperation.js:3701653#: js/ui/shellMountOperation.js:305
1354#| msgid "Password:"1654msgid "Hidden Volume"
1655msgstr "Volum Tersembunyi"
1656
1657#: js/ui/shellMountOperation.js:308
1658msgid "Windows System Volume"
1659msgstr "Volum Sistem Tetingkap"
1660
1661#: js/ui/shellMountOperation.js:311
1662msgid "Uses Keyfiles"
1663msgstr "Guna Fail Kunci"
1664
1665#. Translators: %s is the Disks application
1666#: js/ui/shellMountOperation.js:317
1667#, javascript-format
1668msgid ""
1669"To unlock a volume that uses keyfiles, use the <i>%s</i> utility instead."
1670msgstr ""
1671"Untuk menyahkunci volum yang menggunakan fail kunci, gunakan utiliti <i>%s</"
1672"i> sebagai ganti."
1673
1674#: js/ui/shellMountOperation.js:324
1675msgid "PIM Number"
1676msgstr "Nombor PIM"
1677
1678#: js/ui/shellMountOperation.js:342
1679msgid "The PIM must be a number or empty."
1680msgstr "PIM mestilah nombor atau dikosongkan."
1681
1682#: js/ui/shellMountOperation.js:353
1355msgid "Password"1683msgid "Password"
1356msgstr "Katalaluan"1684msgstr "Kata Laluan"
13571685
1358#: ../js/ui/shellMountOperation.js:3911686#: js/ui/shellMountOperation.js:383
1359#| msgid "Password:"
1360msgid "Remember Password"1687msgid "Remember Password"
1361msgstr "Ingatkan Katalaluan"1688msgstr "Ingat Kata Laluan"
1689
1690#. Translators: %s is the Disks application
1691#: js/ui/shellMountOperation.js:407
1692#, javascript-format
1693msgid "Open %s"
1694msgstr "Buka %s"
1695
1696#. Translators: %s is the Disks application
1697#: js/ui/shellMountOperation.js:479
1698#, javascript-format
1699msgid "Unable to start %s"
1700msgstr "Gagal memulakan %s"
1701
1702#. Translators: %s is the Disks application
1703#: js/ui/shellMountOperation.js:481
1704#, javascript-format
1705msgid "Couldn’t find the %s application"
1706msgstr "Tidak dapat mencari aplikasi %s"
13621707
1363#: ../js/ui/status/accessibility.js:421708#: js/ui/status/accessibility.js:35
1364#| msgid "Visibility"
1365msgid "Accessibility"1709msgid "Accessibility"
1366msgstr "Ketersampaian"1710msgstr "Kebolehcapaian"
13671711
1368#: ../js/ui/status/accessibility.js:571712#: js/ui/status/accessibility.js:50
1369msgid "Zoom"1713msgid "Zoom"
1370msgstr "Zum"1714msgstr "Zum"
13711715
1372#: ../js/ui/status/accessibility.js:641716#: js/ui/status/accessibility.js:57
1373msgid "Screen Reader"1717msgid "Screen Reader"
1374msgstr "Pembaca Skrin"1718msgstr "Pembaca Skrin"
13751719
1376#: ../js/ui/status/accessibility.js:681720#: js/ui/status/accessibility.js:61
1377#| msgid "Screen Reader"
1378msgid "Screen Keyboard"1721msgid "Screen Keyboard"
1379msgstr "Papan Kekunci Skrin"1722msgstr "Papan Kekunci Skrin"
13801723
1381#: ../js/ui/status/accessibility.js:721724#: js/ui/status/accessibility.js:65
1382msgid "Visual Alerts"1725msgid "Visual Alerts"
1383msgstr "Awasan Visual"1726msgstr "Amaran Visual"
13841727
1385#: ../js/ui/status/accessibility.js:751728#: js/ui/status/accessibility.js:68
1386msgid "Sticky Keys"1729msgid "Sticky Keys"
1387msgstr "Kekunci Sticky"1730msgstr "Kekunci Sticky"
13881731
1389#: ../js/ui/status/accessibility.js:781732#: js/ui/status/accessibility.js:71
1390msgid "Slow Keys"1733msgid "Slow Keys"
1391msgstr "Kekunci Lembab"1734msgstr "Kekunci Lembab"
13921735
1393# Kekunci untuk OKU yang tangan bergetar.1736# Kekunci untuk OKU yang tangan bergetar.
1394#: ../js/ui/status/accessibility.js:811737#: js/ui/status/accessibility.js:74
1395msgid "Bounce Keys"1738msgid "Bounce Keys"
1396msgstr "Kekunci Lantun"1739msgstr "Kekunci Lantun"
13971740
1398#: ../js/ui/status/accessibility.js:841741#: js/ui/status/accessibility.js:77
1399msgid "Mouse Keys"1742msgid "Mouse Keys"
1400msgstr "Kekunci Tetikus"1743msgstr "Kekunci Tetikus"
14011744
1402# contrast boleh juga diterjemah "beza jelas", tapi "senjang" (/sénjang/) dipilih kerana lebih pendek.1745# contrast boleh juga diterjemah "beza jelas", tapi "senjang" (/sénjang/) dipilih kerana lebih pendek.
1403#: ../js/ui/status/accessibility.js:1441746#: js/ui/status/accessibility.js:135
1404msgid "High Contrast"1747msgid "High Contrast"
1405msgstr "Kontras Tinggi"1748msgstr "Beza Jelas Tinggi"
14061749
1407#: ../js/ui/status/accessibility.js:1931750#: js/ui/status/accessibility.js:177
1408msgid "Large Text"1751msgid "Large Text"
1409msgstr "Teks Besar"1752msgstr "Teks Besar"
14101753
1411#: ../js/ui/status/bluetooth.js:491754#: js/ui/status/bluetooth.js:39
1412msgid "Bluetooth"1755msgid "Bluetooth"
1413msgstr "Bluetooth"1756msgstr "Bluetooth"
14141757
1415#: ../js/ui/status/bluetooth.js:511758#: js/ui/status/bluetooth.js:48 js/ui/status/network.js:590
1416#: ../js/ui/status/network.js:178
1417#: ../js/ui/status/network.js:360
1418#: ../js/ui/status/network.js:1281
1419#: ../js/ui/status/network.js:1392
1420#: ../js/ui/status/rfkill.js:86
1421#: ../js/ui/status/rfkill.js:114
1422msgid "Turn Off"
1423msgstr ""
1424
1425#: ../js/ui/status/bluetooth.js:54
1426msgid "Bluetooth Settings"1759msgid "Bluetooth Settings"
1427msgstr "Tetapan Bluetooth"1760msgstr "Tetapan Bluetooth"
14281761
1429#: ../js/ui/status/bluetooth.js:1041762#. Translators: this is the number of connected bluetooth devices
1763#: js/ui/status/bluetooth.js:128
1430#, javascript-format1764#, javascript-format
1431#| msgid "Connected (private)"1765msgid "%d Connected"
1432msgid "%d Connected Device"1766msgid_plural "%d Connected"
1433msgid_plural "%d Connected Devices"1767msgstr[0] "%d Bersambung"
1434msgstr[0] "%d Peranti Tersambung"1768
1435msgstr[1] "%d Peranti Tersambung"1769#: js/ui/status/bluetooth.js:130
14361770msgid "Off"
1437#: ../js/ui/status/bluetooth.js:1061771msgstr "Tutup"
1438#: ../js/ui/status/network.js:13091772
1439#| msgid "Connect"1773#: js/ui/status/bluetooth.js:132
1440msgid "Not Connected"1774msgid "On"
1441msgstr "Tidak Disambung"1775msgstr "Buka"
14421776
1443#: ../js/ui/status/brightness.js:441777#: js/ui/status/brightness.js:38
1444msgid "Brightness"1778msgid "Brightness"
1445msgstr ""1779msgstr "Kecerahan"
1780
1781#: js/ui/status/dwellClick.js:13
1782msgid "Single Click"
1783msgstr "Seklik"
1784
1785#: js/ui/status/dwellClick.js:18
1786msgid "Double Click"
1787msgstr "Dwi-Klik"
14461788
1447#: ../js/ui/status/keyboard.js:5471789#: js/ui/status/dwellClick.js:23
1790msgid "Drag"
1791msgstr "Seret"
1792
1793#: js/ui/status/dwellClick.js:28
1794msgid "Secondary Click"
1795msgstr "Klik Sekunder"
1796
1797#: js/ui/status/dwellClick.js:37
1798msgid "Dwell Click"
1799msgstr "Klik Inap"
1800
1801#: js/ui/status/keyboard.js:814
1802msgid "Keyboard"
1803msgstr "Papan kekunci"
1804
1805#: js/ui/status/keyboard.js:836
1448msgid "Show Keyboard Layout"1806msgid "Show Keyboard Layout"
1449msgstr "Tunjuk Susun Atur Papan Kekunci"1807msgstr "Tunjuk Susun Atur Papan Kekunci"
14501808
1451#: ../js/ui/status/location.js:651809#: js/ui/status/location.js:64 js/ui/status/location.js:173
1452#| msgid "Notifications"1810msgid "Location Enabled"
1453msgid "Location"1811msgstr "Lokasi Dibenarkan"
1454msgstr "Lokasi"
14551812
1456#: ../js/ui/status/location.js:721813#: js/ui/status/location.js:65 js/ui/status/location.js:174
1457#: ../js/ui/status/location.js:177
1458#| msgid "Disabled"
1459msgid "Disable"1814msgid "Disable"
1460msgstr "Lumpuhkan"1815msgstr "Lumpuhkan"
14611816
1462#: ../js/ui/status/location.js:731817#: js/ui/status/location.js:66
1463#| msgid "Power Settings"
1464msgid "Privacy Settings"1818msgid "Privacy Settings"
1465msgstr "Tetapan Privasi"1819msgstr "Tetapan Kerahsiaan"
14661820
1467#: ../js/ui/status/location.js:1761821#: js/ui/status/location.js:172
1468msgid "In Use"1822msgid "Location In Use"
1469msgstr ""1823msgstr "Lokasi Digunakan"
1824
1825#: js/ui/status/location.js:176
1826msgid "Location Disabled"
1827msgstr "Lokasi Dilumpuhkan"
14701828
1471#: ../js/ui/status/location.js:1801829#: js/ui/status/location.js:177
1472#| msgid "Enabled"
1473msgid "Enable"1830msgid "Enable"
1474msgstr "Bolehkan"1831msgstr "Benarkan"
1832
1833#. Translators: %s is an application name
1834#: js/ui/status/location.js:356
1835#, javascript-format
1836msgid "Give %s access to your location?"
1837msgstr "Berikan %s capaian ke lokasi anda?"
14751838
1476#: ../js/ui/status/network.js:1011839#: js/ui/status/location.js:357
1840msgid "Location access can be changed at any time from the privacy settings."
1841msgstr ""
1842"Capaian lokasi boleh diubah pada bila-bila masa melalui tetapan kerahsiaan."
1843
1844#: js/ui/status/network.js:66
1477msgid "<unknown>"1845msgid "<unknown>"
1478msgstr "<unknown>"1846msgstr "<tidak diketahui>"
14791847
1480#: ../js/ui/status/network.js:4571848#. Translators: %s is a network identifier
1481#: ../js/ui/status/network.js:13071849#: js/ui/status/network.js:420 js/ui/status/network.js:1303
1482#: ../js/ui/status/network.js:15111850#, javascript-format
1483#| msgid "Offline"1851msgid "%s Off"
1484msgid "Off"1852msgstr "%s Mati"
1485msgstr "Tutup"
14861853
1487#: ../js/ui/status/network.js:4591854#. Translators: %s is a network identifier
1488#| msgid "Connect"1855#: js/ui/status/network.js:423
1489msgid "Connected"1856#, javascript-format
1490msgstr "Tersambung"1857msgid "%s Connected"
1858msgstr "%s Bersambung"
14911859
1492#. Translators: this is for network devices that are physically present but are not1860#. Translators: this is for network devices that are physically present but are not
1493#. under NetworkManager's control (and thus cannot be used in the menu) */1861#. under NetworkManager's control (and thus cannot be used in the menu);
1494#: ../js/ui/status/network.js:4631862#. %s is a network identifier
1495#| msgid "unmanaged"1863#: js/ui/status/network.js:428
1496msgid "Unmanaged"1864#, javascript-format
1497msgstr "Tidak diuruskan"1865msgid "%s Unmanaged"
14981866msgstr "%s Tidak Diurus"
1499#: ../js/ui/status/network.js:4651867
1500#| msgid "disconnecting..."1868#. Translators: %s is a network identifier
1501msgid "Disconnecting"1869#: js/ui/status/network.js:431
1502msgstr "Memutuskan"1870#, javascript-format
15031871msgid "%s Disconnecting"
1504#: ../js/ui/status/network.js:4711872msgstr "%s Terputus"
1505#: ../js/ui/status/network.js:13011873
1506#| msgid "Connection"1874#. Translators: %s is a network identifier
1507msgid "Connecting"1875#: js/ui/status/network.js:438 js/ui/status/network.js:1295
1508msgstr "Menyambung"1876#, javascript-format
15091877msgid "%s Connecting"
1510#. Translators: this is for network connections that require some kind of key or password */1878msgstr "%s Menyambung"
1511#: ../js/ui/status/network.js:4741879
1512#| msgid "authentication required"1880#. Translators: this is for network connections that require some kind of key or password; %s is a network identifier
1513msgid "Authentication required"1881#: js/ui/status/network.js:441
1514msgstr "Pengesahan diperlukan"1882#, javascript-format
1883msgid "%s Requires Authentication"
1884msgstr "%s Memerlukan Pengesahihan"
15151885
1516#. Translators: this is for devices that require some kind of firmware or kernel1886#. Translators: this is for devices that require some kind of firmware or kernel
1517#. module, which is missing */1887#. module, which is missing; %s is a network identifier
1518#: ../js/ui/status/network.js:4821888#: js/ui/status/network.js:449
1519#| msgid "firmware missing"1889#, javascript-format
1520msgid "Firmware missing"1890msgid "Firmware Missing For %s"
1521msgstr "Perisian tegar tidak dijumpai"1891msgstr "Perisian Tegar Untuk %s Hilang"
15221892
1523#. Translators: this is for a network device that cannot be activated (for example it1893#. Translators: this is for a network device that cannot be activated (for example it
1524#. is disabled by rfkill, or it has no coverage */1894#. is disabled by rfkill, or it has no coverage; %s is a network identifier
1525#: ../js/ui/status/network.js:4861895#: js/ui/status/network.js:453
1526msgid "Unavailable"1896#, javascript-format
1527msgstr "Tiada"1897msgid "%s Unavailable"
1898msgstr "%s Tidak Tersedia"
15281899
1529#: ../js/ui/status/network.js:4881900#. Translators: %s is a network identifier
1530#: ../js/ui/status/network.js:16951901#: js/ui/status/network.js:456
1531msgid "Connection failed"1902#, javascript-format
1532msgstr "Gagal menyambung"1903msgid "%s Connection Failed"
1904msgstr "%s Sambungan Mengalami Kegagalan"
15331905
1534#: ../js/ui/status/network.js:5041906#: js/ui/status/network.js:468
1535#| msgid "Sound Settings"
1536msgid "Wired Settings"1907msgid "Wired Settings"
1537msgstr "Tetapan Berwayar"1908msgstr "Tetapan Berwayar"
15381909
1539#: ../js/ui/status/network.js:5461910#: js/ui/status/network.js:511
1540#: ../js/ui/status/network.js:624
1541#| msgid "Mobile broadband"
1542msgid "Mobile Broadband Settings"1911msgid "Mobile Broadband Settings"
1543msgstr "Tetapan Jalurlebar Mudahalih"1912msgstr "Tetapan Jalur Lebar Mudah Alih"
1913
1914#. Translators: %s is a network identifier
1915#: js/ui/status/network.js:558 js/ui/status/network.js:1300
1916#, javascript-format
1917msgid "%s Hardware Disabled"
1918msgstr "%s Perkakasan Dilumpuhkan"
15441919
1545#: ../js/ui/status/network.js:5881920#. Translators: this is for a network device that cannot be activated
1546#: ../js/ui/status/network.js:13051921#. because it's disabled by rfkill (airplane mode); %s is a network identifier
1547#| msgid "hardware disabled"1922#: js/ui/status/network.js:562
1548msgid "Hardware Disabled"1923#, javascript-format
1549msgstr "Perkakas dilumpuhkan"1924msgid "%s Disabled"
1925msgstr "%s Dilumpuhkan"
15501926
1551#: ../js/ui/status/network.js:632
1552msgid "Use as Internet connection"
1553msgstr ""
The diff has been truncated for viewing.

Subscribers

People subscribed via source and target branches